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 int permissions; 31 }; 32 33 struct NapiBleCharacteristic { 34 UUID serviceUuid; 35 UUID characteristicUuid; 36 std::vector<uint8_t> characteristicValue; 37 std::vector<NapiBleDescriptor> descriptors; 38 int properties; 39 int permissions; 40 }; 41 42 struct NapiGattService { 43 UUID serviceUuid; 44 bool isPrimary; 45 std::vector<NapiBleCharacteristic> characteristics; 46 std::vector<NapiGattService> includeServices; 47 }; 48 49 struct NapiGattPermission { 50 bool readable = false; 51 bool writeable = false; 52 bool readEncrypted = false; 53 bool writeEncrypted = false; 54 }; 55 56 struct NapiGattProperties { 57 bool write = false; 58 bool writeNoResponse = false; 59 bool read = false; 60 bool notify = false; 61 bool indicate = false; 62 }; 63 64 napi_status NapiParseBoolean(napi_env env, napi_value value, bool &outBoolean); 65 napi_status NapiParseInt32(napi_env env, napi_value value, int32_t &outNum); 66 napi_status NapiParseUint32(napi_env env, napi_value value, uint32_t &outNum); 67 napi_status NapiParseString(napi_env env, napi_value value, std::string &outStr); 68 napi_status NapiParseBdAddr(napi_env env, napi_value value, std::string &outAddr); 69 napi_status NapiParseUuid(napi_env env, napi_value value, std::string &outUuid); 70 napi_status NapiParseArrayBuffer(napi_env env, napi_value value, std::vector<uint8_t> &outVec); 71 napi_status NapiParseGattService(napi_env env, napi_value object, NapiGattService &outService); 72 napi_status NapiParseGattCharacteristic(napi_env env, napi_value object, NapiBleCharacteristic &outCharacteristic); 73 napi_status NapiParseGattDescriptor(napi_env env, napi_value object, NapiBleDescriptor &outDescriptor); 74 napi_status NapiParseNotifyCharacteristic(napi_env env, napi_value object, NapiNotifyCharacteristic &outCharacter); 75 napi_status NapiParseGattsServerResponse(napi_env env, napi_value object, NapiGattsServerResponse &rsp); 76 napi_status NapiParseGattWriteType(napi_env env, napi_value value, int &outWriteType); 77 78 struct NapiAsyncCallback; 79 std::shared_ptr<NapiAsyncCallback> NapiParseAsyncCallback(napi_env env, napi_callback_info info); 80 81 // must have the 'name' property 82 napi_status NapiGetObjectProperty(napi_env env, napi_value object, const char *name, napi_value &outProperty); 83 napi_status NapiParseObjectBoolean(napi_env env, napi_value object, const char *name, bool &outBoolean); 84 napi_status NapiParseObjectUuid(napi_env env, napi_value object, const char *name, std::string &outUuid); 85 napi_status NapiParseObjectArrayBuffer(napi_env env, napi_value object, const char *name, std::vector<uint8_t> &outVec); 86 napi_status NapiParseObjectBdAddr(napi_env env, napi_value object, const char *name, std::string &outAddr); 87 napi_status NapiParseObjectInt32(napi_env env, napi_value object, const char *name, int32_t &outNum); 88 napi_status NapiParseObjectUint32(napi_env env, napi_value object, const char *name, uint32_t &outNum); 89 napi_status NapiParseObjectGattPermissions(napi_env env, napi_value object, const char *name, 90 NapiGattPermission &outPermissions); 91 napi_status NapiParseObjectGattProperties(napi_env env, napi_value object, const char *name, 92 NapiGattProperties &outProperties); 93 94 napi_status NapiGetObjectPropertyOptional(napi_env env, napi_value object, const char *name, napi_value &outProperty, 95 bool &outExist); 96 napi_status NapiParseObjectBooleanOptional(napi_env env, napi_value object, const char *name, bool &outBoolean, 97 bool &outExist); 98 napi_status NapiParseObjectInt32Optional(napi_env env, napi_value object, const char *name, int32_t &outNum, 99 bool &outExist); 100 napi_status NapiParseObjectUint32Optional(napi_env env, napi_value object, const char *name, uint32_t &outNum, 101 bool &outExist); 102 103 // Parse type Array<XXX>, must implete NapiParseObject<XXX> in napi_parser_utils.cpp. 104 template <typename T> 105 napi_status NapiParseArray(napi_env env, napi_value array, std::vector<T> &outVec); 106 template <typename T> 107 napi_status NapiParseObjectArray(napi_env env, napi_value object, const char *name, std::vector<T> &outVec); 108 } // namespace Bluetooth 109 } // namespace OHOS 110 #endif // NAPI_PARSER_UTILS_H