1 /* 2 * Copyright (C) 2021-2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include "concrete_clientmode_manager.h" 17 #include "wifi_errcode.h" 18 19 DEFINE_WIFILOG_LABEL("ConcreteClientModeManager"); 20 21 namespace OHOS { 22 namespace Wifi { ConcreteClientModeManager(ConcreteManagerRole role,int id)23ConcreteClientModeManager::ConcreteClientModeManager(ConcreteManagerRole role, int id) : mid(id), curRole(role) 24 {} 25 ~ConcreteClientModeManager()26ConcreteClientModeManager::~ConcreteClientModeManager() 27 { 28 WIFI_LOGE("exit"); 29 delete pConcreteMangerMachine; 30 pConcreteMangerMachine = nullptr; 31 } 32 RegisterCallback(const ConcreteModeCallback & callbacks)33ErrCode ConcreteClientModeManager::RegisterCallback(const ConcreteModeCallback &callbacks) 34 { 35 mcb = callbacks; 36 return WIFI_OPT_SUCCESS; 37 } 38 SetRole(ConcreteManagerRole role)39void ConcreteClientModeManager::SetRole(ConcreteManagerRole role) 40 { 41 pConcreteMangerMachine->SetTargetRole(role); 42 curRole = role; 43 if (role == ConcreteManagerRole::ROLE_CLIENT_STA) { 44 pConcreteMangerMachine->SendMessage(CONCRETE_CMD_SWITCH_TO_CONNECT_MODE); 45 } else if (role == ConcreteManagerRole::ROLE_CLIENT_SCAN_ONLY) { 46 pConcreteMangerMachine->SendMessage(CONCRETE_CMD_SWITCH_TO_SCAN_ONLY_MODE); 47 } else if (role == ConcreteManagerRole::ROLE_CLIENT_MIX_SEMI_ACTIVE || 48 role == ConcreteManagerRole::ROLE_CLIENT_STA_SEMI_ACTIVE) { 49 pConcreteMangerMachine->SendMessage(CONCRETE_CMD_SWITCH_TO_SEMI_ACTIVE_MODE); 50 } else { 51 WIFI_LOGE("setrole is invalid"); 52 } 53 } 54 InitConcreteManager()55ErrCode ConcreteClientModeManager::InitConcreteManager() 56 { 57 pConcreteMangerMachine = new (std::nothrow) ConcreteMangerMachine(); 58 if (pConcreteMangerMachine == nullptr) { 59 WIFI_LOGE("Alloc pConcreteMangerMachine failed.\n"); 60 return WIFI_OPT_FAILED; 61 } 62 if (pConcreteMangerMachine->InitConcreteMangerMachine() != WIFI_OPT_SUCCESS) { 63 WIFI_LOGE("InitConcreteMangerMachine failed.\n"); 64 return WIFI_OPT_FAILED; 65 } 66 pConcreteMangerMachine->RegisterCallback(mcb); 67 pConcreteMangerMachine->SetTargetRole(curRole); 68 pConcreteMangerMachine->SendMessage(CONCRETE_CMD_START, mid); 69 return WIFI_OPT_SUCCESS; 70 } 71 GetConcreteMachine()72ConcreteMangerMachine *ConcreteClientModeManager::GetConcreteMachine() 73 { 74 return pConcreteMangerMachine; 75 } 76 77 } // namespace Wifi 78 } // namespace OHOS