gscan.h revision b80d32d2a1ba28f2b5dda7315e136a9ea14eda26
1b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde 2b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde#include "wifi_hal.h" 3b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde 4b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde#ifndef __WIFI_HAL_GSCAN_H__ 5b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde#define __WIFI_HAL_GSCAN_H__ 6b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde 7b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde/* AP Scans */ 8b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde 9b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapndetypedef enum { 10b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde WIFI_BAND_UNSPECIFIED, 11b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde WIFI_BAND_BG, // 2.4 GHz 12b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde WIFI_BAND_A, // 5 GHz without DFS 13b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde WIFI_BAND_A_WITH_DFS, // 5 GHz with DFS 14b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde WIFI_BAND_ABG, // 2.4 GHz + 5 GHz; no DFS 15b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde WIFI_BAND_ABG_WITH_DFS, // 2.4 GHz + 5 GHz with DFS 16b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde} wifi_band; 17b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde 18b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapndewifi_error wifi_get_valid_channels(wifi_interface_handle handle, 19b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde int band, int size, wifi_channel *channels, int *num); 20b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde 21b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapndetypedef struct { 22b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde int max_scan_cache_size; // in number of scan results?? 23b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde int max_scan_buckets; 24b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde int max_ap_cache_per_scan; 25b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde int max_rssi_sample_size; 26b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde int max_scan_reporting_threshold; // in number of scan results?? 27b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde int max_hotlist_aps; 28b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde int max_significant_wifi_change_aps; 29b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde} wifi_gscan_capabilities; 30b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde 31b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapndewifi_error wifi_get_gscan_capabilities(wifi_interface_handle handle, 32b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde wifi_gscan_capabilities *capabilities); 33b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde 34b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapndetypedef struct { 35b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde wifi_timestamp ts; // Time of discovery 36b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde char ssid[32+1]; // null terminated 37b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde mac_addr bssid; 38b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde wifi_channel channel; // channel frequency in MHz 39b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde wifi_rssi rssi; // in db 40b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde wifi_timespan rtt; // in nanoseconds 41b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde wifi_timespan rtt_sd; // standard deviation in rtt 42b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde 43b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde // other fields 44b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde} wifi_scan_result; 45b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde 46b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapndetypedef struct { 47b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde void (*on_scan_results_available) (wifi_request_id id, unsigned num_results_available); 48b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde} wifi_scan_result_handler; 49b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde 50b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapndetypedef struct { 51b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde wifi_channel channel; // frequency 52b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde int dwellTimeMs; // dwell time hint 53b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde int passive; // 0 => active, 1 => passive scan; ignored for DFS 54b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde /* Add channel class */ 55b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde} wifi_scan_channel_spec; 56b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde 57b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapndetypedef struct { 58b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde int bucket; // bucket index, 0 based 59b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde wifi_band band; // when UNSPECIFIED, use channel list 60b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde int period; // desired period, in millisecond; if this is too 61b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde // low, the firmware should choose to generate results as 62b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde // fast as it can instead of failing the command 63b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde byte report_events; // 1 => report events after each scan 64b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde int num_channels; 65b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde wifi_scan_channel_spec channels[8]; // channels to scan; these may include DFS channels 66b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde} wifi_scan_bucket_spec; 67b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde 68b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapndetypedef struct { 69b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde int base_period; // base timer period in ms 70b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde int max_ap_per_scan; 71b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde int report_threshold; // in %, when buffer is this much full, wake up AP 72b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde int num_buckets; // maximum 8 73b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde wifi_scan_bucket_spec buckets[8]; 74b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde} wifi_scan_cmd_params; 75b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde 76b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapndewifi_error wifi_start_gscan(wifi_request_id id, wifi_interface_handle iface, 77b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde wifi_scan_cmd_params params, wifi_scan_result_handler handler); 78b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapndewifi_error wifi_stop_gscan(wifi_request_id id, wifi_interface_handle iface); 79b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde 80b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapndewifi_error wifi_get_cached_gscan_results(wifi_interface_handle iface, byte flush, 81b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde wifi_scan_result *results, int *num); 82b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde 83b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde 84b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde/* BSSID Hotlist */ 85b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapndetypedef struct { 86b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde void (*on_hotlist_ap_found)(wifi_request_id id, 87b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde unsigned num_results, wifi_scan_result *results); 88b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde} wifi_hotlist_ap_found_handler; 89b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde 90b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapndetypedef struct { 91b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde mac_addr bssid; // AP BSSID 92b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde wifi_rssi low; // low threshold 93b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde wifi_rssi high; // high threshold 94b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde} ap_threshold_param; 95b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde 96b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapndetypedef struct { 97b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde int num; // max?? 98b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde ap_threshold_param bssids[64]; 99b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde} wifi_bssid_hotlist_params; 100b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde 101b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapndewifi_error wifi_set_bssid_hotlist(wifi_request_id id, wifi_interface_handle iface, 102b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde wifi_bssid_hotlist_params params, wifi_hotlist_ap_found_handler handler); 103b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapndewifi_error wifi_reset_bssid_hotlist(wifi_request_id id, wifi_interface_handle iface); 104b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde 105b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde/* Significant wifi change*/ 106b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde 107b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapndetypedef struct { 108b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde void (*on_significant_change)(wifi_request_id id, 109b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde unsigned num_results, wifi_scan_result *results); 110b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde} wifi_significant_change_handler; 111b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde 112b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapndetypedef struct { 113b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde int rssi_sample_size; // number of samples for averaging RSSI 114b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde int lost_ap_sample_size; // number of samples to confirm AP loss 115b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde int min_breaching; // number of APs breaching threshold 116b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde int num; // max 64 117b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde ap_threshold_param bssids[64]; 118b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde} wifi_significant_change_params; 119b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde 120b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapndewifi_error wifi_set_significant_change_handler(wifi_request_id id, wifi_interface_handle iface, 121b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde wifi_significant_change_params params, wifi_significant_change_handler handler); 122b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapndewifi_error wifi_reset_significant_change_handler(wifi_request_id id, wifi_interface_handle iface); 123b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde 124b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde#endif 125b80d32d2a1ba28f2b5dda7315e136a9ea14eda26Vinit Deshapnde 126