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 NAPI_PARSER_UTILS_H 17 #define NAPI_PARSER_UTILS_H 18 19 #include "napi_bluetooth_ble_utils.h" 20 #include "napi_bluetooth_utils.h" 21 22 namespace OHOS { 23 namespace Bluetooth { 24 25 struct NapiBleDescriptor { 26 UUID serviceUuid; 27 UUID characteristicUuid; 28 UUID descriptorUuid; 29 std::vector<uint8_t> descriptorValue; 30 uint16_t descriptorHandle; 31 int permissions; 32 }; 33 34 struct NapiBleCharacteristic { 35 UUID serviceUuid; 36 UUID characteristicUuid; 37 std::vector<uint8_t> characteristicValue; 38 std::vector<NapiBleDescriptor> descriptors; 39 int properties; 40 uint16_t characteristicValueHandle; 41 int permissions; 42 }; 43 44 struct FileHolder { 45 std::string filePath = ""; 46 int64_t fileSize = 0; 47 int32_t fileFd = -1; 48 }; 49 50 struct NapiGattService { 51 UUID serviceUuid; 52 bool isPrimary; 53 std::vector<NapiBleCharacteristic> characteristics; 54 std::vector<NapiGattService> includeServices; 55 }; 56 57 struct NapiGattPermission { 58 bool readable = false; 59 bool writeable = false; 60 bool readEncrypted = false; 61 bool writeEncrypted = false; 62 }; 63 64 struct NapiGattProperties { 65 bool write = false; 66 bool writeNoResponse = false; 67 bool read = false; 68 bool notify = false; 69 bool indicate = false; 70 }; 71 72 bool NapiIsObjectPropertyExist(napi_env env, napi_value object, const char *name); 73 napi_status NapiParseBoolean(napi_env env, napi_value value, bool &outBoolean); 74 napi_status NapiParseInt32(napi_env env, napi_value value, int32_t &outNum); 75 napi_status NapiParseUint32(napi_env env, napi_value value, uint32_t &outNum); 76 napi_status NapiParseString(napi_env env, napi_value value, std::string &outStr); 77 napi_status NapiParseBdAddr(napi_env env, napi_value value, std::string &outAddr); 78 napi_status NapiParseUuid(napi_env env, napi_value value, std::string &outUuid); 79 napi_status NapiParseArrayBuffer(napi_env env, napi_value value, std::vector<uint8_t> &outVec); 80 napi_status NapiParseGattService(napi_env env, napi_value object, NapiGattService &outService); 81 napi_status NapiParseGattCharacteristic(napi_env env, napi_value object, NapiBleCharacteristic &outCharacteristic); 82 napi_status NapiParseGattDescriptor(napi_env env, napi_value object, NapiBleDescriptor &outDescriptor); 83 napi_status NapiParseNotifyCharacteristic(napi_env env, napi_value object, NapiNotifyCharacteristic &outCharacter); 84 napi_status NapiParseGattsServerResponse(napi_env env, napi_value object, NapiGattsServerResponse &rsp); 85 napi_status NapiParseGattWriteType(napi_env env, napi_value value, int &outWriteType); 86 87 struct NapiAsyncCallback; 88 std::shared_ptr<NapiAsyncCallback> NapiParseAsyncCallback(napi_env env, napi_callback_info info); 89 90 // must have the 'name' property 91 napi_status NapiGetObjectProperty(napi_env env, napi_value object, const char *name, napi_value &outProperty); 92 napi_status NapiParseObjectBoolean(napi_env env, napi_value object, const char *name, bool &outBoolean); 93 napi_status NapiParseObjectUuid(napi_env env, napi_value object, const char *name, std::string &outUuid); 94 napi_status NapiParseObjectArrayBuffer(napi_env env, napi_value object, const char *name, std::vector<uint8_t> &outVec); 95 napi_status NapiParseObjectBdAddr(napi_env env, napi_value object, const char *name, std::string &outAddr); 96 napi_status NapiParseStringArray(napi_env env, napi_value value, std::vector<std::string> &outStrVec); 97 napi_status NapiParseFileHolder(napi_env env, napi_value object, FileHolder &outFileHolder); 98 napi_status NapiParseFileHolderArray(napi_env env, napi_value value, std::vector<FileHolder> &outFileHolderVec); 99 napi_status NapiParseObjectInt32(napi_env env, napi_value object, const char *name, int32_t &outNum); 100 napi_status NapiParseObjectString(napi_env env, napi_value object, const char *name, std::string &outString); 101 napi_status NapiParseObjectUint32(napi_env env, napi_value object, const char *name, uint32_t &outNum); 102 napi_status NapiParseObjectGattPermissions(napi_env env, napi_value object, const char *name, 103 NapiGattPermission &outPermissions); 104 napi_status NapiParseObjectGattProperties(napi_env env, napi_value object, const char *name, 105 NapiGattProperties &outProperties); 106 napi_status NapiParseObjectStr(napi_env env, napi_value object, const char *name, std::string &outStr); 107 napi_status NapiParseInt64(napi_env env, napi_value object, const char *name, int64_t &outNum); 108 napi_status NapiParseObjectInt64(napi_env env, napi_value object, const char *name, int64_t &outNum); 109 napi_status NapiParseTrustPairDevice(napi_env env, napi_value object, std::vector<TrustPairDeviceParam> &outService); 110 napi_status ParseAndCheckUuids(const std::string &uuids, std::vector<std::string> &res); 111 napi_status NapiParseObjectUuids(napi_env env, napi_value object, std::vector<std::string> &outUuid); 112 113 struct NapiObject { 114 napi_env env; 115 napi_value object; 116 }; 117 napi_status NapiParseObjectUint32Check(NapiObject napiObject, const char *name, uint32_t &outNum, 118 uint32_t min, uint32_t max); 119 120 napi_status NapiGetObjectPropertyOptional(napi_env env, napi_value object, const char *name, napi_value &outProperty, 121 bool &outExist); 122 napi_status NapiParseObjectBooleanOptional(napi_env env, napi_value object, const char *name, bool &outBoolean, 123 bool &outExist); 124 napi_status NapiParseObjectInt32Optional(napi_env env, napi_value object, const char *name, int32_t &outNum, 125 bool &outExist); 126 napi_status NapiParseObjectUint32Optional(napi_env env, napi_value object, const char *name, uint32_t &outNum, 127 bool &outExist); 128 129 // Parse type Array<XXX>, must implete NapiParseObject<XXX> in napi_parser_utils.cpp. 130 template <typename T> 131 napi_status NapiParseArray(napi_env env, napi_value array, std::vector<T> &outVec); 132 template <typename T> 133 napi_status NapiParseObjectArray(napi_env env, napi_value object, const char *name, std::vector<T> &outVec); 134 } // namespace Bluetooth 135 } // namespace OHOS 136 #endif // NAPI_PARSER_UTILS_H