• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 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 #ifndef OHOS_DEVICE_MANAGER_IMPL_H
16 #define OHOS_DEVICE_MANAGER_IMPL_H
17 
18 #include <condition_variable>
19 #include <map>
20 #include <mutex>
21 #include <string>
22 
23 #include "ffi_remote_data.h"
24 
25 #include "device_manager_ffi.h"
26 #include "device_manager_utils.h"
27 
28 namespace OHOS {
29 namespace DistributedHardware {
30 class DeviceManagerFfiImpl : public OHOS::FFI::FFIData {
31 public:
32     explicit DeviceManagerFfiImpl(const std::string &bundleName, int32_t *errCode);
33     ~DeviceManagerFfiImpl() override = default;
34 
35     static DeviceManagerFfiImpl *GetDeviceManagerFfi(std::string &bundleName);
36 
37     int32_t ReleaseDeviceManager();
38     int32_t GetAvailableDeviceList(FfiDeviceBasicInfoArray &deviceInfoList);
39     static void DeviceListFree(FfiDeviceBasicInfoArray &deviceInfoList, int64_t size = -1);
40     int32_t GetLocalDeviceNetworkId(const char *&networkId);
41     int32_t GetLocalDeviceName(const char *&deviceName);
42     int32_t GetLocalDeviceType(int32_t &deviceType);
43     int32_t GetLocalDeviceId(const char *&deviceId);
44     int32_t GetDeviceName(const std::string &networkId, const char *&deviceName);
45     int32_t GetDeviceType(const std::string &networkId, int32_t &deviceType);
46     int32_t StartDiscovering(const std::string &extra);
47     int32_t StopDiscovering();
48     int32_t BindTarget(const std::string &deviceId, const std::string &bindParam, bool isMetaType);
49     int32_t UnbindTarget(const std::string &deviceId);
50     int32_t EventOn(const std::string &type, void *callback);
51     int32_t EventOff(const std::string &type);
52 
53     void OnDeviceStatusChange(int32_t action, const DmDeviceBasicInfo &deviceBasicInfo);
54     void OnDeviceNameChange(const std::string &deviceName);
55     void OnDeviceFound(uint16_t subscribeId, const DmDeviceBasicInfo &deviceBasicInfo);
56     void OnDiscoveryFailed(uint16_t subscribeId, int32_t failedReason);
57     void OnPublishResult(int32_t publishId, int32_t publishResult);
58     void OnAuthResult(const std::string &deviceId, const std::string &token, int32_t status, int32_t reason);
59     void OnDmUiCall(const std::string &paramJson);
60 
61 private:
62     void ClearBundleCallbacks();
63     static int32_t Transform2FfiDeviceBasicInfo(const DmDeviceBasicInfo &in, FfiDeviceBasicInfo &out);
64     int32_t BindTargetWarpper(const std::string &deviceId,
65         const std::string &bindParam, std::shared_ptr<DmFfiBindTargetCallback> callback);
66     int32_t BindDevice(const std::string &deviceId, const std::string &bindParam);
67     int32_t WaitForCallbackCv();
68 
69     int32_t RegisterDevStatusCallback();
70     int32_t RegisterDiscoveryCallback();
71     int32_t RegisterPublishCallback();
72     int32_t RegisterReplyCallback();
73 
74     int32_t ReleaseDevStatusCallback();
75     int32_t ReleaseDiscoveryCallback();
76     int32_t ReleasePublishCallback();
77     int32_t ReleaseReplyCallback();
78 
79     void RegisterCallbackByType(const std::string &type, void *callback);
80     void Off(const std::string &type);
81 
FreeDeviceInfo(FfiDeviceBasicInfo & info)82     inline static void FreeDeviceInfo(FfiDeviceBasicInfo &info)
83     {
84         free(info.deviceId);
85         info.deviceId = nullptr;
86         free(info.deviceName);
87         info.deviceName = nullptr;
88         free(info.networkId);
89         info.networkId = nullptr;
90     };
91 
92     std::string bundleName_;
93     std::function<void(int32_t, FfiDeviceBasicInfo *)> deviceStateChangedCallback;
94     std::function<void(FfiDeviceBasicInfo *)> discoverSuccessCallback;
95     std::function<void(const char *)> deviceNameChangedCallback;
96     std::function<void(int32_t)> deviceDiscoverFailedCallback;
97     std::mutex callbackLock;
98 
99     std::condition_variable callbackFinishedCv;
100     std::mutex callbackFinishedMutex;
101     bool callbackFinished = false;
102     std::atomic<int32_t> errCode_ = 0;
103 };
104 } // namespace DistributedHardware
105 } // namespace OHOS
106 #endif // OHOS_DEVICE_MANAGER_IMPL_H
107