gscancommand.h revision ebd0927520b5a5190c4b7f1b4e98fcfaea79ba6e
18abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam/* 28abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam * Copyright (C) 2014 The Android Open Source Project 38abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam * 48abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam * Licensed under the Apache License, Version 2.0 (the "License"); 58abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam * you may not use this file except in compliance with the License. 68abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam * You may obtain a copy of the License at 78abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam * 88abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam * http://www.apache.org/licenses/LICENSE-2.0 98abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam * 108abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam * Unless required by applicable law or agreed to in writing, software 118abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam * distributed under the License is distributed on an "AS IS" BASIS, 128abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam * See the License for the specific language governing permissions and 148abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam * limitations under the License. 158abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam */ 168abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam 178abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#ifndef __WIFI_HAL_GSCAN_COMMAND_H__ 188abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#define __WIFI_HAL_GSCAN_COMMAND_H__ 198abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam 208abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#include "common.h" 218abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#include "cpp_bindings.h" 228abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#ifdef __GNUC__ 238abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#define PRINTF_FORMAT(a,b) __attribute__ ((format (printf, (a), (b)))) 248abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#define STRUCT_PACKED __attribute__ ((packed)) 258abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#else 268abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#define PRINTF_FORMAT(a,b) 278abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#define STRUCT_PACKED 288abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#endif 298abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#include "qca-vendor.h" 308abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#include "vendor_definitions.h" 318abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#include "gscan.h" 328abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam 338abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#ifdef __cplusplus 348abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyamextern "C" 358abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam{ 368abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#endif /* __cplusplus */ 378abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam 388abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyamtypedef struct{ 398abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam u32 status; 408abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam u32 num_channels; 418abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam wifi_channel channels[]; 428abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam} GScanGetValidChannelsRspParams; 438abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam 448abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyamtypedef struct{ 458abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam wifi_gscan_capabilities capabilities; 468abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam} GScanGetCapabilitiesRspParams; 478abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam 488abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyamtypedef struct{ 498abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam u8 more_data; 50261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam u32 num_cached_results; 51ebd0927520b5a5190c4b7f1b4e98fcfaea79ba6eAhmad Kholaif u32 cachedResultsStartingIndex; /* Used in filling cached scan results */ 52261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam int lastProcessedScanId; /* Last scan id in gscan cached results block */ 53261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam u32 wifiScanResultsStartingIndex; /* For the lastProcessedScanId */ 54261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam u32 max; /* max num of cached results specified by caller */ 55261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam wifi_cached_scan_results *cached_results; 568abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam} GScanGetCachedResultsRspParams; 578abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam 588abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyamtypedef struct { 598abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam int max_channels; 608abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam wifi_channel *channels; 618abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam int *number_channels; 628abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam} GScan_get_valid_channels_cb_data; 638abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam 648abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyamtypedef enum{ 658abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam eGScanRspParamsInvalid = 0, 668abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam eGScanGetValidChannelsRspParams, 678abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam eGScanGetCapabilitiesRspParams, 688abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam eGScanGetCachedResultsRspParams, 698abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam} eGScanRspRarams; 708abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam 718abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam/* Response and Event Callbacks */ 728abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyamtypedef struct { 738abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam /* Various Events Callback */ 74ebd0927520b5a5190c4b7f1b4e98fcfaea79ba6eAhmad Kholaif void (*get_capabilities)(wifi_gscan_capabilities capabilities); 758abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam void (*on_hotlist_ap_found)(wifi_request_id id, 768abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam unsigned num_results, wifi_scan_result *results); 77261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam void (*on_hotlist_ap_lost)(wifi_request_id id, 78261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam unsigned num_results, wifi_scan_result *results); 798abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam void (*on_significant_change)(wifi_request_id id, 808abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam unsigned num_results, 818abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam wifi_significant_change_result **results); 828abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam /* Reported when report_threshold is reached in scan cache */ 838abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam void (*on_scan_results_available) (wifi_request_id id, 848abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam unsigned num_results_available); 858abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam /* Reported when each probe response is received, if report_events 868abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam * enabled in wifi_scan_cmd_params 878abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam */ 888abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam void (*on_full_scan_result) (wifi_request_id id, wifi_scan_result *result); 898abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam /* Optional event - indicates progress of scanning statemachine */ 908abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam void (*on_scan_event) (wifi_scan_event event, unsigned status); 91261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam void (*on_hotlist_ssid_found)(wifi_request_id id, 92261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam unsigned num_results, wifi_scan_result *results); 93261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam void (*on_hotlist_ssid_lost)(wifi_request_id id, 944af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam unsigned num_results, wifi_scan_result *results); 95e5c1439eb5547b792fb47905c0977bbed8d5d8acAmarnath Hullur Subramanyam void (*on_pno_network_found)(wifi_request_id id, 96e5c1439eb5547b792fb47905c0977bbed8d5d8acAmarnath Hullur Subramanyam unsigned num_results, wifi_scan_result *results); 97e5c1439eb5547b792fb47905c0977bbed8d5d8acAmarnath Hullur Subramanyam void (*on_passpoint_network_found)(wifi_request_id id, 98c31ec43dd246e3322b7248351eef561bb756e495Amarnath Hullur Subramanyam int net_id, 99c31ec43dd246e3322b7248351eef561bb756e495Amarnath Hullur Subramanyam wifi_scan_result *result, 100c31ec43dd246e3322b7248351eef561bb756e495Amarnath Hullur Subramanyam int anqp_len, 101c31ec43dd246e3322b7248351eef561bb756e495Amarnath Hullur Subramanyam byte *anqp 102c31ec43dd246e3322b7248351eef561bb756e495Amarnath Hullur Subramanyam ); 1038abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam} GScanCallbackHandler; 1048abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam 1058abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyamclass GScanCommand: public WifiVendorCommand 1068abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam{ 1078abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyamprivate: 1088abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam GScanGetCapabilitiesRspParams *mGetCapabilitiesRspParams; 1098abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam GScanGetCachedResultsRspParams *mGetCachedResultsRspParams; 1108abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam GScanCallbackHandler mHandler; 1118abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam int mRequestId; 1128abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam int *mChannels; 1138abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam int mMaxChannels; 1148abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam int *mNumChannelsPtr; 1158abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam 1168abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyampublic: 1178abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam GScanCommand(wifi_handle handle, int id, u32 vendor_id, u32 subcmd); 1188abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam virtual ~GScanCommand(); 1198abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam 1208abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam /* This function implements creation of GSCAN specific Request 1218abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam * based on the request type. 1228abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam */ 1238abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam virtual int create(); 1248abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam virtual int requestResponse(); 1258abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam virtual int handleResponse(WifiEvent &reply); 1268abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam virtual int setCallbackHandler(GScanCallbackHandler nHandler); 1278abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam virtual void setMaxChannels(int max_channels); 1288abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam virtual void setChannels(int *channels); 1298abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam virtual void setNumChannelsPtr(int *num_channels); 1308abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam virtual int allocRspParams(eGScanRspRarams cmd); 1318abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam virtual void freeRspParams(eGScanRspRarams cmd); 1328abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam virtual void getGetCapabilitiesRspParams( 133ebd0927520b5a5190c4b7f1b4e98fcfaea79ba6eAhmad Kholaif wifi_gscan_capabilities *capabilities); 134ebd0927520b5a5190c4b7f1b4e98fcfaea79ba6eAhmad Kholaif virtual wifi_error copyCachedScanResults(int *numResults, 135261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam wifi_cached_scan_results *cached_results); 136ebd0927520b5a5190c4b7f1b4e98fcfaea79ba6eAhmad Kholaif virtual int gscan_get_cached_results(wifi_cached_scan_results *results, 1374af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam struct nlattr **tb_vendor); 138261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam virtual int allocCachedResultsTemp(int max, 139261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam wifi_cached_scan_results *results); 140ebd0927520b5a5190c4b7f1b4e98fcfaea79ba6eAhmad Kholaif virtual int gscan_parse_capabilities(struct nlattr **tbVendor); 1418abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam}; 1428abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam 1438abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#ifdef __cplusplus 1448abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam} 1458abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#endif /* __cplusplus */ 1468abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#endif 147