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 ¶mJson); 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 WaitForCallbackCv(); 67 68 int32_t RegisterDevStatusCallback(); 69 int32_t RegisterDiscoveryCallback(); 70 int32_t RegisterPublishCallback(); 71 int32_t RegisterReplyCallback(); 72 73 int32_t ReleaseDevStatusCallback(); 74 int32_t ReleaseDiscoveryCallback(); 75 int32_t ReleasePublishCallback(); 76 int32_t ReleaseReplyCallback(); 77 78 void RegisterCallbackByType(const std::string &type, void *callback); 79 void Off(const std::string &type); 80 FreeDeviceInfo(FfiDeviceBasicInfo & info)81 inline static void FreeDeviceInfo(FfiDeviceBasicInfo &info) 82 { 83 free(info.deviceId); 84 info.deviceId = nullptr; 85 free(info.deviceName); 86 info.deviceName = nullptr; 87 free(info.networkId); 88 info.networkId = nullptr; 89 }; 90 91 std::string bundleName_; 92 std::function<void(int32_t, FfiDeviceBasicInfo *)> deviceStateChangedCallback; 93 std::function<void(FfiDeviceBasicInfo *)> discoverSuccessCallback; 94 std::function<void(const char *)> deviceNameChangedCallback; 95 std::function<void(int32_t)> deviceDiscoverFailedCallback; 96 std::mutex callbackLock; 97 98 std::condition_variable callbackFinishedCv; 99 std::mutex callbackFinishedMutex; 100 bool callbackFinished = false; 101 std::atomic<int32_t> errCode_ = 0; 102 }; 103 } // namespace DistributedHardware 104 } // namespace OHOS 105 #endif // OHOS_DEVICE_MANAGER_IMPL_H 106