Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of X_NUCLEO_IDB0XA1 by
hci.h
00001 /******************** (C) COPYRIGHT 2012 STMicroelectronics ******************** 00002 * File Name : hci.h 00003 * Author : AMS - HEA&RF BU 00004 * Version : V1.0.0 00005 * Date : 19-July-2012 00006 * Description : Constants and functions for HCI layer. See Bluetooth Core 00007 * v 4.0, Vol. 2, Part E. 00008 ******************************************************************************** 00009 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 00010 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. 00011 * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, 00012 * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE 00013 * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING 00014 * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 00015 *******************************************************************************/ 00016 00017 #ifndef __HCI_H_ 00018 #define __HCI_H_ 00019 00020 #include "hal_types.h" 00021 #include "link_layer.h" 00022 #include <list.h> 00023 00024 #define HCI_READ_PACKET_SIZE 128 //71 00025 00026 /*** Data types ***/ 00027 00028 /* structure used to read received data */ 00029 typedef struct _tHciDataPacket 00030 { 00031 tListNode currentNode; 00032 uint8_t dataBuff[HCI_READ_PACKET_SIZE]; 00033 uint8_t data_len; 00034 } tHciDataPacket; 00035 00036 typedef enum 00037 { 00038 BUSY, 00039 AVAILABLE 00040 } HCI_CMD_STATUS_t; 00041 00042 /** 00043 * @defgroup HCI_Error_codes HCI Error codes 00044 * @{ 00045 */ 00046 #define HCI_UNKNOWN_COMMAND 0x01 00047 #define HCI_NO_CONNECTION 0x02 00048 #define HCI_HARDWARE_FAILURE 0x03 00049 #define HCI_PAGE_TIMEOUT 0x04 00050 #define HCI_AUTHENTICATION_FAILURE 0x05 00051 #define HCI_PIN_OR_KEY_MISSING 0x06 00052 #define HCI_MEMORY_FULL 0x07 00053 #define HCI_CONNECTION_TIMEOUT 0x08 00054 #define HCI_MAX_NUMBER_OF_CONNECTIONS 0x09 00055 #define HCI_MAX_NUMBER_OF_SCO_CONNECTIONS 0x0a 00056 #define HCI_ACL_CONNECTION_EXISTS 0x0b 00057 #define HCI_COMMAND_DISALLOWED 0x0c 00058 #define HCI_REJECTED_LIMITED_RESOURCES 0x0d 00059 #define HCI_REJECTED_SECURITY 0x0e 00060 #define HCI_REJECTED_PERSONAL 0x0f 00061 #define HCI_HOST_TIMEOUT 0x10 00062 #define HCI_UNSUPPORTED_FEATURE 0x11 00063 #define HCI_INVALID_PARAMETERS 0x12 00064 #define HCI_OE_USER_ENDED_CONNECTION 0x13 00065 #define HCI_OE_LOW_RESOURCES 0x14 00066 #define HCI_OE_POWER_OFF 0x15 00067 #define HCI_CONNECTION_TERMINATED 0x16 00068 #define HCI_REPEATED_ATTEMPTS 0x17 00069 #define HCI_PAIRING_NOT_ALLOWED 0x18 00070 #define HCI_UNKNOWN_LMP_PDU 0x19 00071 #define HCI_UNSUPPORTED_REMOTE_FEATURE 0x1a 00072 #define HCI_SCO_OFFSET_REJECTED 0x1b 00073 #define HCI_SCO_INTERVAL_REJECTED 0x1c 00074 #define HCI_AIR_MODE_REJECTED 0x1d 00075 #define HCI_INVALID_LMP_PARAMETERS 0x1e 00076 #define HCI_UNSPECIFIED_ERROR 0x1f 00077 #define HCI_UNSUPPORTED_LMP_PARAMETER_VALUE 0x20 00078 #define HCI_ROLE_CHANGE_NOT_ALLOWED 0x21 00079 #define HCI_LMP_RESPONSE_TIMEOUT 0x22 00080 #define HCI_LMP_ERROR_TRANSACTION_COLLISION 0x23 00081 #define HCI_LMP_PDU_NOT_ALLOWED 0x24 00082 #define HCI_ENCRYPTION_MODE_NOT_ACCEPTED 0x25 00083 #define HCI_UNIT_LINK_KEY_USED 0x26 00084 #define HCI_QOS_NOT_SUPPORTED 0x27 00085 #define HCI_INSTANT_PASSED 0x28 00086 #define HCI_PAIRING_NOT_SUPPORTED 0x29 00087 #define HCI_TRANSACTION_COLLISION 0x2a 00088 #define HCI_QOS_UNACCEPTABLE_PARAMETER 0x2c 00089 #define HCI_QOS_REJECTED 0x2d 00090 #define HCI_CLASSIFICATION_NOT_SUPPORTED 0x2e 00091 #define HCI_INSUFFICIENT_SECURITY 0x2f 00092 #define HCI_PARAMETER_OUT_OF_RANGE 0x30 00093 #define HCI_ROLE_SWITCH_PENDING 0x32 00094 #define HCI_SLOT_VIOLATION 0x34 00095 #define HCI_ROLE_SWITCH_FAILED 0x35 00096 #define HCI_EIR_TOO_LARGE 0x36 00097 #define HCI_SIMPLE_PAIRING_NOT_SUPPORTED 0x37 00098 #define HCI_HOST_BUSY_PAIRING 0x38 00099 #define HCI_CONN_REJ_NO_CH_FOUND 0x39 00100 #define HCI_CONTROLLER_BUSY 0x3A 00101 #define HCI_UNACCEPTABLE_CONN_INTERV 0x3B 00102 #define HCI_DIRECTED_ADV_TIMEOUT 0x3C 00103 #define HCI_CONN_TERM_MIC_FAIL 0x3D 00104 #define HCI_CONN_FAIL_TO_BE_ESTABL 0x3E 00105 #define HCI_MAC_CONN_FAILED 0x3F 00106 /** 00107 * @} 00108 */ 00109 00110 00111 /* 00112 * HCI library functions. 00113 * Each function returns 0 in case of success, otherwise one of the error codes. 00114 */ 00115 00116 int hci_reset(void); 00117 00118 int hci_disconnect(uint16_t handle, uint8_t reason); 00119 00120 int hci_le_set_advertise_enable(uint8_t enable); 00121 00122 int hci_le_set_advertising_parameters(uint16_t min_interval, uint16_t max_interval, uint8_t advtype, 00123 uint8_t own_bdaddr_type, uint8_t direct_bdaddr_type, const tBDAddr direct_bdaddr, uint8_t chan_map, 00124 uint8_t filter); 00125 00126 int hci_le_set_scan_parameters(uint8_t type, uint16_t interval, 00127 uint16_t window, uint8_t own_bdaddr_type, 00128 uint8_t filter); 00129 00130 int hci_le_set_scan_enable(uint8_t enable, uint8_t filter_dup); 00131 00132 int hci_le_set_advertising_data(uint8_t length, const uint8_t data[]); 00133 00134 int hci_le_set_scan_resp_data(uint8_t length, const uint8_t data[]); 00135 00136 int hci_le_rand(uint8_t random_number[8]); 00137 00138 int hci_le_read_advertising_channel_tx_power(int8_t *tx_power_level); 00139 00140 int hci_acl_data(const uint8_t * data, uint16_t len); 00141 00142 int hci_le_set_random_address(tBDAddr bdaddr); 00143 00144 int hci_read_bd_addr(tBDAddr bdaddr); 00145 00146 int hci_le_read_white_list_size(uint8_t *size); 00147 00148 int hci_le_clear_white_list(void); 00149 00150 int hci_le_add_device_to_white_list(uint8_t bdaddr_type, tBDAddr bdaddr); 00151 00152 int hci_le_remove_device_from_white_list(uint8_t bdaddr_type, tBDAddr bdaddr); 00153 00154 int hci_le_encrypt(uint8_t key[16], uint8_t plaintextData[16], uint8_t encryptedData[16]); 00155 00156 int hci_le_ltk_request_reply(uint8_t key[16]); 00157 00158 int hci_le_ltk_request_neg_reply(void); 00159 00160 int hci_le_read_buffer_size(uint16_t *pkt_len, uint8_t *max_pkt); 00161 00162 int hci_le_create_connection(uint16_t interval, uint16_t window, uint8_t initiator_filter, uint8_t peer_bdaddr_type, 00163 const tBDAddr peer_bdaddr, uint8_t own_bdaddr_type, uint16_t min_interval, uint16_t max_interval, 00164 uint16_t latency, uint16_t supervision_timeout, uint16_t min_ce_length, uint16_t max_ce_length); 00165 00166 int hci_le_create_connection_cancel(void); 00167 00168 int hci_read_transmit_power_level(uint16_t *conn_handle, uint8_t type, int8_t *tx_level); 00169 00170 int hci_read_rssi(uint16_t *conn_handle, int8_t *rssi); 00171 00172 int hci_le_read_local_supported_features(uint8_t *features); 00173 00174 int hci_le_read_channel_map(uint16_t conn_handle, uint8_t ch_map[5]); 00175 00176 int hci_le_read_supported_states(uint8_t states[8]); 00177 00178 int hci_le_receiver_test(uint8_t frequency); 00179 00180 int hci_le_transmitter_test(uint8_t frequency, uint8_t length, uint8_t payload); 00181 00182 int hci_le_test_end(uint16_t *num_pkts); 00183 00184 int hci_le_read_local_version(uint8_t *hci_version, uint16_t *hci_revision, uint8_t *lmp_pal_version, 00185 uint16_t *manufacturer_name, uint16_t *lmp_pal_subversion); 00186 00187 /** 00188 * This function must be used to pass the packet received from the HCI 00189 * interface to the BLE Stack HCI state machine. 00190 * 00191 * @param[in] hciReadPacket The packet that is received from HCI interface. 00192 * 00193 */ 00194 void HCI_Input(tHciDataPacket *hciReadPacket); 00195 00196 /** 00197 * Initialization function. Must be done before any data can be received from 00198 * BLE controller. 00199 */ 00200 void HCI_Init(void); 00201 00202 /** 00203 * Callback used to pass events to application. 00204 * 00205 * @param[in] pckt The event. 00206 * 00207 */ 00208 extern void HCI_Event_CB(void *pckt); 00209 00210 /** 00211 * Processing function that must be called after an event is received from 00212 * HCI interface. Must be called outside ISR. It will call HCI_Event_CB if 00213 * necessary. 00214 */ 00215 void HCI_Process(void); 00216 00217 /** 00218 * @brief Check if queue of HCI event is empty or not. 00219 * @note This funtion can be used to check if the event queue from BlueNRG is empty. This 00220 * is useful when checking if it is safe to go to sleep. 00221 * @return TRUE if event queue is empty. FALSE otherwhise. 00222 */ 00223 BOOL HCI_Queue_Empty(void); 00224 /** 00225 * Iterrupt service routine that must be called when the BlueNRG 00226 * reports a packet received or an event to the host through the 00227 * BlueNRG interrupt line. 00228 */ 00229 #ifdef __DMA_LP__ 00230 void HCI_Isr(uint8_t *buffer, uint8_t event_payload_len); 00231 void HCI_Process_Notification_Request(void); 00232 void HCI_Cmd_Status(HCI_CMD_STATUS_t Hci_Cmd_Status); 00233 void HCI_Wait_For_Response(void); 00234 #else 00235 void HCI_Isr(void); 00236 #endif /* __DMA_LP__ */ 00237 00238 extern tListNode hciReadPktPool; 00239 extern tListNode hciReadPktRxQueue; 00240 00241 #endif /* __HCI_H_ */
Generated on Tue Jul 12 2022 16:31:46 by
