/* * * Copyright (c) 2021 Project CHIP Authors * * 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. */ #pragma once #include #include #include #include #include #include #include "platform/internal/DeviceNetworkInfo.h" namespace chip { namespace DeviceLayer { namespace Internal { class WiFiManager { friend class ConnectivityManagerImpl; public: void Init(); void Deinit(); CHIP_ERROR IsActivated(bool * isWiFiActivated); CHIP_ERROR Activate(); CHIP_ERROR Deactivate(); CHIP_ERROR Connect(const char * ssid, const char * key, NetworkCommissioning::Internal::WirelessDriver::ConnectCallback * apCallback = nullptr); CHIP_ERROR Disconnect(const char * ssid); CHIP_ERROR StartWiFiScan(ByteSpan ssid, NetworkCommissioning::WiFiDriver::ScanCallback * callback); CHIP_ERROR RemoveAllConfigs(); CHIP_ERROR GetDeviceMACAddress(uint8_t * macAddress, size_t macAddressLen); CHIP_ERROR GetDeviceState(wifi_manager_device_state_e * deviceState); CHIP_ERROR SetDeviceState(wifi_manager_device_state_e deviceState); CHIP_ERROR GetModuleState(wifi_manager_module_state_e * moduleState); CHIP_ERROR GetConnectionState(wifi_manager_connection_state_e * connectionState); CHIP_ERROR GetBssId(MutableByteSpan & value); CHIP_ERROR GetSecurityType(wifi_manager_security_type_e * securityType); CHIP_ERROR GetConfiguredNetwork(NetworkCommissioning::Network & network); bool IsWiFiStationConnected(); private: static void _DeviceStateChangedCb(wifi_manager_device_state_e deviceState, void * userData); static void _ModuleStateChangedCb(wifi_manager_module_state_e moduleState, void * userData); static void _ConnectionStateChangedCb(wifi_manager_connection_state_e connectionState, wifi_manager_ap_h ap, void * userData); static void _ScanStateChangedCb(wifi_manager_scan_state_e scanState, void * userData); static void _RssiLevelChangedCb(wifi_manager_rssi_level_e rssiLevel, void * userData); static void _BackgroundScanCb(wifi_manager_error_e wifiErr, void * userData); static void _IPConflictCb(char * mac, wifi_manager_ip_conflict_state_e ipConflictState, void * userData); static void _ActivateCb(wifi_manager_error_e wifiErr, void * userData); static void _DeactivateCb(wifi_manager_error_e wifiErr, void * userData); static void _ScanToConnectFinishedCb(wifi_manager_error_e wifiErr, void * userData); static void _SpecificScanFinishedCb(wifi_manager_error_e wifiErr, void * userData); static void _FullScanFinishedCb(wifi_manager_error_e wifiErr, void * userData); static bool _FoundAPOnScanCb(wifi_manager_ap_h ap, void * userData); static bool _FoundAPCb(wifi_manager_ap_h ap, void * userData); static void _ConnectedCb(wifi_manager_error_e wifiErr, void * userData); static bool _ConfigListCb(const wifi_manager_config_h config, void * userData); static void _UpdateScanCallback(void * scanCbData); static CHIP_ERROR _WiFiInitialize(gpointer userData); static CHIP_ERROR _WiFiActivate(gpointer userData); static CHIP_ERROR _WiFiDeactivate(gpointer userData); static CHIP_ERROR _WiFiSpecificScan(gpointer userData); static CHIP_ERROR _WiFiFullScan(gpointer userData); static CHIP_ERROR _WiFiScanToConnect(gpointer userData); static CHIP_ERROR _WiFiConnect(wifi_manager_ap_h ap); void _WiFiDeinitialize(); void _WiFiSetStates(); void _WiFiSetCallbacks(); void _WiFiUnsetCallbacks(); void _WiFiSetDeviceState(wifi_manager_device_state_e deviceState); void _WiFiSetModuleState(wifi_manager_module_state_e moduleState); void _WiFiSetConnectionState(wifi_manager_connection_state_e connectionState); wifi_manager_ap_h _WiFiGetConnectedAP(); wifi_manager_ap_h _WiFiGetFoundAP(); friend WiFiManager & WiFiMgr(); static WiFiManager sInstance; wifi_manager_h mWiFiManagerHandle; wifi_manager_device_state_e mDeviceState; wifi_manager_module_state_e mModuleState; wifi_manager_connection_state_e mConnectionState; char mWiFiSSID[kMaxWiFiSSIDLength + 1]; char mWiFiKey[kMaxWiFiKeyLength + 1]; char mInterestedSSID[kMaxWiFiSSIDLength + 1]; NetworkCommissioning::Internal::WirelessDriver::ConnectCallback * mpConnectCallback; NetworkCommissioning::WiFiDriver::ScanCallback * mpScanCallback; }; inline WiFiManager & WiFiMgr() { return WiFiManager::sInstance; } } // namespace Internal } // namespace DeviceLayer } // namespace chip