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 CELLULAR_DATA_CLIENT_H 172d43be4eSopenharmony_ci#define CELLULAR_DATA_CLIENT_H 182d43be4eSopenharmony_ci 192d43be4eSopenharmony_ci#include <cstdint> 202d43be4eSopenharmony_ci#include <iremote_object.h> 212d43be4eSopenharmony_ci#include <singleton.h> 222d43be4eSopenharmony_ci 232d43be4eSopenharmony_ci#include "data_sim_account_call_back.h" 242d43be4eSopenharmony_ci#include "i_cellular_data_manager.h" 252d43be4eSopenharmony_ci#include "sim_account_callback.h" 262d43be4eSopenharmony_ci#include "apn_item.h" 272d43be4eSopenharmony_ci#include "cellular_data_constant.h" 282d43be4eSopenharmony_ci 292d43be4eSopenharmony_cinamespace OHOS { 302d43be4eSopenharmony_cinamespace Telephony { 312d43be4eSopenharmony_ciclass CellularDataClient : public DelayedRefSingleton<CellularDataClient> { 322d43be4eSopenharmony_ci DECLARE_DELAYED_REF_SINGLETON(CellularDataClient); 332d43be4eSopenharmony_ci 342d43be4eSopenharmony_cipublic: 352d43be4eSopenharmony_ci /** 362d43be4eSopenharmony_ci * @brief Whether cellular data service is connected. 372d43be4eSopenharmony_ci * 382d43be4eSopenharmony_ci * @return Return true on connected, false on not connected. 392d43be4eSopenharmony_ci */ 402d43be4eSopenharmony_ci bool IsConnect(); 412d43be4eSopenharmony_ci 422d43be4eSopenharmony_ci /** 432d43be4eSopenharmony_ci * @brief Whether to enable cellular data user switch 442d43be4eSopenharmony_ci * 452d43be4eSopenharmony_ci * @param enable Enable or not. 462d43be4eSopenharmony_ci * @return Return 84082688 invalid parameter, 0 data enable success, others enable fail. 472d43be4eSopenharmony_ci */ 482d43be4eSopenharmony_ci int32_t EnableCellularData(bool enable); 492d43be4eSopenharmony_ci 502d43be4eSopenharmony_ci /** 512d43be4eSopenharmony_ci * @brief Whether to enable intelligence switch 522d43be4eSopenharmony_ci * 532d43be4eSopenharmony_ci * @param enable Enable or not. 542d43be4eSopenharmony_ci * @return Return 84082688 invalid parameter, 1 data enable success, 0 enable fail. 552d43be4eSopenharmony_ci */ 562d43be4eSopenharmony_ci int32_t EnableIntelligenceSwitch(bool enable); 572d43be4eSopenharmony_ci 582d43be4eSopenharmony_ci /** 592d43be4eSopenharmony_ci * @brief Whether the cellular data user switch is enabled 602d43be4eSopenharmony_ci * 612d43be4eSopenharmony_ci * @param dataEnabled Indicates the result of data enabled status. 622d43be4eSopenharmony_ci * @return Returns error code. 632d43be4eSopenharmony_ci */ 642d43be4eSopenharmony_ci int32_t IsCellularDataEnabled(bool &dataEnabled); 652d43be4eSopenharmony_ci 662d43be4eSopenharmony_ci /** 672d43be4eSopenharmony_ci * @brief Cellular data connection status 682d43be4eSopenharmony_ci * 692d43be4eSopenharmony_ci * @return Returns data connection status defined in DataConnectionStatus. 702d43be4eSopenharmony_ci */ 712d43be4eSopenharmony_ci int32_t GetCellularDataState(); 722d43be4eSopenharmony_ci 732d43be4eSopenharmony_ci /** 742d43be4eSopenharmony_ci * @brief Get the apn status based on slotId and apnType 752d43be4eSopenharmony_ci * 762d43be4eSopenharmony_ci * @return Returns apn status 772d43be4eSopenharmony_ci */ 782d43be4eSopenharmony_ci int32_t GetApnState(int32_t slotId, const std::string &apnType); 792d43be4eSopenharmony_ci 802d43be4eSopenharmony_ci /** 812d43be4eSopenharmony_ci * Get IntelligenceSwitch State 822d43be4eSopenharmony_ci * 832d43be4eSopenharmony_ci * @param switchState Returns IntelligenceSwitch State 842d43be4eSopenharmony_ci * @return Returns 0 on success, others on failure. 852d43be4eSopenharmony_ci */ 862d43be4eSopenharmony_ci int32_t GetIntelligenceSwitchState(bool &switchState); 872d43be4eSopenharmony_ci 882d43be4eSopenharmony_ci /** 892d43be4eSopenharmony_ci * @brief Get recovery state 902d43be4eSopenharmony_ci */ 912d43be4eSopenharmony_ci int32_t GetDataRecoveryState(); 922d43be4eSopenharmony_ci 932d43be4eSopenharmony_ci /** 942d43be4eSopenharmony_ci * @brief Whether roaming is allowed 952d43be4eSopenharmony_ci * 962d43be4eSopenharmony_ci * @param slotId Indicates card slot identification 972d43be4eSopenharmony_ci * @param dataRoamingEnabled Indicates the result of data roaming enabled status. 982d43be4eSopenharmony_ci * @return Returns error code. 992d43be4eSopenharmony_ci */ 1002d43be4eSopenharmony_ci int32_t IsCellularDataRoamingEnabled(int32_t slotId, bool &dataRoamingEnabled); 1012d43be4eSopenharmony_ci 1022d43be4eSopenharmony_ci /** 1032d43be4eSopenharmony_ci * @brief Whether roaming switches are allowed 1042d43be4eSopenharmony_ci * 1052d43be4eSopenharmony_ci * @param slotId card slot identification 1062d43be4eSopenharmony_ci * @param enable Whether roaming switches are allowed 1072d43be4eSopenharmony_ci * @return Returns 0 on failure, 1 on failure. 84082688 invalid parameter 1082d43be4eSopenharmony_ci */ 1092d43be4eSopenharmony_ci int32_t EnableCellularDataRoaming(int32_t slotId, bool enable); 1102d43be4eSopenharmony_ci 1112d43be4eSopenharmony_ci /** 1122d43be4eSopenharmony_ci * @brief Get the slotId that uses the data traffic by default 1132d43be4eSopenharmony_ci * 1142d43be4eSopenharmony_ci * @return Returns the default settings data card, -1 error code 1152d43be4eSopenharmony_ci */ 1162d43be4eSopenharmony_ci int32_t GetDefaultCellularDataSlotId(); 1172d43be4eSopenharmony_ci 1182d43be4eSopenharmony_ci /** 1192d43be4eSopenharmony_ci * Get the simId that uses the data traffic by default 1202d43be4eSopenharmony_ci * 1212d43be4eSopenharmony_ci * @param simId Returns default settings data sim id 1222d43be4eSopenharmony_ci * @return Returns 0 on success, others on failure. 1232d43be4eSopenharmony_ci */ 1242d43be4eSopenharmony_ci int32_t GetDefaultCellularDataSimId(int32_t &simId); 1252d43be4eSopenharmony_ci 1262d43be4eSopenharmony_ci /** 1272d43be4eSopenharmony_ci * @brief Set the slotId that uses the data traffic by default 1282d43be4eSopenharmony_ci * 1292d43be4eSopenharmony_ci * @param slotId card slot identification 1302d43be4eSopenharmony_ci * @return 0 set success, others set fail, 84082688 invalid parameter 1312d43be4eSopenharmony_ci */ 1322d43be4eSopenharmony_ci int32_t SetDefaultCellularDataSlotId(int32_t slotId); 1332d43be4eSopenharmony_ci 1342d43be4eSopenharmony_ci /** 1352d43be4eSopenharmony_ci * @brief Get data packet type 1362d43be4eSopenharmony_ci * 1372d43be4eSopenharmony_ci * @return Returns cell data flow type defined in CellDataFlowType. 1382d43be4eSopenharmony_ci */ 1392d43be4eSopenharmony_ci int32_t GetCellularDataFlowType(); 1402d43be4eSopenharmony_ci 1412d43be4eSopenharmony_ci /** 1422d43be4eSopenharmony_ci * @brief Whether cellular data has internet capability. 1432d43be4eSopenharmony_ci * 1442d43be4eSopenharmony_ci * @param slotId Card slot identification. 1452d43be4eSopenharmony_ci * @param cid Context identification. 1462d43be4eSopenharmony_ci * @return Return 1 if has, 0 if hasn't. 1472d43be4eSopenharmony_ci */ 1482d43be4eSopenharmony_ci int32_t HasInternetCapability(int32_t slotId, int32_t cid); 1492d43be4eSopenharmony_ci 1502d43be4eSopenharmony_ci /** 1512d43be4eSopenharmony_ci * @brief Clear cellular data connections. 1522d43be4eSopenharmony_ci * 1532d43be4eSopenharmony_ci * @param slotId Card slot identification. 1542d43be4eSopenharmony_ci * @return 1 set success, 0 set fail, 84082688 invalid parameter 1552d43be4eSopenharmony_ci */ 1562d43be4eSopenharmony_ci int32_t ClearCellularDataConnections(int32_t slotId); 1572d43be4eSopenharmony_ci 1582d43be4eSopenharmony_ci int32_t ClearAllConnections(int32_t slotId, DisConnectionReason reason); 1592d43be4eSopenharmony_ci 1602d43be4eSopenharmony_ci int32_t HandleApnChanged(int32_t slotId); 1612d43be4eSopenharmony_ci 1622d43be4eSopenharmony_ci /** 1632d43be4eSopenharmony_ci * @brief Get cellular data proxy. 1642d43be4eSopenharmony_ci * 1652d43be4eSopenharmony_ci * @return Cellular data service. 1662d43be4eSopenharmony_ci */ 1672d43be4eSopenharmony_ci sptr<ICellularDataManager> GetProxy(); 1682d43be4eSopenharmony_ci 1692d43be4eSopenharmony_ci /** 1702d43be4eSopenharmony_ci * @brief Update the slotId that uses the data traffic by default 1712d43be4eSopenharmony_ci * 1722d43be4eSopenharmony_ci * @return Returns the default settings data card, -1 error code 1732d43be4eSopenharmony_ci */ 1742d43be4eSopenharmony_ci int32_t UpdateDefaultCellularDataSlotId(); 1752d43be4eSopenharmony_ci 1762d43be4eSopenharmony_ci /** 1772d43be4eSopenharmony_ci * @brief Get data connections apn attribute. 1782d43be4eSopenharmony_ci * 1792d43be4eSopenharmony_ci * @param slotId Card slot identification. 1802d43be4eSopenharmony_ci * @param apnType Indicates the APN attribute used by the data connection. 1812d43be4eSopenharmony_ci * @return 1 set success, 0 set fail 1822d43be4eSopenharmony_ci */ 1832d43be4eSopenharmony_ci int32_t GetDataConnApnAttr(int32_t slotId, ApnItem::Attribute &apnAttr); 1842d43be4eSopenharmony_ci 1852d43be4eSopenharmony_ci /** 1862d43be4eSopenharmony_ci * @brief Get data connections ip type. 1872d43be4eSopenharmony_ci * 1882d43be4eSopenharmony_ci * @param slotId Card slot identification. 1892d43be4eSopenharmony_ci * @param ipType Indicates IP array after data connection. 1902d43be4eSopenharmony_ci * @return 1 set success, 0 set fail 1912d43be4eSopenharmony_ci */ 1922d43be4eSopenharmony_ci int32_t GetDataConnIpType(int32_t slotId, std::string &ipType); 1932d43be4eSopenharmony_ci 1942d43be4eSopenharmony_ci /** 1952d43be4eSopenharmony_ci * @brief Whether do recovery is needed. 1962d43be4eSopenharmony_ci * 1972d43be4eSopenharmony_ci * @param slotId Card slot identification. 1982d43be4eSopenharmony_ci * @param needDoRecovery Whether do recovery is needed. 1992d43be4eSopenharmony_ci * @return 1 set success, 0 set fail 2002d43be4eSopenharmony_ci */ 2012d43be4eSopenharmony_ci int32_t IsNeedDoRecovery(int32_t slotId, bool needDoRecovery); 2022d43be4eSopenharmony_ci 2032d43be4eSopenharmony_ci /** 2042d43be4eSopenharmony_ci * @brief Init CellularDataController instance. 2052d43be4eSopenharmony_ci * 2062d43be4eSopenharmony_ci * @param slotId Card slot identification. 2072d43be4eSopenharmony_ci * @return 1 set success, 0 set fail 2082d43be4eSopenharmony_ci */ 2092d43be4eSopenharmony_ci int32_t InitCellularDataController(int32_t slotId); 2102d43be4eSopenharmony_ci 2112d43be4eSopenharmony_ci int32_t EstablishAllApnsIfConnectable(int32_t slotId); 2122d43be4eSopenharmony_ci 2132d43be4eSopenharmony_ci /** 2142d43be4eSopenharmony_ci * @brief Release cellular data connection. 2152d43be4eSopenharmony_ci * 2162d43be4eSopenharmony_ci * @param slotId Card slot identification. 2172d43be4eSopenharmony_ci * @return 1 set success, 0 set fail 2182d43be4eSopenharmony_ci */ 2192d43be4eSopenharmony_ci int32_t ReleaseCellularDataConnection(int32_t slotId); 2202d43be4eSopenharmony_ci 2212d43be4eSopenharmony_ci /** 2222d43be4eSopenharmony_ci * @brief Get cellular data supplierId. 2232d43be4eSopenharmony_ci * 2242d43be4eSopenharmony_ci * @param slotId Card slot identification. 2252d43be4eSopenharmony_ci * @param capability Net capability. 2262d43be4eSopenharmony_ci * @param supplierId Cellular supplier id. 2272d43be4eSopenharmony_ci * @return 0 get success, others get fail. 2282d43be4eSopenharmony_ci */ 2292d43be4eSopenharmony_ci int32_t GetCellularDataSupplierId(int32_t slotId, uint64_t capability, uint32_t &supplierId); 2302d43be4eSopenharmony_ci 2312d43be4eSopenharmony_ci /** 2322d43be4eSopenharmony_ci * @brief Correct net supplier available is false. 2332d43be4eSopenharmony_ci * 2342d43be4eSopenharmony_ci * @param slotId Card slot identification. 2352d43be4eSopenharmony_ci * @return 0 set success, others set fail. 2362d43be4eSopenharmony_ci */ 2372d43be4eSopenharmony_ci int32_t CorrectNetSupplierNoAvailable(int32_t slotId); 2382d43be4eSopenharmony_ci 2392d43be4eSopenharmony_ci /** 2402d43be4eSopenharmony_ci * @brief Get supplier register state. 2412d43be4eSopenharmony_ci * 2422d43be4eSopenharmony_ci * @param supplierId Cellular supplier id. 2432d43be4eSopenharmony_ci * @param regState Supplier register state. 2442d43be4eSopenharmony_ci * @return 0 set success, others set fail. 2452d43be4eSopenharmony_ci */ 2462d43be4eSopenharmony_ci int32_t GetSupplierRegisterState(uint32_t supplierId, int32_t ®State); 2472d43be4eSopenharmony_ci 2482d43be4eSopenharmony_ciprivate: 2492d43be4eSopenharmony_ci class CellularDataDeathRecipient : public IRemoteObject::DeathRecipient { 2502d43be4eSopenharmony_ci public: 2512d43be4eSopenharmony_ci explicit CellularDataDeathRecipient(CellularDataClient &client) : client_(client) {} 2522d43be4eSopenharmony_ci ~CellularDataDeathRecipient() override = default; 2532d43be4eSopenharmony_ci void OnRemoteDied(const wptr<IRemoteObject> &remote) override 2542d43be4eSopenharmony_ci { 2552d43be4eSopenharmony_ci client_.OnRemoteDied(remote); 2562d43be4eSopenharmony_ci } 2572d43be4eSopenharmony_ci 2582d43be4eSopenharmony_ci private: 2592d43be4eSopenharmony_ci CellularDataClient &client_; 2602d43be4eSopenharmony_ci }; 2612d43be4eSopenharmony_ci 2622d43be4eSopenharmony_ci void OnRemoteDied(const wptr<IRemoteObject> &remote); 2632d43be4eSopenharmony_ci void RegisterSimAccountCallback(); 2642d43be4eSopenharmony_ci void UnregisterSimAccountCallback(); 2652d43be4eSopenharmony_ci bool IsValidSlotId(int32_t slotId); 2662d43be4eSopenharmony_ci bool IsCellularDataSysAbilityExist(sptr<IRemoteObject> &object); 2672d43be4eSopenharmony_ci 2682d43be4eSopenharmony_ciprivate: 2692d43be4eSopenharmony_ci std::mutex mutexProxy_; 2702d43be4eSopenharmony_ci sptr<ICellularDataManager> proxy_ { nullptr }; 2712d43be4eSopenharmony_ci sptr<IRemoteObject::DeathRecipient> deathRecipient_ { nullptr }; 2722d43be4eSopenharmony_ci sptr<SimAccountCallback> callback_ { nullptr }; 2732d43be4eSopenharmony_ci static int32_t defaultCellularDataSlotId_; 2742d43be4eSopenharmony_ci static int32_t defaultCellularDataSimId_; 2752d43be4eSopenharmony_ci bool registerStatus_ = false; 2762d43be4eSopenharmony_ci}; 2772d43be4eSopenharmony_ci} // namespace Telephony 2782d43be4eSopenharmony_ci} // namespace OHOS 2792d43be4eSopenharmony_ci#endif // CELLULAR_DATA_CLIENT_H 280