Home | History | Annotate | Download | only in hardware_legacy
      1 
      2 #include "wifi_hal.h"
      3 
      4 #ifndef __WIFI_HAL_RTT_H__
      5 #define __WIFI_HAL_RTT_H__
      6 
      7 /* channel operating width */
      8 
      9 /* Ranging status */
     10 typedef enum {
     11     RTT_STATUS_SUCCESS,
     12     RTT_STATUS_FAILURE,
     13     RTT_STATUS_FAIL_NO_RSP,
     14     RTT_STATUS_FAIL_REJECTED,
     15     RTT_STATUS_FAIL_NOT_SCHEDULED_YET,
     16     RTT_STATUS_FAIL_TM_TIMEOUT,
     17     RTT_STATUS_FAIL_AP_ON_DIFF_CHANNEL,
     18     RTT_STATUS_FAIL_NO_CAPABILITY,
     19     RTT_STATUS_ABORTED
     20 } wifi_rtt_status;
     21 
     22 
     23 /* RTT Type */
     24 typedef enum {
     25     RTT_TYPE_INVALID,
     26     RTT_TYPE_1_SIDED,
     27     RTT_TYPE_2_SIDED,
     28     RTT_TYPE_AUTO,              // Two sided if remote supports; one sided otherwise
     29 } wifi_rtt_type;
     30 
     31 /* RTT configuration */
     32 typedef struct {
     33     mac_addr addr;                     // peer device mac address
     34     wifi_rtt_type type;                // optional - rtt type hint. RTT_TYPE_INVALID implies best effort
     35     wifi_peer_type peer;               // optional - peer device hint (STA, P2P, AP)
     36     wifi_channel_info channel;         // Required for STA-AP mode, optional for P2P, NBD etc.
     37     byte continuous;                   // 0 = single shot or 1 = continuous ranging
     38     unsigned interval;                 // interval of RTT measurement (unit ms) when continuous = true
     39     unsigned num_measurements;         // total number of RTT measurements when continuous = true
     40     unsigned num_samples_per_measurement; // num of packets in each RTT measurement
     41     unsigned num_retries_per_measurement; // num of retries if sampling fails
     42 } wifi_rtt_config;
     43 
     44 /* RTT results */
     45 typedef struct {
     46     mac_addr addr;               // device mac address
     47     unsigned measurement_num;    // measurement number in case of continuous ranging
     48     wifi_rtt_status status;      // ranging status
     49     wifi_rtt_type type;          // RTT type
     50     wifi_peer_type peer;         // peer device type (P2P, AP)
     51     wifi_channel_info channel;   // channel information
     52     wifi_rssi rssi;              // rssi in 0.5 dB steps e.g. 143 implies -71.5 dB
     53     wifi_rssi rssi_spread;       // rssi spread in 0.5 dB steps e.g. 5 implies 2.5 dB spread (optional)
     54     wifi_rate tx_rate;           // TX rate
     55     wifi_timespan rtt;           // round trip time in nanoseconds
     56     wifi_timespan rtt_sd;        // rtt standard deviation in nanoseconds
     57     wifi_timespan rtt_spread;    // difference between max and min rtt times recorded
     58     int distance;                // distance in cm (optional)
     59     int distance_sd;             // standard deviation in cm (optional)
     60     int distance_spread;         // difference between max and min distance recorded (optional)
     61     wifi_timestamp ts;           // time of the measurement (in microseconds since boot)
     62 } wifi_rtt_result;
     63 
     64 /* RTT result callback */
     65 typedef struct {
     66     void (*on_rtt_results) (wifi_request_id id, unsigned num_results, wifi_rtt_result rtt_result[]);
     67 } wifi_rtt_event_handler;
     68 
     69 /* API to request RTT measurement */
     70 wifi_error wifi_rtt_range_request(wifi_request_id id, wifi_interface_handle iface,
     71         unsigned num_rtt_config, wifi_rtt_config rtt_config[], wifi_rtt_event_handler handler);
     72 
     73 /* API to cancel RTT measurements */
     74 wifi_error wifi_rtt_range_cancel(wifi_request_id id,  wifi_interface_handle iface,
     75         unsigned num_devices, mac_addr addr[]);
     76 
     77 /* NBD ranging channel map */
     78 typedef struct {
     79     wifi_channel availablity[32];           // specifies the channel map for each of the 16 TU windows
     80                                             // frequency of 0 => unspecified; which means firmware is
     81                                             // free to do whatever it wants in this window.
     82 } wifi_channel_map;
     83 
     84 /* API to start publishing the channel map on responder device in a NBD cluster.
     85    Responder device will take this request and schedule broadcasting the channel map
     86    in a NBD ranging attribute in a SDF. DE will automatically remove the ranging
     87    attribute from the OTA queue after number of DW specified by num_dw
     88    where Each DW is 512 TUs apart */
     89 wifi_error wifi_rtt_channel_map_set(wifi_request_id id,
     90         wifi_interface_handle iface, wifi_channel_map *params, unsigned num_dw);
     91 
     92 /* API to clear the channel map on the responder device in a NBD cluster.
     93    Responder device will cancel future ranging channel request, starting from next
     94    DW interval and will also stop broadcasting NBD ranging attribute in SDF */
     95 wifi_error wifi_rtt_channel_map_clear(wifi_request_id id,  wifi_interface_handle iface);
     96 
     97 /* RTT Capabilities */
     98 typedef struct {
     99    byte rtt_one_sided_supported;  // if 1-sided rtt data collection is supported
    100    byte rtt_11v_supported;        // if 11v rtt data collection is supported
    101    byte rtt_ftm_supported;        // if ftm rtt data collection is supported
    102 } wifi_rtt_capabilities;
    103 
    104 /*  RTT capabilities of the device */
    105 wifi_error wifi_get_rtt_capabilities(wifi_interface_handle iface, wifi_rtt_capabilities *capabilities);
    106 
    107 #endif
    108 
    109