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_EVENT_HANDLE_H__
188abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#define __WIFI_HAL_GSCAN_EVENT_HANDLE_H__
198abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam
208abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#include "common.h"
218abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#include "cpp_bindings.h"
228abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#include "gscancommand.h"
238abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam
248abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#ifdef __cplusplus
258abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyamextern "C"
268abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam{
278abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#endif /* __cplusplus */
288abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam
298abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyamclass GScanCommandEventHandler: public WifiVendorCommand
308abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam{
318abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyamprivate:
328abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    // TODO: derive 3 other command event handler classes from this base and separate
338abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    // the data member vars
348abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    wifi_scan_result *mHotlistApFoundResults;
354af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    wifi_scan_result *mHotlistApLostResults;
368abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    u32 mHotlistApFoundNumResults;
374af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    u32 mHotlistApLostNumResults;
388abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    bool mHotlistApFoundMoreData;
394af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    bool mHotlistApLostMoreData;
408abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    wifi_significant_change_result **mSignificantChangeResults;
418abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    u32 mSignificantChangeNumResults;
428abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    bool mSignificantChangeMoreData;
438abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    GScanCallbackHandler mHandler;
448abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    int mRequestId;
45261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam    u32 mHotlistSsidFoundNumResults;
46261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam    bool mHotlistSsidFoundMoreData;
47261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam    u32 mHotlistSsidLostNumResults;
48261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam    bool mHotlistSsidLostMoreData;
49261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam    wifi_scan_result *mHotlistSsidFoundResults;
50261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam    wifi_scan_result *mHotlistSsidLostResults;
51e5c1439eb5547b792fb47905c0977bbed8d5d8acAmarnath Hullur Subramanyam    wifi_scan_result *mPnoNetworkFoundResults;
52e5c1439eb5547b792fb47905c0977bbed8d5d8acAmarnath Hullur Subramanyam    u32 mPnoNetworkFoundNumResults;
53e5c1439eb5547b792fb47905c0977bbed8d5d8acAmarnath Hullur Subramanyam    bool mPnoNetworkFoundMoreData;
54c31ec43dd246e3322b7248351eef561bb756e495Amarnath Hullur Subramanyam    wifi_scan_result *mPasspointNetworkFoundResult;
55c31ec43dd246e3322b7248351eef561bb756e495Amarnath Hullur Subramanyam    byte *mPasspointAnqp;
56c31ec43dd246e3322b7248351eef561bb756e495Amarnath Hullur Subramanyam    int mPasspointAnqpLen;
57c31ec43dd246e3322b7248351eef561bb756e495Amarnath Hullur Subramanyam    int mPasspointNetId;
58e5c1439eb5547b792fb47905c0977bbed8d5d8acAmarnath Hullur Subramanyam
598abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    /* Needed because mSubcmd gets overwritten in
608abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam     * WifiVendorCommand::handleEvent()
618abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam     */
628abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    u32 mSubCommandId;
637325952cbfc88103197937b05c17c6e487e98cd9Amarnath Hullur Subramanyam    bool mEventHandlingEnabled;
648abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam
658abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyampublic:
668abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    GScanCommandEventHandler(wifi_handle handle, int id, u32 vendor_id,
678abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam                                    u32 subcmd, GScanCallbackHandler nHandler);
688abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    virtual ~GScanCommandEventHandler();
698abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    virtual int create();
708abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    virtual int get_request_id();
714af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    virtual void set_request_id(int request_id);
728abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam    virtual int handleEvent(WifiEvent &event);
737325952cbfc88103197937b05c17c6e487e98cd9Amarnath Hullur Subramanyam    void enableEventHandling();
747325952cbfc88103197937b05c17c6e487e98cd9Amarnath Hullur Subramanyam    void disableEventHandling();
757325952cbfc88103197937b05c17c6e487e98cd9Amarnath Hullur Subramanyam    bool isEventHandlingEnabled();
767325952cbfc88103197937b05c17c6e487e98cd9Amarnath Hullur Subramanyam    void setCallbackHandler(GScanCallbackHandler handler);
774af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    wifi_error gscan_parse_hotlist_ap_results(
784af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            u32 num_results,
794af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            wifi_scan_result *results,
804af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            u32 starting_index,
814af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            struct nlattr **tb_vendor);
82261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam    wifi_error gscan_parse_hotlist_ssid_results(
83261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam            u32 num_results,
84261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam            wifi_scan_result *results,
85261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam            u32 starting_index,
86261274640b093ef561076fe78a2c05cdaacda07aAmarnath Hullur Subramanyam            struct nlattr **tb_vendor);
87c31ec43dd246e3322b7248351eef561bb756e495Amarnath Hullur Subramanyam    wifi_error gscan_parse_passpoint_network_result(
88e5c1439eb5547b792fb47905c0977bbed8d5d8acAmarnath Hullur Subramanyam            struct nlattr **tb_vendor);
89e5c1439eb5547b792fb47905c0977bbed8d5d8acAmarnath Hullur Subramanyam    wifi_error gscan_parse_pno_network_results(
90e5c1439eb5547b792fb47905c0977bbed8d5d8acAmarnath Hullur Subramanyam            u32 numResults,
91e5c1439eb5547b792fb47905c0977bbed8d5d8acAmarnath Hullur Subramanyam            wifi_scan_result *mPnoNetworkFoundResults,
92e5c1439eb5547b792fb47905c0977bbed8d5d8acAmarnath Hullur Subramanyam            u32 startingIndex,
93e5c1439eb5547b792fb47905c0977bbed8d5d8acAmarnath Hullur Subramanyam            struct nlattr **tbVendor);
948abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam};
958abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam
968abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#ifdef __cplusplus
978abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam}
988abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#endif /* __cplusplus */
998abcd11e6ffef0ed6948497ff03df2c55abc5bb9Amarnath Hullur Subramanyam#endif
100