gscancommand.h revision 0562eeb882b461595155d6ef3e10e563b0e451f5
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 */
748abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    void (*on_hotlist_ap_found)(wifi_request_id id,
758abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam        unsigned num_results, wifi_scan_result *results);
76261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam    void (*on_hotlist_ap_lost)(wifi_request_id id,
77261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam        unsigned num_results, wifi_scan_result *results);
788abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    void (*on_significant_change)(wifi_request_id id,
798abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam                unsigned num_results,
808abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam                wifi_significant_change_result **results);
818abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    /* Reported when each probe response is received, if report_events
828abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam     * enabled in wifi_scan_cmd_params
838abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam     */
840562eeb882b461595155d6ef3e10e563b0e451f5Subhani Shaik    void (*on_full_scan_result) (wifi_request_id id, wifi_scan_result *result,
850562eeb882b461595155d6ef3e10e563b0e451f5Subhani Shaik                                                   unsigned buckets_scanned);
868abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    /* Optional event - indicates progress of scanning statemachine */
870562eeb882b461595155d6ef3e10e563b0e451f5Subhani Shaik    void (*on_scan_event) (wifi_request_id id, wifi_scan_event event);
88261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam    void (*on_hotlist_ssid_found)(wifi_request_id id,
89261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam            unsigned num_results, wifi_scan_result *results);
90261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam    void (*on_hotlist_ssid_lost)(wifi_request_id id,
914af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            unsigned num_results, wifi_scan_result *results);
92e5c1439eb5547b792fb47905c0977bbed8d5d8acAmarnath Hullur Subramanyam    void (*on_pno_network_found)(wifi_request_id id,
93e5c1439eb5547b792fb47905c0977bbed8d5d8acAmarnath Hullur Subramanyam            unsigned num_results, wifi_scan_result *results);
94e5c1439eb5547b792fb47905c0977bbed8d5d8acAmarnath Hullur Subramanyam    void (*on_passpoint_network_found)(wifi_request_id id,
95c31ec43dd246e3322b7248351eef561bb756e495Amarnath Hullur Subramanyam                                       int net_id,
96c31ec43dd246e3322b7248351eef561bb756e495Amarnath Hullur Subramanyam                                       wifi_scan_result *result,
97c31ec43dd246e3322b7248351eef561bb756e495Amarnath Hullur Subramanyam                                       int anqp_len,
98c31ec43dd246e3322b7248351eef561bb756e495Amarnath Hullur Subramanyam                                       byte *anqp
99c31ec43dd246e3322b7248351eef561bb756e495Amarnath Hullur Subramanyam                                       );
1008abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam} GScanCallbackHandler;
1018abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam
1028abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyamclass GScanCommand: public WifiVendorCommand
1038abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam{
1048abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyamprivate:
1058abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    GScanGetCapabilitiesRspParams       *mGetCapabilitiesRspParams;
1068abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    GScanGetCachedResultsRspParams      *mGetCachedResultsRspParams;
1078abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    GScanCallbackHandler                mHandler;
1088abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    int                                 mRequestId;
1098abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    int                                 *mChannels;
1108abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    int                                 mMaxChannels;
1118abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    int                                 *mNumChannelsPtr;
1128abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam
1138abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyampublic:
1148abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    GScanCommand(wifi_handle handle, int id, u32 vendor_id, u32 subcmd);
1158abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    virtual ~GScanCommand();
1168abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam
1178abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    /* This function implements creation of GSCAN specific Request
1188abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam     * based on  the request type.
1198abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam     */
1208abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    virtual int create();
1218abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    virtual int requestResponse();
1228abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    virtual int handleResponse(WifiEvent &reply);
1238abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    virtual void setMaxChannels(int max_channels);
1248abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    virtual void setChannels(int *channels);
1258abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    virtual void setNumChannelsPtr(int *num_channels);
1268abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    virtual int allocRspParams(eGScanRspRarams cmd);
1278abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    virtual void freeRspParams(eGScanRspRarams cmd);
1288abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    virtual void getGetCapabilitiesRspParams(
129ebd0927520b5a5190c4b7f1b4e98fcfaea79ba6eAhmad Kholaif                    wifi_gscan_capabilities *capabilities);
130ebd0927520b5a5190c4b7f1b4e98fcfaea79ba6eAhmad Kholaif    virtual wifi_error copyCachedScanResults(int *numResults,
131261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam                                             wifi_cached_scan_results *cached_results);
132ebd0927520b5a5190c4b7f1b4e98fcfaea79ba6eAhmad Kholaif    virtual int gscan_get_cached_results(wifi_cached_scan_results *results,
1334af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                                         struct nlattr **tb_vendor);
134261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam    virtual int allocCachedResultsTemp(int max,
135261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam                                       wifi_cached_scan_results *results);
136ebd0927520b5a5190c4b7f1b4e98fcfaea79ba6eAhmad Kholaif    virtual int gscan_parse_capabilities(struct nlattr **tbVendor);
1378abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam};
1388abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam
1398abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#ifdef __cplusplus
1408abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam}
1418abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#endif /* __cplusplus */
1428abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#endif
143