| /* |
| * |
| * 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 <cstddef> |
| #include <cstdint> |
| |
| #include <glib.h> |
| #include <wifi-manager.h> |
| |
| #include <lib/core/CHIPError.h> |
| #include <platform/NetworkCommissioning.h> |
| |
| #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(uint8_t * bssId); |
| 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; |
| |
| uint8_t mWiFiBSSID[kWiFiBSSIDLength]; |
| 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 |