• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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