1f1549183Sopenharmony_ciFrom cfc04fdab06a83cae0737b5a1b8ca8f6dfc21fbf Mon Sep 17 00:00:00 2001 2f1549183Sopenharmony_ciFrom: zhaoshenghua <zhaoshenghua1@huawei.com> 3f1549183Sopenharmony_ciDate: Thu, 15 Aug 2024 19:27:45 +0800 4f1549183Sopenharmony_ciSubject: [PATCH 2/4] callback 5f1549183Sopenharmony_ci 6f1549183Sopenharmony_ciChange-Id: Ib59d9795eb4d154e06dc2615285cbd86f7683bb7 7f1549183Sopenharmony_ciSigned-off-by: zhaoshenghua <zhaoshenghua1@huawei.com> 8f1549183Sopenharmony_ci--- 9f1549183Sopenharmony_ci wifi/frameworks/cj/BUILD.gn | 1 + 10f1549183Sopenharmony_ci wifi/frameworks/cj/include/ffi_structs.h | 6 +- 11f1549183Sopenharmony_ci wifi/frameworks/cj/include/wifi_callback.h | 80 +++ 12f1549183Sopenharmony_ci wifi/frameworks/cj/include/wifi_ffi.h | 2 +- 13f1549183Sopenharmony_ci wifi/frameworks/cj/src/wifi_callback.cpp | 534 +++++++++++++++++++++ 14f1549183Sopenharmony_ci wifi/frameworks/cj/src/wifi_ffi.cpp | 15 +- 15f1549183Sopenharmony_ci 6 files changed, 631 insertions(+), 7 deletions(-) 16f1549183Sopenharmony_ci create mode 100644 wifi/frameworks/cj/include/wifi_callback.h 17f1549183Sopenharmony_ci create mode 100644 wifi/frameworks/cj/src/wifi_callback.cpp 18f1549183Sopenharmony_ci 19f1549183Sopenharmony_cidiff --git a/wifi/frameworks/cj/BUILD.gn b/wifi/frameworks/cj/BUILD.gn 20f1549183Sopenharmony_ciindex 71fed17cc..a83ae447e 100644 21f1549183Sopenharmony_ci--- a/wifi/frameworks/cj/BUILD.gn 22f1549183Sopenharmony_ci+++ b/wifi/frameworks/cj/BUILD.gn 23f1549183Sopenharmony_ci@@ -39,6 +39,7 @@ ohos_shared_library("cj_wifi_ffi") { 24f1549183Sopenharmony_ci 25f1549183Sopenharmony_ci sources = [ 26f1549183Sopenharmony_ci "src/wifi_ffi.cpp", 27f1549183Sopenharmony_ci+ "src/wifi_callback.cpp", 28f1549183Sopenharmony_ci ] 29f1549183Sopenharmony_ci 30f1549183Sopenharmony_ci deps = [ "$WIFI_ROOT_DIR/frameworks/native:wifi_sdk" ] 31f1549183Sopenharmony_cidiff --git a/wifi/frameworks/cj/include/ffi_structs.h b/wifi/frameworks/cj/include/ffi_structs.h 32f1549183Sopenharmony_ciindex ca174fecf..e1f0d9b23 100644 33f1549183Sopenharmony_ci--- a/wifi/frameworks/cj/include/ffi_structs.h 34f1549183Sopenharmony_ci+++ b/wifi/frameworks/cj/include/ffi_structs.h 35f1549183Sopenharmony_ci@@ -45,14 +45,14 @@ extern "C" { 36f1549183Sopenharmony_ci int32_t supportedWifiCategory; 37f1549183Sopenharmony_ci bool isHiLinkNetwork; 38f1549183Sopenharmony_ci }; 39f1549183Sopenharmony_ci- 40f1549183Sopenharmony_ci+ 41f1549183Sopenharmony_ci struct WifiScanInfoArr 42f1549183Sopenharmony_ci { 43f1549183Sopenharmony_ci CWifiScanInfo *head; 44f1549183Sopenharmony_ci int64_t size; 45f1549183Sopenharmony_ci }; 46f1549183Sopenharmony_ci 47f1549183Sopenharmony_ci- // TODO figure out clientCert 48f1549183Sopenharmony_ci+ // TODO figure out clientCertAlias 49f1549183Sopenharmony_ci struct CWifiEapConfig 50f1549183Sopenharmony_ci { 51f1549183Sopenharmony_ci int32_t eapMethod; /* EAP authentication mode:PEAP/TLS/TTLS/PWD/SIM/AKA/AKA' */ 52f1549183Sopenharmony_ci@@ -112,7 +112,7 @@ extern "C" { 53f1549183Sopenharmony_ci char *groupName; 54f1549183Sopenharmony_ci int32_t netId; 55f1549183Sopenharmony_ci int32_t goBand; 56f1549183Sopenharmony_ci- int32_t deviceAddressType; 57f1549183Sopenharmony_ci+ int32_t deviceAddressType; 58f1549183Sopenharmony_ci }; 59f1549183Sopenharmony_ci 60f1549183Sopenharmony_ci struct CWifiP2PLinkedInfo 61f1549183Sopenharmony_cidiff --git a/wifi/frameworks/cj/include/wifi_callback.h b/wifi/frameworks/cj/include/wifi_callback.h 62f1549183Sopenharmony_cinew file mode 100644 63f1549183Sopenharmony_ciindex 000000000..7039f9605 64f1549183Sopenharmony_ci--- /dev/null 65f1549183Sopenharmony_ci+++ b/wifi/frameworks/cj/include/wifi_callback.h 66f1549183Sopenharmony_ci@@ -0,0 +1,80 @@ 67f1549183Sopenharmony_ci+/* 68f1549183Sopenharmony_ci+ * Copyright (c) 2024 Huawei Device Co., Ltd. 69f1549183Sopenharmony_ci+ * Licensed under the Apache License, Version 2.0 (the "License"); 70f1549183Sopenharmony_ci+ * you may not use this file except in compliance with the License. 71f1549183Sopenharmony_ci+ * You may obtain a copy of the License at 72f1549183Sopenharmony_ci+ * 73f1549183Sopenharmony_ci+ * http://www.apache.org/licenses/LICENSE-2.0 74f1549183Sopenharmony_ci+ * 75f1549183Sopenharmony_ci+ * Unless required by applicable law or agreed to in writing, software 76f1549183Sopenharmony_ci+ * distributed under the License is distributed on an "AS IS" BASIS, 77f1549183Sopenharmony_ci+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 78f1549183Sopenharmony_ci+ * See the License for the specific language governing permissions and 79f1549183Sopenharmony_ci+ * limitations under the License. 80f1549183Sopenharmony_ci+ */ 81f1549183Sopenharmony_ci+ 82f1549183Sopenharmony_ci+#include <shared_mutex> 83f1549183Sopenharmony_ci+ 84f1549183Sopenharmony_ci+#include "ffi_structs.h" 85f1549183Sopenharmony_ci+#include "wifi_errcode.h" 86f1549183Sopenharmony_ci+#include "wifi_p2p.h" 87f1549183Sopenharmony_ci+#include "wifi_hotspot.h" 88f1549183Sopenharmony_ci+#include "wifi_logger.h" 89f1549183Sopenharmony_ci+#include "wifi_sa_event.h" 90f1549183Sopenharmony_ci+ 91f1549183Sopenharmony_ci+namespace OHOS::Wifi { 92f1549183Sopenharmony_ci+ 93f1549183Sopenharmony_ci+class CjWifiAbilityStatusChange : public WifiAbilityStatusChange { 94f1549183Sopenharmony_ci+public: 95f1549183Sopenharmony_ci+ void OnAddSystemAbility(int32_t systemAbilityId, const std::string& deviceId) override; 96f1549183Sopenharmony_ci+}; 97f1549183Sopenharmony_ci+ 98f1549183Sopenharmony_ci+class CjEventRegister { 99f1549183Sopenharmony_ci+public: 100f1549183Sopenharmony_ci+ CjEventRegister() 101f1549183Sopenharmony_ci+ { 102f1549183Sopenharmony_ci+ int32_t ret; 103f1549183Sopenharmony_ci+ auto samgrProxy = OHOS::SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); 104f1549183Sopenharmony_ci+ if (samgrProxy == nullptr) { 105f1549183Sopenharmony_ci+ return; 106f1549183Sopenharmony_ci+ } 107f1549183Sopenharmony_ci+ mSaStatusListener = new OHOS::Wifi::CjWifiAbilityStatusChange(); 108f1549183Sopenharmony_ci+ if (mSaStatusListener == nullptr) { 109f1549183Sopenharmony_ci+ return; 110f1549183Sopenharmony_ci+ } 111f1549183Sopenharmony_ci+ ret = samgrProxy->SubscribeSystemAbility((int32_t)WIFI_DEVICE_ABILITY_ID, mSaStatusListener); 112f1549183Sopenharmony_ci+ samgrProxy->SubscribeSystemAbility((int32_t)WIFI_SCAN_ABILITY_ID, mSaStatusListener); 113f1549183Sopenharmony_ci+ samgrProxy->SubscribeSystemAbility((int32_t)WIFI_HOTSPOT_ABILITY_ID, mSaStatusListener); 114f1549183Sopenharmony_ci+ samgrProxy->SubscribeSystemAbility((int32_t)WIFI_P2P_ABILITY_ID, mSaStatusListener); 115f1549183Sopenharmony_ci+ } 116f1549183Sopenharmony_ci+ ~CjEventRegister() 117f1549183Sopenharmony_ci+ {} 118f1549183Sopenharmony_ci+ 119f1549183Sopenharmony_ci+ static CjEventRegister& GetInstance(); 120f1549183Sopenharmony_ci+ 121f1549183Sopenharmony_ci+ int32_t Register(const std::string& type, void (* callback)()); 122f1549183Sopenharmony_ci+ int32_t UnRegister(const std::string& type); 123f1549183Sopenharmony_ci+ ErrCode RegisterDeviceEvents(const std::vector<std::string> &event); 124f1549183Sopenharmony_ci+ ErrCode RegisterScanEvents(const std::vector<std::string> &event); 125f1549183Sopenharmony_ci+ ErrCode RegisterHotspotEvents(const std::vector<std::string> &event); 126f1549183Sopenharmony_ci+ ErrCode RegisterP2PEvents(const std::vector<std::string> &event); 127f1549183Sopenharmony_ci+ 128f1549183Sopenharmony_ci+private: 129f1549183Sopenharmony_ci+ // std::function<void(int32_t)> wifiStateChange{nullptr}; 130f1549183Sopenharmony_ci+ // std::function<void(int32_t)> wifiConnectionChange{nullptr}; 131f1549183Sopenharmony_ci+ // std::function<void(int32_t)> wifiRssiChange{nullptr}; 132f1549183Sopenharmony_ci+ // std::function<void(int32_t)> wifiScanStateChange{nullptr}; 133f1549183Sopenharmony_ci+ // std::function<void(int32_t)> hotspotStateChange{nullptr}; 134f1549183Sopenharmony_ci+ // std::function<void(int32_t)> p2pStateChange{nullptr}; 135f1549183Sopenharmony_ci+ // std::function<void(CWifiP2PLinkedInfo)> p2pConnectionChange{nullptr}; 136f1549183Sopenharmony_ci+ // std::function<void(CWifiP2pDevice)> p2pDeviceChange{nullptr}; 137f1549183Sopenharmony_ci+ // std::function<void(WifiP2pDeviceArr)> p2pPeerDeviceChange{nullptr}; 138f1549183Sopenharmony_ci+ // std::function<void()> p2pPersistentGroupChange{nullptr}; 139f1549183Sopenharmony_ci+ // std::function<void(int32_t)> p2pDiscoveryChange{nullptr}; 140f1549183Sopenharmony_ci+ OHOS::sptr<OHOS::ISystemAbilityStatusChange> mSaStatusListener = nullptr; 141f1549183Sopenharmony_ci+}; 142f1549183Sopenharmony_ci+ 143f1549183Sopenharmony_ci+ 144f1549183Sopenharmony_ci+ 145f1549183Sopenharmony_ci+ 146f1549183Sopenharmony_ci+} 147f1549183Sopenharmony_ci\ No newline at end of file 148f1549183Sopenharmony_cidiff --git a/wifi/frameworks/cj/include/wifi_ffi.h b/wifi/frameworks/cj/include/wifi_ffi.h 149f1549183Sopenharmony_ciindex 5525813ed..f7f59dcb9 100644 150f1549183Sopenharmony_ci--- a/wifi/frameworks/cj/include/wifi_ffi.h 151f1549183Sopenharmony_ci+++ b/wifi/frameworks/cj/include/wifi_ffi.h 152f1549183Sopenharmony_ci@@ -72,7 +72,7 @@ FFI_EXPORT int32_t CJ_CreateGroup(CWifiP2PConfig &cfg); 153f1549183Sopenharmony_ci FFI_EXPORT int32_t CJ_GetLinkedInfo(CWifiLinkedInfo &info); 154f1549183Sopenharmony_ci FFI_EXPORT int32_t CJ_AddCandidateConfig(CWifiDeviceConfig cfg, int32_t &ret); 155f1549183Sopenharmony_ci FFI_EXPORT WifiDeviceConfigArr CJ_GetCandidateConfigs(int32_t &code); 156f1549183Sopenharmony_ci-FFI_EXPORT int32_t CJ_WifiOn(char *type, int64_t id); 157f1549183Sopenharmony_ci+FFI_EXPORT int32_t CJ_WifiOn(char *type, void (*callback)()); 158f1549183Sopenharmony_ci FFI_EXPORT int32_t CJ_WifiOff(char* type); 159f1549183Sopenharmony_ci } 160f1549183Sopenharmony_ci 161f1549183Sopenharmony_cidiff --git a/wifi/frameworks/cj/src/wifi_callback.cpp b/wifi/frameworks/cj/src/wifi_callback.cpp 162f1549183Sopenharmony_cinew file mode 100644 163f1549183Sopenharmony_ciindex 000000000..cbd564eb0 164f1549183Sopenharmony_ci--- /dev/null 165f1549183Sopenharmony_ci+++ b/wifi/frameworks/cj/src/wifi_callback.cpp 166f1549183Sopenharmony_ci@@ -0,0 +1,534 @@ 167f1549183Sopenharmony_ci+/* 168f1549183Sopenharmony_ci+ * Copyright (c) 2024 Huawei Device Co., Ltd. 169f1549183Sopenharmony_ci+ * Licensed under the Apache License, Version 2.0 (the "License"); 170f1549183Sopenharmony_ci+ * you may not use this file except in compliance with the License. 171f1549183Sopenharmony_ci+ * You may obtain a copy of the License at 172f1549183Sopenharmony_ci+ * 173f1549183Sopenharmony_ci+ * http://www.apache.org/licenses/LICENSE-2.0 174f1549183Sopenharmony_ci+ * 175f1549183Sopenharmony_ci+ * Unless required by applicable law or agreed to in writing, software 176f1549183Sopenharmony_ci+ * distributed under the License is distributed on an "AS IS" BASIS, 177f1549183Sopenharmony_ci+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 178f1549183Sopenharmony_ci+ * See the License for the specific language governing permissions and 179f1549183Sopenharmony_ci+ * limitations under the License. 180f1549183Sopenharmony_ci+ */ 181f1549183Sopenharmony_ci+ 182f1549183Sopenharmony_ci+#include "wifi_callback.h" 183f1549183Sopenharmony_ci+ 184f1549183Sopenharmony_ci+#include "ffi_structs.h" 185f1549183Sopenharmony_ci+#include "accesstoken_kit.h" 186f1549183Sopenharmony_ci+#include "ipc_skeleton.h" 187f1549183Sopenharmony_ci+#include "wifi_device.h" 188f1549183Sopenharmony_ci+#include "wifi_logger.h" 189f1549183Sopenharmony_ci+#include "wifi_scan.h" 190f1549183Sopenharmony_ci+#include "cj_lambda.h" 191f1549183Sopenharmony_ci+ 192f1549183Sopenharmony_ci+DEFINE_WIFILOG_LABEL("CJ_Wifi_Callback"); 193f1549183Sopenharmony_ci+ 194f1549183Sopenharmony_ci+namespace OHOS::Wifi { 195f1549183Sopenharmony_ci+ 196f1549183Sopenharmony_ci+std::shared_ptr<WifiDevice> g_cjWifiStaPtr = WifiDevice::GetInstance(WIFI_DEVICE_ABILITY_ID); 197f1549183Sopenharmony_ci+std::shared_ptr<WifiScan> g_cjWifiScanPtr = WifiScan::GetInstance(WIFI_SCAN_ABILITY_ID); 198f1549183Sopenharmony_ci+std::shared_ptr<WifiHotspot> g_cjWifiHotspotPtr = WifiHotspot::GetInstance(WIFI_HOTSPOT_ABILITY_ID); 199f1549183Sopenharmony_ci+std::shared_ptr<WifiP2p> g_cjWifiP2pPtr = WifiP2p::GetInstance(WIFI_P2P_ABILITY_ID); 200f1549183Sopenharmony_ci+ 201f1549183Sopenharmony_ci+CjEventRegister& CjEventRegister::GetInstance() 202f1549183Sopenharmony_ci+{ 203f1549183Sopenharmony_ci+ static CjEventRegister inst; 204f1549183Sopenharmony_ci+ return inst; 205f1549183Sopenharmony_ci+} 206f1549183Sopenharmony_ci+ 207f1549183Sopenharmony_ci+class CjWifiDeviceEventCallback : public IWifiDeviceCallBack { 208f1549183Sopenharmony_ci+public: 209f1549183Sopenharmony_ci+ CjWifiDeviceEventCallback() { 210f1549183Sopenharmony_ci+ } 211f1549183Sopenharmony_ci+ 212f1549183Sopenharmony_ci+ virtual ~CjWifiDeviceEventCallback() { 213f1549183Sopenharmony_ci+ } 214f1549183Sopenharmony_ci+ 215f1549183Sopenharmony_ci+public: 216f1549183Sopenharmony_ci+ void OnWifiStateChanged(int state) override 217f1549183Sopenharmony_ci+ { 218f1549183Sopenharmony_ci+ WIFI_LOGI("OnWifiStateChanged event: %{public}d [0:DISABLING, 1:DISABLED, 2:ENABLING, 3:ENABLED]", 219f1549183Sopenharmony_ci+ state); 220f1549183Sopenharmony_ci+ if (wifiStateChange == nullptr) { 221f1549183Sopenharmony_ci+ WIFI_LOGI("OnWifiStateChanged not registered"); 222f1549183Sopenharmony_ci+ return; 223f1549183Sopenharmony_ci+ } 224f1549183Sopenharmony_ci+ if (m_wifiStateConvertMap.find(state) == m_wifiStateConvertMap.end()) { 225f1549183Sopenharmony_ci+ WIFI_LOGW("not find state."); 226f1549183Sopenharmony_ci+ return; 227f1549183Sopenharmony_ci+ } 228f1549183Sopenharmony_ci+ wifiStateChange(m_wifiStateConvertMap[state]); 229f1549183Sopenharmony_ci+ } 230f1549183Sopenharmony_ci+ 231f1549183Sopenharmony_ci+ void OnWifiConnectionChanged(int state, const WifiLinkedInfo &info) override 232f1549183Sopenharmony_ci+ { 233f1549183Sopenharmony_ci+ WIFI_LOGI("OnWifiConnectionChanged event: %{public}d [4:CONNECTED, 6:DISCONNECTED, 7:SPECIAL_CONNECT]", state); 234f1549183Sopenharmony_ci+ if (wifiConnectionChange == nullptr) { 235f1549183Sopenharmony_ci+ WIFI_LOGI("OnWifiConnectionChanged not registered"); 236f1549183Sopenharmony_ci+ return; 237f1549183Sopenharmony_ci+ } 238f1549183Sopenharmony_ci+ if (m_connectStateConvertMap.find(state) == m_connectStateConvertMap.end()) { 239f1549183Sopenharmony_ci+ WIFI_LOGW("not find connect state."); 240f1549183Sopenharmony_ci+ return; 241f1549183Sopenharmony_ci+ } 242f1549183Sopenharmony_ci+ wifiConnectionChange(m_connectStateConvertMap[state]); 243f1549183Sopenharmony_ci+ } 244f1549183Sopenharmony_ci+ 245f1549183Sopenharmony_ci+ void OnWifiRssiChanged(int rssi) override 246f1549183Sopenharmony_ci+ { 247f1549183Sopenharmony_ci+ WIFI_LOGI("OnWifiRssiChanged event: %{public}d", rssi); 248f1549183Sopenharmony_ci+ if (wifiRssiChange == nullptr) { 249f1549183Sopenharmony_ci+ WIFI_LOGI("OnWifiConnectionChanged not registered"); 250f1549183Sopenharmony_ci+ return; 251f1549183Sopenharmony_ci+ } 252f1549183Sopenharmony_ci+ wifiRssiChange(rssi); 253f1549183Sopenharmony_ci+ } 254f1549183Sopenharmony_ci+ 255f1549183Sopenharmony_ci+ void OnWifiWpsStateChanged(int state, const std::string &pinCode) override 256f1549183Sopenharmony_ci+ { 257f1549183Sopenharmony_ci+ } 258f1549183Sopenharmony_ci+ 259f1549183Sopenharmony_ci+ void OnStreamChanged(int direction) override 260f1549183Sopenharmony_ci+ { 261f1549183Sopenharmony_ci+ } 262f1549183Sopenharmony_ci+ 263f1549183Sopenharmony_ci+ void OnDeviceConfigChanged(ConfigChange value) override 264f1549183Sopenharmony_ci+ { 265f1549183Sopenharmony_ci+ } 266f1549183Sopenharmony_ci+ 267f1549183Sopenharmony_ci+ OHOS::sptr<OHOS::IRemoteObject> AsObject() override 268f1549183Sopenharmony_ci+ { 269f1549183Sopenharmony_ci+ return nullptr; 270f1549183Sopenharmony_ci+ } 271f1549183Sopenharmony_ci+ 272f1549183Sopenharmony_ci+ void SetCallback(const std::string &type, void (* callback)(int32_t)) 273f1549183Sopenharmony_ci+ { 274f1549183Sopenharmony_ci+ if (type == EVENT_STA_POWER_STATE_CHANGE) { 275f1549183Sopenharmony_ci+ wifiStateChange = CJLambda::Create(callback); 276f1549183Sopenharmony_ci+ } 277f1549183Sopenharmony_ci+ if (type == EVENT_STA_CONN_STATE_CHANGE) { 278f1549183Sopenharmony_ci+ wifiConnectionChange = CJLambda::Create(callback); 279f1549183Sopenharmony_ci+ } 280f1549183Sopenharmony_ci+ if (type == EVENT_STA_RSSI_STATE_CHANGE) { 281f1549183Sopenharmony_ci+ wifiRssiChange = CJLambda::Create(callback); 282f1549183Sopenharmony_ci+ } 283f1549183Sopenharmony_ci+ } 284f1549183Sopenharmony_ci+private: 285f1549183Sopenharmony_ci+ 286f1549183Sopenharmony_ci+ std::function<void(int32_t)> wifiStateChange{nullptr}; 287f1549183Sopenharmony_ci+ std::function<void(int32_t)> wifiConnectionChange{nullptr}; 288f1549183Sopenharmony_ci+ std::function<void(int32_t)> wifiRssiChange{nullptr}; 289f1549183Sopenharmony_ci+ 290f1549183Sopenharmony_ci+ enum class JsLayerWifiState { 291f1549183Sopenharmony_ci+ DISABLED = 0, 292f1549183Sopenharmony_ci+ ENABLED = 1, 293f1549183Sopenharmony_ci+ ENABLING = 2, 294f1549183Sopenharmony_ci+ DISABLING = 3 295f1549183Sopenharmony_ci+ }; 296f1549183Sopenharmony_ci+ 297f1549183Sopenharmony_ci+ enum class JsLayerConnectStatus { 298f1549183Sopenharmony_ci+ DISCONNECTED = 0, 299f1549183Sopenharmony_ci+ CONNECTED = 1, 300f1549183Sopenharmony_ci+ SPECIAL_CONNECT = 2, 301f1549183Sopenharmony_ci+ }; 302f1549183Sopenharmony_ci+ 303f1549183Sopenharmony_ci+ enum class JsLayerStreamDirection { 304f1549183Sopenharmony_ci+ STREAM_DIRECTION_NONE = 0, 305f1549183Sopenharmony_ci+ STREAM_DIRECTION_DOWN = 1, 306f1549183Sopenharmony_ci+ STREAM_DIRECTION_UP = 2, 307f1549183Sopenharmony_ci+ STREAM_DIRECTION_UPDOWN = 3 308f1549183Sopenharmony_ci+ }; 309f1549183Sopenharmony_ci+ 310f1549183Sopenharmony_ci+ std::map<int, int> m_wifiStateConvertMap = { 311f1549183Sopenharmony_ci+ { static_cast<int>(WifiState::DISABLING), static_cast<int>(JsLayerWifiState::DISABLING) }, 312f1549183Sopenharmony_ci+ { static_cast<int>(WifiState::DISABLED), static_cast<int>(JsLayerWifiState::DISABLED) }, 313f1549183Sopenharmony_ci+ { static_cast<int>(WifiState::ENABLING), static_cast<int>(JsLayerWifiState::ENABLING) }, 314f1549183Sopenharmony_ci+ { static_cast<int>(WifiState::ENABLED), static_cast<int>(JsLayerWifiState::ENABLED) }, 315f1549183Sopenharmony_ci+ }; 316f1549183Sopenharmony_ci+ 317f1549183Sopenharmony_ci+ std::map<int, int> m_connectStateConvertMap = { 318f1549183Sopenharmony_ci+ { static_cast<int>(ConnState::CONNECTED), static_cast<int>(JsLayerConnectStatus::CONNECTED) }, 319f1549183Sopenharmony_ci+ { static_cast<int>(ConnState::DISCONNECTED), static_cast<int>(JsLayerConnectStatus::DISCONNECTED) }, 320f1549183Sopenharmony_ci+ { static_cast<int>(ConnState::SPECIAL_CONNECT), static_cast<int>(JsLayerConnectStatus::SPECIAL_CONNECT) }, 321f1549183Sopenharmony_ci+ }; 322f1549183Sopenharmony_ci+ 323f1549183Sopenharmony_ci+ std::map<int, int> m_streamDirectionConvertMap = { 324f1549183Sopenharmony_ci+ { static_cast<int>(StreamDirection::STREAM_DIRECTION_NONE), 325f1549183Sopenharmony_ci+ static_cast<int>(JsLayerStreamDirection::STREAM_DIRECTION_NONE) }, 326f1549183Sopenharmony_ci+ { static_cast<int>(StreamDirection::STREAM_DIRECTION_DOWN), 327f1549183Sopenharmony_ci+ static_cast<int>(JsLayerStreamDirection::STREAM_DIRECTION_DOWN) }, 328f1549183Sopenharmony_ci+ { static_cast<int>(StreamDirection::STREAM_DIRECTION_UP), 329f1549183Sopenharmony_ci+ static_cast<int>(JsLayerStreamDirection::STREAM_DIRECTION_UP) }, 330f1549183Sopenharmony_ci+ { static_cast<int>(StreamDirection::STREAM_DIRECTION_UPDOWN), 331f1549183Sopenharmony_ci+ static_cast<int>(JsLayerStreamDirection::STREAM_DIRECTION_UPDOWN) }, 332f1549183Sopenharmony_ci+ }; 333f1549183Sopenharmony_ci+}; 334f1549183Sopenharmony_ci+ 335f1549183Sopenharmony_ci+class CjWifiScanEventCallback : public IWifiScanCallback { 336f1549183Sopenharmony_ci+public: 337f1549183Sopenharmony_ci+ CjWifiScanEventCallback() { 338f1549183Sopenharmony_ci+ } 339f1549183Sopenharmony_ci+ 340f1549183Sopenharmony_ci+ virtual ~CjWifiScanEventCallback() { 341f1549183Sopenharmony_ci+ } 342f1549183Sopenharmony_ci+ 343f1549183Sopenharmony_ci+public: 344f1549183Sopenharmony_ci+ void OnWifiScanStateChanged(int state) override 345f1549183Sopenharmony_ci+ { 346f1549183Sopenharmony_ci+ WIFI_LOGI("scan received state changed event: %{public}d", state); 347f1549183Sopenharmony_ci+ if (wifiScanStateChange == nullptr) { 348f1549183Sopenharmony_ci+ WIFI_LOGI("OnWifiScanStateChanged not registered"); 349f1549183Sopenharmony_ci+ return; 350f1549183Sopenharmony_ci+ } 351f1549183Sopenharmony_ci+ wifiScanStateChange(state); 352f1549183Sopenharmony_ci+ } 353f1549183Sopenharmony_ci+ 354f1549183Sopenharmony_ci+ OHOS::sptr<OHOS::IRemoteObject> AsObject() override 355f1549183Sopenharmony_ci+ { 356f1549183Sopenharmony_ci+ return nullptr; 357f1549183Sopenharmony_ci+ } 358f1549183Sopenharmony_ci+ 359f1549183Sopenharmony_ci+ void SetScanStateChange(void (* callback)(int32_t)) 360f1549183Sopenharmony_ci+ { 361f1549183Sopenharmony_ci+ wifiScanStateChange = CJLambda::Create(callback); 362f1549183Sopenharmony_ci+ } 363f1549183Sopenharmony_ci+private: 364f1549183Sopenharmony_ci+ std::function<void(int32_t)> wifiScanStateChange{nullptr}; 365f1549183Sopenharmony_ci+}; 366f1549183Sopenharmony_ci+ 367f1549183Sopenharmony_ci+class CjWifiHotspotEventCallback : public IWifiHotspotCallback { 368f1549183Sopenharmony_ci+public: 369f1549183Sopenharmony_ci+ CjWifiHotspotEventCallback() { 370f1549183Sopenharmony_ci+ } 371f1549183Sopenharmony_ci+ 372f1549183Sopenharmony_ci+ virtual ~CjWifiHotspotEventCallback() { 373f1549183Sopenharmony_ci+ } 374f1549183Sopenharmony_ci+ 375f1549183Sopenharmony_ci+public: 376f1549183Sopenharmony_ci+ void OnHotspotStateChanged(int state) override 377f1549183Sopenharmony_ci+ { 378f1549183Sopenharmony_ci+ WIFI_LOGI("Hotspot received state changed event: %{public}d", state); 379f1549183Sopenharmony_ci+ if (hotspotStateChange == nullptr) { 380f1549183Sopenharmony_ci+ WIFI_LOGI("OnHotspotStateChanged not registered"); 381f1549183Sopenharmony_ci+ return; 382f1549183Sopenharmony_ci+ } 383f1549183Sopenharmony_ci+ if (m_apStateConvertMap.find(state) == m_apStateConvertMap.end()) { 384f1549183Sopenharmony_ci+ return; 385f1549183Sopenharmony_ci+ } 386f1549183Sopenharmony_ci+ hotspotStateChange(m_apStateConvertMap[state]); 387f1549183Sopenharmony_ci+ } 388f1549183Sopenharmony_ci+ 389f1549183Sopenharmony_ci+ void OnHotspotStaJoin(const StationInfo &info) override 390f1549183Sopenharmony_ci+ { 391f1549183Sopenharmony_ci+ } 392f1549183Sopenharmony_ci+ 393f1549183Sopenharmony_ci+ void OnHotspotStaLeave(const StationInfo &info) override 394f1549183Sopenharmony_ci+ { 395f1549183Sopenharmony_ci+ } 396f1549183Sopenharmony_ci+ 397f1549183Sopenharmony_ci+ void SetHotspotStateChanged(void (* callback)(int32_t)) 398f1549183Sopenharmony_ci+ { 399f1549183Sopenharmony_ci+ hotspotStateChange = CJLambda::Create(callback); 400f1549183Sopenharmony_ci+ } 401f1549183Sopenharmony_ci+ 402f1549183Sopenharmony_ci+ OHOS::sptr<OHOS::IRemoteObject> AsObject() override 403f1549183Sopenharmony_ci+ { 404f1549183Sopenharmony_ci+ return nullptr; 405f1549183Sopenharmony_ci+ } 406f1549183Sopenharmony_ci+private: 407f1549183Sopenharmony_ci+ std::function<void(int32_t)> hotspotStateChange{nullptr}; 408f1549183Sopenharmony_ci+ 409f1549183Sopenharmony_ci+ enum class JsLayerApState { 410f1549183Sopenharmony_ci+ DISABLED = 0, 411f1549183Sopenharmony_ci+ ENABLED = 1, 412f1549183Sopenharmony_ci+ ENABLING = 2, 413f1549183Sopenharmony_ci+ DISABLING = 3 414f1549183Sopenharmony_ci+ }; 415f1549183Sopenharmony_ci+ 416f1549183Sopenharmony_ci+ std::map<int, int> m_apStateConvertMap = { 417f1549183Sopenharmony_ci+ { static_cast<int>(ApState::AP_STATE_STARTING), static_cast<int>(JsLayerApState::ENABLING) }, 418f1549183Sopenharmony_ci+ { static_cast<int>(ApState::AP_STATE_STARTED), static_cast<int>(JsLayerApState::ENABLED) }, 419f1549183Sopenharmony_ci+ { static_cast<int>(ApState::AP_STATE_CLOSING), static_cast<int>(JsLayerApState::DISABLING) }, 420f1549183Sopenharmony_ci+ { static_cast<int>(ApState::AP_STATE_CLOSED), static_cast<int>(JsLayerApState::DISABLED) }, 421f1549183Sopenharmony_ci+ }; 422f1549183Sopenharmony_ci+}; 423f1549183Sopenharmony_ci+ 424f1549183Sopenharmony_ci+class CjWifiP2pEventCallback : public IWifiP2pCallback { 425f1549183Sopenharmony_ci+public: 426f1549183Sopenharmony_ci+ CjWifiP2pEventCallback() { 427f1549183Sopenharmony_ci+ } 428f1549183Sopenharmony_ci+ 429f1549183Sopenharmony_ci+ virtual ~CjWifiP2pEventCallback() { 430f1549183Sopenharmony_ci+ } 431f1549183Sopenharmony_ci+ 432f1549183Sopenharmony_ci+public: 433f1549183Sopenharmony_ci+ void OnP2pStateChanged(int state) override 434f1549183Sopenharmony_ci+ { 435f1549183Sopenharmony_ci+ WIFI_LOGI("received p2p state changed event: %{public}d", state); 436f1549183Sopenharmony_ci+ if (p2pStateChange == nullptr) { 437f1549183Sopenharmony_ci+ WIFI_LOGI("OnP2pStateChanged not registered"); 438f1549183Sopenharmony_ci+ return; 439f1549183Sopenharmony_ci+ } 440f1549183Sopenharmony_ci+ p2pStateChange(state); 441f1549183Sopenharmony_ci+ } 442f1549183Sopenharmony_ci+ 443f1549183Sopenharmony_ci+ void OnP2pPersistentGroupsChanged(void) override 444f1549183Sopenharmony_ci+ { 445f1549183Sopenharmony_ci+ WIFI_LOGI("received persistent group changed event"); 446f1549183Sopenharmony_ci+ if (p2pPersistentGroupChange == nullptr) { 447f1549183Sopenharmony_ci+ WIFI_LOGI("OnP2pPersistentGroupsChanged not registered"); 448f1549183Sopenharmony_ci+ return; 449f1549183Sopenharmony_ci+ } 450f1549183Sopenharmony_ci+ p2pPersistentGroupChange(); 451f1549183Sopenharmony_ci+ } 452f1549183Sopenharmony_ci+ 453f1549183Sopenharmony_ci+ void OnP2pThisDeviceChanged(const WifiP2pDevice& device) override 454f1549183Sopenharmony_ci+ { 455f1549183Sopenharmony_ci+ WIFI_LOGI("received this device changed event"); 456f1549183Sopenharmony_ci+ if (p2pDeviceChange == nullptr) { 457f1549183Sopenharmony_ci+ WIFI_LOGI("OnP2pThisDeviceChanged not registered"); 458f1549183Sopenharmony_ci+ return; 459f1549183Sopenharmony_ci+ } 460f1549183Sopenharmony_ci+ CWifiP2pDevice cdevice; 461f1549183Sopenharmony_ci+ cdevice.deviceName = const_cast<char*>(device.GetDeviceName().c_str()); 462f1549183Sopenharmony_ci+ cdevice.deviceAddress = const_cast<char*>(device.GetDeviceAddress().c_str()); 463f1549183Sopenharmony_ci+ cdevice.primaryDeviceType = const_cast<char*>(device.GetPrimaryDeviceType().c_str()); 464f1549183Sopenharmony_ci+ cdevice.deviceStatus = static_cast<int32_t>(device.GetP2pDeviceStatus()); 465f1549183Sopenharmony_ci+ cdevice.groupCapabilities = device.GetGroupCapabilitys(); 466f1549183Sopenharmony_ci+ cdevice.deviceAddressType = device.GetDeviceAddressType(); 467f1549183Sopenharmony_ci+ p2pDeviceChange(cdevice); 468f1549183Sopenharmony_ci+ } 469f1549183Sopenharmony_ci+ 470f1549183Sopenharmony_ci+ void OnP2pPeersChanged(const std::vector<WifiP2pDevice>& devices) override 471f1549183Sopenharmony_ci+ { 472f1549183Sopenharmony_ci+ WIFI_LOGI("received p2p peers changed event, devices count: %{public}d", static_cast<int>(devices.size())); 473f1549183Sopenharmony_ci+ if (p2pPeerDeviceChange == nullptr) { 474f1549183Sopenharmony_ci+ WIFI_LOGI("OnP2pPeersChanged not registered"); 475f1549183Sopenharmony_ci+ return; 476f1549183Sopenharmony_ci+ } 477f1549183Sopenharmony_ci+ int64_t size = static_cast<int64_t>(devices.size()); 478f1549183Sopenharmony_ci+ if (size <= 0) { 479f1549183Sopenharmony_ci+ return; 480f1549183Sopenharmony_ci+ } 481f1549183Sopenharmony_ci+ CWifiP2pDevice cdevices[size]; 482f1549183Sopenharmony_ci+ WifiP2pDeviceArr arr{.head = cdevices, .size = size}; 483f1549183Sopenharmony_ci+ uint32_t idx = 0; 484f1549183Sopenharmony_ci+ for (auto& each : devices) { 485f1549183Sopenharmony_ci+ cdevices[idx].deviceName = const_cast<char*>(each.GetDeviceName().c_str()); 486f1549183Sopenharmony_ci+ cdevices[idx].deviceAddress = const_cast<char*>(each.GetDeviceAddress().c_str()); 487f1549183Sopenharmony_ci+ cdevices[idx].primaryDeviceType = const_cast<char*>(each.GetPrimaryDeviceType().c_str()); 488f1549183Sopenharmony_ci+ cdevices[idx].deviceStatus = static_cast<int32_t>(each.GetP2pDeviceStatus()); 489f1549183Sopenharmony_ci+ cdevices[idx].groupCapabilities = each.GetGroupCapabilitys(); 490f1549183Sopenharmony_ci+ cdevices[idx].deviceAddressType = each.GetDeviceAddressType(); 491f1549183Sopenharmony_ci+ idx++; 492f1549183Sopenharmony_ci+ } 493f1549183Sopenharmony_ci+ p2pPeerDeviceChange(arr); 494f1549183Sopenharmony_ci+ } 495f1549183Sopenharmony_ci+ 496f1549183Sopenharmony_ci+ void OnP2pServicesChanged(const std::vector<WifiP2pServiceInfo>& srvInfo) override 497f1549183Sopenharmony_ci+ { 498f1549183Sopenharmony_ci+ } 499f1549183Sopenharmony_ci+ 500f1549183Sopenharmony_ci+ void OnP2pConnectionChanged(const WifiP2pLinkedInfo& info) override 501f1549183Sopenharmony_ci+ { 502f1549183Sopenharmony_ci+ WIFI_LOGI("received p2p connection changed event, state: %{public}d", 503f1549183Sopenharmony_ci+ static_cast<int>(info.GetConnectState())); 504f1549183Sopenharmony_ci+ if (p2pConnectionChange == nullptr) { 505f1549183Sopenharmony_ci+ WIFI_LOGI("OnP2pConnectionChanged not registered"); 506f1549183Sopenharmony_ci+ return; 507f1549183Sopenharmony_ci+ } 508f1549183Sopenharmony_ci+ CWifiP2PLinkedInfo cinfo; 509f1549183Sopenharmony_ci+ cinfo.connectState = static_cast<int32_t>(info.GetConnectState()); 510f1549183Sopenharmony_ci+ cinfo.isGroupOwner = info.IsGroupOwner(); 511f1549183Sopenharmony_ci+ cinfo.groupOwnerAddr = const_cast<char*>(info.GetGroupOwnerAddress().c_str()); 512f1549183Sopenharmony_ci+ p2pConnectionChange(cinfo); 513f1549183Sopenharmony_ci+ } 514f1549183Sopenharmony_ci+ 515f1549183Sopenharmony_ci+ void OnP2pDiscoveryChanged(bool isChange) override 516f1549183Sopenharmony_ci+ { 517f1549183Sopenharmony_ci+ WIFI_LOGI("received discovery state changed event"); 518f1549183Sopenharmony_ci+ if (p2pDiscoveryChange == nullptr) { 519f1549183Sopenharmony_ci+ WIFI_LOGI("OnP2pDiscoveryChanged not registered"); 520f1549183Sopenharmony_ci+ return; 521f1549183Sopenharmony_ci+ } 522f1549183Sopenharmony_ci+ p2pDiscoveryChange(static_cast<int32_t>(isChange)); 523f1549183Sopenharmony_ci+ } 524f1549183Sopenharmony_ci+ 525f1549183Sopenharmony_ci+ void OnP2pActionResult(P2pActionCallback action, ErrCode code) override 526f1549183Sopenharmony_ci+ { 527f1549183Sopenharmony_ci+ } 528f1549183Sopenharmony_ci+ 529f1549183Sopenharmony_ci+ void OnConfigChanged(CfgType type, char* data, int dataLen) override 530f1549183Sopenharmony_ci+ { 531f1549183Sopenharmony_ci+ } 532f1549183Sopenharmony_ci+ 533f1549183Sopenharmony_ci+ void OnP2pGcJoinGroup(const OHOS::Wifi::GcInfo &info) override 534f1549183Sopenharmony_ci+ { 535f1549183Sopenharmony_ci+ } 536f1549183Sopenharmony_ci+ 537f1549183Sopenharmony_ci+ void OnP2pGcLeaveGroup(const OHOS::Wifi::GcInfo &info) override 538f1549183Sopenharmony_ci+ { 539f1549183Sopenharmony_ci+ } 540f1549183Sopenharmony_ci+ 541f1549183Sopenharmony_ci+ void OnP2pPrivatePeersChanged(const std::string &priWfdInfo) override 542f1549183Sopenharmony_ci+ { 543f1549183Sopenharmony_ci+ } 544f1549183Sopenharmony_ci+ 545f1549183Sopenharmony_ci+ OHOS::sptr<OHOS::IRemoteObject> AsObject() override 546f1549183Sopenharmony_ci+ { 547f1549183Sopenharmony_ci+ return nullptr; 548f1549183Sopenharmony_ci+ } 549f1549183Sopenharmony_ci+ 550f1549183Sopenharmony_ci+ void SetCallback(const std::string &type, void (* callback)()) 551f1549183Sopenharmony_ci+ { 552f1549183Sopenharmony_ci+ if (type == EVENT_P2P_STATE_CHANGE) { 553f1549183Sopenharmony_ci+ p2pStateChange = CJLambda::Create(reinterpret_cast<void (*)(int32_t)>(callback)); 554f1549183Sopenharmony_ci+ } 555f1549183Sopenharmony_ci+ if (type == EVENT_P2P_PERSISTENT_GROUP_CHANGE) { 556f1549183Sopenharmony_ci+ p2pPersistentGroupChange = CJLambda::Create(callback); 557f1549183Sopenharmony_ci+ } 558f1549183Sopenharmony_ci+ if (type == EVENT_P2P_DEVICE_STATE_CHANGE) { 559f1549183Sopenharmony_ci+ p2pDeviceChange = CJLambda::Create(reinterpret_cast<void (*)(CWifiP2pDevice)>(callback)); 560f1549183Sopenharmony_ci+ } 561f1549183Sopenharmony_ci+ if (type == EVENT_P2P_PEER_DEVICE_CHANGE) { 562f1549183Sopenharmony_ci+ p2pPeerDeviceChange = CJLambda::Create(reinterpret_cast<void (*)(WifiP2pDeviceArr)>(callback)); 563f1549183Sopenharmony_ci+ } 564f1549183Sopenharmony_ci+ if (type == EVENT_P2P_CONN_STATE_CHANGE) { 565f1549183Sopenharmony_ci+ p2pConnectionChange = CJLambda::Create(reinterpret_cast<void (*)(CWifiP2PLinkedInfo)>(callback)); 566f1549183Sopenharmony_ci+ } 567f1549183Sopenharmony_ci+ if (type == EVENT_P2P_DISCOVERY_CHANGE) { 568f1549183Sopenharmony_ci+ p2pDiscoveryChange = CJLambda::Create(reinterpret_cast<void (*)(int32_t)>(callback)); 569f1549183Sopenharmony_ci+ } 570f1549183Sopenharmony_ci+ } 571f1549183Sopenharmony_ci+private: 572f1549183Sopenharmony_ci+ std::function<void(int32_t)> p2pStateChange{nullptr}; 573f1549183Sopenharmony_ci+ std::function<void(CWifiP2PLinkedInfo)> p2pConnectionChange{nullptr}; 574f1549183Sopenharmony_ci+ std::function<void(CWifiP2pDevice)> p2pDeviceChange{nullptr}; 575f1549183Sopenharmony_ci+ std::function<void(WifiP2pDeviceArr)> p2pPeerDeviceChange{nullptr}; 576f1549183Sopenharmony_ci+ std::function<void()> p2pPersistentGroupChange{nullptr}; 577f1549183Sopenharmony_ci+ std::function<void(int32_t)> p2pDiscoveryChange{nullptr}; 578f1549183Sopenharmony_ci+}; 579f1549183Sopenharmony_ci+ 580f1549183Sopenharmony_ci+sptr<CjWifiDeviceEventCallback> cjWifiDeviceCallback = 581f1549183Sopenharmony_ci+ sptr<CjWifiDeviceEventCallback>(new (std::nothrow) CjWifiDeviceEventCallback()); 582f1549183Sopenharmony_ci+ 583f1549183Sopenharmony_ci+sptr<CjWifiScanEventCallback> cjWifiScanCallback = 584f1549183Sopenharmony_ci+ sptr<CjWifiScanEventCallback>(new (std::nothrow) CjWifiScanEventCallback()); 585f1549183Sopenharmony_ci+ 586f1549183Sopenharmony_ci+sptr<CjWifiHotspotEventCallback> cjWifiHotspotCallback = 587f1549183Sopenharmony_ci+ sptr<CjWifiHotspotEventCallback>(new (std::nothrow) CjWifiHotspotEventCallback()); 588f1549183Sopenharmony_ci+ 589f1549183Sopenharmony_ci+sptr<CjWifiP2pEventCallback> cjWifiP2pCallback = 590f1549183Sopenharmony_ci+ sptr<CjWifiP2pEventCallback>(new (std::nothrow) CjWifiP2pEventCallback()); 591f1549183Sopenharmony_ci+ 592f1549183Sopenharmony_ci+int32_t CjEventRegister::Register(const std::string& type, void (* callback)()) 593f1549183Sopenharmony_ci+{ 594f1549183Sopenharmony_ci+ WIFI_LOGI("Register event: %{public}s", type.c_str()); 595f1549183Sopenharmony_ci+ std::vector<std::string> event = {type}; 596f1549183Sopenharmony_ci+ 597f1549183Sopenharmony_ci+ if (type == EVENT_STA_POWER_STATE_CHANGE || type == EVENT_STA_CONN_STATE_CHANGE 598f1549183Sopenharmony_ci+ || type == EVENT_STA_RSSI_STATE_CHANGE) { 599f1549183Sopenharmony_ci+ cjWifiDeviceCallback->SetCallback(type, reinterpret_cast<void (*)(int32_t)>(callback)); 600f1549183Sopenharmony_ci+ CjEventRegister::GetInstance().RegisterDeviceEvents(event); 601f1549183Sopenharmony_ci+ } 602f1549183Sopenharmony_ci+ 603f1549183Sopenharmony_ci+ if (type == EVENT_STA_SCAN_STATE_CHANGE) { 604f1549183Sopenharmony_ci+ cjWifiScanCallback->SetScanStateChange(reinterpret_cast<void (*)(int32_t)>(callback)); 605f1549183Sopenharmony_ci+ CjEventRegister::GetInstance().RegisterScanEvents(event); 606f1549183Sopenharmony_ci+ } 607f1549183Sopenharmony_ci+ 608f1549183Sopenharmony_ci+ if (type == EVENT_HOTSPOT_STATE_CHANGE) { 609f1549183Sopenharmony_ci+ cjWifiHotspotCallback->SetHotspotStateChanged(reinterpret_cast<void (*)(int32_t)>(callback)); 610f1549183Sopenharmony_ci+ CjEventRegister::GetInstance().RegisterHotspotEvents(event); 611f1549183Sopenharmony_ci+ } 612f1549183Sopenharmony_ci+ 613f1549183Sopenharmony_ci+ if (type == EVENT_P2P_STATE_CHANGE || type == EVENT_P2P_PERSISTENT_GROUP_CHANGE || 614f1549183Sopenharmony_ci+ type == EVENT_P2P_DEVICE_STATE_CHANGE || type == EVENT_P2P_PEER_DEVICE_CHANGE || 615f1549183Sopenharmony_ci+ type == EVENT_P2P_CONN_STATE_CHANGE || type == EVENT_P2P_DISCOVERY_CHANGE) { 616f1549183Sopenharmony_ci+ cjWifiP2pCallback->SetCallback(type, callback); 617f1549183Sopenharmony_ci+ CjEventRegister::GetInstance().RegisterP2PEvents(event); 618f1549183Sopenharmony_ci+ } 619f1549183Sopenharmony_ci+ return WIFI_OPT_SUCCESS; 620f1549183Sopenharmony_ci+} 621f1549183Sopenharmony_ci+ 622f1549183Sopenharmony_ci+int32_t CjEventRegister::UnRegister(const std::string& type) 623f1549183Sopenharmony_ci+{ 624f1549183Sopenharmony_ci+ return WIFI_OPT_SUCCESS; 625f1549183Sopenharmony_ci+} 626f1549183Sopenharmony_ci+ 627f1549183Sopenharmony_ci+ErrCode CjEventRegister::RegisterDeviceEvents(const std::vector<std::string> &event) 628f1549183Sopenharmony_ci+{ 629f1549183Sopenharmony_ci+ if (g_cjWifiStaPtr == nullptr) { 630f1549183Sopenharmony_ci+ WIFI_LOGE("Register sta event get instance failed!"); 631f1549183Sopenharmony_ci+ return WIFI_OPT_FAILED; 632f1549183Sopenharmony_ci+ } 633f1549183Sopenharmony_ci+ return g_cjWifiStaPtr->RegisterCallBack(cjWifiDeviceCallback, event); 634f1549183Sopenharmony_ci+} 635f1549183Sopenharmony_ci+ 636f1549183Sopenharmony_ci+ErrCode CjEventRegister::RegisterScanEvents(const std::vector<std::string> &event) 637f1549183Sopenharmony_ci+{ 638f1549183Sopenharmony_ci+ if (g_cjWifiScanPtr == nullptr) { 639f1549183Sopenharmony_ci+ WIFI_LOGE("Register scan event get instance failed!"); 640f1549183Sopenharmony_ci+ return WIFI_OPT_FAILED; 641f1549183Sopenharmony_ci+ } 642f1549183Sopenharmony_ci+ return g_cjWifiScanPtr->RegisterCallBack(cjWifiScanCallback, event); 643f1549183Sopenharmony_ci+} 644f1549183Sopenharmony_ci+ 645f1549183Sopenharmony_ci+ErrCode CjEventRegister::RegisterHotspotEvents(const std::vector<std::string> &event) 646f1549183Sopenharmony_ci+{ 647f1549183Sopenharmony_ci+ if (g_cjWifiHotspotPtr == nullptr) { 648f1549183Sopenharmony_ci+ WIFI_LOGE("Register hotspot event get instance failed!"); 649f1549183Sopenharmony_ci+ return WIFI_OPT_FAILED; 650f1549183Sopenharmony_ci+ } 651f1549183Sopenharmony_ci+ return g_cjWifiHotspotPtr->RegisterCallBack(cjWifiHotspotCallback, event); 652f1549183Sopenharmony_ci+} 653f1549183Sopenharmony_ci+ 654f1549183Sopenharmony_ci+ErrCode CjEventRegister::RegisterP2PEvents(const std::vector<std::string> &event) 655f1549183Sopenharmony_ci+{ 656f1549183Sopenharmony_ci+ if (g_cjWifiP2pPtr == nullptr) { 657f1549183Sopenharmony_ci+ WIFI_LOGE("Register p2p event get instance failed!"); 658f1549183Sopenharmony_ci+ return WIFI_OPT_FAILED; 659f1549183Sopenharmony_ci+ } 660f1549183Sopenharmony_ci+ return g_cjWifiP2pPtr->RegisterCallBack(cjWifiP2pCallback, event); 661f1549183Sopenharmony_ci+} 662f1549183Sopenharmony_ci+ 663f1549183Sopenharmony_ci+void CjWifiAbilityStatusChange::OnAddSystemAbility(int32_t systemAbilityId, const std::string& deviceId) 664f1549183Sopenharmony_ci+{ 665f1549183Sopenharmony_ci+ WIFI_LOGI("OnAddSystemAbility systemAbilityId:%{public}d", systemAbilityId); 666f1549183Sopenharmony_ci+ std::vector<std::string> event; 667f1549183Sopenharmony_ci+ switch (systemAbilityId) { 668f1549183Sopenharmony_ci+ case WIFI_DEVICE_ABILITY_ID: { 669f1549183Sopenharmony_ci+ event.push_back(EVENT_STA_POWER_STATE_CHANGE); 670f1549183Sopenharmony_ci+ event.push_back(EVENT_STA_CONN_STATE_CHANGE); 671f1549183Sopenharmony_ci+ event.push_back(EVENT_STA_RSSI_STATE_CHANGE); 672f1549183Sopenharmony_ci+ CjEventRegister::GetInstance().RegisterDeviceEvents(event); 673f1549183Sopenharmony_ci+ break; 674f1549183Sopenharmony_ci+ } 675f1549183Sopenharmony_ci+ case WIFI_SCAN_ABILITY_ID: { 676f1549183Sopenharmony_ci+ event.push_back(EVENT_STA_SCAN_STATE_CHANGE); 677f1549183Sopenharmony_ci+ CjEventRegister::GetInstance().RegisterScanEvents(event); 678f1549183Sopenharmony_ci+ break; 679f1549183Sopenharmony_ci+ } 680f1549183Sopenharmony_ci+ case WIFI_HOTSPOT_ABILITY_ID: { 681f1549183Sopenharmony_ci+ event.push_back(EVENT_HOTSPOT_STATE_CHANGE); 682f1549183Sopenharmony_ci+ CjEventRegister::GetInstance().RegisterHotspotEvents(event); 683f1549183Sopenharmony_ci+ break; 684f1549183Sopenharmony_ci+ } 685f1549183Sopenharmony_ci+ case WIFI_P2P_ABILITY_ID: { 686f1549183Sopenharmony_ci+ event.push_back(EVENT_P2P_STATE_CHANGE); 687f1549183Sopenharmony_ci+ event.push_back(EVENT_P2P_PERSISTENT_GROUP_CHANGE); 688f1549183Sopenharmony_ci+ event.push_back(EVENT_P2P_DEVICE_STATE_CHANGE); 689f1549183Sopenharmony_ci+ event.push_back(EVENT_P2P_PEER_DEVICE_CHANGE); 690f1549183Sopenharmony_ci+ event.push_back(EVENT_P2P_CONN_STATE_CHANGE); 691f1549183Sopenharmony_ci+ event.push_back(EVENT_P2P_DISCOVERY_CHANGE); 692f1549183Sopenharmony_ci+ CjEventRegister::GetInstance().RegisterP2PEvents(event); 693f1549183Sopenharmony_ci+ break; 694f1549183Sopenharmony_ci+ } 695f1549183Sopenharmony_ci+ default: 696f1549183Sopenharmony_ci+ WIFI_LOGI("OnAddSystemAbility unhandled sysabilityId:%{public}d", systemAbilityId); 697f1549183Sopenharmony_ci+ return; 698f1549183Sopenharmony_ci+ } 699f1549183Sopenharmony_ci+} 700f1549183Sopenharmony_ci+} 701f1549183Sopenharmony_ci\ No newline at end of file 702f1549183Sopenharmony_cidiff --git a/wifi/frameworks/cj/src/wifi_ffi.cpp b/wifi/frameworks/cj/src/wifi_ffi.cpp 703f1549183Sopenharmony_ciindex 2673fee55..3b1346526 100644 704f1549183Sopenharmony_ci--- a/wifi/frameworks/cj/src/wifi_ffi.cpp 705f1549183Sopenharmony_ci+++ b/wifi/frameworks/cj/src/wifi_ffi.cpp 706f1549183Sopenharmony_ci@@ -22,6 +22,7 @@ 707f1549183Sopenharmony_ci #include "wifi_p2p.h" 708f1549183Sopenharmony_ci #include "wifi_common_util.h" 709f1549183Sopenharmony_ci #include "wifi_logger.h" 710f1549183Sopenharmony_ci+#include "wifi_callback.h" 711f1549183Sopenharmony_ci 712f1549183Sopenharmony_ci DEFINE_WIFILOG_LABEL("CJ_WIFI_FFI"); 713f1549183Sopenharmony_ci 714f1549183Sopenharmony_ci@@ -721,14 +722,22 @@ WifiDeviceConfigArr CJ_GetCandidateConfigs(int32_t &code) 715f1549183Sopenharmony_ci return arr; 716f1549183Sopenharmony_ci } 717f1549183Sopenharmony_ci 718f1549183Sopenharmony_ci-int32_t CJ_WifiOn(char *type, int64_t id) 719f1549183Sopenharmony_ci+int32_t CJ_WifiOn(char *type, void (*callback)()) 720f1549183Sopenharmony_ci { 721f1549183Sopenharmony_ci- return 0; 722f1549183Sopenharmony_ci+ std::string eventType(type); 723f1549183Sopenharmony_ci+ if (eventType.empty()) { 724f1549183Sopenharmony_ci+ return WIFI_OPT_FAILED; 725f1549183Sopenharmony_ci+ } 726f1549183Sopenharmony_ci+ return CjEventRegister::GetInstance().Register(eventType, callback); 727f1549183Sopenharmony_ci } 728f1549183Sopenharmony_ci 729f1549183Sopenharmony_ci int32_t CJ_WifiOff(char* type) 730f1549183Sopenharmony_ci { 731f1549183Sopenharmony_ci- return 0; 732f1549183Sopenharmony_ci+ std::string eventType(type); 733f1549183Sopenharmony_ci+ if (eventType.empty()) { 734f1549183Sopenharmony_ci+ return WIFI_OPT_FAILED; 735f1549183Sopenharmony_ci+ } 736f1549183Sopenharmony_ci+ return CjEventRegister::GetInstance().UnRegister(eventType); 737f1549183Sopenharmony_ci } 738f1549183Sopenharmony_ci 739f1549183Sopenharmony_ci } 740f1549183Sopenharmony_ci-- 741f1549183Sopenharmony_ci2.34.1 742f1549183Sopenharmony_ci 743