/* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef __WIFI_HAL_GSCAN_COMMAND_H__ #define __WIFI_HAL_GSCAN_COMMAND_H__ #include "common.h" #include "cpp_bindings.h" #ifdef __GNUC__ #define PRINTF_FORMAT(a,b) __attribute__ ((format (printf, (a), (b)))) #define STRUCT_PACKED __attribute__ ((packed)) #else #define PRINTF_FORMAT(a,b) #define STRUCT_PACKED #endif #include "qca-vendor.h" #include "vendor_definitions.h" #include "gscan.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ typedef struct{ u32 status; u32 num_channels; wifi_channel channels[]; } GScanGetValidChannelsRspParams; typedef struct{ u32 status; wifi_gscan_capabilities capabilities; } GScanGetCapabilitiesRspParams; typedef struct{ u32 status; } GScanStartRspParams; typedef struct{ u32 status; } GScanStopRspParams; typedef struct{ u32 status; } GScanSetBssidHotlistRspParams; typedef struct{ u32 status; } GScanResetBssidHotlistRspParams; typedef struct{ u8 more_data; u32 num_results; wifi_scan_result *results; } GScanGetCachedResultsRspParams; typedef struct{ u32 status; } GScanSetSignificantChangeRspParams; typedef struct{ u32 status; } GScanResetSignificantChangeRspParams; typedef struct { int max_channels; wifi_channel *channels; int *number_channels; } GScan_get_valid_channels_cb_data; typedef enum{ eGScanRspParamsInvalid = 0, eGScanGetValidChannelsRspParams, eGScanGetCapabilitiesRspParams, eGScanGetCachedResultsRspParams, eGScanStartRspParams, eGScanStopRspParams, eGScanSetBssidHotlistRspParams, eGScanResetBssidHotlistRspParams, eGScanSetSignificantChangeRspParams, eGScanResetSignificantChangeRspParams, } eGScanRspRarams; /* Response and Event Callbacks */ typedef struct { /* Various Events Callback */ void (*get_capabilities)(int status, wifi_gscan_capabilities capabilities); void (*start)(int status); void (*stop)(int status); void (*set_bssid_hotlist)(int status); void (*reset_bssid_hotlist)(int status); void (*set_significant_change)(int status); void (*reset_significant_change)(int status); void (*on_hotlist_ap_found)(wifi_request_id id, unsigned num_results, wifi_scan_result *results); void (*get_cached_results)(u8 more_data, u32 num_results); void (*on_significant_change)(wifi_request_id id, unsigned num_results, wifi_significant_change_result **results); /* Reported when report_threshold is reached in scan cache */ void (*on_scan_results_available) (wifi_request_id id, unsigned num_results_available); /* Reported when each probe response is received, if report_events * enabled in wifi_scan_cmd_params */ void (*on_full_scan_result) (wifi_request_id id, wifi_scan_result *result); /* Optional event - indicates progress of scanning statemachine */ void (*on_scan_event) (wifi_scan_event event, unsigned status); } GScanCallbackHandler; class GScanCommand: public WifiVendorCommand { private: GScanStopRspParams *mStopGScanRspParams; GScanStartRspParams *mStartGScanRspParams; GScanSetBssidHotlistRspParams *mSetBssidHotlistRspParams; GScanResetBssidHotlistRspParams *mResetBssidHotlistRspParams; GScanSetSignificantChangeRspParams *mSetSignificantChangeRspParams; GScanResetSignificantChangeRspParams*mResetSignificantChangeRspParams; GScanGetCapabilitiesRspParams *mGetCapabilitiesRspParams; GScanGetCachedResultsRspParams *mGetCachedResultsRspParams; u32 mGetCachedResultsNumResults; GScanCallbackHandler mHandler; int mRequestId; int *mChannels; int mMaxChannels; int *mNumChannelsPtr; bool mWaitforRsp; public: GScanCommand(wifi_handle handle, int id, u32 vendor_id, u32 subcmd); virtual ~GScanCommand(); /* This function implements creation of GSCAN specific Request * based on the request type. */ virtual int create(); virtual int requestEvent(); virtual int requestResponse(); virtual int handleResponse(WifiEvent &reply); virtual int handleEvent(WifiEvent &event); virtual int setCallbackHandler(GScanCallbackHandler nHandler); virtual void setMaxChannels(int max_channels); virtual void setChannels(int *channels); virtual void setNumChannelsPtr(int *num_channels); virtual int allocRspParams(eGScanRspRarams cmd); virtual void freeRspParams(eGScanRspRarams cmd); virtual void getGetCapabilitiesRspParams( wifi_gscan_capabilities *capabilities, u32 *status); virtual void getStartGScanRspParams(u32 *status); virtual void getStopGScanRspParams(u32 *status); virtual void getSetBssidHotlistRspParams(u32 *status); virtual void getResetBssidHotlistRspParams(u32 *status); virtual void getSetSignificantChangeRspParams(u32 *status); virtual void getResetSignificantChangeRspParams(u32 *status); virtual wifi_error getGetCachedResultsRspParams(int max, u8 *moreData, int *numResults, wifi_scan_result *results); /* Takes wait time in seconds. */ virtual int timed_wait(u16 wait_time); virtual void waitForRsp(bool wait); }; #ifdef __cplusplus } #endif /* __cplusplus */ #endif