1 /*
2  * Copyright (C) 2021 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 /**
17  * @addtogroup Bluetooth
18  * @{
19  *
20  * @brief Provides basic Bluetooth capabilities.
21  *
22  * This module allows you to enable and disable Bluetooth, and access basic Bluetooth capabilities.\n
23  * Bluetooth uses profiles such as BT-GAP, BLE, BLE-GATT, BT-data transmission, HFP, A2DP, AVRCP, MAP, and PBAP.
24  *
25  * @since 6
26  */
27 
28 /**
29  * @file ohos_bt_def.h
30  *
31  * @brief Declares basic data structures, macros, enumerations, and structures for Bluetooth services.
32  *
33  * @since 6
34  */
35 
36 #ifndef OHOS_BT_DEF_H
37 #define OHOS_BT_DEF_H
38 
39 /**
40  * @brief Defines the address length of a Bluetooth device.
41  *
42  */
43 #define OHOS_BD_ADDR_LEN 6
44 
45 /**
46  * @brief Defines the maximum length of a Bluetooth UUID, in bytes.
47  *
48  */
49 #define OHOS_BLE_UUID_MAX_LEN 16
50 
51 /**
52  * @brief Defines the maximum duration of low power device advertise, *10 = 655350 ms(spec_5.3_7.8.56)
53  *
54  */
55 #define LPDEVICE_ADVERTISING_DURATION_MAX 65535
56 
57 /**
58  * @brief Defines the minmum duration of low power device advertise. no_duration(spec_5.3_7.8.56)
59  *
60  */
61 #define LPDEVICE_ADVERTISING_DURATION_MIN 0
62 
63 /**
64  * @brief Defines the maximum low power device advertise adv event, 1 octet(spec_5.3_7.8.56)
65  *
66  */
67 #define LPDEVICE_ADVERTISING_EXTADVEVENT_MAX 255
68 
69 /**
70  * @brief Defines the minmum low power device advertise adv event. no max number of adv events(spec_5.3_7.8.56)
71  *
72  */
73 #define LPDEVICE_ADVERTISING_EXTADVEVENT_MIN 0
74 
75 /**
76  * @brief Defines the maxmum low power device advertise interval. ms (1105 support)
77  *
78  */
79 #define LPDEVICE_ADVERTISING_INTERVAL_MAX 16777215
80 
81 /**
82  * @brief Defines the minmum low power device advertise interval. ms (1105 support)
83  *
84  */
85 #define LPDEVICE_ADVERTISING_INTERVAL_MIN 0
86 
87 /**
88  * @brief Defines the maxmum low power device advertise window. ms (1105 support)
89  *
90  */
91 #define LPDEVICE_ADVERTISING_WINDOW_MAX 16777215
92 
93 /**
94  * @brief Defines the minmum low power device advertise window. ms (1105 support)
95  *
96  */
97 #define LPDEVICE_ADVERTISING_WINDOW_MIN 0
98 
99 /**
100  * @brief Defines the device id length
101  *
102  */
103 #define OHOS_ACTIVE_DEVICE_ID_LEN 8
104 
105 /**
106  * @brief Enumerates characteristic properties.
107  *
108  * Characteristic properties determine how characteristic values are used and\n
109  * how characteristic descriptors are accessed. If there are multiple properties,\n
110  * their values can be connected using the logical operator OR.\n
111  * For example, <b>0x01 | 0x02</b> indicates that the characteristic value can be broadcast and read.
112  *
113  * @since 6
114  */
115 typedef enum {
116     /** The characteristic value can be broadcast. */
117     OHOS_GATT_CHARACTER_PROPERTY_BIT_BROADCAST = 0x01,
118     /** The characteristic value can be read. */
119     OHOS_GATT_CHARACTER_PROPERTY_BIT_READ = 0x02,
120     /** The characteristic value can be written, and no response needs to be sent to the client. */
121     OHOS_GATT_CHARACTER_PROPERTY_BIT_WRITE_NO_RSP = 0x04,
122     /** The characteristic value can be written, and a response needs to be sent to the client. */
123     OHOS_GATT_CHARACTER_PROPERTY_BIT_WRITE = 0x08,
124     /**
125      * The characteristic value can be sent to the client through a notification, and the client does not need to
126      * reply with a confirmation message.
127      */
128     OHOS_GATT_CHARACTER_PROPERTY_BIT_NOTIFY = 0x10,
129     /**
130      * The characteristic value can be sent to the client through an indication, and the client does not need to
131      * reply with a confirmation message.
132      */
133     OHOS_GATT_CHARACTER_PROPERTY_BIT_INDICATE = 0x20,
134     /** The characteristic value can be written with a signature. */
135     OHOS_GATT_CHARACTER_PROPERTY_BIT_SIGNED_WRITE = 0x40,
136     /** The characteristic has extended properties. */
137     OHOS_GATT_CHARACTER_PROPERTY_BIT_EXTENDED_PROPERTY = 0x80
138 } GattCharacteristicProperty;
139 
140 /**
141  * @brief Enumerates permissions for an attribute.
142  *
143  * If there are multiple permissions, their values can be connected using the logical operator OR.\n
144  * For example, <b>0x01 | 0x02</b> indicates the reading and encrypted reading permissions.
145  *
146  * @since 6
147  */
148 typedef enum {
149     /** Reading */
150     OHOS_GATT_PERMISSION_READ = 0x01,
151     /** Encrypted reading */
152     OHOS_GATT_PERMISSION_READ_ENCRYPTED = 0x02,
153     /** Encrypted reading with man-in-the-middle (MITM) protection */
154     OHOS_GATT_PERMISSION_READ_ENCRYPTED_MITM = 0x04,
155     /** Writing */
156     OHOS_GATT_PERMISSION_WRITE = 0x10,
157     /** Encrypted writing */
158     OHOS_GATT_PERMISSION_WRITE_ENCRYPTED = 0x20,
159     /** Encrypted writing with MITM protection */
160     OHOS_GATT_PERMISSION_WRITE_ENCRYPTED_MITM = 0x40,
161     /** Signed writing */
162     OHOS_GATT_PERMISSION_WRITE_SIGNED = 0x80,
163     /** Signed writing with MITM protection */
164     OHOS_GATT_PERMISSION_WRITE_SIGNED_MITM = 0x100
165 } GattAttributePermission;
166 
167 /**
168  * @brief Enumerates transport IDs.
169  *
170  * @since 6
171  */
172 typedef enum {
173     /** Invalid transport ID */
174     OHOS_BT_TRANSPORT_INVALID = 0x00,
175     /** BR/EDR */
176     OHOS_BT_TRANSPORT_BR_EDR = 0x01,
177     /** LE */
178     OHOS_BT_TRANSPORT_LE = 0x02
179 } BtTransportId;
180 
181 /**
182  * @brief Enumerates Bluetooth statuses.
183  *
184  * @since 6
185  */
186 typedef enum {
187     /** Success */
188     OHOS_BT_STATUS_SUCCESS = 0x00,
189     /** Failure */
190     OHOS_BT_STATUS_FAIL,
191     /** Bluetooth not ready */
192     OHOS_BT_STATUS_NOT_READY,
193     /** Insufficient memory */
194     OHOS_BT_STATUS_NOMEM,
195     /** System busy */
196     OHOS_BT_STATUS_BUSY,
197     /** Operation completed */
198     OHOS_BT_STATUS_DONE,
199     /** Bluetooth not supported by the current version or device */
200     OHOS_BT_STATUS_UNSUPPORTED,
201     /** Invalid parameters */
202     OHOS_BT_STATUS_PARM_INVALID,
203     /** Request unhandled */
204     OHOS_BT_STATUS_UNHANDLED,
205     /** Authentication failure */
206     OHOS_BT_STATUS_AUTH_FAILURE,
207     /** Remote device shut down */
208     OHOS_BT_STATUS_RMT_DEV_DOWN,
209     /** Authentication rejected */
210     OHOS_BT_STATUS_AUTH_REJECTED,
211     /** Duplicate advertising address */
212     OHOS_BT_STATUS_DUPLICATED_ADDR
213 } BtStatus;
214 
215 /**
216  * @brief Enumerates result codes for GATT attribute operations.
217  *
218  * The error codes are based on Bluetooth Core Specification Version 5.2 | Vol 3, Part F, Table 3.4.
219  *
220  * @since 6
221  */
222 typedef enum {
223     /** Success */
224     OHOS_GATT_SUCCESS = 0x00,
225     /** Invalid attribute handle */
226     OHOS_GATT_INVALID_HANDLE = 0x01,
227     /** Attribute unreadable */
228     OHOS_GATT_READ_NOT_PERMITTED = 0x02,
229     /** Attribute unwritable */
230     OHOS_GATT_WRITE_NOT_PERMITTED = 0x03,
231     /** Invalid attribute PDU */
232     OHOS_GATT_INVALID_PDU = 0x04,
233     /** Authentication required for reading or writing the attribute */
234     OHOS_GATT_INSUFFICIENT_AUTHENTICATION = 0x05,
235     /** Request not supported */
236     OHOS_GATT_REQUEST_NOT_SUPPORTED = 0x06,
237     /** Invalid offset */
238     OHOS_GATT_INVALID_OFFSET = 0x07,
239     /** Authorization required for reading or writing the attribute */
240     OHOS_GATT_INSUFFICIENT_AUTHORIZATION = 0x08,
241     /** The queue is full of prepare writes. */
242     OHOS_GATT_PREPARE_QUEUE_FULL = 0x09,
243     /** Attribute not found in the specified attribute handle */
244     OHOS_GATT_ATTRIBUTE_NOT_FOUND = 0x0A,
245     /** The attribute is not a long attribute and cannot use the <b>ATT_READ_BLOB_REQ</b> PDU. */
246     OHOS_GATT_ATTRIBUTE_NOT_LONG = 0x0B,
247     /** Insufficient size for the encryption key */
248     OHOS_GATT_INSUFFICIENT_ENCRYPTION_KEY_SIZE = 0x0C,
249     /** Invalid attribute value length */
250     OHOS_GATT_INVALID_ATTRIBUTE_VALUE_LENGTH = 0x0D,
251     /** Unlikely error */
252     OHOS_GATT_UNLIKELY_ERROR = 0x0E,
253     /** Encryption required for reading or writing the attribute */
254     OHOS_GATT_INSUFFICIENT_ENCRYPTION = 0x0F,
255     /** Unsupported grouping attribute */
256     OHOS_GATT_UNSUPPORTED_GROUP_TYPE = 0x10,
257     /** Insufficient resources */
258     OHOS_GATT_INSUFFICIENT_RESOURCES = 0x11,
259     /** The server needs to request the client to rediscover the database. */
260     OHOS_GATT_DATABASE_OUT_OF_SYNC = 0x12,
261     /** Attribute value not allowed */
262     OHOS_GATT_VALUE_NOT_ALLOWED = 0x13,
263 } GattStatus;
264 
265 /**
266  * @brief Enumerates attribute types.
267  *
268  * @since 6
269  */
270 typedef enum {
271     /** Service */
272     OHOS_BLE_ATTRIB_TYPE_SERVICE = 0x00,
273     /** Characteristic */
274     OHOS_BLE_ATTRIB_TYPE_CHAR,
275     /** Characteristic value */
276     OHOS_BLE_ATTRIB_TYPE_CHAR_VALUE,
277     /** Client characteristic configuration */
278     OHOS_BLE_ATTRIB_TYPE_CHAR_CLIENT_CONFIG,
279     /** Characteristic user description */
280     OHOS_BLE_ATTRIB_TYPE_CHAR_USER_DESCR,
281 } BleAttribType;
282 
283 /**
284  * @brief Enumerates UUID types.
285  *
286  * @since 6
287  */
288 typedef enum {
289     /** Invalid UUID */
290     OHOS_UUID_TYPE_NULL = 0x00,
291     /** 16-bit UUID */
292     OHOS_UUID_TYPE_16_BIT,
293     /** 32-bit UUID */
294     OHOS_UUID_TYPE_32_BIT,
295     /** 128-bit UUID */
296     OHOS_UUID_TYPE_128_BIT,
297 } UuidType;
298 
299 /**
300  * @brief Enumerates types of characteristic and descriptor write operations performed by the GATT client.
301  *
302  * @since 6
303  */
304 typedef enum {
305     /** Write operation without requiring a response from the server */
306     OHOS_GATT_WRITE_NO_RSP = 0x01,
307     /** Write operation requiring a response from the server */
308     OHOS_GATT_WRITE_DEFAULT = 0x02,
309     /** Prepare write requiring a response from the server */
310     OHOS_GATT_WRITE_PREPARE = 0x03,
311     /** Write operation with an authentication signature */
312     OHOS_GATT_WRITE_SIGNED = 0x04,
313     /** unknown type */
314     OHOS_GATT_WRITE_TYPE_UNKNOWN = 0xFF,
315 } BtGattWriteType;
316 
317 /**
318  * @brief Enumerates profile connection statuses.
319  *
320  * @since 6
321  */
322 typedef enum {
323     /** Connecting */
324     OHOS_PROFILE_STATE_CONNECTING = 0x01,
325     /** Connected */
326     OHOS_PROFILE_STATE_CONNECTED = 0x02,
327     /** Disconnecting */
328     OHOS_PROFILE_STATE_DISCONNECTING = 0x03,
329     /** Disconnected */
330     OHOS_PROFILE_STATE_DISCONNECTED = 0x04
331 } BtProfileConnectState;
332 
333 /**
334  * @brief Enumerates connection strategies.
335  *
336  * @since 6
337  */
338 typedef enum {
339     /** Unknown strategy */
340     OHOS_CONNECTION_UNKNOWN = 0x00,
341     /** Allowing connections */
342     OHOS_CONNECTION_ALLOWED,
343     /** Forbidding connections */
344     OHOS_CONNECTION_FORBIDDEN
345 } BtConnectStrategyType;
346 
347 /**
348  * @brief Enumerates A2DP playing states of the device.
349  *
350  * @since 6
351  */
352 typedef enum {
353     /** Not playing */
354     OHOS_A2DP_NOT_PLAYING = 0x00,
355     /** Playing */
356     OHOS_A2DP_IS_PLAYING
357 } BtA2dpPlayingState;
358 
359 typedef enum {
360     OHOS_STATE_CONNECTING = 0x00,
361     OHOS_STATE_CONNECTED,
362     OHOS_STATE_DISCONNECTING,
363     OHOS_STATE_DISCONNECTED,
364 } BtConnectState;
365 
366 /**
367  * @brief Enumerates Acl connection states of the device.
368  *
369  * @since 6
370  */
371 typedef enum {
372     ACL_CONNECTION_STATE_DISCONNECTED = 0x00,
373     ACL_CONNECTION_STATE_CONNECTED = 0x01,
374 } BtAclState;
375 
376 /**
377  * @brief Defines the Bluetooth address of the device.
378  *
379  * @since 6
380  */
381 typedef struct {
382     /** Bluetooth address */
383     unsigned char addr[OHOS_BD_ADDR_LEN];
384 } BdAddr;
385 
386 /**
387  * @brief Defines the UUID.
388  *
389  * @since 6
390  */
391 typedef struct {
392     /** UUID length */
393     unsigned char uuidLen;
394     /** UUID field */
395     char *uuid;
396 } BtUuid;
397 #endif
398 /** @} */
399