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)23 ConcreteClientModeManager::ConcreteClientModeManager(ConcreteManagerRole role, int id) : mid(id), curRole(role)
24 {}
25 
~ConcreteClientModeManager()26 ConcreteClientModeManager::~ConcreteClientModeManager()
27 {
28     WIFI_LOGE("exit");
29     delete pConcreteMangerMachine;
30     pConcreteMangerMachine = nullptr;
31 }
32 
RegisterCallback(const ConcreteModeCallback & callbacks)33 ErrCode ConcreteClientModeManager::RegisterCallback(const ConcreteModeCallback &callbacks)
34 {
35     mcb = callbacks;
36     return WIFI_OPT_SUCCESS;
37 }
38 
SetRole(ConcreteManagerRole role)39 void 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()55 ErrCode 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()72 ConcreteMangerMachine *ConcreteClientModeManager::GetConcreteMachine()
73 {
74     return pConcreteMangerMachine;
75 }
76 
77 } // namespace Wifi
78 } // namespace OHOS