| /****************************************************************************** |
| * @file ble_common.h |
| * |
| * @brief for TLSR chips |
| * |
| * @author public@telink-semi.com; |
| * @date Sep. 30, 2010 |
| * |
| * @attention |
| * |
| * Copyright (C) 2019-2020 Telink Semiconductor (Shanghai) Co., Ltd. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| *****************************************************************************/ |
| #ifndef BLE_COMMON_H |
| #define BLE_COMMON_H |
| |
| #ifndef CFG_ATM_SDK |
| #include "tl_common.h" |
| #endif |
| |
| |
| typedef enum { |
| BLE_SUCCESS = 0, |
| |
| //// HCI Status, See the Core_v5.0(Vol 2/Part D/1.3 "list of Error Codes") for more information) |
| HCI_ERR_UNKNOWN_HCI_CMD = 0x01, |
| HCI_ERR_UNKNOWN_CONN_ID = 0x02, |
| HCI_ERR_HW_FAILURE = 0x03, |
| HCI_ERR_PAGE_TIMEOUT = 0x04, |
| HCI_ERR_AUTH_FAILURE = 0x05, |
| HCI_ERR_PIN_KEY_MISSING = 0x06, |
| HCI_ERR_MEM_CAP_EXCEEDED = 0x07, |
| HCI_ERR_CONN_TIMEOUT = 0x08, |
| HCI_ERR_CONN_LIMIT_EXCEEDED = 0x09, |
| HCI_ERR_SYNCH_CONN_LIMIT_EXCEEDED = 0x0A, |
| HCI_ERR_ACL_CONN_ALREADY_EXISTS = 0x0B, |
| HCI_ERR_CMD_DISALLOWED = 0x0C, |
| HCI_ERR_CONN_REJ_LIMITED_RESOURCES = 0x0D, |
| HCI_ERR_CONN_REJECTED_SECURITY_REASONS = 0x0E, |
| HCI_ERR_CONN_REJECTED_UNACCEPTABLE_BDADDR = 0x0F, |
| HCI_ERR_CONN_ACCEPT_TIMEOUT_EXCEEDED = 0x10, |
| HCI_ERR_UNSUPPORTED_FEATURE_PARAM_VALUE = 0x11, |
| HCI_ERR_INVALID_HCI_CMD_PARAMS = 0x12, |
| HCI_ERR_REMOTE_USER_TERM_CONN = 0x13, |
| HCI_ERR_REMOTE_DEVICE_TERM_CONN_LOW_RESOURCES = 0x14, |
| HCI_ERR_REMOTE_DEVICE_TERM_CONN_POWER_OFF = 0x15, |
| HCI_ERR_CONN_TERM_BY_LOCAL_HOST = 0x16, |
| HCI_ERR_REPEATED_ATTEMPTS = 0x17, |
| HCI_ERR_PAIRING_NOT_ALLOWED = 0x18, |
| HCI_ERR_UNKNOWN_LMP_PDU = 0x19, |
| HCI_ERR_UNSUPPORTED_REMOTE_FEATURE = 0x1A, |
| HCI_ERR_SCO_OFFSET_REJ = 0x1B, |
| HCI_ERR_SCO_INTERVAL_REJ = 0x1C, |
| HCI_ERR_SCO_AIR_MODE_REJ = 0x1D, |
| HCI_ERR_INVALID_LMP_PARAMS = 0x1E, |
| HCI_ERR_UNSPECIFIED_ERROR = 0x1F, |
| HCI_ERR_UNSUPPORTED_LMP_PARAM_VAL = 0x20, |
| HCI_ERR_ROLE_CHANGE_NOT_ALLOWED = 0x21, |
| HCI_ERR_LMP_LL_RESP_TIMEOUT = 0x22, |
| HCI_ERR_LMP_ERR_TRANSACTION_COLLISION = 0x23, |
| HCI_ERR_LMP_PDU_NOT_ALLOWED = 0x24, |
| HCI_ERR_ENCRYPT_MODE_NOT_ACCEPTABLE = 0x25, |
| HCI_ERR_LINK_KEY_CAN_NOT_BE_CHANGED = 0x26, |
| HCI_ERR_REQ_QOS_NOT_SUPPORTED = 0x27, |
| HCI_ERR_INSTANT_PASSED = 0x28, |
| HCI_ERR_PAIRING_WITH_UNIT_KEY_NOT_SUPPORTED = 0x29, |
| HCI_ERR_DIFFERENT_TRANSACTION_COLLISION = 0x2A, |
| HCI_ERR_RESERVED1 = 0x2B, |
| HCI_ERR_QOS_UNACCEPTABLE_PARAM = 0x2C, |
| HCI_ERR_QOS_REJ = 0x2D, |
| HCI_ERR_CHAN_ASSESSMENT_NOT_SUPPORTED = 0x2E, |
| HCI_ERR_INSUFFICIENT_SECURITY = 0x2F, |
| HCI_ERR_PARAM_OUT_OF_MANDATORY_RANGE = 0x30, |
| HCI_ERR_RESERVED2 = 0x31, |
| HCI_ERR_ROLE_SWITCH_PENDING = 0x32, |
| HCI_ERR_RESERVED3 = 0x33, |
| HCI_ERR_RESERVED_SLOT_VIOLATION = 0x34, |
| HCI_ERR_ROLE_SWITCH_FAILED = 0x35, |
| HCI_ERR_EXTENDED_INQUIRY_RESP_TOO_LARGE = 0x36, |
| HCI_ERR_SIMPLE_PAIRING_NOT_SUPPORTED_BY_HOST = 0x37, |
| HCI_ERR_HOST_BUSY_PAIRING = 0x38, |
| HCI_ERR_CONN_REJ_NO_SUITABLE_CHAN_FOUND = 0x39, |
| HCI_ERR_CONTROLLER_BUSY = 0x3A, |
| HCI_ERR_UNACCEPTABLE_CONN_INTERVAL = 0x3B, |
| HCI_ERR_ADVERTISING_TIMEOUT = 0x3C, |
| HCI_ERR_CONN_TERM_MIC_FAILURE = 0x3D, |
| HCI_ERR_CONN_FAILED_TO_ESTABLISH = 0x3E, |
| HCI_ERR_MAC_CONN_FAILED = 0x3F, |
| HCI_ERR_COARSE_CLOCK_ADJUSTMENT_REJECT = 0x40, |
| HCI_ERR_TYPE0_SUBMAP_NOT_DEFINED = 0x41, |
| HCI_ERR_UNKNOWN_ADV_IDENTIFIER = 0x42, |
| HCI_ERR_LIMIT_REACHED = 0x43, |
| HCI_ERR_OP_CANCELLED_BY_HOST = 0x44, |
| HCI_ERR_PACKET_TOO_LONG = 0x45, |
| |
| |
| |
| |
| |
| ///////////////////////// TELINK define status ///////////////////////////// |
| |
| //LL status |
| LL_ERR_CONNECTION_NOT_ESTABLISH = 0x80, |
| LL_ERR_TX_FIFO_NOT_ENOUGH, |
| LL_ERR_ENCRYPTION_BUSY, |
| LL_ERR_CURRENT_STATE_NOT_SUPPORTED_THIS_CMD, |
| LL_ERR_INVALID_PARAMETER, |
| LL_ERR_UNKNOWN_OPCODE, |
| |
| LL_ERR_CIS_SYNC_FAIL, |
| LL_ERR_CIS_DISCONNECT, |
| |
| |
| //L2CAP status |
| L2CAP_ERR_INVALID_PARAMETER = 0x90, |
| L2CAP_ERR_INVALID_HANDLE, |
| L2CAP_ERR_INSUFFICIENT_RESOURCES, |
| L2CAP_ERR_PSM_NOT_REGISTER, |
| L2CAP_ERR_CONTROL_NOT_READY, |
| L2CAP_ERR_PSM_HAVE_ESTABLISH, |
| |
| //SMP status |
| SMP_ERR_INVALID_PARAMETER = 0xA0, |
| SMP_ERR_PAIRING_BUSY, |
| |
| //GATT status |
| GATT_ERR_INVALID_PARAMETER = 0xB0, |
| GATT_ERR_PREVIOUS_INDICATE_DATA_HAS_NOT_CONFIRMED, |
| GATT_ERR_SERVICE_DISCOVERY_TIEMOUT, |
| GATT_ERR_NOTIFY_INDICATION_NOT_PERMITTED, |
| GATT_ERR_DATA_PENDING_DUE_TO_SERVICE_DISCOVERY_BUSY, |
| GATT_ERR_DATA_LENGTH_EXCEED_MTU_SIZE, |
| |
| //GAP status |
| GAP_ERR_INVALID_PARAMETER = 0xC0, |
| //IAL |
| IAL_ERR_SDU_LEN_EXCEED_SDU_MAX, |
| IAL_ERR_LOSS_SDU_INTRVEL, |
| IAL_ERR_ISO_TX_FIFO_NOT_ENOUGH, |
| IAL_ERR_SDU_BUFF_INVALID, |
| |
| //Service status |
| SERVICE_ERR_INVALID_PARAMETER = 0xD0, |
| |
| //Application buffer check error code |
| LL_ACL_RX_BUF_NO_INIT = 0xE0, |
| LL_ACL_RX_BUF_PARAM_INVALID, |
| LL_ACL_RX_BUF_SIZE_NOT_MEET_MAX_RX_OCT, |
| LL_ACL_TX_BUF_NO_INIT, |
| LL_ACL_TX_BUF_PARAM_INVALID, |
| LL_ACL_TX_BUF_SIZE_MUL_NUM_EXCEED_4K, |
| LL_ACL_TX_BUF_SIZE_NOT_MEET_MAX_TX_OCT, |
| |
| } ble_sts_t; |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| /////////////////////////////// BLE MAC ADDRESS ////////////////////////////////////////////// |
| #define BLE_ADDR_PUBLIC 0 |
| #define BLE_ADDR_RANDOM 1 |
| #define BLE_ADDR_INVALID 0xff |
| #define BLE_ADDR_LEN 6 |
| |
| |
| //Definition for BLE Common Address Type |
| /* |
| * |
| * |--public ..................................................... BLE_DEVICE_ADDRESS_PUBLIC |
| * | |
| * Address Type --| |-- random static ................................. BLE_DEVICE_ADDRESS_RANDOM_STATIC |
| * | | |
| * |--random --| |
| * | |-- non_resolvable private ... BLE_DEVICE_ADDRESS_NON_RESOLVABLE_PRIVATE |
| * |-- random private --| |
| * |-- resolvable private ....... BLE_DEVICE_ADDRESS_RESOLVABLE_PRIVATE |
| * |
| */ |
| |
| #define BLE_DEVICE_ADDRESS_PUBLIC 1 |
| #define BLE_DEVICE_ADDRESS_RANDOM_STATIC 2 |
| #define BLE_DEVICE_ADDRESS_NON_RESOLVABLE_PRIVATE 3 |
| #define BLE_DEVICE_ADDRESS_RESOLVABLE_PRIVATE 4 |
| |
| |
| |
| #define IS_PUBLIC_ADDR(Type, Addr) ( (Type)==BLE_ADDR_PUBLIC) ) |
| #define IS_RANDOM_STATIC_ADDR(Type, Addr) ( (Type)==BLE_ADDR_RANDOM && (Addr[5] & 0xC0) == 0xC0 ) |
| #define IS_NON_RESOLVABLE_PRIVATE_ADDR(Type, Addr) ( (Type)==BLE_ADDR_RANDOM && (Addr[5] & 0xC0) == 0x00 ) |
| #define IS_RESOLVABLE_PRIVATE_ADDR(Type, Addr) ( (Type)==BLE_ADDR_RANDOM && (Addr[5] & 0xC0) == 0x40 ) |
| |
| |
| #define MAC_MATCH8(md,ms) (md[0]==ms[0] && md[1]==ms[1] && md[2]==ms[2] && md[3]==ms[3] && md[4]==ms[4] && md[5]==ms[5]) |
| #define MAC_MATCH16(md,ms) (md[0]==ms[0] && md[1]==ms[1] && md[2]==ms[2]) |
| #define MAC_MATCH32(md,ms) (md[0]==ms[0] && md[1]==ms[1]) |
| ///////////////////////////////////////////////////////////////////////////// |
| |
| /******************************************** ATT ***************************************************************/ |
| |
| /** |
| * @brief Definition for Attribute protocol PDUs |
| */ |
| typedef enum{ |
| ATT_OP_ERROR_RSP = 0x01, |
| ATT_OP_EXCHANGE_MTU_REQ = 0x02, |
| ATT_OP_EXCHANGE_MTU_RSP = 0x03, |
| ATT_OP_FIND_INFORMATION_REQ = 0x04, ATT_OP_FIND_INFO_REQ = 0x04, |
| ATT_OP_FIND_INFORMATION_RSP = 0x05, ATT_OP_FIND_INFO_RSP = 0x05, |
| ATT_OP_FIND_BY_TYPE_VALUE_REQ = 0x06, |
| ATT_OP_FIND_BY_TYPE_VALUE_RSP = 0x07, |
| ATT_OP_READ_BY_TYPE_REQ = 0x08, |
| ATT_OP_READ_BY_TYPE_RSP = 0x09, |
| ATT_OP_READ_REQ = 0x0A, |
| ATT_OP_READ_RSP = 0x0B, |
| ATT_OP_READ_BLOB_REQ = 0x0C, |
| ATT_OP_READ_BLOB_RSP = 0x0D, |
| ATT_OP_READ_MULTIPLE_REQ = 0x0E, ATT_OP_READ_MULTI_REQ = 0x0E, |
| ATT_OP_READ_MULTIPLE_RSP = 0x0F, |
| ATT_OP_READ_BY_GROUP_TYPE_REQ = 0x10, |
| ATT_OP_READ_BY_GROUP_TYPE_RSP = 0x11, |
| ATT_OP_WRITE_REQ = 0x12, |
| ATT_OP_WRITE_RSP = 0x13, |
| ATT_OP_PREPARE_WRITE_REQ = 0x16, |
| ATT_OP_PREPARE_WRITE_RSP = 0x17, |
| ATT_OP_EXECUTE_WRITE_REQ = 0x18, |
| ATT_OP_EXECUTE_WRITE_RSP = 0x19, |
| |
| ATT_OP_HANDLE_VALUE_NTF = 0x1B, ATT_OP_HANDLE_VALUE_NOTI = 0x1B, |
| ATT_OP_HANDLE_VALUE_IND = 0x1D, |
| ATT_OP_HANDLE_VALUE_CFM = 0x1E, |
| |
| ATT_OP_READ_MULTIPLE_VARIABLE_REQ = 0x20, //core_5.2 |
| ATT_OP_READ_MULTIPLE_VARIABLE_RSP = 0x21, //core_5.2 |
| ATT_OP_MULTIPLE_HANDLE_VALUE_NTF = 0x23, //core_5.2 |
| |
| ATT_OP_WRITE_CMD = 0x52, |
| ATT_OP_SIGNED_WRITE_CMD = 0xD2, |
| }att_pdu_type; |
| |
| |
| |
| |
| /******************************************** L2CAP ***************************************************************/ |
| |
| /** |
| * @brief Definition for L2CAP CID name space for the LE-U |
| */ |
| typedef enum{ |
| L2CAP_CID_NULL = 0x0000, |
| L2CAP_CID_ATTR_PROTOCOL = 0x0004, |
| L2CAP_CID_SIG_CHANNEL = 0x0005, |
| L2CAP_CID_SMP = 0x0006, |
| }l2cap_cid_type; |
| |
| /** |
| * @brief Definition for L2CAP signal packet formats |
| */ |
| typedef enum{ |
| L2CAP_COMMAND_REJECT_RSP = 0x01, |
| L2CAP_CONNECTION_REQ = 0x02, |
| L2CAP_CONNECTION_RSP = 0x03, |
| L2CAP_CONFIGURATION_REQ = 0x04, |
| L2CAP_CONFIGURATION_RSP = 0x05, |
| L2CAP_DISCONNECTION_REQ = 0x06, |
| L2CAP_DISCONNECTION_RSP = 0x07, |
| L2CAP_ECHO_REQ = 0x08, |
| L2CAP_ECHO_RSP = 0x09, |
| L2CAP_INFORMATION_REQ = 0x0A, |
| L2CAP_INFORMATION_RSP = 0x0B, |
| L2CAP_CREATE_CHANNEL_REQ = 0x0C, |
| L2CAP_CREATE_CHANNEL_RSP = 0x0D, |
| L2CAP_MOVE_CHANNEL_REQ = 0x0E, |
| L2CAP_MOVE_CHANNEL_RSP = 0x0F, |
| L2CAP_MOVE_CHANNEL_CONFIRMATION_REQ = 0x10, |
| L2CAP_MOVE_CHANNEL_CONFIRMATION_RSP = 0x11, |
| L2CAP_CONNECTION_PARAMETER_UPDATE_REQ = 0x12, L2CAP_CMD_CONN_UPD_PARA_REQ = 0x12, |
| L2CAP_CONNECTION_PARAMETER_UPDATE_RSP = 0x13, L2CAP_CMD_CONN_UPD_PARA_RESP = 0x13, |
| L2CAP_LE_CREDIT_BASED_CONNECTION_REQ = 0x14, |
| L2CAP_LE_CREDIT_BASED_CONNECTION_RSP = 0x15, |
| L2CAP_FLOW_CONTROL_CREDIT_IND = 0x16, |
| L2CAP_CREDIT_BASED_CONNECTION_REQ = 0x17, //core_5.2 |
| L2CAP_CREDIT_BASED_CONNECTION_RSP = 0x18, //core_5.2 |
| L2CAP_CREDIT_BASED_RECONFIGURE_REQ = 0x19, //core_5.2 |
| L2CAP_CREDIT_BASED_RECONFIGURE_RSP = 0x1A, //core_5.2 |
| }l2cap_sig_pkt_format; |
| |
| /******************************************** LINKLAYER ***************************************************************/ |
| |
| /** |
| * @brief Definition for LL Control PDU Opcode |
| */ // rf_len without MIC |
| #define LL_CONNECTION_UPDATE_REQ 0x00 // 12 |
| #define LL_CHANNEL_MAP_REQ 0x01 // 8 |
| #define LL_TERMINATE_IND 0x02 // 2 |
| |
| #define LL_ENC_REQ 0x03 // encryption // 23 |
| #define LL_ENC_RSP 0x04 // encryption // 13 |
| #define LL_START_ENC_REQ 0x05 // encryption // 1 |
| #define LL_START_ENC_RSP 0x06 // encryption // 1 |
| |
| #define LL_UNKNOWN_RSP 0x07 // 2 |
| #define LL_FEATURE_REQ 0x08 // 9 |
| #define LL_FEATURE_RSP 0x09 // 9 |
| |
| #define LL_PAUSE_ENC_REQ 0x0A // encryption // 1 |
| #define LL_PAUSE_ENC_RSP 0x0B // encryption // 1 |
| |
| #define LL_VERSION_IND 0x0C // 6 |
| #define LL_REJECT_IND 0x0D // 2 |
| #define LL_SLAVE_FEATURE_REQ 0x0E //core_4.1 // 9 |
| #define LL_CONNECTION_PARAM_REQ 0x0F //core_4.1 // 24 |
| #define LL_CONNECTION_PARAM_RSP 0x10 //core_4.1 // 24 |
| #define LL_REJECT_IND_EXT 0x11 //core_4.1 // 3 |
| #define LL_PING_REQ 0x12 //core_4.1 // 1 |
| #define LL_PING_RSP 0x13 //core_4.1 // 1 |
| #define LL_LENGTH_REQ 0x14 //core_4.2 // 9 |
| #define LL_LENGTH_RSP 0x15 //core_4.2 // 9 |
| #define LL_PHY_REQ 0x16 //core_5.0 // 3 |
| #define LL_PHY_RSP 0x17 //core_5.0 // 3 |
| #define LL_PHY_UPDATE_IND 0x18 //core_5.0 // 5 |
| #define LL_MIN_USED_CHN_IND 0x19 //core_5.0 // 3 |
| |
| #define LL_CTE_REQ 0x1A //core_5.1 // 2 |
| #define LL_CTE_RSP 0x1B //core_5.1 // 2 |
| #define LL_PERIODIC_SYNC_IND 0x1C //core_5.1 // 35 |
| #define LL_CLOCK_ACCURACY_REQ 0x1D //core_5.1 // 2 |
| #define LL_CLOCK_ACCURACY_RSP 0x1E //core_5.1 // 2 |
| |
| |
| #define LL_CIS_REQ 0x1F //core_5.2 // 36 |
| #define LL_CIS_RSP 0x20 //core_5.2 // 9 |
| #define LL_CIS_IND 0x21 //core_5.2 // 16 |
| #define LL_CIS_TERMINATE_IND 0x22 //core_5.2 // 4 |
| #define LL_POWER_CONTROL_REQ 0x23 //core_5.2 // 4 |
| #define LL_POWER_CONTROL_RSP 0x24 //core_5.2 // 5 |
| #define LL_POWER_CHANGE_IND 0x25 //core_5.2 // 5 |
| |
| |
| |
| /******************************************** GAP ***************************************************************/ |
| |
| // https://www.bluetooth.com/specifications/assigned-numbers/generic-access-profile/ |
| // EIR Data Type, Advertising Data Type (AD Type) and OOB Data Type Definitions |
| |
| typedef enum { |
| DT_FLAGS = 0x01, // Flag |
| DT_INCOMPLT_LIST_16BIT_SERVICE_UUID = 0x02, // Incomplete List of 16-bit Service Class UUIDs |
| DT_COMPLETE_LIST_16BIT_SERVICE_UUID = 0x03, // Complete List of 16-bit Service Class UUIDs |
| DT_INCOMPLT_LIST_32BIT_SERVICE_UUID = 0x04, // Incomplete List of 32-bit Service Class UUIDs |
| DT_COMPLETE_LIST_32BIT_SERVICE_UUID = 0x05, // Complete List of 32-bit Service Class UUIDs |
| DT_INCOMPLT_LIST_128BIT_SERVICE_UUID = 0x06, // Incomplete List of 128-bit Service Class UUIDs |
| DT_COMPLETE_LIST_128BIT_SERVICE_UUID = 0x07, // Complete List of 128-bit Service Class UUIDs |
| DT_SHORTENED_LOCAL_NAME = 0x08, // Shortened Local Name |
| DT_COMPLETE_LOCAL_NAME = 0x09, // Complete Local Name |
| DT_TX_POWER_LEVEL = 0x0A, // Tx Power Level |
| |
| DT_CLASS_OF_DEVICE = 0x0D, // Class of Device |
| |
| DT_APPEARANCE = 0x19, // Appearance |
| |
| DT_BIGINFO = 0x2C, // BIGInfo |
| DT_BROADCAST_CODE = 0x2D, // Broadcast_Code |
| DT_3D_INFORMATION_DATA = 0x3D, // 3D Information Data |
| |
| DATA_TYPE_MANUFACTURER_SPECIFIC_DATA = 0xFF, // Manufacturer Specific Data |
| }data_type_t; |
| |
| |
| #endif |