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 readEncrypted = false; 60 bool readEncryptedMitm = false; 61 bool writeable = false; 62 bool writeEncrypted = false; 63 bool writeEncryptedMitm = false; 64 bool writeSigned = false; 65 bool writeSignedMitm = false; 66 }; 67 68 struct NapiGattProperties { 69 bool write = false; 70 bool writeNoResponse = false; 71 bool read = false; 72 bool notify = false; 73 bool indicate = false; 74 bool broadcast = false; 75 bool authenticatedSignedWrite = false; 76 bool extendedProperties = false; 77 }; 78 79 bool NapiIsObjectPropertyExist(napi_env env, napi_value object, const char *name); 80 napi_status NapiParseBoolean(napi_env env, napi_value value, bool &outBoolean); 81 napi_status NapiParseInt32(napi_env env, napi_value value, int32_t &outNum); 82 napi_status NapiParseUint32(napi_env env, napi_value value, uint32_t &outNum); 83 napi_status NapiParseString(napi_env env, napi_value value, std::string &outStr); 84 napi_status NapiParseBdAddr(napi_env env, napi_value value, std::string &outAddr); 85 napi_status NapiParseUuid(napi_env env, napi_value value, std::string &outUuid); 86 napi_status NapiParseArrayBuffer(napi_env env, napi_value value, std::vector<uint8_t> &outVec); 87 napi_status NapiParseGattService(napi_env env, napi_value object, NapiGattService &outService); 88 napi_status NapiParseGattCharacteristic(napi_env env, napi_value object, NapiBleCharacteristic &outCharacteristic); 89 napi_status NapiParseGattDescriptor(napi_env env, napi_value object, NapiBleDescriptor &outDescriptor); 90 napi_status NapiParseNotifyCharacteristic(napi_env env, napi_value object, NapiNotifyCharacteristic &outCharacter); 91 napi_status NapiParseGattsServerResponse(napi_env env, napi_value object, NapiGattsServerResponse &rsp); 92 napi_status NapiParseGattWriteType(napi_env env, napi_value value, int &outWriteType); 93 94 struct NapiAsyncCallback; 95 std::shared_ptr<NapiAsyncCallback> NapiParseAsyncCallback(napi_env env, napi_callback_info info); 96 97 // must have the 'name' property 98 napi_status NapiGetObjectProperty(napi_env env, napi_value object, const char *name, napi_value &outProperty); 99 napi_status NapiParseObjectBoolean(napi_env env, napi_value object, const char *name, bool &outBoolean); 100 napi_status NapiParseObjectUuid(napi_env env, napi_value object, const char *name, std::string &outUuid); 101 napi_status NapiParseObjectArrayBuffer(napi_env env, napi_value object, const char *name, std::vector<uint8_t> &outVec); 102 napi_status NapiParseObjectBdAddr(napi_env env, napi_value object, const char *name, std::string &outAddr); 103 napi_status NapiParseStringArray(napi_env env, napi_value value, std::vector<std::string> &outStrVec); 104 napi_status NapiParseFileHolder(napi_env env, napi_value object, FileHolder &outFileHolder); 105 napi_status NapiParseFileHolderArray(napi_env env, napi_value value, std::vector<FileHolder> &outFileHolderVec); 106 napi_status NapiParseObjectInt32(napi_env env, napi_value object, const char *name, int32_t &outNum); 107 napi_status NapiParseObjectString(napi_env env, napi_value object, const char *name, std::string &outString); 108 napi_status NapiParseObjectUint32(napi_env env, napi_value object, const char *name, uint32_t &outNum); 109 napi_status NapiParseObjectGattPermissions(napi_env env, napi_value object, const char *name, 110 NapiGattPermission &outPermissions); 111 napi_status NapiParseObjectGattProperties(napi_env env, napi_value object, const char *name, 112 NapiGattProperties &outProperties); 113 napi_status NapiParseObjectStr(napi_env env, napi_value object, const char *name, std::string &outStr); 114 napi_status NapiParseInt64(napi_env env, napi_value object, int64_t &outNum); 115 napi_status NapiParseObjectInt64(napi_env env, napi_value object, const char *name, int64_t &outNum); 116 napi_status NapiParseTrustPairDevice(napi_env env, napi_value object, std::vector<TrustPairDeviceParam> &outService); 117 napi_status ParseAndCheckUuids(const std::string &uuids, std::vector<std::string> &res); 118 napi_status NapiParseObjectUuids(napi_env env, napi_value object, std::vector<std::string> &outUuid); 119 120 struct NapiObject { 121 napi_env env; 122 napi_value object; 123 }; 124 napi_status NapiParseObjectUint32Check(NapiObject napiObject, const char *name, uint32_t &outNum, 125 uint32_t min, uint32_t max); 126 127 napi_status NapiGetObjectPropertyOptional(napi_env env, napi_value object, const char *name, napi_value &outProperty, 128 bool &outExist); 129 napi_status NapiParseObjectBooleanOptional(napi_env env, napi_value object, const char *name, bool &outBoolean, 130 bool &outExist); 131 napi_status NapiParseObjectInt32Optional(napi_env env, napi_value object, const char *name, int32_t &outNum, 132 bool &outExist); 133 napi_status NapiParseObjectUint32Optional(napi_env env, napi_value object, const char *name, uint32_t &outNum, 134 bool &outExist); 135 136 // Parse type Array<XXX>, must implete NapiParseObject<XXX> in napi_parser_utils.cpp. 137 template <typename T> 138 napi_status NapiParseArray(napi_env env, napi_value array, std::vector<T> &outVec); 139 template <typename T> 140 napi_status NapiParseObjectArray(napi_env env, napi_value object, const char *name, std::vector<T> &outVec); 141 } // namespace Bluetooth 142 } // namespace OHOS 143 #endif // NAPI_PARSER_UTILS_H