• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 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 "dm_binding.h"
17 
18 #include <string>
19 
20 #include "device_manager.h"
21 #include "device_manager_callback.h"
22 #include "dm_device_info.h"
23 
24 #include "devicestatus_define.h"
25 #include "dm_binding_internal.h"
26 
27 namespace {
28 constexpr ::OHOS::HiviewDFX::HiLogLabel LABEL { LOG_CORE, ::OHOS::Msdp::MSDP_DOMAIN_ID, "DmBinding" };
29 #define DIS_HARDWARE OHOS::DistributedHardware::DeviceManager::GetInstance()
30 } // namespace
31 
DeviceInitCallBack(void (* cb)())32 DeviceInitCallBack::DeviceInitCallBack(void (*cb)()) : callback_(cb)
33 {
34 }
35 
OnRemoteDied()36 void DeviceInitCallBack::OnRemoteDied()
37 {
38     CALL_DEBUG_ENTER;
39     CHKPV(callback_);
40     callback_();
41 }
42 
DmDeviceStateCallback(CRegisterDevStateCallback callbacks)43 DmDeviceStateCallback::DmDeviceStateCallback(CRegisterDevStateCallback callbacks)
44 {
45     CALL_DEBUG_ENTER;
46     InitCallback(callbacks);
47 }
48 
OnDeviceOnline(const OHOS::DistributedHardware::DmDeviceInfo & deviceInfo)49 void DmDeviceStateCallback::OnDeviceOnline(const OHOS::DistributedHardware::DmDeviceInfo &deviceInfo)
50 {
51     CALL_DEBUG_ENTER;
52     CHKPV(onlineCallback_);
53     CDmDeviceInfo* cDeviceInfo = CreateCDeviceInfo(deviceInfo);
54     CHKPV(cDeviceInfo);
55     onlineCallback_(cDeviceInfo);
56 }
57 
OnDeviceChanged(const OHOS::DistributedHardware::DmDeviceInfo & deviceInfo)58 void DmDeviceStateCallback::OnDeviceChanged(const OHOS::DistributedHardware::DmDeviceInfo &deviceInfo)
59 {
60     CALL_DEBUG_ENTER;
61     CHKPV(changedCallback_);
62     CDmDeviceInfo* cDeviceInfo = CreateCDeviceInfo(deviceInfo);
63     CHKPV(cDeviceInfo);
64     changedCallback_(cDeviceInfo);
65 }
66 
OnDeviceReady(const OHOS::DistributedHardware::DmDeviceInfo & deviceInfo)67 void DmDeviceStateCallback::OnDeviceReady(const OHOS::DistributedHardware::DmDeviceInfo &deviceInfo)
68 {
69     CALL_DEBUG_ENTER;
70     CHKPV(readyCallback_);
71     CDmDeviceInfo* cDeviceInfo = CreateCDeviceInfo(deviceInfo);
72     CHKPV(cDeviceInfo);
73     readyCallback_(cDeviceInfo);
74 }
75 
OnDeviceOffline(const OHOS::DistributedHardware::DmDeviceInfo & deviceInfo)76 void DmDeviceStateCallback::OnDeviceOffline(const OHOS::DistributedHardware::DmDeviceInfo &deviceInfo)
77 {
78     CALL_DEBUG_ENTER;
79     CHKPV(offlineCallback_);
80     CDmDeviceInfo* cDeviceInfo = CreateCDeviceInfo(deviceInfo);
81     CHKPV(cDeviceInfo);
82     offlineCallback_(cDeviceInfo);
83 }
84 
InitCallback(CRegisterDevStateCallback callbacks)85 void DmDeviceStateCallback::InitCallback(CRegisterDevStateCallback callbacks)
86 {
87     CALL_DEBUG_ENTER;
88     CHKPV(callbacks.onDeviceOnline);
89     CHKPV(callbacks.onDeviceChanged);
90     CHKPV(callbacks.onDeviceReady);
91     CHKPV(callbacks.onDeviceOffline);
92     onlineCallback_ = callbacks.onDeviceOnline;
93     changedCallback_ = callbacks.onDeviceChanged;
94     readyCallback_ = callbacks.onDeviceReady;
95     offlineCallback_ = callbacks.onDeviceOffline;
96 }
97 
CreateCDeviceInfo(const OHOS::DistributedHardware::DmDeviceInfo & deviceInfo)98 CDmDeviceInfo* DmDeviceStateCallback::CreateCDeviceInfo(const OHOS::DistributedHardware::DmDeviceInfo &deviceInfo)
99 {
100     CALL_DEBUG_ENTER;
101     CDmDeviceInfo* cDeviceInfo = new (std::nothrow) CDmDeviceInfo;
102     cDeviceInfo->deviceId = new (std::nothrow) char[sizeof(deviceInfo.deviceId)];
103     if (strcpy_s(cDeviceInfo->deviceId, sizeof(deviceInfo.deviceId), deviceInfo.deviceId) != EOK) {
104         FI_HILOGE("Invalid deviceId:\'%{public}s\'", deviceInfo.deviceId);
105         return nullptr;
106     }
107     cDeviceInfo->deviceName = new (std::nothrow) char[sizeof(deviceInfo.deviceName)];
108     if (strcpy_s(cDeviceInfo->deviceName, sizeof(deviceInfo.deviceName), deviceInfo.deviceName) != EOK) {
109         FI_HILOGE("Invalid deviceName");
110         return nullptr;
111     }
112     cDeviceInfo->deviceTypeId = deviceInfo.deviceTypeId;
113     cDeviceInfo->networkId = new (std::nothrow) char[sizeof(deviceInfo.networkId)];
114     if (strcpy_s(cDeviceInfo->networkId, sizeof(deviceInfo.networkId), deviceInfo.networkId) != EOK) {
115         FI_HILOGE("Invalid networkId");
116         return nullptr;
117     }
118     cDeviceInfo->range = deviceInfo.range;
119     cDeviceInfo->authForm = static_cast<CDmAuthForm>(deviceInfo.authForm);
120     return cDeviceInfo;
121 }
122 
CInitDeviceManager(const char * pkgName,void (* callback)())123 bool CInitDeviceManager(const char* pkgName, void (*callback)())
124 {
125     CALL_DEBUG_ENTER;
126     CHKPF(callback);
127     auto initCallback = std::make_shared<DeviceInitCallBack>(callback);
128     std::string sPkgName(pkgName);
129     int32_t ret = DIS_HARDWARE.InitDeviceManager(sPkgName, initCallback);
130     if (ret != 0) {
131         FI_HILOGE("Init device manager failed, ret:%{public}d", ret);
132         return false;
133     }
134     return true;
135 }
136 
CRegisterDevState(const char * pkgName,const char * extra,CRegisterDevStateCallback callbacks)137 bool CRegisterDevState(const char* pkgName, const char* extra, CRegisterDevStateCallback callbacks)
138 {
139     CALL_DEBUG_ENTER;
140     auto stateCallback = std::make_shared<DmDeviceStateCallback>(callbacks);
141     std::string sPkgName(pkgName);
142     std::string sExtra(extra);
143     int32_t ret = DIS_HARDWARE.RegisterDevStateCallback(sPkgName, sExtra, stateCallback);
144     if (ret != 0) {
145         FI_HILOGE("Register devStateCallback failed, ret:%{public}d", ret);
146         return false;
147     }
148     return true;
149 }
150 
CUnRegisterDevState(const char * pkgName,const char * extra)151 bool CUnRegisterDevState(const char* pkgName, const char* extra)
152 {
153     CALL_DEBUG_ENTER;
154     std::string sPkgName(pkgName);
155     std::string sExtra(extra);
156     int32_t ret = DIS_HARDWARE.UnRegisterDevStateCallback(sPkgName, sExtra);
157     if (ret != 0) {
158         FI_HILOGE("UnRegister devStateCallback failed, ret:%{public}d", ret);
159         return false;
160     }
161     return true;
162 }
163 
CDestroyDmDeviceInfo(CDmDeviceInfo * deviceInfo)164 void CDestroyDmDeviceInfo(CDmDeviceInfo* deviceInfo)
165 {
166     CALL_DEBUG_ENTER;
167     CHKPV(deviceInfo);
168     deviceInfo = nullptr;
169     delete deviceInfo;
170 }