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