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 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