12d43be4eSopenharmony_ci/* 22d43be4eSopenharmony_ci * Copyright (C) 2021 Huawei Device Co., Ltd. 32d43be4eSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 42d43be4eSopenharmony_ci * you may not use this file except in compliance with the License. 52d43be4eSopenharmony_ci * You may obtain a copy of the License at 62d43be4eSopenharmony_ci * 72d43be4eSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 82d43be4eSopenharmony_ci * 92d43be4eSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 102d43be4eSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 112d43be4eSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 122d43be4eSopenharmony_ci * See the License for the specific language governing permissions and 132d43be4eSopenharmony_ci * limitations under the License. 142d43be4eSopenharmony_ci */ 152d43be4eSopenharmony_ci 162d43be4eSopenharmony_ci#ifndef ACTIVE_H 172d43be4eSopenharmony_ci#define ACTIVE_H 182d43be4eSopenharmony_ci 192d43be4eSopenharmony_ci#include <memory> 202d43be4eSopenharmony_ci#include <string> 212d43be4eSopenharmony_ci 222d43be4eSopenharmony_ci#include "cellular_data_event_code.h" 232d43be4eSopenharmony_ci#include "cellular_data_state_machine.h" 242d43be4eSopenharmony_ci#include "inner_event.h" 252d43be4eSopenharmony_ci#include "radio_event.h" 262d43be4eSopenharmony_ci 272d43be4eSopenharmony_cinamespace OHOS { 282d43be4eSopenharmony_cinamespace Telephony { 292d43be4eSopenharmony_ciclass Active : public State { 302d43be4eSopenharmony_cipublic: 312d43be4eSopenharmony_ci Active(std::weak_ptr<CellularDataStateMachine> &&cellularService, std::string &&name) 322d43be4eSopenharmony_ci : State(std::move(name)), stateMachine_(std::move(cellularService)) 332d43be4eSopenharmony_ci {} 342d43be4eSopenharmony_ci virtual ~Active() = default; 352d43be4eSopenharmony_ci virtual void StateBegin(); 362d43be4eSopenharmony_ci virtual void StateEnd(); 372d43be4eSopenharmony_ci virtual bool StateProcess(const AppExecFwk::InnerEvent::Pointer &event); 382d43be4eSopenharmony_ci 392d43be4eSopenharmony_ciprivate: 402d43be4eSopenharmony_ci bool ProcessConnectDone(const AppExecFwk::InnerEvent::Pointer &event); 412d43be4eSopenharmony_ci bool ProcessDisconnectDone(const AppExecFwk::InnerEvent::Pointer &event); 422d43be4eSopenharmony_ci bool ProcessDisconnectAllDone(const AppExecFwk::InnerEvent::Pointer &event); 432d43be4eSopenharmony_ci bool ProcessLostConnection(const AppExecFwk::InnerEvent::Pointer &event); 442d43be4eSopenharmony_ci bool ProcessRilAdapterHostDied(const AppExecFwk::InnerEvent::Pointer &event); 452d43be4eSopenharmony_ci bool ProcessLinkCapabilityChanged(const AppExecFwk::InnerEvent::Pointer &event); 462d43be4eSopenharmony_ci bool ProcessDataConnectionRoamOn(const AppExecFwk::InnerEvent::Pointer &event); 472d43be4eSopenharmony_ci bool ProcessDataConnectionRoamOff(const AppExecFwk::InnerEvent::Pointer &event); 482d43be4eSopenharmony_ci bool ProcessDataConnectionVoiceCallStartedOrEnded(const AppExecFwk::InnerEvent::Pointer &event); 492d43be4eSopenharmony_ci bool ProcessNrStateChanged(const AppExecFwk::InnerEvent::Pointer &event); 502d43be4eSopenharmony_ci bool ProcessNrFrequencyChanged(const AppExecFwk::InnerEvent::Pointer &event); 512d43be4eSopenharmony_ci bool ProcessDataConnectionComplete(const AppExecFwk::InnerEvent::Pointer &event); 522d43be4eSopenharmony_ci void RefreshConnectionBandwidths(); 532d43be4eSopenharmony_ci void RefreshTcpBufferSizes(); 542d43be4eSopenharmony_ci 552d43be4eSopenharmony_ciprivate: 562d43be4eSopenharmony_ci using Fun = std::function<bool(const AppExecFwk::InnerEvent::Pointer &data)>; 572d43be4eSopenharmony_ci std::map<uint32_t, Fun> eventIdFunMap_ { 582d43be4eSopenharmony_ci { CellularDataEventCode::MSG_SM_CONNECT, 592d43be4eSopenharmony_ci [this](const AppExecFwk::InnerEvent::Pointer &data) { return ProcessConnectDone(data); } }, 602d43be4eSopenharmony_ci { CellularDataEventCode::MSG_SM_DISCONNECT, 612d43be4eSopenharmony_ci [this](const AppExecFwk::InnerEvent::Pointer &data) { return ProcessDisconnectDone(data); } }, 622d43be4eSopenharmony_ci { CellularDataEventCode::MSG_SM_DISCONNECT_ALL, 632d43be4eSopenharmony_ci [this](const AppExecFwk::InnerEvent::Pointer &data) { return ProcessDisconnectAllDone(data); } }, 642d43be4eSopenharmony_ci { CellularDataEventCode::MSG_SM_LOST_CONNECTION, 652d43be4eSopenharmony_ci [this](const AppExecFwk::InnerEvent::Pointer &data) { return ProcessLostConnection(data); } }, 662d43be4eSopenharmony_ci { CellularDataEventCode::MSG_SM_LINK_CAPABILITY_CHANGED, 672d43be4eSopenharmony_ci [this](const AppExecFwk::InnerEvent::Pointer &data) { return ProcessLinkCapabilityChanged(data); } }, 682d43be4eSopenharmony_ci { CellularDataEventCode::MSG_SM_DATA_ROAM_ON, 692d43be4eSopenharmony_ci [this](const AppExecFwk::InnerEvent::Pointer &data) { return ProcessDataConnectionRoamOn(data); } }, 702d43be4eSopenharmony_ci { CellularDataEventCode::MSG_SM_DATA_ROAM_OFF, 712d43be4eSopenharmony_ci [this](const AppExecFwk::InnerEvent::Pointer &data) { return ProcessDataConnectionRoamOff(data); } }, 722d43be4eSopenharmony_ci { CellularDataEventCode::MSG_SM_VOICE_CALL_STARTED, 732d43be4eSopenharmony_ci [this](const AppExecFwk::InnerEvent::Pointer &data) { 742d43be4eSopenharmony_ci return ProcessDataConnectionVoiceCallStartedOrEnded(data); 752d43be4eSopenharmony_ci } }, 762d43be4eSopenharmony_ci { CellularDataEventCode::MSG_SM_VOICE_CALL_ENDED, 772d43be4eSopenharmony_ci [this](const AppExecFwk::InnerEvent::Pointer &data) { 782d43be4eSopenharmony_ci return ProcessDataConnectionVoiceCallStartedOrEnded(data); 792d43be4eSopenharmony_ci } }, 802d43be4eSopenharmony_ci { CellularDataEventCode::MSG_SM_RIL_ADAPTER_HOST_DIED, 812d43be4eSopenharmony_ci [this](const AppExecFwk::InnerEvent::Pointer &data) { return ProcessRilAdapterHostDied(data); } }, 822d43be4eSopenharmony_ci { RadioEvent::RADIO_NR_STATE_CHANGED, 832d43be4eSopenharmony_ci [this](const AppExecFwk::InnerEvent::Pointer &data) { return ProcessNrStateChanged(data); } }, 842d43be4eSopenharmony_ci { RadioEvent::RADIO_NR_FREQUENCY_CHANGED, 852d43be4eSopenharmony_ci [this](const AppExecFwk::InnerEvent::Pointer &data) { return ProcessNrFrequencyChanged(data); } }, 862d43be4eSopenharmony_ci { RadioEvent::RADIO_RIL_SETUP_DATA_CALL, 872d43be4eSopenharmony_ci [this](const AppExecFwk::InnerEvent::Pointer &data) { return ProcessDataConnectionComplete(data); } }, 882d43be4eSopenharmony_ci }; 892d43be4eSopenharmony_ci std::weak_ptr<CellularDataStateMachine> stateMachine_; 902d43be4eSopenharmony_ci}; 912d43be4eSopenharmony_ci} // namespace Telephony 922d43be4eSopenharmony_ci} // namespace OHOS 932d43be4eSopenharmony_ci#endif // ACTIVE_H 94