1 /***************************************************************************** 2 * 3 * hci.h - CC3000 Host Driver Implementation. 4 * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 10 * Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 13 * Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the 16 * distribution. 17 * 18 * Neither the name of Texas Instruments Incorporated nor the names of 19 * its contributors may be used to endorse or promote products derived 20 * from this software without specific prior written permission. 21 * 22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 25 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 26 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 27 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 28 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 29 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 30 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 32 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 33 * 34 *****************************************************************************/ 35 #ifndef __CC3000_HCI_H__ 36 #define __CC3000_HCI_H__ 37 38 #include "cc3000_common.h" 39 40 //***************************************************************************** 41 // 42 // If building with a C++ compiler, make all of the definitions in this header 43 // have a C binding. 44 // 45 //***************************************************************************** 46 #ifdef __cplusplus 47 extern "C" { 48 #endif 49 50 51 #define SPI_HEADER_SIZE (5) 52 #define SIMPLE_LINK_HCI_CMND_HEADER_SIZE (4) 53 #define HEADERS_SIZE_CMD (SPI_HEADER_SIZE + SIMPLE_LINK_HCI_CMND_HEADER_SIZE) 54 #define SIMPLE_LINK_HCI_DATA_CMND_HEADER_SIZE (5) 55 #define SIMPLE_LINK_HCI_DATA_HEADER_SIZE (5) 56 #define SIMPLE_LINK_HCI_PATCH_HEADER_SIZE (2) 57 58 59 //***************************************************************************** 60 // 61 // Values that can be used as HCI Commands and HCI Packet header defines 62 // 63 //***************************************************************************** 64 #define HCI_TYPE_CMND 0x1 65 #define HCI_TYPE_DATA 0x2 66 #define HCI_TYPE_PATCH 0x3 67 #define HCI_TYPE_EVNT 0x4 68 69 70 #define HCI_EVENT_PATCHES_DRV_REQ (1) 71 #define HCI_EVENT_PATCHES_FW_REQ (2) 72 #define HCI_EVENT_PATCHES_BOOTLOAD_REQ (3) 73 74 75 #define HCI_CMND_WLAN_BASE (0x0000) 76 #define HCI_CMND_WLAN_CONNECT 0x0001 77 #define HCI_CMND_WLAN_DISCONNECT 0x0002 78 #define HCI_CMND_WLAN_IOCTL_SET_SCANPARAM 0x0003 79 #define HCI_CMND_WLAN_IOCTL_SET_CONNECTION_POLICY 0x0004 80 #define HCI_CMND_WLAN_IOCTL_ADD_PROFILE 0x0005 81 #define HCI_CMND_WLAN_IOCTL_DEL_PROFILE 0x0006 82 #define HCI_CMND_WLAN_IOCTL_GET_SCAN_RESULTS 0x0007 83 #define HCI_CMND_EVENT_MASK 0x0008 84 #define HCI_CMND_WLAN_IOCTL_STATUSGET 0x0009 85 #define HCI_CMND_WLAN_IOCTL_SIMPLE_CONFIG_START 0x000A 86 #define HCI_CMND_WLAN_IOCTL_SIMPLE_CONFIG_STOP 0x000B 87 #define HCI_CMND_WLAN_IOCTL_SIMPLE_CONFIG_SET_PREFIX 0x000C 88 #define HCI_CMND_WLAN_CONFIGURE_PATCH 0x000D 89 90 91 #define HCI_CMND_SOCKET_BASE 0x1000 92 #define HCI_CMND_SOCKET 0x1001 93 #define HCI_CMND_BIND 0x1002 94 #define HCI_CMND_RECV 0x1004 95 #define HCI_CMND_ACCEPT 0x1005 96 #define HCI_CMND_LISTEN 0x1006 97 #define HCI_CMND_CONNECT 0x1007 98 #define HCI_CMND_BSD_SELECT 0x1008 99 #define HCI_CMND_SETSOCKOPT 0x1009 100 #define HCI_CMND_GETSOCKOPT 0x100A 101 #define HCI_CMND_CLOSE_SOCKET 0x100B 102 #define HCI_CMND_RECVFROM 0x100D 103 #define HCI_CMND_GETHOSTNAME 0x1010 104 #define HCI_CMND_MDNS_ADVERTISE 0x1011 105 #define HCI_CMND_GETMSSVALUE 0x1012 106 107 108 #define HCI_DATA_BASE 0x80 109 110 #define HCI_CMND_SEND (0x01 + HCI_DATA_BASE) 111 #define HCI_CMND_SENDTO (0x03 + HCI_DATA_BASE) 112 #define HCI_DATA_BSD_RECVFROM (0x04 + HCI_DATA_BASE) 113 #define HCI_DATA_BSD_RECV (0x05 + HCI_DATA_BASE) 114 115 116 #define HCI_CMND_NVMEM_CBASE (0x0200) 117 118 119 #define HCI_CMND_NVMEM_CREATE_ENTRY (0x0203) 120 #define HCI_CMND_NVMEM_SWAP_ENTRY (0x0205) 121 #define HCI_CMND_NVMEM_READ (0x0201) 122 #define HCI_CMND_NVMEM_WRITE (0x0090) 123 #define HCI_CMND_NVMEM_WRITE_PATCH (0x0204) 124 #define HCI_CMND_READ_SP_VERSION (0x0207) 125 126 #define HCI_CMND_READ_BUFFER_SIZE 0x400B 127 #define HCI_CMND_SIMPLE_LINK_START 0x4000 128 129 #define HCI_CMND_NETAPP_BASE 0x2000 130 131 #define HCI_NETAPP_DHCP (0x0001 + HCI_CMND_NETAPP_BASE) 132 #define HCI_NETAPP_PING_SEND (0x0002 + HCI_CMND_NETAPP_BASE) 133 #define HCI_NETAPP_PING_REPORT (0x0003 + HCI_CMND_NETAPP_BASE) 134 #define HCI_NETAPP_PING_STOP (0x0004 + HCI_CMND_NETAPP_BASE) 135 #define HCI_NETAPP_IPCONFIG (0x0005 + HCI_CMND_NETAPP_BASE) 136 #define HCI_NETAPP_ARP_FLUSH (0x0006 + HCI_CMND_NETAPP_BASE) 137 #define HCI_NETAPP_SET_DEBUG_LEVEL (0x0008 + HCI_CMND_NETAPP_BASE) 138 #define HCI_NETAPP_SET_TIMERS (0x0009 + HCI_CMND_NETAPP_BASE) 139 140 141 142 143 144 145 //***************************************************************************** 146 // 147 // Values that can be used as HCI Events defines 148 // 149 //***************************************************************************** 150 #define HCI_EVNT_WLAN_BASE 0x0000 151 #define HCI_EVNT_WLAN_CONNECT 0x0001 152 #define HCI_EVNT_WLAN_DISCONNECT \ 153 0x0002 154 #define HCI_EVNT_WLAN_IOCTL_ADD_PROFILE \ 155 0x0005 156 157 158 #define HCI_EVNT_SOCKET HCI_CMND_SOCKET 159 #define HCI_EVNT_BIND HCI_CMND_BIND 160 #define HCI_EVNT_RECV HCI_CMND_RECV 161 #define HCI_EVNT_ACCEPT HCI_CMND_ACCEPT 162 #define HCI_EVNT_LISTEN HCI_CMND_LISTEN 163 #define HCI_EVNT_CONNECT HCI_CMND_CONNECT 164 #define HCI_EVNT_SELECT HCI_CMND_BSD_SELECT 165 #define HCI_EVNT_CLOSE_SOCKET HCI_CMND_CLOSE_SOCKET 166 #define HCI_EVNT_RECVFROM HCI_CMND_RECVFROM 167 #define HCI_EVNT_SETSOCKOPT HCI_CMND_SETSOCKOPT 168 #define HCI_EVNT_GETSOCKOPT HCI_CMND_GETSOCKOPT 169 #define HCI_EVNT_BSD_GETHOSTBYNAME HCI_CMND_GETHOSTNAME 170 #define HCI_EVNT_MDNS_ADVERTISE HCI_CMND_MDNS_ADVERTISE 171 #define HCI_EVNT_GETMSSVALUE HCI_CMND_GETMSSVALUE 172 173 #define HCI_EVNT_SEND 0x1003 174 #define HCI_EVNT_WRITE 0x100E 175 #define HCI_EVNT_SENDTO 0x100F 176 177 #define HCI_EVNT_PATCHES_REQ 0x1000 178 179 #define HCI_EVNT_UNSOL_BASE 0x4000 180 181 #define HCI_EVNT_WLAN_UNSOL_BASE (0x8000) 182 183 #define HCI_EVNT_WLAN_UNSOL_CONNECT (0x0001 + HCI_EVNT_WLAN_UNSOL_BASE) 184 #define HCI_EVNT_WLAN_UNSOL_DISCONNECT (0x0002 + HCI_EVNT_WLAN_UNSOL_BASE) 185 #define HCI_EVNT_WLAN_UNSOL_INIT (0x0004 + HCI_EVNT_WLAN_UNSOL_BASE) 186 #define HCI_EVNT_WLAN_TX_COMPLETE (0x0008 + HCI_EVNT_WLAN_UNSOL_BASE) 187 #define HCI_EVNT_WLAN_UNSOL_DHCP (0x0010 + HCI_EVNT_WLAN_UNSOL_BASE) 188 #define HCI_EVNT_WLAN_ASYNC_PING_REPORT (0x0040 + HCI_EVNT_WLAN_UNSOL_BASE) 189 #define HCI_EVNT_WLAN_ASYNC_SIMPLE_CONFIG_DONE (0x0080 + HCI_EVNT_WLAN_UNSOL_BASE) 190 #define HCI_EVNT_WLAN_KEEPALIVE (0x0200 + HCI_EVNT_WLAN_UNSOL_BASE) 191 #define HCI_EVNT_BSD_TCP_CLOSE_WAIT (0x0800 + HCI_EVNT_WLAN_UNSOL_BASE) 192 193 #define HCI_EVNT_DATA_UNSOL_FREE_BUFF \ 194 0x4100 195 196 #define HCI_EVNT_NVMEM_CREATE_ENTRY \ 197 HCI_CMND_NVMEM_CREATE_ENTRY 198 #define HCI_EVNT_NVMEM_SWAP_ENTRY HCI_CMND_NVMEM_SWAP_ENTRY 199 200 #define HCI_EVNT_NVMEM_READ HCI_CMND_NVMEM_READ 201 #define HCI_EVNT_NVMEM_WRITE (0x0202) 202 203 #define HCI_EVNT_READ_SP_VERSION \ 204 HCI_CMND_READ_SP_VERSION 205 206 #define HCI_EVNT_INPROGRESS 0xFFFF 207 208 209 #define HCI_DATA_RECVFROM 0x84 210 #define HCI_DATA_RECV 0x85 211 #define HCI_DATA_NVMEM 0x91 212 213 #define HCI_EVENT_CC3000_CAN_SHUT_DOWN 0x99 214 215 //***************************************************************************** 216 // 217 // Prototypes for the structures for APIs. 218 // 219 //***************************************************************************** 220 221 #define HCI_DATA_HEADER_SIZE (5) 222 #define HCI_EVENT_HEADER_SIZE (5) 223 #define HCI_DATA_CMD_HEADER_SIZE (5) 224 #define HCI_PATCH_HEADER_SIZE (6) 225 226 #define HCI_PACKET_TYPE_OFFSET (0) 227 #define HCI_PACKET_ARGSIZE_OFFSET (2) 228 #define HCI_PACKET_LENGTH_OFFSET (3) 229 230 231 #define HCI_EVENT_OPCODE_OFFSET (1) 232 #define HCI_EVENT_LENGTH_OFFSET (3) 233 #define HCI_EVENT_STATUS_OFFSET (4) 234 #define HCI_DATA_LENGTH_OFFSET (3) 235 236 237 238 239 //***************************************************************************** 240 // 241 // Prototypes for the APIs. 242 // 243 //***************************************************************************** 244 245 //***************************************************************************** 246 // 247 //! hci_command_send 248 //! 249 //! @param usOpcode command operation code 250 //! @param pucBuff pointer to the command's arguments buffer 251 //! @param ucArgsLength length of the arguments 252 //! 253 //! @return none 254 //! 255 //! @brief Initiate an HCI command. 256 // 257 //***************************************************************************** 258 extern UINT16 hci_command_send(UINT16 usOpcode, 259 UINT8 *ucArgs, 260 UINT8 ucArgsLength); 261 262 263 //***************************************************************************** 264 // 265 //! hci_data_send 266 //! 267 //! @param usOpcode command operation code 268 //! @param ucArgs pointer to the command's arguments buffer 269 //! @param usArgsLength length of the arguments 270 //! @param ucTail pointer to the data buffer 271 //! @param usTailLength buffer length 272 //! 273 //! @return none 274 //! 275 //! @brief Initiate an HCI data write operation 276 // 277 //***************************************************************************** 278 extern INT32 hci_data_send(UINT8 ucOpcode, 279 UINT8 *ucArgs, 280 UINT16 usArgsLength, 281 UINT16 usDataLength, 282 const UINT8 *ucTail, 283 UINT16 usTailLength); 284 285 286 //***************************************************************************** 287 // 288 //! hci_data_command_send 289 //! 290 //! @param usOpcode command operation code 291 //! @param pucBuff pointer to the data buffer 292 //! @param ucArgsLength arguments length 293 //! @param ucDataLength data length 294 //! 295 //! @return none 296 //! 297 //! @brief Prepare HCI header and initiate an HCI data write operation 298 // 299 //***************************************************************************** 300 extern void hci_data_command_send(UINT16 usOpcode, UINT8 *pucBuff, 301 UINT8 ucArgsLength, UINT16 ucDataLength); 302 303 //***************************************************************************** 304 // 305 //! hci_patch_send 306 //! 307 //! @param usOpcode command operation code 308 //! @param pucBuff pointer to the command's arguments buffer 309 //! @param patch pointer to patch content buffer 310 //! @param usDataLength data length 311 //! 312 //! @return none 313 //! 314 //! @brief Prepare HCI header and initiate an HCI patch write operation 315 // 316 //***************************************************************************** 317 extern void hci_patch_send(UINT8 ucOpcode, UINT8 *pucBuff, CHAR *patch, UINT16 usDataLength); 318 319 320 321 //***************************************************************************** 322 // 323 // Mark the end of the C bindings section for C++ compilers. 324 // 325 //***************************************************************************** 326 #ifdef __cplusplus 327 } 328 #endif // __cplusplus 329 330 #endif // __CC3000_HCI_H__ 331