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_utils.h" 20 21 namespace OHOS { 22 namespace Bluetooth { 23 24 struct NapiBleDescriptor { 25 UUID serviceUuid; 26 UUID characteristicUuid; 27 UUID descriptorUuid; 28 std::vector<uint8_t> descriptorValue; 29 }; 30 31 struct NapiBleCharacteristic { 32 UUID serviceUuid; 33 UUID characteristicUuid; 34 std::vector<uint8_t> characteristicValue; 35 std::vector<NapiBleDescriptor> descriptors; 36 }; 37 38 struct NapiGattService { 39 UUID serviceUuid; 40 bool isPrimary; 41 std::vector<NapiBleCharacteristic> characteristics; 42 std::vector<NapiGattService> includeServices; 43 }; 44 45 napi_status NapiParseBoolean(napi_env env, napi_value value, bool &outBoolean); 46 napi_status NapiParseInt32(napi_env env, napi_value value, int32_t &outNum); 47 napi_status NapiParseUint32(napi_env env, napi_value value, uint32_t &outNum); 48 napi_status NapiParseString(napi_env env, napi_value value, std::string &outStr); 49 napi_status NapiParseBdAddr(napi_env env, napi_value value, std::string &outAddr); 50 napi_status NapiParseUuid(napi_env env, napi_value value, std::string &outUuid); 51 napi_status NapiParseArrayBuffer(napi_env env, napi_value value, std::vector<uint8_t> &outVec); 52 napi_status NapiParseGattService(napi_env env, napi_value object, NapiGattService &outService); 53 napi_status NapiParseGattCharacteristic(napi_env env, napi_value object, NapiBleCharacteristic &outCharacteristic); 54 napi_status NapiParseGattDescriptor(napi_env env, napi_value object, NapiBleDescriptor &outDescriptor); 55 napi_status NapiParseNotifyCharacteristic(napi_env env, napi_value object, NapiNotifyCharacteristic &outCharacter); 56 napi_status NapiParseGattsServerResponse(napi_env env, napi_value object, NapiGattsServerResponse &rsp); 57 58 // must have the 'name' property 59 napi_status NapiGetObjectProperty(napi_env env, napi_value object, const char *name, napi_value &outProperty); 60 napi_status NapiParseObjectBoolean(napi_env env, napi_value object, const char *name, bool &outBoolean); 61 napi_status NapiParseObjectUuid(napi_env env, napi_value object, const char *name, std::string &outUuid); 62 napi_status NapiParseObjectArrayBuffer(napi_env env, napi_value value, const char *name, std::vector<uint8_t> &outVec); 63 napi_status NapiParseObjectBdAddr(napi_env env, napi_value object, const char *name, std::string &outAddr); 64 napi_status NapiParseObjectInt32(napi_env env, napi_value object, const char *name, int32_t &outNum); 65 napi_status NapiParseObjectUint32(napi_env env, napi_value object, const char *name, uint32_t &outNum); 66 67 napi_status NapiGetObjectPropertyOptional(napi_env env, napi_value object, const char *name, napi_value &outProperty, 68 bool &outExist); 69 napi_status NapiParseObjectBooleanOptional(napi_env env, napi_value object, const char *name, bool &outBoolean, 70 bool &outExist); 71 napi_status NapiParseObjectInt32Optional(napi_env env, napi_value object, const char *name, int32_t &outNum, 72 bool &outExist); 73 napi_status NapiParseObjectUint32Optional(napi_env env, napi_value object, const char *name, uint32_t &outNum, 74 bool &outExist); 75 76 // Parse type Array<XXX>, must implete NapiParseObject<XXX> in napi_parser_utils.cpp. 77 template <typename T> 78 napi_status NapiParseArray(napi_env env, napi_value value, std::vector<T> &outVec); 79 template <typename T> 80 napi_status NapiParseObjectArray(napi_env env, napi_value object, const char *name, std::vector<T> &outVec); 81 } // namespace Bluetooth 82 } // namespace OHOS 83 #endif // NAPI_PARSER_UTILS_H