• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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