Adapted to OBCP ENSMM
Dependents: SimpleBLE-ObCP_ENSMM_V2019_Test_BLE_S SimpleBLE-ObCp_test-BLE_envoi SimpleBLE-ObCp_test-BLE Roller_catcher_Envoi ... more
x-nucleo-idb0xa1/bluenrg-hci/ble_hci_const.h@309:b173b83b9e64, 2021-02-04 (annotated)
- Committer:
- dorianvoydie
- Date:
- Thu Feb 04 16:03:32 2021 +0000
- Revision:
- 309:b173b83b9e64
- Parent:
- 285:0e1570840658
Ce programme correspond a la cellule de depart du systeme "Laser Gate Timer" developpe par Tanguy KESSELY et Dorian VOYDIE. Il utilise une carte Nucleo F411, un shield BLE IDB05A1 et un PCB fait maison
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Wolfgang Betz |
132:51056160fa4a | 1 | /****************************************************************************** |
Wolfgang Betz |
132:51056160fa4a | 2 | * |
Wolfgang Betz |
132:51056160fa4a | 3 | * File Description |
Wolfgang Betz |
132:51056160fa4a | 4 | * --------------------- |
Wolfgang Betz |
132:51056160fa4a | 5 | * This file defines constants and functions for HCI layer. |
Wolfgang Betz |
132:51056160fa4a | 6 | * See Bluetooth Core v 4.0, Vol. 2, Part E. |
Wolfgang Betz |
132:51056160fa4a | 7 | * |
Wolfgang Betz |
132:51056160fa4a | 8 | *******************************************************************************/ |
Wolfgang Betz |
132:51056160fa4a | 9 | |
Wolfgang Betz |
132:51056160fa4a | 10 | #ifndef __HCI_INTERNAL_H_ |
Wolfgang Betz |
132:51056160fa4a | 11 | #define __HCI_INTERNAL_H_ |
Wolfgang Betz |
132:51056160fa4a | 12 | |
Vincent Coubard |
285:0e1570840658 | 13 | #include "ble_compiler.h" |
Vincent Coubard |
285:0e1570840658 | 14 | #include "ble_hal_types.h" |
Vincent Coubard |
285:0e1570840658 | 15 | #include "ble_clock.h" |
Vincent Coubard |
285:0e1570840658 | 16 | #include "ble_link_layer.h" |
Vincent Coubard |
285:0e1570840658 | 17 | #include "ble_hci.h" |
Wolfgang Betz |
132:51056160fa4a | 18 | |
Wolfgang Betz |
132:51056160fa4a | 19 | #define DEFAULT_TIMEOUT (CLOCK_SECOND/10) |
Wolfgang Betz |
132:51056160fa4a | 20 | |
Wolfgang Betz |
132:51056160fa4a | 21 | /** |
Wolfgang Betz |
132:51056160fa4a | 22 | * Maximum payload of HCI commands that can be sent. Change this value if needed. |
Wolfgang Betz |
132:51056160fa4a | 23 | * This value can be up to 255. |
Wolfgang Betz |
132:51056160fa4a | 24 | */ |
Wolfgang Betz |
132:51056160fa4a | 25 | #define HCI_MAX_PAYLOAD_SIZE 128 |
Wolfgang Betz |
132:51056160fa4a | 26 | |
Wolfgang Betz |
132:51056160fa4a | 27 | /* HCI Packet types */ |
Wolfgang Betz |
132:51056160fa4a | 28 | #define HCI_COMMAND_PKT 0x01 |
Wolfgang Betz |
132:51056160fa4a | 29 | #define HCI_ACLDATA_PKT 0x02 |
Wolfgang Betz |
132:51056160fa4a | 30 | #define HCI_SCODATA_PKT 0x03 |
Wolfgang Betz |
132:51056160fa4a | 31 | #define HCI_EVENT_PKT 0x04 |
Wolfgang Betz |
132:51056160fa4a | 32 | #define HCI_VENDOR_PKT 0xff |
Wolfgang Betz |
132:51056160fa4a | 33 | |
Wolfgang Betz |
132:51056160fa4a | 34 | typedef __packed struct _hci_uart_pckt{ |
Wolfgang Betz |
132:51056160fa4a | 35 | uint8_t type; |
Wolfgang Betz |
132:51056160fa4a | 36 | uint8_t data[VARIABLE_SIZE]; |
Wolfgang Betz |
132:51056160fa4a | 37 | } PACKED hci_uart_pckt; |
Wolfgang Betz |
132:51056160fa4a | 38 | #define HCI_HDR_SIZE 1 |
Wolfgang Betz |
132:51056160fa4a | 39 | |
Wolfgang Betz |
132:51056160fa4a | 40 | typedef __packed struct _hci_command_hdr{ |
Wolfgang Betz |
132:51056160fa4a | 41 | uint16_t opcode; /* OCF & OGF */ |
Wolfgang Betz |
132:51056160fa4a | 42 | uint8_t plen; |
Wolfgang Betz |
132:51056160fa4a | 43 | } PACKED hci_command_hdr; |
Wolfgang Betz |
132:51056160fa4a | 44 | #define HCI_COMMAND_HDR_SIZE 3 |
Wolfgang Betz |
132:51056160fa4a | 45 | |
Wolfgang Betz |
132:51056160fa4a | 46 | typedef __packed struct _hci_event_pckt{ |
Wolfgang Betz |
132:51056160fa4a | 47 | uint8_t evt; |
Wolfgang Betz |
132:51056160fa4a | 48 | uint8_t plen; |
Wolfgang Betz |
132:51056160fa4a | 49 | uint8_t data[VARIABLE_SIZE]; |
Wolfgang Betz |
132:51056160fa4a | 50 | } PACKED hci_event_pckt; |
Wolfgang Betz |
132:51056160fa4a | 51 | #define HCI_EVENT_HDR_SIZE 2 |
Wolfgang Betz |
132:51056160fa4a | 52 | |
Wolfgang Betz |
132:51056160fa4a | 53 | typedef __packed struct _hci_acl_hdr{ |
Wolfgang Betz |
132:51056160fa4a | 54 | uint16_t handle; /* Handle & Flags(PB, BC) */ |
Wolfgang Betz |
132:51056160fa4a | 55 | uint16_t dlen; |
Wolfgang Betz |
132:51056160fa4a | 56 | } PACKED hci_acl_hdr; |
Wolfgang Betz |
132:51056160fa4a | 57 | #define HCI_ACL_HDR_SIZE 4 |
Wolfgang Betz |
132:51056160fa4a | 58 | |
Wolfgang Betz |
132:51056160fa4a | 59 | /* Link Control */ |
Wolfgang Betz |
132:51056160fa4a | 60 | #define OGF_LINK_CTL 0x01 |
Wolfgang Betz |
132:51056160fa4a | 61 | |
Wolfgang Betz |
132:51056160fa4a | 62 | #define OCF_DISCONNECT 0x0006 |
Wolfgang Betz |
132:51056160fa4a | 63 | typedef __packed struct _disconnect_cp{ |
Wolfgang Betz |
132:51056160fa4a | 64 | uint16_t handle; |
Wolfgang Betz |
132:51056160fa4a | 65 | uint8_t reason; |
Wolfgang Betz |
132:51056160fa4a | 66 | } PACKED disconnect_cp; |
Wolfgang Betz |
132:51056160fa4a | 67 | #define DISCONNECT_CP_SIZE 3 |
Wolfgang Betz |
132:51056160fa4a | 68 | |
Wolfgang Betz |
132:51056160fa4a | 69 | /* Host Controller and Baseband */ |
Wolfgang Betz |
132:51056160fa4a | 70 | #define OGF_HOST_CTL 0x03 |
Wolfgang Betz |
132:51056160fa4a | 71 | |
Wolfgang Betz |
132:51056160fa4a | 72 | #define OCF_SET_EVENT_MASK 0x0001 |
Wolfgang Betz |
132:51056160fa4a | 73 | #define OCF_RESET 0x0003 |
Wolfgang Betz |
132:51056160fa4a | 74 | |
Wolfgang Betz |
132:51056160fa4a | 75 | #define OCF_READ_TRANSMIT_POWER_LEVEL 0x002D |
Wolfgang Betz |
132:51056160fa4a | 76 | typedef __packed struct _read_transmit_power_level_cp{ |
Wolfgang Betz |
132:51056160fa4a | 77 | uint16_t handle; |
Wolfgang Betz |
132:51056160fa4a | 78 | uint8_t type; |
Wolfgang Betz |
132:51056160fa4a | 79 | } PACKED read_transmit_power_level_cp; |
Wolfgang Betz |
132:51056160fa4a | 80 | #define READ_TRANSMIT_POWER_LEVEL_CP_SIZE 3 |
Wolfgang Betz |
132:51056160fa4a | 81 | typedef __packed struct _read_transmit_power_level_rp{ |
Wolfgang Betz |
132:51056160fa4a | 82 | uint8_t status; |
Wolfgang Betz |
132:51056160fa4a | 83 | uint16_t handle; |
Wolfgang Betz |
132:51056160fa4a | 84 | int8_t level; |
Wolfgang Betz |
132:51056160fa4a | 85 | } PACKED read_transmit_power_level_rp; |
Wolfgang Betz |
132:51056160fa4a | 86 | #define READ_TRANSMIT_POWER_LEVEL_RP_SIZE 4 |
Wolfgang Betz |
132:51056160fa4a | 87 | |
Wolfgang Betz |
132:51056160fa4a | 88 | #define OCF_SET_CONTROLLER_TO_HOST_FC 0x0031 |
Wolfgang Betz |
132:51056160fa4a | 89 | #define OCF_HOST_BUFFER_SIZE 0x0033 |
Wolfgang Betz |
132:51056160fa4a | 90 | #define OCF_HOST_NUM_COMP_PKTS 0x0035 |
Wolfgang Betz |
132:51056160fa4a | 91 | |
Wolfgang Betz |
132:51056160fa4a | 92 | /* Informational Parameters */ |
Wolfgang Betz |
132:51056160fa4a | 93 | #define OGF_INFO_PARAM 0x04 |
Wolfgang Betz |
132:51056160fa4a | 94 | |
Wolfgang Betz |
132:51056160fa4a | 95 | #define OCF_READ_LOCAL_VERSION 0x0001 |
Wolfgang Betz |
132:51056160fa4a | 96 | typedef __packed struct _read_local_version_rp{ |
Wolfgang Betz |
132:51056160fa4a | 97 | uint8_t status; |
Wolfgang Betz |
132:51056160fa4a | 98 | uint8_t hci_version; |
Wolfgang Betz |
132:51056160fa4a | 99 | uint16_t hci_revision; |
Wolfgang Betz |
132:51056160fa4a | 100 | uint8_t lmp_pal_version; |
Wolfgang Betz |
132:51056160fa4a | 101 | uint16_t manufacturer_name; |
Wolfgang Betz |
132:51056160fa4a | 102 | uint16_t lmp_pal_subversion; |
Wolfgang Betz |
132:51056160fa4a | 103 | } PACKED read_local_version_rp; |
Wolfgang Betz |
132:51056160fa4a | 104 | #define READ_LOCAL_VERSION_RP_SIZE 9 |
Wolfgang Betz |
132:51056160fa4a | 105 | |
Wolfgang Betz |
132:51056160fa4a | 106 | #define OCF_READ_LOCAL_COMMANDS 0x0002 |
Wolfgang Betz |
132:51056160fa4a | 107 | #define OCF_READ_LOCAL_FEATURES 0x0003 |
Wolfgang Betz |
132:51056160fa4a | 108 | |
Wolfgang Betz |
132:51056160fa4a | 109 | #define OCF_READ_BD_ADDR 0x0009 |
Wolfgang Betz |
132:51056160fa4a | 110 | typedef __packed struct _read_bd_addr_rp{ |
Wolfgang Betz |
132:51056160fa4a | 111 | uint8_t status; |
Wolfgang Betz |
132:51056160fa4a | 112 | tBDAddr bdaddr; |
Wolfgang Betz |
132:51056160fa4a | 113 | } PACKED read_bd_addr_rp; |
Wolfgang Betz |
132:51056160fa4a | 114 | #define READ_BD_ADDR_RP_SIZE 7 |
Wolfgang Betz |
132:51056160fa4a | 115 | |
Wolfgang Betz |
132:51056160fa4a | 116 | /* Status params */ |
Wolfgang Betz |
132:51056160fa4a | 117 | #define OGF_STATUS_PARAM 0x05 |
Wolfgang Betz |
132:51056160fa4a | 118 | |
Wolfgang Betz |
132:51056160fa4a | 119 | #define OCF_READ_RSSI 0x0005 |
Wolfgang Betz |
132:51056160fa4a | 120 | typedef __packed struct _read_rssi_cp{ |
Wolfgang Betz |
132:51056160fa4a | 121 | uint16_t handle; |
Wolfgang Betz |
132:51056160fa4a | 122 | } PACKED read_rssi_cp; |
Wolfgang Betz |
132:51056160fa4a | 123 | #define READ_RSSI_CP_SIZE 2 |
Wolfgang Betz |
132:51056160fa4a | 124 | typedef __packed struct _read_rssi_rp{ |
Wolfgang Betz |
132:51056160fa4a | 125 | uint8_t status; |
Wolfgang Betz |
132:51056160fa4a | 126 | uint16_t handle; |
Wolfgang Betz |
132:51056160fa4a | 127 | int8_t rssi; |
Wolfgang Betz |
132:51056160fa4a | 128 | } PACKED read_rssi_rp; |
Wolfgang Betz |
132:51056160fa4a | 129 | #define READ_RSSI_RP_SIZE 4 |
Wolfgang Betz |
132:51056160fa4a | 130 | |
Wolfgang Betz |
132:51056160fa4a | 131 | |
Wolfgang Betz |
132:51056160fa4a | 132 | /* LE commands */ |
Wolfgang Betz |
132:51056160fa4a | 133 | #define OGF_LE_CTL 0x08 |
Wolfgang Betz |
132:51056160fa4a | 134 | |
Wolfgang Betz |
132:51056160fa4a | 135 | #define OCF_LE_SET_EVENT_MASK 0x0001 |
Wolfgang Betz |
132:51056160fa4a | 136 | typedef __packed struct _le_set_event_mask_cp{ |
Wolfgang Betz |
132:51056160fa4a | 137 | uint8_t mask[8]; |
Wolfgang Betz |
132:51056160fa4a | 138 | } PACKED le_set_event_mask_cp; |
Wolfgang Betz |
132:51056160fa4a | 139 | #define LE_SET_EVENT_MASK_CP_SIZE 8 |
Wolfgang Betz |
132:51056160fa4a | 140 | |
Wolfgang Betz |
132:51056160fa4a | 141 | #define OCF_LE_READ_BUFFER_SIZE 0x0002 |
Wolfgang Betz |
132:51056160fa4a | 142 | typedef __packed struct _le_read_buffer_size_rp{ |
Wolfgang Betz |
132:51056160fa4a | 143 | uint8_t status; |
Wolfgang Betz |
132:51056160fa4a | 144 | uint16_t pkt_len; |
Wolfgang Betz |
132:51056160fa4a | 145 | uint8_t max_pkt; |
Wolfgang Betz |
132:51056160fa4a | 146 | } PACKED le_read_buffer_size_rp; |
Wolfgang Betz |
132:51056160fa4a | 147 | #define LE_READ_BUFFER_SIZE_RP_SIZE 4 |
Wolfgang Betz |
132:51056160fa4a | 148 | |
Wolfgang Betz |
132:51056160fa4a | 149 | #define OCF_LE_READ_LOCAL_SUPPORTED_FEATURES 0x0003 |
Wolfgang Betz |
132:51056160fa4a | 150 | typedef __packed struct _le_read_local_supported_features_rp{ |
Wolfgang Betz |
132:51056160fa4a | 151 | uint8_t status; |
Wolfgang Betz |
132:51056160fa4a | 152 | uint8_t features[8]; |
Wolfgang Betz |
132:51056160fa4a | 153 | } PACKED le_read_local_supported_features_rp; |
Wolfgang Betz |
132:51056160fa4a | 154 | #define LE_READ_LOCAL_SUPPORTED_FEATURES_RP_SIZE 9 |
Wolfgang Betz |
132:51056160fa4a | 155 | |
Wolfgang Betz |
132:51056160fa4a | 156 | #define OCF_LE_SET_RANDOM_ADDRESS 0x0005 |
Wolfgang Betz |
132:51056160fa4a | 157 | typedef __packed struct _le_set_random_address_cp{ |
Wolfgang Betz |
132:51056160fa4a | 158 | tBDAddr bdaddr; |
Wolfgang Betz |
132:51056160fa4a | 159 | } PACKED le_set_random_address_cp; |
Wolfgang Betz |
132:51056160fa4a | 160 | #define LE_SET_RANDOM_ADDRESS_CP_SIZE 6 |
Wolfgang Betz |
132:51056160fa4a | 161 | |
Wolfgang Betz |
132:51056160fa4a | 162 | #define OCF_LE_SET_ADV_PARAMETERS 0x0006 |
Wolfgang Betz |
132:51056160fa4a | 163 | typedef __packed struct _le_set_adv_parameters_cp{ |
Wolfgang Betz |
132:51056160fa4a | 164 | uint16_t min_interval; |
Wolfgang Betz |
132:51056160fa4a | 165 | uint16_t max_interval; |
Wolfgang Betz |
132:51056160fa4a | 166 | uint8_t advtype; |
Wolfgang Betz |
132:51056160fa4a | 167 | uint8_t own_bdaddr_type; |
Wolfgang Betz |
132:51056160fa4a | 168 | uint8_t direct_bdaddr_type; |
Wolfgang Betz |
132:51056160fa4a | 169 | tBDAddr direct_bdaddr; |
Wolfgang Betz |
132:51056160fa4a | 170 | uint8_t chan_map; |
Wolfgang Betz |
132:51056160fa4a | 171 | uint8_t filter; |
Wolfgang Betz |
132:51056160fa4a | 172 | } PACKED le_set_adv_parameters_cp; |
Wolfgang Betz |
132:51056160fa4a | 173 | #define LE_SET_ADV_PARAMETERS_CP_SIZE 15 |
Wolfgang Betz |
132:51056160fa4a | 174 | |
Wolfgang Betz |
132:51056160fa4a | 175 | #define OCF_LE_READ_ADV_CHANNEL_TX_POWER 0x0007 |
Wolfgang Betz |
132:51056160fa4a | 176 | typedef __packed struct _le_read_adv_channel_tx_power_rp{ |
Wolfgang Betz |
132:51056160fa4a | 177 | uint8_t status; |
Wolfgang Betz |
132:51056160fa4a | 178 | int8_t level; |
Wolfgang Betz |
132:51056160fa4a | 179 | } PACKED le_read_adv_channel_tx_power_rp; |
Wolfgang Betz |
132:51056160fa4a | 180 | #define LE_READ_ADV_CHANNEL_TX_POWER_RP_SIZE 2 |
Wolfgang Betz |
132:51056160fa4a | 181 | |
Wolfgang Betz |
132:51056160fa4a | 182 | #define OCF_LE_SET_ADV_DATA 0x0008 |
Wolfgang Betz |
132:51056160fa4a | 183 | typedef __packed struct _le_set_adv_data_cp{ |
Wolfgang Betz |
132:51056160fa4a | 184 | uint8_t length; |
Wolfgang Betz |
132:51056160fa4a | 185 | uint8_t data[31]; |
Wolfgang Betz |
132:51056160fa4a | 186 | } PACKED le_set_adv_data_cp; |
Wolfgang Betz |
132:51056160fa4a | 187 | #define LE_SET_ADV_DATA_CP_SIZE 32 |
Wolfgang Betz |
132:51056160fa4a | 188 | |
Wolfgang Betz |
132:51056160fa4a | 189 | #define OCF_LE_SET_SCAN_RESPONSE_DATA 0x0009 |
Wolfgang Betz |
132:51056160fa4a | 190 | typedef __packed struct _le_set_scan_response_data_cp{ |
Wolfgang Betz |
132:51056160fa4a | 191 | uint8_t length; |
Wolfgang Betz |
132:51056160fa4a | 192 | uint8_t data[31]; |
Wolfgang Betz |
132:51056160fa4a | 193 | } PACKED le_set_scan_response_data_cp; |
Wolfgang Betz |
132:51056160fa4a | 194 | #define LE_SET_SCAN_RESPONSE_DATA_CP_SIZE 32 |
Wolfgang Betz |
132:51056160fa4a | 195 | |
Wolfgang Betz |
132:51056160fa4a | 196 | #define OCF_LE_SET_ADVERTISE_ENABLE 0x000A |
Wolfgang Betz |
132:51056160fa4a | 197 | typedef __packed struct _le_set_advertise_enable_cp{ |
Wolfgang Betz |
132:51056160fa4a | 198 | uint8_t enable; |
Wolfgang Betz |
132:51056160fa4a | 199 | } PACKED le_set_advertise_enable_cp; |
Wolfgang Betz |
132:51056160fa4a | 200 | #define LE_SET_ADVERTISE_ENABLE_CP_SIZE 1 |
Wolfgang Betz |
132:51056160fa4a | 201 | |
Wolfgang Betz |
132:51056160fa4a | 202 | #define OCF_LE_SET_SCAN_PARAMETERS 0x000B |
Wolfgang Betz |
132:51056160fa4a | 203 | typedef __packed struct _le_set_scan_parameters_cp{ |
Wolfgang Betz |
132:51056160fa4a | 204 | uint8_t type; |
Wolfgang Betz |
132:51056160fa4a | 205 | uint16_t interval; |
Wolfgang Betz |
132:51056160fa4a | 206 | uint16_t window; |
Wolfgang Betz |
132:51056160fa4a | 207 | uint8_t own_bdaddr_type; |
Wolfgang Betz |
132:51056160fa4a | 208 | uint8_t filter; |
Wolfgang Betz |
132:51056160fa4a | 209 | } PACKED le_set_scan_parameters_cp; |
Wolfgang Betz |
132:51056160fa4a | 210 | #define LE_SET_SCAN_PARAMETERS_CP_SIZE 7 |
Wolfgang Betz |
132:51056160fa4a | 211 | |
Wolfgang Betz |
132:51056160fa4a | 212 | #define OCF_LE_SET_SCAN_ENABLE 0x000C |
Wolfgang Betz |
132:51056160fa4a | 213 | typedef __packed struct _le_set_scan_enable_cp{ |
Wolfgang Betz |
132:51056160fa4a | 214 | uint8_t enable; |
Wolfgang Betz |
132:51056160fa4a | 215 | uint8_t filter_dup; |
Wolfgang Betz |
132:51056160fa4a | 216 | } PACKED le_set_scan_enable_cp; |
Wolfgang Betz |
132:51056160fa4a | 217 | #define LE_SET_SCAN_ENABLE_CP_SIZE 2 |
Wolfgang Betz |
132:51056160fa4a | 218 | |
Wolfgang Betz |
132:51056160fa4a | 219 | #define OCF_LE_CREATE_CONN 0x000D |
Wolfgang Betz |
132:51056160fa4a | 220 | typedef __packed struct _le_create_connection_cp{ |
Wolfgang Betz |
132:51056160fa4a | 221 | uint16_t interval; |
Wolfgang Betz |
132:51056160fa4a | 222 | uint16_t window; |
Wolfgang Betz |
132:51056160fa4a | 223 | uint8_t initiator_filter; |
Wolfgang Betz |
132:51056160fa4a | 224 | uint8_t peer_bdaddr_type; |
Wolfgang Betz |
132:51056160fa4a | 225 | tBDAddr peer_bdaddr; |
Wolfgang Betz |
132:51056160fa4a | 226 | uint8_t own_bdaddr_type; |
Wolfgang Betz |
132:51056160fa4a | 227 | uint16_t min_interval; |
Wolfgang Betz |
132:51056160fa4a | 228 | uint16_t max_interval; |
Wolfgang Betz |
132:51056160fa4a | 229 | uint16_t latency; |
Wolfgang Betz |
132:51056160fa4a | 230 | uint16_t supervision_timeout; |
Wolfgang Betz |
132:51056160fa4a | 231 | uint16_t min_ce_length; |
Wolfgang Betz |
132:51056160fa4a | 232 | uint16_t max_ce_length; |
Wolfgang Betz |
132:51056160fa4a | 233 | } PACKED le_create_connection_cp; |
Wolfgang Betz |
132:51056160fa4a | 234 | #define LE_CREATE_CONN_CP_SIZE 25 |
Wolfgang Betz |
132:51056160fa4a | 235 | |
Wolfgang Betz |
132:51056160fa4a | 236 | #define OCF_LE_CREATE_CONN_CANCEL 0x000E |
Wolfgang Betz |
132:51056160fa4a | 237 | |
Wolfgang Betz |
132:51056160fa4a | 238 | #define OCF_LE_READ_WHITE_LIST_SIZE 0x000F |
Wolfgang Betz |
132:51056160fa4a | 239 | typedef __packed struct _le_read_white_list_size_rp{ |
Wolfgang Betz |
132:51056160fa4a | 240 | uint8_t status; |
Wolfgang Betz |
132:51056160fa4a | 241 | uint8_t size; |
Wolfgang Betz |
132:51056160fa4a | 242 | } PACKED le_read_white_list_size_rp; |
Wolfgang Betz |
132:51056160fa4a | 243 | #define LE_READ_WHITE_LIST_SIZE_RP_SIZE 2 |
Wolfgang Betz |
132:51056160fa4a | 244 | |
Wolfgang Betz |
132:51056160fa4a | 245 | #define OCF_LE_CLEAR_WHITE_LIST 0x0010 |
Wolfgang Betz |
132:51056160fa4a | 246 | |
Wolfgang Betz |
132:51056160fa4a | 247 | #define OCF_LE_ADD_DEVICE_TO_WHITE_LIST 0x0011 |
Wolfgang Betz |
132:51056160fa4a | 248 | typedef __packed struct _le_add_device_to_white_list_cp{ |
Wolfgang Betz |
132:51056160fa4a | 249 | uint8_t bdaddr_type; |
Wolfgang Betz |
132:51056160fa4a | 250 | tBDAddr bdaddr; |
Wolfgang Betz |
132:51056160fa4a | 251 | } PACKED le_add_device_to_white_list_cp; |
Wolfgang Betz |
132:51056160fa4a | 252 | #define LE_ADD_DEVICE_TO_WHITE_LIST_CP_SIZE 7 |
Wolfgang Betz |
132:51056160fa4a | 253 | |
Wolfgang Betz |
132:51056160fa4a | 254 | #define OCF_LE_REMOVE_DEVICE_FROM_WHITE_LIST 0x0012 |
Wolfgang Betz |
132:51056160fa4a | 255 | typedef __packed struct _le_remove_device_from_white_list_cp{ |
Wolfgang Betz |
132:51056160fa4a | 256 | uint8_t bdaddr_type; |
Wolfgang Betz |
132:51056160fa4a | 257 | tBDAddr bdaddr; |
Wolfgang Betz |
132:51056160fa4a | 258 | } PACKED le_remove_device_from_white_list_cp; |
Wolfgang Betz |
132:51056160fa4a | 259 | #define LE_REMOVE_DEVICE_FROM_WHITE_LIST_CP_SIZE 7 |
Wolfgang Betz |
132:51056160fa4a | 260 | |
Wolfgang Betz |
132:51056160fa4a | 261 | #define OCF_LE_CONN_UPDATE 0x0013 |
Wolfgang Betz |
132:51056160fa4a | 262 | typedef __packed struct _le_connection_update_cp{ |
Wolfgang Betz |
132:51056160fa4a | 263 | uint16_t handle; |
Wolfgang Betz |
132:51056160fa4a | 264 | uint16_t min_interval; |
Wolfgang Betz |
132:51056160fa4a | 265 | uint16_t max_interval; |
Wolfgang Betz |
132:51056160fa4a | 266 | uint16_t latency; |
Wolfgang Betz |
132:51056160fa4a | 267 | uint16_t supervision_timeout; |
Wolfgang Betz |
132:51056160fa4a | 268 | uint16_t min_ce_length; |
Wolfgang Betz |
132:51056160fa4a | 269 | uint16_t max_ce_length; |
Wolfgang Betz |
132:51056160fa4a | 270 | } PACKED le_connection_update_cp; |
Wolfgang Betz |
132:51056160fa4a | 271 | #define LE_CONN_UPDATE_CP_SIZE 14 |
Wolfgang Betz |
132:51056160fa4a | 272 | |
Wolfgang Betz |
132:51056160fa4a | 273 | #define OCF_LE_SET_HOST_CHANNEL_CLASSIFICATION 0x0014 |
Wolfgang Betz |
132:51056160fa4a | 274 | typedef __packed struct _le_set_host_channel_classification_cp{ |
Wolfgang Betz |
132:51056160fa4a | 275 | uint8_t map[5]; |
Wolfgang Betz |
132:51056160fa4a | 276 | } PACKED le_set_host_channel_classification_cp; |
Wolfgang Betz |
132:51056160fa4a | 277 | #define LE_SET_HOST_CHANNEL_CLASSIFICATION_CP_SIZE 5 |
Wolfgang Betz |
132:51056160fa4a | 278 | |
Wolfgang Betz |
132:51056160fa4a | 279 | #define OCF_LE_READ_CHANNEL_MAP 0x0015 |
Wolfgang Betz |
132:51056160fa4a | 280 | typedef __packed struct _le_read_channel_map_cp{ |
Wolfgang Betz |
132:51056160fa4a | 281 | uint16_t handle; |
Wolfgang Betz |
132:51056160fa4a | 282 | } PACKED le_read_channel_map_cp; |
Wolfgang Betz |
132:51056160fa4a | 283 | #define LE_READ_CHANNEL_MAP_CP_SIZE 2 |
Wolfgang Betz |
132:51056160fa4a | 284 | |
Wolfgang Betz |
132:51056160fa4a | 285 | typedef __packed struct _le_read_channel_map_rp{ |
Wolfgang Betz |
132:51056160fa4a | 286 | uint8_t status; |
Wolfgang Betz |
132:51056160fa4a | 287 | uint16_t handle; |
Wolfgang Betz |
132:51056160fa4a | 288 | uint8_t map[5]; |
Andrea Palmieri |
229:9981f62cdb1a | 289 | } PACKED le_read_channel_map_rp; |
Wolfgang Betz |
132:51056160fa4a | 290 | #define LE_READ_CHANNEL_MAP_RP_SIZE 8 |
Wolfgang Betz |
132:51056160fa4a | 291 | |
Wolfgang Betz |
132:51056160fa4a | 292 | #define OCF_LE_READ_REMOTE_USED_FEATURES 0x0016 |
Wolfgang Betz |
132:51056160fa4a | 293 | typedef __packed struct _le_read_remote_used_features_cp{ |
Wolfgang Betz |
132:51056160fa4a | 294 | uint16_t handle; |
Wolfgang Betz |
132:51056160fa4a | 295 | } PACKED le_read_remote_used_features_cp; |
Wolfgang Betz |
132:51056160fa4a | 296 | #define LE_READ_REMOTE_USED_FEATURES_CP_SIZE 2 |
Wolfgang Betz |
132:51056160fa4a | 297 | |
Wolfgang Betz |
132:51056160fa4a | 298 | #define OCF_LE_ENCRYPT 0x0017 |
Wolfgang Betz |
132:51056160fa4a | 299 | typedef __packed struct _le_encrypt_cp{ |
Wolfgang Betz |
132:51056160fa4a | 300 | uint8_t key[16]; |
Wolfgang Betz |
132:51056160fa4a | 301 | uint8_t plaintext[16]; |
Wolfgang Betz |
132:51056160fa4a | 302 | } PACKED le_encrypt_cp; |
Wolfgang Betz |
132:51056160fa4a | 303 | #define LE_ENCRYPT_CP_SIZE 32 |
Wolfgang Betz |
132:51056160fa4a | 304 | |
Wolfgang Betz |
132:51056160fa4a | 305 | typedef __packed struct _le_encrypt_rp{ |
Wolfgang Betz |
132:51056160fa4a | 306 | uint8_t status; |
Wolfgang Betz |
132:51056160fa4a | 307 | uint8_t encdata[16]; |
Wolfgang Betz |
132:51056160fa4a | 308 | } PACKED le_encrypt_rp; |
Wolfgang Betz |
132:51056160fa4a | 309 | #define LE_ENCRYPT_RP_SIZE 17 |
Wolfgang Betz |
132:51056160fa4a | 310 | |
Wolfgang Betz |
132:51056160fa4a | 311 | #define OCF_LE_RAND 0x0018 |
Wolfgang Betz |
132:51056160fa4a | 312 | typedef __packed struct _le_rand_rp{ |
Wolfgang Betz |
132:51056160fa4a | 313 | uint8_t status; |
Wolfgang Betz |
132:51056160fa4a | 314 | uint8_t random[8]; |
Wolfgang Betz |
132:51056160fa4a | 315 | } PACKED le_rand_rp; |
Wolfgang Betz |
132:51056160fa4a | 316 | #define LE_RAND_RP_SIZE 9 |
Wolfgang Betz |
132:51056160fa4a | 317 | |
Wolfgang Betz |
132:51056160fa4a | 318 | #define OCF_LE_START_ENCRYPTION 0x0019 |
Wolfgang Betz |
132:51056160fa4a | 319 | typedef __packed struct _le_start_encryption_cp{ |
Wolfgang Betz |
132:51056160fa4a | 320 | uint16_t handle; |
Wolfgang Betz |
132:51056160fa4a | 321 | uint8_t random[8]; |
Wolfgang Betz |
132:51056160fa4a | 322 | uint16_t diversifier; |
Wolfgang Betz |
132:51056160fa4a | 323 | uint8_t key[16]; |
Wolfgang Betz |
132:51056160fa4a | 324 | } PACKED le_start_encryption_cp; |
Wolfgang Betz |
132:51056160fa4a | 325 | #define LE_START_ENCRYPTION_CP_SIZE 28 |
Wolfgang Betz |
132:51056160fa4a | 326 | |
Wolfgang Betz |
132:51056160fa4a | 327 | #define OCF_LE_LTK_REPLY 0x001A |
Wolfgang Betz |
132:51056160fa4a | 328 | typedef __packed struct _le_ltk_reply_cp{ |
Wolfgang Betz |
132:51056160fa4a | 329 | uint16_t handle; |
Wolfgang Betz |
132:51056160fa4a | 330 | uint8_t key[16]; |
Wolfgang Betz |
132:51056160fa4a | 331 | } PACKED le_ltk_reply_cp; |
Wolfgang Betz |
132:51056160fa4a | 332 | #define LE_LTK_REPLY_CP_SIZE 18 |
Wolfgang Betz |
132:51056160fa4a | 333 | |
Wolfgang Betz |
132:51056160fa4a | 334 | typedef __packed struct _le_ltk_reply_rp{ |
Wolfgang Betz |
132:51056160fa4a | 335 | uint8_t status; |
Wolfgang Betz |
132:51056160fa4a | 336 | uint16_t handle; |
Wolfgang Betz |
132:51056160fa4a | 337 | } PACKED le_ltk_reply_rp; |
Wolfgang Betz |
132:51056160fa4a | 338 | #define LE_LTK_REPLY_RP_SIZE 3 |
Wolfgang Betz |
132:51056160fa4a | 339 | |
Wolfgang Betz |
132:51056160fa4a | 340 | #define OCF_LE_LTK_NEG_REPLY 0x001B |
Wolfgang Betz |
132:51056160fa4a | 341 | typedef __packed struct _le_ltk_neg_reply_cp{ |
Wolfgang Betz |
132:51056160fa4a | 342 | uint16_t handle; |
Wolfgang Betz |
132:51056160fa4a | 343 | } PACKED le_ltk_neg_reply_cp; |
Wolfgang Betz |
132:51056160fa4a | 344 | #define LE_LTK_NEG_REPLY_CP_SIZE 2 |
Wolfgang Betz |
132:51056160fa4a | 345 | |
Wolfgang Betz |
132:51056160fa4a | 346 | typedef __packed struct _le_ltk_neg_reply_rp{ |
Wolfgang Betz |
132:51056160fa4a | 347 | uint8_t status; |
Wolfgang Betz |
132:51056160fa4a | 348 | uint16_t handle; |
Wolfgang Betz |
132:51056160fa4a | 349 | } PACKED le_ltk_neg_reply_rp; |
Wolfgang Betz |
132:51056160fa4a | 350 | #define LE_LTK_NEG_REPLY_RP_SIZE 3 |
Wolfgang Betz |
132:51056160fa4a | 351 | |
Wolfgang Betz |
132:51056160fa4a | 352 | #define OCF_LE_READ_SUPPORTED_STATES 0x001C |
Wolfgang Betz |
132:51056160fa4a | 353 | typedef __packed struct _le_read_supported_states_rp{ |
Wolfgang Betz |
132:51056160fa4a | 354 | uint8_t status; |
Wolfgang Betz |
132:51056160fa4a | 355 | uint8_t states[8]; |
Wolfgang Betz |
132:51056160fa4a | 356 | } PACKED le_read_supported_states_rp; |
Wolfgang Betz |
132:51056160fa4a | 357 | #define LE_READ_SUPPORTED_STATES_RP_SIZE 9 |
Wolfgang Betz |
132:51056160fa4a | 358 | |
Wolfgang Betz |
132:51056160fa4a | 359 | #define OCF_LE_RECEIVER_TEST 0x001D |
Wolfgang Betz |
132:51056160fa4a | 360 | typedef __packed struct _le_receiver_test_cp{ |
Wolfgang Betz |
132:51056160fa4a | 361 | uint8_t frequency; |
Wolfgang Betz |
132:51056160fa4a | 362 | } PACKED le_receiver_test_cp; |
Wolfgang Betz |
132:51056160fa4a | 363 | #define LE_RECEIVER_TEST_CP_SIZE 1 |
Wolfgang Betz |
132:51056160fa4a | 364 | |
Wolfgang Betz |
132:51056160fa4a | 365 | #define OCF_LE_TRANSMITTER_TEST 0x001E |
Wolfgang Betz |
132:51056160fa4a | 366 | typedef __packed struct _le_transmitter_test_cp{ |
Wolfgang Betz |
132:51056160fa4a | 367 | uint8_t frequency; |
Wolfgang Betz |
132:51056160fa4a | 368 | uint8_t length; |
Wolfgang Betz |
132:51056160fa4a | 369 | uint8_t payload; |
Wolfgang Betz |
132:51056160fa4a | 370 | } PACKED le_transmitter_test_cp; |
Wolfgang Betz |
132:51056160fa4a | 371 | #define LE_TRANSMITTER_TEST_CP_SIZE 3 |
Wolfgang Betz |
132:51056160fa4a | 372 | |
Wolfgang Betz |
132:51056160fa4a | 373 | #define OCF_LE_TEST_END 0x001F |
Wolfgang Betz |
132:51056160fa4a | 374 | typedef __packed struct _le_test_end_rp{ |
Wolfgang Betz |
132:51056160fa4a | 375 | uint8_t status; |
Wolfgang Betz |
132:51056160fa4a | 376 | uint16_t num_pkts; |
Wolfgang Betz |
132:51056160fa4a | 377 | } PACKED le_test_end_rp; |
Wolfgang Betz |
132:51056160fa4a | 378 | #define LE_TEST_END_RP_SIZE 3 |
Wolfgang Betz |
132:51056160fa4a | 379 | |
Wolfgang Betz |
132:51056160fa4a | 380 | /* Vendor specific commands */ |
Wolfgang Betz |
132:51056160fa4a | 381 | #define OGF_VENDOR_CMD 0x3f |
Wolfgang Betz |
132:51056160fa4a | 382 | |
Wolfgang Betz |
132:51056160fa4a | 383 | |
Wolfgang Betz |
132:51056160fa4a | 384 | /*------------- Events -------------*/ |
Wolfgang Betz |
132:51056160fa4a | 385 | #define EVT_CONN_COMPLETE 0x03 |
Wolfgang Betz |
132:51056160fa4a | 386 | typedef __packed struct _evt_conn_complete{ |
Wolfgang Betz |
132:51056160fa4a | 387 | uint8_t status; |
Wolfgang Betz |
132:51056160fa4a | 388 | uint16_t handle; |
Wolfgang Betz |
132:51056160fa4a | 389 | tBDAddr bdaddr; |
Wolfgang Betz |
132:51056160fa4a | 390 | uint8_t link_type; |
Wolfgang Betz |
132:51056160fa4a | 391 | uint8_t encr_mode; |
Wolfgang Betz |
132:51056160fa4a | 392 | } PACKED evt_conn_complete; |
Wolfgang Betz |
132:51056160fa4a | 393 | #define EVT_CONN_COMPLETE_SIZE 13 |
Wolfgang Betz |
132:51056160fa4a | 394 | |
Wolfgang Betz |
132:51056160fa4a | 395 | #define EVT_DISCONN_COMPLETE 0x05 |
Wolfgang Betz |
132:51056160fa4a | 396 | typedef __packed struct _evt_disconn_complete{ |
Wolfgang Betz |
132:51056160fa4a | 397 | uint8_t status; |
Wolfgang Betz |
132:51056160fa4a | 398 | uint16_t handle; |
Wolfgang Betz |
132:51056160fa4a | 399 | uint8_t reason; |
Wolfgang Betz |
132:51056160fa4a | 400 | } PACKED evt_disconn_complete; |
Wolfgang Betz |
132:51056160fa4a | 401 | #define EVT_DISCONN_COMPLETE_SIZE 4 |
Wolfgang Betz |
132:51056160fa4a | 402 | |
Wolfgang Betz |
132:51056160fa4a | 403 | #define EVT_ENCRYPT_CHANGE 0x08 |
Wolfgang Betz |
132:51056160fa4a | 404 | typedef __packed struct _evt_encrypt_change{ |
Wolfgang Betz |
132:51056160fa4a | 405 | uint8_t status; |
Wolfgang Betz |
132:51056160fa4a | 406 | uint16_t handle; |
Wolfgang Betz |
132:51056160fa4a | 407 | uint8_t encrypt; |
Wolfgang Betz |
132:51056160fa4a | 408 | } PACKED evt_encrypt_change; |
Wolfgang Betz |
132:51056160fa4a | 409 | #define EVT_ENCRYPT_CHANGE_SIZE 5 |
Wolfgang Betz |
132:51056160fa4a | 410 | |
Wolfgang Betz |
132:51056160fa4a | 411 | #define EVT_READ_REMOTE_VERSION_COMPLETE 0x0C |
Wolfgang Betz |
132:51056160fa4a | 412 | |
Wolfgang Betz |
132:51056160fa4a | 413 | #define EVT_CMD_COMPLETE 0x0E |
Wolfgang Betz |
132:51056160fa4a | 414 | typedef __packed struct _evt_cmd_complete{ |
Wolfgang Betz |
132:51056160fa4a | 415 | uint8_t ncmd; |
Wolfgang Betz |
132:51056160fa4a | 416 | uint16_t opcode; |
Wolfgang Betz |
132:51056160fa4a | 417 | } PACKED evt_cmd_complete; |
Wolfgang Betz |
132:51056160fa4a | 418 | #define EVT_CMD_COMPLETE_SIZE 3 |
Wolfgang Betz |
132:51056160fa4a | 419 | |
Wolfgang Betz |
132:51056160fa4a | 420 | #define EVT_CMD_STATUS 0x0F |
Wolfgang Betz |
132:51056160fa4a | 421 | typedef __packed struct _evt_cmd_status{ |
Wolfgang Betz |
132:51056160fa4a | 422 | uint8_t status; |
Wolfgang Betz |
132:51056160fa4a | 423 | uint8_t ncmd; |
Wolfgang Betz |
132:51056160fa4a | 424 | uint16_t opcode; |
Wolfgang Betz |
132:51056160fa4a | 425 | } PACKED evt_cmd_status; |
Wolfgang Betz |
132:51056160fa4a | 426 | #define EVT_CMD_STATUS_SIZE 4 |
Wolfgang Betz |
132:51056160fa4a | 427 | |
Wolfgang Betz |
132:51056160fa4a | 428 | #define EVT_HARDWARE_ERROR 0x10 |
Wolfgang Betz |
132:51056160fa4a | 429 | typedef __packed struct _evt_hardware_error{ |
Wolfgang Betz |
132:51056160fa4a | 430 | uint8_t code; |
Wolfgang Betz |
132:51056160fa4a | 431 | } PACKED evt_hardware_error; |
Wolfgang Betz |
132:51056160fa4a | 432 | #define EVT_HARDWARE_ERROR_SIZE 1 |
Wolfgang Betz |
132:51056160fa4a | 433 | |
Wolfgang Betz |
132:51056160fa4a | 434 | #define EVT_NUM_COMP_PKTS 0x13 |
Wolfgang Betz |
132:51056160fa4a | 435 | typedef __packed struct _evt_num_comp_pkts{ |
Wolfgang Betz |
132:51056160fa4a | 436 | uint8_t num_hndl; |
Wolfgang Betz |
132:51056160fa4a | 437 | /* variable length part */ |
Wolfgang Betz |
132:51056160fa4a | 438 | } PACKED evt_num_comp_pkts; |
Wolfgang Betz |
132:51056160fa4a | 439 | #define EVT_NUM_COMP_PKTS_SIZE 1 |
Wolfgang Betz |
132:51056160fa4a | 440 | |
Wolfgang Betz |
132:51056160fa4a | 441 | /* variable length part of evt_num_comp_pkts. */ |
Wolfgang Betz |
132:51056160fa4a | 442 | typedef __packed struct _evt_num_comp_pkts_param{ |
Wolfgang Betz |
132:51056160fa4a | 443 | uint16_t hndl; |
Wolfgang Betz |
132:51056160fa4a | 444 | uint16_t num_comp_pkts; |
Wolfgang Betz |
132:51056160fa4a | 445 | } PACKED evt_num_comp_pkts_param; |
Wolfgang Betz |
132:51056160fa4a | 446 | #define EVT_NUM_COMP_PKTS_PARAM_SIZE 1 |
Wolfgang Betz |
132:51056160fa4a | 447 | |
Wolfgang Betz |
132:51056160fa4a | 448 | #define EVT_DATA_BUFFER_OVERFLOW 0x1A |
Wolfgang Betz |
132:51056160fa4a | 449 | typedef __packed struct _evt_data_buffer_overflow{ |
Wolfgang Betz |
132:51056160fa4a | 450 | uint8_t link_type; |
Wolfgang Betz |
132:51056160fa4a | 451 | } PACKED evt_data_buffer_overflow; |
Wolfgang Betz |
132:51056160fa4a | 452 | #define EVT_DATA_BUFFER_OVERFLOW_SIZE 1 |
Wolfgang Betz |
132:51056160fa4a | 453 | |
Wolfgang Betz |
132:51056160fa4a | 454 | #define EVT_ENCRYPTION_KEY_REFRESH_COMPLETE 0x30 |
Wolfgang Betz |
132:51056160fa4a | 455 | typedef __packed struct _evt_encryption_key_refresh_complete{ |
Wolfgang Betz |
132:51056160fa4a | 456 | uint8_t status; |
Wolfgang Betz |
132:51056160fa4a | 457 | uint16_t handle; |
Wolfgang Betz |
132:51056160fa4a | 458 | } PACKED evt_encryption_key_refresh_complete; |
Wolfgang Betz |
132:51056160fa4a | 459 | #define EVT_ENCRYPTION_KEY_REFRESH_COMPLETE_SIZE 3 |
Wolfgang Betz |
132:51056160fa4a | 460 | |
Wolfgang Betz |
132:51056160fa4a | 461 | #define EVT_LE_META_EVENT 0x3E |
Wolfgang Betz |
132:51056160fa4a | 462 | typedef __packed struct _evt_le_meta_event{ |
Wolfgang Betz |
132:51056160fa4a | 463 | uint8_t subevent; |
Wolfgang Betz |
132:51056160fa4a | 464 | uint8_t data[VARIABLE_SIZE]; |
Wolfgang Betz |
132:51056160fa4a | 465 | } PACKED evt_le_meta_event; |
Wolfgang Betz |
132:51056160fa4a | 466 | #define EVT_LE_META_EVENT_SIZE 1 |
Wolfgang Betz |
132:51056160fa4a | 467 | |
Wolfgang Betz |
132:51056160fa4a | 468 | #define EVT_LE_CONN_COMPLETE 0x01 |
Wolfgang Betz |
132:51056160fa4a | 469 | typedef __packed struct _evt_le_connection_complete{ |
Wolfgang Betz |
132:51056160fa4a | 470 | uint8_t status; |
Wolfgang Betz |
132:51056160fa4a | 471 | uint16_t handle; |
Wolfgang Betz |
132:51056160fa4a | 472 | uint8_t role; |
Wolfgang Betz |
132:51056160fa4a | 473 | uint8_t peer_bdaddr_type; |
Wolfgang Betz |
132:51056160fa4a | 474 | tBDAddr peer_bdaddr; |
Wolfgang Betz |
132:51056160fa4a | 475 | uint16_t interval; |
Wolfgang Betz |
132:51056160fa4a | 476 | uint16_t latency; |
Wolfgang Betz |
132:51056160fa4a | 477 | uint16_t supervision_timeout; |
Wolfgang Betz |
132:51056160fa4a | 478 | uint8_t master_clock_accuracy; |
Wolfgang Betz |
132:51056160fa4a | 479 | } PACKED evt_le_connection_complete; |
Wolfgang Betz |
132:51056160fa4a | 480 | #define EVT_LE_CONN_COMPLETE_SIZE 18 |
Wolfgang Betz |
132:51056160fa4a | 481 | |
Wolfgang Betz |
132:51056160fa4a | 482 | #define EVT_LE_ADVERTISING_REPORT 0x02 |
Wolfgang Betz |
132:51056160fa4a | 483 | typedef __packed struct _le_advertising_info{ |
Wolfgang Betz |
132:51056160fa4a | 484 | uint8_t evt_type; |
Wolfgang Betz |
132:51056160fa4a | 485 | uint8_t bdaddr_type; |
Wolfgang Betz |
132:51056160fa4a | 486 | tBDAddr bdaddr; |
Wolfgang Betz |
132:51056160fa4a | 487 | uint8_t data_length; |
Wolfgang Betz |
132:51056160fa4a | 488 | uint8_t data_RSSI[VARIABLE_SIZE]; // RSSI is last octect (signed integer). |
Wolfgang Betz |
132:51056160fa4a | 489 | } PACKED le_advertising_info; |
Wolfgang Betz |
132:51056160fa4a | 490 | #define LE_ADVERTISING_INFO_SIZE 9 |
Wolfgang Betz |
132:51056160fa4a | 491 | |
Wolfgang Betz |
132:51056160fa4a | 492 | #define EVT_LE_CONN_UPDATE_COMPLETE 0x03 |
Wolfgang Betz |
132:51056160fa4a | 493 | typedef __packed struct _evt_le_connection_update_complete{ |
Wolfgang Betz |
132:51056160fa4a | 494 | uint8_t status; |
Wolfgang Betz |
132:51056160fa4a | 495 | uint16_t handle; |
Wolfgang Betz |
132:51056160fa4a | 496 | uint16_t interval; |
Wolfgang Betz |
132:51056160fa4a | 497 | uint16_t latency; |
Wolfgang Betz |
132:51056160fa4a | 498 | uint16_t supervision_timeout; |
Wolfgang Betz |
132:51056160fa4a | 499 | } PACKED evt_le_connection_update_complete; |
Wolfgang Betz |
132:51056160fa4a | 500 | #define EVT_LE_CONN_UPDATE_COMPLETE_SIZE 9 |
Wolfgang Betz |
132:51056160fa4a | 501 | |
Wolfgang Betz |
132:51056160fa4a | 502 | #define EVT_LE_READ_REMOTE_USED_FEATURES_COMPLETE 0x04 |
Wolfgang Betz |
132:51056160fa4a | 503 | typedef __packed struct _evt_le_read_remote_used_features_complete{ |
Wolfgang Betz |
132:51056160fa4a | 504 | uint8_t status; |
Wolfgang Betz |
132:51056160fa4a | 505 | uint16_t handle; |
Wolfgang Betz |
132:51056160fa4a | 506 | uint8_t features[8]; |
Wolfgang Betz |
132:51056160fa4a | 507 | } PACKED evt_le_read_remote_used_features_complete; |
Wolfgang Betz |
132:51056160fa4a | 508 | #define EVT_LE_READ_REMOTE_USED_FEATURES_COMPLETE_SIZE 11 |
Wolfgang Betz |
132:51056160fa4a | 509 | |
Wolfgang Betz |
132:51056160fa4a | 510 | #define EVT_LE_LTK_REQUEST 0x05 |
Wolfgang Betz |
132:51056160fa4a | 511 | typedef __packed struct _evt_le_long_term_key_request{ |
Wolfgang Betz |
132:51056160fa4a | 512 | uint16_t handle; |
Wolfgang Betz |
132:51056160fa4a | 513 | uint8_t random[8]; |
Wolfgang Betz |
132:51056160fa4a | 514 | uint16_t ediv; |
Wolfgang Betz |
132:51056160fa4a | 515 | } PACKED evt_le_long_term_key_request; |
Wolfgang Betz |
132:51056160fa4a | 516 | #define EVT_LE_LTK_REQUEST_SIZE 12 |
Wolfgang Betz |
132:51056160fa4a | 517 | |
Wolfgang Betz |
132:51056160fa4a | 518 | /** |
Wolfgang Betz |
132:51056160fa4a | 519 | * The event code in the @ref hci_event_pckt structure. If event code is EVT_VENDOR, |
Wolfgang Betz |
132:51056160fa4a | 520 | * application can use @ref evt_blue_aci structure to parse the packet. |
Wolfgang Betz |
132:51056160fa4a | 521 | */ |
Wolfgang Betz |
132:51056160fa4a | 522 | #define EVT_VENDOR 0xFF |
Wolfgang Betz |
132:51056160fa4a | 523 | |
Wolfgang Betz |
132:51056160fa4a | 524 | |
Wolfgang Betz |
132:51056160fa4a | 525 | /* Command opcode pack/unpack */ |
Wolfgang Betz |
132:51056160fa4a | 526 | #define cmd_opcode_pack(ogf, ocf) (uint16_t)((ocf & 0x03ff)|(ogf << 10)) |
Wolfgang Betz |
132:51056160fa4a | 527 | #define cmd_opcode_ogf(op) (op >> 10) |
Wolfgang Betz |
132:51056160fa4a | 528 | #define cmd_opcode_ocf(op) (op & 0x03ff) |
Wolfgang Betz |
132:51056160fa4a | 529 | |
Wolfgang Betz |
132:51056160fa4a | 530 | |
Wolfgang Betz |
132:51056160fa4a | 531 | struct hci_request { |
Wolfgang Betz |
132:51056160fa4a | 532 | uint16_t ogf; |
Wolfgang Betz |
132:51056160fa4a | 533 | uint16_t ocf; |
Wolfgang Betz |
132:51056160fa4a | 534 | int event; |
Wolfgang Betz |
132:51056160fa4a | 535 | void *cparam; |
Wolfgang Betz |
132:51056160fa4a | 536 | int clen; |
Wolfgang Betz |
132:51056160fa4a | 537 | void *rparam; |
Wolfgang Betz |
132:51056160fa4a | 538 | int rlen; |
Wolfgang Betz |
132:51056160fa4a | 539 | }; |
Wolfgang Betz |
132:51056160fa4a | 540 | |
Wolfgang Betz |
132:51056160fa4a | 541 | void hci_send_cmd(uint16_t ogf, uint16_t ocf, uint8_t plen, void *param); |
Wolfgang Betz |
132:51056160fa4a | 542 | |
Wolfgang Betz |
132:51056160fa4a | 543 | typedef enum { |
Wolfgang Betz |
132:51056160fa4a | 544 | WAITING_TYPE, |
Wolfgang Betz |
132:51056160fa4a | 545 | WAITING_OPCODE1, |
Wolfgang Betz |
132:51056160fa4a | 546 | WAITING_OPCODE2, |
Wolfgang Betz |
132:51056160fa4a | 547 | WAITING_EVENT_CODE, |
Wolfgang Betz |
132:51056160fa4a | 548 | WAITING_HANDLE, |
Wolfgang Betz |
132:51056160fa4a | 549 | WAITING_HANDLE_FLAG, |
Wolfgang Betz |
132:51056160fa4a | 550 | WAITING_PARAM_LEN, |
Wolfgang Betz |
132:51056160fa4a | 551 | WAITING_DATA_LEN1, |
Wolfgang Betz |
132:51056160fa4a | 552 | WAITING_DATA_LEN2, |
Wolfgang Betz |
132:51056160fa4a | 553 | WAITING_PAYLOAD |
Wolfgang Betz |
132:51056160fa4a | 554 | }hci_state; |
Wolfgang Betz |
132:51056160fa4a | 555 | |
Wolfgang Betz |
132:51056160fa4a | 556 | typedef void (*hci_packet_complete_callback)(void *pckt, uint16_t len); |
Wolfgang Betz |
132:51056160fa4a | 557 | |
Wolfgang Betz |
132:51056160fa4a | 558 | /* HCI library functions. */ |
Wolfgang Betz |
132:51056160fa4a | 559 | void hci_init(void); |
Wolfgang Betz |
132:51056160fa4a | 560 | |
Wolfgang Betz |
132:51056160fa4a | 561 | int hci_send_req(struct hci_request *r, BOOL async); |
Wolfgang Betz |
132:51056160fa4a | 562 | |
Vincent Coubard |
285:0e1570840658 | 563 | #endif /* __HCI_INTERNAL_H_ */ |