My fork of X_NUCLEO_IDB0XA1
Fork of X_NUCLEO_IDB0XA1 by
Diff: x-nucleo-idb0xa1/bluenrg-hci/hci.h
- Revision:
- 306:3a7d9f923493
- Parent:
- 252:0c2cb16a7166
- Parent:
- 305:3d978a7bffc9
--- a/x-nucleo-idb0xa1/bluenrg-hci/hci.h Mon Jun 27 15:51:20 2016 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,241 +0,0 @@ -/******************** (C) COPYRIGHT 2012 STMicroelectronics ******************** -* File Name : hci.h -* Author : AMS - HEA&RF BU -* Version : V1.0.0 -* Date : 19-July-2012 -* Description : Constants and functions for HCI layer. See Bluetooth Core -* v 4.0, Vol. 2, Part E. -******************************************************************************** -* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS -* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. -* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, -* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE -* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING -* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. -*******************************************************************************/ - -#ifndef __HCI_H_ -#define __HCI_H_ - -#include "hal_types.h" -#include "link_layer.h" -#include <list.h> - -#define HCI_READ_PACKET_SIZE 128 //71 - -/*** Data types ***/ - -/* structure used to read received data */ -typedef struct _tHciDataPacket -{ - tListNode currentNode; - uint8_t dataBuff[HCI_READ_PACKET_SIZE]; - uint8_t data_len; -} tHciDataPacket; - -typedef enum -{ - BUSY, - AVAILABLE -} HCI_CMD_STATUS_t; - -/** - * @defgroup HCI_Error_codes HCI Error codes - * @{ - */ -#define HCI_UNKNOWN_COMMAND 0x01 -#define HCI_NO_CONNECTION 0x02 -#define HCI_HARDWARE_FAILURE 0x03 -#define HCI_PAGE_TIMEOUT 0x04 -#define HCI_AUTHENTICATION_FAILURE 0x05 -#define HCI_PIN_OR_KEY_MISSING 0x06 -#define HCI_MEMORY_FULL 0x07 -#define HCI_CONNECTION_TIMEOUT 0x08 -#define HCI_MAX_NUMBER_OF_CONNECTIONS 0x09 -#define HCI_MAX_NUMBER_OF_SCO_CONNECTIONS 0x0a -#define HCI_ACL_CONNECTION_EXISTS 0x0b -#define HCI_COMMAND_DISALLOWED 0x0c -#define HCI_REJECTED_LIMITED_RESOURCES 0x0d -#define HCI_REJECTED_SECURITY 0x0e -#define HCI_REJECTED_PERSONAL 0x0f -#define HCI_HOST_TIMEOUT 0x10 -#define HCI_UNSUPPORTED_FEATURE 0x11 -#define HCI_INVALID_PARAMETERS 0x12 -#define HCI_OE_USER_ENDED_CONNECTION 0x13 -#define HCI_OE_LOW_RESOURCES 0x14 -#define HCI_OE_POWER_OFF 0x15 -#define HCI_CONNECTION_TERMINATED 0x16 -#define HCI_REPEATED_ATTEMPTS 0x17 -#define HCI_PAIRING_NOT_ALLOWED 0x18 -#define HCI_UNKNOWN_LMP_PDU 0x19 -#define HCI_UNSUPPORTED_REMOTE_FEATURE 0x1a -#define HCI_SCO_OFFSET_REJECTED 0x1b -#define HCI_SCO_INTERVAL_REJECTED 0x1c -#define HCI_AIR_MODE_REJECTED 0x1d -#define HCI_INVALID_LMP_PARAMETERS 0x1e -#define HCI_UNSPECIFIED_ERROR 0x1f -#define HCI_UNSUPPORTED_LMP_PARAMETER_VALUE 0x20 -#define HCI_ROLE_CHANGE_NOT_ALLOWED 0x21 -#define HCI_LMP_RESPONSE_TIMEOUT 0x22 -#define HCI_LMP_ERROR_TRANSACTION_COLLISION 0x23 -#define HCI_LMP_PDU_NOT_ALLOWED 0x24 -#define HCI_ENCRYPTION_MODE_NOT_ACCEPTED 0x25 -#define HCI_UNIT_LINK_KEY_USED 0x26 -#define HCI_QOS_NOT_SUPPORTED 0x27 -#define HCI_INSTANT_PASSED 0x28 -#define HCI_PAIRING_NOT_SUPPORTED 0x29 -#define HCI_TRANSACTION_COLLISION 0x2a -#define HCI_QOS_UNACCEPTABLE_PARAMETER 0x2c -#define HCI_QOS_REJECTED 0x2d -#define HCI_CLASSIFICATION_NOT_SUPPORTED 0x2e -#define HCI_INSUFFICIENT_SECURITY 0x2f -#define HCI_PARAMETER_OUT_OF_RANGE 0x30 -#define HCI_ROLE_SWITCH_PENDING 0x32 -#define HCI_SLOT_VIOLATION 0x34 -#define HCI_ROLE_SWITCH_FAILED 0x35 -#define HCI_EIR_TOO_LARGE 0x36 -#define HCI_SIMPLE_PAIRING_NOT_SUPPORTED 0x37 -#define HCI_HOST_BUSY_PAIRING 0x38 -#define HCI_CONN_REJ_NO_CH_FOUND 0x39 -#define HCI_CONTROLLER_BUSY 0x3A -#define HCI_UNACCEPTABLE_CONN_INTERV 0x3B -#define HCI_DIRECTED_ADV_TIMEOUT 0x3C -#define HCI_CONN_TERM_MIC_FAIL 0x3D -#define HCI_CONN_FAIL_TO_BE_ESTABL 0x3E -#define HCI_MAC_CONN_FAILED 0x3F -/** - * @} - */ - - -/* - * HCI library functions. - * Each function returns 0 in case of success, otherwise one of the error codes. - */ - -int hci_reset(void); - -int hci_disconnect(uint16_t handle, uint8_t reason); - -int hci_le_set_advertise_enable(uint8_t enable); - -int hci_le_set_advertising_parameters(uint16_t min_interval, uint16_t max_interval, uint8_t advtype, - uint8_t own_bdaddr_type, uint8_t direct_bdaddr_type, const tBDAddr direct_bdaddr, uint8_t chan_map, - uint8_t filter); - -int hci_le_set_scan_parameters(uint8_t type, uint16_t interval, - uint16_t window, uint8_t own_bdaddr_type, - uint8_t filter); - -int hci_le_set_scan_enable(uint8_t enable, uint8_t filter_dup); - -int hci_le_set_advertising_data(uint8_t length, const uint8_t data[]); - -int hci_le_set_scan_resp_data(uint8_t length, const uint8_t data[]); - -int hci_le_rand(uint8_t random_number[8]); - -int hci_le_read_advertising_channel_tx_power(int8_t *tx_power_level); - -int hci_acl_data(const uint8_t * data, uint16_t len); - -int hci_le_set_random_address(tBDAddr bdaddr); - -int hci_read_bd_addr(tBDAddr bdaddr); - -int hci_le_read_white_list_size(uint8_t *size); - -int hci_le_clear_white_list(void); - -int hci_le_add_device_to_white_list(uint8_t bdaddr_type, tBDAddr bdaddr); - -int hci_le_remove_device_from_white_list(uint8_t bdaddr_type, tBDAddr bdaddr); - -int hci_le_encrypt(uint8_t key[16], uint8_t plaintextData[16], uint8_t encryptedData[16]); - -int hci_le_ltk_request_reply(uint8_t key[16]); - -int hci_le_ltk_request_neg_reply(void); - -int hci_le_read_buffer_size(uint16_t *pkt_len, uint8_t *max_pkt); - -int hci_le_create_connection(uint16_t interval, uint16_t window, uint8_t initiator_filter, uint8_t peer_bdaddr_type, - const tBDAddr peer_bdaddr, uint8_t own_bdaddr_type, uint16_t min_interval, uint16_t max_interval, - uint16_t latency, uint16_t supervision_timeout, uint16_t min_ce_length, uint16_t max_ce_length); - -int hci_le_create_connection_cancel(void); - -int hci_read_transmit_power_level(uint16_t *conn_handle, uint8_t type, int8_t *tx_level); - -int hci_read_rssi(uint16_t *conn_handle, int8_t *rssi); - -int hci_le_read_local_supported_features(uint8_t *features); - -int hci_le_read_channel_map(uint16_t conn_handle, uint8_t ch_map[5]); - -int hci_le_read_supported_states(uint8_t states[8]); - -int hci_le_receiver_test(uint8_t frequency); - -int hci_le_transmitter_test(uint8_t frequency, uint8_t length, uint8_t payload); - -int hci_le_test_end(uint16_t *num_pkts); - -int hci_le_read_local_version(uint8_t *hci_version, uint16_t *hci_revision, uint8_t *lmp_pal_version, - uint16_t *manufacturer_name, uint16_t *lmp_pal_subversion); - -/** - * This function must be used to pass the packet received from the HCI - * interface to the BLE Stack HCI state machine. - * - * @param[in] hciReadPacket The packet that is received from HCI interface. - * - */ -void HCI_Input(tHciDataPacket *hciReadPacket); - -/** - * Initialization function. Must be done before any data can be received from - * BLE controller. - */ -void HCI_Init(void); - -/** - * Callback used to pass events to application. - * - * @param[in] pckt The event. - * - */ -extern void HCI_Event_CB(void *pckt); - -/** - * Processing function that must be called after an event is received from - * HCI interface. Must be called outside ISR. It will call HCI_Event_CB if - * necessary. -*/ -void HCI_Process(void); - -/** - * @brief Check if queue of HCI event is empty or not. - * @note This funtion can be used to check if the event queue from BlueNRG is empty. This - * is useful when checking if it is safe to go to sleep. - * @return TRUE if event queue is empty. FALSE otherwhise. - */ -BOOL HCI_Queue_Empty(void); -/** - * Iterrupt service routine that must be called when the BlueNRG - * reports a packet received or an event to the host through the - * BlueNRG interrupt line. - */ -#ifdef __DMA_LP__ -void HCI_Isr(uint8_t *buffer, uint8_t event_payload_len); -void HCI_Process_Notification_Request(void); -void HCI_Cmd_Status(HCI_CMD_STATUS_t Hci_Cmd_Status); -void HCI_Wait_For_Response(void); -#else -void HCI_Isr(void); -#endif /* __DMA_LP__ */ - -extern tListNode hciReadPktPool; -extern tListNode hciReadPktRxQueue; - -#endif /* __HCI_H_ */