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