aboutsummaryrefslogtreecommitdiff
path: root/inc/bluetooth/gap/bt_types.h
diff options
context:
space:
mode:
Diffstat (limited to 'inc/bluetooth/gap/bt_types.h')
-rw-r--r--inc/bluetooth/gap/bt_types.h752
1 files changed, 752 insertions, 0 deletions
diff --git a/inc/bluetooth/gap/bt_types.h b/inc/bluetooth/gap/bt_types.h
new file mode 100644
index 0000000..1c8ed7b
--- /dev/null
+++ b/inc/bluetooth/gap/bt_types.h
@@ -0,0 +1,752 @@
+/**
+ * Copyright (c) 2017, Realtek Semiconductor Corporation. All rights reserved.
+ */
+
+#ifndef _BT_TYPES_H_
+#define _BT_TYPES_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "upperstack_config.h"
+
+/**
+ * \defgroup BTTYPES BT Types
+ *
+ * \brief Defines BT related macros for the upper layers.
+ *
+ */
+
+
+/**
+ * bt_types.h
+ *
+ * \name BT_LE_LOCAL_SUPPORTED_FEATURES
+ * \brief BT LE Local Supported Features definitions.
+ * \anchor BT_LE_LOCAL_SUPPORTED_FEATURES
+ */
+/**
+ * \ingroup BTTYPES
+ */
+#define LE_SUPPORT_FEATURES_MASK_ARRAY_INDEX0 0
+
+#define LE_SUPPORT_FEATURES_ENCRYPTION_MASK_BIT ((uint8_t)0x01)
+#define LE_SUPPORT_FEATURES_CONNPARA_REQ_PROC_MASK_BIT ((uint8_t)0x02)
+#define LE_SUPPORT_FEATURES_EXTENDED_REJECTION_IND_MASK_BIT ((uint8_t)0x04)
+#define LE_SUPPORT_FEATURES_SLAVE_INITIATED_FEATURE_EXCHANGE_MASK_BIT ((uint8_t)0x08)
+#define LE_SUPPORT_FEATURES_LE_PING_MASK_BIT ((uint8_t)0x10)
+#define LE_SUPPORT_FEATURES_LE_DATA_LENGTH_EXTENSION_MASK_BIT ((uint8_t)0x20)
+#define LE_SUPPORT_FEATURES_LL_PRIVACY_MASK_BIT ((uint8_t)0x40)
+#define LE_SUPPORT_FEATURES_EXTENDED_SCANNER_FILTER_POLICY_MASK_BIT ((uint8_t)0x80)
+
+#define LE_SUPPORT_FEATURES_MASK_ARRAY_INDEX1 1
+
+#define LE_SUPPORT_FEATURES_LE_2M_MASK_BIT ((uint8_t)0x01)
+#define LE_SUPPORT_FEATURES_STABLE_MODULATION_INDEX_TX_MASK_BIT ((uint8_t)0x02)
+#define LE_SUPPORT_FEATURES_STABLE_MODULATION_INDEX_RX_MASK_BIT ((uint8_t)0x04)
+#define LE_SUPPORT_FEATURES_LE_CODED_PHY_MASK_BIT ((uint8_t)0x08)
+#define LE_SUPPORT_FEATURES_LE_EXTENDED_ADV_BIT ((uint8_t)0x10)
+#define LE_SUPPORT_FEATURES_LE_PERIODIC_ADV_MASK_BIT ((uint8_t)0x20)
+#define LE_SUPPORT_FEATURES_CSA2_BIT ((uint8_t)0x40)
+#define LE_SUPPORT_FEATURES_LE_POWER_CLASS1_MASK_BIT ((uint8_t)0x80)
+
+#define LE_SUPPORT_FEATURES_MASK_ARRAY_INDEX2 2
+
+#define LE_SUPPORT_FEATURES_MIN_NUM_USED_CHANNEL_MASK_BIT ((uint8_t)0x01)
+#define LE_SUPPORT_FEATURES_CONNECTION_CTE_REQUEST_MASK_BIT ((uint8_t)0x02)
+#define LE_SUPPORT_FEATURES_CONNECTION_CTE_RESPONSE_MASK_BIT ((uint8_t)0x04)
+#define LE_SUPPORT_FEATURES_CONNECTIONLESS_CTE_TRANSMITTER_MASK_BIT ((uint8_t)0x08)
+#define LE_SUPPORT_FEATURES_CONNECTIONLESS_CTE_RECEIVER_MASK_BIT ((uint8_t)0x10)
+#define LE_SUPPORT_FEATURES_AOD_MASK_BIT ((uint8_t)0x20)
+#define LE_SUPPORT_FEATURES_AOA_MASK_BIT ((uint8_t)0x40)
+#define LE_SUPPORT_FEATURES_RECEIVING_CTE_MASK_BIT ((uint8_t)0x80)
+
+#define LE_SUPPORT_FEATURES_MASK_ARRAY_INDEX3 3
+
+#define LE_SUPPORT_FEATURES_PAST_SENDER_MASK_BIT ((uint8_t)0x01)
+#define LE_SUPPORT_FEATURES_PAST_RECIPIENT_MASK_BIT ((uint8_t)0x02)
+#define LE_SUPPORT_FEATURES_SLEEP_CLOCK_ACCURACY_UPDATES_MASK_BIT ((uint8_t)0x04)
+#define LE_SUPPORT_FEATURES_REMOTE_PUBLIC_KEY_VALIDATION_MASK_BIT ((uint8_t)0x08)
+#define LE_SUPPORT_FEATURES_CIS_MASTER_MASK_BIT ((uint8_t)0x10)
+#define LE_SUPPORT_FEATURES_CIS_SLAVE_MASK_BIT ((uint8_t)0x20)
+#define LE_SUPPORT_FEATURES_ISOCHRONOUS_BROADCASTER_MASK_BIT ((uint8_t)0x40)
+#define LE_SUPPORT_FEATURES_SYNCHRONIZED_RECEIVER_MASK_BIT ((uint8_t)0x80)
+
+#define LE_SUPPORT_FEATURES_MASK_ARRAY_INDEX4 4
+
+#define LE_SUPPORT_FEATURES_ISOCH_HOST_SUPPORT_MASK_BIT ((uint8_t)0x01)
+#define LE_SUPPORT_FEATURES_LE_POWER_CONTROL_REQUEST_MASK_BIT ((uint8_t)0x02)
+#define LE_SUPPORT_FEATURES_LE_POWER_CHANGE_INDICATION_MASK_BIT ((uint8_t)0x04)
+#define LE_SUPPORT_FEATURES_LE_PATH_LOSS_MONITORING_MASK_BIT ((uint8_t)0x08)
+
+/**
+ * bt_types.h
+ *
+ * \name BT_LE_SET_HOST_FEATURE
+ * \brief BT LE Set Host Feature definitions.
+ * \anchor BT_LE_SET_HOST_FEATURE
+ */
+/**
+ * \ingroup BTTYPES
+ */
+#define LE_SET_HOST_FEATURE_BIT_VALUE_DISABLE ((uint8_t)0x00)
+#define LE_SET_HOST_FEATURE_BIT_VALUE_ENABLE ((uint8_t)0x01)
+#define LE_SET_HOST_FEATURE_BIT_VALUE_RFU ((uint8_t)0xFF)
+
+#define LE_SET_HOST_FEATURE_BIT_NUMBER_ISOCH_HOST_SUPPORT ((uint8_t)0x20)
+#define LE_SET_HOST_FEATURE_BIT_NUMBER_RFU ((uint8_t)0xFF)
+
+/**
+ * bt_types.h
+ *
+ * \name BT_STACK_MODULE_ERROR
+ * \brief BT stack module error code mask.
+ * \anchor BT_STACK_MODULE_ERROR
+ */
+/**
+ * \ingroup BTTYPES
+ */
+#define GAP_ERR 0x0000
+#define HCI_ERR 0x0100
+#define L2C_ERR 0x0200
+#define SDP_ERR 0x0300
+#define ATT_ERR 0x0400
+#define SM_ERR 0x0500
+
+#define GATT_ERR 0x0C00
+#define APP_ERR 0x0D00
+
+/**
+ * bt_types.h
+ *
+ * \name BT_HCI_ERROR
+ * \brief BT hci error code definitions.
+ * \anchor BT_HCI_ERROR
+ */
+/**
+ * \ingroup BTTYPES
+ */
+#define HCI_SUCCESS 0x00
+#define HCI_ERR_UNKNOWN_CMD 0x01
+#define HCI_ERR_UNKNOWN_CONN_ID 0x02
+#define HCI_ERR_HARDWARE_FAIL 0x03
+#define HCI_ERR_PAGE_TIMEOUT 0x04
+#define HCI_ERR_AUTHEN_FAIL 0x05
+#define HCI_ERR_KEY_MISSING 0x06
+#define HCI_ERR_MEMORY_FULL 0x07
+#define HCI_ERR_CONN_TIMEOUT 0x08
+#define HCI_ERR_MAX_NUM_CONN 0x09
+#define HCI_ERR_MAX_NUM_SCO_CONN 0x0A /* 10 */
+#define HCI_ERR_ACL_CONN_EXIST 0x0B /* 11 */
+#define HCI_ERR_CMD_DISALLOWED 0x0C /* 12 */
+#define HCI_ERR_REJECT_LIMITED_RESOURCE 0x0D /* 13 */
+#define HCI_ERR_REJECT_SECURITY_REASON 0x0E /* 14 */
+#define HCI_ERR_REJECT_UNACCEPTABLE_ADDR 0x0F /* 15 */
+#define HCI_ERR_HOST_TIMEOUT 0x10 /* 16 */
+#define HCI_ERR_UNSUPPORTED_PARAM 0x11 /* 17 */
+#define HCI_ERR_INVALID_PARAM 0x12 /* 18 */
+#define HCI_ERR_REMOTE_USER_TERMINATE 0x13 /* 19 */
+#define HCI_ERR_REMOTE_LOW_RESOURCE 0x14 /* 20 */
+#define HCI_ERR_REMOTE_POWER_OFF 0x15 /* 21 */
+#define HCI_ERR_LOCAL_HOST_TERMINATE 0x16 /* 22 */
+#define HCI_ERR_REPEATED_ATTEMPTS 0x17 /* 23 */
+#define HCI_ERR_PARING_NOT_ALLOWED 0x18 /* 24 */
+#define HCI_ERR_UNKNOWN_LMP_PDU 0x19 /* 25 */
+#define HCI_ERR_UNSUPPORTED_REMOTE_FEAT 0x1A /* 26 */
+#define HCI_ERR_SCO_OFFSET_REJECTED 0x1B /* 27 */
+#define HCI_ERR_SCO_INTERVAL_REJECTED 0x1C /* 28 */
+#define HCI_ERR_SCO_AIR_MODE_REJECTED 0x1D /* 29 */
+#define HCI_ERR_INVALID_LMP_PARAM 0x1E /* 30 */
+#define HCI_ERR_UNSPECIFIED_ERROR 0x1F /* 31 */
+#define HCI_ERR_UNSUPPORTED_LMP_PARAM 0x20 /* 32 */
+#define HCI_ERR_ROLE_CHANGE_NOT_ALLOWED 0x21 /* 33 */
+#define HCI_ERR_LMP_RESPONSE_TIMEOUT 0x22 /* 34 */
+#define HCI_ERR_LMP_ERROR_TRANS_COLLISION 0x23 /* 35 */
+#define HCI_ERR_LMP_PDU_NOT_ALLOWED 0x24 /* 36 */
+#define HCI_ERR_ENCRYPT_MODE_NOT_ACCEPTABLE 0x25 /* 37 */
+#define HCI_ERR_UNIT_KEY_USED 0x26 /* 38 */
+#define HCI_ERR_QOS_NOT_SUPPORTED 0x27 /* 39 */
+#define HCI_ERR_INSTANT_PASSED 0x28 /* 40 */
+#define HCI_ERR_PAIR_UNIT_KEY_NOT_SUPPORT 0x29 /* 41 */
+#define HCI_ERR_DIFF_TRANS_COLLISION 0x2A /* 42 */
+#define HCI_ERR_QOS_UNACCEPTABLE_PARAM 0x2C /* 44 */
+#define HCI_ERR_QOS_REJECT 0x2D /* 45 */
+#define HCI_ERR_CHANN_ASSESS_NOT_SUPPORT 0x2E /* 46 */
+#define HCI_ERR_INSUFFICIENT_SECURITY 0x2F /* 47 */
+#define HCI_ERR_PARAM_OUT_OF_RANGE 0x30 /* 48 */
+#define HCI_ERR_ROLE_SWITCH_PENDING 0x32 /* 50 */
+#define HCI_ERR_RESERVED_SLOT_VIOLATION 0x34 /* 52 */
+#define HCI_ERR_ROLE_SWITCH_FAILED 0x35 /* 53 */
+#define HCI_ERR_EXT_INQUIRY_RSP_TOO_LARGE 0x36 /* 54 */
+#define HCI_ERR_SSP_NOT_SUPPORTED_BY_HOST 0x37 /* 55 */
+#define HCI_ERR_HOST_BUSY_PAIRING 0x38 /* 56 */
+#define HCI_ERR_REJECT_NO_SUITABLE_CHANN 0x39 /* 57 */
+#define HCI_ERR_CONTROLLER_BUSY 0x3A /* 58 */
+#define HCI_ERR_UNACCEPTABLE_CONN_INTERVAL 0x3B /* 59 */
+#define HCI_ERR_DIRECTED_ADV_TIMEOUT 0x3C /* 60 */
+#define HCI_ERR_MIC_FAILURE 0x3D /* 61 */
+#define HCI_ERR_FAIL_TO_ESTABLISH_CONN 0x3E /* 62 */
+#define HCI_ERR_MAC_CONN_FAIL 0x3F /* 63 */
+#define HCI_ERR_COARSE_CLOCK_ADJUST_REJECTED 0x40
+#define HCI_ERR_TYPE0_SUBMAP_NOT_DEFINED 0x41
+#define HCI_ERR_UNKNOWN_ADVERTISING_IDENTIFIER 0x42
+#define HCI_ERR_LIMIT_REACHED 0x43
+#define HCI_ERR_OPERATION_CANCELLED_BY_HOST 0x44
+#define HCI_ERR_OPERATION_PACKET_TOO_LONG 0x45
+
+/* hci local error code */
+#define HCI_ERR_INVALID_ADDR 0x64 /* 100 */
+#define HCI_ERR_TIMEOUT 0x65 /* 101 */
+#define HCI_ERR_OUT_OF_SYNC 0x66 /* 102 */
+#define HCI_ERR_NO_DESCRIPTOR 0x67 /* 103 */
+#define HCI_ERR_NO_MEMORY 0x68 /* 104 */
+#define HCI_ERR_INVALID_STATE 0x69 /* 105 */
+#define HCI_ERR_LOCAL_KEY_MISSING 0x6A /* 106 */
+
+/**
+ * bt_types.h
+ *
+ * \name BT_L2CAP_ERROR
+ * \brief BT l2cap error code definitions.
+ * \anchor BT_L2CAP_ERROR
+ */
+/**
+ * \ingroup BTTYPES
+ */
+#define L2C_SUCCESS 0x00
+
+#define L2C_CONN_ACCEPT 0x0000
+#define L2C_CONN_RSP_PENDING 0x0001
+#define L2C_CONN_RSP_INVALID_PSM 0x0002
+#define L2C_CONN_RSP_SECURITY_BLOCK 0x0003
+#define L2C_CONN_RSP_NO_RESOURCE 0x0004
+#define L2C_CONN_RSP_INVALID_PARAM 0x0005
+#define L2C_CONN_RSP_INVALID_SOURCE_CID 0x0006
+#define L2C_CONN_RSP_SOURCE_CID_ALLOCATED 0x0007
+
+/* request cmd reject reasons */
+#define L2C_CMD_REJ_NOT_UNDERSTOOD 0x0000
+#define L2C_CMD_REJ_SIGNAL_MTU_EXCEEDED 0x0001
+#define L2C_CMD_REJ_INVALID_CID_IN_REQ 0x0002
+
+/* config response result codes */
+#define L2C_CFG_RSP_SUCCESS 0x0000
+#define L2C_CFG_RSP_UNACCEPTABLE_PARAMS 0x0001
+#define L2C_CFG_RSP_REJECTED 0x0002
+#define L2C_CFG_RSP_UNKNOWN_OPTIONS 0x0003
+#define L2C_CFG_RSP_PENDING 0x0004
+#define L2C_CFG_RSP_FLOW_SPEC_REJECTED 0x0005
+
+#define L2C_LE_CREDIT_CONN_SUCCESS 0x0000
+#define L2C_LE_CREDIT_RSP_PSM_NOT_SUPPORTED 0x0002
+#define L2C_LE_CREDIT_RSP_NO_RESOURCES 0x0004
+#define L2C_LE_CREDIT_RSP_INSUFFICIENT_AUTHEN 0x0005
+#define L2C_LE_CREDIT_RSP_INSUFFICIENT_AUTHOR 0x0006
+#define L2C_LE_CREDIT_RSP_INSUFFICIENT_ENCRYP_KEY_SIZE 0x0007
+#define L2C_LE_CREDIT_RSP_INSUFFICIENT_ENCRYP 0x0008
+#define L2C_LE_CREDIT_RSP_INVALID_SOURCE_CID 0x0009
+#define L2C_LE_CREDIT_RSP_SOURCE_CID_ALREADY_ALLOC 0x000A
+
+/* status for connection updata response */
+#define L2C_LE_CONN_UPDATE_ACCEPT 0x0000
+#define L2C_LE_CONN_UPDATE_RSP_REJECT 0x0001
+#define L2C_LE_CONN_UPDATE_RSP_TOUT 0x0002
+
+/* l2cap error code */
+#define L2C_ERR_REJ_BASE 0x0010
+#define L2C_ERR_CFG_BASE 0x0020
+#define L2C_ERR_LE_CREDIT_BASE 0x0030
+#define L2C_ERR_LE_CONN_UPDATE_BASE 0x0040
+#define L2C_ERR_VND_BASE 0x00F0
+
+#define L2C_ERR_PENDING L2C_CONN_RSP_PENDING
+#define L2C_ERR_INVALID_PSM L2C_CONN_RSP_INVALID_PSM
+#define L2C_ERR_SECURITY_BLOCK L2C_CONN_RSP_SECURITY_BLOCK
+#define L2C_ERR_NO_RESOURCE L2C_CONN_RSP_NO_RESOURCE
+#define L2C_ERR_INVALID_PARAM L2C_CONN_RSP_INVALID_PARAM
+#define L2C_ERR_INVALID_SOURCE_CID L2C_CONN_RSP_INVALID_SOURCE_CID
+#define L2C_ERR_SOURCE_CID_ALLOCATED L2C_CONN_RSP_SOURCE_CID_ALLOCATED
+
+#define L2C_ERR_CMD_NOT_UNDERSTOOD (L2C_ERR_REJ_BASE + L2C_CMD_REJ_NOT_UNDERSTOOD)
+#define L2C_ERR_SIGNAL_MTU_EXCEEDED (L2C_ERR_REJ_BASE + L2C_CMD_REJ_SIGNAL_MTU_EXCEEDED)
+#define L2C_ERR_INVALID_CID_IN_REQ (L2C_ERR_REJ_BASE + L2C_CMD_REJ_INVALID_CID_IN_REQ)
+
+#define L2C_ERR_CFG_UNACCEPTABLE_PARAM (L2C_ERR_CFG_BASE + L2C_CFG_RSP_UNACCEPTABLE_PARAMS)
+#define L2C_ERR_CFG_REJECTED (L2C_ERR_CFG_BASE + L2C_CFG_RSP_REJECTED)
+#define L2C_ERR_CFG_UNKNOWN_OPTIONS (L2C_ERR_CFG_BASE + L2C_CFG_RSP_UNKNOWN_OPTIONS)
+#define L2C_ERR_CFG_PENDING (L2C_ERR_CFG_BASE + L2C_CFG_RSP_PENDING)
+#define L2C_ERR_CFG_FLOW_SPEC_REJECTED (L2C_ERR_CFG_BASE + L2C_CFG_RSP_FLOW_SPEC_REJECTED)
+
+#define L2C_ERR_LE_CREDIT_PSM_NOT_SUPPORTED (L2C_ERR_LE_CREDIT_BASE + L2C_LE_CREDIT_RSP_PSM_NOT_SUPPORTED)
+#define L2C_ERR_LE_CREDIT_NO_RESOURCES (L2C_ERR_LE_CREDIT_BASE + L2C_LE_CREDIT_RSP_NO_RESOURCES)
+#define L2C_ERR_LE_CREDIT_INSUFFICIENT_AUTHEN (L2C_ERR_LE_CREDIT_BASE + L2C_LE_CREDIT_RSP_INSUFFICIENT_AUTHEN)
+#define L2C_ERR_LE_CREDIT_INSUFFICIENT_AUTHOR (L2C_ERR_LE_CREDIT_BASE + L2C_LE_CREDIT_RSP_INSUFFICIENT_AUTHOR)
+#define L2C_ERR_LE_CREDIT_INSUFFICIENT_ENCRYP_KEY_SIZE (L2C_ERR_LE_CREDIT_BASE + L2C_LE_CREDIT_RSP_INSUFFICIENT_ENCRYP_KEY_SIZE)
+#define L2C_ERR_LE_CREDIT_INSUFFICIENT_ENCRYP (L2C_ERR_LE_CREDIT_BASE + L2C_LE_CREDIT_RSP_INSUFFICIENT_ENCRYP)
+#define L2C_ERR_LE_CREDIT_INVALID_SOURCE_CID (L2C_ERR_LE_CREDIT_BASE + L2C_LE_CREDIT_RSP_INVALID_SOURCE_CID)
+#define L2C_ERR_LE_CREDIT_SOURCE_CID_ALREADY_ALLOC (L2C_ERR_LE_CREDIT_BASE + L2C_LE_CREDIT_RSP_SOURCE_CID_ALREADY_ALLOC)
+
+#define L2C_ERR_LE_CONN_PARAM_UPDATE_REJECT (L2C_ERR_LE_CONN_UPDATE_BASE + L2C_LE_CONN_UPDATE_RSP_REJECT)
+#define L2C_ERR_LE_CONN_PARAM_UPDATE_TOUT (L2C_ERR_LE_CONN_UPDATE_BASE + L2C_LE_CONN_UPDATE_RSP_TOUT)
+
+#define L2C_ERR_VND_CREDITS_EXCEED (L2C_ERR_VND_BASE + 0x00)
+#define L2C_ERR_VND_INVALID_PDU (L2C_ERR_VND_BASE + 0x01)
+#define L2C_ERR_VND_CREDITS_LACK (L2C_ERR_VND_BASE + 0x02)
+#define L2C_ERR_VND_NO_MEMORY (L2C_ERR_VND_BASE + 0x03)
+#define L2C_ERR_VND_INVALID_STATE (L2C_ERR_VND_BASE + 0x04)
+#define L2C_ERR_VND_INVALID_RX_SEQ (L2C_ERR_VND_BASE + 0x05)
+#define L2C_ERR_VND_TIMEOUT (L2C_ERR_VND_BASE + 0x06)
+#define L2C_ERR_VND_INVALID_MODE (L2C_ERR_VND_BASE + 0x07)
+#define L2C_ERR_VND_REMOTE_DISCONNECT (L2C_ERR_VND_BASE + 0x08)
+
+/**
+ * bt_types.h
+ *
+ * \name BT_ATT_ERROR
+ * \brief BT att error code definitions.
+ * \anchor BT_ATT_ERROR
+ */
+/**
+ * \ingroup BTTYPES
+ */
+#define ATT_SUCCESS 0 /**< internal value .. */
+#define ATT_ERR_INVALID_HANDLE 0x01 /**< Attribute handle value given was not valid on this attribute server */
+#define ATT_ERR_READ_NOT_PERMITTED 0x02 /**< Attribute cannot be read */
+#define ATT_ERR_WRITE_NOT_PERMITTED 0x03 /**< Attribute cannot be written */
+#define ATT_ERR_INVALID_PDU 0x04 /**< The attribute PDU was invalid */
+#define ATT_ERR_INSUFFICIENT_AUTHEN 0x05 /**< The attribute requires authentication before it can be read or written */
+#define ATT_ERR_UNSUPPORTED_REQ 0x06 /**< Attribute server doesn't support the request received from the attribute client */
+#define ATT_ERR_INVALID_OFFSET 0x07 /**< Offset specified was past the end of the attribute */
+#define ATT_ERR_INSUFFICIENT_AUTHOR 0x08 /**< The attribute requires an authorization before it can be read or written */
+#define ATT_ERR_PREP_QUEUE_FULL 0x09 /**< Too many prepare writes have been queued */
+#define ATT_ERR_ATTR_NOT_FOUND 0x0A /**< No attribute found within the given attribute handle range */
+#define ATT_ERR_ATTR_NOT_LONG 0x0B /**< Attribute cannot be read or written using the Read Blob Request or Prepare Write Request */
+#define ATT_ERR_INSUFFICIENT_KEY_SIZE 0x0C /**< The Encryption Key Size used for encrypting this link is insufficient */
+#define ATT_ERR_INVALID_VALUE_SIZE 0x0D /**< The attribute value length is invalid for the operation */
+#define ATT_ERR_UNLIKELY 0x0E /**< The attribute request that was requested has encountered an error that was very unlikely, and therefore could not be completed as requested */
+#define ATT_ERR_INSUFFICIENT_ENCRYPT 0x0F /**< The attribute requires encryption before it can be read or written */
+#define ATT_ERR_UNSUPPORTED_GROUP_TYPE 0x10 /**< The attribute type is not a supported grouping attribute as defined by a higher layer specification */
+#define ATT_ERR_INSUFFICIENT_RESOURCES 0x11 /**< Insufficient Resources to complete the request */
+#define ATT_ERR_DATABASE_OUT_OF_SYNC 0x12 /**< The server requests the client to rediscover the database. */
+#define ATT_ERR_VALUE_NOT_ALLOWED 0x13 /**< The attribute parameter value was not allowed. */
+
+/* profile dependent application error codes >= 0x80: */
+#define ATT_ERR_INVALID_VALUE 0x80 /**< The attribute value is invalid for the operation */
+
+/* manufacturer specific error codes that are "missing" in GATT spec. >= 0xC0: */
+#define ATT_ERR_INVALID_CCC_BITS 0xC0 /**< Invalid client char. config. bits */
+#define ATT_ERR_INVALID_SIGNED_COUNT 0xC1 /**< Invalid sign count */
+#define ATT_ERR_INVALID_SIGNED_MAC_FAILED 0xC2 /**< Invalid sign mac value */
+#define ATT_ERR_MIN_APPLIC_CODE 0xC3
+
+/* error codes common to various profiles (see "CSS v2.pdf"), >= 0xE0 */
+#define ATT_ERR_WRITE_REQUEST_REJECTED 0xFC /**< Write Request Rejected */
+#define ATT_ERR_CCCD_IMPROPERLY_CONFIGURED 0xFD /**< CCCD improperly configured */
+#define ATT_ERR_PROC_ALREADY_IN_PROGRESS 0xFE /**< Procedure Already in Progress */
+#define ATT_ERR_OUT_OF_RANGE 0xFF /**< An attribute value is out of range as defined by a profile or service specification. */
+
+/**
+ * bt_types.h
+ *
+ * \name BT_GATT_ERROR
+ * \brief BT gatt error code definitions.
+ * \anchor BT_GATT_ERROR
+ */
+/**
+ * \ingroup BTTYPES
+ */
+#define GATT_SUCCESS 0x00
+#define GATT_ERR_OUT_OF_RESOURCE 0x01
+#define GATT_ERR_UNSUPPORTED 0x02
+#define GATT_ERR_INVALID_ROLE 0x03
+#define GATT_ERR_INVALID_STATE 0x04
+#define GATT_ERR_INVALID_CODING 0x05
+#define GATT_ERR_INVALID_HANDLE 0x06
+#define GATT_ERR_INVALID_PARAM 0x07
+#define GATT_ERR_INTERNAL 0x08
+#define GATT_ERR_NOT_ALLOWED 0x09
+#define GATT_ERR_NOTIF_IND_NOT_CFG 0x0A
+#define GATT_ERR_NOTIF_IND_CFG 0x0B
+#define GATT_ERR_NOTIF_IND_CONF_PD 0x0C
+#define GATT_ERR_TIMEOUT 0x0D
+#define GATT_ERR_LINK_DEACTIVATED 0x0E
+#define GATT_ERR_NOT_AUTHENTICATED 0x0F
+#define GATT_ERR_NOT_ENCRYPTED 0x10
+#define GATT_ERR_PROC_FAIL 0x11
+
+/* sm error code */
+#define SM_SUCCESS 0x00
+/* SMP_OP_PAIRING_FAILED causes */
+#define SMP_ERR_SUCCESS 0x00
+#define SMP_ERR_PASSKEY_ENTRY_FAIL 0x01
+#define SMP_ERR_OOB_NOT_AVAILABLE 0x02
+#define SMP_ERR_AUTHEN_REQUIREMENTS 0x03
+#define SMP_ERR_CFM_VALUE_FAILED 0x04
+#define SMP_ERR_PAIRING_NOT_SUPPORTED 0x05
+#define SMP_ERR_ENCRYPTION_KEY_SIZE 0x06
+#define SMP_ERR_CMD_NOT_SUPPORTED 0x07
+#define SMP_ERR_UNSPECIFIED_REASON 0x08
+#define SMP_ERR_REPEATED_ATTEMPTS 0x09
+#define SMP_ERR_INVALID_PARAM 0x0A
+#define SMP_ERR_DHKEY_CHECK_FAILED 0x0B
+#define SMP_ERR_NUMERIC_COMPARISON_FAIL 0x0C
+#define SMP_ERR_BREDR_PAIRING_IN_PROGRESS 0x0D
+#define SMP_ERR_CRS_TRANS_KEY_GEN_NOT_ALLOW 0x0E
+
+#define SM_ERR_NO_ENTRY 0xE1
+#define SM_ERR_DB_FULL 0xE2
+#define SM_ERR_INVALID_PARAM 0xE3
+#define SM_ERR_INSUFFICIENT_LINK_KEY 0xE4
+#define SM_ERR_LE_ADDR_NOT_RESOLVED 0xE5
+#define SM_ERR_INVALID_STATE 0xE6
+#define SM_ERR_NO_RESOURCE 0xE7
+#define SM_ERR_LINK_KEY_MISSING 0xE8
+#define SM_ERR_DISCONNECT 0xE9
+#define SM_ERR_PARING_NOT_ALLOWED 0xEA
+#define SM_ERR_KEY_SAVE_FAILED 0xEB
+#define SM_ERR_TIMEOUT 0xEC
+#define SM_ERR_UNKNOWN 0xED
+#define SM_ERR_NO_PAIRABLE_MODE 0xEF
+
+/**
+ * bt_types.h
+ *
+ * \name BT_BTIF_ERROR
+ * \brief BT btif error code definitions.
+ * \anchor BT_BTIF_ERROR
+ */
+/**
+ * \ingroup BTTYPES
+ */
+#define BTIF_ERR 0x0000
+#define BTIF_SUCCESS 0x00
+#define BTIF_ACCEPT 0x01
+#define BTIF_ERR_REJECT 0x02
+#define BTIF_ERR_NO_RESOURCE 0x03
+#define BTIF_ERR_INVALID_PARAM 0x04
+#define BTIF_ERR_INVALID_STATE 0x05
+#define BTIF_ERR_CONN_DISCONNECT 0x06
+#define BTIF_ERR_CONN_LOST 0x07
+#define BTIF_ERR_AUTHEN_FAIL 0x08
+#define BTIF_ERR_INIT_TOUT 0x09
+#define BTIF_ERR_INIT_OUT_OF_SYNC 0x0A
+#define BTIF_ERR_INIT_HARDWARE_ERROR 0x0B
+#define BTIF_ERR_LOWER_LAYER_ERROR 0x0C
+#define BTIF_ERR_ADDR_NOT_RESOLVED 0x0D
+#define BTIF_ERR_TOUT 0x0E
+
+#define BTIF_ERR_UNSPECIFIED 0xFD
+#define BTIF_ERR_NOT_SUPPORTED 0xFE
+
+/**
+ * bt_types.h
+ *
+ * \name BT_GAP_ERROR
+ * \brief BT GAP error code definitions.
+ * \anchor BT_GAP_ERROR
+ */
+/**
+ * \ingroup BTTYPES
+ */
+#define GAP_SUCCESS 0x00
+#define GAP_ACCEPT 0x01
+#define GAP_ERR_REJECT 0x02
+#define GAP_ERR_NO_RESOURCE 0x03
+#define GAP_ERR_INVALID_PARAM 0x04
+#define GAP_ERR_INVALID_STATE 0x05
+#define GAP_ERR_CONN_DISCONNECT 0x06
+#define GAP_ERR_CONN_LOST 0x07
+#define GAP_ERR_AUTHEN_FAIL 0x08
+#define GAP_ERR_INIT_TOUT 0x09
+#define GAP_ERR_INIT_OUT_OF_SYNC 0x0A
+#define GAP_ERR_INIT_HARDWARE_ERROR 0x0B
+#define GAP_ERR_LOWER_LAYER_ERROR 0x0C
+#define GAP_ERR_ADDR_NOT_RESOLVED 0x0D
+#define GAP_ERR_TOUT 0x0E
+
+#define GAP_ERR_REQ_FAILED 0xFB
+#define GAP_ERR_SW_RESET 0xFC
+#define GAP_ERR_UNSPECIFIED 0xFD
+#define GAP_ERR_NOT_SUPPORTED 0xFE
+
+/**
+ * bt_types.h
+ *
+ * \name BT_APP_ERROR
+ * \brief BT APP error code definitions.
+ * \anchor BT_APP_ERROR
+ */
+/**
+ * \ingroup BTTYPES
+ */
+#define APP_SUCCESS 0x00
+#define APP_ERR_PENDING 0x01
+#define APP_ERR_ACCEPT 0x03
+#define APP_ERR_REJECT 0x04
+#define APP_ERR_NOT_RELEASE 0x05
+
+/**
+ * bt_types.h
+ *
+ * \name BT_BYTE_ORDER
+ * \brief BT buffer/array byte-order utility macros.
+ * \anchor BT_BYTE_ORDER
+ */
+/**
+ * \ingroup BTTYPES
+ */
+/** Calculate integer bit count of b'1 */
+#define INT_BIT_COUNT(integer, count) { \
+ count = 0; \
+ while (integer) \
+ { \
+ count++; \
+ integer &= integer - 1; \
+ } \
+ }
+
+/** Stream skip len */
+#define STREAM_SKIP_LEN(s, len) { \
+ s += len; \
+ }
+
+/** Stream to array */
+#define STREAM_TO_ARRAY(a, s, len) { \
+ uint32_t ii; \
+ for (ii = 0; ii < len; ii++) \
+ { \
+ *((uint8_t *)(a) + ii) = *s++; \
+ } \
+ }
+
+/** Array to stream */
+#define ARRAY_TO_STREAM(s, a, len) { \
+ uint32_t ii; \
+ for (ii = 0; ii < len; ii++) \
+ { \
+ *s++ = *((uint8_t *)(a) + ii); \
+ } \
+ }
+
+/** Little Endian stream to uint8 */
+#define LE_STREAM_TO_UINT8(u8, s) { \
+ u8 = (uint8_t)(*s); \
+ s += 1; \
+ }
+
+/** Little Endian stream to uint16 */
+#define LE_STREAM_TO_UINT16(u16, s) { \
+ u16 = ((uint16_t)(*(s + 0)) << 0) + \
+ ((uint16_t)(*(s + 1)) << 8); \
+ s += 2; \
+ }
+
+/** Little Endian stream to uint24 */
+#define LE_STREAM_TO_UINT24(u24, s) { \
+ u24 = ((uint32_t)(*(s + 0)) << 0) + \
+ ((uint32_t)(*(s + 1)) << 8) + \
+ ((uint32_t)(*(s + 2)) << 16); \
+ s += 3; \
+ }
+
+/** Little Endian stream to uint32 */
+#define LE_STREAM_TO_UINT32(u32, s) { \
+ u32 = ((uint32_t)(*(s + 0)) << 0) + \
+ ((uint32_t)(*(s + 1)) << 8) + \
+ ((uint32_t)(*(s + 2)) << 16) + \
+ ((uint32_t)(*(s + 3)) << 24); \
+ s += 4; \
+ }
+
+/** Little Endian uint8 to stream */
+#define LE_UINT8_TO_STREAM(s, u8) { \
+ *s++ = (uint8_t)(u8); \
+ }
+
+/** Little Endian uint16 to stream */
+#define LE_UINT16_TO_STREAM(s, u16) { \
+ *s++ = (uint8_t)((u16) >> 0); \
+ *s++ = (uint8_t)((u16) >> 8); \
+ }
+
+/** Little Endian uint24 to stream */
+#define LE_UINT24_TO_STREAM(s, u24) { \
+ *s++ = (uint8_t)((u24) >> 0); \
+ *s++ = (uint8_t)((u24) >> 8); \
+ *s++ = (uint8_t)((u24) >> 16); \
+ }
+
+/** Little Endian uint32 to stream */
+#define LE_UINT32_TO_STREAM(s, u32) { \
+ *s++ = (uint8_t)((u32) >> 0); \
+ *s++ = (uint8_t)((u32) >> 8); \
+ *s++ = (uint8_t)((u32) >> 16); \
+ *s++ = (uint8_t)((u32) >> 24); \
+ }
+
+/** Little Endian array to uint8 */
+#define LE_ARRAY_TO_UINT8(u8, a) { \
+ u8 = (uint8_t)(*(a + 0)); \
+ }
+
+/** Little Endian array to uint16 */
+#define LE_ARRAY_TO_UINT16(u16, a) { \
+ u16 = ((uint16_t)(*(a + 0)) << 0) + \
+ ((uint16_t)(*(a + 1)) << 8); \
+ }
+
+/** Little Endian array to uint24 */
+#define LE_ARRAY_TO_UINT24(u24, a) { \
+ u24 = ((uint32_t)(*(a + 0)) << 0) + \
+ ((uint32_t)(*(a + 1)) << 8) + \
+ ((uint32_t)(*(a + 2)) << 16); \
+ }
+
+/** Little Endian array to uint32 */
+#define LE_ARRAY_TO_UINT32(u32, a) { \
+ u32 = ((uint32_t)(*(a + 0)) << 0) + \
+ ((uint32_t)(*(a + 1)) << 8) + \
+ ((uint32_t)(*(a + 2)) << 16) + \
+ ((uint32_t)(*(a + 3)) << 24); \
+ }
+
+/** Little Endian uint8 to array */
+#define LE_UINT8_TO_ARRAY(a, u8) { \
+ *((uint8_t *)(a) + 0) = (uint8_t)(u8); \
+ }
+
+/** Little Endian uint16 to array */
+#define LE_UINT16_TO_ARRAY(a, u16) { \
+ *((uint8_t *)(a) + 0) = (uint8_t)((u16) >> 0); \
+ *((uint8_t *)(a) + 1) = (uint8_t)((u16) >> 8); \
+ }
+
+/** Little Endian uint24 to array */
+#define LE_UINT24_TO_ARRAY(a, u24) { \
+ *((uint8_t *)(a) + 0) = (uint8_t)((u24) >> 0); \
+ *((uint8_t *)(a) + 1) = (uint8_t)((u24) >> 8); \
+ *((uint8_t *)(a) + 2) = (uint8_t)((u24) >> 16); \
+ }
+
+/** Little Endian uint32 to array */
+#define LE_UINT32_TO_ARRAY(a, u32) { \
+ *((uint8_t *)(a) + 0) = (uint8_t)((u32) >> 0); \
+ *((uint8_t *)(a) + 1) = (uint8_t)((u32) >> 8); \
+ *((uint8_t *)(a) + 2) = (uint8_t)((u32) >> 16); \
+ *((uint8_t *)(a) + 3) = (uint8_t)((u32) >> 24); \
+ }
+
+/** Big Endian stream to uint8 */
+#define BE_STREAM_TO_UINT8(u8, s) { \
+ u8 = (uint8_t)(*(s + 0)); \
+ s += 1; \
+ }
+
+/** Big Endian stream to uint16 */
+#define BE_STREAM_TO_UINT16(u16, s) { \
+ u16 = ((uint16_t)(*(s + 0)) << 8) + \
+ ((uint16_t)(*(s + 1)) << 0); \
+ s += 2; \
+ }
+
+/** Big Endian stream to uint24 */
+#define BE_STREAM_TO_UINT24(u24, s) { \
+ u24 = ((uint32_t)(*(s + 0)) << 16) + \
+ ((uint32_t)(*(s + 1)) << 8) + \
+ ((uint32_t)(*(s + 2)) << 0); \
+ s += 3; \
+ }
+
+/** Big Endian stream to uint32 */
+#define BE_STREAM_TO_UINT32(u32, s) { \
+ u32 = ((uint32_t)(*(s + 0)) << 24) + \
+ ((uint32_t)(*(s + 1)) << 16) + \
+ ((uint32_t)(*(s + 2)) << 8) + \
+ ((uint32_t)(*(s + 3)) << 0); \
+ s += 4; \
+ }
+
+/** Big Endian uint8 to stream */
+#define BE_UINT8_TO_STREAM(s, u8) { \
+ *s++ = (uint8_t)(u8); \
+ }
+
+/** Big Endian uint16 to stream */
+#define BE_UINT16_TO_STREAM(s, u16) { \
+ *s++ = (uint8_t)((u16) >> 8); \
+ *s++ = (uint8_t)((u16) >> 0); \
+ }
+
+/** Big Endian uint24 to stream */
+#define BE_UINT24_TO_STREAM(s, u24) { \
+ *s++ = (uint8_t)((u24) >> 16); \
+ *s++ = (uint8_t)((u24) >> 8); \
+ *s++ = (uint8_t)((u24) >> 0); \
+ }
+
+/** Big Endian uint32 to stream */
+#define BE_UINT32_TO_STREAM(s, u32) { \
+ *s++ = (uint8_t)((u32) >> 24); \
+ *s++ = (uint8_t)((u32) >> 16); \
+ *s++ = (uint8_t)((u32) >> 8); \
+ *s++ = (uint8_t)((u32) >> 0); \
+ }
+
+/** Big Endian array to uint8 */
+#define BE_ARRAY_TO_UINT8(u8, a) { \
+ u8 = (uint8_t)(*(a + 0)); \
+ }
+
+/** Big Endian array to uint16 */
+#define BE_ARRAY_TO_UINT16(u16, a) { \
+ u16 = ((uint16_t)(*(a + 0)) << 8) + \
+ ((uint16_t)(*(a + 1)) << 0); \
+ }
+
+/** Big Endian array to uint24 */
+#define BE_ARRAY_TO_UINT24(u24, a) { \
+ u24 = ((uint32_t)(*(a + 0)) << 16) + \
+ ((uint32_t)(*(a + 1)) << 8) + \
+ ((uint32_t)(*(a + 2)) << 0); \
+ }
+
+/** Big Endian array to uint32 */
+#define BE_ARRAY_TO_UINT32(u32, a) { \
+ u32 = ((uint32_t)(*(a + 0)) << 24) + \
+ ((uint32_t)(*(a + 1)) << 16) + \
+ ((uint32_t)(*(a + 2)) << 8) + \
+ ((uint32_t)(*(a + 3)) << 0); \
+ }
+
+/** Big Endian uint8 to array */
+#define BE_UINT8_TO_ARRAY(a, u8) { \
+ *((uint8_t *)(a) + 0) = (uint8_t)(u8); \
+ }
+
+/** Big Endian uint16 to array */
+#define BE_UINT16_TO_ARRAY(a, u16) { \
+ *((uint8_t *)(a) + 0) = (uint8_t)((u16) >> 8); \
+ *((uint8_t *)(a) + 1) = (uint8_t)((u16) >> 0); \
+ }
+
+/** Big Endian uint24 to array */
+#define BE_UINT24_TO_ARRAY(a, u24) { \
+ *((uint8_t *)(a) + 0) = (uint8_t)((u24) >> 16); \
+ *((uint8_t *)(a) + 1) = (uint8_t)((u24) >> 8); \
+ *((uint8_t *)(a) + 2) = (uint8_t)((u24) >> 0); \
+ }
+
+/** Big Endian uint32 to array */
+#define BE_UINT32_TO_ARRAY(a, u32) { \
+ *((uint8_t *)(a) + 0) = (uint8_t)((u32) >> 24); \
+ *((uint8_t *)(a) + 1) = (uint8_t)((u32) >> 16); \
+ *((uint8_t *)(a) + 2) = (uint8_t)((u32) >> 8); \
+ *((uint8_t *)(a) + 3) = (uint8_t)((u32) >> 0); \
+ }
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _BT_TYPES_H_ */