1 /* 2 * Copyright (c) 2022 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 #ifndef SCAN_CALLBACK_H 17 #define SCAN_CALLBACK_H 18 #define TDD_ENABLE 1 19 20 #include <mutex> 21 #include <uv.h> 22 #include <functional> 23 #include "napi/native_api.h" 24 #include "scan_callback_stub.h" 25 #include "scanner_info_helper.h" 26 27 namespace OHOS::Scan { 28 struct CallbackParam { 29 napi_env env; 30 napi_ref ref; 31 std::mutex* mutexPtr; 32 uint32_t state; 33 34 bool isGetSucc; 35 int32_t sizeRead; 36 int32_t scanVersion; 37 std::string message; 38 39 ScanDeviceInfoTCP deviceInfoTCP; 40 ScanDeviceInfo deviceInfo; 41 ScanDeviceInfoSync deviceInfoSync; 42 43 void InitialCallbackParam(napi_env &env_, napi_ref &ref_, std::mutex &mutex_); 44 void SetCallbackParam(uint32_t &state, const ScanDeviceInfoTCP &deviceInfoTCP); 45 void SetCallbackParam(uint32_t &state, const ScanDeviceInfo &deviceInfo); 46 void SetCallbackSyncParam(uint32_t &state, const ScanDeviceInfoSync &deviceInfoSync); 47 void SetCallbackParam(bool &isGetSucc, int32_t &sizeRead); 48 void SetCallbackParam(int32_t &scanVersion); 49 void SetCallbackParam(std::string &message); 50 }; 51 52 struct Param { 53 napi_env env; 54 napi_ref callbackRef; 55 }; 56 57 typedef std::function<void(CallbackParam* &cbParam, napi_value &callbackFunc, 58 napi_value &callbackResult)> uv_work_function; 59 60 struct CallbackContext { 61 CallbackParam* callBackParam; 62 uv_work_function uvWorkLambda; 63 void SetCallbackContext(CallbackParam* &callBackParam, uv_work_function &uvWorkLambda, std::mutex &mutex_); 64 }; 65 66 67 class ScanCallback : public ScanCallbackStub { 68 public: 69 ScanCallback(napi_env env, napi_ref ref); 70 explicit ScanCallback(std::function<void(std::vector<ScanDeviceInfo> &infos)> callbackFunction); 71 virtual ~ScanCallback(); 72 bool OnCallback(uint32_t state, const ScanDeviceInfoTCP &info) override; 73 bool OnCallback(uint32_t state, const ScanDeviceInfo &info) override; 74 bool OnCallbackSync(uint32_t state, const ScanDeviceInfoSync &info) override; 75 bool OnGetFrameResCallback(bool isGetSucc, int32_t sizeRead) override; 76 bool OnScanInitCallback(int32_t &scanVersion) override; 77 bool OnSendSearchMessage(std::string &message) override; 78 bool OnGetDevicesList(std::vector<ScanDeviceInfo> &info) override; 79 bool ExecuteUvQueueWork(CallbackContext* ¶m, uv_work_t* &work, uv_loop_s* &loop); 80 void CreateCallbackParam(uv_work_t *&work, CallbackParam *¶m, CallbackContext *&context, bool &flag); 81 82 #ifndef TDD_ENABLE 83 private: 84 #endif 85 int UvQueueWork(uv_loop_s *loop, uv_work_t *work); 86 napi_env env_; 87 napi_ref ref_; 88 std::function<void(std::vector<ScanDeviceInfo> &infos)> callbackFunction_; 89 std::mutex mutex_; 90 }; 91 } // namespace OHOS::Scan 92 93 #endif // SCAN_CALLBACK_H 94