1 /*
2  * Copyright (C) 2021-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 BT_DEF_H
17 #define BT_DEF_H
18 
19 #include <string>
20 #include <vector>
21 
22 namespace OHOS {
23 namespace bluetooth {
24 // Defined here are various status codes
25 /*********************************************
26  *
27  * Interface Return Value Macro Define
28  *
29  *********************************************/
30 constexpr int RET_NO_ERROR = 0;
31 constexpr int RET_NO_SUPPORT = -1;
32 constexpr int RET_BAD_PARAM = -2;
33 constexpr int RET_BAD_STATUS = -3;
34 constexpr int RET_NO_SPACE = -4;
35 constexpr int RET_REACH_MAX = -5;
36 
37 /*********************************************
38  *
39  * Bluetooth UUID Macro Define
40  *
41  *********************************************/
42 const std::string BLUETOOTH_UUID_BASE_UUID = "00000000-0000-1000-8000-00805F9B34FB";
43 const std::string BLUETOOTH_UUID_A2DP_SINK = "0000110B-0000-1000-8000-00805F9B34FB";
44 const std::string BLUETOOTH_UUID_A2DP_SRC = "0000110A-0000-1000-8000-00805F9B34FB";
45 const std::string BLUETOOTH_UUID_GATT = "00001801-0000-1000-8000-00805F9B34FB";
46 const std::string BLUETOOTH_UUID_AVRCP_CT = "0000110E-0000-1000-8000-00805F9B34FB";
47 const std::string BLUETOOTH_UUID_AVRCP_TG = "0000110C-0000-1000-8000-00805F9B34FB";
48 const std::string BLUETOOTH_UUID_HFP_AG = "0000111F-0000-1000-8000-00805F9B34FB";
49 const std::string BLUETOOTH_UUID_HFP_HF = "0000111E-0000-1000-8000-00805F9B34FB";
50 const std::string BLUETOOTH_UUID_PBAP_PCE = "0000112E-0000-1000-8000-00805F9B34FB";
51 const std::string BLUETOOTH_UUID_PBAP_PSE = "0000112F-0000-1000-8000-00805F9B34FB";
52 const std::string BLUETOOTH_UUID_SPP = "00001101-0000-1000-8000-00805F9B34FB";
53 const std::string BLUETOOTH_UUID_PNP = "00001200-0000-1000-8000-00805F9B34FB";
54 const std::string BLUETOOTH_UUID_HID_HOST = "00001124-0000-1000-8000-00805F9B34FB";
55 const std::string BLUETOOTH_UUID_PAN = "00001116-0000-1000-8000-00805F9B34FB";
56 const std::string BLUETOOTH_UUID_OPP = "00001105-0000-1000-8000-00805F9B34FB";
57 const std::string BLUETOOTH_UUID_HSP_AG = "00001112-0000-1000-8000-00805F9B34FB";
58 const std::string BLUETOOTH_UUID_HSP_HS = "00001108-0000-1000-8000-00805F9B34FB";
59 const std::string BLUETOOTH_UUID_HOGP = "00001812-0000-1000-8000-00805F9B34FB";
60 const std::string ADV_AUDIO_DIST = "0000110D-0000-1000-8000-00805F9B34FB";
61 
62 /*********************************************
63  *
64  * Adapter Macro Define
65  *
66  *********************************************/
67 /**
68  * @brief bt transport define
69  * use to GetRemoteDevice(),GetPairedDevices()...
70  */
71 enum BTTransport {
72     ADAPTER_BREDR = 0,
73     ADAPTER_BLE,
74 };
75 /**
76  * @brief bt adapter/profile state define
77  * use to GetBtConnectionState(),GetBtProfileConnState(),...
78  */
79 enum BTStateID {
80     STATE_TURNING_ON,
81     STATE_TURN_ON,
82     STATE_TURNING_OFF,
83     STATE_TURN_OFF,
84 };
85 /**
86  * @brief bluetooth state define
87  * use to GetBluetoothState()
88  *
89  * @since 14
90  */
91 enum class BluetoothState {
92     /** Indicates the local Bluetooth is off */
93     STATE_OFF = 0,
94     /** Indicates the local Bluetooth is turning on */
95     STATE_TURNING_ON = 1,
96     /** Indicates the local Bluetooth is on, and ready for use */
97     STATE_ON = 2,
98     /** Indicates the local Bluetooth is turning off */
99     STATE_TURNING_OFF = 3,
100     /** Indicates the local Bluetooth is turning LE mode on */
101     STATE_BLE_TURNING_ON = 4,
102     /** Indicates the local Bluetooth is in LE only mode */
103     STATE_BLE_ON = 5,
104     /** Indicates the local Bluetooth is turning off LE only mode */
105     STATE_BLE_TURNING_OFF = 6
106 };
107 /**
108  * @brief connect state define
109  * use to ConnectionState()...
110  */
111 enum class BTConnectState : int {
112     CONNECTING,
113     CONNECTED,
114     DISCONNECTING,
115     DISCONNECTED,
116 };
117 enum class ConnChangeCause : int {
118     CONNECT_CHANGE_COMMON_CAUSE = 0,            // Common connect change cause.
119     DISCONNECT_CAUSE_USER_DISCONNECT = 0,       // User disconnect device.
120     DISCONNECT_CAUSE_CONNECT_FROM_KEYBOARD = 1, // The connection needs to be initiated from the keyboard side.
121     DISCONNECT_CAUSE_CONNECT_FROM_MOUSE = 2,    // The connection needs to be initiated from the mouse side.
122     DISCONNECT_CAUSE_CONNECT_FROM_CAR = 3,      // The connection needs to be initiated from the car side.
123     DISCONNECT_TOO_MANY_CONNECTED_DEVICES = 4,  // Too many devices are currently connected.
124     DISCONNECT_CAUSE_CONNECT_FAIL_INTERNAL = 5, // Connection failed due to an internal error.
125 };
126 /**
127  * @brief access permission define
128  * use to
129  * Get/SetPhonebookPermission(),Get/SetMessagePermission()
130  */
131 enum class BTPermissionType : int {
132     ACCESS_UNKNOWN,
133     ACCESS_ALLOWED,
134     ACCESS_FORBIDDEN,
135 };
136 /**
137  * @brief connection strategy define
138  * use to
139  * SetConnectionStrategy(),GetConnectionStrategy()
140  */
141 enum class BTStrategyType : int {
142     CONNECTION_UNKNOWN,
143     CONNECTION_ALLOWED,
144     CONNECTION_FORBIDDEN,
145 };
146 /**
147  * @brief the type of the call
148  * use to
149  * ConnectSco(),DisconnectSco()
150  */
151 enum class BTCallType : uint8_t {
152     CALL_TYPE_CELLULAR = 0,
153     CALL_TYPE_VIRTUAL = 1,
154     CALL_TYPE_RECOGNITION = 2,
155 };
156 /**
157  * @brief profile id define
158  * use to
159  * GetBtProfileConnState(),GetProfileList()
160  */
161 const uint32_t PROFILE_ID_GATT_CLIENT = 0x00000001;
162 const uint32_t PROFILE_ID_GATT_SERVER = 0x00000002;
163 const uint32_t PROFILE_ID_A2DP_SRC = 0x00000004;
164 const uint32_t PROFILE_ID_A2DP_SINK = 0x00000008;
165 const uint32_t PROFILE_ID_AVRCP_CT = 0x00000010;
166 const uint32_t PROFILE_ID_AVRCP_TG = 0x00000020;
167 const uint32_t PROFILE_ID_HFP_AG = 0x00000040;
168 const uint32_t PROFILE_ID_HFP_HF = 0x00000080;
169 const uint32_t PROFILE_ID_MAP_MCE = 0x00000100;
170 const uint32_t PROFILE_ID_MAP_MSE = 0x00000200;
171 const uint32_t PROFILE_ID_PBAP_PCE = 0x00000400;
172 const uint32_t PROFILE_ID_PBAP_PSE = 0x00000800;
173 const uint32_t PROFILE_ID_SPP = 0x00001000;
174 const uint32_t PROFILE_ID_DI = 0x00002000;
175 const uint32_t PROFILE_ID_BLE_ADVERTISER = 0x00004000;
176 const uint32_t PROFILE_ID_BLE_CENTRAL_MANAGER_SERVER = 0x00008000;
177 const uint32_t PROFILE_ID_BLE_GATT_MANAGER = 0x00010000;
178 const uint32_t PROFILE_ID_HID_HOST = 0x00020000;
179 const uint32_t PROFILE_ID_OPP = 0x00040000;
180 const uint32_t PROFILE_ID_PAN = 0x00080000;
181 const uint32_t PROFILE_ID_HOST = 0x00100000;
182 
183 /**
184  * @brief default value
185  * use to
186  * initialize mac address, name or other values.
187  */
188 const std::string INVALID_MAC_ADDRESS = "00:00:00:00:00:00";
189 const std::string INVALID_NAME = "";
190 const int INVALID_VALUE = 0;
191 const int INVALID_TYPE = -1;
192 const int ADDRESS_LENGTH = 17;
193 const int ADDRESS_COLON_INDEX = 2;
194 const int ADDRESS_SEPARATOR_UNIT = 3;
195 
196 /**
197  * @brief discovery state
198  * use to
199  * GetBtScanMode(), SetBtScanMode()
200  */
201 const int DISCOVERY_STARTED = 0x01;
202 const int DISCOVERYING = 0x02;
203 const int DISCOVERY_STOPED = 0x03;
204 
205 /**
206  * @brief pairing result
207  * use to
208  * OnPairStatusChanged()
209  */
210 const int PAIR_NONE = 0x01;
211 const int PAIR_PAIRING = 0x02;
212 const int PAIR_PAIRED = 0x03;
213 enum UnbondCause : int {
214     PAIR_COMMON_BOND_CAUSE = 0,          // Common bond cause value.
215     UNBOND_CAUSE_USER_REMOVED = 0,       // User proactively removed device.
216     UNBOND_CAUSE_REMOTE_DEVICE_DOWN = 1, // Remote device shut down.
217     UNBOND_CAUSE_AUTH_FAILURE = 2,       // Wrong PIN code.
218     UNBOND_CAUSE_AUTH_REJECTED = 3,      // Remote device rejected.
219     UNBOND_CAUSE_INTERNAL_ERROR = 4,     // Internal error.
220 };
221 
222 /**
223  * @brief discoverable mode and connect mode
224  * use to
225  * GetBtScanMode(), SetBtScanMode()
226  */
227 const int SCAN_MODE_NONE = 0x00;
228 const int SCAN_MODE_CONNECTABLE = 0x01;
229 const int SCAN_MODE_GENERAL_DISCOVERABLE = 0x02;
230 const int SCAN_MODE_LIMITED_DISCOVERABLE = 0x03;
231 const int SCAN_MODE_CONNECTABLE_GENERAL_DISCOVERABLE = 0x04;
232 const int SCAN_MODE_CONNECTABLE_LIMITED_DISCOVERABLE = 0x05;
233 
234 /**
235  * @brief bondable mode define
236  * use to
237  * GetBondableMode(), SetBondableMode()
238  */
239 const int BONDABLE_MODE_OFF = 0x00;
240 const int BONDABLE_MODE_ON = 0x01;
241 
242 /**
243  * @brief remote device's transport type
244  * use to
245  * GetTransportType()
246  */
247 const int BT_TRANSPORT_NONE = -1;
248 const int BT_TRANSPORT_BREDR = 0;
249 const int BT_TRANSPORT_BLE = 1;
250 
251 /**
252  * @brief remote device type
253  * use to
254  * GetDeviceType
255  */
256 const int DEVICE_TYPE_UNKNOWN = -1;
257 const int DEVICE_TYPE_BREDR = 0;
258 const int DEVICE_TYPE_LE = 1;
259 const int DEVICE_TYPE_DUAL_MONO = 2;
260 
DeviceTypeToTransport(int type)261 inline int DeviceTypeToTransport(int type)
262 {
263     switch (type) {
264         case DEVICE_TYPE_LE:
265             return BT_TRANSPORT_BLE;
266         case DEVICE_TYPE_BREDR:
267             return BT_TRANSPORT_BREDR;
268         case DEVICE_TYPE_DUAL_MONO:
269             return BT_TRANSPORT_BREDR;
270         default:
271             return BT_TRANSPORT_NONE;
272     }
273 }
274 
275 /**
276  * @brief ACL LINK TYPE.
277  * use to
278  * acl connectCallback()
279  */
280 const int LINK_TYPE_UNKNOWN = -1;
281 const int LINK_TYPE_BREDR = 0;
282 const int LINK_TYPE_LE = 1;
283 
284 /*********************************************
285  *
286  * GATT Macro Define
287  *
288  *********************************************/
289 
290 constexpr uint8_t GATT_TRANSPORT_TYPE_AUTO = 0x0;
291 constexpr uint8_t GATT_TRANSPORT_TYPE_LE = 0x1;
292 constexpr uint8_t GATT_TRANSPORT_TYPE_CLASSIC = 0x2;
293 constexpr uint8_t GATT_ROLE_MASTER = 0x00;
294 constexpr uint8_t GATT_ROLE_SLAVE = 0x01;
295 constexpr uint8_t GATT_ROLE_INVALID = 0xFF;
296 
297 /**
298  * @brief user confirm type during paring process.
299  * use to
300  * OnPairConfirmed()
301  */
302 enum PinType {
303     PIN_TYPE_ENTER_PIN_CODE = 0,         // enter the pin code displayed on the peer device
304     PIN_TYPE_ENTER_PASSKEY = 1,          // enter the passkey displayed on the peer device
305     PIN_TYPE_CONFIRM_PASSKEY = 2,        // confirm the passkey displayed on the local device
306     PIN_TYPE_NO_PASSKEY_CONSENT = 3,     // accept or deny the pairing request
307     PIN_TYPE_NOTIFY_PASSKEY = 4,         // enter the passkey displayed on the local device on the peer device
308     PIN_TYPE_DISPLAY_PIN_CODE = 5,       // enter the pin code displayed on the peer device, used for bluetooth 2.0
309     PIN_TYPE_OOB_CONSENT = 6,            // accept or deny the OOB pairing request, not suppport now
310     PIN_TYPE_PIN_16_DIGITS = 7,          // enter the 16-digit pin code displayed on the peer device
311 };
312 
313 /** A GATT Attribute Permission.
314  *  Define GATT Attribute permissions.
315  */
316 enum class GattPermission : uint16_t {
317     READABLE = 1 << 0, /**< readable */
318     READ_ENCRYPTED = 1 << 1,
319     READ_ENCRYPTED_MITM = 1 << 2,
320     WRITEABLE = 1 << 4,
321     WRITE_ENCRYPTED = 1 << 5,
322     WRITE_ENCRYPTED_MITM = 1 << 6,
323     WRITE_SIGNED = 1 << 7,
324     WRITE_SIGNED_MITM = 1 << 8,
325     PERMISSON_MAX = 1 << 9,
326 };
327 
328 enum class GattConnectionPriority : int { BALANCED, HIGH, LOW_POWER };
329 
330 enum GattStatus {
331     INVALID_REMOTE_DEVICE = -29,
332     INCLUDE_SERVICE_NOT_FOUND,
333     REFERENCED_BY_OTHER_SERVICE,
334     INVALID_CHARACTERISTIC,
335     INVALID_CHARACTERISTIC_DATA,
336     INVALID_CHARACTERISTIC_DESCRIPTOR,
337     INVALID_CHARACTERISTIC_DESCRIPTOR_DATA,
338     NOT_ENOUGH_HANDLES,
339     HANDLE_NOT_FOUND,
340     INVALID_PARAMETER,
341     INTERNAL_ERROR,
342     REQUEST_NOT_SUPPORT,
343     REMOTE_DEVICE_BUSY,
344     MAX_CONNECTIONS,
345     MAX_APPLICATIONS,
346     DEVICE_ALREADY_BIND,
347     INVALID_HANDLE,
348     INVALID_OFFSET,
349     READ_NOT_PERMITTED,
350     WRITE_NOT_PERMITTED,
351     INSUFFICIENT_ENCRYPTION,
352     INSUFFICIENT_AUTHENTICATION,
353     INSUFFICIENT_AUTHORIZATION,
354     INSUFFICIENT_ENCRYPTION_KEY_SIZE,
355     PREPARE_QUEUE_FULL,
356     ATTRIBUTE_NOT_LONG,
357     INVALID_ATTRIBUTE_VALUE_LENGTH,
358     WRITE_REQUEST_REJECTED,
359     GATT_FAILURE,
360     GATT_SUCCESS
361 };
362 
363 /*********************************************
364  *
365  * BLE Macro Define
366  *
367  *********************************************/
368 // Minimum value for advertising interval.
369 const int BLE_ADV_MIN_INTERVAL = 0x0020;
370 // Maximum value for advertising interval.
371 const int BLE_ADV_MAX_INTERVAL = 0x4000;
372 // Default value for advertising interval.
373 const int BLE_ADV_DEFAULT_INTERVAL = 0x03E8;
374 
375 // Special advertising set handle used for the legacy advertising set.
376 const uint8_t BLE_LEGACY_ADVERTISING_HANDLE = 0x00;
377 // Special advertising set handle used as return or parameter to signify an invalid handle.
378 const uint8_t BLE_INVALID_ADVERTISING_HANDLE = 0xFF;
379 
380 // Report delay millis default value
381 const int BLE_REPORT_DELAY_MILLIS = 5000;
382 
383 // Definitions for UUID length constants.
384 const int BLE_UUID_LEN_16 = 2;
385 const int BLE_UUID_LEN_32 = 4;
386 const int BLE_UUID_LEN_128 = 16;
387 const int DEVICE_NAME_MAX_LEN = 26;
388 
389 // BLE acl connect status
390 const int BLE_CONNECTION_STATE_DISCONNECTED = 0x00;
391 const int BLE_CONNECTION_STATE_CONNECTED = 0x01;
392 const int BLE_CONNECTION_STATE_ENCRYPTED_BREDR = 0x02;
393 const int BLE_CONNECTION_STATE_ENCRYPTED_LE = 0x04;
394 
395 const int BLE_PAIR_NONE = 0x01;
396 const int BLE_PAIR_PAIRING = 0x02;
397 const int BLE_PAIR_PAIRED = 0x03;
398 const int BLE_PAIR_CANCELING = 0x04;
399 
400 const int BLE_ADV_DEFAULT_OP_CODE = 0x00;
401 const int BLE_ADV_STOP_COMPLETE_OP_CODE = 0x01;
402 const int BLE_ADV_START_FAILED_OP_CODE = 0x02;
403 
404 const uint8_t BLE_ADV_DATA_BYTE_FIELD_LEN = 3;
405 const uint8_t BLE_ADV_DATA_FIELD_TYPE_AND_LEN = 2;
406 const uint8_t BLE_ONE_BYTE_LEN = 8;
407 
408 const int8_t BLE_ADV_TX_POWER_ULTRA_LOW_VALUE = -21;
409 const int8_t BLE_ADV_TX_POWER_LOW_VALUE = -15;
410 const int8_t BLE_ADV_TX_POWER_MEDIUM_VALUE = -7;
411 const int8_t BLE_ADV_TX_POWER_HIGH_VALUE = 1;
412 
413 // Intended Advertising PHY
414 const uint8_t BLE_ADVERTISEMENT_PHY_NONE = 0x00;
415 const uint8_t BLE_ADVERTISEMENT_PHY_1M = 0x01;
416 const uint8_t BLE_ADVERTISEMENT_PHY_2M = 0x02;
417 const uint8_t BLE_ADVERTISEMENT_PHY_CODED = 0x03;
418 
419 const uint8_t BLE_LEGACY_SCAN_RESPONSE = 3;
420 const uint8_t BLE_LEGACY_ADV_SCAN_IND = 1;
421 const uint8_t BLE_LEGACY_ADV_IND_WITH_EX_ADV = 0x13;
422 const uint8_t BLE_LEGACY_ADV_NONCONN_IND_WITH_EX_ADV = 0x10;
423 const uint8_t BLE_ADV_EVT_LEGACY_BIT = 4;
424 
425 // Incomplete, more data to come
426 const uint8_t BLE_EX_SCAN_DATE_STATUS_INCOMPLETE_MORE = 0x20;
427 // Incomplete, data truncated, no more to come
428 const uint8_t BLE_EX_SCAN_DATE_STATUS_INCOMPLETE_NO_MORE = 0x40;
429 
430 // Scan mode
431 typedef enum {
432     SCAN_MODE_LOW_POWER = 0x00,
433     SCAN_MODE_BALANCED = 0x01,
434     SCAN_MODE_LOW_LATENCY = 0x02,
435     SCAN_MODE_OP_P2_60_3000 = 0x03,
436     SCAN_MODE_OP_P10_60_600 = 0x04,
437     SCAN_MODE_OP_P25_60_240 = 0x05,
438     SCAN_MODE_OP_P100_1000_1000 = 0x06,
439     SCAN_MODE_OP_P50_100_200 = 0x07,
440     SCAN_MODE_OP_P10_30_300 = 0x08,
441     SCAN_MODE_OP_P2_30_1500 = 0x09,
442     SCAN_MODE_OP_P75_30_40 = 0x0A,
443     SCAN_MODE_OP_P50_30_60 = 0x0B,
444 } SCAN_MODE;
445 
446 // Scan callback type
447 constexpr uint8_t BLE_SCAN_CALLBACK_TYPE_ALL_MATCH = 1;
448 constexpr uint8_t BLE_SCAN_CALLBACK_TYPE_FIRST_MATCH = 2;
449 constexpr uint8_t BLE_SCAN_CALLBACK_TYPE_LOST_MATCH = 4;
450 constexpr uint8_t BLE_SCAN_CALLBACK_TYPE_FIRST_AND_LOST_MATCH = 6;
451 
452 // Match mode for Bluetooth LE scan filters hardware match
453 typedef enum { MATCH_MODE_AGGRESSIVE = 1, MATCH_MODE_STICKY = 2 } MATCH_MODE;
454 
455 // Determines total number of advertisers to track per filter
456 typedef enum { ONE_MATCH_TRACK_ADV = 1, FEW_MATCH_TRACK_ADV = 2, MAX_MATCH_TRACK_ADV = 3 } MATCH_TRACK_ADV_TYPE;
457 
458 // Regular scan params
459 constexpr uint16_t BLE_SCAN_MODE_LOW_POWER_WINDOW_MS = 512;
460 constexpr uint16_t BLE_SCAN_MODE_LOW_POWER_INTERVAL_MS = 5120;
461 constexpr uint16_t BLE_SCAN_MODE_BALANCED_WINDOW_MS = 1024;
462 constexpr uint16_t BLE_SCAN_MODE_BALANCED_INTERVAL_MS = 4096;
463 constexpr uint16_t BLE_SCAN_MODE_LOW_LATENCY_WINDOW_MS = 4096;
464 constexpr uint16_t BLE_SCAN_MODE_LOW_LATENCY_INTERVAL_MS = 4096;
465 constexpr uint16_t BLE_SCAN_MODE_OP_P2_60_3000_WINDOW_MS = 60;
466 constexpr uint16_t BLE_SCAN_MODE_OP_P2_60_3000_INTERVAL_MS = 3000;
467 constexpr uint16_t BLE_SCAN_MODE_OP_P10_60_600_WINDOW_MS = 60;
468 constexpr uint16_t BLE_SCAN_MODE_OP_P10_60_600_INTERVAL_MS = 600;
469 constexpr uint16_t BLE_SCAN_MODE_OP_P25_60_240_WINDOW_MS = 60;
470 constexpr uint16_t BLE_SCAN_MODE_OP_P25_60_240_INTERVAL_MS = 240;
471 constexpr uint16_t BLE_SCAN_MODE_OP_P100_1000_1000_WINDOW_MS = 1000;
472 constexpr uint16_t BLE_SCAN_MODE_OP_P100_1000_1000_INTERVAL_MS = 1000;
473 constexpr uint16_t BLE_SCAN_MODE_OP_P50_100_200_WINDOW_MS = 100;
474 constexpr uint16_t BLE_SCAN_MODE_OP_P50_100_200_INTERVAL_MS = 200;
475 constexpr uint16_t BLE_SCAN_MODE_OP_P10_30_300_WINDOW_MS = 30;
476 constexpr uint16_t BLE_SCAN_MODE_OP_P10_30_300_INTERVAL_MS = 300;
477 constexpr uint16_t BLE_SCAN_MODE_OP_P2_30_1500_WINDOW_MS = 30;
478 constexpr uint16_t BLE_SCAN_MODE_OP_P2_30_1500_INTERVAL_MS = 1500;
479 constexpr uint16_t BLE_SCAN_MODE_OP_P75_30_40_WINDOW_MS = 30;
480 constexpr uint16_t BLE_SCAN_MODE_OP_P75_30_40_INTERVAL_MS = 40;
481 constexpr uint16_t BLE_SCAN_MODE_OP_P50_30_60_WINDOW_MS = 30;
482 constexpr uint16_t BLE_SCAN_MODE_OP_P50_30_60_INTERVAL_MS = 60;
483 constexpr float BLE_SCAN_UNIT_TIME = 0.625;
484 void ConvertBleScanMode(int scanMode, uint16_t &outScanWindow, uint16_t &outScanInterval);
485 
486 // low power device
487 constexpr int32_t BLE_LPDEVICE_SCAN_SETTING_VALID_BIT = 0x01;
488 constexpr int32_t BLE_LPDEVICE_SCAN_FILTER_VALID_BIT = 0x02;
489 constexpr int32_t BLE_LPDEVICE_ADV_SETTING_VALID_BIT = 0x04;
490 constexpr int32_t BLE_LPDEVICE_ADVDATA_VALID_BIT = 0x08;
491 constexpr int32_t BLE_LPDEVICE_RESPDATA_VALID_BIT = 0x10;
492 constexpr int32_t BLE_LPDEVICE_ADV_DEVICEINFO_VALID_BIT = 0x20;
493 
494 constexpr int8_t BLE_LPDEVICE_MSG_DEV_INFO = 0x00;
495 constexpr int8_t BLE_LPDEVICE_MSG_SOFT_FILTER = 0x01;
496 constexpr int8_t BLE_LPDEVICE_MSG_ADV_PARAM = 0x02;
497 constexpr int8_t BLE_LPDEVICE_MSG_ADV_DATA = 0x03;
498 constexpr int8_t BLE_LPDEVICE_MSG_ADV_RSP_DATA = 0x04;
499 constexpr int8_t BLE_LPDEVICE_MSG_UUID_DATA = 0x0a;
500 constexpr int8_t BLE_LPDEVICE_MSG_ADV_HANDLE = 0x0b;
501 constexpr int8_t BLE_LPDEVICE_MSG_SCAN_STATUS = 0x0c;
502 constexpr int8_t BLE_LPDEVICE_MSG_SCAN_PARAM = 0x0d;
503 
504 constexpr uint8_t BLE_LPDEVICE_MSG_TYPE_NOTICE_UP_DATA = 0x02;
505 
506 constexpr int8_t BLE_LPDEVICE_DISABLE_SCAN_IN_LPDEVICE = 0;
507 constexpr int8_t BLE_LPDEVICE_ENABLE_SCAN_IN_LPDEVICE = 1;
508 
509 constexpr int8_t BLE_LPDEVICE_DEVICE_TYPE_ALL = 2;
510 
511 constexpr uint32_t BLE_LPDEVICE_RECOVERY_DOING = 1;
512 constexpr uint32_t BLE_LPDEVICE_RECOVERY_DONE = 2;
513 
514 constexpr int32_t BLE_LPDEVICE_HANDLE_RESOURCE_NOT_APPLY = -100;
515 
516 constexpr uint8_t BLE_DATA_LEN_1 = 1;
517 constexpr uint8_t BLE_DATA_LEN_2 = 2;
518 constexpr uint8_t BLE_DATA_LEN_3 = 3;
519 constexpr uint8_t BLE_DATA_LEN_4 = 4;
520 
521 constexpr uint8_t BLE_DEVICE_ADDR_LEN = 6;
522 constexpr uint8_t BLE_ADV_DEVICE_ID_LEN = 8;
523 constexpr uint8_t BLE_UUID_LEN = 16;
524 constexpr uint8_t BLE_UUID_HALF_LEN = 8;
525 
526 constexpr int32_t BLE_SCAN_MAX_NUM = 1000;
527 
528 // Phy type
529 using PHY_TYPE = enum { PHY_LE_1M = 1, PHY_LE_2M = 2, PHY_LE_CODED = 3, PHY_LE_ALL_SUPPORTED = 255 };
530 
531 // BLE advertiser TX power level.
532 using BLE_ADV_TX_POWER_LEVEL = enum {
533     BLE_ADV_TX_POWER_ULTRA_LOW = 0x00,
534     BLE_ADV_TX_POWER_LOW = 0x01,
535     BLE_ADV_TX_POWER_MEDIUM = 0x02,
536     BLE_ADV_TX_POWER_HIGH = 0x03
537 };
538 
539 // BLE advertiser flag
540 const uint8_t BLE_ADV_FLAG_NON_LIMIT_DISC = 0x00;
541 const uint8_t BLE_ADV_FLAG_LIMIT_DISC = 0x01 << 0;
542 const uint8_t BLE_ADV_FLAG_GEN_DISC = 0x01 << 1;
543 const uint8_t BLE_ADV_FLAG_BREDR_NOT_SPT = 0x01 << 2;
544 const uint8_t BLE_ADV_FLAG_DMT_CONTROLLER_SPT = 0x01 << 3;
545 const uint8_t BLE_ADV_FLAG_DMT_HOST_SPT = 0x01 << 4;
546 
547 // Bluetooth device type
548 using BLE_BT_DEV_TYPE = enum {
549     BLE_BT_DEVICE_TYPE_UNKNOWN = -1,
550     BLE_BT_DEVICE_TYPE_BREDR = 0,
551     BLE_BT_DEVICE_TYPE_BLE = 1,
552     BLE_BT_DEVICE_TYPE_DUMO = 2,
553 };
554 
555 // BLE device address type
556 using BLE_ADDR_TYPE = enum {
557     BLE_ADDR_TYPE_PUBLIC = 0x00,
558     BLE_ADDR_TYPE_RANDOM = 0x01,
559     BLE_ADDR_TYPE_NON_RPA = 0x02,
560     BLE_ADDR_TYPE_RPA = 0x03,
561     BLE_ADDR_TYPE_UNKNOWN = 0xFE,
562     BLE_ADDR_TYPE_ANONYMOUS = 0xFF,
563 };
564 
565 using BLE_IO_CAP = enum {
566     BLE_IO_CAP_OUT = 0x00,    // DisplayOnly
567     BLE_IO_CAP_IO = 0x01,     // DisplayYesNo
568     BLE_IO_CAP_IN = 0x02,     // KeyboardOnly
569     BLE_IO_CAP_NONE = 0x03,   // NoInputNoOutput
570     BLE_IO_CAP_KBDISP = 0x04  // Keyboard display
571 };
572 
573 // Adv status
574 using BleAdvState = enum {
575     BLE_ADV_STATE_IDLE,
576     BLE_ADV_STATE_ADVERTISING,
577 };
578 
579 // The type of advertising data(not adv_type)
580 using BLE_ADV_DATA_TYPE = enum {
581     BLE_AD_TYPE_FLAG = 0x01,
582     BLE_AD_TYPE_16SRV_PART = 0x02,
583     BLE_AD_TYPE_16SRV_CMPL = 0x03,
584     BLE_AD_TYPE_32SRV_PART = 0x04,
585     BLE_AD_TYPE_32SRV_CMPL = 0x05,
586     BLE_AD_TYPE_128SRV_PART = 0x06,
587     BLE_AD_TYPE_128SRV_CMPL = 0x07,
588     BLE_AD_TYPE_NAME_SHORT = 0x08,
589     BLE_AD_TYPE_NAME_CMPL = 0x09,
590     BLE_AD_TYPE_TX_PWR = 0x0A,
591     BLE_AD_TYPE_DEV_CLASS = 0x0D,
592     BLE_AD_TYPE_SM_TK = 0x10,
593     BLE_AD_TYPE_SM_OOB_FLAG = 0x11,
594     BLE_AD_TYPE_INT_RANGE = 0x12,
595     BLE_AD_TYPE_SOL_SRV_UUID = 0x14,
596     BLE_AD_TYPE_128SOL_SRV_UUID = 0x15,
597     BLE_AD_TYPE_SERVICE_DATA = 0x16,
598     BLE_AD_TYPE_PUBLIC_TARGET = 0x17,
599     BLE_AD_TYPE_RANDOM_TARGET = 0x18,
600     BLE_AD_TYPE_APPEARANCE = 0x19,
601     BLE_AD_TYPE_ADV_INT = 0x1A,
602     BLE_AD_TYPE_LE_DEV_ADDR = 0x1b,
603     BLE_AD_TYPE_LE_ROLE = 0x1c,
604     BLE_AD_TYPE_SPAIR_C256 = 0x1d,
605     BLE_AD_TYPE_SPAIR_R256 = 0x1e,
606     BLE_AD_TYPE_32SOL_SRV_UUID = 0x1f,
607     BLE_AD_TYPE_32SERVICE_DATA = 0x20,
608     BLE_AD_TYPE_128SERVICE_DATA = 0x21,
609     BLE_AD_TYPE_LE_SECURE_CONFIRM = 0x22,
610     BLE_AD_TYPE_LE_SECURE_RANDOM = 0x23,
611     BLE_AD_TYPE_URI = 0x24,
612     BLE_AD_TYPE_INDOOR_POSITION = 0x25,
613     BLE_AD_TYPE_TRANS_DISC_DATA = 0x26,
614     BLE_AD_TYPE_LE_SUPPORT_FEATURE = 0x27,
615     BLE_AD_TYPE_CHAN_MAP_UPDATE = 0x28,
616     BLE_AD_MANUFACTURER_SPECIFIC_TYPE = 0xFF,
617 };
618 
619 /*********************************************
620  *
621  * Map Define
622  *
623  *********************************************/
624 // Map Message Type
625 enum class MapMessageType : int {
626     EMAIL = 0,
627     SMS_GSM = 1,
628     SMS_CDMA = 2,
629     MMS = 3,
630     IM = 4,
631     INVALID = 5
632 };  // IM only support in bmessage ver1.1
633 
634 // Map Message Status
635 enum class MapMessageStatus : int { READ, UNREAD, INVALID };  // default UNREAD
636 
637 // Map BoolType , YES_TYPE or NO_TYPE
638 enum class MapBoolType : int { YES_TYPE, NO_TYPE, INVALID };  // default NO_TYPE
639 
640 // Map Message ReceptionStatus
641 enum class MapMsgReceptionStatus : int { COMPLETE, FRACTIONED, NOTIFICATION, INVALID };
642 
643 // Map MsgDeliveryStatus
644 enum class MapMsgDeliveryStatus : int { DELIVERED, SENT, UNKNOWN, INVALID };
645 
646 // Map MsgDirection
647 enum class MapMsgDirection : int { INCOMING, OUTGOING, OUTGOINGDRAFT, OUTGOINGPENDING, INVALID };
648 
649 // Map FractionDeliverType
650 enum class MapFractionDeliverType : int { MORE, LAST, INVALID };
651 
652 // Map FractionRequest Type
653 enum class MapFractionRequestType : uint8_t { FIRST = 0x00, NEXT = 0x01, INVALID = 0x02 };
654 
655 // Map OnOff Type
656 enum class MapOnOffType : uint8_t { OFF = 0, ON = 1, INVALID = 3 };
657 
658 // Map Charset Type
659 enum class MapCharsetType : uint8_t { NATIVE = 0x00, UTF_8 = 0x01, INVALID = 0x02 };
660 
661 // Attachment Type
662 enum class MapAttachmentType : uint8_t { NO_TYPE = 0x00, HAVE = 0x01, INVALID = 0x02 };
663 
664 // Map StatusIndicator Type
665 enum class MapStatusIndicatorType : uint8_t {
666     READ_STATUS = 0x00,
667     DELETED_STATUS = 0x01,
668     SET_EXTENDED_DATA = 0x02,
669     INVALID = 0x03
670 };
671 
672 // Map StatusValue Type
673 enum class MapStatusValueType : uint8_t { NO_TYPE = 0x00, YES_TYPE = 0x01 };
674 
675 // Map ModifyText Type
676 enum class MapModifyTextType : uint8_t { REPLACE = 0x00, PREPEND = 0x01, INVALID = 0x02 };
677 
678 // Map Action Type
679 enum class MapActionType : int {
680     GET_UNREAD_MESSAGES,
681     GET_SUPPORTED_FEATURES,
682     SEND_MESSAGE,
683     SET_NOTIFICATION_FILTER,
684     GET_MESSAGES_LISTING,
685     GET_MESSAGE,
686     UPDATE_INBOX,
687     GET_CONVERSATION_LISTING,
688     SET_MESSAGE_STATUS,
689     SET_OWNER_STATUS,
690     GET_OWNER_STATUS,
691     GET_MAS_INSTANCE_INFO
692 };
693 
694 // Map ExecuteStatus Type
695 enum class MapExecuteStatus : int {
696     SUCCEED = 0,
697     CONTINUE = 1,
698     BAD_PARAM = (-1),
699     BAD_STATUS = (-2),
700     NOT_SUPPORT = (-3)
701 };
702 
703 // Supported Message Types
704 #define MAP_MCE_SUPPORTED_MESSAGE_TYPE_EMAIL 0x01
705 #define MAP_MCE_SUPPORTED_MESSAGE_TYPE_SMS_GSM 0x02
706 #define MAP_MCE_SUPPORTED_MESSAGE_TYPE_SMS_CDMA 0x04
707 #define MAP_MCE_SUPPORTED_MESSAGE_TYPE_MMS 0x08
708 #define MAP_MCE_SUPPORTED_MESSAGE_TYPE_IM 0x10
709 #define MAP_MCE_SUPPORTED_MESSAGE_TYPE_ALL 0x01F
710 
711 // Api: MapClient::GetMessagesListing Application Parameters Mask defines
712 // FilterMessageType Mask, 1 is "filter out this type", 0 is "no filtering, get this type"
713 #define MAP_FILTER_MESSAGE_MASK_SMS_GSM 0b00000001
714 #define MAP_FILTER_MESSAGE_MASK_SMS_CDMA 0b00000010
715 #define MAP_FILTER_MESSAGE_MASK_EMAIL 0b00000100
716 #define MAP_FILTER_MESSAGE_MASK_MMS 0b00001000
717 #define MAP_FILTER_MESSAGE_MASK_IM 0b00010000
718 #define MAP_FILTER_MESSAGE_MASK_NO_FILTERING 0b00000000
719 // FilterReadStatus,  0b00000001 is get unread messages only,
720 // 0b00000010 is get read messages only
721 #define MAP_FILTER_READ_STATUS_MASK_UNREAD 0b00000001
722 #define MAP_FILTER_READ_STATUS_MASK_READ 0b00000010
723 #define MAP_FILTER_READ_STATUS_MASK_NO_FILTERING 0b00000000
724 // FilterPriority, 0b00000001 is get high priority messages only,
725 // 0b00000010 is get non-high priority messages only
726 #define MAP_FILTER_PRIORITY_MASK_HIGH 0b00000001
727 #define MAP_FILTER_PRIORITY_MASK_NO_HIGH 0b00000010
728 #define MAP_FILTER_PRIORITY_MASK_NO_FILTERING 0b00000000
729 // ParameterMask , Bits 0-20 has been used , Bits 21–31 Reserved for Future Use
730 #define MAP_GETMESSAGELIST_PARAMETER_MASK_REQUIRED 0b000000000000000000000000
731 #define MAP_GETMESSAGELIST_PARAMETER_MASK_PRESENT_ALL 0b000111111111111111111111
732 #define MAP_GETMESSAGELIST_PARAMETER_MASK_SUBJECT 0b000000000000000000000001
733 #define MAP_GETMESSAGELIST_PARAMETER_MASK_DATETIME 0b000000000000000000000010
734 #define MAP_GETMESSAGELIST_PARAMETER_MASK_SENDER_NAME 0b000000000000000000000100
735 #define MAP_GETMESSAGELIST_PARAMETER_MASK_SENDER_ADDRESSING 0b000000000000000000001000
736 #define MAP_GETMESSAGELIST_PARAMETER_MASK_RECIPIENT_NAME 0b000000000000000000010000
737 #define MAP_GETMESSAGELIST_PARAMETER_MASK_RECIPIENT_ADDRESSING 0b000000000000000000100000
738 #define MAP_GETMESSAGELIST_PARAMETER_MASK_TYPE 0b000000000000000001000000
739 #define MAP_GETMESSAGELIST_PARAMETER_MASK_SIZE 0b000000000000000010000000
740 #define MAP_GETMESSAGELIST_PARAMETER_MASK_RECEPTION_STATUS 0b000000000000000100000000
741 #define MAP_GETMESSAGELIST_PARAMETER_MASK_TEXT 0b000000000000001000000000
742 #define MAP_GETMESSAGELIST_PARAMETER_MASK_ATTACHMENT_SIZE 0b000000000000010000000000
743 #define MAP_GETMESSAGELIST_PARAMETER_MASK_PRIORITY 0b000000000000100000000000
744 #define MAP_GETMESSAGELIST_PARAMETER_MASK_READ 0b000000000001000000000000
745 #define MAP_GETMESSAGELIST_PARAMETER_MASK_SENT 0b000000000010000000000000
746 #define MAP_GETMESSAGELIST_PARAMETER_MASK_PROTECTED 0b000000000100000000000000
747 #define MAP_GETMESSAGELIST_PARAMETER_MASK_REPLYTO_ADDRESSING 0b000000001000000000000000
748 #define MAP_GETMESSAGELIST_PARAMETER_MASK_DELIVERY_STATUS 0b000000010000000000000000
749 #define MAP_GETMESSAGELIST_PARAMETER_MASK_CONVERSATION_ID 0b000000100000000000000000
750 #define MAP_GETMESSAGELIST_PARAMETER_MASK_CONVERSATION_NAME 0b000001000000000000000000
751 #define MAP_GETMESSAGELIST_PARAMETER_MASK_DIRECTION 0b000010000000000000000000
752 #define MAP_GETMESSAGELIST_PARAMETER_MASK_ATTACHMENT_MIME 0b000100000000000000000000
753 
754 // Api: MapClient::GetConversationListing Application Parameters Mask defines
755 // ConvParameterMask , Bits 0-14 has been used, Bits 15–31 Reserved for Future Use
756 // Bit i is 1 indicates that the parameter related to Bit i shall be present in the requested Conversation-Listing.
757 // The reserved bits shall be set to 0 by the MCE and discarded by the MSE.
758 // If Bit 5 has the value 0, the Conversation-Listing in the response shall not contain any participant element
759 // and therefore the Bits 6–14 do not have any impact.
760 // If Bit 5 has the value 1, then at least one of the Bits 6–14 shall also have the value 1.
761 // If any of the Bits 6–14 has the value 1, Bit 5 shall have the value 1.
762 #define MAP_GETCONV_PARAMETER_MASK_ALL_ON 0b000000000111111111111111
763 #define MAP_GETCONV_PARAMETER_MASK_CONVERSATION_NAME 0b000000000000000000000001
764 #define MAP_GETCONV_PARAMETER_MASK_CONVERSATION_LAST_ACTIVITY 0b000000000000000000000010
765 #define MAP_GETCONV_PARAMETER_MASK_CONVERSATION_READ_STATUS 0b000000000000000000000100
766 #define MAP_GETCONV_PARAMETER_MASK_CONVERSATION_VERSION_COUNTER 0b000000000000000000001000
767 #define MAP_GETCONV_PARAMETER_MASK_CONVERSATION_SUMMARY 0b000000000000000000010000
768 #define MAP_GETCONV_PARAMETER_MASK_PARTICIPANTS 0b000000000000000000100000
769 #define MAP_GETCONV_PARAMETER_MASK_PARTICIPANT_UCI 0b000000000000000001000000
770 #define MAP_GETCONV_PARAMETER_MASK_PARTICIPANT_DISPLAY_NAME 0b000000000000000010000000
771 #define MAP_GETCONV_PARAMETER_MASK_PARTICIPANT_CHAT_STATE 0b000000000000000100000000
772 #define MAP_GETCONV_PARAMETER_MASK_PARTICIPANT_LAST_ACTIVITY 0b000000000000001000000000
773 #define MAP_GETCONV_PARAMETER_MASK_PARTICIPANT_X_BT_UID 0b000000000000010000000000
774 #define MAP_GETCONV_PARAMETER_MASK_PARTICIPANT_NAME 0b000000000000100000000000
775 #define MAP_GETCONV_PARAMETER_MASK_PARTICIPANT_PRESENCE_AVAILABILITY 0b000000000001000000000000
776 #define MAP_GETCONV_PARAMETER_MASK_PARTICIPANT_PRESENCE_TEXT 0b000000000010000000000000
777 #define MAP_GETCONV_PARAMETER_MASK_PARTICIPANT_PRIORITY 0b000000000100000000000000
778 
779 // Api: MapClient::SetNotificationFilter input param mask defines
780 // Bit i is 0 indicates that the MSE shall not send the notification related to bit i for the current MAS.
781 // NotificationFilterMask ,Bits 0-14 has been used, Bits 15–31 Reserved for Future Use
782 #define MAP_NOTIFICATION_FILTER_MASK_ALL_OFF 0b000000000000000000000000
783 #define MAP_NOTIFICATION_FILTER_MASK_ALL_ON 0b000000000111111111111111
784 #define MAP_NOTIFICATION_FILTER_MASK_NEW_MESSAGE 0b000000000000000000000001
785 #define MAP_NOTIFICATION_FILTER_MASK_MESSAGE_DELETED 0b000000000000000000000010
786 #define MAP_NOTIFICATION_FILTER_MASK_MESSAGE_SHIFT 0b000000000000000000000100
787 #define MAP_NOTIFICATION_FILTER_MASK_SENDING_SUCCESS 0b000000000000000000001000
788 #define MAP_NOTIFICATION_FILTER_MASK_SENDING_FAILURE 0b000000000000000000010000
789 #define MAP_NOTIFICATION_FILTER_MASK_DELIVERY_SUCCESS 0b000000000000000000100000
790 #define MAP_NOTIFICATION_FILTER_MASK_DELIVERY_FAILURE 0b000000000000000001000000
791 #define MAP_NOTIFICATION_FILTER_MASK_MEMORY_FULL 0b000000000000000010000000
792 #define MAP_NOTIFICATION_FILTER_MASK_MEMORY_AVAILABLE 0b000000000000000100000000
793 #define MAP_NOTIFICATION_FILTER_MASK_READ_STATUS_CHANGED 0b000000000000001000000000
794 #define MAP_NOTIFICATION_FILTER_MASK_CONVERSATION_CHANGED 0b000000000000010000000000
795 #define MAP_NOTIFICATION_FILTER_MASK_PARTICIPANT_PRESENCE_CHANGED 0b000000000000100000000000
796 #define MAP_NOTIFICATION_FILTER_MASK_PARTICIPANT_CHAT_STATE_CHANGED 0b000000000001000000000000
797 #define MAP_NOTIFICATION_FILTER_MASK_MESSAGE_EXTENDED_DATA_CHANGED 0b000000000010000000000000
798 #define MAP_NOTIFICATION_FILTER_MASK_MESSAGE_REMOVED 0b000000000100000000000000
799 
800 // Api: MapClient::GetSupportedFeatures action complete param mask defines
801 // Map Supported features mask
802 #define MAP_SUPPORTED_FEATURES_NOTIFICATION_REGISTRATION 0x00000001
803 #define MAP_SUPPORTED_FEATURES_NOTIFICATION_FEATURE 0x00000002
804 #define MAP_SUPPORTED_FEATURES_BROWSING 0x00000004
805 #define MAP_SUPPORTED_FEATURES_UPLOADING 0x00000008
806 #define MAP_SUPPORTED_FEATURES_DELETE_FEATURE 0x00000010
807 #define MAP_SUPPORTED_FEATURES_INSTANCE_INFO_FEATURE 0x00000020
808 #define MAP_SUPPORTED_FEATURES_EVENT_REPORT_1_1 0x00000040
809 #define MAP_SUPPORTED_FEATURES_EVENT_REPORT_1_2 0x00000080
810 #define MAP_SUPPORTED_FEATURES_MESSAGE_FORMAT_1_1 0x00000100
811 #define MAP_SUPPORTED_FEATURES_MESSAGELIST_FORMAT_1_1 0x00000200
812 #define MAP_SUPPORTED_FEATURES_PERSISTENT_MESSAGE_HANDLE 0x00000400
813 #define MAP_SUPPORTED_FEATURES_DATABASE_IDENTIFIER 0x00000800
814 #define MAP_SUPPORTED_FEATURES_FOLDOR_VERSION_COUNTER 0x00001000
815 #define MAP_SUPPORTED_FEATURES_CONVERSATION_VERSION_COUNTER 0x00002000
816 #define MAP_SUPPORTED_FEATURES_PARTICIPANT_PRESENCE_CHANGE_NOTIFICATION 0x00004000
817 #define MAP_SUPPORTED_FEATURES_PARTICIPANT_CHAT_STATE_CHANGE_NOTIFICATION 0x00008000
818 #define MAP_SUPPORTED_FEATURES_PBAP_CONTACT_CROSS_REFERENCE 0x00010000
819 #define MAP_SUPPORTED_FEATURES_NOTIFICATION_FILTER 0x00020000
820 #define MAP_SUPPORTED_FEATURES_UTC_OFFSET_TIMESTAMP_FORMAT 0x00040000
821 #define MAP_SUPPORTED_FEATURES_MAPSUPPORTED_FEATURES 0x00080000
822 #define MAP_SUPPORTED_FEATURES_CONVERSATION_LISTING 0x00100000
823 #define MAP_SUPPORTED_FEATURES_OWNER_STATUS 0x00200000
824 #define MAP_SUPPORTED_FEATURES_MESSAGE_FORWARDING 0x00400000
825 
826 /*********************************************
827  *
828  * AVRCP Macro Define
829  *
830  *********************************************/
831 
832 // The default label. The valid range is 0x00 ~ 0x0F.
833 #define AVRC_DEFAULT_LABEL (0x00)
834 // The invalid label.
835 #define AVRC_INVALID_LABEL (0x10)
836 
837 /**
838  * @brief This enumeration declares the types of the methods.
839  *
840  * @since 6
841  */
842 enum AvrcCtActionType : uint8_t {
843     AVRC_ACTION_TYPE_INVALID = 0x00,
844     AVRC_ACTION_TYPE_PRESS_BUTTON,
845     AVRC_ACTION_TYPE_RELEASE_BUTTON,
846     AVRC_ACTION_TYPE_SET_ADDRESSED_PLAYER,
847     AVRC_ACTION_TYPE_SET_BROWSED_PLAYER,
848     AVRC_ACTION_TYPE_GET_CAPABILITIES,
849     AVRC_ACTION_TYPE_GET_PLAYER_APP_SETTING_ATTRIBUTES,
850     AVRC_ACTION_TYPE_GET_PLAYER_APP_SETTING_VALUES,
851     AVRC_ACTION_TYPE_GET_PLAYER_APP_SETTING_CURRENT_VALUE,
852     AVRC_ACTION_TYPE_SET_PLAYER_APP_SETTING_CURRENT_VALUE,
853     AVRC_ACTION_TYPE_GET_PLAYER_APP_SETTING_ATTRIBUTE_TEXT,
854     AVRC_ACTION_TYPE_GET_PLAYER_APP_SETTING_VALUE_TEXT,
855     AVRC_ACTION_TYPE_GET_ELEMENT_ATTRIBUTES,
856     AVRC_ACTION_TYPE_GET_PLAY_STATUS,
857     AVRC_ACTION_TYPE_PLAY_ITEM,
858     AVRC_ACTION_TYPE_ADD_TO_NOW_PLAYING,
859     AVRC_ACTION_TYPE_CHANGE_PATH,
860     AVRC_ACTION_TYPE_GET_FOLDER_ITEMS,
861     AVRC_ACTION_TYPE_GET_ITEM_ATTRIBUTES,
862     AVRC_ACTION_TYPE_GET_TOTAL_NUMBER_OF_ITEMS,
863     AVRC_ACTION_TYPE_SET_ABSOLUTE_VOLUME,
864     AVRC_ACTION_TYPE_NOTIFY_PLAYBACK_STATUS_CHANGED,
865     AVRC_ACTION_TYPE_NOTIFY_TRACK_CHANGED,
866     AVRC_ACTION_TYPE_NOTIFY_TRACK_REACHED_END,
867     AVRC_ACTION_TYPE_NOTIFY_TRACK_REACHED_START,
868     AVRC_ACTION_TYPE_NOTIFY_PLAYBACK_POS_CHANGED,
869     AVRC_ACTION_TYPE_NOTIFY_PLAYER_APPLICATION_SETTING_CHANGED,
870     AVRC_ACTION_TYPE_NOTIFY_NOW_PLAYING_CONTENT_CHANGED,
871     AVRC_ACTION_TYPE_NOTIFY_AVAILABLE_PLAYERS_CHANGED,
872     AVRC_ACTION_TYPE_NOTIFY_ADDRESSED_PLAYER_CHANGED,
873     AVRC_ACTION_TYPE_NOTIFY_UIDS_CHANGED,
874     AVRC_ACTION_TYPE_NOTIFY_VOLUME_CHANGED,
875     AVRC_ACTION_TYPE_GET_MEDIA_PLAYER_LIST,
876 };
877 
878 /**
879  * @brief This enumeration declares the values of the supported button.
880  * @see AV/C Panel Subunit Specification 1.23 Section 9.4 PASS THROUGH control command Table 9.21 - Operation id List
881  *
882  * @since 6
883  */
884 enum AvrcKeyOperation : uint8_t {
885     AVRC_KEY_OPERATION_VOLUME_UP = 0x41,     // Volume up.
886     AVRC_KEY_OPERATION_VOLUME_DOWN = 0x42,   // Volume down.
887     AVRC_KEY_OPERATION_MUTE = 0x43,          // Mute.
888     AVRC_KEY_OPERATION_PLAY = 0x44,          // Play.
889     AVRC_KEY_OPERATION_STOP = 0x45,          // Stop.
890     AVRC_KEY_OPERATION_PAUSE = 0x46,         // Pause.
891     AVRC_KEY_OPERATION_REWIND = 0x48,        // Rewind.
892     AVRC_KEY_OPERATION_FAST_FORWARD = 0x49,  // Fast forward.
893     AVRC_KEY_OPERATION_FORWARD = 0x4B,       // Forward.
894     AVRC_KEY_OPERATION_BACKWARD = 0x4C,      // Backward.
895     AVRC_KEY_OPERATION_INVALID = 0x7F,
896 };
897 
898 /**
899  * @brief This enumeration declares the values of the key state.
900  *
901  * @since 6
902  */
903 enum AvrcTgKeyState : uint8_t {
904     AVRC_KEY_STATE_PRESS = 0x00,    // The key is pushed.
905     AVRC_KEY_STATE_RELEASE = 0x01,  // The key is released.
906     AVRC_KEY_STATE_INVALID,         // Invalid key state.
907 };
908 
909 /**
910  * @brief This enumeration declares the values of the player application setting attributes.
911  * @see Audio/Video Remote Control 1.6.2 Section 27 Appendix F: list of defined player application settings and values.
912  *
913  * @since 6
914  */
915 enum AvrcPlayerAttribute : uint8_t {
916     AVRC_PLAYER_ATTRIBUTE_ILLEGAL = 0x00,       // Illegal , Should not be used.
917     AVRC_PLAYER_ATTRIBUTE_EQUALIZER = 0x01,     // Equalizer ON / OFF status.
918     AVRC_PLAYER_ATTRIBUTE_REPEAT = 0x02,        // Repeat Mode status.
919     AVRC_PLAYER_ATTRIBUTE_SHUFFLE = 0x03,       // Shuffle ON/OFF status.
920     AVRC_PLAYER_ATTRIBUTE_SCAN = 0x04,          // Scan ON/OFF status.
921     AVRC_PLAYER_ATTRIBUTE_RESERVED_MIN = 0x05,  // Reserved for future use. 0x05 - 0x7F
922     AVRC_PLAYER_ATTRIBUTE_RESERVED_MAX = 0x7F,  // Reserved for future use. 0x05 - 0x7F
923     AVRC_PLAYER_ATTRIBUTE_EXTENSION = 0x80,     // Provided for TG driven static media player menu extension.
924                                                 // Range: 0x80 - 0xFF
925 };
926 
927 /**
928  * @brief This enumeration declares the values of the Equalizer ON/OFF status.
929  * @see Audio/Video Remote Control 1.6.2 Section 27 Appendix F: list of defined player application settings and values.
930  *
931  * @since 6
932  */
933 enum AvrcEqualizer : uint8_t {
934     AVRC_EQUALIZER_OFF = 0x01,
935     AVRC_EQUALIZER_ON,
936     AVRC_EQUALIZER_INVALID,
937 };
938 
939 /**
940  * @brief This enumeration declares the values of the Repeat Mode status.
941  * @see Audio/Video Remote Control 1.6.2 Section 27 Appendix F: list of defined player application settings and values.
942  *
943  * @since 6
944  */
945 enum AvrcRepeat : uint8_t {
946     AVRC_REPEAT_OFF = 0x01,
947     AVRC_REPEAT_SINGLE_TRACK,
948     AVRC_REPEAT_ALL_TRACK,
949     AVRC_REPEAT_GROUP,
950     AVRC_REPEAT_INVALID,
951 };
952 
953 /**
954  * @brief This enumeration declares the values of the Shuffle ON/OFF status.
955  * @see Audio/Video Remote Control 1.6.2 Section 27 Appendix F: list of defined player application settings and values.
956  *
957  * @since 6
958  */
959 enum AvrcShuffle : uint8_t {
960     AVRC_SHUFFLE_OFF = 0x01,
961     AVRC_SHUFFLE_ALL_TRACKS,
962     AVRC_SHUFFLE_GROUP,
963     AVRC_SHUFFLE_INVALID,
964 };
965 
966 /**
967  * @brief This enumeration declares the values of the Scan ON/OFF status.
968  * @see Audio/Video Remote Control 1.6.2 Section 27 Appendix F: list of defined player application settings and values.
969  *
970  * @since 6
971  */
972 enum AvrcScan : uint8_t {
973     AVRC_SCAN_OFF = 0x01,
974     AVRC_SCAN_ALL_TRACKS,
975     AVRC_SCAN_GROUP,
976     AVRC_SCAN_INVALID,
977 };
978 
979 /**
980  * @brief This enumeration declares the values of the play status.
981  *
982  * @since 6
983  */
984 enum AvrcPlayStatus : uint32_t {
985     AVRC_PLAY_STATUS_STOPPED = 0x00,                      // Stopped.
986     AVRC_PLAY_STATUS_PLAYING,                             // Playing.
987     AVRC_PLAY_STATUS_PAUSED,                              // Paused.
988     AVRC_PLAY_STATUS_FWD_SEEK,                            // Fwd seek.
989     AVRC_PLAY_STATUS_REV_SEEK,                            // Rev seek.
990     AVRC_PLAY_STATUS_RESERVED_MIN = 0x05,                 // Reserved for future use.
991     AVRC_PLAY_STATUS_RESERVED_MAX = 0xFE,                 // Reserved for future use.
992     AVRC_PLAY_STATUS_ERROR = 0xFF,                        // Error.
993     AVRC_PLAY_STATUS_INVALID_SONG_LENGTH = 0xFFFFFFFF,    // If TG does not support, then TG shall return 0xFFFFFFFF.
994     AVRC_PLAY_STATUS_INVALID_SONG_POSITION = 0xFFFFFFFF,  // If TG does not support, then TG shall return 0xFFFFFFFF.
995 };
996 
997 /**
998  * @brief This enumeration declares the values of folder direction.
999  *
1000  * @since 6
1001  */
1002 enum AvrcFolderDirection : uint8_t {
1003     AVRC_FOLDER_DIRECTION_UP = 0x00,       // Folder up.
1004     AVRC_FOLDER_DIRECTION_DOWN = 0x01,     // Folder down.
1005     AVRC_FOLDER_DIRECTION_INVALID = 0x02,  // Reserved.
1006 };
1007 
1008 /**
1009  * @brief This enumeration declares the values of the scope in which the UID of the media element item or folder item.
1010  * @see Audio/Video Remote Control 1.6.2 Section 6.10.1 Scope.
1011  *
1012  * @since 6
1013  */
1014 enum AvrcMediaScope : uint8_t {
1015     AVRC_MEDIA_SCOPE_PLAYER_LIST = 0x00,   // Contains all available media players.
1016     AVRC_MEDIA_SCOPE_VIRTUAL_FILE_SYSTEM,  // Contains the media content of the browsed player.
1017     AVRC_MEDIA_SCOPE_SEARCH,               // The results of a search operation on the browsed player.
1018     AVRC_MEDIA_SCOPE_NOW_PLAYING,          // The Now Playing list (or queue) of the addressed player.
1019     AVRC_MEDIA_SCOPE_INVALID,
1020 };
1021 
1022 /**
1023  * @brief This enumeration declares the values of the browsable items.
1024  * @see Audio/Video Remote Control 1.6.2 Section 6.10.2 Browsable items.
1025  *
1026  * @since 6
1027  */
1028 enum AvrcMediaType : uint8_t {
1029     AVRC_MEDIA_TYPE_MEDIA_PLAYER_ITEM = 0x01,
1030     AVRC_MEDIA_TYPE_FOLDER_ITEM,
1031     AVRC_MEDIA_TYPE_MEDIA_ELEMENT_ITEM,
1032     AVRC_MEDIA_TYPE_INVALID,
1033 };
1034 
1035 /**
1036  * @brief This enumeration declares the values of the attribute count.
1037  * @see Audio/Video Remote Control 1.6.2 Section 6.10.4.2 GetFolderItems - Attribute Count.
1038  *
1039  * @since 6
1040  */
1041 enum AvrcAttributeCount {
1042     AVRC_ATTRIBUTE_COUNT_ALL = 0x00,
1043     AVRC_ATTRIBUTE_COUNT_NO = 0xFF,
1044 };
1045 
1046 /**
1047  * @brief This enumeration declares the values of the media attribute. These values are used to uniquely identify media
1048  * information.
1049  * @see Audio/Video Remote Control 1.6.2 Section 26 Appendix E: list of media attributes.
1050  *
1051  * @since 6
1052  */
1053 enum AvrcMediaAttribute : uint8_t {
1054     // Not used.
1055     AVRC_MEDIA_ATTRIBUTE_NOT_USED = 0x00,
1056     // Text field representing the title, song name or content description coded per specified character set.
1057     AVRC_MEDIA_ATTRIBUTE_TITLE,
1058     // Text field representing artist(s), performer(s) or group coded per specified character set.
1059     AVRC_MEDIA_ATTRIBUTE_ARTIST_NAME,
1060     // Text field representing the title of the recording(source) from which the audio in the file is taken.
1061     AVRC_MEDIA_ATTRIBUTE_ALBUM_NAME,
1062     // Numeric ASCII string containing the order number of the audio - file on its original recording.O 0x5 Total
1063     // Number of Tracks.
1064     AVRC_MEDIA_ATTRIBUTE_TRACK_NUMBER,
1065     // Numeric ASCII string containing the total number of tracks or elements on the original recording.
1066     AVRC_MEDIA_ATTRIBUTE_TOTAL_NUMBER_OF_TRACKS,
1067     // Text field representing the category of the composition characterized by a particular style.
1068     AVRC_MEDIA_ATTRIBUTE_GENRE,
1069     // Numeric ASCII string containing the length of the audio file in milliseconds.(E.g .02 : 30 = 150000)
1070     AVRC_MEDIA_ATTRIBUTE_PLAYING_TIME,
1071     // BIP Image Handle.
1072     AVRC_MEDIA_ATTRIBUTE_DEFAULT_COVER_ART,
1073     // Reserved for future use.
1074     AVRC_MEDIA_ATTRIBUTE_RESERVED,
1075 };
1076 
1077 /**
1078  * @brief This enumeration declares the values of the major player type.
1079  * @see Audio/Video Remote Control 1.6.2 Section 6.10.2.1 Media player item - Major Player Type
1080  *
1081  * @since 6
1082  */
1083 enum AvrcMediaMajorPlayerType : uint8_t {
1084     AVRC_MEDIA_MAJOR_PLAYER_TYPE_AUDIO = 0x01,               // Audio.
1085     AVRC_MEDIA_MAJOR_PLAYER_TYPE_VIDEO = 0x02,               // Video.
1086     AVRC_MEDIA_MAJOR_PLAYER_TYPE_BROADCASTING_AUDIO = 0x04,  // Broadcasting Audio.
1087     AVRC_MEDIA_MAJOR_PLAYER_TYPE_BROADCASTING_VIDEO = 0x08,  // Broadcasting Video.
1088     AVRC_MEDIA_MAJOR_PLAYER_TYPE_RESERVED = 0x10             // Reserved for future use.
1089 };
1090 
1091 /**
1092  * @brief This enumeration declares the values of the major player type.
1093  * @see Audio/Video Remote Control 1.6.2 Section 6.10.2.1 Media player item - Player Sub Type
1094  *
1095  * @since 6
1096  */
1097 enum AvrcMediaPlayerSubType : uint32_t {
1098     AVRC_MEDIA_PLAYER_SUB_TYPE_AUDIO_BOOK = 0x00000001,  // Audio Book.
1099     AVRC_MEDIA_PLAYER_SUB_TYPE_PODCAST = 0x00000002,     // Pod cast.
1100     AVRC_MEDIA_PLAYER_SUB_TYPE_RESERVED = 0x00000004     // Reserved for future use.
1101 };
1102 
1103 /**
1104  * @brief This enumeration declares the values of character set.
1105  *
1106  * @since 6
1107  */
1108 enum AvrcMediaCharacterSet : uint16_t {
1109     AVRC_MEDIA_CHARACTER_SET_UTF8 = 0x006A,  // The value of UTF-8 as defined in IANA character set document.
1110 };
1111 
1112 /**
1113  * @brief This enumeration declares the values of the folder type.
1114  * @see Audio/Video Remote Control 1.6.2 Section 6.10.2.2 Folder item - Folder Type
1115  *
1116  * @since 6
1117  */
1118 enum AvrcMediaFolderType : uint8_t {
1119     AVRC_MEDIA_FOLDER_TYPE_MIXED = 0x00,  // Mixed.
1120     AVRC_MEDIA_FOLDER_TYPE_TITLES,        // Titles.
1121     AVRC_MEDIA_FOLDER_TYPE_ALBUMS,        // Albums.
1122     AVRC_MEDIA_FOLDER_TYPE_ARTISTS,       // Artists.
1123     AVRC_MEDIA_FOLDER_TYPE_GENRES,        // Genres.
1124     AVRC_MEDIA_FOLDER_TYPE_PLAY_LISTS,    // Play lists.
1125     AVRC_MEDIA_FOLDER_TYPE_YEARS,         // Years.
1126     AVRC_MEDIA_FOLDER_TYPE_RESERVED,      // Reserved for future use.
1127 };
1128 
1129 /**
1130  * @brief This enumeration declares the values of the is playable.
1131  * @see Audio/Video Remote Control 1.6.2 Section 6.10.2.2 Folder item - Is Playable
1132  *
1133  * @since 6
1134  */
1135 enum AvrcMediaFolderPlayable : uint8_t {
1136     // The folder cannot be played. This means that the folder UID shall not be passed to either the PlayItem or
1137     // AddToNowPlaying commands.
1138     AVRC_MEDIA_FOLDER_PLAYABLE_NO = 0x00,
1139     // The folder can be played. The folder UID may be passed to the PlayItem and AddToNowPlaying(if supported)
1140     // commands. The media player behavior on playing a folder should be same as on the local user interface.
1141     AVRC_MEDIA_FOLDER_PLAYABLE_YES,
1142     AVRC_MEDIA_FOLDER_PLAYABLE_RESERVED,  // Reserved for future use.
1143 };
1144 
1145 /**
1146  * @brief This enumeration declares the values of the media type.
1147  * @see Audio/Video Remote Control 1.6.2 Section 6.10.2.3 Media element item - Media Type
1148  *
1149  * @since 6
1150  */
1151 enum AvrcMediaElementType : uint8_t {
1152     AVRC_MEDIA_ELEMENT_TYPE_AUDIO = 0x00,  // Audio.
1153     AVRC_MEDIA_ELEMENT_TYPE_VIDEO,         // Video.
1154     AVRC_MEDIA_ELEMENT_TYPE_RESERVED,      // Reserved for future use.
1155 };
1156 
1157 /**
1158  * @brief This enumeration declares the values of the media type.
1159  *
1160  * @details An Absolute Volume is represented in one octet. The top bit (bit 7) is reserved for future addition (RFA).
1161  * The volume is specified as a percentage of the maximum. The value 0x0 corresponds to 0%. The value 0x7F corresponds
1162  * to 100%. Scaling should be applied to achieve values between these two. The existence of this scale does not impose
1163  * any restriction on the granularity of the volume control scale on the TG.
1164  * @see Audio/Video Remote Control 1.6.2 Section 6.13.1 Absolute Volume
1165  *
1166  * @since 6
1167  */
1168 enum AvrcAbsoluteVolume : uint8_t {
1169     AVRC_ABSOLUTE_VOLUME_PERCENTAGE_0 = 0x00,    // 0%
1170     AVRC_ABSOLUTE_VOLUME_PERCENTAGE_100 = 0x7F,  // 100%
1171     AVRC_ABSOLUTE_VOLUME_INVALID = 0x80,
1172 };
1173 
1174 enum DeviceAbsVolumeAbility {
1175     DEVICE_ABSVOL_CLOSE = 0,
1176     DEVICE_ABSVOL_OPEN = 1,
1177     DEVICE_ABSVOL_UNSUPPORT = 2,
1178     DEVICE_ABSVOL_BUTT
1179 };
1180 
1181 /**
1182  * @brief This enumeration declares the values of the "EVENT ID".
1183  * @see Audio/Video Remote Control 1.6.2 Section 28 Appendix H: list of defined notification events.
1184  *
1185  * @since 6
1186  */
1187 enum AvrcEventId : uint8_t {
1188     AVRC_EVENT_ID_PLAYBACK_STATUS_CHANGED = 0x01,  // Change in playback status of the current track.
1189     AVRC_EVENT_ID_TRACK_CHANGED,                   // Change of current track.
1190     AVRC_EVENT_ID_TRACK_REACHED_END,               // Reached end of a track.
1191     AVRC_EVENT_ID_TRACK_REACHED_START,             // Reached start of a track.
1192     // Change in playback position. Returned after the specified playback notification change notification interval.
1193     AVRC_EVENT_ID_PLAYBACK_POS_CHANGED,
1194     AVRC_EVENT_ID_BATT_STATUS_CHANGED,                 // Change in battery status.
1195     AVRC_EVENT_ID_SYSTEM_STATUS_CHANGED,               // Change in system status.
1196     AVRC_EVENT_ID_PLAYER_APPLICATION_SETTING_CHANGED,  // Change in player application setting.
1197     AVRC_EVENT_ID_NOW_PLAYING_CONTENT_CHANGED,         // The content of the Now Playing list has changed.
1198     AVRC_EVENT_ID_AVAILABLE_PLAYERS_CHANGED,           // The available players have changed
1199     AVRC_EVENT_ID_ADDRESSED_PLAYER_CHANGED,            // The Addressed Player has been changed.
1200     AVRC_EVENT_ID_UIDS_CHANGED,                        // The UIDs have changed.
1201     AVRC_EVENT_ID_VOLUME_CHANGED,                      // The volume has been changed locally on the TG.
1202     AVRC_EVENT_ID_RESERVED = 0x0E,
1203 };
1204 
1205 /**
1206  * @bUnique identifier to identify an element on TG
1207  *
1208  * @since 6
1209  */
1210 enum AvrcElementIdentifier : uint64_t {
1211     AVRC_ELEMENT_ATTRIBUTES_IDENTIFIER_PLAYING =
1212         0x0000000000000000,  // attribute information for the element which is current track in the TG device.
1213     AVRC_ELEMENT_ATTRIBUTES_IDENTIFIER_RESERVED =
1214         0x0000000000000001,  // All other values other than 0x0 are currently reserved.
1215 };
1216 
1217 /**
1218  * @brief This enumeration declares the allowed values for GetCapabilities Command.
1219  *
1220  * @since 6
1221  */
1222 enum AvrcCapabilityId : uint8_t {
1223     AVRC_CAPABILITY_COMPANYID = 0x02,  // The list of CompanyID supported by TG.
1224     AVRC_CAPABILITY_EVENTID = 0x03,    // EventIDs defined in this specification to be supported by TG.
1225 };
1226 
1227 /**
1228  * @brief This enumeration declares the values of playback interval in seconds.
1229  *
1230  * @since 6
1231  */
1232 enum AvrcPlaybackInterval : uint8_t {
1233     AVRC_PLAYBACK_INTERVAL_1_SEC = 0x01,
1234     AVRC_PLAYBACK_INTERVAL_5_SEC = 0x05,
1235     AVRC_PLAYBACK_INTERVAL_10_SEC = 0x0A,
1236     AVRC_PLAYBACK_INTERVAL_15_SEC = 0x0F,
1237     AVRC_PLAYBACK_INTERVAL_20_SEC = 0x14,
1238     AVRC_PLAYBACK_INTERVAL_25_SEC = 0x19,
1239     AVRC_PLAYBACK_INTERVAL_30_SEC = 0x1E,
1240 };
1241 
1242 /**
1243  * @brief This enumeration declares the error / status code of the vendor dependent command frame and the browsing
1244  * command frame.
1245  *
1246  * @since 6
1247  */
1248 enum AvrcEsCode : uint8_t {
1249     AVRC_ES_CODE_INVALID = 0xFF,  // Reserved.
1250     // Invalid command, sent if TG received a PDU that it did not understand.
1251     AVRC_ES_CODE_INVALID_COMMAND = 0x00,
1252     // Invalid parameter, sent if the TG received a PDU with a parameter ID that it did not understand. This error code
1253     // applies to the following identifiers :
1254     // PDU ID.
1255     // Capability ID.
1256     // Event ID.
1257     // Player Application Setting Attribute ID.
1258     // Player Application Setting Value ID.
1259     // Element Attribute ID.
1260     AVRC_ES_CODE_INVALID_PARAMETER = 0x01,
1261     // Parameter content error.Sent if the parameter ID is understood, but content is wrong or corrupted.
1262     AVRC_ES_CODE_PARAMETER_CONTENT_ERROR = 0x02,
1263     // Internal Error - sent if there are error conditions not covered by a more specific error code.
1264     AVRC_ES_CODE_INTERNAL_ERROR = 0x03,
1265     // Operation completed without error.This is the status that should be returned if the operation was successful.
1266     AVRC_ES_CODE_NO_ERROR = 0x04,
1267     // UID Changed - The UIDs on the device have changed.
1268     AVRC_ES_CODE_UID_CHANGED = 0x05,
1269     // Reserved.
1270     AVRC_ES_CODE_RESERVED = 0x06,
1271     // Invalid Direction - The Direction parameter is invalid.
1272     AVRC_ES_CODE_INVALID_DIRECTION = 0x07,
1273     // Not a Directory - The UID provided does not refer to a folder item.
1274     AVRC_ES_CODE_NOT_A_DIRECTORY = 0x08,
1275     // Does Not Exist - The UID provided does not refer to any currently valid item.
1276     AVRC_ES_CODE_DOES_NOT_EXIST = 0x09,
1277     // Invalid Scope - The scope parameter is invalid.
1278     AVRC_ES_CODE_INVALID_SCOPE = 0x0A,
1279     // Range Out of Bounds - The start of range provided is not valid.
1280     AVRC_ES_CODE_RANGE_OUT_OF_BOUNDS = 0x0B,
1281     // Folder Item is not playable - The UID provided refers to a folder item which cannot be handled by this media
1282     // player.
1283     AVRC_ES_CODE_FOLDER_ITEM_IS_NOT_PLAYABLE = 0x0C,
1284     // Media in Use - The media is not able to be used for this operation at this time.
1285     AVRC_ES_CODE_MEDIA_IN_USE = 0x0D,
1286     // Now Playing List Full - No more items can be added to the Now Playing List.
1287     AVRC_ES_CODE_NOW_PLAYING_LIST_FULL = 0x0E,
1288     // Search Not Supported - The Browsed Media Player does not support search.
1289     AVRC_ES_CODE_SEARCH_NOT_SUPPORTED = 0x0F,
1290     // Search in Progress - A search operation is already in progress.
1291     AVRC_ES_CODE_SEARCH_IN_PROGRESS = 0x10,
1292     // Invalid Player Id - The specified Player Id does not refer to a valid player.
1293     AVRC_ES_CODE_INVALID_PLAYER_ID = 0x11,
1294     // Player Not Browsable - The Player Id supplied refers to a Media Player which does not support browsing.
1295     AVRC_ES_CODE_PLAYER_NOT_BROWSABLE = 0x12,
1296     // Player Not Addressed.The Player Id supplied refers to a player which is not currently addressed, and the command
1297     // is not able to be performed if the player is not set as addressed.
1298     AVRC_ES_CODE_PLAYER_NOT_ADDRESSED = 0x13,
1299     // No valid Search Results - The Search result list does not contain valid entries, e.g.after being invalidated due
1300     // to change of browsed player.
1301     AVRC_ES_CODE_NO_VALID_SEARCH_RESULTS = 0x14,
1302     // No available players.
1303     AVRC_ES_CODE_NO_AVAILABLE_PLAYERS = 0x15,
1304     // Addressed Player Changed.
1305     AVRC_ES_CODE_ADDRESSED_PLAYER_CHANGED = 0x16,
1306 
1307     // User custom error code.
1308     AVRC_ES_CODE_NOTIFICATION_CHANGED = 0xFF,
1309 };
1310 
1311 /*********************************************
1312  *
1313  * HFP Definitions
1314  *
1315  *********************************************/
1316 /**
1317  * @brief sco connect state define
1318  * use to notify sco connection observers.
1319  */
1320 enum class HfpScoConnectState : int { SCO_DISCONNECTED = 3, SCO_CONNECTING, SCO_DISCONNECTING, SCO_CONNECTED };
1321 
1322 /*********************************************
1323  *
1324  * A2DP Definitions
1325  *
1326  *********************************************/
1327 
1328 /**
1329  * @brief a2dp optional codec support state define
1330  *
1331  * @since 6
1332  */
1333 enum A2DP_OPTIONAL_SUPPORT_STATE {
1334     A2DP_OPTIONAL_NOT_SUPPORT,
1335     A2DP_OPTIONAL_SUPPORT,
1336     A2DP_OPTIONAL_SUPPORT_UNKNOWN,
1337 };
1338 
1339 /**
1340  * @brief a2dp optional codec enable state define
1341  *
1342  * @since 6
1343  */
1344 enum A2DP_OPTIONAL_ENABLE_STATE { A2DP_OPTIONAL_DISABLE, A2DP_OPTIONAL_ENABLE, A2DP_OPTIONAL_ENABLE_UNKNOWN };
1345 
1346 /**
1347  * @brief a2dp playing state define
1348  *
1349  * @since 6
1350  */
1351 enum A2DP_PLAYING_STATE { A2DP_NOT_PLAYING, A2DP_IS_PLAYING };
1352 
1353 /**
1354  * @brief A2dp codec type enum.
1355  *
1356  * @since 6
1357 
1358  */
1359 enum A2dpUserCodecType : uint8_t {
1360     A2DP_CODEC_TYPE_SBC_USER = 0,
1361     A2DP_CODEC_TYPE_MPEG1_USER = 0x01,
1362     A2DP_CODEC_TYPE_AAC_USER = 0x01 << 1,
1363     A2DP_CODEC_TYPE_ATRAC_USER = 0x01 << 2,
1364     A2DP_CODEC_TYPE_L2HCV2_USER = 0x0A,
1365     A2DP_CODEC_TYPE_L2HCST_USER = 0x0B,
1366     A2DP_CODEC_TYPE_LDAC_USER = 0x10,
1367     A2DP_CODEC_TYPE_NONA2DP_USER = 0xFF
1368 };
1369 
1370 /**
1371  * @brief A2dp codec priority enum.
1372  *
1373  * @since 6
1374  */
1375 enum A2dpUserCodecPriority : uint32_t {
1376     A2DP_CODEC_PRIORITY_DISABLED_USER = 0,
1377     A2DP_CODEC_PRIORITY_DEFAULT_USER,
1378     A2DP_CODEC_PRIORITY_SBC_USER = 1001,
1379     A2DP_CODEC_PRIORITY_AAC_USER = 2001,
1380     A2DP_CODEC_PRIORITY_LDAC_USER = 5001,
1381     A2DP_CODEC_PRIORITY_L2HCST_USER = 8000,
1382     A2DP_CODEC_PRIORITY_L2HCV2_USER = 8001,
1383     A2DP_CODEC_PRIORITY_HIGHEST_USER = 1000 * 1000,
1384 };
1385 
1386 /**
1387  * @brief A2dp codec sample rate enum.
1388  *
1389  * @since 6
1390  */
1391 enum A2dpUserCodecSampleRate : uint32_t {
1392     A2DP_SAMPLE_RATE_NONE_USER = 0x0,
1393     A2DP_SBC_SAMPLE_RATE_48000_USER = 0x1 << 4, /* octet0 b4 */
1394     A2DP_SBC_SAMPLE_RATE_44100_USER = 0x1 << 5, /* octet0 b5 */
1395     A2DP_SBC_SAMPLE_RATE_32000_USER = 0x1 << 6, /* octet0 b6 */
1396     A2DP_SBC_SAMPLE_RATE_16000_USER = 0x1 << 7, /* octet0 b7 */
1397     A2DP_SBC_SAMPLE_RATE_MSK_USER = 0xF0,
1398     A2DP_AAC_SAMPLE_RATE_OCTET1_44100_USER = 0x01,
1399     A2DP_AAC_SAMPLE_RATE_OCTET1_32000_USER = 0x01 << 1,
1400     A2DP_AAC_SAMPLE_RATE_OCTET1_24000_USER = 0x01 << 2,
1401     A2DP_AAC_SAMPLE_RATE_OCTET1_22050_USER = 0x01 << 3,
1402     A2DP_AAC_SAMPLE_RATE_OCTET1_16000_USER = 0x01 << 4,
1403     A2DP_AAC_SAMPLE_RATE_OCTET1_12000_USER = 0x01 << 5,
1404     A2DP_AAC_SAMPLE_RATE_OCTET1_11025_USER = 0x01 << 6,
1405     A2DP_AAC_SAMPLE_RATE_OCTET1_8000_USER = 0x01 << 7,
1406     A2DP_AAC_SAMPLE_RATE_OCTET1_MSK_USER = 0xFF,
1407     A2DP_AAC_SAMPLE_RATE_OCTET2_96000_USER = 0x01 << 12,
1408     A2DP_AAC_SAMPLE_RATE_OCTET2_88200_USER = 0x01 << 13,
1409     A2DP_AAC_SAMPLE_RATE_OCTET2_64000_USER = 0x01 << 14,
1410     A2DP_AAC_SAMPLE_RATE_OCTET2_48000_USER = 0x01 << 15,
1411     A2DP_AAC_SAMPLE_RATE_OCTET2_MSK_USER = 0xF0,
1412     A2DP_L2HCV2_SAMPLE_RATE_48000_USER = 0x01 << 1,
1413     A2DP_L2HCV2_SAMPLE_RATE_96000_USER = 0x01 << 3,
1414     A2DP_L2HCV2_SAMPLE_RATE_ALL_MSK_USER = 0x0A,
1415 };
1416 
1417 /**
1418  * @brief A2dp codec channel mode enum.
1419  *
1420  * @since 6
1421  */
1422 enum A2dpUserCodecChannelMode : uint8_t {
1423     A2DP_CHANNEL_MODE_NONE_USER = 0x0,
1424     A2DP_SBC_CHANNEL_MODE_JOINT_STEREO_USER = 0x1, /* octet0 b0 */
1425     A2DP_SBC_CHANNEL_MODE_STEREO_USER = 0x1 << 1,  /* octet0 b1 */
1426     A2DP_SBC_CHANNEL_MODE_DUAL_USER = 0x1 << 2,    /* octet0 b2 */
1427     A2DP_SBC_CHANNEL_MODE_MONO_USER = 0x1 << 3,    /* octet0 b3 */
1428     A2DP_SBC_CHANNEL_MODE_MONO_STEREO_USER = 0x0A,
1429     A2DP_SBC_CHANNEL_MODE_MSK_USER = 0x0F,
1430     A2DP_AAC_CHANNEL_MODE_OCTET2_DOUBLE_USER = 0x01 << 2, /* octet2 b2 */
1431     A2DP_AAC_CHANNEL_MODE_OCTET2_SINGLE_USER = 0x01 << 3, /* octet2 b3 */
1432     A2DP_AAC_CHANNEL_MODE_OCTET2_MSK_USER = 0x0C,
1433 };
1434 
1435 /**
1436  * @brief A2dp codec bits per sample enum.
1437  *
1438  * @since 6
1439  */
1440 enum A2dpUserCodecBitsPerSample : uint8_t {
1441     A2DP_SAMPLE_BITS_NONE_USER = 0x0,
1442     A2DP_SAMPLE_BITS_16_USER = 0x1 << 0,
1443     A2DP_SAMPLE_BITS_24_USER = 0x1 << 1,
1444     A2DP_SAMPLE_BITS_32_USER = 0x1 << 2,
1445     A2DP_SAMPLE_BITS_MSK_USER = 0x06,
1446     A2DP_AAC_SAMPLE_BITS_OCTET3_BIT0_USER = 0x01,      /* octet3 b0 */
1447     A2DP_AAC_SAMPLE_BITS_OCTET3_BIT1_USER = 0x01 << 1, /* octet3 b1 */
1448     A2DP_AAC_SAMPLE_BITS_OCTET3_BIT2_USER = 0x01 << 2, /* octet3 b2 */
1449     A2DP_AAC_SAMPLE_BITS_OCTET3_BIT3_USER = 0x01 << 3, /* octet3 b3 */
1450     A2DP_AAC_SAMPLE_BITS_OCTET3_BIT4_USER = 0x01 << 4, /* octet3 b4 */
1451     A2DP_AAC_SAMPLE_BITS_OCTET3_BIT5_USER = 0x01 << 5, /* octet3 b5 */
1452     A2DP_AAC_SAMPLE_BITS_OCTET3_BIT6_USER = 0x01 << 6, /* octet3 b6 */
1453     A2DP_AAC_SAMPLE_BITS_OCTET4_BIT0_USER = 0x01,      /* octet4 b0 */
1454     A2DP_AAC_SAMPLE_BITS_OCTET4_BIT1_USER = 0x01 << 1, /* octet4 b1 */
1455     A2DP_AAC_SAMPLE_BITS_OCTET4_BIT2_USER = 0x01 << 2, /* octet4 b2 */
1456     A2DP_AAC_SAMPLE_BITS_OCTET4_BIT3_USER = 0x01 << 3, /* octet4 b3 */
1457     A2DP_AAC_SAMPLE_BITS_OCTET4_BIT4_USER = 0x01 << 4, /* octet4 b4 */
1458     A2DP_AAC_SAMPLE_BITS_OCTET4_BIT5_USER = 0x01 << 5, /* octet4 b5 */
1459     A2DP_AAC_SAMPLE_BITS_OCTET4_BIT6_USER = 0x01 << 6, /* octet4 b6 */
1460     A2DP_AAC_SAMPLE_BITS_OCTET4_BIT7_USER = 0x01 << 7, /* octet4 b6 */
1461     A2DP_AAC_SAMPLE_BITS_OCTET5_BIT0_USER = 0x01,      /* octet5 b0 */
1462     A2DP_AAC_SAMPLE_BITS_OCTET5_BIT1_USER = 0x01 << 1, /* octet5 b1 */
1463     A2DP_AAC_SAMPLE_BITS_OCTET5_BIT2_USER = 0x01 << 2, /* octet5 b2 */
1464     A2DP_AAC_SAMPLE_BITS_OCTET5_BIT3_USER = 0x01 << 3, /* octet5 b3 */
1465     A2DP_AAC_SAMPLE_BITS_OCTET5_BIT4_USER = 0x01 << 4, /* octet5 b4 */
1466     A2DP_AAC_SAMPLE_BITS_OCTET5_BIT5_USER = 0x01 << 5, /* octet5 b5 */
1467     A2DP_AAC_SAMPLE_BITS_OCTET5_BIT6_USER = 0x01 << 6, /* octet5 b6 */
1468     A2DP_AAC_SAMPLE_BITS_OCTET5_BIT7_USER = 0x01 << 7, /* octet5 b6 */
1469 };
1470 
1471 /**
1472  * @brief Pbap action Type.
1473  *
1474  * @since 6
1475  */
1476 enum PbapActionType : uint16_t {
1477     PBAP_ACTION_PULLPHONEBOOKSIZE,     // pull phonebooksize
1478     PBAP_ACTION_PULLPHONEBOOK,         // pull phonebook
1479     PBAP_ACTION_SETPHONEBOOK,          // set  phonebook
1480     PBAP_ACTION_PULLVCARDLISTINGSIZE,  // pull vcard listing size
1481     PBAP_ACTION_PULLVCARDLISTING,      // pull vcard listing
1482     PBAP_ACTION_PULLVCARDENTRY,        // pull vcard entry
1483     PBAP_ACTION_ABORT,                 // abort downloading
1484 };
1485 
1486 // PBAP_PHONEBOOK_NAME
1487 #define PBAP_PHONEBOOK_PB u"/telecom/pb.vcf"
1488 #define PBAP_PHONEBOOK_ICH u"/telecom/ich.vcf"
1489 #define PBAP_PHONEBOOK_OCH u"/telecom/och.vcf"
1490 #define PBAP_PHONEBOOK_MCH u"/telecom/mch.vcf"
1491 #define PBAP_PHONEBOOK_CCH u"/telecom/cch.vcf"
1492 #define PBAP_PHONEBOOK_SPD u"/telecom/spd.vcf"
1493 #define PBAP_PHONEBOOK_FAV u"/telecom/fav.vcf"
1494 #define PBAP_PHONEBOOK_PB1 u"/SIM1/telecom/pb.vcf"
1495 #define PBAP_PHONEBOOK_ICH1 u"/SIM1/telecom/ich.vcf"
1496 #define PBAP_PHONEBOOK_OCH1 u"/SIM1/telecom/och.vcf"
1497 #define PBAP_PHONEBOOK_MCH1 u"/SIM1/telecom/mch.vcf"
1498 #define PBAP_PHONEBOOK_CCH1 u"/SIM1/telecom/cch.vcf"
1499 
1500 enum PbapOrderType : uint8_t {
1501     PBAP_ORDER_INDEXED = 0x00,       // indexed order
1502     PBAP_ORDER_ALPHANUMERIC = 0x01,  // alphabetical order
1503     PBAP_ORDER_PHONETIC = 0x02,      // phonetic order
1504 };
1505 
1506 enum PbapFormatType : uint8_t {
1507     PBAP_FORMAT_VCARD2_1 = 0x00,  // vCard Version
1508     PBAP_FORMAT_VCARD3_0 = 0x01,  // vCard Version
1509 };
1510 
1511 // 5.1.4.1 PropertySelector {PropertyMask (64-bit value)}
1512 #define PBAP_PROPERTY_VERSION (1ULL << 0)                // vCard Version
1513 #define PBAP_PROPERTY_FN (1ULL << 1)                     // Formatted Name
1514 #define PBAP_PROPERTY_N (1ULL << 2)                      // Structured Presentation of Name
1515 #define PBAP_PROPERTY_PHOTO (1ULL << 3)                  // Associated Image or Photo
1516 #define PBAP_PROPERTY_BDAY (1ULL << 4)                   // Birthday
1517 #define PBAP_PROPERTY_ADR (1ULL << 5)                    // Delivery Address
1518 #define PBAP_PROPERTY_LABEL (1ULL << 6)                  // Delivery
1519 #define PBAP_PROPERTY_TEL (1ULL << 7)                    // Telephone Number
1520 #define PBAP_PROPERTY_EMAIL (1ULL << 8)                  // Electronic Mail Address
1521 #define PBAP_PROPERTY_MAILER (1ULL << 9)                 // Electronic Mail
1522 #define PBAP_PROPERTY_TZ (1ULL << 10)                    // Time Zone
1523 #define PBAP_PROPERTY_GEO (1ULL << 11)                   // Geographic Position
1524 #define PBAP_PROPERTY_TITLE (1ULL << 12)                 // Job
1525 #define PBAP_PROPERTY_ROLE (1ULL << 13)                  // Role within the Organization
1526 #define PBAP_PROPERTY_LOGO (1ULL << 14)                  // Organization Logo
1527 #define PBAP_PROPERTY_AGENT (1ULL << 15)                 // vCard of Person Representing
1528 #define PBAP_PROPERTY_ORG (1ULL << 16)                   // Name of Organization
1529 #define PBAP_PROPERTY_NOTE (1ULL << 17)                  // Comments
1530 #define PBAP_PROPERTY_REV (1ULL << 18)                   // Revision
1531 #define PBAP_PROPERTY_SOUND (1ULL << 19)                 // Pronunciation of Name
1532 #define PBAP_PROPERTY_URL (1ULL << 20)                   // Uniform Resource Locator
1533 #define PBAP_PROPERTY_UID (1ULL << 21)                   // Unique ID
1534 #define PBAP_PROPERTY_KEY (1ULL << 22)                   // Public Encryption Key
1535 #define PBAP_PROPERTY_NICKNAME (1ULL << 23)              // Nickname
1536 #define PBAP_PROPERTY_CATEGORIES (1ULL << 24)            // Categories
1537 #define PBAP_PROPERTY_PROID (1ULL << 25)                 // Product ID
1538 #define PBAP_PROPERTY_CLASS (1ULL << 26)                 // Class information
1539 #define PBAP_PROPERTY_SORT_STRING (1ULL << 27)           // String used for sorting operations
1540 #define PBAP_PROPERTY_X_IRMC_CALL_DATETIME (1ULL << 28)  // Time stamp
1541 #define PBAP_PROPERTY_X_BT_SPEEDDIALKEY (1ULL << 29)     // Speed-dial shortcut
1542 #define PBAP_PROPERTY_X_BT_UCI (1ULL << 30)              // Uniform Caller Identifier
1543 #define PBAP_PROPERTY_X_BT_UID (1ULL << 31)              // Bluetooth Contact Unique Identifier
1544 #define PBAP_PROPERTY_PROPRIENTARY_FILTER (1ULL << 39)   // Bluetooth Proprientary
1545 
1546 enum PbapSelectorOperatorType : uint8_t {
1547     PBAP_SELECTOR_OPERATOR_OR = 0x00,   // SelectorOperator Or
1548     PBAP_SELECTOR_OPERATOR_AND = 0x01,  // SelectorOperator And
1549 };
1550 
1551 enum PbapSearchPropertyType : uint8_t {
1552     PBAP_SEARCH_PROPERTY_NAME = 0x00,    // name
1553     PBAP_SEARCH_PROPERTY_NUMBER = 0x01,  // number
1554     PBAP_SEARCH_PROPERTY_SOUND = 0x02,   // sound
1555 };
1556 
1557 const uint8_t PBAP_FLAG_GO_TO_ROOT = 0x02;  // go back to root
1558 const uint8_t PBAP_FLAG_GO_DOWN = 0x02;     // go down
1559 const uint8_t PBAP_FLAG_GO_UP = 0x03;       // go up
1560 
1561 constexpr const int32_t VIRTUAL_DEVICE_ADD = 0; // add virtual device
1562 constexpr const int32_t VIRTUAL_DEVICE_REMOVE = 1; // delete virtual device
1563 
1564 enum PbapResponseCode : uint8_t {
1565     PBAP_CONTINUE = 0x90,                    // 100 Continue
1566     PBAP_SUCCESS = 0xA0,                     // 200 OK, Success
1567     PBAP_CREATED = 0xA1,                     // 201 Created
1568     PBAP_PBAP_ACCEPTED = 0xA2,               // 202 Accepted
1569     PBAP_NON_AUTH = 0xA3,                    // 203 Non-Authoritative Information
1570     PBAP_NO_CONTENT = 0xA4,                  // 204 No Content
1571     PBAP_RESET_CONTENT = 0xA5,               // 205 Reset Content
1572     PBAP_PARTIAL_CONTENT = 0xA6,             // 206 Partial Content
1573     PBAP_MULTIPLE_CHOICES = 0xB0,            // 300 Multiple Choices
1574     PBAP_MOVED_PERMANENTLY = 0xB1,           // 301 Moved Permanently
1575     PBAP_MOVED_TEMPORARILY = 0xB2,           // 302 Moved temporarily
1576     PBAP_SEE_OTHER = 0xB3,                   // 303 See Other
1577     PBAP_NOT_MODIFIED = 0xB4,                // 304 Not modified
1578     PBAP_USE_PROXY = 0xB5,                   // 305 Use Proxy
1579     PBAP_BAD_REQUEST = 0xC0,                 // 400 Bad Request - server couldn’t understand request
1580     PBAP_UNAUTHORIZED = 0xC1,                // 401 Unauthorized
1581     PBAP_PAYMENT_REQUIRED = 0xC2,            // 402 Payment required
1582     PBAP_FORBIDDEN = 0xC3,                   // 403 Forbidden - operation is understood but refused
1583     PBAP_NOT_FOUND = 0xC4,                   // 404 Not Found
1584     PBAP_METHOD_NOT_ALLOWED = 0xC5,          // 405 Method not allowed
1585     PBAP_NOT_ACCEPTABLE = 0xC6,              // 406 Not Acceptable
1586     PBAP_PROXY_AUTH_REQUIRED = 0xC7,         // 407 Proxy Authentication required
1587     PBAP_REQUEST_TIME_OUT = 0xC8,            // 408 Request Time Out
1588     PBAP_CONFLICT = 0xC9,                    // 409 Conflict
1589     PBAP_GONE = 0xCA,                        // 410 Gone
1590     PBAP_LENGTH_REQUIRED = 0xCB,             // 411 Length Required
1591     PBAP_PRECONDITION_FAILED = 0xCC,         // 412 Precondition failed
1592     PBAP_REQUESTED_ENTITY_TOO_LARGE = 0xCD,  // 413 Requested entity too large
1593     PBAP_REQUEST_URL_TOO_LARGE = 0xCE,       // 414 Request URL too large
1594     PBAP_UNSUPPORTED_MEDIA_TYPE = 0xCF,      // 415 Unsupported media type
1595     PBAP_INTERNAL_SERVER_ERROR = 0xD0,       // 500 Internal Server Error
1596     PBAP_NOT_IMPLEMENTED = 0xD1,             // 501 Not Implemented
1597     PBAP_BAD_GATEWAY = 0xD2,                 // 502 Bad Gateway
1598     PBAP_SERVICE_UNAVAILABLE = 0xD3,         // 503 Service Unavailable
1599     PBAP_GATEWAY_TIMEOUT = 0xD4,             // 504 Gateway Timeout
1600     PBAP_HTTP_VERSION_NOT_SUPPORTED = 0xD5,  // 505 HTTP version not supported
1601     PBAP_DATABASE_FULL = 0xE0,               // Database Full
1602     PBAP_DATABASE_LOCKED = 0xE1              // Database Locked
1603 };
1604 
1605 struct CocUpdateSocketParam {
1606     std::string addr;
1607     int32_t minInterval;
1608     int32_t maxInterval;
1609     int32_t peripheralLatency;
1610     int32_t supervisionTimeout;
1611     int32_t minConnEventLen;
1612     int32_t maxConnEventLen;
1613 };
1614 
1615 enum UpdateOutputStackAction {
1616     ACTION_WEAR = 0,
1617     ACTION_UNWEAR = 1,
1618     ACTION_ENABLE_FROM_REMOTE = 2,
1619     ACTION_DISABLE_FROM_REMOTE = 3,
1620     ACTION_ENABLE_WEAR_DETECTION = 4,
1621     ACTION_DISABLE_WEAR_DETECTION = 5,
1622     ACTION_USER_OPERATION = 6,
1623     ACTION_STOP_VIRTUAL_CALL = 7,
1624 };
1625 
1626 enum HfpAgScoStateChangeReason {
1627     HFP_AG_SCO_INVALID = 0,
1628     HFP_AG_SCO_LOCAL_USER_TERMINATED = 1,
1629     HFP_AG_SCO_REMOTE_USER_TERMINATED = 2,
1630     HFP_AG_SCO_LOCAL_USER_SET_UP = 3,
1631     HFP_AG_SCO_REMOTE_USER_SET_UP = 4,
1632 };
1633 
1634 enum DeviceType {
1635     DEVICE_TYPE_DEFAULT = 0,
1636     DEVICE_TYPE_CAR = 1,
1637     DEVICE_TYPE_HEADSET = 2,
1638     DEVICE_TYPE_HEARING = 3,
1639     DEVICE_TYPE_GLASSES = 4,
1640     DEVICE_TYPE_WATCH = 5,
1641     DEVICE_TYPE_SPEAKER = 6,
1642     DEVICE_TYPE_OTHERS = 7,
1643 };
1644 
1645 enum DeviceInfoType {
1646     DEVICE_INFO_UNKNOWN = -1,
1647     DEVICE_VENDOR_ID = 0,
1648     DEVICE_PRODUCT_ID = 1,
1649     DEVICE_MODEL_ID = 2,
1650     DEVICE_CUSTOM_TYPE = 3
1651 };
1652 
1653 enum BluetoothSensingEventId : uint8_t {
1654     INVALID_SENSING_EVENT = 0x00,
1655     SPP_CLIENT_CONNECT_DONE = 0x01,
1656     SPP_SERVER_CONNECT_DONE = 0x02,
1657     SPP_PORT_CLOSE = 0x03,
1658     SPP_SERVER_CLOSE = 0x04,
1659     SPP_SERVER_LISTEN_DONE = 0x05,
1660     GATT_SERVER_REGISTER_DONE = 0x10,
1661     GATT_SERVER_UNREGISTER_DONE = 0x11,
1662     GATT_CLIENT_CONNECT_DONE = 0x012,
1663     GATT_CLIENT_CONNECT_CLOSE = 0x13,
1664     GATT_SERVER_CONNECT_DONE = 0x14,
1665     GATT_SERVER_CONNECT_CLOSE = 0x15,
1666     SOCKET_REGISTER_APPLICATION_PKGNAME = 0x20,
1667     GATT_REGISTER_APPLICATION_PKGNAME = 0x21,
1668     BLE_CONN_INTERVAL_UPDATE = 0X30,
1669 };
1670 
1671 enum BluetoothDecisionEventId : uint8_t {
1672     INVALID_DECISION_EVENT = 0x00,
1673     BLE_FASTEST_CONN_DECISION = 0x01,
1674 };
1675 
1676 enum BluetoothResourceDecisionResult {
1677     CONNECTION_REJECT = 0x00,
1678     CONNECTION_ACCEPT,
1679     CONNECTION_ACCEPT_WITH_PARAM_ADJUST,
1680     CONNECTION_PREEMPTION,
1681 };
1682 
1683 enum BluetoothSwitchState {
1684     STATE_ON,
1685     STATE_OFF,
1686     STATE_HALF,
1687 };
1688 
1689 #ifdef BLUETOOTH_EXPORT
1690 #define BLUETOOTH_API __attribute__((visibility("default")))
1691 #else
1692 #define BLUETOOTH_API
1693 #endif
1694 }  // namespace bluetooth
1695 }  // namespace OHOS
1696 #endif  // BT_DEF_H
1697