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