16ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius/*
26ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * hidl interface for wpa_supplicant daemon
36ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * Copyright (c) 2004-2016, Jouni Malinen <j@w1.fi>
46ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * Copyright (c) 2004-2016, Roshan Pius <rpius@google.com>
56ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius *
66ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * This software may be distributed under the terms of the BSD license.
76ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * See README for more details.
86ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius */
96ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
106ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius#ifndef WPA_SUPPLICANT_HIDL_STA_IFACE_H
116ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius#define WPA_SUPPLICANT_HIDL_STA_IFACE_H
126ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
136ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius#include <array>
146ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius#include <vector>
156ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
166ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius#include <android-base/macros.h>
176ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
1830eab6260098edbc366b3b9f5cf3d17755493b07Ahmed ElArabawy#include <android/hardware/wifi/supplicant/1.1/ISupplicantStaIface.h>
1930eab6260098edbc366b3b9f5cf3d17755493b07Ahmed ElArabawy#include <android/hardware/wifi/supplicant/1.1/ISupplicantStaIfaceCallback.h>
206ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius#include <android/hardware/wifi/supplicant/1.0/ISupplicantStaNetwork.h>
216ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
226ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusextern "C" {
236ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius#include "utils/common.h"
246ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius#include "utils/includes.h"
256ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius#include "wpa_supplicant_i.h"
266ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius#include "config.h"
276ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius#include "driver_i.h"
286ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius#include "wpa.h"
296ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}
306ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
316ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusnamespace android {
326ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusnamespace hardware {
336ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusnamespace wifi {
346ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusnamespace supplicant {
356ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusnamespace V1_1 {
366ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusnamespace implementation {
376ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piususing namespace android::hardware::wifi::supplicant::V1_0;
386ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
396ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius/**
406ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * Implementation of StaIface hidl object. Each unique hidl
416ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * object is used for control operations on a specific interface
426ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius * controlled by wpa_supplicant.
436ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius */
446ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusclass StaIface : public ISupplicantStaIface
456ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius{
466ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piuspublic:
476ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	StaIface(struct wpa_global* wpa_global, const char ifname[]);
486ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	~StaIface() override = default;
496ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// HIDL does not provide a built-in mechanism to let the server
506ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// invalidate a HIDL interface object after creation. If any client
516ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// process holds onto a reference to the object in their context,
526ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// any method calls on that reference will continue to be directed to
536ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// the server.
546ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// However Supplicant HAL needs to control the lifetime of these
556ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// objects. So, add a public |invalidate| method to all |Iface| and
566ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// |Network| objects.
576ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// This will be used to mark an object invalid when the corresponding
586ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// iface or network is removed.
596ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// All HIDL method implementations should check if the object is still
606ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// marked valid before processing them.
616ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	void invalidate();
626ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	bool isValid();
636ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
646ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// Hidl methods exposed.
656ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> getName(getName_cb _hidl_cb) override;
666ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> getType(getType_cb _hidl_cb) override;
676ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> addNetwork(addNetwork_cb _hidl_cb) override;
686ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> removeNetwork(
696ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    SupplicantNetworkId id, removeNetwork_cb _hidl_cb) override;
706ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> getNetwork(
716ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    SupplicantNetworkId id, getNetwork_cb _hidl_cb) override;
726ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> listNetworks(listNetworks_cb _hidl_cb) override;
736ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> registerCallback(
7430eab6260098edbc366b3b9f5cf3d17755493b07Ahmed ElArabawy	    const sp<android::hardware::wifi::supplicant::V1_0::ISupplicantStaIfaceCallback>
7530eab6260098edbc366b3b9f5cf3d17755493b07Ahmed ElArabawy	    & callback, registerCallback_cb _hidl_cb) override;
7630eab6260098edbc366b3b9f5cf3d17755493b07Ahmed ElArabawy	Return<void> registerCallback_1_1(
776ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const sp<ISupplicantStaIfaceCallback>& callback,
786ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    registerCallback_cb _hidl_cb) override;
796ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> reassociate(reassociate_cb _hidl_cb) override;
806ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> reconnect(reconnect_cb _hidl_cb) override;
816ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> disconnect(disconnect_cb _hidl_cb) override;
826ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> setPowerSave(
836ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    bool enable, setPowerSave_cb _hidl_cb) override;
846ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> initiateTdlsDiscover(
856ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const hidl_array<uint8_t, 6>& mac_address,
866ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    initiateTdlsDiscover_cb _hidl_cb) override;
876ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> initiateTdlsSetup(
886ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const hidl_array<uint8_t, 6>& mac_address,
896ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    initiateTdlsSetup_cb _hidl_cb) override;
906ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> initiateTdlsTeardown(
916ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const hidl_array<uint8_t, 6>& mac_address,
926ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    initiateTdlsTeardown_cb _hidl_cb) override;
936ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> initiateAnqpQuery(
946ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const hidl_array<uint8_t, 6>& mac_address,
956ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const hidl_vec<ISupplicantStaIface::AnqpInfoId>& info_elements,
966ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const hidl_vec<ISupplicantStaIface::Hs20AnqpSubtypes>& sub_types,
976ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    initiateAnqpQuery_cb _hidl_cb) override;
986ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> initiateHs20IconQuery(
996ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const hidl_array<uint8_t, 6>& mac_address,
1006ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const hidl_string& file_name,
1016ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    initiateHs20IconQuery_cb _hidl_cb) override;
1026ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> getMacAddress(getMacAddress_cb _hidl_cb) override;
1036ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> startRxFilter(startRxFilter_cb _hidl_cb) override;
1046ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> stopRxFilter(stopRxFilter_cb _hidl_cb) override;
1056ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> addRxFilter(
1066ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    ISupplicantStaIface::RxFilterType type,
1076ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    addRxFilter_cb _hidl_cb) override;
1086ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> removeRxFilter(
1096ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    ISupplicantStaIface::RxFilterType type,
1106ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    removeRxFilter_cb _hidl_cb) override;
1116ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> setBtCoexistenceMode(
1126ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    ISupplicantStaIface::BtCoexistenceMode mode,
1136ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    setBtCoexistenceMode_cb _hidl_cb) override;
1146ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> setBtCoexistenceScanModeEnabled(
1156ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    bool enable, setBtCoexistenceScanModeEnabled_cb _hidl_cb) override;
1166ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> setSuspendModeEnabled(
1176ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    bool enable, setSuspendModeEnabled_cb _hidl_cb) override;
1186ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> setCountryCode(
1196ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const hidl_array<int8_t, 2>& code,
1206ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    setCountryCode_cb _hidl_cb) override;
1216ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> startWpsRegistrar(
1226ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const hidl_array<uint8_t, 6>& bssid, const hidl_string& pin,
1236ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    startWpsRegistrar_cb _hidl_cb) override;
1246ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> startWpsPbc(
1256ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const hidl_array<uint8_t, 6>& bssid,
1266ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    startWpsPbc_cb _hidl_cb) override;
1276ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> startWpsPinKeypad(
1286ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const hidl_string& pin, startWpsPinKeypad_cb _hidl_cb) override;
1296ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> startWpsPinDisplay(
1306ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const hidl_array<uint8_t, 6>& bssid,
1316ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    startWpsPinDisplay_cb _hidl_cb) override;
1326ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> cancelWps(cancelWps_cb _hidl_cb) override;
1336ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> setWpsDeviceName(
1346ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const hidl_string& name, setWpsDeviceName_cb _hidl_cb) override;
1356ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> setWpsDeviceType(
1366ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const hidl_array<uint8_t, 8>& type,
1376ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    setWpsDeviceType_cb _hidl_cb) override;
1386ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> setWpsManufacturer(
1396ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const hidl_string& manufacturer,
1406ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    setWpsManufacturer_cb _hidl_cb) override;
1416ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> setWpsModelName(
1426ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const hidl_string& model_name,
1436ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    setWpsModelName_cb _hidl_cb) override;
1446ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> setWpsModelNumber(
1456ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const hidl_string& model_number,
1466ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    setWpsModelNumber_cb _hidl_cb) override;
1476ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> setWpsSerialNumber(
1486ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const hidl_string& serial_number,
1496ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    setWpsSerialNumber_cb _hidl_cb) override;
1506ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> setWpsConfigMethods(
1516ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    uint16_t config_methods, setWpsConfigMethods_cb _hidl_cb) override;
1526ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> setExternalSim(
1536ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    bool useExternalSim, setExternalSim_cb _hidl_cb) override;
1546ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> addExtRadioWork(
1556ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const hidl_string& name, uint32_t freq_in_mhz,
1566ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    uint32_t timeout_in_sec, addExtRadioWork_cb _hidl_cb) override;
1576ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> removeExtRadioWork(
1586ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    uint32_t id, removeExtRadioWork_cb _hidl_cb) override;
1596ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	Return<void> enableAutoReconnect(
1606ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    bool enable, enableAutoReconnect_cb _hidl_cb) override;
1616ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
1626ca7b54de22e93958b79bae0a4428107e08cb778Roshan Piusprivate:
1636ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// Corresponding worker functions for the HIDL methods.
1646ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	std::pair<SupplicantStatus, std::string> getNameInternal();
1656ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	std::pair<SupplicantStatus, IfaceType> getTypeInternal();
1666ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	std::pair<SupplicantStatus, sp<ISupplicantNetwork>>
1676ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	addNetworkInternal();
1686ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus removeNetworkInternal(SupplicantNetworkId id);
1696ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	std::pair<SupplicantStatus, sp<ISupplicantNetwork>> getNetworkInternal(
1706ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    SupplicantNetworkId id);
1716ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	std::pair<SupplicantStatus, std::vector<SupplicantNetworkId>>
1726ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	listNetworksInternal();
1736ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus registerCallbackInternal(
17430eab6260098edbc366b3b9f5cf3d17755493b07Ahmed ElArabawy	    const sp<android::hardware::wifi::supplicant::V1_0::ISupplicantStaIfaceCallback>
17530eab6260098edbc366b3b9f5cf3d17755493b07Ahmed ElArabawy	    & callback);
17630eab6260098edbc366b3b9f5cf3d17755493b07Ahmed ElArabawy	SupplicantStatus registerCallbackInternal_1_1(
1776ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const sp<ISupplicantStaIfaceCallback>& callback);
1786ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus reassociateInternal();
1796ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus reconnectInternal();
1806ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus disconnectInternal();
1816ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus setPowerSaveInternal(bool enable);
1826ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus initiateTdlsDiscoverInternal(
1836ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const std::array<uint8_t, 6>& mac_address);
1846ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus initiateTdlsSetupInternal(
1856ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const std::array<uint8_t, 6>& mac_address);
1866ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus initiateTdlsTeardownInternal(
1876ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const std::array<uint8_t, 6>& mac_address);
1886ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus initiateAnqpQueryInternal(
1896ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const std::array<uint8_t, 6>& mac_address,
1906ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const std::vector<ISupplicantStaIface::AnqpInfoId>& info_elements,
1916ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const std::vector<ISupplicantStaIface::Hs20AnqpSubtypes>&
1926ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius		sub_types);
1936ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus initiateHs20IconQueryInternal(
1946ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const std::array<uint8_t, 6>& mac_address,
1956ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const std::string& file_name);
1966ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	std::pair<SupplicantStatus, std::array<uint8_t, 6>>
1976ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	getMacAddressInternal();
1986ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus startRxFilterInternal();
1996ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus stopRxFilterInternal();
2006ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus addRxFilterInternal(
2016ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    ISupplicantStaIface::RxFilterType type);
2026ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus removeRxFilterInternal(
2036ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    ISupplicantStaIface::RxFilterType type);
2046ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus setBtCoexistenceModeInternal(
2056ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    ISupplicantStaIface::BtCoexistenceMode mode);
2066ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus setBtCoexistenceScanModeEnabledInternal(bool enable);
2076ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus setSuspendModeEnabledInternal(bool enable);
2086ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus setCountryCodeInternal(
2096ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const std::array<int8_t, 2>& code);
2106ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus startWpsRegistrarInternal(
2116ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const std::array<uint8_t, 6>& bssid, const std::string& pin);
2126ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus startWpsPbcInternal(
2136ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const std::array<uint8_t, 6>& bssid);
2146ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus startWpsPinKeypadInternal(const std::string& pin);
2156ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	std::pair<SupplicantStatus, std::string> startWpsPinDisplayInternal(
2166ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const std::array<uint8_t, 6>& bssid);
2176ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus cancelWpsInternal();
2186ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus setWpsDeviceNameInternal(const std::string& name);
2196ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus setWpsDeviceTypeInternal(
2206ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const std::array<uint8_t, 8>& type);
2216ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus setWpsManufacturerInternal(
2226ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const std::string& manufacturer);
2236ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus setWpsModelNameInternal(const std::string& model_name);
2246ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus setWpsModelNumberInternal(
2256ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const std::string& model_number);
2266ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus setWpsSerialNumberInternal(
2276ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const std::string& serial_number);
2286ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus setWpsConfigMethodsInternal(uint16_t config_methods);
2296ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus setExternalSimInternal(bool useExternalSim);
2306ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	std::pair<SupplicantStatus, uint32_t> addExtRadioWorkInternal(
2316ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    const std::string& name, uint32_t freq_in_mhz,
2326ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	    uint32_t timeout_in_sec);
2336ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus removeExtRadioWorkInternal(uint32_t id);
2346ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	SupplicantStatus enableAutoReconnectInternal(bool enable);
2356ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
2366ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_supplicant* retrieveIfacePtr();
2376ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
2386ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// Reference to the global wpa_struct. This is assumed to be valid for
2396ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// the lifetime of the process.
2406ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	struct wpa_global* wpa_global_;
2416ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	// Name of the iface this hidl object controls
2426ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	const std::string ifname_;
2436ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	bool is_valid_;
2446ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
2456ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius	DISALLOW_COPY_AND_ASSIGN(StaIface);
2466ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius};
2476ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
2486ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}  // namespace implementation
2496ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}  // namespace V1_1
2506ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}  // namespace wifi
2516ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}  // namespace supplicant
2526ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}  // namespace hardware
2536ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius}  // namespace android
2546ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius
2556ca7b54de22e93958b79bae0a4428107e08cb778Roshan Pius#endif  // WPA_SUPPLICANT_HIDL_STA_IFACE_H
256