Robotique FIP / Mbed 2 deprecated BlueNRG

Dependencies:   mbed HC_SR04_Ultrasonic_Library

Committer:
julientiron
Date:
Tue May 19 16:43:59 2015 +0000
Revision:
0:3d641e170a74
BLE;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
julientiron 0:3d641e170a74 1 /******************** (C) COPYRIGHT 2012 STMicroelectronics ********************
julientiron 0:3d641e170a74 2 * File Name : hci.h
julientiron 0:3d641e170a74 3 * Author : AMS - HEA&RF BU
julientiron 0:3d641e170a74 4 * Version : V1.0.0
julientiron 0:3d641e170a74 5 * Date : 19-July-2012
julientiron 0:3d641e170a74 6 * Description : Constants and functions for HCI layer. See Bluetooth Core
julientiron 0:3d641e170a74 7 * v 4.0, Vol. 2, Part E.
julientiron 0:3d641e170a74 8 ********************************************************************************
julientiron 0:3d641e170a74 9 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
julientiron 0:3d641e170a74 10 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
julientiron 0:3d641e170a74 11 * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
julientiron 0:3d641e170a74 12 * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
julientiron 0:3d641e170a74 13 * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
julientiron 0:3d641e170a74 14 * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
julientiron 0:3d641e170a74 15 *******************************************************************************/
julientiron 0:3d641e170a74 16
julientiron 0:3d641e170a74 17 #ifndef __HCI_H_
julientiron 0:3d641e170a74 18 #define __HCI_H_
julientiron 0:3d641e170a74 19
julientiron 0:3d641e170a74 20 #include "hal_types.h"
julientiron 0:3d641e170a74 21 #include "link_layer.h"
julientiron 0:3d641e170a74 22 #include <list.h>
julientiron 0:3d641e170a74 23
julientiron 0:3d641e170a74 24
julientiron 0:3d641e170a74 25 #define HCI_PACKET_SIZE 255
julientiron 0:3d641e170a74 26
julientiron 0:3d641e170a74 27
julientiron 0:3d641e170a74 28 /*** Data types ***/
julientiron 0:3d641e170a74 29
julientiron 0:3d641e170a74 30 /* structure used to read received data */
julientiron 0:3d641e170a74 31 typedef struct _tHciDataPacket
julientiron 0:3d641e170a74 32 {
julientiron 0:3d641e170a74 33 tListNode currentNode;
julientiron 0:3d641e170a74 34 uint8_t dataBuff[HCI_PACKET_SIZE];
julientiron 0:3d641e170a74 35 }tHciDataPacket;
julientiron 0:3d641e170a74 36
julientiron 0:3d641e170a74 37
julientiron 0:3d641e170a74 38 /* HCI Error codes */
julientiron 0:3d641e170a74 39 #define HCI_UNKNOWN_COMMAND 0x01
julientiron 0:3d641e170a74 40 #define HCI_NO_CONNECTION 0x02
julientiron 0:3d641e170a74 41 #define HCI_HARDWARE_FAILURE 0x03
julientiron 0:3d641e170a74 42 #define HCI_PAGE_TIMEOUT 0x04
julientiron 0:3d641e170a74 43 #define HCI_AUTHENTICATION_FAILURE 0x05
julientiron 0:3d641e170a74 44 #define HCI_PIN_OR_KEY_MISSING 0x06
julientiron 0:3d641e170a74 45 #define HCI_MEMORY_FULL 0x07
julientiron 0:3d641e170a74 46 #define HCI_CONNECTION_TIMEOUT 0x08
julientiron 0:3d641e170a74 47 #define HCI_MAX_NUMBER_OF_CONNECTIONS 0x09
julientiron 0:3d641e170a74 48 #define HCI_MAX_NUMBER_OF_SCO_CONNECTIONS 0x0a
julientiron 0:3d641e170a74 49 #define HCI_ACL_CONNECTION_EXISTS 0x0b
julientiron 0:3d641e170a74 50 #define HCI_COMMAND_DISALLOWED 0x0c
julientiron 0:3d641e170a74 51 #define HCI_REJECTED_LIMITED_RESOURCES 0x0d
julientiron 0:3d641e170a74 52 #define HCI_REJECTED_SECURITY 0x0e
julientiron 0:3d641e170a74 53 #define HCI_REJECTED_PERSONAL 0x0f
julientiron 0:3d641e170a74 54 #define HCI_HOST_TIMEOUT 0x10
julientiron 0:3d641e170a74 55 #define HCI_UNSUPPORTED_FEATURE 0x11
julientiron 0:3d641e170a74 56 #define HCI_INVALID_PARAMETERS 0x12
julientiron 0:3d641e170a74 57 #define HCI_OE_USER_ENDED_CONNECTION 0x13
julientiron 0:3d641e170a74 58 #define HCI_OE_LOW_RESOURCES 0x14
julientiron 0:3d641e170a74 59 #define HCI_OE_POWER_OFF 0x15
julientiron 0:3d641e170a74 60 #define HCI_CONNECTION_TERMINATED 0x16
julientiron 0:3d641e170a74 61 #define HCI_REPEATED_ATTEMPTS 0x17
julientiron 0:3d641e170a74 62 #define HCI_PAIRING_NOT_ALLOWED 0x18
julientiron 0:3d641e170a74 63 #define HCI_UNKNOWN_LMP_PDU 0x19
julientiron 0:3d641e170a74 64 #define HCI_UNSUPPORTED_REMOTE_FEATURE 0x1a
julientiron 0:3d641e170a74 65 #define HCI_SCO_OFFSET_REJECTED 0x1b
julientiron 0:3d641e170a74 66 #define HCI_SCO_INTERVAL_REJECTED 0x1c
julientiron 0:3d641e170a74 67 #define HCI_AIR_MODE_REJECTED 0x1d
julientiron 0:3d641e170a74 68 #define HCI_INVALID_LMP_PARAMETERS 0x1e
julientiron 0:3d641e170a74 69 #define HCI_UNSPECIFIED_ERROR 0x1f
julientiron 0:3d641e170a74 70 #define HCI_UNSUPPORTED_LMP_PARAMETER_VALUE 0x20
julientiron 0:3d641e170a74 71 #define HCI_ROLE_CHANGE_NOT_ALLOWED 0x21
julientiron 0:3d641e170a74 72 #define HCI_LMP_RESPONSE_TIMEOUT 0x22
julientiron 0:3d641e170a74 73 #define HCI_LMP_ERROR_TRANSACTION_COLLISION 0x23
julientiron 0:3d641e170a74 74 #define HCI_LMP_PDU_NOT_ALLOWED 0x24
julientiron 0:3d641e170a74 75 #define HCI_ENCRYPTION_MODE_NOT_ACCEPTED 0x25
julientiron 0:3d641e170a74 76 #define HCI_UNIT_LINK_KEY_USED 0x26
julientiron 0:3d641e170a74 77 #define HCI_QOS_NOT_SUPPORTED 0x27
julientiron 0:3d641e170a74 78 #define HCI_INSTANT_PASSED 0x28
julientiron 0:3d641e170a74 79 #define HCI_PAIRING_NOT_SUPPORTED 0x29
julientiron 0:3d641e170a74 80 #define HCI_TRANSACTION_COLLISION 0x2a
julientiron 0:3d641e170a74 81 #define HCI_QOS_UNACCEPTABLE_PARAMETER 0x2c
julientiron 0:3d641e170a74 82 #define HCI_QOS_REJECTED 0x2d
julientiron 0:3d641e170a74 83 #define HCI_CLASSIFICATION_NOT_SUPPORTED 0x2e
julientiron 0:3d641e170a74 84 #define HCI_INSUFFICIENT_SECURITY 0x2f
julientiron 0:3d641e170a74 85 #define HCI_PARAMETER_OUT_OF_RANGE 0x30
julientiron 0:3d641e170a74 86 #define HCI_ROLE_SWITCH_PENDING 0x32
julientiron 0:3d641e170a74 87 #define HCI_SLOT_VIOLATION 0x34
julientiron 0:3d641e170a74 88 #define HCI_ROLE_SWITCH_FAILED 0x35
julientiron 0:3d641e170a74 89 #define HCI_EIR_TOO_LARGE 0x36
julientiron 0:3d641e170a74 90 #define HCI_SIMPLE_PAIRING_NOT_SUPPORTED 0x37
julientiron 0:3d641e170a74 91 #define HCI_HOST_BUSY_PAIRING 0x38
julientiron 0:3d641e170a74 92 #define HCI_CONN_REJ_NO_CH_FOUND 0x39
julientiron 0:3d641e170a74 93 #define HCI_CONTROLLER_BUSY 0x3A
julientiron 0:3d641e170a74 94 #define HCI_UNACCEPTABLE_CONN_INTERV 0x3B
julientiron 0:3d641e170a74 95 #define HCI_DIRECTED_ADV_TIMEOUT 0x3C
julientiron 0:3d641e170a74 96 #define HCI_CONN_TERM_MIC_FAIL 0x3D
julientiron 0:3d641e170a74 97 #define HCI_CONN_FAIL_TO_BE_ESTABL 0x3E
julientiron 0:3d641e170a74 98 #define HCI_MAC_CONN_FAILED 0x3F
julientiron 0:3d641e170a74 99
julientiron 0:3d641e170a74 100
julientiron 0:3d641e170a74 101 /*
julientiron 0:3d641e170a74 102 * HCI library functions.
julientiron 0:3d641e170a74 103 * Each function returns 0 in case of success, -1 otherwise.
julientiron 0:3d641e170a74 104 */
julientiron 0:3d641e170a74 105
julientiron 0:3d641e170a74 106 int hci_reset(void);
julientiron 0:3d641e170a74 107
julientiron 0:3d641e170a74 108 int hci_disconnect(uint16_t handle, uint8_t reason);
julientiron 0:3d641e170a74 109
julientiron 0:3d641e170a74 110 int hci_le_set_advertise_enable(tHalUint8 enable);
julientiron 0:3d641e170a74 111
julientiron 0:3d641e170a74 112 int hci_le_set_advertising_parameters(uint16_t min_interval, uint16_t max_interval, uint8_t advtype,
julientiron 0:3d641e170a74 113 uint8_t own_bdaddr_type, uint8_t direct_bdaddr_type, tBDAddr direct_bdaddr, uint8_t chan_map,
julientiron 0:3d641e170a74 114 uint8_t filter);
julientiron 0:3d641e170a74 115
julientiron 0:3d641e170a74 116 int hci_le_set_advertising_data(uint8_t length, const uint8_t data[]);
julientiron 0:3d641e170a74 117
julientiron 0:3d641e170a74 118 int hci_le_set_scan_resp_data(uint8_t length, const uint8_t data[]);
julientiron 0:3d641e170a74 119
julientiron 0:3d641e170a74 120 int hci_le_rand(uint8_t random_number[8]);
julientiron 0:3d641e170a74 121
julientiron 0:3d641e170a74 122 int hci_le_read_advertising_channel_tx_power(int8_t *tx_power_level);
julientiron 0:3d641e170a74 123
julientiron 0:3d641e170a74 124 int hci_acl_data(const uint8_t * data, uint16_t len);
julientiron 0:3d641e170a74 125
julientiron 0:3d641e170a74 126 int hci_le_set_random_address(tBDAddr bdaddr);
julientiron 0:3d641e170a74 127
julientiron 0:3d641e170a74 128 int hci_read_bd_addr(tBDAddr bdaddr);
julientiron 0:3d641e170a74 129
julientiron 0:3d641e170a74 130 int hci_le_read_white_list_size(uint8_t *size);
julientiron 0:3d641e170a74 131
julientiron 0:3d641e170a74 132 int hci_le_clear_white_list();
julientiron 0:3d641e170a74 133
julientiron 0:3d641e170a74 134 int hci_le_add_device_to_white_list(uint8_t bdaddr_type, tBDAddr bdaddr);
julientiron 0:3d641e170a74 135
julientiron 0:3d641e170a74 136 int hci_le_remove_device_from_white_list(uint8_t bdaddr_type, tBDAddr bdaddr);
julientiron 0:3d641e170a74 137
julientiron 0:3d641e170a74 138 int hci_le_encrypt(uint8_t key[16], uint8_t plaintextData[16], uint8_t encryptedData[16]);
julientiron 0:3d641e170a74 139
julientiron 0:3d641e170a74 140 int hci_le_ltk_request_reply(uint8_t key[16]);
julientiron 0:3d641e170a74 141
julientiron 0:3d641e170a74 142 int hci_le_ltk_request_neg_reply();
julientiron 0:3d641e170a74 143
julientiron 0:3d641e170a74 144 int hci_le_read_buffer_size(uint16_t *pkt_len, uint8_t *max_pkt);
julientiron 0:3d641e170a74 145
julientiron 0:3d641e170a74 146 int hci_le_create_connection(uint16_t interval, uint16_t window, uint8_t initiator_filter, uint8_t peer_bdaddr_type,
julientiron 0:3d641e170a74 147 const tBDAddr peer_bdaddr, uint8_t own_bdaddr_type, uint16_t min_interval, uint16_t max_interval,
julientiron 0:3d641e170a74 148 uint16_t latency, uint16_t supervision_timeout, uint16_t min_ce_length, uint16_t max_ce_length);
julientiron 0:3d641e170a74 149
julientiron 0:3d641e170a74 150 int hci_read_transmit_power_level(uint16_t *conn_handle, uint8_t type, int8_t * tx_level);
julientiron 0:3d641e170a74 151
julientiron 0:3d641e170a74 152 int hci_read_rssi(uint16_t *conn_handle, int8_t * rssi);
julientiron 0:3d641e170a74 153
julientiron 0:3d641e170a74 154 int hci_le_read_local_supported_features(uint8_t *features);
julientiron 0:3d641e170a74 155
julientiron 0:3d641e170a74 156 int hci_le_read_channel_map(uint16_t conn_handle, uint8_t ch_map[5]);
julientiron 0:3d641e170a74 157
julientiron 0:3d641e170a74 158 int hci_le_read_supported_states(uint8_t states[8]);
julientiron 0:3d641e170a74 159
julientiron 0:3d641e170a74 160 int hci_le_receiver_test(uint8_t frequency);
julientiron 0:3d641e170a74 161
julientiron 0:3d641e170a74 162 int hci_le_transmitter_test(uint8_t frequency, uint8_t length, uint8_t payload);
julientiron 0:3d641e170a74 163
julientiron 0:3d641e170a74 164 int hci_le_test_end(uint16_t *num_pkts);
julientiron 0:3d641e170a74 165
julientiron 0:3d641e170a74 166 /**
julientiron 0:3d641e170a74 167 * This function must be used to pass the packet received from the HCI
julientiron 0:3d641e170a74 168 * interface to the BLE Stack HCI state machine.
julientiron 0:3d641e170a74 169 *
julientiron 0:3d641e170a74 170 * @param[in] hciReadPacket The packet that is received from HCI interface.
julientiron 0:3d641e170a74 171 *
julientiron 0:3d641e170a74 172 */
julientiron 0:3d641e170a74 173 void HCI_Input(tHciDataPacket * hciReadPacket);
julientiron 0:3d641e170a74 174
julientiron 0:3d641e170a74 175 /**
julientiron 0:3d641e170a74 176 * Initialization function. Must be done before any data can be received from
julientiron 0:3d641e170a74 177 * BLE controller.
julientiron 0:3d641e170a74 178 */
julientiron 0:3d641e170a74 179 void HCI_Init(void);
julientiron 0:3d641e170a74 180
julientiron 0:3d641e170a74 181 /**
julientiron 0:3d641e170a74 182 * Callback used to pass events to application.
julientiron 0:3d641e170a74 183 *
julientiron 0:3d641e170a74 184 * @param[in] pckt The event.
julientiron 0:3d641e170a74 185 *
julientiron 0:3d641e170a74 186 */
julientiron 0:3d641e170a74 187 extern void HCI_Event_CB(void *pckt);
julientiron 0:3d641e170a74 188
julientiron 0:3d641e170a74 189 /**
julientiron 0:3d641e170a74 190 * Processing function that must be called after an event is received from
julientiron 0:3d641e170a74 191 * HCI interface. Must be called outside ISR. It will call HCI_Event_CB if
julientiron 0:3d641e170a74 192 * necessary.
julientiron 0:3d641e170a74 193 */
julientiron 0:3d641e170a74 194 void HCI_Process(void);
julientiron 0:3d641e170a74 195
julientiron 0:3d641e170a74 196
julientiron 0:3d641e170a74 197 extern tListNode hciReadPktPool;
julientiron 0:3d641e170a74 198 extern tListNode hciReadPktRxQueue;
julientiron 0:3d641e170a74 199
julientiron 0:3d641e170a74 200 #endif /* __HCI_H_ */