diff options
-rw-r--r-- | nuttx/drivers/wireless/cc3000/cc3000_common.c | 4 | ||||
-rw-r--r-- | nuttx/drivers/wireless/cc3000/netapp.c | 2 | ||||
-rw-r--r-- | nuttx/drivers/wireless/cc3000/nvmem.c | 4 | ||||
-rw-r--r-- | nuttx/drivers/wireless/cc3000/security.c | 306 | ||||
-rw-r--r-- | nuttx/drivers/wireless/cc3000/socket.c | 241 | ||||
-rw-r--r-- | nuttx/drivers/wireless/cc3000/spi.h | 4 | ||||
-rw-r--r-- | nuttx/include/nuttx/wireless/cc3000/cc3000_common.h | 631 | ||||
-rw-r--r-- | nuttx/include/nuttx/wireless/cc3000/evnt_handler.h | 8 | ||||
-rw-r--r-- | nuttx/include/nuttx/wireless/cc3000/hci.h | 598 | ||||
-rw-r--r-- | nuttx/include/nuttx/wireless/cc3000/host_driver_version.h | 55 | ||||
-rw-r--r-- | nuttx/include/nuttx/wireless/cc3000/include/cc3000_upif.h | 34 | ||||
-rw-r--r-- | nuttx/include/nuttx/wireless/cc3000/include/sys/socket.h | 1207 | ||||
-rw-r--r-- | nuttx/include/nuttx/wireless/cc3000/netapp.h | 613 | ||||
-rw-r--r-- | nuttx/include/nuttx/wireless/cc3000/nvmem.h | 462 | ||||
-rw-r--r-- | nuttx/include/nuttx/wireless/cc3000/security.h | 246 | ||||
-rw-r--r-- | nuttx/include/nuttx/wireless/cc3000/socket.h | 664 | ||||
-rw-r--r-- | nuttx/include/nuttx/wireless/cc3000/wlan.h | 1013 |
17 files changed, 2709 insertions, 3383 deletions
diff --git a/nuttx/drivers/wireless/cc3000/cc3000_common.c b/nuttx/drivers/wireless/cc3000/cc3000_common.c index c4183f871..c65daa268 100644 --- a/nuttx/drivers/wireless/cc3000/cc3000_common.c +++ b/nuttx/drivers/wireless/cc3000/cc3000_common.c @@ -74,7 +74,7 @@ * *****************************************************************************/ -uint8_t* UINT32_TO_STREAM_f (uint8_t *p, unsigned long u32) +uint8_t *UINT32_TO_STREAM_f(uint8_t *p, unsigned long u32) { *(p)++ = (uint8_t)(u32); *(p)++ = (uint8_t)((u32) >> 8); @@ -99,7 +99,7 @@ uint8_t* UINT32_TO_STREAM_f (uint8_t *p, unsigned long u32) * *****************************************************************************/ -uint8_t* UINT16_TO_STREAM_f (uint8_t *p, uint16_t u16) +uint8_t *UINT16_TO_STREAM_f(uint8_t *p, uint16_t u16) { *(p)++ = (uint8_t)(u16); *(p)++ = (uint8_t)((u16) >> 8); diff --git a/nuttx/drivers/wireless/cc3000/netapp.c b/nuttx/drivers/wireless/cc3000/netapp.c index dea7dd688..02b4ffa2d 100644 --- a/nuttx/drivers/wireless/cc3000/netapp.c +++ b/nuttx/drivers/wireless/cc3000/netapp.c @@ -79,7 +79,7 @@ * *****************************************************************************/ -long netapp_config_mac_adrress(uint8_t * mac) +long netapp_config_mac_adrress(uint8_t *mac) { return nvmem_set_mac_address(mac); } diff --git a/nuttx/drivers/wireless/cc3000/nvmem.c b/nuttx/drivers/wireless/cc3000/nvmem.c index 4ab057f85..c1aff53c4 100644 --- a/nuttx/drivers/wireless/cc3000/nvmem.c +++ b/nuttx/drivers/wireless/cc3000/nvmem.c @@ -231,7 +231,7 @@ uint8_t nvmem_get_mac_address(uint8_t *mac) *****************************************************************************/ uint8_t nvmem_write_patch(unsigned long ulFileId, unsigned long spLength, - const uint8_t *spData) + const uint8_t *spData) { uint8_t status = 0; uint16_t offset = 0; @@ -279,7 +279,7 @@ uint8_t nvmem_write_patch(unsigned long ulFileId, unsigned long spLength, *****************************************************************************/ #ifndef CC3000_TINY_DRIVER -uint8_t nvmem_read_sp_version(uint8_t* patchVer) +uint8_t nvmem_read_sp_version(uint8_t *patchVer) { uint8_t *ptr; /* 1st byte is the status and the rest is the SP version */ diff --git a/nuttx/drivers/wireless/cc3000/security.c b/nuttx/drivers/wireless/cc3000/security.c index e37d9a0de..990828b10 100644 --- a/nuttx/drivers/wireless/cc3000/security.c +++ b/nuttx/drivers/wireless/cc3000/security.c @@ -1,50 +1,53 @@ /***************************************************************************** -* -* security.c - CC3000 Host Driver Implementation. -* Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions -* are met: -* -* Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* -* Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the -* distribution. -* -* Neither the name of Texas Instruments Incorporated nor the names of -* its contributors may be used to endorse or promote products derived -* from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -*****************************************************************************/ + * security.c - CC3000 Host Driver Implementation. + * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + *****************************************************************************/ -//***************************************************************************** -// -//! \addtogroup security_api -//! @{ -// -//***************************************************************************** +/***************************************************************************** + * Included Files + *****************************************************************************/ #include <nuttx/wireless/cc3000/security.h> #ifndef CC3000_UNENCRYPTED_SMART_CONFIG + +/***************************************************************************** + * Private Data + *****************************************************************************/ + // foreward sbox -const uint8_t sbox[256] = { + +const uint8_t sbox[256] = +{ //0 1 2 3 4 5 6 7 8 9 A B C D E F 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, //0 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, //1 @@ -61,10 +64,14 @@ const uint8_t sbox[256] = { 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, //C 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, //D 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, //E -0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 }; //F +0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 //F +}; + // inverse sbox + const uint8_t rsbox[256] = -{ 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb +{ + 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb , 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb , 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e , 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25 @@ -79,14 +86,21 @@ const uint8_t rsbox[256] = , 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f , 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef , 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61 -, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d }; +, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d +}; + // round constant -const uint8_t Rcon[11] = { - 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36}; +const uint8_t Rcon[11] = +{ + 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36 +}; uint8_t aexpandedKey[176]; +/***************************************************************************** + * Public Functions + *****************************************************************************/ //***************************************************************************** // //! expandKey @@ -104,9 +118,12 @@ void expandKey(uint8_t *expandedKey, uint8_t *key) { uint16_t ii, buf1; + for (ii=0;ii<16;ii++) expandedKey[ii] = key[ii]; - for (ii=1;ii<11;ii++){ + + for (ii=1;ii<11;ii++) + { buf1 = expandedKey[ii*16 - 4]; expandedKey[ii*16 + 0] = sbox[expandedKey[ii*16 - 3]]^expandedKey[(ii-1)*16 + 0]^Rcon[ii]; expandedKey[ii*16 + 1] = sbox[expandedKey[ii*16 - 2]]^expandedKey[(ii-1)*16 + 1]; @@ -125,7 +142,6 @@ void expandKey(uint8_t *expandedKey, expandedKey[ii*16 +14] = expandedKey[(ii-1)*16 +14]^expandedKey[ii*16 +10]; expandedKey[ii*16 +15] = expandedKey[(ii-1)*16 +15]^expandedKey[ii*16 +11]; } - } //***************************************************************************** @@ -142,12 +158,12 @@ void expandKey(uint8_t *expandedKey, uint8_t galois_mul2(uint8_t value) { - if (value>>7) - { - value = value << 1; - return (value^0x1b); - } else - return value<<1; + if (value>>7) + { + value = value << 1; + return (value^0x1b); + } else + return value<<1; } //***************************************************************************** @@ -166,18 +182,18 @@ uint8_t galois_mul2(uint8_t value) //! - subbytes //! - shiftrows //! - mixcolums -//! is executed 9 times, after this addroundkey to finish the 9th +//! is executed 9 times, after this addroundkey to finish the 9th //! round, after that the 10th round without mixcolums //! no further subfunctions to save cycles for function calls //! no structuring with "for (....)" to save cycles. -//! +//! //! //***************************************************************************** void aes_encr(uint8_t *state, uint8_t *expandedKey) { uint8_t buf1, buf2, buf3, round; - + for (round = 0; round < 9; round ++){ // addroundkey, sbox and shiftrows // row 0 @@ -204,7 +220,7 @@ void aes_encr(uint8_t *state, uint8_t *expandedKey) state[11] = sbox[(state[ 7] ^ expandedKey[(round*16) + 7])]; state[ 7] = sbox[(state[ 3] ^ expandedKey[(round*16) + 3])]; state[ 3] = sbox[buf1]; - + // mixcolums ////////// // col1 buf1 = state[0] ^ state[1] ^ state[2] ^ state[3]; @@ -233,8 +249,8 @@ void aes_encr(uint8_t *state, uint8_t *expandedKey) buf3 = state[12]^state[13]; buf3=galois_mul2(buf3); state[12] = state[12] ^ buf3 ^ buf1; buf3 = state[13]^state[14]; buf3=galois_mul2(buf3); state[13] = state[13] ^ buf3 ^ buf1; buf3 = state[14]^state[15]; buf3=galois_mul2(buf3); state[14] = state[14] ^ buf3 ^ buf1; - buf3 = state[15]^buf2; buf3=galois_mul2(buf3); state[15] = state[15] ^ buf3 ^ buf1; - + buf3 = state[15]^buf2; buf3=galois_mul2(buf3); state[15] = state[15] ^ buf3 ^ buf1; + } // 10th round without mixcols state[ 0] = sbox[(state[ 0] ^ expandedKey[(round*16) ])]; @@ -275,9 +291,9 @@ void aes_encr(uint8_t *state, uint8_t *expandedKey) state[11]^=expandedKey[171]; state[12]^=expandedKey[172]; state[13]^=expandedKey[173]; - state[14]^=expandedKey[174]; + state[14]^=expandedKey[174]; state[15]^=expandedKey[175]; -} +} //***************************************************************************** // @@ -306,7 +322,7 @@ void aes_decr(uint8_t *state, uint8_t *expandedKey) uint8_t buf1, buf2, buf3; int8_t round; round = 9; - + // initial addroundkey state[ 0]^=expandedKey[160]; state[ 1]^=expandedKey[161]; @@ -322,9 +338,9 @@ void aes_decr(uint8_t *state, uint8_t *expandedKey) state[11]^=expandedKey[171]; state[12]^=expandedKey[172]; state[13]^=expandedKey[173]; - state[14]^=expandedKey[174]; + state[14]^=expandedKey[174]; state[15]^=expandedKey[175]; - + // 10th round without mixcols state[ 0] = rsbox[state[ 0]] ^ expandedKey[(round*16) ]; state[ 4] = rsbox[state[ 4]] ^ expandedKey[(round*16) + 4]; @@ -349,7 +365,7 @@ void aes_decr(uint8_t *state, uint8_t *expandedKey) state[ 7] = rsbox[state[11]] ^ expandedKey[(round*16) + 7]; state[11] = rsbox[state[15]] ^ expandedKey[(round*16) + 11]; state[15] = buf1; - + for (round = 8; round >= 0; round--){ // barreto //col1 @@ -396,8 +412,8 @@ void aes_decr(uint8_t *state, uint8_t *expandedKey) buf3 = state[12]^state[13]; buf3=galois_mul2(buf3); state[12] = state[12] ^ buf3 ^ buf1; buf3 = state[13]^state[14]; buf3=galois_mul2(buf3); state[13] = state[13] ^ buf3 ^ buf1; buf3 = state[14]^state[15]; buf3=galois_mul2(buf3); state[14] = state[14] ^ buf3 ^ buf1; - buf3 = state[15]^buf2; buf3=galois_mul2(buf3); state[15] = state[15] ^ buf3 ^ buf1; - + buf3 = state[15]^buf2; buf3=galois_mul2(buf3); state[15] = state[15] ^ buf3 ^ buf1; + // addroundkey, rsbox and shiftrows // row 0 state[ 0] = rsbox[state[ 0]] ^ expandedKey[(round*16) ]; @@ -424,110 +440,102 @@ void aes_decr(uint8_t *state, uint8_t *expandedKey) state[11] = rsbox[state[15]] ^ expandedKey[(round*16) + 11]; state[15] = buf1; } - -} -//***************************************************************************** -// -//! aes_encrypt -//! -//! @param[in] key AES128 key of size 16 bytes -//! @param[in\out] state 16 bytes of plain text and cipher text -//! -//! @return none -//! -//! @brief AES128 encryption: -//! Given AES128 key and 16 bytes plain text, cipher text of 16 bytes -//! is computed. The AES implementation is in mode ECB (Electronic -//! Code Book). -//! -//! -//***************************************************************************** +} + +/***************************************************************************** + * Name: aes_encrypt + * + * Description: + * AES128 encryption: Given AES128 key and 16 bytes plain text, cipher + * text of 16 bytes is computed. The AES implementation is in mode ECB + * (Electronic Code Book). + * + * Input Parameters: + * key AES128 key of size 16 bytes + * state 16 bytes of plain text and cipher text + * + * Returned Value + * None + * + *****************************************************************************/ -void aes_encrypt(uint8_t *state, - uint8_t *key) +void aes_encrypt(uint8_t *state, uint8_t *key) { - // expand the key into 176 bytes - expandKey(aexpandedKey, key); - aes_encr(state, aexpandedKey); + // expand the key into 176 bytes + expandKey(aexpandedKey, key); + aes_encr(state, aexpandedKey); } -//***************************************************************************** -// -//! aes_decrypt -//! -//! @param[in] key AES128 key of size 16 bytes -//! @param[in\out] state 16 bytes of cipher text and plain text -//! -//! @return none -//! -//! @brief AES128 decryption: -//! Given AES128 key and 16 bytes cipher text, plain text of 16 bytes -//! is computed The AES implementation is in mode ECB -//! (Electronic Code Book). -//! -//! -//***************************************************************************** +/***************************************************************************** + * Name: aes_decrypt + * + * Description: + * AES128 decryption: Given AES128 key and 16 bytes cipher text, plain + * text of 16 bytes is computed The AES implementation is in mode ECB + * (Electronic Code Book). + * + * Input Parameters: + * key AES128 key of size 16 bytes + * state 16 bytes of plain text and cipher text + * + * Returned Value + * None + * + *****************************************************************************/ -void aes_decrypt(uint8_t *state, - uint8_t *key) +void aes_decrypt(uint8_t *state, uint8_t *key) { expandKey(aexpandedKey, key); // expand the key into 176 bytes aes_decr(state, aexpandedKey); } -//***************************************************************************** -// -//! aes_read_key -//! -//! @param[out] key AES128 key of size 16 bytes -//! -//! @return on success 0, error otherwise. -//! -//! @brief Reads AES128 key from EEPROM -//! Reads the AES128 key from fileID #12 in EEPROM -//! returns an error if the key does not exist. -//! -//! -//***************************************************************************** +/***************************************************************************** + * Name: aes_read_key + * + * Description: + * Reads AES128 key from EEPROM. Reads the AES128 key from fileID #12 in + * EEPROM returns an error if the key does not exist. + * + * Input Parameters: + * key AES128 key of size 16 bytes + * + * Returned Value + * On success 0, error otherwise. + * + *****************************************************************************/ signed long aes_read_key(uint8_t *key) { - signed long returnValue; - - returnValue = nvmem_read(NVMEM_AES128_KEY_FILEID, AES128_KEY_SIZE, 0, key); + signed long returnValue; - return returnValue; + returnValue = nvmem_read(NVMEM_AES128_KEY_FILEID, AES128_KEY_SIZE, 0, key); + + return returnValue; } -//***************************************************************************** -// -//! aes_write_key -//! -//! @param[out] key AES128 key of size 16 bytes -//! -//! @return on success 0, error otherwise. -//! -//! @brief writes AES128 key from EEPROM -//! Writes the AES128 key to fileID #12 in EEPROM -//! -//! -//***************************************************************************** +/***************************************************************************** + * Name: aes_write_key + * + * Description: + * Writes AES128 key from EEPROM Writes the AES128 key to fileID #12 in + * EEPROM + * + * Input Parameters: + * key AES128 key of size 16 bytes + * + * Returned Value + * On success 0, error otherwise. + * + *****************************************************************************/ signed long aes_write_key(uint8_t *key) { - signed long returnValue; + signed long returnValue; - returnValue = nvmem_write(NVMEM_AES128_KEY_FILEID, AES128_KEY_SIZE, 0, key); + returnValue = nvmem_write(NVMEM_AES128_KEY_FILEID, AES128_KEY_SIZE, 0, key); - return returnValue; + return returnValue; } #endif //CC3000_UNENCRYPTED_SMART_CONFIG - -//***************************************************************************** -// -// Close the Doxygen group. -//! @} -// -//***************************************************************************** diff --git a/nuttx/drivers/wireless/cc3000/socket.c b/nuttx/drivers/wireless/cc3000/socket.c index 878065b39..a8858b0c6 100644 --- a/nuttx/drivers/wireless/cc3000/socket.c +++ b/nuttx/drivers/wireless/cc3000/socket.c @@ -183,6 +183,11 @@ int HostFlowControlConsumeBuff(int sd) /***************************************************************************** * Name: socket * + * Decription: + * create an endpoint for communication. The socket function creates a + * socket that is bound to a specific transport service provider. This + * function is called by the application layer to obtain a socket handle. + * * Input Parameters: * domain selects the protocol family which will be used for * communication. On this version only AF_INET is supported @@ -196,12 +201,6 @@ int HostFlowControlConsumeBuff(int sd) * On success, socket handle that is used for consequent socket * operations. On error, -1 is returned. * - * Decription: - * create an endpoint for communication - * The socket function creates a socket that is bound to a specific - * transport service provider. This function is called by the - * application layer to obtain a socket handle. - * *****************************************************************************/ int socket(long domain, long type, long protocol) @@ -239,15 +238,15 @@ int socket(long domain, long type, long protocol) /***************************************************************************** * Name: closesocket * + * Decription: + * The socket function closes a created socket. + * * Input Parameters: * sd socket handle. * * Returned Value: * On success, zero is returned. On error, -1 is returned. * - * Decription: - * The socket function closes a created socket. - * *****************************************************************************/ long closesocket(long sd) @@ -285,6 +284,25 @@ long closesocket(long sd) /***************************************************************************** * Name: accept * + * Decription: + * accept a connection on a socket: + * This function is used with connection-based socket types + * (SOCK_STREAM). It extracts the first connection request on the + * queue of pending connections, creates a new connected socket, and + * returns a new file descriptor referring to that socket. + * The newly created socket is not in the listening state. + * The original socket sd is unaffected by this call. + * The argument sd is a socket that has been created with socket(), + * bound to a local address with bind(), and is listening for + * connections after a listen(). The argument addr is a pointer + * to a sockaddr structure. This structure is filled in with the + * address of the peer socket, as known to the communications layer. + * The exact format of the address returned addr is determined by the + * socket's address family. The addrlen argument is a value-result + * argument: it should initially contain the size of the structure + * pointed to by addr, on return it will contain the actual + * length (in bytes) of the address returned. + * * Input Parameters: * sd socket descriptor (handle) * addr the argument addr is a pointer to a sockaddr structure @@ -306,25 +324,6 @@ long closesocket(long sd) * - On connection pending, SOC_IN_PROGRESS (-2) * - On failure, SOC_ERROR (-1) * - * Decription: - * accept a connection on a socket: - * This function is used with connection-based socket types - * (SOCK_STREAM). It extracts the first connection request on the - * queue of pending connections, creates a new connected socket, and - * returns a new file descriptor referring to that socket. - * The newly created socket is not in the listening state. - * The original socket sd is unaffected by this call. - * The argument sd is a socket that has been created with socket(), - * bound to a local address with bind(), and is listening for - * connections after a listen(). The argument addr is a pointer - * to a sockaddr structure. This structure is filled in with the - * address of the peer socket, as known to the communications layer. - * The exact format of the address returned addr is determined by the - * socket's address family. The addrlen argument is a value-result - * argument: it should initially contain the size of the structure - * pointed to by addr, on return it will contain the actual - * length (in bytes) of the address returned. - * *****************************************************************************/ long accept(long sd, sockaddr *addr, socklen_t *addrlen) @@ -375,15 +374,6 @@ long accept(long sd, sockaddr *addr, socklen_t *addrlen) /***************************************************************************** * Name: bind * - * Input Parameters: - * sd socket descriptor (handle) - * addr specifies the destination address. On this version - * only AF_INET is supported. - * addrlen contains the size of the structure pointed to by addr. - * - * Returned Value: - * On success, zero is returned. On error, -1 is returned. - * * Decription: * assign a name to a socket * This function gives the socket the local address addr. @@ -393,6 +383,15 @@ long accept(long sd, sockaddr *addr, socklen_t *addrlen) * It is necessary to assign a local address before a SOCK_STREAM * socket may receive connections. * + * Input Parameters: + * sd socket descriptor (handle) + * addr specifies the destination address. On this version + * only AF_INET is supported. + * addrlen contains the size of the structure pointed to by addr. + * + * Returned Value: + * On success, zero is returned. On error, -1 is returned. + * *****************************************************************************/ long bind(long sd, const sockaddr *addr, long addrlen) @@ -430,14 +429,6 @@ long bind(long sd, const sockaddr *addr, long addrlen) /***************************************************************************** * Name: listen * - * Input Parameters: - * sd socket descriptor (handle) - * backlog specifies the listen queue depth. On this version - * backlog is not supported. - * - * Returned Value: - * On success, zero is returned. On error, -1 is returned. - * * Decription: * listen for connections on a socket * The willingness to accept incoming connections and a queue @@ -449,6 +440,14 @@ long bind(long sd, const sockaddr *addr, long addrlen) * * NOTE: On this version, backlog is not supported * + * Input Parameters: + * sd socket descriptor (handle) + * backlog specifies the listen queue depth. On this version + * backlog is not supported. + * + * Returned Value: + * On success, zero is returned. On error, -1 is returned. + * *****************************************************************************/ long listen(long sd, long backlog) @@ -481,6 +480,14 @@ long listen(long sd, long backlog) /***************************************************************************** * Name: gethostbyname * + * Decription: + * Get host IP by name. Obtain the IP Address of machine on network, + * by its name. + * + * NOTE: On this version, only blocking mode is supported. Also note that + * the function requires DNS server to be configured prior to its + * usage. + * * Input Parameters: * hostname host name * usNameLen name length @@ -491,14 +498,6 @@ long listen(long sd, long backlog) * Returned Value: * On success, positive is returned. On error, negative is returned * - * Decription: - * Get host IP by name. Obtain the IP Address of machine on network, - * by its name. - * - * NOTE: On this version, only blocking mode is supported. Also note that - * the function requires DNS server to be configured prior to its - * usage. - * *****************************************************************************/ #ifndef CC3000_TINY_DRIVER @@ -543,15 +542,6 @@ int gethostbyname(char * hostname, uint16_t usNameLen, unsigned long* out_ip_add /***************************************************************************** * Name: connect * - * Input Parameters: - * sd socket descriptor (handle) - * addr specifies the destination addr. On this version - * only AF_INET is supported. - * addrlen contains the size of the structure pointed to by addr - * - * Returned Value: - * On success, zero is returned. On error, -1 is returned - * * Decription: * initiate a connection on a socket * Function connects the socket referred to by the socket descriptor @@ -568,6 +558,15 @@ int gethostbyname(char * hostname, uint16_t usNameLen, unsigned long* out_ip_add * thus the caller will be waiting either for the connection * establishment or for the connection establishment failure. * + * Input Parameters: + * sd socket descriptor (handle) + * addr specifies the destination addr. On this version + * only AF_INET is supported. + * addrlen contains the size of the structure pointed to by addr + * + * Returned Value: + * On success, zero is returned. On error, -1 is returned + * *****************************************************************************/ long connect(long sd, const sockaddr *addr, long addrlen) @@ -604,6 +603,15 @@ long connect(long sd, const sockaddr *addr, long addrlen) /***************************************************************************** * Name: select * + * Decription: + * Monitor socket activity + * Select allow a program to monitor multiple file descriptors, + * waiting until one or more of the file descriptors become + * "ready" for some class of I/O operation + * + * NOTE: If the timeout value set to less than 5ms it will automatically set + * to 5ms to prevent overload of the system + * * Input Parameters: * nfds the highest-numbered file descriptor in any of the * three sets, plus 1. @@ -629,15 +637,6 @@ long connect(long sd, const sockaddr *addr, long addrlen) * will return without delay. * *exceptsds - return the sockets which closed recently. * - * Decription: - * Monitor socket activity - * Select allow a program to monitor multiple file descriptors, - * waiting until one or more of the file descriptors become - * "ready" for some class of I/O operation - * - * NOTE: If the timeout value set to less than 5ms it will automatically set - * to 5ms to prevent overload of the system - * *****************************************************************************/ int select(long nfds, TICC3000fd_set *readsds, TICC3000fd_set *writesds, @@ -724,16 +723,6 @@ int select(long nfds, TICC3000fd_set *readsds, TICC3000fd_set *writesds, /***************************************************************************** * Name: setsockopt * - * Input Parameters: - * sd socket handle - * level defines the protocol level for this option - * optname defines the option name to Interrogate - * optval specifies a value for the option - * optlen specifies the length of the option value - * - * Returned Value: - * On success, zero is returned. On error, -1 is returned - * * Decription: * set socket options * This function manipulate the options associated with a socket. @@ -767,6 +756,16 @@ int select(long nfds, TICC3000fd_set *readsds, TICC3000fd_set *writesds, * or off. * In that case optval should be SOCK_ON or SOCK_OFF (optval). * + * Input Parameters: + * sd socket handle + * level defines the protocol level for this option + * optname defines the option name to Interrogate + * optval specifies a value for the option + * optlen specifies the length of the option value + * + * Returned Value: + * On success, zero is returned. On error, -1 is returned + * *****************************************************************************/ #ifndef CC3000_TINY_DRIVER @@ -811,16 +810,6 @@ int setsockopt(long sd, long level, long optname, const void *optval, socklen_t /***************************************************************************** * Name: getsockopt * - * Input Parameters: - * sd socket handle - * level defines the protocol level for this option - * optname defines the option name to Interrogate - * optval specifies a value for the option - * optlen specifies the length of the option value - * - * Returned Value: - * On success, zero is returned. On error, -1 is returned - * * Decription: * set socket options * This function manipulate the options associated with a socket. @@ -854,6 +843,16 @@ int setsockopt(long sd, long level, long optname, const void *optval, socklen_t * or off. * In that case optval should be SOCK_ON or SOCK_OFF (optval). * + * Input Parameters: + * sd socket handle + * level defines the protocol level for this option + * optname defines the option name to Interrogate + * optval specifies a value for the option + * optlen specifies the length of the option value + * + * Returned Value: + * On success, zero is returned. On error, -1 is returned + * *****************************************************************************/ int getsockopt (long sd, long level, long optname, void *optval, socklen_t *optlen) @@ -958,6 +957,11 @@ int simple_link_recv(long sd, void *buf, long len, long flags, sockaddr *from, /***************************************************************************** * Name: recv * + * Decription: + * function receives a message from a connection-mode socket + * + * NOTE: On this version, only blocking mode is supported. + * * Input Parameters: * sd socket handle * buf Points to the buffer where the message should be stored @@ -970,11 +974,6 @@ int simple_link_recv(long sd, void *buf, long len, long flags, sockaddr *from, * Return the number of bytes received, or -1 if an error * occurred * - * Decription: - * function receives a message from a connection-mode socket - * - * NOTE: On this version, only blocking mode is supported. - * *****************************************************************************/ int recv(long sd, void *buf, long len, long flags) @@ -985,6 +984,14 @@ int recv(long sd, void *buf, long len, long flags) /***************************************************************************** * Name: recvfrom * + * Decription: + * read data from socket + * function receives a message from a connection-mode or + * connectionless-mode socket. Note that raw sockets are not + * supported. + * + * NOTE: On this version, only blocking mode is supported. + * * Input Parameters: * sd socket handle * buf Points to the buffer where the message should be stored @@ -1001,14 +1008,6 @@ int recv(long sd, void *buf, long len, long flags) * Return the number of bytes received, or -1 if an error * occurred * - * Decription: - * read data from socket - * function receives a message from a connection-mode or - * connectionless-mode socket. Note that raw sockets are not - * supported. - * - * NOTE: On this version, only blocking mode is supported. - * *****************************************************************************/ int recvfrom(long sd, void *buf, long len, long flags, sockaddr *from, @@ -1137,6 +1136,13 @@ int simple_link_send(long sd, const void *buf, long len, long flags, /***************************************************************************** * Name: send * + * Decription: + * Write data to TCP socket + * This function is used to transmit a message to another + * socket. + * + * NOTE: On this version, only blocking mode is supported. + * * Input Parameters: * sd socket handle * buf Points to a buffer containing the message to be sent @@ -1147,13 +1153,6 @@ int simple_link_send(long sd, const void *buf, long len, long flags, * Return the number of bytes transmitted, or -1 if an * error occurred * - * Decription: - * Write data to TCP socket - * This function is used to transmit a message to another - * socket. - * - * NOTE: On this version, only blocking mode is supported. - * *****************************************************************************/ int send(long sd, const void *buf, long len, long flags) @@ -1164,6 +1163,13 @@ int send(long sd, const void *buf, long len, long flags) /***************************************************************************** * Name: sendto * + * Decription: + * Write data to TCP socket + * This function is used to transmit a message to another + * socket. + * + * NOTE: On this version, only blocking mode is supported. + * * Input Parameters: * sd socket handle * buf Points to a buffer containing the message to be sent @@ -1178,13 +1184,6 @@ int send(long sd, const void *buf, long len, long flags) * Return the number of bytes transmitted, or -1 if an * error occurred * - * Decription: - * Write data to TCP socket - * This function is used to transmit a message to another - * socket. - * - * NOTE: On this version, only blocking mode is supported. - * *****************************************************************************/ int sendto(long sd, const void *buf, long len, long flags, const sockaddr *to, @@ -1196,6 +1195,9 @@ int sendto(long sd, const void *buf, long len, long flags, const sockaddr *to, /***************************************************************************** * Name: mdnsAdvertiser * + * Decription: + * Set CC3000 in mDNS advertiser mode in order to advertise itself. + * * Input Parameters: * mdnsEnabled flag to enable/disable the mDNS feature * deviceServiceName Service name as part of the published @@ -1206,9 +1208,6 @@ int sendto(long sd, const void *buf, long len, long flags, const sockaddr *to, * On success, zero is returned, return SOC_ERROR if socket was not * opened successfully, or if an error occurred. * - * Decription: - * Set CC3000 in mDNS advertiser mode in order to advertise itself. - * NOTE: *****************************************************************************/ int mdnsAdvertiser(uint16_t mdnsEnabled, char * deviceServiceName, diff --git a/nuttx/drivers/wireless/cc3000/spi.h b/nuttx/drivers/wireless/cc3000/spi.h index dd7fcaf18..cf339adab 100644 --- a/nuttx/drivers/wireless/cc3000/spi.h +++ b/nuttx/drivers/wireless/cc3000/spi.h @@ -21,6 +21,10 @@ #ifndef __DRIVERS_WIRELESS_CC3000_SPI_H #define __DRIVERS_WIRELESS_CC3000_SPI_H +/***************************************************************************** + * Included Files + *****************************************************************************/ + #include <stdint.h> /***************************************************************************** diff --git a/nuttx/include/nuttx/wireless/cc3000/cc3000_common.h b/nuttx/include/nuttx/wireless/cc3000/cc3000_common.h index e4dfe2d9f..40fef3d44 100644 --- a/nuttx/include/nuttx/wireless/cc3000/cc3000_common.h +++ b/nuttx/include/nuttx/wireless/cc3000/cc3000_common.h @@ -1,175 +1,207 @@ /***************************************************************************** -* -* cc3000_common.h - CC3000 Host Driver Implementation. -* Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions -* are met: -* -* Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* -* Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the -* distribution. -* -* Neither the name of Texas Instruments Incorporated nor the names of -* its contributors may be used to endorse or promote products derived -* from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -*****************************************************************************/ -#ifndef __COMMON_H__ -#define __COMMON_H__ - -//****************************************************************************** -// Include files -//****************************************************************************** + * cc3000_common.h - CC3000 Host Driver Implementation. + * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + *****************************************************************************/ + +#ifndef _INCLUDE_NUTTX_WIRELESS_CC3000_CC3000_COMMON_H +#define _INCLUDE_NUTTX_WIRELESS_CC3000_CC3000_COMMON_H + +/***************************************************************************** + * Included files + *****************************************************************************/ + +#include <nuttx/config.h> +#include <stdint.h> + #include <sys/time.h> #include <stdlib.h> #include <errno.h> -#include <stdint.h> -//***************************************************************************** -// -// If building with a C++ compiler, make all of the definitions in this header -// have a C binding. -// -//***************************************************************************** -#ifdef __cplusplus -extern "C" { -#endif +/***************************************************************************** + * Pre-processor Definitions + *****************************************************************************/ -//***************************************************************************** -// ERROR CODES -//***************************************************************************** -#define ESUCCESS 0 -#define EFAIL -1 -#define EERROR EFAIL +/* Error codes */ -//***************************************************************************** -// COMMON DEFINES -//***************************************************************************** -#define ERROR_SOCKET_INACTIVE -57 +#define ESUCCESS 0 +#define EFAIL -1 +#define EERROR EFAIL -#define WLAN_ENABLE (1) -#define WLAN_DISABLE (0) +/* Common definitions */ -#define MAC_ADDR_LEN (6) +#define ERROR_SOCKET_INACTIVE -57 -#define SP_PORTION_SIZE (32) +#define WLAN_ENABLE (1) +#define WLAN_DISABLE (0) + +#define MAC_ADDR_LEN (6) + +#define SP_PORTION_SIZE (32) -/*Defines for minimal and maximal RX buffer size. This size includes the spi - header and hci header. - The maximal buffer size derives from: - MTU + HCI header + SPI header + sendto() agrs size - The minimum buffer size derives from: - HCI header + SPI header + max args size - - This buffer is used for receiving events and data. - The packet can not be longer than MTU size and CC3000 does not support - fragmentation. Note that the same buffer is used for reception of the data - and events from CC3000. That is why the minimum is defined. - The calculation for the actual size of buffer for reception is: - Given the maximal data size MAX_DATA that is expected to be received by - application, the required buffer is: - Using recv() or recvfrom(): - - max(CC3000_MINIMAL_RX_SIZE, MAX_DATA + HEADERS_SIZE_DATA + fromlen - + ucArgsize + 1) - - Using gethostbyname() with minimal buffer size will limit the host name - returned to 99 bytes only. - The 1 is used for the overrun detection - - Buffer size increased to 130 following the add_profile() with WEP security - which requires TX buffer size of 130 bytes: - HEADERS_SIZE_EVNT + WLAN_ADD_PROFILE_WEP_PARAM_LEN + MAX SSID LEN + 4 * MAX KEY LEN = 130 - MAX SSID LEN = 32 - MAX SSID LEN = 13 (with add_profile only ascii key setting is supported, - therfore maximum key size is 13) -*/ +/* Defines for minimal and maximal RX buffer size. This size includes the spi + * header and hci header. + * The maximal buffer size derives from: + * MTU + HCI header + SPI header + sendto() agrs size + * The minimum buffer size derives from: + * HCI header + SPI header + max args size + * + * This buffer is used for receiving events and data. + * The packet can not be longer than MTU size and CC3000 does not support + * fragmentation. Note that the same buffer is used for reception of the data + * and events from CC3000. That is why the minimum is defined. + * The calculation for the actual size of buffer for reception is: + * Given the maximal data size MAX_DATA that is expected to be received by + * application, the required buffer is: + * Using recv() or recvfrom(): + * + * max(CC3000_MINIMAL_RX_SIZE, MAX_DATA + HEADERS_SIZE_DATA + fromlen + * + ucArgsize + 1) + * + * Using gethostbyname() with minimal buffer size will limit the host name + * returned to 99 bytes only. + * The 1 is used for the overrun detection + * + * Buffer size increased to 130 following the add_profile() with WEP security + * which requires TX buffer size of 130 bytes: + * HEADERS_SIZE_EVNT + WLAN_ADD_PROFILE_WEP_PARAM_LEN + MAX SSID LEN + 4 * MAX KEY LEN = 130 + * MAX SSID LEN = 32 + * MAX SSID LEN = 13 (with add_profile only ascii key setting is supported, + * therfore maximum key size is 13) + */ #define CC3000_MINIMAL_RX_SIZE (130 + 1) #define CC3000_MAXIMAL_RX_SIZE (1519 + 1) -/*Defines for minimal and maximal TX buffer size. - This buffer is used for sending events and data. - The packet can not be longer than MTU size and CC3000 does not support - fragmentation. Note that the same buffer is used for transmission of the data - and commands. That is why the minimum is defined. - The calculation for the actual size of buffer for transmission is: - Given the maximal data size MAX_DATA, the required buffer is: - Using Sendto(): - - max(CC3000_MINIMAL_TX_SIZE, MAX_DATA + SPI_HEADER_SIZE - + SOCKET_SENDTO_PARAMS_LEN + SIMPLE_LINK_HCI_DATA_HEADER_SIZE + 1) - - Using Send(): - - max(CC3000_MINIMAL_TX_SIZE, MAX_DATA + SPI_HEADER_SIZE - + HCI_CMND_SEND_ARG_LENGTH + SIMPLE_LINK_HCI_DATA_HEADER_SIZE + 1) - - The 1 is used for the overrun detection */ - -#define CC3000_MINIMAL_TX_SIZE (130 + 1) -#define CC3000_MAXIMAL_TX_SIZE (1519 + 1) - -//TX and RX buffer sizes, allow to receive and transmit maximum data at length 8. +/* Defines for minimal and maximal TX buffer size. + * This buffer is used for sending events and data. + * The packet can not be longer than MTU size and CC3000 does not support + * fragmentation. Note that the same buffer is used for transmission of the + * data and commands. That is why the minimum is defined. + * The calculation for the actual size of buffer for transmission is: + * Given the maximal data size MAX_DATA, the required buffer is: + * Using Sendto(): + * + * max(CC3000_MINIMAL_TX_SIZE, MAX_DATA + SPI_HEADER_SIZE + * + SOCKET_SENDTO_PARAMS_LEN + SIMPLE_LINK_HCI_DATA_HEADER_SIZE + 1) + * + * Using Send(): + * + * max(CC3000_MINIMAL_TX_SIZE, MAX_DATA + SPI_HEADER_SIZE + * + HCI_CMND_SEND_ARG_LENGTH + SIMPLE_LINK_HCI_DATA_HEADER_SIZE + 1) + * + * The 1 is used for the overrun detection + */ + +#define CC3000_MINIMAL_TX_SIZE (130 + 1) +#define CC3000_MAXIMAL_TX_SIZE (1519 + 1) + +/* TX and RX buffer sizes, allow to receive and transmit maximum data at + * length 8. + */ + #ifdef CC3000_TINY_DRIVER -#define TINY_CC3000_MAXIMAL_RX_SIZE 44 -#define TINY_CC3000_MAXIMAL_TX_SIZE 59 +# define TINY_CC3000_MAXIMAL_RX_SIZE 44 +# define TINY_CC3000_MAXIMAL_TX_SIZE 59 #endif -/*In order to determine your preferred buffer size, - change CC3000_MAXIMAL_RX_SIZE and CC3000_MAXIMAL_TX_SIZE to a value between - the minimal and maximal specified above. - Note that the buffers are allocated by SPI. - In case you change the size of those buffers, you might need also to change - the linker file, since for example on MSP430 FRAM devices the buffers are - allocated in the FRAM section that is allocated manually and not by IDE. -*/ +/* In order to determine your preferred buffer size, + * change CC3000_MAXIMAL_RX_SIZE and CC3000_MAXIMAL_TX_SIZE to a value between + * the minimal and maximal specified above. + * Note that the buffers are allocated by SPI. + * In case you change the size of those buffers, you might need also to change + * the linker file, since for example on MSP430 FRAM devices the buffers are + * allocated in the FRAM section that is allocated manually and not by IDE. + */ #ifndef CC3000_TINY_DRIVER +# define CC3000_RX_BUFFER_SIZE (CC3000_MINIMAL_RX_SIZE) +# define CC3000_TX_BUFFER_SIZE (CC3000_MINIMAL_TX_SIZE) - #define CC3000_RX_BUFFER_SIZE (CC3000_MINIMAL_RX_SIZE) - #define CC3000_TX_BUFFER_SIZE (CC3000_MINIMAL_TX_SIZE) - -//if defined TINY DRIVER we use smaller RX and TX buffer in order to minimize RAM consumption -#else - #define CC3000_RX_BUFFER_SIZE (TINY_CC3000_MAXIMAL_RX_SIZE) - #define CC3000_TX_BUFFER_SIZE (TINY_CC3000_MAXIMAL_TX_SIZE) +/* if defined TINY DRIVER we use smaller RX and TX buffer in order to minimize + * RAM consumption + */ +#else +# define CC3000_RX_BUFFER_SIZE (TINY_CC3000_MAXIMAL_RX_SIZE) +# define CC3000_TX_BUFFER_SIZE (TINY_CC3000_MAXIMAL_TX_SIZE) #endif -//***************************************************************************** -// Compound Types -//***************************************************************************** -//acassis: comment to use system definition -//typedef long time_t; -//typedef unsigned long clock_t; -//typedef long suseconds_t; +/* This macro is used for copying 8 bit to stream while converting to little + * endian format. + */ + +#define UINT8_TO_STREAM(_p, _val) {*(_p)++ = (_val);} + +/* This macro is used for copying 16 bit to stream while converting to little + * endian format. + */ + +#define UINT16_TO_STREAM(_p, _u16) (UINT16_TO_STREAM_f(_p, _u16)) + +/* This macro is used for copying 32 bit to stream while converting to little + * endian format. + */ + +#define UINT32_TO_STREAM(_p, _u32) (UINT32_TO_STREAM_f(_p, _u32)) + +/* This macro is used for copying a specified value length bits (l) to stream + * while converting to little endian format. + */ + +#define ARRAY_TO_STREAM(p, a, l) {register int16_t _i; for (_i = 0; _i < l; _i++) *(p)++ = ((uint8_t *) a)[_i];} + +/* This macro is used for copying received stream to 8 bit in little endian + * format. + */ + +#define STREAM_TO_UINT8(_p, _offset, _u8) {_u8 = (uint8_t)(*(_p + _offset));} -//typedef struct timeval timeval; +/* This macro is used for copying received stream to 16 bit in little endian + * format. + */ -//struct timeval -//{ -// time_t tv_sec; /* seconds */ -// suseconds_t tv_usec; /* microseconds */ -//}; +#define STREAM_TO_UINT16(_p, _offset, _u16) {_u16 = STREAM_TO_UINT16_f(_p, _offset);} + +/* This macro is used for copying received stream to 32 bit in little endian + * format. + */ + +#define STREAM_TO_UINT32(_p, _offset, _u32) {_u32 = STREAM_TO_UINT32_f(_p, _offset);} +#define STREAM_TO_STREAM(p, a, l) {register int16_t _i; for (_i = 0; _i < l; _i++) *(a)++= ((uint8_t *) p)[_i];} + + +/***************************************************************************** + * Public Types + *****************************************************************************/ typedef char *(*tFWPatches)(unsigned long *usLength); @@ -189,171 +221,158 @@ typedef void (*tWriteWlanPin)(uint8_t val); typedef struct { - uint16_t usRxEventOpcode; - uint16_t usEventOrDataReceived; - uint8_t *pucReceivedData; - uint8_t *pucTxCommandBuffer; - - tFWPatches sFWPatches; - tDriverPatches sDriverPatches; - tBootLoaderPatches sBootLoaderPatches; - tWlanCB sWlanCB; - tWlanReadInteruptPin ReadWlanInterruptPin; - tWlanInterruptEnable WlanInterruptEnable; - tWlanInterruptDisable WlanInterruptDisable; - tWriteWlanPin WriteWlanPin; - - signed long slTransmitDataError; - uint16_t usNumberOfFreeBuffers; - uint16_t usSlBufferLength; - uint16_t usBufferSize; - uint16_t usRxDataPending; - - unsigned long NumberOfSentPackets; - unsigned long NumberOfReleasedPackets; - - uint8_t InformHostOnTxComplete; -}sSimplLinkInformation; + uint16_t usRxEventOpcode; + uint16_t usEventOrDataReceived; + uint8_t *pucReceivedData; + uint8_t *pucTxCommandBuffer; + + tFWPatches sFWPatches; + tDriverPatches sDriverPatches; + tBootLoaderPatches sBootLoaderPatches; + tWlanCB sWlanCB; + tWlanReadInteruptPin ReadWlanInterruptPin; + tWlanInterruptEnable WlanInterruptEnable; + tWlanInterruptDisable WlanInterruptDisable; + tWriteWlanPin WriteWlanPin; + + signed long slTransmitDataError; + uint16_t usNumberOfFreeBuffers; + uint16_t usSlBufferLength; + uint16_t usBufferSize; + uint16_t usRxDataPending; + + unsigned long NumberOfSentPackets; + unsigned long NumberOfReleasedPackets; + + uint8_t InformHostOnTxComplete; +} sSimplLinkInformation; + +/***************************************************************************** + * Public Data + *****************************************************************************/ + +#ifdef __cplusplus +extern "C" +{ +#endif extern volatile sSimplLinkInformation tSLInformation; +/***************************************************************************** + * Public Function Prototypes + *****************************************************************************/ + +/***************************************************************************** + * Name: SimpleLinkWaitEvent + * + * Description: + * Wait for event, pass it to the hci_event_handler and update the event + * opcode in a global variable. + * + * Input Parameters: + * usOpcode command operation code + * pRetParams command return parameters + * + * Returned Value: + * None + * + *****************************************************************************/ + +void SimpleLinkWaitEvent(uint16_t usOpcode, void *pRetParams); + +/***************************************************************************** + * Name: SimpleLinkWaitData + * + * Description: + * Wait for data, pass it to the hci_event_handler and update in a global + * variable that there is data to read. + * + * Input Parameters: + * pBuf data buffer + * from from information + * fromlen from information length + * + * Returned Value: + * None + * + *****************************************************************************/ + +void SimpleLinkWaitData(uint8_t *pBuf, uint8_t *from, uint8_t *fromlen); + +/***************************************************************************** + * Name: UINT32_TO_STREAM_f + * + * Description: + * This function is used for copying 32 bit to stream while converting to + * little endian format. + * + * Input Parameters: + * p pointer to the new stream + * u32 pointer to the 32 bit + * + * Returned Value: + * Pointer to the new stream + * + *****************************************************************************/ + +uint8_t *UINT32_TO_STREAM_f(uint8_t *p, unsigned long u32); + +/***************************************************************************** + * Name: UINT16_TO_STREAM_f + * + * Description: + * This function is used for copying 16 bit to stream while converting to + * little endian format. + * + * Input Parameters: + * p pointer to the new stream + * u16 pointer to the 16 bit + * + * Returned Value: + * Pointer to the new stream + * + *****************************************************************************/ + +uint8_t *UINT16_TO_STREAM_f(uint8_t *p, uint16_t u16) + +/***************************************************************************** + * Name: STREAM_TO_UINT16_f + * + * Description: + * This function is used for copying received stream to 16 bit in little + * endian format. + * + * Input Parameters: + * p pointer to the stream + * offset offset in the stream + * + * Returned Value: + * Pointer to the new 16 bit + * + *****************************************************************************/ + +uint16_t STREAM_TO_UINT16_f(char* p, uint16_t offset); + +/***************************************************************************** + * Name: STREAM_TO_UINT32_f + * + * Description: + * This function is used for copying received stream to 32 bit in little + * endian format. + * + * Input Parameters: + * p pointer to the stream + * offset offset in the stream + * + * Returned Value: + * Pointer to the new 32 bit + * + *****************************************************************************/ + +unsigned long STREAM_TO_UINT32_f(char* p, uint16_t offset); -//***************************************************************************** -// Prototypes for the APIs. -//***************************************************************************** - - - -//***************************************************************************** -// -//! SimpleLinkWaitEvent -//! -//! @param usOpcode command operation code -//! @param pRetParams command return parameters -//! -//! @return none -//! -//! @brief Wait for event, pass it to the hci_event_handler and -//! update the event opcode in a global variable. -// -//***************************************************************************** - -extern void SimpleLinkWaitEvent(uint16_t usOpcode, void *pRetParams); - -//***************************************************************************** -// -//! SimpleLinkWaitData -//! -//! @param pBuf data buffer -//! @param from from information -//! @param fromlen from information length -//! -//! @return none -//! -//! @brief Wait for data, pass it to the hci_event_handler -//! and update in a global variable that there is -//! data to read. -// -//***************************************************************************** - -extern void SimpleLinkWaitData(uint8_t *pBuf, uint8_t *from, uint8_t *fromlen); - -//***************************************************************************** -// -//! UINT32_TO_STREAM_f -//! -//! \param p pointer to the new stream -//! \param u32 pointer to the 32 bit -//! -//! \return pointer to the new stream -//! -//! \brief This function is used for copying 32 bit to stream -//! while converting to little endian format. -// -//***************************************************************************** - -extern uint8_t* UINT32_TO_STREAM_f (uint8_t *p, unsigned long u32); - -//***************************************************************************** -// -//! UINT16_TO_STREAM_f -//! -//! \param p pointer to the new stream -//! \param u32 pointer to the 16 bit -//! -//! \return pointer to the new stream -//! -//! \brief This function is used for copying 16 bit to stream -//! while converting to little endian format. -// -//***************************************************************************** - -extern uint8_t* UINT16_TO_STREAM_f (uint8_t *p, uint16_t u16); - -//***************************************************************************** -// -//! STREAM_TO_UINT16_f -//! -//! \param p pointer to the stream -//! \param offset offset in the stream -//! -//! \return pointer to the new 16 bit -//! -//! \brief This function is used for copying received stream to -//! 16 bit in little endian format. -// -//***************************************************************************** - -extern uint16_t STREAM_TO_UINT16_f(char* p, uint16_t offset); - -//***************************************************************************** -// -//! STREAM_TO_UINT32_f -//! -//! \param p pointer to the stream -//! \param offset offset in the stream -//! -//! \return pointer to the new 32 bit -//! -//! \brief This function is used for copying received stream to -//! 32 bit in little endian format. -// -//***************************************************************************** - -extern unsigned long STREAM_TO_UINT32_f(char* p, uint16_t offset); - - -//***************************************************************************** -// COMMON MACROs -//***************************************************************************** - - -//This macro is used for copying 8 bit to stream while converting to little endian format. -#define UINT8_TO_STREAM(_p, _val) {*(_p)++ = (_val);} -//This macro is used for copying 16 bit to stream while converting to little endian format. -#define UINT16_TO_STREAM(_p, _u16) (UINT16_TO_STREAM_f(_p, _u16)) -//This macro is used for copying 32 bit to stream while converting to little endian format. -#define UINT32_TO_STREAM(_p, _u32) (UINT32_TO_STREAM_f(_p, _u32)) -//This macro is used for copying a specified value length bits (l) to stream while converting to little endian format. -#define ARRAY_TO_STREAM(p, a, l) {register int16_t _i; for (_i = 0; _i < l; _i++) *(p)++ = ((uint8_t *) a)[_i];} -//This macro is used for copying received stream to 8 bit in little endian format. -#define STREAM_TO_UINT8(_p, _offset, _u8) {_u8 = (uint8_t)(*(_p + _offset));} -//This macro is used for copying received stream to 16 bit in little endian format. -#define STREAM_TO_UINT16(_p, _offset, _u16) {_u16 = STREAM_TO_UINT16_f(_p, _offset);} -//This macro is used for copying received stream to 32 bit in little endian format. -#define STREAM_TO_UINT32(_p, _offset, _u32) {_u32 = STREAM_TO_UINT32_f(_p, _offset);} -#define STREAM_TO_STREAM(p, a, l) {register int16_t _i; for (_i = 0; _i < l; _i++) *(a)++= ((uint8_t *) p)[_i];} - - - - -//***************************************************************************** -// -// Mark the end of the C bindings section for C++ compilers. -// -//***************************************************************************** #ifdef __cplusplus } #endif // __cplusplus -#endif // __COMMON_H__ +#endif // _INCLUDE_NUTTX_WIRELESS_CC3000_CC3000_COMMON_H diff --git a/nuttx/include/nuttx/wireless/cc3000/evnt_handler.h b/nuttx/include/nuttx/wireless/cc3000/evnt_handler.h index 6496392ea..7e16547ef 100644 --- a/nuttx/include/nuttx/wireless/cc3000/evnt_handler.h +++ b/nuttx/include/nuttx/wireless/cc3000/evnt_handler.h @@ -32,11 +32,11 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * *****************************************************************************/ -#ifndef __EVENT_HANDLER_H__ -#define __EVENT_HANDLER_H__ +#ifndef _INCLUDE_NUTTX_WIRELESS_CC3000_EVENT_HANDLER_H +#define _INCLUDE_NUTTX_WIRELESS_CC3000_EVENT_HANDLER_H #include <nuttx/wireless/cc3000/hci.h> -#include <nuttx/wireless/cc3000/socket.h> +#include <nuttx/wireless/cc3000/include/sys/socket.h> //***************************************************************************** // @@ -163,5 +163,5 @@ typedef struct _bsd_gethostbyname_return_t } #endif // __cplusplus -#endif // __EVENT_HANDLER_H__ +#endif // _INCLUDE_NUTTX_WIRELESS_CC3000_EVENT_HANDLER_H diff --git a/nuttx/include/nuttx/wireless/cc3000/hci.h b/nuttx/include/nuttx/wireless/cc3000/hci.h index b3e361f12..22b66cdee 100644 --- a/nuttx/include/nuttx/wireless/cc3000/hci.h +++ b/nuttx/include/nuttx/wireless/cc3000/hci.h @@ -1,328 +1,298 @@ /***************************************************************************** -* -* hci.h - CC3000 Host Driver Implementation. -* Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions -* are met: -* -* Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* -* Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the -* distribution. -* -* Neither the name of Texas Instruments Incorporated nor the names of -* its contributors may be used to endorse or promote products derived -* from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -*****************************************************************************/ -#ifndef __HCI_H__ -#define __HCI_H__ - -#include <nuttx/wireless/cc3000/cc3000_common.h> - -//***************************************************************************** -// -// If building with a C++ compiler, make all of the definitions in this header -// have a C binding. -// -//***************************************************************************** -#ifdef __cplusplus -extern "C" { -#endif - - -#define SPI_HEADER_SIZE (5) -#define SIMPLE_LINK_HCI_CMND_HEADER_SIZE (4) -#define HEADERS_SIZE_CMD (SPI_HEADER_SIZE + SIMPLE_LINK_HCI_CMND_HEADER_SIZE) -#define SIMPLE_LINK_HCI_DATA_CMND_HEADER_SIZE (5) -#define SIMPLE_LINK_HCI_DATA_HEADER_SIZE (5) -#define SIMPLE_LINK_HCI_PATCH_HEADER_SIZE (2) - - -//***************************************************************************** -// -// Values that can be used as HCI Commands and HCI Packet header defines -// -//***************************************************************************** -#define HCI_TYPE_CMND 0x1 -#define HCI_TYPE_DATA 0x2 -#define HCI_TYPE_PATCH 0x3 -#define HCI_TYPE_EVNT 0x4 - - -#define HCI_EVENT_PATCHES_DRV_REQ (1) -#define HCI_EVENT_PATCHES_FW_REQ (2) -#define HCI_EVENT_PATCHES_BOOTLOAD_REQ (3) - - -#define HCI_CMND_WLAN_BASE (0x0000) -#define HCI_CMND_WLAN_CONNECT 0x0001 -#define HCI_CMND_WLAN_DISCONNECT 0x0002 -#define HCI_CMND_WLAN_IOCTL_SET_SCANPARAM 0x0003 -#define HCI_CMND_WLAN_IOCTL_SET_CONNECTION_POLICY 0x0004 -#define HCI_CMND_WLAN_IOCTL_ADD_PROFILE 0x0005 -#define HCI_CMND_WLAN_IOCTL_DEL_PROFILE 0x0006 -#define HCI_CMND_WLAN_IOCTL_GET_SCAN_RESULTS 0x0007 -#define HCI_CMND_EVENT_MASK 0x0008 -#define HCI_CMND_WLAN_IOCTL_STATUSGET 0x0009 -#define HCI_CMND_WLAN_IOCTL_SIMPLE_CONFIG_START 0x000A -#define HCI_CMND_WLAN_IOCTL_SIMPLE_CONFIG_STOP 0x000B -#define HCI_CMND_WLAN_IOCTL_SIMPLE_CONFIG_SET_PREFIX 0x000C -#define HCI_CMND_WLAN_CONFIGURE_PATCH 0x000D - - -#define HCI_CMND_SOCKET_BASE 0x1000 -#define HCI_CMND_SOCKET 0x1001 -#define HCI_CMND_BIND 0x1002 -#define HCI_CMND_RECV 0x1004 -#define HCI_CMND_ACCEPT 0x1005 -#define HCI_CMND_LISTEN 0x1006 -#define HCI_CMND_CONNECT 0x1007 -#define HCI_CMND_BSD_SELECT 0x1008 -#define HCI_CMND_SETSOCKOPT 0x1009 -#define HCI_CMND_GETSOCKOPT 0x100A -#define HCI_CMND_CLOSE_SOCKET 0x100B -#define HCI_CMND_RECVFROM 0x100D -#define HCI_CMND_GETHOSTNAME 0x1010 -#define HCI_CMND_MDNS_ADVERTISE 0x1011 - + * hci.h - CC3000 Host Driver Implementation. + * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + *****************************************************************************/ + +#ifndef _INCLUDE_NUTTX_WIRELESS_CC3000_HCI_H +#define _INCLUDE_NUTTX_WIRELESS_CC3000_HCI_H -#define HCI_DATA_BASE 0x80 - -#define HCI_CMND_SEND (0x01 + HCI_DATA_BASE) -#define HCI_CMND_SENDTO (0x03 + HCI_DATA_BASE) -#define HCI_DATA_BSD_RECVFROM (0x04 + HCI_DATA_BASE) -#define HCI_DATA_BSD_RECV (0x05 + HCI_DATA_BASE) +/***************************************************************************** + * Included Files + *****************************************************************************/ +#include "cc3000_common.h" -#define HCI_CMND_NVMEM_CBASE (0x0200) - - -#define HCI_CMND_NVMEM_CREATE_ENTRY (0x0203) -#define HCI_CMND_NVMEM_SWAP_ENTRY (0x0205) -#define HCI_CMND_NVMEM_READ (0x0201) -#define HCI_CMND_NVMEM_WRITE (0x0090) -#define HCI_CMND_NVMEM_WRITE_PATCH (0x0204) -#define HCI_CMND_READ_SP_VERSION (0x0207) - -#define HCI_CMND_READ_BUFFER_SIZE 0x400B -#define HCI_CMND_SIMPLE_LINK_START 0x4000 - -#define HCI_CMND_NETAPP_BASE 0x2000 - -#define HCI_NETAPP_DHCP (0x0001 + HCI_CMND_NETAPP_BASE) -#define HCI_NETAPP_PING_SEND (0x0002 + HCI_CMND_NETAPP_BASE) -#define HCI_NETAPP_PING_REPORT (0x0003 + HCI_CMND_NETAPP_BASE) -#define HCI_NETAPP_PING_STOP (0x0004 + HCI_CMND_NETAPP_BASE) -#define HCI_NETAPP_IPCONFIG (0x0005 + HCI_CMND_NETAPP_BASE) -#define HCI_NETAPP_ARP_FLUSH (0x0006 + HCI_CMND_NETAPP_BASE) -#define HCI_NETAPP_SET_DEBUG_LEVEL (0x0008 + HCI_CMND_NETAPP_BASE) -#define HCI_NETAPP_SET_TIMERS (0x0009 + HCI_CMND_NETAPP_BASE) +/***************************************************************************** + * Pre-processor Definitions + *****************************************************************************/ + +#define SPI_HEADER_SIZE (5) +#define SIMPLE_LINK_HCI_CMND_HEADER_SIZE (4) +#define HEADERS_SIZE_CMD (SPI_HEADER_SIZE + SIMPLE_LINK_HCI_CMND_HEADER_SIZE) +#define SIMPLE_LINK_HCI_DATA_CMND_HEADER_SIZE (5) +#define SIMPLE_LINK_HCI_DATA_HEADER_SIZE (5) +#define SIMPLE_LINK_HCI_PATCH_HEADER_SIZE (2) + +/* Values that can be used as HCI Commands and HCI Packet header defines */ + +#define HCI_TYPE_CMND 0x1 +#define HCI_TYPE_DATA 0x2 +#define HCI_TYPE_PATCH 0x3 +#define HCI_TYPE_EVNT 0x4 + +#define HCI_EVENT_PATCHES_DRV_REQ (1) +#define HCI_EVENT_PATCHES_FW_REQ (2) +#define HCI_EVENT_PATCHES_BOOTLOAD_REQ (3) + +#define HCI_CMND_WLAN_BASE (0x0000) +#define HCI_CMND_WLAN_CONNECT 0x0001 +#define HCI_CMND_WLAN_DISCONNECT 0x0002 +#define HCI_CMND_WLAN_IOCTL_SET_SCANPARAM 0x0003 +#define HCI_CMND_WLAN_IOCTL_SET_CONNECTION_POLICY 0x0004 +#define HCI_CMND_WLAN_IOCTL_ADD_PROFILE 0x0005 +#define HCI_CMND_WLAN_IOCTL_DEL_PROFILE 0x0006 +#define HCI_CMND_WLAN_IOCTL_GET_SCAN_RESULTS 0x0007 +#define HCI_CMND_EVENT_MASK 0x0008 +#define HCI_CMND_WLAN_IOCTL_STATUSGET 0x0009 +#define HCI_CMND_WLAN_IOCTL_SIMPLE_CONFIG_START 0x000A +#define HCI_CMND_WLAN_IOCTL_SIMPLE_CONFIG_STOP 0x000B +#define HCI_CMND_WLAN_IOCTL_SIMPLE_CONFIG_SET_PREFIX 0x000C +#define HCI_CMND_WLAN_CONFIGURE_PATCH 0x000D + +#define HCI_CMND_SOCKET_BASE 0x1000 +#define HCI_CMND_SOCKET 0x1001 +#define HCI_CMND_BIND 0x1002 +#define HCI_CMND_RECV 0x1004 +#define HCI_CMND_ACCEPT 0x1005 +#define HCI_CMND_LISTEN 0x1006 +#define HCI_CMND_CONNECT 0x1007 +#define HCI_CMND_BSD_SELECT 0x1008 +#define HCI_CMND_SETSOCKOPT 0x1009 +#define HCI_CMND_GETSOCKOPT 0x100A +#define HCI_CMND_CLOSE_SOCKET 0x100B +#define HCI_CMND_RECVFROM 0x100D +#define HCI_CMND_GETHOSTNAME 0x1010 +#define HCI_CMND_MDNS_ADVERTISE 0x1011 + +#define HCI_DATA_BASE 0x80 + +#define HCI_CMND_SEND (0x01 + HCI_DATA_BASE) +#define HCI_CMND_SENDTO (0x03 + HCI_DATA_BASE) +#define HCI_DATA_BSD_RECVFROM (0x04 + HCI_DATA_BASE) +#define HCI_DATA_BSD_RECV (0x05 + HCI_DATA_BASE) + +#define HCI_CMND_NVMEM_CBASE (0x0200) + +#define HCI_CMND_NVMEM_CREATE_ENTRY (0x0203) +#define HCI_CMND_NVMEM_SWAP_ENTRY (0x0205) +#define HCI_CMND_NVMEM_READ (0x0201) +#define HCI_CMND_NVMEM_WRITE (0x0090) +#define HCI_CMND_NVMEM_WRITE_PATCH (0x0204) +#define HCI_CMND_READ_SP_VERSION (0x0207) + +#define HCI_CMND_READ_BUFFER_SIZE 0x400B +#define HCI_CMND_SIMPLE_LINK_START 0x4000 + +#define HCI_CMND_NETAPP_BASE 0x2000 + +#define HCI_NETAPP_DHCP (0x0001 + HCI_CMND_NETAPP_BASE) +#define HCI_NETAPP_PING_SEND (0x0002 + HCI_CMND_NETAPP_BASE) +#define HCI_NETAPP_PING_REPORT (0x0003 + HCI_CMND_NETAPP_BASE) +#define HCI_NETAPP_PING_STOP (0x0004 + HCI_CMND_NETAPP_BASE) +#define HCI_NETAPP_IPCONFIG (0x0005 + HCI_CMND_NETAPP_BASE) +#define HCI_NETAPP_ARP_FLUSH (0x0006 + HCI_CMND_NETAPP_BASE) +#define HCI_NETAPP_SET_DEBUG_LEVEL (0x0008 + HCI_CMND_NETAPP_BASE) +#define HCI_NETAPP_SET_TIMERS (0x0009 + HCI_CMND_NETAPP_BASE) + +/* Values that can be used as HCI Events defines */ + +#define HCI_EVNT_WLAN_BASE 0x0000 +#define HCI_EVNT_WLAN_CONNECT 0x0001 +#define HCI_EVNT_WLAN_DISCONNECT 0x0002 +#define HCI_EVNT_WLAN_IOCTL_ADD_PROFILE 0x0005 + +#define HCI_EVNT_SOCKET HCI_CMND_SOCKET +#define HCI_EVNT_BIND HCI_CMND_BIND +#define HCI_EVNT_RECV HCI_CMND_RECV +#define HCI_EVNT_ACCEPT HCI_CMND_ACCEPT +#define HCI_EVNT_LISTEN HCI_CMND_LISTEN +#define HCI_EVNT_CONNECT HCI_CMND_CONNECT +#define HCI_EVNT_SELECT HCI_CMND_BSD_SELECT +#define HCI_EVNT_CLOSE_SOCKET HCI_CMND_CLOSE_SOCKET +#define HCI_EVNT_RECVFROM HCI_CMND_RECVFROM +#define HCI_EVNT_SETSOCKOPT HCI_CMND_SETSOCKOPT +#define HCI_EVNT_GETSOCKOPT HCI_CMND_GETSOCKOPT +#define HCI_EVNT_BSD_GETHOSTBYNAME HCI_CMND_GETHOSTNAME +#define HCI_EVNT_MDNS_ADVERTISE CI_CMND_MDNS_ADVERTISE + +#define HCI_EVNT_SEND 0x1003 +#define HCI_EVNT_WRITE 0x100E +#define HCI_EVNT_SENDTO 0x100F + +#define HCI_EVNT_PATCHES_REQ 0x1000 + +#define HCI_EVNT_UNSOL_BASE 0x4000 + +#define HCI_EVNT_WLAN_UNSOL_BASE (0x8000) + +#define HCI_EVNT_WLAN_UNSOL_CONNECT (0x0001 + HCI_EVNT_WLAN_UNSOL_BASE) +#define HCI_EVNT_WLAN_UNSOL_DISCONNECT (0x0002 + HCI_EVNT_WLAN_UNSOL_BASE) +#define HCI_EVNT_WLAN_UNSOL_INIT (0x0004 + HCI_EVNT_WLAN_UNSOL_BASE) +#define HCI_EVNT_WLAN_TX_COMPLETE (0x0008 + HCI_EVNT_WLAN_UNSOL_BASE) +#define HCI_EVNT_WLAN_UNSOL_DHCP (0x0010 + HCI_EVNT_WLAN_UNSOL_BASE) +#define HCI_EVNT_WLAN_ASYNC_PING_REPORT (0x0040 + HCI_EVNT_WLAN_UNSOL_BASE) +#define HCI_EVNT_WLAN_ASYNC_SIMPLE_CONFIG_DONE (0x0080 + HCI_EVNT_WLAN_UNSOL_BASE) +#define HCI_EVNT_WLAN_KEEPALIVE (0x0200 + HCI_EVNT_WLAN_UNSOL_BASE) +#define HCI_EVNT_BSD_TCP_CLOSE_WAIT (0x0800 + HCI_EVNT_WLAN_UNSOL_BASE) + +#define HCI_EVNT_DATA_UNSOL_FREE_BUFF 0x4100 + +#define HCI_EVNT_NVMEM_CREATE_ENTRY HCI_CMND_NVMEM_CREATE_ENTRY +#define HCI_EVNT_NVMEM_SWAP_ENTRY HCI_CMND_NVMEM_SWAP_ENTRY + +#define HCI_EVNT_NVMEM_READ HCI_CMND_NVMEM_READ +#define HCI_EVNT_NVMEM_WRITE (0x0202) + +#define HCI_EVNT_READ_SP_VERSION HCI_CMND_READ_SP_VERSION + +#define HCI_EVNT_INPROGRESS 0xFFFF + + +#define HCI_DATA_RECVFROM 0x84 +#define HCI_DATA_RECV 0x85 +#define HCI_DATA_NVMEM 0x91 + +#define HCI_EVENT_CC3000_CAN_SHUT_DOWN 0x99 + +#define HCI_DATA_HEADER_SIZE (5) +#define HCI_EVENT_HEADER_SIZE (5) +#define HCI_DATA_CMD_HEADER_SIZE (5) +#define HCI_PATCH_HEADER_SIZE (6) +#define HCI_PACKET_TYPE_OFFSET (0) +#define HCI_PACKET_ARGSIZE_OFFSET (2) +#define HCI_PACKET_LENGTH_OFFSET (3) +#define HCI_EVENT_OPCODE_OFFSET (1) +#define HCI_EVENT_LENGTH_OFFSET (3) +#define HCI_EVENT_STATUS_OFFSET (4) +#define HCI_DATA_LENGTH_OFFSET (3) +/***************************************************************************** + * Public Data + *****************************************************************************/ +#ifdef __cplusplus +extern "C" { +#endif +/***************************************************************************** + * Public Function Prototypes + *****************************************************************************/ + +/****************************************************************************** + * Name: hci_command_send + * + * Description: + * Initiate an HCI command. + * + * Input Parameters: + * usOpcode command operation code + * pucBuff pointer to the command's arguments buffer + * ucArgsLength length of the arguments + * + * Returned Value: + * Zero + * + *****************************************************************************/ + +uint16_t hci_command_send(uint16_t usOpcode, uint8_t *pucBuff, + uint8_t ucArgsLength); + + +/****************************************************************************** + * Name: hci_data_send + * + * Description: + * + * + * Input Parameters: + * usOpcode command operation code + * ucArgs pointer to the command's arguments buffer + * usArgsLength length of the arguments + * ucTail pointer to the data buffer + * usTailLength buffer length + * + * Returned Value: + * None + * + *****************************************************************************/ + +long hci_data_send(uint8_t ucOpcode, uint8_t *ucArgs, uint16_t usArgsLength, + uint16_t usDataLength, const uint8_t *ucTail, + uint16_t usTailLength); + +/****************************************************************************** + * Name: hci_data_command_send + * + * Description: + * Prepeare HCI header and initiate an HCI data write operation + * + * Input Parameters: + * usOpcode command operation code + * pucBuff pointer to the data buffer + * ucArgsLength arguments length + * ucDataLength data length + * + * Returned Value: + * None + * + *****************************************************************************/ + +void hci_data_command_send(uint16_t usOpcode, uint8_t *pucBuff, + uint8_t ucArgsLength,uint16_t ucDataLength); + +/****************************************************************************** + * Name: hci_patch_send + * + * Description: + * Prepeare HCI header and initiate an HCI patch write operation + * + * Input Parameters: + * usOpcode command operation code + * pucBuff pointer to the command's arguments buffer + * patch pointer to patch content buffer + * usDataLength data length + * + * Returned Value: + * None + * + *****************************************************************************/ + +void hci_patch_send(uint8_t ucOpcode, uint8_t *pucBuff, char *patch, + uint16_t usDataLength); -//***************************************************************************** -// -// Values that can be used as HCI Events defines -// -//***************************************************************************** -#define HCI_EVNT_WLAN_BASE 0x0000 -#define HCI_EVNT_WLAN_CONNECT 0x0001 -#define HCI_EVNT_WLAN_DISCONNECT \ - 0x0002 -#define HCI_EVNT_WLAN_IOCTL_ADD_PROFILE \ - 0x0005 - - -#define HCI_EVNT_SOCKET HCI_CMND_SOCKET -#define HCI_EVNT_BIND HCI_CMND_BIND -#define HCI_EVNT_RECV HCI_CMND_RECV -#define HCI_EVNT_ACCEPT HCI_CMND_ACCEPT -#define HCI_EVNT_LISTEN HCI_CMND_LISTEN -#define HCI_EVNT_CONNECT HCI_CMND_CONNECT -#define HCI_EVNT_SELECT HCI_CMND_BSD_SELECT -#define HCI_EVNT_CLOSE_SOCKET HCI_CMND_CLOSE_SOCKET -#define HCI_EVNT_RECVFROM HCI_CMND_RECVFROM -#define HCI_EVNT_SETSOCKOPT HCI_CMND_SETSOCKOPT -#define HCI_EVNT_GETSOCKOPT HCI_CMND_GETSOCKOPT -#define HCI_EVNT_BSD_GETHOSTBYNAME HCI_CMND_GETHOSTNAME -#define HCI_EVNT_MDNS_ADVERTISE HCI_CMND_MDNS_ADVERTISE - -#define HCI_EVNT_SEND 0x1003 -#define HCI_EVNT_WRITE 0x100E -#define HCI_EVNT_SENDTO 0x100F - -#define HCI_EVNT_PATCHES_REQ 0x1000 - -#define HCI_EVNT_UNSOL_BASE 0x4000 - -#define HCI_EVNT_WLAN_UNSOL_BASE (0x8000) - -#define HCI_EVNT_WLAN_UNSOL_CONNECT (0x0001 + HCI_EVNT_WLAN_UNSOL_BASE) -#define HCI_EVNT_WLAN_UNSOL_DISCONNECT (0x0002 + HCI_EVNT_WLAN_UNSOL_BASE) -#define HCI_EVNT_WLAN_UNSOL_INIT (0x0004 + HCI_EVNT_WLAN_UNSOL_BASE) -#define HCI_EVNT_WLAN_TX_COMPLETE (0x0008 + HCI_EVNT_WLAN_UNSOL_BASE) -#define HCI_EVNT_WLAN_UNSOL_DHCP (0x0010 + HCI_EVNT_WLAN_UNSOL_BASE) -#define HCI_EVNT_WLAN_ASYNC_PING_REPORT (0x0040 + HCI_EVNT_WLAN_UNSOL_BASE) -#define HCI_EVNT_WLAN_ASYNC_SIMPLE_CONFIG_DONE (0x0080 + HCI_EVNT_WLAN_UNSOL_BASE) -#define HCI_EVNT_WLAN_KEEPALIVE (0x0200 + HCI_EVNT_WLAN_UNSOL_BASE) -#define HCI_EVNT_BSD_TCP_CLOSE_WAIT (0x0800 + HCI_EVNT_WLAN_UNSOL_BASE) - -#define HCI_EVNT_DATA_UNSOL_FREE_BUFF \ - 0x4100 - -#define HCI_EVNT_NVMEM_CREATE_ENTRY \ - HCI_CMND_NVMEM_CREATE_ENTRY -#define HCI_EVNT_NVMEM_SWAP_ENTRY HCI_CMND_NVMEM_SWAP_ENTRY - -#define HCI_EVNT_NVMEM_READ HCI_CMND_NVMEM_READ -#define HCI_EVNT_NVMEM_WRITE (0x0202) - -#define HCI_EVNT_READ_SP_VERSION \ - HCI_CMND_READ_SP_VERSION - -#define HCI_EVNT_INPROGRESS 0xFFFF - - -#define HCI_DATA_RECVFROM 0x84 -#define HCI_DATA_RECV 0x85 -#define HCI_DATA_NVMEM 0x91 - -#define HCI_EVENT_CC3000_CAN_SHUT_DOWN 0x99 - -//***************************************************************************** -// -// Prototypes for the structures for APIs. -// -//***************************************************************************** - -#define HCI_DATA_HEADER_SIZE (5) -#define HCI_EVENT_HEADER_SIZE (5) -#define HCI_DATA_CMD_HEADER_SIZE (5) -#define HCI_PATCH_HEADER_SIZE (6) - -#define HCI_PACKET_TYPE_OFFSET (0) -#define HCI_PACKET_ARGSIZE_OFFSET (2) -#define HCI_PACKET_LENGTH_OFFSET (3) - - -#define HCI_EVENT_OPCODE_OFFSET (1) -#define HCI_EVENT_LENGTH_OFFSET (3) -#define HCI_EVENT_STATUS_OFFSET (4) -#define HCI_DATA_LENGTH_OFFSET (3) - - - - -//***************************************************************************** -// -// Prototypes for the APIs. -// -//***************************************************************************** - -//***************************************************************************** -// -//! hci_command_send -//! -//! @param usOpcode command operation code -//! @param pucBuff pointer to the command's arguments buffer -//! @param ucArgsLength length of the arguments -//! -//! @return none -//! -//! @brief Initiate an HCI command. -// -//***************************************************************************** -extern uint16_t hci_command_send(uint16_t usOpcode, - uint8_t *ucArgs, - uint8_t ucArgsLength); - - -//***************************************************************************** -// -//! hci_data_send -//! -//! @param usOpcode command operation code -//! @param ucArgs pointer to the command's arguments buffer -//! @param usArgsLength length of the arguments -//! @param ucTail pointer to the data buffer -//! @param usTailLength buffer length -//! -//! @return none -//! -//! @brief Initiate an HCI data write operation -// -//***************************************************************************** -extern long hci_data_send(uint8_t ucOpcode, - uint8_t *ucArgs, - uint16_t usArgsLength, - uint16_t usDataLength, - const uint8_t *ucTail, - uint16_t usTailLength); - - -//***************************************************************************** -// -//! hci_data_command_send -//! -//! @param usOpcode command operation code -//! @param pucBuff pointer to the data buffer -//! @param ucArgsLength arguments length -//! @param ucDataLength data length -//! -//! @return none -//! -//! @brief Prepare HCI header and initiate an HCI data write operation -// -//***************************************************************************** -extern void hci_data_command_send(uint16_t usOpcode, uint8_t *pucBuff, - uint8_t ucArgsLength, uint16_t ucDataLength); - -//***************************************************************************** -// -//! hci_patch_send -//! -//! @param usOpcode command operation code -//! @param pucBuff pointer to the command's arguments buffer -//! @param patch pointer to patch content buffer -//! @param usDataLength data length -//! -//! @return none -//! -//! @brief Prepare HCI header and initiate an HCI patch write operation -// -//***************************************************************************** -extern void hci_patch_send(uint8_t ucOpcode, uint8_t *pucBuff, char *patch, uint16_t usDataLength); - - - -//***************************************************************************** -// -// Mark the end of the C bindings section for C++ compilers. -// -//***************************************************************************** #ifdef __cplusplus } #endif // __cplusplus -#endif // __HCI_H__ +#endif // _INCLUDE_NUTTX_WIRELESS_CC3000_HCI_H diff --git a/nuttx/include/nuttx/wireless/cc3000/host_driver_version.h b/nuttx/include/nuttx/wireless/cc3000/host_driver_version.h deleted file mode 100644 index 8742818d7..000000000 --- a/nuttx/include/nuttx/wireless/cc3000/host_driver_version.h +++ /dev/null @@ -1,55 +0,0 @@ -/*****************************************************************************
-*
-* host_driver_version.h - CC3000 Host Driver Implementation.
-* Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions
-* are met:
-*
-* Redistributions of source code must retain the above copyright
-* notice, this list of conditions and the following disclaimer.
-*
-* Redistributions in binary form must reproduce the above copyright
-* notice, this list of conditions and the following disclaimer in the
-* documentation and/or other materials provided with the
-* distribution.
-*
-* Neither the name of Texas Instruments Incorporated nor the names of
-* its contributors may be used to endorse or promote products derived
-* from this software without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*
-*****************************************************************************/
-#ifndef __HOST_DRIVER_VERSION_H__
-#define __HOST_DRIVER_VERSION_H__
-
-#define DRIVER_VERSION_NUMBER 13
-
-
-
-#endif // __VERSION_H__
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/nuttx/include/nuttx/wireless/cc3000/include/cc3000_upif.h b/nuttx/include/nuttx/wireless/cc3000/include/cc3000_upif.h index 87f9c2376..d987182f2 100644 --- a/nuttx/include/nuttx/wireless/cc3000/include/cc3000_upif.h +++ b/nuttx/include/nuttx/wireless/cc3000/include/cc3000_upif.h @@ -12,8 +12,8 @@ * CC30000 from Texas Instruments http://processors.wiki.ti.com/index.php/CC3000 * * See also: - * http://processors.wiki.ti.com/index.php/CC3000_Host_Driver_Porting_Guide - * http://processors.wiki.ti.com/index.php/CC3000_Host_Programming_Guide + * http://processors.wiki.ti.com/index.php/CC3000_Host_Driver_Porting_Guide + * http://processors.wiki.ti.com/index.php/CC3000_Host_Programming_Guide * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -44,8 +44,8 @@ * ****************************************************************************/ -#ifndef __INCLUDE_NUTTX_WIRELESS_CC3000_CC3000_INTERNAL_H -#define __INCLUDE_NUTTX_WIRELESS_CC3000_CC3000_INTERNAL_H +#ifndef __INCLUDE_NUTTX_WIRELESS_CC3000_INCLUDE_CC3000_UPIFL_H +#define __INCLUDE_NUTTX_WIRELESS_CC3000_INCLUDE_CC3000_UPIFL_H /**************************************************************************** * Included Files @@ -76,12 +76,13 @@ #endif #ifndef CONFIG_CC3000_SPIMODE -// CPOL = 0, CPHA = 1 Sample Data Falling Edge of Clock -// See http://processors.wiki.ti.com/index.php/CC3000_Serial_Port_Interface_(SPI) +/* CPOL = 0, CPHA = 1 Sample Data Falling Edge of Clock + * See http://processors.wiki.ti.com/index.php/CC3000_Serial_Port_Interface_(SPI) + */ + # define CONFIG_CC3000_SPIMODE SPIDEV_MODE0 #endif - /* Check for some required settings. This can save the user a lot of time * in getting the right configuration. */ @@ -113,7 +114,7 @@ struct cc3000_config_s /* Device characterization */ uint32_t spi_frequency; /* SPI frequency */ - uint32_t spi_mode; /* SPI mode */ + uint32_t spi_mode; /* SPI mode */ /* If multiple CC3000 devices are supported, then an IRQ number must * be provided for each so that their interrupts can be distinguished. @@ -131,12 +132,12 @@ struct cc3000_config_s * CC3000 to host, indicating that the CC3000 core module is ready to accept data. * T2 duration is approximately 7 ms. * - * irq_attach - Attach the CC3000 interrupt handler to the GPIO interrupt - * irq_enable - Enable or disable the GPIO interrupt - * clear_irq - Acknowledge/clear any pending GPIO interrupt + * irq_attach - Attach the CC3000 interrupt handler to the GPIO interrupt + * irq_enable - Enable or disable the GPIO interrupt + * clear_irq - Acknowledge/clear any pending GPIO interrupt * power_enable - Enable or disable Module enable. * chip_select - The Chip Select - * busy - Return the state of the interrupt GPIO input + * busy - Return the state of the interrupt GPIO input * */ @@ -178,11 +179,8 @@ extern "C" { * ****************************************************************************/ -EXTERN int CC3000_register(FAR struct spi_dev_s *spi, - FAR struct cc3000_config_s *config, - int minor); - - +int CC3000_register(FAR struct spi_dev_s *spi, + FAR struct cc3000_config_s *config, int minor); #undef EXTERN #ifdef __cplusplus @@ -190,4 +188,4 @@ EXTERN int CC3000_register(FAR struct spi_dev_s *spi, #endif #endif /* CONFIG_WIRELESS && CONFIG_INPUT_CC3000 */ -#endif /* __INCLUDE_NUTTX_WIRELESS_CC3000_CC3000_INTERNAL_H */ +#endif /* __INCLUDE_NUTTX_WIRELESS_CC3000_INCLUDE_CC3000_UPIFL_H */ diff --git a/nuttx/include/nuttx/wireless/cc3000/include/sys/socket.h b/nuttx/include/nuttx/wireless/cc3000/include/sys/socket.h index 7dcdba814..9ac4ecc9d 100644 --- a/nuttx/include/nuttx/wireless/cc3000/include/sys/socket.h +++ b/nuttx/include/nuttx/wireless/cc3000/include/sys/socket.h @@ -1,152 +1,117 @@ /***************************************************************************** -* -* socket.h - CC3000 Host Driver Implementation. -* Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions -* are met: -* -* Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* -* Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the -* distribution. -* -* Neither the name of Texas Instruments Incorporated nor the names of -* its contributors may be used to endorse or promote products derived -* from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -*****************************************************************************/ -#ifndef _INCLUDE_NUTTX_WIRELESS_CC3000__SOCKET_H -#define _INCLUDE_NUTTX_WIRELESS_CC3000__SOCKET_H - - -//***************************************************************************** -// -//! \addtogroup socket_api -//! @{ -// -//***************************************************************************** - - -//***************************************************************************** -// -// If building with a C++ compiler, make all of the definitions in this header -// have a C binding. -// -//***************************************************************************** -#ifdef __cplusplus -extern "C" { -#endif + * socket.h - CC3000 Host Driver Implementation. + * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + *****************************************************************************/ + +#ifndef __INCLUDE_NUTTX_WIRELESS_CC3000_INCLUDE_SYS_SOCKET_H +#define __INCLUDE_NUTTX_WIRELESS_CC3000_INCLUDE_SYS_SOCKET_H -#define HOSTNAME_MAX_LENGTH (230) // 230 bytes + header shouldn't exceed 8 bit value +/***************************************************************************** + * Pre-processor Definitions + *****************************************************************************/ + +#define HOSTNAME_MAX_LENGTH (230) /* 230 bytes + header shouldn't exceed 8 + * bit value */ -//--------- Address Families -------- +/*--------- Address Families --------*/ #define AF_INET 2 #define AF_INET6 23 -//------------ Socket Types ------------ +/*------------ Socket Types ------------*/ #define SOCK_STREAM 1 #define SOCK_DGRAM 2 -#define SOCK_RAW 3 // Raw sockets allow new IPv4 protocols to be implemented in user space. A raw socket receives or sends the raw datagram not including link level headers +#define SOCK_RAW 3 /* Raw sockets allow new IPv4 + * protocols to be implemented in + * user space. A raw socket receives + * or sends the raw datagram not + * including link level headers */ #define SOCK_RDM 4 #define SOCK_SEQPACKET 5 -//----------- Socket Protocol ---------- +/*----------- Socket Protocol ----------*/ -#define IPPROTO_IP 0 // dummy for IP -#define IPPROTO_ICMP 1 // control message protocol -#define IPPROTO_IPV4 IPPROTO_IP // IP inside IP -#define IPPROTO_TCP 6 // tcp -#define IPPROTO_UDP 17 // user datagram protocol -#define IPPROTO_IPV6 41 // IPv6 in IPv6 -#define IPPROTO_NONE 59 // No next header -#define IPPROTO_RAW 255 // raw IP packet +#define IPPROTO_IP 0 /* Dummy for IP */ +#define IPPROTO_ICMP 1 /* Control message protocol */ +#define IPPROTO_IPV4 IPPROTO_IP /* IP inside IP */ +#define IPPROTO_TCP 6 /* TCP */ +#define IPPROTO_UDP 17 /* User datagram protocol */ +#define IPPROTO_IPV6 41 /* IPv6 in IPv6 */ +#define IPPROTO_NONE 59 /* No next header */ +#define IPPROTO_RAW 255 /* Raw IP packet */ #define IPPROTO_MAX 256 -//----------- Socket retunr codes ----------- +/*----------- Socket retunr codes -----------*/ -#define SOC_ERROR (-1) // error -#define SOC_IN_PROGRESS (-2) // socket in progress +#define SOC_ERROR (-1) /* Error */ +#define SOC_IN_PROGRESS (-2) /* Socket in progress */ -//----------- Socket Options ----------- -#define SOL_SOCKET 0xffff // socket level -#define SOCKOPT_RECV_NONBLOCK 0 // recv non block mode, set SOCK_ON or SOCK_OFF (default block mode) -#define SOCKOPT_RECV_TIMEOUT 1 // optname to configure recv and recvfromtimeout -#define SOCKOPT_ACCEPT_NONBLOCK 2 // accept non block mode, set SOCK_ON or SOCK_OFF (default block mode) -#define SOCK_ON 0 // socket non-blocking mode is enabled -#define SOCK_OFF 1 // socket blocking mode is enabled +/*----------- Socket Options -----------*/ +#define SOL_SOCKET 0xffff /* Socket level */ +#define SOCKOPT_RECV_NONBLOCK 0 /* recv non block mode, set SOCK_ON or + * SOCK_OFF (default block mode) */ +#define SOCKOPT_RECV_TIMEOUT 1 /* optname to configure recv and recvfromtimeout */ +#define SOCKOPT_ACCEPT_NONBLOCK 2 /* accept non block mode, set SOCK_ON or SOCK_OFF + * (default block mode) */ +#define SOCK_ON 0 /* socket non-blocking mode is enabled */ +#define SOCK_OFF 1 /* socket blocking mode is enabled */ -#define TCP_NODELAY 0x0001 -#define TCP_BSDURGENT 0x7000 +#define TCP_NODELAY 0x0001 +#define TCP_BSDURGENT 0x7000 -#define MAX_PACKET_SIZE 1500 -#define MAX_LISTEN_QUEUE 4 +#define MAX_PACKET_SIZE 1500 +#define MAX_LISTEN_QUEUE 4 #define IOCTL_SOCKET_EVENTMASK -#define __FD_SETSIZE 32 +#define __FD_SETSIZE 32 -#define ASIC_ADDR_LEN 8 - -#define NO_QUERY_RECIVED -3 - - -typedef struct _in_addr_t -{ - unsigned long s_addr; // load with inet_aton() -} in_addr; +#define ASIC_ADDR_LEN 8 -typedef struct _sockaddr_t -{ - uint16_t sa_family; - uint8_t sa_data[14]; -} sockaddr; - -typedef struct _sockaddr_in_t -{ - int16_t sin_family; // e.g. AF_INET - uint16_t sin_port; // e.g. htons(3490) - in_addr sin_addr; // see struct in_addr, below - char sin_zero[8]; // zero this if you want to -} sockaddr_in; - -//typedef unsigned long socklen_t; //acassis: conflict with previous declaration on nuttx +#define NO_QUERY_RECIVED -3 -// The fd_set member is required to be an array of longs. -typedef long int __fd_mask; +/* It's easier to assume 8-bit bytes than to get CHAR_BIT. */ -// It's easier to assume 8-bit bytes than to get CHAR_BIT. #define __NFDBITS (8 * sizeof (__fd_mask)) #define __FDELT(d) ((d) / __NFDBITS) #define __FDMASK(d) ((__fd_mask) 1 << ((d) % __NFDBITS)) -// fd_set for select and pselect. -typedef struct -{ - __fd_mask fds_bits[__FD_SETSIZE / __NFDBITS]; #define __FDS_BITS(set) ((set)->fds_bits) -} TICC3000fd_set; -// We don't use `memset' because this would require a prototype and -// the array isn't too big. +/* We don't use `memset' because this would require a prototype and + * the array isn't too big. + */ + #define __FD_ZERO(set) \ do { \ unsigned int __i; \ @@ -158,14 +123,15 @@ typedef struct #define __FD_CLR(d, set) (__FDS_BITS (set)[__FDELT (d)] &= ~__FDMASK (d)) #define __FD_ISSET(d, set) (__FDS_BITS (set)[__FDELT (d)] & __FDMASK (d)) -// Access macros for 'TICC3000fd_set'. +/* Access macros for 'TICC3000fd_set' */ + #define FD_SET(fd, fdsetp) __FD_SET (fd, fdsetp) #define FD_CLR(fd, fdsetp) __FD_CLR (fd, fdsetp) #define FD_ISSET(fd, fdsetp) __FD_ISSET (fd, fdsetp) #define FD_ZERO(fdsetp) __FD_ZERO (fdsetp) -//Use in case of Big Endian only - +/* Use in case of Big Endian only */ + #define htonl(A) ((((unsigned long)(A) & 0xff000000) >> 24) | \ (((unsigned long)(A) & 0x00ff0000) >> 8) | \ (((unsigned long)(A) & 0x0000ff00) << 8) | \ @@ -173,490 +139,547 @@ typedef struct #define ntohl htonl -//Use in case of Big Endian only +/* Use in case of Big Endian only */ #define htons(A) ((((unsigned long)(A) & 0xff00) >> 8) | \ (((unsigned long)(A) & 0x00ff) << 8)) #define ntohs htons -// mDNS port - 5353 mDNS multicast address - 224.0.0.251 -#define SET_mDNS_ADD(sockaddr) sockaddr.sa_data[0] = 0x14; \ - sockaddr.sa_data[1] = 0xe9; \ - sockaddr.sa_data[2] = 0xe0; \ - sockaddr.sa_data[3] = 0x0; \ - sockaddr.sa_data[4] = 0x0; \ - sockaddr.sa_data[5] = 0xfb; - - -//***************************************************************************** -// -// Prototypes for the APIs. -// -//***************************************************************************** - -//***************************************************************************** -// -//! socket -//! -//! @param domain selects the protocol family which will be used for -//! communication. On this version only AF_INET is supported -//! @param type specifies the communication semantics. On this version -//! only SOCK_STREAM, SOCK_DGRAM, SOCK_RAW are supported -//! @param protocol specifies a particular protocol to be used with the -//! socket IPPROTO_TCP, IPPROTO_UDP or IPPROTO_RAW are -//! supported. -//! -//! @return On success, socket handle that is used for consequent socket -//! operations. On error, -1 is returned. -//! -//! @brief create an endpoint for communication -//! The socket function creates a socket that is bound to a specific -//! transport service provider. This function is called by the -//! application layer to obtain a socket handle. -// -//***************************************************************************** -extern int socket(long domain, long type, long protocol); - -//***************************************************************************** -// -//! closesocket -//! -//! @param sd socket handle. -//! -//! @return On success, zero is returned. On error, -1 is returned. -//! -//! @brief The socket function closes a created socket. -// -//***************************************************************************** -extern long closesocket(long sd); - -//***************************************************************************** -// -//! accept -//! -//! @param[in] sd socket descriptor (handle) -//! @param[out] addr the argument addr is a pointer to a sockaddr structure -//! This structure is filled in with the address of the -//! peer socket, as known to the communications layer. -//! determined. The exact format of the address returned -//! addr is by the socket's address sockaddr. -//! On this version only AF_INET is supported. -//! This argument returns in network order. -//! @param[out] addrlen the addrlen argument is a value-result argument: -//! it should initially contain the size of the structure -//! pointed to by addr. -//! -//! @return For socket in blocking mode: -//! On success, socket handle. on failure negative -//! For socket in non-blocking mode: -//! - On connection establishment, socket handle -//! - On connection pending, SOC_IN_PROGRESS (-2) -//! - On failure, SOC_ERROR (-1) -//! -//! @brief accept a connection on a socket: -//! This function is used with connection-based socket types -//! (SOCK_STREAM). It extracts the first connection request on the -//! queue of pending connections, creates a new connected socket, and -//! returns a new file descriptor referring to that socket. -//! The newly created socket is not in the listening state. -//! The original socket sd is unaffected by this call. -//! The argument sd is a socket that has been created with socket(), -//! bound to a local address with bind(), and is listening for -//! connections after a listen(). The argument addr is a pointer -//! to a sockaddr structure. This structure is filled in with the -//! address of the peer socket, as known to the communications layer. -//! The exact format of the address returned addr is determined by the -//! socket's address family. The addrlen argument is a value-result -//! argument: it should initially contain the size of the structure -//! pointed to by addr, on return it will contain the actual -//! length (in bytes) of the address returned. -//! -//! @sa socket ; bind ; listen -// -//***************************************************************************** -extern long accept(long sd, sockaddr *addr, socklen_t *addrlen); - -//***************************************************************************** -// -//! bind -//! -//! @param[in] sd socket descriptor (handle) -//! @param[out] addr specifies the destination address. On this version -//! only AF_INET is supported. -//! @param[out] addrlen contains the size of the structure pointed to by addr. -//! -//! @return On success, zero is returned. On error, -1 is returned. -//! -//! @brief assign a name to a socket -//! This function gives the socket the local address addr. -//! addr is addrlen bytes long. Traditionally, this is called when a -//! socket is created with socket, it exists in a name space (address -//! family) but has no name assigned. -//! It is necessary to assign a local address before a SOCK_STREAM -//! socket may receive connections. -//! -//! @sa socket ; accept ; listen -// -//***************************************************************************** -extern long bind(long sd, const sockaddr *addr, long addrlen); - -//***************************************************************************** -// -//! listen -//! -//! @param[in] sd socket descriptor (handle) -//! @param[in] backlog specifies the listen queue depth. On this version -//! backlog is not supported. -//! @return On success, zero is returned. On error, -1 is returned. -//! -//! @brief listen for connections on a socket -//! The willingness to accept incoming connections and a queue -//! limit for incoming connections are specified with listen(), -//! and then the connections are accepted with accept. -//! The listen() call applies only to sockets of type SOCK_STREAM -//! The backlog parameter defines the maximum length the queue of -//! pending connections may grow to. -//! -//! @sa socket ; accept ; bind -//! -//! @note On this version, backlog is not supported -// -//***************************************************************************** -extern long listen(long sd, long backlog); - -//***************************************************************************** -// -//! gethostbyname -//! -//! @param[in] hostname host name -//! @param[in] usNameLen name length -//! @param[out] out_ip_addr This parameter is filled in with host IP address. -//! In case that host name is not resolved, -//! out_ip_addr is zero. -//! @return On success, positive is returned. On error, negative is returned -//! -//! @brief Get host IP by name. Obtain the IP Address of machine on network, -//! by its name. -//! -//! @note On this version, only blocking mode is supported. Also note that -//! the function requires DNS server to be configured prior to its usage. -// -//***************************************************************************** -#ifndef CC3000_TINY_DRIVER -extern int gethostbyname(char * hostname, uint16_t usNameLen, unsigned long* out_ip_addr); +/* mDNS port - 5353 mDNS multicast address - 224.0.0.251 */ + +#define SET_mDNS_ADD(sockaddr) sockaddr.sa_data[0] = 0x14; \ + sockaddr.sa_data[1] = 0xe9; \ + sockaddr.sa_data[2] = 0xe0; \ + sockaddr.sa_data[3] = 0x0; \ + sockaddr.sa_data[4] = 0x0; \ + sockaddr.sa_data[5] = 0xfb; + +/***************************************************************************** + * Public Types + *****************************************************************************/ + +typedef struct _in_addr_t +{ + unsigned long s_addr; /* load with inet_aton() */ +} in_addr; + +typedef struct _sockaddr_t +{ + uint16_t sa_family; + uint8_t sa_data[14]; +} sockaddr; + +typedef struct _sockaddr_in_t +{ + int16_t sin_family; /* e.g. AF_INET */ + uint16_t sin_port; /* e.g. htons(3490) */ + in_addr sin_addr; /* see struct in_addr, below */ + char sin_zero[8]; /* zero this if you want to */ +} sockaddr_in; + +#if 0 /* acassis: conflict with previous declaration on nuttx */ +typedef unsigned long socklen_t; #endif +/* The fd_set member is required to be an array of longs. */ -//***************************************************************************** -// -//! connect -//! -//! @param[in] sd socket descriptor (handle) -//! @param[in] addr specifies the destination addr. On this version -//! only AF_INET is supported. -//! @param[out] addrlen contains the size of the structure pointed to by addr -//! @return On success, zero is returned. On error, -1 is returned -//! -//! @brief initiate a connection on a socket -//! Function connects the socket referred to by the socket descriptor -//! sd, to the address specified by addr. The addrlen argument -//! specifies the size of addr. The format of the address in addr is -//! determined by the address space of the socket. If it is of type -//! SOCK_DGRAM, this call specifies the peer with which the socket is -//! to be associated; this address is that to which datagrams are to be -//! sent, and the only address from which datagrams are to be received. -//! If the socket is of type SOCK_STREAM, this call attempts to make a -//! connection to another socket. The other socket is specified by -//! address, which is an address in the communications space of the -//! socket. Note that the function implements only blocking behavior -//! thus the caller will be waiting either for the connection -//! establishment or for the connection establishment failure. -//! -//! @sa socket -// -//***************************************************************************** -extern long connect(long sd, const sockaddr *addr, long addrlen); - -//***************************************************************************** -// -//! select -//! -//! @param[in] nfds the highest-numbered file descriptor in any of the -//! three sets, plus 1. -//! @param[out] writesds socket descriptors list for write monitoring -//! @param[out] readsds socket descriptors list for read monitoring -//! @param[out] exceptsds socket descriptors list for exception monitoring -//! @param[in] timeout is an upper bound on the amount of time elapsed -//! before select() returns. Null means infinity -//! timeout. The minimum timeout is 5 milliseconds, -//! less than 5 milliseconds will be set -//! automatically to 5 milliseconds. -//! @return On success, select() returns the number of file descriptors -//! contained in the three returned descriptor sets (that is, the -//! total number of bits that are set in readfds, writefds, -//! exceptfds) which may be zero if the timeout expires before -//! anything interesting happens. -//! On error, -1 is returned. -//! *readsds - return the sockets on which Read request will -//! return without delay with valid data. -//! *writesds - return the sockets on which Write request -//! will return without delay. -//! *exceptsds - return the sockets which closed recently. -//! -//! @brief Monitor socket activity -//! Select allow a program to monitor multiple file descriptors, -//! waiting until one or more of the file descriptors become -//! "ready" for some class of I/O operation -//! -//! @Note If the timeout value set to less than 5ms it will automatically set -//! to 5ms to prevent overload of the system -//! -//! @sa socket -// -//***************************************************************************** -extern int select(long nfds, TICC3000fd_set *readsds, TICC3000fd_set *writesds, - TICC3000fd_set *exceptsds, struct timeval *timeout); - -//***************************************************************************** -// -//! setsockopt -//! -//! @param[in] sd socket handle -//! @param[in] level defines the protocol level for this option -//! @param[in] optname defines the option name to Interrogate -//! @param[in] optval specifies a value for the option -//! @param[in] optlen specifies the length of the option value -//! @return On success, zero is returned. On error, -1 is returned -//! -//! @brief set socket options -//! This function manipulate the options associated with a socket. -//! Options may exist at multiple protocol levels; they are always -//! present at the uppermost socket level. -//! When manipulating socket options the level at which the option -//! resides and the name of the option must be specified. -//! To manipulate options at the socket level, level is specified as -//! SOL_SOCKET. To manipulate options at any other level the protocol -//! number of the appropriate protocol controlling the option is -//! supplied. For example, to indicate that an option is to be -//! interpreted by the TCP protocol, level should be set to the -//! protocol number of TCP; -//! The parameters optval and optlen are used to access optval - -//! use for setsockopt(). For getsockopt() they identify a buffer -//! in which the value for the requested option(s) are to -//! be returned. For getsockopt(), optlen is a value-result -//! parameter, initially containing the size of the buffer -//! pointed to by option_value, and modified on return to -//! indicate the actual size of the value returned. If no option -//! value is to be supplied or returned, option_value may be NULL. -//! -//! @Note On this version the following two socket options are enabled: -//! The only protocol level supported in this version -//! is SOL_SOCKET (level). -//! 1. SOCKOPT_RECV_TIMEOUT (optname) -//! SOCKOPT_RECV_TIMEOUT configures recv and recvfrom timeout -//! in milliseconds. -//! In that case optval should be pointer to unsigned long. -//! 2. SOCKOPT_NONBLOCK (optname). sets the socket non-blocking mode on -//! or off. -//! In that case optval should be SOCK_ON or SOCK_OFF (optval). -//! -//! @sa getsockopt -// -//***************************************************************************** -#ifndef CC3000_TINY_DRIVER -extern int setsockopt(long sd, long level, long optname, const void *optval, - socklen_t optlen); +typedef long int __fd_mask; + +/* fd_set for select and pselect. */ + +typedef struct +{ + __fd_mask fds_bits[__FD_SETSIZE / __NFDBITS]; +} TICC3000fd_set; + +/***************************************************************************** + * Public Data + *****************************************************************************/ + +#ifdef __cplusplus +extern "C" { #endif -//***************************************************************************** -// -//! getsockopt -//! -//! @param[in] sd socket handle -//! @param[in] level defines the protocol level for this option -//! @param[in] optname defines the option name to Interrogate -//! @param[out] optval specifies a value for the option -//! @param[out] optlen specifies the length of the option value -//! @return On success, zero is returned. On error, -1 is returned -//! -//! @brief set socket options -//! This function manipulate the options associated with a socket. -//! Options may exist at multiple protocol levels; they are always -//! present at the uppermost socket level. -//! When manipulating socket options the level at which the option -//! resides and the name of the option must be specified. -//! To manipulate options at the socket level, level is specified as -//! SOL_SOCKET. To manipulate options at any other level the protocol -//! number of the appropriate protocol controlling the option is -//! supplied. For example, to indicate that an option is to be -//! interpreted by the TCP protocol, level should be set to the -//! protocol number of TCP; -//! The parameters optval and optlen are used to access optval - -//! use for setsockopt(). For getsockopt() they identify a buffer -//! in which the value for the requested option(s) are to -//! be returned. For getsockopt(), optlen is a value-result -//! parameter, initially containing the size of the buffer -//! pointed to by option_value, and modified on return to -//! indicate the actual size of the value returned. If no option -//! value is to be supplied or returned, option_value may be NULL. -//! -//! @Note On this version the following two socket options are enabled: -//! The only protocol level supported in this version -//! is SOL_SOCKET (level). -//! 1. SOCKOPT_RECV_TIMEOUT (optname) -//! SOCKOPT_RECV_TIMEOUT configures recv and recvfrom timeout -//! in milliseconds. -//! In that case optval should be pointer to unsigned long. -//! 2. SOCKOPT_NONBLOCK (optname). sets the socket non-blocking mode on -//! or off. -//! In that case optval should be SOCK_ON or SOCK_OFF (optval). -//! -//! @sa setsockopt -// -//***************************************************************************** -extern int getsockopt(long sd, long level, long optname, void *optval, - socklen_t *optlen); - -//***************************************************************************** -// -//! recv -//! -//! @param[in] sd socket handle -//! @param[out] buf Points to the buffer where the message should be stored -//! @param[in] len Specifies the length in bytes of the buffer pointed to -//! by the buffer argument. -//! @param[in] flags Specifies the type of message reception. -//! On this version, this parameter is not supported. -//! -//! @return Return the number of bytes received, or -1 if an error -//! occurred -//! -//! @brief function receives a message from a connection-mode socket -//! -//! @sa recvfrom -//! -//! @Note On this version, only blocking mode is supported. -// -//***************************************************************************** -extern int recv(long sd, void *buf, long len, long flags); - -//***************************************************************************** -// -//! recvfrom -//! -//! @param[in] sd socket handle -//! @param[out] buf Points to the buffer where the message should be stored -//! @param[in] len Specifies the length in bytes of the buffer pointed to -//! by the buffer argument. -//! @param[in] flags Specifies the type of message reception. -//! On this version, this parameter is not supported. -//! @param[in] from pointer to an address structure indicating the source -//! address: sockaddr. On this version only AF_INET is -//! supported. -//! @param[in] fromlen source address structure size -//! -//! @return Return the number of bytes received, or -1 if an error -//! occurred -//! -//! @brief read data from socket -//! function receives a message from a connection-mode or -//! connectionless-mode socket. Note that raw sockets are not -//! supported. -//! -//! @sa recv -//! -//! @Note On this version, only blocking mode is supported. -// -//***************************************************************************** -extern int recvfrom(long sd, void *buf, long len, long flags, sockaddr *from, - socklen_t *fromlen); - -//***************************************************************************** -// -//! send -//! -//! @param sd socket handle -//! @param buf Points to a buffer containing the message to be sent -//! @param len message size in bytes -//! @param flags On this version, this parameter is not supported -//! -//! @return Return the number of bytes transmitted, or -1 if an -//! error occurred -//! -//! @brief Write data to TCP socket -//! This function is used to transmit a message to another -//! socket. -//! -//! @Note On this version, only blocking mode is supported. -//! -//! @sa sendto -// -//***************************************************************************** - -extern int send(long sd, const void *buf, long len, long flags); - -//***************************************************************************** -// -//! sendto -//! -//! @param sd socket handle -//! @param buf Points to a buffer containing the message to be sent -//! @param len message size in bytes -//! @param flags On this version, this parameter is not supported -//! @param to pointer to an address structure indicating the destination -//! address: sockaddr. On this version only AF_INET is -//! supported. -//! @param tolen destination address structure size -//! -//! @return Return the number of bytes transmitted, or -1 if an -//! error occurred -//! -//! @brief Write data to TCP socket -//! This function is used to transmit a message to another -//! socket. -//! -//! @Note On this version, only blocking mode is supported. -//! -//! @sa send -// -//***************************************************************************** - -extern int sendto(long sd, const void *buf, long len, long flags, - const sockaddr *to, socklen_t tolen); - -//***************************************************************************** -// -//! mdnsAdvertiser -//! -//! @param[in] mdnsEnabled flag to enable/disable the mDNS feature -//! @param[in] deviceServiceName Service name as part of the published -//! canonical domain name -//! @param[in] deviceServiceNameLength Length of the service name -//! -//! -//! @return On success, zero is returned, return SOC_ERROR if socket was not -//! opened successfully, or if an error occurred. -//! -//! @brief Set CC3000 in mDNS advertiser mode in order to advertise itself. -// -//***************************************************************************** -extern int mdnsAdvertiser(uint16_t mdnsEnabled, char * deviceServiceName, uint16_t deviceServiceNameLength); - -//***************************************************************************** -// -// Close the Doxygen group. -//! @} -// -//***************************************************************************** - - -//***************************************************************************** -// -// Mark the end of the C bindings section for C++ compilers. -// -//***************************************************************************** + +/***************************************************************************** + * Public Function Prototypes + *****************************************************************************/ + +/***************************************************************************** + * Name: socket + * + * Decription: + * create an endpoint for communication. The socket function creates a + * socket that is bound to a specific transport service provider. This + * function is called by the application layer to obtain a socket handle. + * + * Input Parameters: + * domain selects the protocol family which will be used for + * communication. On this version only AF_INET is supported + * type specifies the communication semantics. On this version + * only SOCK_STREAM, SOCK_DGRAM, SOCK_RAW are supported + * protocol specifies a particular protocol to be used with the + * socket IPPROTO_TCP, IPPROTO_UDP or IPPROTO_RAW are + * supported. + * + * Returned Value: + * On success, socket handle that is used for consequent socket + * operations. On error, -1 is returned. + * + *****************************************************************************/ + +int socket(long domain, long type, long protocol); + +/***************************************************************************** + * Name: closesocket + * + * Decription: + * The socket function closes a created socket. + * + * Input Parameters: + * sd socket handle. + * + * Returned Value: + * On success, zero is returned. On error, -1 is returned. + * + *****************************************************************************/ + +long closesocket(long sd); + +/***************************************************************************** + * Name: accept + * + * Decription: + * accept a connection on a socket: + * This function is used with connection-based socket types + * (SOCK_STREAM). It extracts the first connection request on the + * queue of pending connections, creates a new connected socket, and + * returns a new file descriptor referring to that socket. + * The newly created socket is not in the listening state. + * The original socket sd is unaffected by this call. + * The argument sd is a socket that has been created with socket(), + * bound to a local address with bind(), and is listening for + * connections after a listen(). The argument addr is a pointer + * to a sockaddr structure. This structure is filled in with the + * address of the peer socket, as known to the communications layer. + * The exact format of the address returned addr is determined by the + * socket's address family. The addrlen argument is a value-result + * argument: it should initially contain the size of the structure + * pointed to by addr, on return it will contain the actual + * length (in bytes) of the address returned. + * + * Input Parameters: + * sd socket descriptor (handle) + * addr the argument addr is a pointer to a sockaddr structure + * This structure is filled in with the address of the + * peer socket, as known to the communications layer. + * determined. The exact format of the address returned + * addr is by the socket's address sockaddr. + * On this version only AF_INET is supported. + * This argument returns in network order. + * addrlen The addrlen argument is a value-result argument: + * it should initially contain the size of the structure + * pointed to by addr. + * + * Returned Value: + * For socket in blocking mode: + * On success, socket handle. on failure negative + * For socket in non-blocking mode: + * - On connection establishment, socket handle + * - On connection pending, SOC_IN_PROGRESS (-2) + * - On failure, SOC_ERROR (-1) + * + *****************************************************************************/ + +long accept(long sd, sockaddr *addr, socklen_t *addrlen); + +/***************************************************************************** + * Name: bind + * + * Decription: + * assign a name to a socket + * This function gives the socket the local address addr. + * addr is addrlen bytes long. Traditionally, this is called when a + * socket is created with socket, it exists in a name space (address + * family) but has no name assigned. + * It is necessary to assign a local address before a SOCK_STREAM + * socket may receive connections. + * + * Input Parameters: + * sd socket descriptor (handle) + * addr specifies the destination address. On this version + * only AF_INET is supported. + * addrlen contains the size of the structure pointed to by addr. + * + * Returned Value: + * On success, zero is returned. On error, -1 is returned. + * + *****************************************************************************/ + +long bind(long sd, const sockaddr *addr, long addrlen); + +/***************************************************************************** + * Name: listen + * + * Decription: + * listen for connections on a socket + * The willingness to accept incoming connections and a queue + * limit for incoming connections are specified with listen(), + * and then the connections are accepted with accept. + * The listen() call applies only to sockets of type SOCK_STREAM + * The backlog parameter defines the maximum length the queue of + * pending connections may grow to. + * + * NOTE: On this version, backlog is not supported + * + * Input Parameters: + * sd socket descriptor (handle) + * backlog specifies the listen queue depth. On this version + * backlog is not supported. + * + * Returned Value: + * On success, zero is returned. On error, -1 is returned. + * + *****************************************************************************/ + +long listen(long sd, long backlog); + +/***************************************************************************** + * Name: gethostbyname + * + * Decription: + * Get host IP by name. Obtain the IP Address of machine on network, + * by its name. + * + * NOTE: On this version, only blocking mode is supported. Also note that + * the function requires DNS server to be configured prior to its + * usage. + * + * Input Parameters: + * hostname host name + * usNameLen name length + * out_ip_addr This parameter is filled in with host IP address. + * In case that host name is not resolved, + * out_ip_addr is zero. + * + * Returned Value: + * On success, positive is returned. On error, negative is returned + * + *****************************************************************************/ + +#ifndef CC3000_TINY_DRIVER +int gethostbyname(char * hostname, uint16_t usNameLen, unsigned long* out_ip_addr); +#endif + +/***************************************************************************** + * Name: connect + * + * Decription: + * initiate a connection on a socket + * Function connects the socket referred to by the socket descriptor + * sd, to the address specified by addr. The addrlen argument + * specifies the size of addr. The format of the address in addr is + * determined by the address space of the socket. If it is of type + * SOCK_DGRAM, this call specifies the peer with which the socket is + * to be associated; this address is that to which datagrams are to be + * sent, and the only address from which datagrams are to be received. + * If the socket is of type SOCK_STREAM, this call attempts to make a + * connection to another socket. The other socket is specified by + * address, which is an address in the communications space of the + * socket. Note that the function implements only blocking behavior + * thus the caller will be waiting either for the connection + * establishment or for the connection establishment failure. + * + * Input Parameters: + * sd socket descriptor (handle) + * addr specifies the destination addr. On this version + * only AF_INET is supported. + * addrlen contains the size of the structure pointed to by addr + * + * Returned Value: + * On success, zero is returned. On error, -1 is returned + * + *****************************************************************************/ + +long connect(long sd, const sockaddr *addr, long addrlen); + +/***************************************************************************** + * Name: select + * + * Decription: + * Monitor socket activity + * Select allow a program to monitor multiple file descriptors, + * waiting until one or more of the file descriptors become + * "ready" for some class of I/O operation + * + * NOTE: If the timeout value set to less than 5ms it will automatically set + * to 5ms to prevent overload of the system + * + * Input Parameters: + * nfds the highest-numbered file descriptor in any of the + * three sets, plus 1. + * writesds socket descriptors list for write monitoring + * readsds socket descriptors list for read monitoring + * exceptsds socket descriptors list for exception monitoring + * timeout is an upper bound on the amount of time elapsed + * before select() returns. Null means infinity + * timeout. The minimum timeout is 5 milliseconds, + * less than 5 milliseconds will be set + * automatically to 5 milliseconds. + * + * Returned Value: + * On success, select() returns the number of file descriptors + * contained in the three returned descriptor sets (that is, the + * total number of bits that are set in readfds, writefds, + * exceptfds) which may be zero if the timeout expires before + * anything interesting happens. + * On error, -1 is returned. + * *readsds - return the sockets on which Read request will + * return without delay with valid data. + * *writesds - return the sockets on which Write request + * will return without delay. + * *exceptsds - return the sockets which closed recently. + * + *****************************************************************************/ + +int select(long nfds, TICC3000fd_set *readsds, TICC3000fd_set *writesds, + TICC3000fd_set *exceptsds, struct timeval *timeout); + +/***************************************************************************** + * Name: setsockopt + * + * Decription: + * set socket options + * This function manipulate the options associated with a socket. + * Options may exist at multiple protocol levels; they are always + * present at the uppermost socket level. + * When manipulating socket options the level at which the option + * resides and the name of the option must be specified. + * To manipulate options at the socket level, level is specified as + * SOL_SOCKET. To manipulate options at any other level the protocol + * number of the appropriate protocol controlling the option is + * supplied. For example, to indicate that an option is to be + * interpreted by the TCP protocol, level should be set to the + * protocol number of TCP; + * The parameters optval and optlen are used to access optval - + * use for setsockopt(). For getsockopt() they identify a buffer + * in which the value for the requested option(s) are to + * be returned. For getsockopt(), optlen is a value-result + * parameter, initially containing the size of the buffer + * pointed to by option_value, and modified on return to + * indicate the actual size of the value returned. If no option + * value is to be supplied or returned, option_value may be NULL. + * + * NOTE: On this version the following two socket options are enabled: + * The only protocol level supported in this version + * is SOL_SOCKET (level). + * 1. SOCKOPT_RECV_TIMEOUT (optname) + * SOCKOPT_RECV_TIMEOUT configures recv and recvfrom timeout + * in milliseconds. + * In that case optval should be pointer to unsigned long. + * 2. SOCKOPT_NONBLOCK (optname). sets the socket non-blocking mode on + * or off. + * In that case optval should be SOCK_ON or SOCK_OFF (optval). + * + * Input Parameters: + * sd socket handle + * level defines the protocol level for this option + * optname defines the option name to Interrogate + * optval specifies a value for the option + * optlen specifies the length of the option value + * + * Returned Value: + * On success, zero is returned. On error, -1 is returned + * + *****************************************************************************/ + +#ifndef CC3000_TINY_DRIVER +int setsockopt(long sd, long level, long optname, const void *optval, + socklen_t optlen); +#endif + +/***************************************************************************** + * Name: getsockopt + * + * Decription: + * set socket options + * This function manipulate the options associated with a socket. + * Options may exist at multiple protocol levels; they are always + * present at the uppermost socket level. + * When manipulating socket options the level at which the option + * resides and the name of the option must be specified. + * To manipulate options at the socket level, level is specified as + * SOL_SOCKET. To manipulate options at any other level the protocol + * number of the appropriate protocol controlling the option is + * supplied. For example, to indicate that an option is to be + * interpreted by the TCP protocol, level should be set to the + * protocol number of TCP; + * The parameters optval and optlen are used to access optval - + * use for setsockopt(). For getsockopt() they identify a buffer + * in which the value for the requested option(s) are to + * be returned. For getsockopt(), optlen is a value-result + * parameter, initially containing the size of the buffer + * pointed to by option_value, and modified on return to + * indicate the actual size of the value returned. If no option + * value is to be supplied or returned, option_value may be NULL. + * + * NOTE: On this version the following two socket options are enabled: + * The only protocol level supported in this version + * is SOL_SOCKET (level). + * 1. SOCKOPT_RECV_TIMEOUT (optname) + * SOCKOPT_RECV_TIMEOUT configures recv and recvfrom timeout + * in milliseconds. + * In that case optval should be pointer to unsigned long. + * 2. SOCKOPT_NONBLOCK (optname). sets the socket non-blocking mode on + * or off. + * In that case optval should be SOCK_ON or SOCK_OFF (optval). + * + * Input Parameters: + * sd socket handle + * level defines the protocol level for this option + * optname defines the option name to Interrogate + * optval specifies a value for the option + * optlen specifies the length of the option value + * + * Returned Value: + * On success, zero is returned. On error, -1 is returned + * + *****************************************************************************/ + +int getsockopt(long sd, long level, long optname, void *optval, + socklen_t *optlen); + +/***************************************************************************** + * Name: recv + * + * Decription: + * function receives a message from a connection-mode socket + * + * NOTE: On this version, only blocking mode is supported. + * + * Input Parameters: + * sd socket handle + * buf Points to the buffer where the message should be stored + * len Specifies the length in bytes of the buffer pointed to + * by the buffer argument. + * flags Specifies the type of message reception. + * On this version, this parameter is not supported. + * + * Returned Value: + * Return the number of bytes received, or -1 if an error + * occurred + * + *****************************************************************************/ + +int recv(long sd, void *buf, long len, long flags); + +/***************************************************************************** + * Name: recvfrom + * + * Decription: + * read data from socket + * function receives a message from a connection-mode or + * connectionless-mode socket. Note that raw sockets are not + * supported. + * + * NOTE: On this version, only blocking mode is supported. + * + * Input Parameters: + * sd socket handle + * buf Points to the buffer where the message should be stored + * len Specifies the length in bytes of the buffer pointed to + * by the buffer argument. + * flags Specifies the type of message reception. + * On this version, this parameter is not supported. + * from pointer to an address structure indicating the source + * address: sockaddr. On this version only AF_INET is + * supported. + * fromlen source address tructure size + * + * Returned Value: + * Return the number of bytes received, or -1 if an error + * occurred + * + *****************************************************************************/ + +int recvfrom(long sd, void *buf, long len, long flags, sockaddr *from, + socklen_t *fromlen); + +/***************************************************************************** + * Name: send + * + * Decription: + * Write data to TCP socket + * This function is used to transmit a message to another + * socket. + * + * NOTE: On this version, only blocking mode is supported. + * + * Input Parameters: + * sd socket handle + * buf Points to a buffer containing the message to be sent + * len message size in bytes + * flags On this version, this parameter is not supported + * + * Returned Value: + * Return the number of bytes transmitted, or -1 if an + * error occurred + * + *****************************************************************************/ + +int send(long sd, const void *buf, long len, long flags); + +/***************************************************************************** + * Name: sendto + * + * Decription: + * Write data to TCP socket + * This function is used to transmit a message to another + * socket. + * + * NOTE: On this version, only blocking mode is supported. + * + * Input Parameters: + * sd socket handle + * buf Points to a buffer containing the message to be sent + * len message size in bytes + * flags On this version, this parameter is not supported + * to pointer to an address structure indicating the destination + * address: sockaddr. On this version only AF_INET is + * supported. + * tolen destination address structure size + * + * Returned Value: + * Return the number of bytes transmitted, or -1 if an + * error occurred + * + *****************************************************************************/ + +int sendto(long sd, const void *buf, long len, long flags, const sockaddr *to, + socklen_t tolen); + +/***************************************************************************** + * Name: mdnsAdvertiser + * + * Decription: + * Set CC3000 in mDNS advertiser mode in order to advertise itself. + * + * Input Parameters: + * mdnsEnabled flag to enable/disable the mDNS feature + * deviceServiceName Service name as part of the published + * canonical domain name + * deviceServiceNameLength Length of the service name + * + * Returned Value: + * On success, zero is returned, return SOC_ERROR if socket was not + * opened successfully, or if an error occurred. + * + *****************************************************************************/ + +int mdnsAdvertiser(uint16_t mdnsEnabled, char * deviceServiceName, + uint16_t deviceServiceNameLength); #ifdef __cplusplus } #endif // __cplusplus -#endif // _INCLUDE_NUTTX_WIRELESS_CC3000__SOCKET_H +#endif // __INCLUDE_NUTTX_WIRELESS_CC3000_INCLUDE_SYS_SOCKET_H diff --git a/nuttx/include/nuttx/wireless/cc3000/netapp.h b/nuttx/include/nuttx/wireless/cc3000/netapp.h index fd38884b2..8d0785c73 100644 --- a/nuttx/include/nuttx/wireless/cc3000/netapp.h +++ b/nuttx/include/nuttx/wireless/cc3000/netapp.h @@ -1,342 +1,357 @@ /***************************************************************************** -* -* netapp.h - CC3000 Host Driver Implementation. -* Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions -* are met: -* -* Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* -* Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the -* distribution. -* -* Neither the name of Texas Instruments Incorporated nor the names of -* its contributors may be used to endorse or promote products derived -* from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -*****************************************************************************/ -#ifndef __NETAPP_H__ -#define __NETAPP_H__ + * netapp.h - CC3000 Host Driver Implementation. + * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + *****************************************************************************/ + +#ifndef _INCLUDE_NUTTX_WIRELESS_CC3000_NETAPP_H +#define _INCLUDE_NUTTX_WIRELESS_CC3000_NETAPP_H +/***************************************************************************** + * Included Files + *****************************************************************************/ -//***************************************************************************** -// -// If building with a C++ compiler, make all of the definitions in this header -// have a C binding. -// -//***************************************************************************** -#ifdef __cplusplus -extern "C" { -#endif - -//***************************************************************************** -// -//! \addtogroup netapp_api -//! @{ -// -//***************************************************************************** +/***************************************************************************** + * Public Types + *****************************************************************************/ typedef struct _netapp_dhcp_ret_args_t { - uint8_t aucIP[4]; - uint8_t aucSubnetMask[4]; - uint8_t aucDefaultGateway[4]; - uint8_t aucDHCPServer[4]; - uint8_t aucDNSServer[4]; -}tNetappDhcpParams; + uint8_t aucIP[4]; + uint8_t aucSubnetMask[4]; + uint8_t aucDefaultGateway[4]; + uint8_t aucDHCPServer[4]; + uint8_t aucDNSServer[4]; +} tNetappDhcpParams; typedef struct _netapp_ipconfig_ret_args_t { uint8_t aucIP[4]; - uint8_t aucSubnetMask[4]; - uint8_t aucDefaultGateway[4]; - uint8_t aucDHCPServer[4]; - uint8_t aucDNSServer[4]; - uint8_t uaMacAddr[6]; - uint8_t uaSSID[32]; -}tNetappIpconfigRetArgs; - + uint8_t aucSubnetMask[4]; + uint8_t aucDefaultGateway[4]; + uint8_t aucDHCPServer[4]; + uint8_t aucDNSServer[4]; + uint8_t uaMacAddr[6]; + uint8_t uaSSID[32]; +} tNetappIpconfigRetArgs; /*Ping send report parameters*/ + typedef struct _netapp_pingreport_args { - unsigned long packets_sent; - unsigned long packets_received; - unsigned long min_round_time; - unsigned long max_round_time; - unsigned long avg_round_time; + unsigned long packets_sent; + unsigned long packets_received; + unsigned long min_round_time; + unsigned long max_round_time; + unsigned long avg_round_time; } netapp_pingreport_args_t; +/***************************************************************************** + * Public Data + *****************************************************************************/ -//***************************************************************************** -// -//! netapp_config_mac_adrress -//! -//! @param mac device mac address, 6 bytes. Saved: yes -//! -//! @return return on success 0, otherwise error. -//! -//! @brief Configure device MAC address and store it in NVMEM. -//! The value of the MAC address configured through the API will -//! be stored in CC3000 non volatile memory, thus preserved -//! over resets. -// -//***************************************************************************** -extern long netapp_config_mac_adrress( uint8_t *mac ); - -//***************************************************************************** -// -//! netapp_dhcp -//! -//! @param aucIP device mac address, 6 bytes. Saved: yes -//! @param aucSubnetMask device mac address, 6 bytes. Saved: yes -//! @param aucDefaultGateway device mac address, 6 bytes. Saved: yes -//! @param aucDNSServer device mac address, 6 bytes. Saved: yes -//! -//! @return return on success 0, otherwise error. -//! -//! @brief netapp_dhcp is used to configure the network interface, -//! static or dynamic (DHCP).\n In order to activate DHCP mode, -//! aucIP, aucSubnetMask, aucDefaultGateway must be 0. -//! The default mode of CC3000 is DHCP mode. -//! Note that the configuration is saved in non volatile memory -//! and thus preserved over resets. -//! -//! @note If the mode is altered a reset of CC3000 device is required -//! in order to apply changes.\nAlso note that asynchronous event -//! of DHCP_EVENT, which is generated when an IP address is -//! allocated either by the DHCP server or due to static -//! allocation is generated only upon a connection to the -//! AP was established. -//! -//***************************************************************************** -extern long netapp_dhcp(unsigned long *aucIP, unsigned long *aucSubnetMask,unsigned long *aucDefaultGateway, unsigned long *aucDNSServer); - - - -//***************************************************************************** -// -//! netapp_timeout_values -//! -//! @param aucDHCP DHCP lease time request, also impact -//! the DHCP renew timeout. Range: [0-0xffffffff] seconds, -//! 0 or 0xffffffff == infinity lease timeout. -//! Resolution:10 seconds. Influence: only after -//! reconnecting to the AP. -//! Minimal bound value: MIN_TIMER_VAL_SECONDS - 20 seconds. -//! The parameter is saved into the CC3000 NVMEM. -//! The default value on CC3000 is 14400 seconds. -//! -//! @param aucARP ARP refresh timeout, if ARP entry is not updated by -//! incoming packet, the ARP entry will be deleted by -//! the end of the timeout. -//! Range: [0-0xffffffff] seconds, 0 == infinity ARP timeout -//! Resolution: 10 seconds. Influence: on runtime. -//! Minimal bound value: MIN_TIMER_VAL_SECONDS - 20 seconds -//! The parameter is saved into the CC3000 NVMEM. -//! The default value on CC3000 is 3600 seconds. -//! -//! @param aucKeepalive Keepalive event sent by the end of keepalive timeout -//! Range: [0-0xffffffff] seconds, 0 == infinity timeout -//! Resolution: 10 seconds. -//! Influence: on runtime. -//! Minimal bound value: MIN_TIMER_VAL_SECONDS - 20 sec -//! The parameter is saved into the CC3000 NVMEM. -//! The default value on CC3000 is 10 seconds. -//! -//! @param aucInactivity Socket inactivity timeout, socket timeout is -//! refreshed by incoming or outgoing packet, by the -//! end of the socket timeout the socket will be closed -//! Range: [0-0xffffffff] sec, 0 == infinity timeout. -//! Resolution: 10 seconds. Influence: on runtime. -//! Minimal bound value: MIN_TIMER_VAL_SECONDS - 20 sec -//! The parameter is saved into the CC3000 NVMEM. -//! The default value on CC3000 is 60 seconds. -//! -//! @return return on success 0, otherwise error. -//! -//! @brief Set new timeout values. Function set new timeout values for: -//! DHCP lease timeout, ARP refresh timeout, keepalive event -//! timeout and socket inactivity timeout -//! -//! @note If a parameter set to non zero value which is less than 20s, -//! it will be set automatically to 20s. -//! -//***************************************************************************** - #ifndef CC3000_TINY_DRIVER -extern long netapp_timeout_values(unsigned long *aucDHCP, unsigned long *aucARP,unsigned long *aucKeepalive, unsigned long *aucInactivity); +#ifdef __cplusplus +extern "C" +{ #endif -//***************************************************************************** -// -//! netapp_ping_send -//! -//! @param ip destination IP address -//! @param pingAttempts number of echo requests to send -//! @param pingSize send buffer size which may be up to 1400 bytes -//! @param pingTimeout Time to wait for a response,in milliseconds. -//! -//! @return return on success 0, otherwise error. -//! -//! @brief send ICMP ECHO_REQUEST to network hosts -//! -//! @note If an operation finished successfully asynchronous ping report -//! event will be generated. The report structure is as defined -//! by structure netapp_pingreport_args_t. -//! -//! @warning Calling this function while a previous Ping Requests are in -//! progress will stop the previous ping request. -//***************************************************************************** +/***************************************************************************** + * Public Function Prototypes + *****************************************************************************/ + +/****************************************************************************** + * Name: netapp_config_mac_adrress + * + * Description: + * Configure device MAC address and store it in NVMEM. The value of the MAC + * address configured through the API will be stored in CC3000 non volatile + * memory, thus preserved over resets. + * + * Input Parameters: + * mac device mac address, 6 bytes. Saved: yes + * + * Returned Value: + * Return on success 0, otherwise error. + * + *****************************************************************************/ + +long netapp_config_mac_adrress(uint8_t *mac); + +/****************************************************************************** + * Name: netapp_dhcp + * + * Description: + * netapp_dhcp is used to configure the network interface, static or + * dynamic (DHCP).\n In order to activate DHCP mode, aucIP, aucSubnetMask, + * aucDefaultGateway must be 0. The default mode of CC3000 is DHCP mode. Note + * that the configuration is saved in non volatile memory and thus preserved + * over resets. + * + * NOTE: If the mode is altered a reset of CC3000 device is required in order + * to apply changes.\nAlso note that asynchronous event of DHCP_EVENT, which + * is generated when an IP address is allocated either by the DHCP server or + * due to static allocation is generated only upon a connection to the AP was + * established. + * + * Input Parameters: + * aucIP device mac address, 6 bytes. Saved: yes + * aucSubnetMask device mac address, 6 bytes. Saved: yes + * aucDefaultGateway device mac address, 6 bytes. Saved: yes + * aucDNSServer device mac address, 6 bytes. Saved: yes + * + * Returned Value: + * Return on success 0, otherwise error. + * + *****************************************************************************/ + +long netapp_dhcp(unsigned long *aucIP, unsigned long *aucSubnetMask, + unsigned long *aucDefaultGateway, unsigned long *aucDNSServer); + +/****************************************************************************** + * Name: netapp_timeout_values + * + * Description: + * Set new timeout values. Function set new timeout values for: DHCP lease + * timeout, ARP refresh timeout, keepalive event timeout and socket + * inactivity timeout + * + * NOTE: If a parameter set to non zero value which is less than 20s, it will + * be set automatically to 20s. + * + * Input Parameters: + * aucDHCP DHCP lease time request, also impact the DHCP renew timeout. + * Range: [0-0xffffffff] seconds, 0 or 0xffffffff == infinity + * lease timeout. + * Resolution: 10 seconds. + * Influence: only after reconnecting to the AP + * Minimal bound value: MIN_TIMER_VAL_SECONDS - 20 seconds. + * The parameter is saved into the CC3000 NVMEM. The default + * value on CC3000 is 14400 seconds. + * aucARP ARP refresh timeout, if ARP entry is not updated by incoming + * packet, the ARP entry will be deleted by the end of the + * timeout. + * Range: [0-0xffffffff] seconds, 0 == infinity ARP timeout + * Resolution: 10 seconds. + * Influence: on runtime. + * Minimal bound value: MIN_TIMER_VAL_SECONDS - 20 seconds. + * The parameter is saved into the CC3000 NVMEM. The default + * value on CC3000 is 3600 seconds. + * aucKeepalive Keepalive event sent by the end of keepalive timeout + * Range: [0-0xffffffff] seconds, 0 == infinity timeout + * Resolution: 10 seconds. + * Influence: on runtime. + * Minimal bound value: MIN_TIMER_VAL_SECONDS - 20 sec + * The parameter is saved into the CC3000 NVMEM. The default + * value on CC3000 is 10 seconds. + * aucInactivity Socket inactivity timeout, socket timeout is refreshed by + * incoming or outgoing packet, by the end of the socket + * timeout the socket will be closed + * Range: [0-0xffffffff] sec, 0 == infinity timeout. + * Resolution: 10 seconds. Influence: on runtime. + * Minimal bound value: MIN_TIMER_VAL_SECONDS - 20 sec + * The parameter is saved into the CC3000 NVMEM. The default + * value on CC3000 is 60 seconds. + * + * Returned Value: + * Return on success 0, otherwise error. + * + *****************************************************************************/ - #ifndef CC3000_TINY_DRIVER -extern long netapp_ping_send(unsigned long *ip, unsigned long ulPingAttempts, unsigned long ulPingSize, unsigned long ulPingTimeout); +#ifndef CC3000_TINY_DRIVER +long netapp_timeout_values(unsigned long *aucDHCP, unsigned long *aucARP, + unsigned long *aucKeepalive, + unsigned long *aucInactivity); #endif -//***************************************************************************** -// -//! netapp_ping_stop -//! -//! @param none -//! -//! @return On success, zero is returned. On error, -1 is returned. -//! -//! @brief Stop any ping request. -//! -//! -//***************************************************************************** +/****************************************************************************** + * Name: netapp_ping_send + * + * Description: + * Send ICMP ECHO_REQUEST to network hosts + * + * NOTE: If an operation finished successfully asynchronous ping report event + * will be generated. The report structure is as defined by structure + * netapp_pingreport_args_t. + * + * WARNING: Calling this function while a previous Ping Requests are in + * progress will stop the previous ping request. + * + * Input Parameters: + * ip destination IP address + * pingAttempts number of echo requests to send + * pingSize send buffer size which may be up to 1400 bytes + * pingTimeout Time to wait for a response,in milliseconds. + * + * Returned Value: + * Return on success 0, otherwise error. + * + *****************************************************************************/ #ifndef CC3000_TINY_DRIVER -extern long netapp_ping_stop(); +long netapp_ping_send(unsigned long *ip, unsigned long ulPingAttempts, + unsigned long ulPingSize, unsigned long ulPingTimeout); #endif -//***************************************************************************** -// -//! netapp_ping_report -//! -//! @param none -//! -//! @return none -//! -//! @brief Request for ping status. This API triggers the CC3000 to send -//! asynchronous events: HCI_EVNT_WLAN_ASYNC_PING_REPORT. -//! This event will carry the report structure: -//! netapp_pingreport_args_t. This structure is filled in with ping -//! results up till point of triggering API. -//! netapp_pingreport_args_t:\n packets_sent - echo sent, -//! packets_received - echo reply, min_round_time - minimum -//! round time, max_round_time - max round time, -//! avg_round_time - average round time -//! -//! @note When a ping operation is not active, the returned structure -//! fields are 0. -//! -//***************************************************************************** + +/****************************************************************************** + * Name: netapp_ping_stop + * + * Description: + * Stop any ping request. + * + * Input Parameters: + * None + * + * Returned Value: + * On success, zero is returned. On error, -1 is returned. + * + *****************************************************************************/ + #ifndef CC3000_TINY_DRIVER -extern void netapp_ping_report(); +long netapp_ping_stop(void); #endif +/****************************************************************************** + * Name: netapp_ping_report + * + * Description: + * Request for ping status. This API triggers the CC3000 to send asynchronous + * events: HCI_EVNT_WLAN_ASYNC_PING_REPORT. This event will carry the report + * structure: netapp_pingreport_args_t. This structure is filled in with ping + * results up till point of triggering API. + * + * netapp_pingreport_args_t: + * packets_sent - echo sent, + * packets_received - echo reply + * min_round_time - minimum round time, + * max_round_time - max round time, + * avg_round_time - average round time + * + * NOTE: When a ping operation is not active, the returned structure fields + * are 0. + * + * Input Parameters: + * None + * + * Returned Value: + * None + * + *****************************************************************************/ -//***************************************************************************** -// -//! netapp_ipconfig -//! -//! @param[out] ipconfig This argument is a pointer to a -//! tNetappIpconfigRetArgs structure. This structure is -//! filled in with the network interface configuration. -//! tNetappIpconfigRetArgs:\n aucIP - ip address, -//! aucSubnetMask - mask, aucDefaultGateway - default -//! gateway address, aucDHCPServer - dhcp server address -//! aucDNSServer - dns server address, uaMacAddr - mac -//! address, uaSSID - connected AP ssid -//! -//! @return none -//! -//! @brief Obtain the CC3000 Network interface information. -//! Note that the information is available only after the WLAN -//! connection was established. Calling this function before -//! associated, will cause non-defined values to be returned. -//! -//! @note The function is useful for figuring out the IP Configuration of -//! the device when DHCP is used and for figuring out the SSID of -//! the Wireless network the device is associated with. -//! -//***************************************************************************** - -extern void netapp_ipconfig( tNetappIpconfigRetArgs * ipconfig ); +#ifndef CC3000_TINY_DRIVER +void netapp_ping_report(void); +#endif -//***************************************************************************** -// -//! netapp_arp_flush -//! -//! @param none -//! -//! @return none -//! -//! @brief Flushes ARP table -//! -//***************************************************************************** +/****************************************************************************** + * Name: netapp_ipconfig + * + * Description: + * Obtain the CC3000 Network interface information. Note that the information + * is available only after the WLAN connection was established. Calling this + * function before associated, will cause non-defined values to be returned. + * + * NOTE: The function is useful for figuring out the IP Configuration of the + * device when DHCP is used and for figuring out the SSID of the Wireless + * network the device is associated with. + * + * Input Parameters: + * ipconfig This argument is a pointer to a tNetappIpconfigRetArgs structure. + * This structure is filled in with the network interface configuration. + * + * tNetappIpconfigRetArgs: + * aucIP - ip address, + * aucSubnetMask - mask, + * aucDefaultGateway - default gateway address + * aucDHCPServer - dhcp server address + * aucDNSServer - dns server address + * uaMacAddr - mac + * address, uaSSID - connected AP ssid + * + * Returned Value: + * None + * + *****************************************************************************/ + +void netapp_ipconfig(tNetappIpconfigRetArgs * ipconfig); + +/****************************************************************************** + * Name: netapp_arp_flush + * + * Description: + * Flushes ARP table + * + * Input Parameters: + * None + * + * Returned Value: + * None + * + *****************************************************************************/ #ifndef CC3000_TINY_DRIVER -extern long netapp_arp_flush(); +long netapp_arp_flush(void); #endif - -//***************************************************************************** -// -//! netapp_set_debug_level -//! -//! @param[in] level debug level. Bitwise [0-8], -//! 0(disable)or 1(enable).\n Bitwise map: 0 - Critical -//! message, 1 information message, 2 - core messages, 3 - -//! HCI messages, 4 - Network stack messages, 5 - wlan -//! messages, 6 - wlan driver messages, 7 - epprom messages, -//! 8 - general messages. Default: 0x13f. Saved: no -//! -//! @return On success, zero is returned. On error, -1 is returned -//! -//! @brief Debug messages sent via the UART debug channel, this function -//! enable/disable the debug level -//! -//***************************************************************************** - +/****************************************************************************** + * Name: netapp_set_debug_level + * + * Description: + * Debug messages sent via the UART debug channel, this function enable/disable + * the debug level + * + * Input Parameters: + * level debug level. Bitwise [0-8], 0(disable)or 1(enable). + * Bitwise map: + * 0 - Critical message + * 1 - information message + * 2 - core messages + * 3 - HCI messages + * 4 - Network stack messages + * 5 - wlan messages + * 6 - wlan driver messages + * 7 - epprom messages, + * 8 - general messages. + * Default: 0x13f. Saved: no + * + * Returned Value: + * On success, zero is returned. On error, -1 is returned + * + *****************************************************************************/ #ifndef CC3000_TINY_DRIVER long netapp_set_debug_level(unsigned long ulLevel); #endif -//***************************************************************************** -// -// Close the Doxygen group. -//! @} -// -//***************************************************************************** - - -//***************************************************************************** -// -// Mark the end of the C bindings section for C++ compilers. -// -//***************************************************************************** -#ifdef __cplusplus +#ifdef __cplusplus } #endif // __cplusplus -#endif // __NETAPP_H__ - +#endif // _INCLUDE_NUTTX_WIRELESS_CC3000_NETAPP_H diff --git a/nuttx/include/nuttx/wireless/cc3000/nvmem.h b/nuttx/include/nuttx/wireless/cc3000/nvmem.h index 180344348..35902def6 100644 --- a/nuttx/include/nuttx/wireless/cc3000/nvmem.h +++ b/nuttx/include/nuttx/wireless/cc3000/nvmem.h @@ -1,248 +1,244 @@ /***************************************************************************** -* -* nvmem.h - CC3000 Host Driver Implementation. -* Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions -* are met: -* -* Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* -* Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the -* distribution. -* -* Neither the name of Texas Instruments Incorporated nor the names of -* its contributors may be used to endorse or promote products derived -* from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -*****************************************************************************/ -#ifndef __NVRAM_H__ -#define __NVRAM_H__ - -#include <nuttx/wireless/cc3000/cc3000_common.h> - - -//***************************************************************************** -// -// If building with a C++ compiler, make all of the definitions in this header -// have a C binding. -// -//***************************************************************************** -#ifdef __cplusplus -extern "C" { -#endif + * nvmem.h - CC3000 Host Driver Implementation. + * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + *****************************************************************************/ + +#ifndef _INCLUDE_NUTTX_WIRELESS_CC3000_NVMEM_H +#define _INCLUDE_NUTTX_WIRELESS_CC3000_NVMEM_H + +/***************************************************************************** + * Included Files + *****************************************************************************/ +#include "cc3000_common.h" -//***************************************************************************** -// -//! \addtogroup nvmem_api -//! @{ -// -//***************************************************************************** +/***************************************************************************** + * Pre-processor Definitions + *****************************************************************************/ -/**************************************************************************** -** -** Definitions for File IDs -** -****************************************************************************/ /* NVMEM file ID - system files*/ -#define NVMEM_NVS_FILEID (0) -#define NVMEM_NVS_SHADOW_FILEID (1) -#define NVMEM_WLAN_CONFIG_FILEID (2) -#define NVMEM_WLAN_CONFIG_SHADOW_FILEID (3) -#define NVMEM_WLAN_DRIVER_SP_FILEID (4) -#define NVMEM_WLAN_FW_SP_FILEID (5) -#define NVMEM_MAC_FILEID (6) -#define NVMEM_FRONTEND_VARS_FILEID (7) -#define NVMEM_IP_CONFIG_FILEID (8) -#define NVMEM_IP_CONFIG_SHADOW_FILEID (9) -#define NVMEM_BOOTLOADER_SP_FILEID (10) -#define NVMEM_RM_FILEID (11) + +#define NVMEM_NVS_FILEID (0) +#define NVMEM_NVS_SHADOW_FILEID (1) +#define NVMEM_WLAN_CONFIG_FILEID (2) +#define NVMEM_WLAN_CONFIG_SHADOW_FILEID (3) +#define NVMEM_WLAN_DRIVER_SP_FILEID (4) +#define NVMEM_WLAN_FW_SP_FILEID (5) +#define NVMEM_MAC_FILEID (6) +#define NVMEM_FRONTEND_VARS_FILEID (7) +#define NVMEM_IP_CONFIG_FILEID (8) +#define NVMEM_IP_CONFIG_SHADOW_FILEID (9) +#define NVMEM_BOOTLOADER_SP_FILEID (10) +#define NVMEM_RM_FILEID (11) /* NVMEM file ID - user files*/ -#define NVMEM_AES128_KEY_FILEID (12) -#define NVMEM_SHARED_MEM_FILEID (13) - -/* max entry in order to invalid nvmem */ -#define NVMEM_MAX_ENTRY (16) - - -//***************************************************************************** -// -//! nvmem_read -//! -//! @param ulFileId nvmem file id:\n -//! NVMEM_NVS_FILEID, NVMEM_NVS_SHADOW_FILEID, -//! NVMEM_WLAN_CONFIG_FILEID, NVMEM_WLAN_CONFIG_SHADOW_FILEID, -//! NVMEM_WLAN_DRIVER_SP_FILEID, NVMEM_WLAN_FW_SP_FILEID, -//! NVMEM_MAC_FILEID, NVMEM_FRONTEND_VARS_FILEID, -//! NVMEM_IP_CONFIG_FILEID, NVMEM_IP_CONFIG_SHADOW_FILEID, -//! NVMEM_BOOTLOADER_SP_FILEID, NVMEM_RM_FILEID, -//! and user files 12-15. -//! @param ulLength number of bytes to read -//! @param ulOffset ulOffset in file from where to read -//! @param buff output buffer pointer -//! -//! @return number of bytes read, otherwise error. -//! -//! @brief Reads data from the file referred by the ulFileId parameter. -//! Reads data from file ulOffset till length. Err if the file can't -//! be used, is invalid, or if the read is out of bounds. -//! -//***************************************************************************** - -extern signed long nvmem_read(unsigned long file_id, unsigned long length, unsigned long offset, uint8_t *buff); - -//***************************************************************************** -// -//! nvmem_write -//! -//! @param ulFileId nvmem file id:\n -//! NVMEM_WLAN_DRIVER_SP_FILEID, NVMEM_WLAN_FW_SP_FILEID, -//! NVMEM_MAC_FILEID, NVMEM_BOOTLOADER_SP_FILEID, -//! and user files 12-15. -//! @param ulLength number of bytes to write -//! @param ulEntryOffset offset in file to start write operation from -//! @param buff data to write -//! -//! @return on success 0, error otherwise. -//! -//! @brief Write data to nvmem. -//! writes data to file referred by the ulFileId parameter. -//! Writes data to file ulOffset till ulLength.The file id will be -//! marked invalid till the write is done. The file entry doesn't -//! need to be valid - only allocated. -//! -//***************************************************************************** - -extern signed long nvmem_write(unsigned long ulFileId, unsigned long ulLength, unsigned long ulEntryOffset, uint8_t *buff); - - -//***************************************************************************** -// -//! nvmem_set_mac_address -//! -//! @param mac mac address to be set -//! -//! @return on success 0, error otherwise. -//! -//! @brief Write MAC address to EEPROM. -//! mac address as appears over the air (OUI first) -//! -//***************************************************************************** -extern uint8_t nvmem_set_mac_address(uint8_t *mac); - - -//***************************************************************************** -// -//! nvmem_get_mac_address -//! -//! @param[out] mac mac address -//! -//! @return on success 0, error otherwise. -//! -//! @brief Read MAC address from EEPROM. -//! mac address as appears over the air (OUI first) -//! -//***************************************************************************** -extern uint8_t nvmem_get_mac_address(uint8_t *mac); - - -//***************************************************************************** -// -//! nvmem_write_patch -//! -//! @param ulFileId nvmem file id:\n -//! NVMEM_WLAN_DRIVER_SP_FILEID, NVMEM_WLAN_FW_SP_FILEID, -//! @param spLength number of bytes to write -//! @param spData SP data to write -//! -//! @return on success 0, error otherwise. -//! -//! @brief program a patch to a specific file ID. -//! The SP data is assumed to be organized in 2-dimensional. -//! Each line is SP_PORTION_SIZE bytes long. Actual programming is -//! applied in SP_PORTION_SIZE bytes portions. -//! -//***************************************************************************** -extern uint8_t nvmem_write_patch(unsigned long ulFileId, unsigned long spLength, const uint8_t *spData); - - -//***************************************************************************** -// -//! nvmem_read_sp_version -//! -//! @param[out] patchVer first number indicates package ID and the second -//! number indicates package build number -//! -//! @return on success 0, error otherwise. -//! -//! @brief Read patch version. read package version (WiFi FW patch, -//! driver-supplicant-NS patch, bootloader patch) -//! -//***************************************************************************** -#ifndef CC3000_TINY_DRIVER -extern uint8_t nvmem_read_sp_version(uint8_t* patchVer); + +#define NVMEM_AES128_KEY_FILEID (12) +#define NVMEM_SHARED_MEM_FILEID (13) + +/* max entry in order to invalid nvmem */ + +#define NVMEM_MAX_ENTRY (16) + +/***************************************************************************** + * Public Data + *****************************************************************************/ + +#ifdef __cplusplus +extern "C" +{ #endif -//***************************************************************************** -// -//! nvmem_create_entry -//! -//! @param ulFileId nvmem file Id:\n -//! * NVMEM_AES128_KEY_FILEID: 12 -//! * NVMEM_SHARED_MEM_FILEID: 13 -//! * and fileIDs 14 and 15 -//! @param ulNewLen entry ulLength -//! -//! @return on success 0, error otherwise. -//! -//! @brief Create new file entry and allocate space on the NVMEM. -//! Applies only to user files. -//! Modify the size of file. -//! If the entry is unallocated - allocate it to size -//! ulNewLen (marked invalid). -//! If it is allocated then deallocate it first. -//! To just mark the file as invalid without resizing - -//! set ulNewLen=0. -//! -//***************************************************************************** -extern signed long nvmem_create_entry(unsigned long file_id, unsigned long newlen); - - -//***************************************************************************** -// -// Mark the end of the C bindings section for C++ compilers. -// -//***************************************************************************** - - -//***************************************************************************** -// -// Close the Doxygen group. -//! @} -// -//***************************************************************************** +/***************************************************************************** + * Public Function Prototypes + *****************************************************************************/ + +/****************************************************************************** + * Name: nvmem_read + * + * Description: + * Reads data from the file referred by the ulFileId parameter. Reads data + * from file ulOffset till length. Err if the file can't be used, is + * invalid, or if the read is out of bounds. + * + * Input Parameters: + * ulFileId nvmem file id: + * NVMEM_NVS_FILEID, NVMEM_NVS_SHADOW_FILEID, + * NVMEM_WLAN_CONFIG_FILEID, NVMEM_WLAN_CONFIG_SHADOW_FILEID, + * NVMEM_WLAN_DRIVER_SP_FILEID, NVMEM_WLAN_FW_SP_FILEID, + * NVMEM_MAC_FILEID, NVMEM_FRONTEND_VARS_FILEID, + * NVMEM_IP_CONFIG_FILEID, NVMEM_IP_CONFIG_SHADOW_FILEID, + * NVMEM_BOOTLOADER_SP_FILEID, NVMEM_RM_FILEID, + * and user files 12-15. + * ulLength number of bytes to read + * ulOffset ulOffset in file from where to read + * buff output buffer pointer + * + * Returned Value: + * Number of bytes read, otherwise error. + * + *****************************************************************************/ + +signed long nvmem_read(unsigned long ulFileId, unsigned long ulLength, + unsigned long ulOffset, uint8_t *buff); + +/****************************************************************************** + * Name: nvmem_write + * + * Description: + * Write data to nvmem. Writes data to file referred by the ulFileId + * parameter. Writes data to file ulOffset till ulLength. The file id will be + * marked invalid till the write is done. The file entry doesn't need to be + * valid - only allocated. + * + * Input Parameters: + * ulFileId nvmem file id: + * NVMEM_WLAN_DRIVER_SP_FILEID, NVMEM_WLAN_FW_SP_FILEID, + * NVMEM_MAC_FILEID, NVMEM_BOOTLOADER_SP_FILEID, + * and user files 12-15. + * ulLength number of bytes to write + * ulEntryOffset offset in file to start write operation from + * buff data to write + * + * Returned Value: + * On success 0, error otherwise. + * + *****************************************************************************/ + +signed long nvmem_write(unsigned long ulFileId, unsigned long ulLength, + unsigned long ulEntryOffset, uint8_t *buff); + +/****************************************************************************** + * Name: nvmem_set_mac_address + * + * Description: + * Write MAC address to EEPROM. mac address as appears over the air (OUI + * first) + * + * Input Parameters: + * mac mac address to be set + * + * Returned Value: + * On success 0, error otherwise. + * + *****************************************************************************/ + +uint8_t nvmem_set_mac_address(uint8_t *mac); + +/****************************************************************************** + * Name: nvmem_get_mac_address + * + * Description: + * Read MAC address from EEPROM. mac address as appears over the air (OUI + * first) + * + * Input Parameters: + * mac mac address + * + * Returned Value: + * On success 0, error otherwise. + * + *****************************************************************************/ + +uint8_t nvmem_get_mac_address(uint8_t *mac); + +/****************************************************************************** + * Name: nvmem_write_patch + * + * Description: + * Program a patch to a specific file ID. The SP data is assumed to be + * organized in 2-dimensional. Each line is SP_PORTION_SIZE bytes long. + * Actual programming is applied in SP_PORTION_SIZE bytes portions. + * + * Input Parameters: + * ulFileId nvmem file id: + * NVMEM_WLAN_DRIVER_SP_FILEID, NVMEM_WLAN_FW_SP_FILEID, + * spLength number of bytes to write + * spData SP data to write + * + * Returned Value: + * On success 0, error otherwise. + * + *****************************************************************************/ + +uint8_t nvmem_write_patch(unsigned long ulFileId, unsigned long spLength, + const uint8_t *spData); + +/****************************************************************************** + * Name: nvmem_read_sp_version + * + * Description: + * Read patch version. read package version (WiFi FW patch, + * driver-supplicant-NS patch, bootloader patch) + * + * Input Parameters: + * patchVer first number indicates package ID and the second + * number indicates package build number + * + * Returned Value: + * On success 0, error otherwise. + * + *****************************************************************************/ + +#ifndef CC3000_TINY_DRIVER +uint8_t nvmem_read_sp_version(uint8_t *patchVer); +#endif +/****************************************************************************** + * Name: nvmem_create_entry + * + * Description: + * Create new file entry and allocate space on the NVMEM. Applies only to + * user files. Modify the size of file. If the entry is unallocated - + * allocate it to size ulNewLen (marked invalid). If it is allocated then + * deallocate it first. To just mark the file as invalid without resizing - + * Set ulNewLen=0. + * + * Input Parameters: + * ulFileId nvmem file Id: + * * NVMEM_AES128_KEY_FILEID: 12 + * * NVMEM_SHARED_MEM_FILEID: 13 + * * and fileIDs 14 and 15 + * ulNewLen entry ulLength + * + * Returned Value: + * On success 0, error otherwise. + * + *****************************************************************************/ + +signed long nvmem_create_entry(unsigned long ulFileId, unsigned long ulNewLen); #ifdef __cplusplus } #endif // __cplusplus -#endif // __NVRAM_H__ +#endif // _INCLUDE_NUTTX_WIRELESS_CC3000_NVMEM_H diff --git a/nuttx/include/nuttx/wireless/cc3000/security.h b/nuttx/include/nuttx/wireless/cc3000/security.h index 2b81b536f..d8f16196b 100644 --- a/nuttx/include/nuttx/wireless/cc3000/security.h +++ b/nuttx/include/nuttx/wireless/cc3000/security.h @@ -1,126 +1,138 @@ /***************************************************************************** -* -* security.h - CC3000 Host Driver Implementation. -* Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions -* are met: -* -* Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* -* Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the -* distribution. -* -* Neither the name of Texas Instruments Incorporated nor the names of -* its contributors may be used to endorse or promote products derived -* from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -*****************************************************************************/ -#ifndef __SECURITY__ -#define __SECURITY__ - -#include <nuttx/wireless/cc3000/nvmem.h> - -//***************************************************************************** -// -// If building with a C++ compiler, make all of the definitions in this header -// have a C binding. -// -//***************************************************************************** + * security.h - CC3000 Host Driver Implementation. + * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + *****************************************************************************/ + +#ifndef _INCLUDE_NUTTX_WIRELESS_CC3000_SECURITY_H +#define _INCLUDE_NUTTX_WIRELESS_CC3000_SECURITY_H + +/***************************************************************************** + * Included Files + *****************************************************************************/ + +#include "nvmem.h" + +/***************************************************************************** + * Pre-processor Definitions + *****************************************************************************/ + +#define AES128_KEY_SIZE 16 + +#ifndef CC3000_UNENCRYPTED_SMART_CONFIG + +/***************************************************************************** + * Public Data + *****************************************************************************/ + #ifdef __cplusplus -extern "C" { +extern "C" +{ #endif +/***************************************************************************** + * Public Function Prototypes +/***************************************************************************** -#define AES128_KEY_SIZE 16 +/***************************************************************************** + * Name: aes_encrypt + * + * Description: + * AES128 encryption: Given AES128 key and 16 bytes plain text, cipher + * text of 16 bytes is computed. The AES implementation is in mode ECB + * (Electronic Code Book). + * + * Input Parameters: + * key AES128 key of size 16 bytes + * state 16 bytes of plain text and cipher text + * + * Returned Value + * None + * + *****************************************************************************/ -#ifndef CC3000_UNENCRYPTED_SMART_CONFIG +void aes_encrypt(uint8_t *state, uint8_t *key); +/***************************************************************************** + * Name: aes_decrypt + * + * Description: + * AES128 decryption: Given AES128 key and 16 bytes cipher text, plain + * text of 16 bytes is computed The AES implementation is in mode ECB + * (Electronic Code Book). + * + * Input Parameters: + * key AES128 key of size 16 bytes + * state 16 bytes of plain text and cipher text + * + * Returned Value + * None + * + *****************************************************************************/ -//***************************************************************************** -// -//! aes_encrypt -//! -//! @param[in] key AES128 key of size 16 bytes -//! @param[in\out] state 16 bytes of plain text and cipher text -//! -//! @return none -//! -//! @brief AES128 encryption: -//! Given AES128 key and 16 bytes plain text, cipher text of 16 bytes -//! is computed. The AES implementation is in mode ECB (Electronic -//! Code Book). -//! -//! -//***************************************************************************** -extern void aes_encrypt(uint8_t *state, uint8_t *key); - -//***************************************************************************** -// -//! aes_decrypt -//! -//! @param[in] key AES128 key of size 16 bytes -//! @param[in\out] state 16 bytes of cipher text and plain text -//! -//! @return none -//! -//! @brief AES128 decryption: -//! Given AES128 key and 16 bytes cipher text, plain text of 16 bytes -//! is computed The AES implementation is in mode ECB -//! (Electronic Code Book). -//! -//! -//***************************************************************************** -extern void aes_decrypt(uint8_t *state, uint8_t *key); - - -//***************************************************************************** -// -//! aes_read_key -//! -//! @param[out] key AES128 key of size 16 bytes -//! -//! @return on success 0, error otherwise. -//! -//! @brief Reads AES128 key from EEPROM -//! Reads the AES128 key from fileID #12 in EEPROM -//! returns an error if the key does not exist. -//! -//! -//***************************************************************************** -extern signed long aes_read_key(uint8_t *key); - -//***************************************************************************** -// -//! aes_write_key -//! -//! @param[out] key AES128 key of size 16 bytes -//! -//! @return on success 0, error otherwise. -//! -//! @brief writes AES128 key from EEPROM -//! Writes the AES128 key to fileID #12 in EEPROM -//! -//! -//***************************************************************************** -extern signed long aes_write_key(uint8_t *key); - -#endif //CC3000_UNENCRYPTED_SMART_CONFIG +void aes_decrypt(uint8_t *state, uint8_t *key); -#endif +/***************************************************************************** + * Name: aes_read_key + * + * Description: + * Reads AES128 key from EEPROM. Reads the AES128 key from fileID #12 in + * EEPROM returns an error if the key does not exist. + * + * Input Parameters: + * key AES128 key of size 16 bytes + * + * Returned Value + * On success 0, error otherwise. + * + *****************************************************************************/ + +signed long aes_read_key(uint8_t *key); + +/***************************************************************************** + * Name: aes_write_key + * + * Description: + * Writes AES128 key from EEPROM Writes the AES128 key to fileID #12 in + * EEPROM + * + * Input Parameters: + * key AES128 key of size 16 bytes + * + * Returned Value + * On success 0, error otherwise. + * + *****************************************************************************/ + +signed long aes_write_key(uint8_t *key); + +#endif /* CC3000_UNENCRYPTED_SMART_CONFIG */ +#endif /* _INCLUDE_NUTTX_WIRELESS_CC3000_SECURITY_H */ diff --git a/nuttx/include/nuttx/wireless/cc3000/socket.h b/nuttx/include/nuttx/wireless/cc3000/socket.h deleted file mode 100644 index 8933a0c5b..000000000 --- a/nuttx/include/nuttx/wireless/cc3000/socket.h +++ /dev/null @@ -1,664 +0,0 @@ -/***************************************************************************** -* -* socket.h - CC3000 Host Driver Implementation. -* Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions -* are met: -* -* Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* -* Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the -* distribution. -* -* Neither the name of Texas Instruments Incorporated nor the names of -* its contributors may be used to endorse or promote products derived -* from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -*****************************************************************************/ -#ifndef __SOCKET_H__ -#define __SOCKET_H__ - - -//***************************************************************************** -// -//! \addtogroup socket_api -//! @{ -// -//***************************************************************************** - - -//***************************************************************************** -// -// If building with a C++ compiler, make all of the definitions in this header -// have a C binding. -// -//***************************************************************************** -#ifdef __cplusplus -extern "C" { -#endif - -#define HOSTNAME_MAX_LENGTH (230) // 230 bytes + header shouldn't exceed 8 bit value - -//--------- Address Families -------- - -#define AF_INET 2 -#define AF_INET6 23 - -//------------ Socket Types ------------ - -#define SOCK_STREAM 1 -#define SOCK_DGRAM 2 -#define SOCK_RAW 3 // Raw sockets allow new IPv4 protocols to be implemented in user space. A raw socket receives or sends the raw datagram not including link level headers -#define SOCK_RDM 4 -#define SOCK_SEQPACKET 5 - -//----------- Socket Protocol ---------- - -#define IPPROTO_IP 0 // dummy for IP -#define IPPROTO_ICMP 1 // control message protocol -#define IPPROTO_IPV4 IPPROTO_IP // IP inside IP -#define IPPROTO_TCP 6 // tcp -#define IPPROTO_UDP 17 // user datagram protocol -#define IPPROTO_IPV6 41 // IPv6 in IPv6 -#define IPPROTO_NONE 59 // No next header -#define IPPROTO_RAW 255 // raw IP packet -#define IPPROTO_MAX 256 - -//----------- Socket retunr codes ----------- - -#define SOC_ERROR (-1) // error -#define SOC_IN_PROGRESS (-2) // socket in progress - -//----------- Socket Options ----------- -#define SOL_SOCKET 0xffff // socket level -#define SOCKOPT_RECV_NONBLOCK 0 // recv non block mode, set SOCK_ON or SOCK_OFF (default block mode) -#define SOCKOPT_RECV_TIMEOUT 1 // optname to configure recv and recvfromtimeout -#define SOCKOPT_ACCEPT_NONBLOCK 2 // accept non block mode, set SOCK_ON or SOCK_OFF (default block mode) -#define SOCK_ON 0 // socket non-blocking mode is enabled -#define SOCK_OFF 1 // socket blocking mode is enabled - -#define TCP_NODELAY 0x0001 -#define TCP_BSDURGENT 0x7000 - -#define MAX_PACKET_SIZE 1500 -#define MAX_LISTEN_QUEUE 4 - -#define IOCTL_SOCKET_EVENTMASK - -#define ENOBUFS 55 // No buffer space available - -#define __FD_SETSIZE 32 - -#define ASIC_ADDR_LEN 8 - -#define NO_QUERY_RECIVED -3 - - -typedef struct _in_addr_t -{ - unsigned long s_addr; // load with inet_aton() -} in_addr; - -typedef struct _sockaddr_t -{ - uint16_t sa_family; - uint8_t sa_data[14]; -} sockaddr; - -typedef struct _sockaddr_in_t -{ - int16_t sin_family; // e.g. AF_INET - uint16_t sin_port; // e.g. htons(3490) - in_addr sin_addr; // see struct in_addr, below - char sin_zero[8]; // zero this if you want to -} sockaddr_in; - -//typedef unsigned long socklen_t; //acassis: conflict with previous declaration on nuttx - -// The fd_set member is required to be an array of longs. -typedef long int __fd_mask; - -// It's easier to assume 8-bit bytes than to get CHAR_BIT. -#define __NFDBITS (8 * sizeof (__fd_mask)) -#define __FDELT(d) ((d) / __NFDBITS) -#define __FDMASK(d) ((__fd_mask) 1 << ((d) % __NFDBITS)) - -// fd_set for select and pselect. -typedef struct -{ - __fd_mask fds_bits[__FD_SETSIZE / __NFDBITS]; -#define __FDS_BITS(set) ((set)->fds_bits) -} TICC3000fd_set; - -// We don't use `memset' because this would require a prototype and -// the array isn't too big. -#define __FD_ZERO(set) \ - do { \ - unsigned int __i; \ - TICC3000fd_set *__arr = (set); \ - for (__i = 0; __i < sizeof (TICC3000fd_set) / sizeof (__fd_mask); ++__i) \ - __FDS_BITS (__arr)[__i] = 0; \ - } while (0) -#define __FD_SET(d, set) (__FDS_BITS (set)[__FDELT (d)] |= __FDMASK (d)) -#define __FD_CLR(d, set) (__FDS_BITS (set)[__FDELT (d)] &= ~__FDMASK (d)) -#define __FD_ISSET(d, set) (__FDS_BITS (set)[__FDELT (d)] & __FDMASK (d)) - -// Access macros for 'TICC3000fd_set'. -#define FD_SET(fd, fdsetp) __FD_SET (fd, fdsetp) -#define FD_CLR(fd, fdsetp) __FD_CLR (fd, fdsetp) -#define FD_ISSET(fd, fdsetp) __FD_ISSET (fd, fdsetp) -#define FD_ZERO(fdsetp) __FD_ZERO (fdsetp) - -//Use in case of Big Endian only - -#define htonl(A) ((((unsigned long)(A) & 0xff000000) >> 24) | \ - (((unsigned long)(A) & 0x00ff0000) >> 8) | \ - (((unsigned long)(A) & 0x0000ff00) << 8) | \ - (((unsigned long)(A) & 0x000000ff) << 24)) - -#define ntohl htonl - -//Use in case of Big Endian only -#define htons(A) ((((unsigned long)(A) & 0xff00) >> 8) | \ - (((unsigned long)(A) & 0x00ff) << 8)) - - -#define ntohs htons - -// mDNS port - 5353 mDNS multicast address - 224.0.0.251 -#define SET_mDNS_ADD(sockaddr) sockaddr.sa_data[0] = 0x14; \ - sockaddr.sa_data[1] = 0xe9; \ - sockaddr.sa_data[2] = 0xe0; \ - sockaddr.sa_data[3] = 0x0; \ - sockaddr.sa_data[4] = 0x0; \ - sockaddr.sa_data[5] = 0xfb; - - -//***************************************************************************** -// -// Prototypes for the APIs. -// -//***************************************************************************** - -//***************************************************************************** -// -//! socket -//! -//! @param domain selects the protocol family which will be used for -//! communication. On this version only AF_INET is supported -//! @param type specifies the communication semantics. On this version -//! only SOCK_STREAM, SOCK_DGRAM, SOCK_RAW are supported -//! @param protocol specifies a particular protocol to be used with the -//! socket IPPROTO_TCP, IPPROTO_UDP or IPPROTO_RAW are -//! supported. -//! -//! @return On success, socket handle that is used for consequent socket -//! operations. On error, -1 is returned. -//! -//! @brief create an endpoint for communication -//! The socket function creates a socket that is bound to a specific -//! transport service provider. This function is called by the -//! application layer to obtain a socket handle. -// -//***************************************************************************** -extern int socket(long domain, long type, long protocol); - -//***************************************************************************** -// -//! closesocket -//! -//! @param sd socket handle. -//! -//! @return On success, zero is returned. On error, -1 is returned. -//! -//! @brief The socket function closes a created socket. -// -//***************************************************************************** -extern long closesocket(long sd); - -//***************************************************************************** -// -//! accept -//! -//! @param[in] sd socket descriptor (handle) -//! @param[out] addr the argument addr is a pointer to a sockaddr structure -//! This structure is filled in with the address of the -//! peer socket, as known to the communications layer. -//! determined. The exact format of the address returned -//! addr is by the socket's address sockaddr. -//! On this version only AF_INET is supported. -//! This argument returns in network order. -//! @param[out] addrlen the addrlen argument is a value-result argument: -//! it should initially contain the size of the structure -//! pointed to by addr. -//! -//! @return For socket in blocking mode: -//! On success, socket handle. on failure negative -//! For socket in non-blocking mode: -//! - On connection establishment, socket handle -//! - On connection pending, SOC_IN_PROGRESS (-2) -//! - On failure, SOC_ERROR (-1) -//! -//! @brief accept a connection on a socket: -//! This function is used with connection-based socket types -//! (SOCK_STREAM). It extracts the first connection request on the -//! queue of pending connections, creates a new connected socket, and -//! returns a new file descriptor referring to that socket. -//! The newly created socket is not in the listening state. -//! The original socket sd is unaffected by this call. -//! The argument sd is a socket that has been created with socket(), -//! bound to a local address with bind(), and is listening for -//! connections after a listen(). The argument addr is a pointer -//! to a sockaddr structure. This structure is filled in with the -//! address of the peer socket, as known to the communications layer. -//! The exact format of the address returned addr is determined by the -//! socket's address family. The addrlen argument is a value-result -//! argument: it should initially contain the size of the structure -//! pointed to by addr, on return it will contain the actual -//! length (in bytes) of the address returned. -//! -//! @sa socket ; bind ; listen -// -//***************************************************************************** -extern long accept(long sd, sockaddr *addr, socklen_t *addrlen); - -//***************************************************************************** -// -//! bind -//! -//! @param[in] sd socket descriptor (handle) -//! @param[out] addr specifies the destination address. On this version -//! only AF_INET is supported. -//! @param[out] addrlen contains the size of the structure pointed to by addr. -//! -//! @return On success, zero is returned. On error, -1 is returned. -//! -//! @brief assign a name to a socket -//! This function gives the socket the local address addr. -//! addr is addrlen bytes long. Traditionally, this is called when a -//! socket is created with socket, it exists in a name space (address -//! family) but has no name assigned. -//! It is necessary to assign a local address before a SOCK_STREAM -//! socket may receive connections. -//! -//! @sa socket ; accept ; listen -// -//***************************************************************************** -extern long bind(long sd, const sockaddr *addr, long addrlen); - -//***************************************************************************** -// -//! listen -//! -//! @param[in] sd socket descriptor (handle) -//! @param[in] backlog specifies the listen queue depth. On this version -//! backlog is not supported. -//! @return On success, zero is returned. On error, -1 is returned. -//! -//! @brief listen for connections on a socket -//! The willingness to accept incoming connections and a queue -//! limit for incoming connections are specified with listen(), -//! and then the connections are accepted with accept. -//! The listen() call applies only to sockets of type SOCK_STREAM -//! The backlog parameter defines the maximum length the queue of -//! pending connections may grow to. -//! -//! @sa socket ; accept ; bind -//! -//! @note On this version, backlog is not supported -// -//***************************************************************************** -extern long listen(long sd, long backlog); - -//***************************************************************************** -// -//! gethostbyname -//! -//! @param[in] hostname host name -//! @param[in] usNameLen name length -//! @param[out] out_ip_addr This parameter is filled in with host IP address. -//! In case that host name is not resolved, -//! out_ip_addr is zero. -//! @return On success, positive is returned. On error, negative is returned -//! -//! @brief Get host IP by name. Obtain the IP Address of machine on network, -//! by its name. -//! -//! @note On this version, only blocking mode is supported. Also note that -//! the function requires DNS server to be configured prior to its usage. -// -//***************************************************************************** -#ifndef CC3000_TINY_DRIVER -extern int gethostbyname(char * hostname, uint16_t usNameLen, unsigned long* out_ip_addr); -#endif - - -//***************************************************************************** -// -//! connect -//! -//! @param[in] sd socket descriptor (handle) -//! @param[in] addr specifies the destination addr. On this version -//! only AF_INET is supported. -//! @param[out] addrlen contains the size of the structure pointed to by addr -//! @return On success, zero is returned. On error, -1 is returned -//! -//! @brief initiate a connection on a socket -//! Function connects the socket referred to by the socket descriptor -//! sd, to the address specified by addr. The addrlen argument -//! specifies the size of addr. The format of the address in addr is -//! determined by the address space of the socket. If it is of type -//! SOCK_DGRAM, this call specifies the peer with which the socket is -//! to be associated; this address is that to which datagrams are to be -//! sent, and the only address from which datagrams are to be received. -//! If the socket is of type SOCK_STREAM, this call attempts to make a -//! connection to another socket. The other socket is specified by -//! address, which is an address in the communications space of the -//! socket. Note that the function implements only blocking behavior -//! thus the caller will be waiting either for the connection -//! establishment or for the connection establishment failure. -//! -//! @sa socket -// -//***************************************************************************** -extern long connect(long sd, const sockaddr *addr, long addrlen); - -//***************************************************************************** -// -//! select -//! -//! @param[in] nfds the highest-numbered file descriptor in any of the -//! three sets, plus 1. -//! @param[out] writesds socket descriptors list for write monitoring -//! @param[out] readsds socket descriptors list for read monitoring -//! @param[out] exceptsds socket descriptors list for exception monitoring -//! @param[in] timeout is an upper bound on the amount of time elapsed -//! before select() returns. Null means infinity -//! timeout. The minimum timeout is 5 milliseconds, -//! less than 5 milliseconds will be set -//! automatically to 5 milliseconds. -//! @return On success, select() returns the number of file descriptors -//! contained in the three returned descriptor sets (that is, the -//! total number of bits that are set in readfds, writefds, -//! exceptfds) which may be zero if the timeout expires before -//! anything interesting happens. -//! On error, -1 is returned. -//! *readsds - return the sockets on which Read request will -//! return without delay with valid data. -//! *writesds - return the sockets on which Write request -//! will return without delay. -//! *exceptsds - return the sockets which closed recently. -//! -//! @brief Monitor socket activity -//! Select allow a program to monitor multiple file descriptors, -//! waiting until one or more of the file descriptors become -//! "ready" for some class of I/O operation -//! -//! @Note If the timeout value set to less than 5ms it will automatically set -//! to 5ms to prevent overload of the system -//! -//! @sa socket -// -//***************************************************************************** -extern int select(long nfds, TICC3000fd_set *readsds, TICC3000fd_set *writesds, - TICC3000fd_set *exceptsds, struct timeval *timeout); - -//***************************************************************************** -// -//! setsockopt -//! -//! @param[in] sd socket handle -//! @param[in] level defines the protocol level for this option -//! @param[in] optname defines the option name to Interrogate -//! @param[in] optval specifies a value for the option -//! @param[in] optlen specifies the length of the option value -//! @return On success, zero is returned. On error, -1 is returned -//! -//! @brief set socket options -//! This function manipulate the options associated with a socket. -//! Options may exist at multiple protocol levels; they are always -//! present at the uppermost socket level. -//! When manipulating socket options the level at which the option -//! resides and the name of the option must be specified. -//! To manipulate options at the socket level, level is specified as -//! SOL_SOCKET. To manipulate options at any other level the protocol -//! number of the appropriate protocol controlling the option is -//! supplied. For example, to indicate that an option is to be -//! interpreted by the TCP protocol, level should be set to the -//! protocol number of TCP; -//! The parameters optval and optlen are used to access optval - -//! use for setsockopt(). For getsockopt() they identify a buffer -//! in which the value for the requested option(s) are to -//! be returned. For getsockopt(), optlen is a value-result -//! parameter, initially containing the size of the buffer -//! pointed to by option_value, and modified on return to -//! indicate the actual size of the value returned. If no option -//! value is to be supplied or returned, option_value may be NULL. -//! -//! @Note On this version the following two socket options are enabled: -//! The only protocol level supported in this version -//! is SOL_SOCKET (level). -//! 1. SOCKOPT_RECV_TIMEOUT (optname) -//! SOCKOPT_RECV_TIMEOUT configures recv and recvfrom timeout -//! in milliseconds. -//! In that case optval should be pointer to unsigned long. -//! 2. SOCKOPT_NONBLOCK (optname). sets the socket non-blocking mode on -//! or off. -//! In that case optval should be SOCK_ON or SOCK_OFF (optval). -//! -//! @sa getsockopt -// -//***************************************************************************** -#ifndef CC3000_TINY_DRIVER -extern int setsockopt(long sd, long level, long optname, const void *optval, - socklen_t optlen); -#endif -//***************************************************************************** -// -//! getsockopt -//! -//! @param[in] sd socket handle -//! @param[in] level defines the protocol level for this option -//! @param[in] optname defines the option name to Interrogate -//! @param[out] optval specifies a value for the option -//! @param[out] optlen specifies the length of the option value -//! @return On success, zero is returned. On error, -1 is returned -//! -//! @brief set socket options -//! This function manipulate the options associated with a socket. -//! Options may exist at multiple protocol levels; they are always -//! present at the uppermost socket level. -//! When manipulating socket options the level at which the option -//! resides and the name of the option must be specified. -//! To manipulate options at the socket level, level is specified as -//! SOL_SOCKET. To manipulate options at any other level the protocol -//! number of the appropriate protocol controlling the option is -//! supplied. For example, to indicate that an option is to be -//! interpreted by the TCP protocol, level should be set to the -//! protocol number of TCP; -//! The parameters optval and optlen are used to access optval - -//! use for setsockopt(). For getsockopt() they identify a buffer -//! in which the value for the requested option(s) are to -//! be returned. For getsockopt(), optlen is a value-result -//! parameter, initially containing the size of the buffer -//! pointed to by option_value, and modified on return to -//! indicate the actual size of the value returned. If no option -//! value is to be supplied or returned, option_value may be NULL. -//! -//! @Note On this version the following two socket options are enabled: -//! The only protocol level supported in this version -//! is SOL_SOCKET (level). -//! 1. SOCKOPT_RECV_TIMEOUT (optname) -//! SOCKOPT_RECV_TIMEOUT configures recv and recvfrom timeout -//! in milliseconds. -//! In that case optval should be pointer to unsigned long. -//! 2. SOCKOPT_NONBLOCK (optname). sets the socket non-blocking mode on -//! or off. -//! In that case optval should be SOCK_ON or SOCK_OFF (optval). -//! -//! @sa setsockopt -// -//***************************************************************************** -extern int getsockopt(long sd, long level, long optname, void *optval, - socklen_t *optlen); - -//***************************************************************************** -// -//! recv -//! -//! @param[in] sd socket handle -//! @param[out] buf Points to the buffer where the message should be stored -//! @param[in] len Specifies the length in bytes of the buffer pointed to -//! by the buffer argument. -//! @param[in] flags Specifies the type of message reception. -//! On this version, this parameter is not supported. -//! -//! @return Return the number of bytes received, or -1 if an error -//! occurred -//! -//! @brief function receives a message from a connection-mode socket -//! -//! @sa recvfrom -//! -//! @Note On this version, only blocking mode is supported. -// -//***************************************************************************** -extern int recv(long sd, void *buf, long len, long flags); - -//***************************************************************************** -// -//! recvfrom -//! -//! @param[in] sd socket handle -//! @param[out] buf Points to the buffer where the message should be stored -//! @param[in] len Specifies the length in bytes of the buffer pointed to -//! by the buffer argument. -//! @param[in] flags Specifies the type of message reception. -//! On this version, this parameter is not supported. -//! @param[in] from pointer to an address structure indicating the source -//! address: sockaddr. On this version only AF_INET is -//! supported. -//! @param[in] fromlen source address structure size -//! -//! @return Return the number of bytes received, or -1 if an error -//! occurred -//! -//! @brief read data from socket -//! function receives a message from a connection-mode or -//! connectionless-mode socket. Note that raw sockets are not -//! supported. -//! -//! @sa recv -//! -//! @Note On this version, only blocking mode is supported. -// -//***************************************************************************** -extern int recvfrom(long sd, void *buf, long len, long flags, sockaddr *from, - socklen_t *fromlen); - -//***************************************************************************** -// -//! send -//! -//! @param sd socket handle -//! @param buf Points to a buffer containing the message to be sent -//! @param len message size in bytes -//! @param flags On this version, this parameter is not supported -//! -//! @return Return the number of bytes transmitted, or -1 if an -//! error occurred -//! -//! @brief Write data to TCP socket -//! This function is used to transmit a message to another -//! socket. -//! -//! @Note On this version, only blocking mode is supported. -//! -//! @sa sendto -// -//***************************************************************************** - -extern int send(long sd, const void *buf, long len, long flags); - -//***************************************************************************** -// -//! sendto -//! -//! @param sd socket handle -//! @param buf Points to a buffer containing the message to be sent -//! @param len message size in bytes -//! @param flags On this version, this parameter is not supported -//! @param to pointer to an address structure indicating the destination -//! address: sockaddr. On this version only AF_INET is -//! supported. -//! @param tolen destination address structure size -//! -//! @return Return the number of bytes transmitted, or -1 if an -//! error occurred -//! -//! @brief Write data to TCP socket -//! This function is used to transmit a message to another -//! socket. -//! -//! @Note On this version, only blocking mode is supported. -//! -//! @sa send -// -//***************************************************************************** - -extern int sendto(long sd, const void *buf, long len, long flags, - const sockaddr *to, socklen_t tolen); - -//***************************************************************************** -// -//! mdnsAdvertiser -//! -//! @param[in] mdnsEnabled flag to enable/disable the mDNS feature -//! @param[in] deviceServiceName Service name as part of the published -//! canonical domain name -//! @param[in] deviceServiceNameLength Length of the service name -//! -//! -//! @return On success, zero is returned, return SOC_ERROR if socket was not -//! opened successfully, or if an error occurred. -//! -//! @brief Set CC3000 in mDNS advertiser mode in order to advertise itself. -// -//***************************************************************************** -extern int mdnsAdvertiser(uint16_t mdnsEnabled, char * deviceServiceName, uint16_t deviceServiceNameLength); - -//***************************************************************************** -// -// Close the Doxygen group. -//! @} -// -//***************************************************************************** - - -//***************************************************************************** -// -// Mark the end of the C bindings section for C++ compilers. -// -//***************************************************************************** -#ifdef __cplusplus -} -#endif // __cplusplus - -#endif // __SOCKET_H__ diff --git a/nuttx/include/nuttx/wireless/cc3000/wlan.h b/nuttx/include/nuttx/wireless/cc3000/wlan.h index d910c4e9f..671d144f6 100644 --- a/nuttx/include/nuttx/wireless/cc3000/wlan.h +++ b/nuttx/include/nuttx/wireless/cc3000/wlan.h @@ -1,517 +1,518 @@ /***************************************************************************** -* -* wlan.h - CC3000 Host Driver Implementation. -* Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions -* are met: -* -* Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* -* Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the -* distribution. -* -* Neither the name of Texas Instruments Incorporated nor the names of -* its contributors may be used to endorse or promote products derived -* from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -*****************************************************************************/ -#ifndef __WLAN_H__ -#define __WLAN_H__ - -#include <nuttx/wireless/cc3000/cc3000_common.h> - -//***************************************************************************** -// -// If building with a C++ compiler, make all of the definitions in this header -// have a C binding. -// -//***************************************************************************** -#ifdef __cplusplus + * include/nuttx/wireless/cc3000/wlan.h + * + * wlan.h - CC3000 Host Driver Implementation. + * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + *****************************************************************************/ + +#ifndef _INCLUDE_NUTTX_WIRELESS_CC3000_WLAN_H +#define _INCLUDE_NUTTX_WIRELESS_CC3000_WLAN_H + +/***************************************************************************** + * Included Files + *****************************************************************************/ + +#include "cc3000_common.h" + +/***************************************************************************** + * Pre-processor Definitions + *****************************************************************************/ + +#define WLAN_SEC_UNSEC (0) +#define WLAN_SEC_WEP (1) +#define WLAN_SEC_WPA (2) +#define WLAN_SEC_WPA2 (3) + +/***************************************************************************** + * Public Data + *****************************************************************************/ + +#ifdef __cplusplus extern "C" { #endif -#define WLAN_SEC_UNSEC (0) -#define WLAN_SEC_WEP (1) -#define WLAN_SEC_WPA (2) -#define WLAN_SEC_WPA2 (3) -//***************************************************************************** -// -//! \addtogroup wlan_api -//! @{ -// -//***************************************************************************** - - -//***************************************************************************** -// -//! wlan_init -//! -//! @param sWlanCB Asynchronous events callback. -//! 0 no event call back. -//! -call back parameters: -//! 1) event_type: HCI_EVNT_WLAN_UNSOL_CONNECT connect event, -//! HCI_EVNT_WLAN_UNSOL_DISCONNECT disconnect event, -//! HCI_EVNT_WLAN_ASYNC_SIMPLE_CONFIG_DONE config done, -//! HCI_EVNT_WLAN_UNSOL_DHCP dhcp report, -//! HCI_EVNT_WLAN_ASYNC_PING_REPORT ping report OR -//! HCI_EVNT_WLAN_KEEPALIVE keepalive. -//! 2) data: pointer to extra data that received by the event -//! (NULL no data). -//! 3) length: data length. -//! -Events with extra data: -//! HCI_EVNT_WLAN_UNSOL_DHCP: 4 bytes IP, 4 bytes Mask, -//! 4 bytes default gateway, 4 bytes DHCP server and 4 bytes -//! for DNS server. -//! HCI_EVNT_WLAN_ASYNC_PING_REPORT: 4 bytes Packets sent, -//! 4 bytes Packets received, 4 bytes Min round time, -//! 4 bytes Max round time and 4 bytes for Avg round time. -//! -//! @param sFWPatches 0 no patch or pointer to FW patches -//! @param sDriverPatches 0 no patch or pointer to driver patches -//! @param sBootLoaderPatches 0 no patch or pointer to bootloader patches -//! @param sReadWlanInterruptPin init callback. the callback read wlan -//! interrupt status. -//! @param sWlanInterruptEnable init callback. the callback enable wlan -//! interrupt. -//! @param sWlanInterruptDisable init callback. the callback disable wlan -//! interrupt. -//! @param sWriteWlanPin init callback. the callback write value -//! to device pin. -//! -//! @return none -//! -//! @sa wlan_set_event_mask , wlan_start , wlan_stop -//! -//! @brief Initialize wlan driver -//! -//! @warning This function must be called before ANY other wlan driver function -// -//***************************************************************************** -extern void wlan_init( tWlanCB sWlanCB, - tFWPatches sFWPatches, - tDriverPatches sDriverPatches, - tBootLoaderPatches sBootLoaderPatches, - tWlanReadInteruptPin sReadWlanInterruptPin, - tWlanInterruptEnable sWlanInterruptEnable, - tWlanInterruptDisable sWlanInterruptDisable, - tWriteWlanPin sWriteWlanPin); - - - -//***************************************************************************** -// -//! wlan_start -//! -//! @param usPatchesAvailableAtHost - flag to indicate if patches available -//! from host or from EEPROM. Due to the -//! fact the patches are burn to the EEPROM -//! using the patch programmer utility, the -//! patches will be available from the EEPROM -//! and not from the host. -//! -//! @return none -//! -//! @brief Start WLAN device. This function asserts the enable pin of -//! the device (WLAN_EN), starting the HW initialization process. -//! The function blocked until device Initialization is completed. -//! Function also configure patches (FW, driver or bootloader) -//! and calls appropriate device callbacks. -//! -//! @Note Prior calling the function wlan_init shall be called. -//! @Warning This function must be called after wlan_init and before any -//! other wlan API -//! @sa wlan_init , wlan_stop -//! -// -//***************************************************************************** -extern void wlan_start(uint16_t usPatchesAvailableAtHost); - -//***************************************************************************** -// -//! wlan_stop -//! -//! @param none -//! -//! @return none -//! -//! @brief Stop WLAN device by putting it into reset state. -//! -//! @sa wlan_start -// -//***************************************************************************** -extern void wlan_stop(void); - -//***************************************************************************** -// -//! wlan_connect -//! -//! @param sec_type security options: -//! WLAN_SEC_UNSEC, -//! WLAN_SEC_WEP (ASCII support only), -//! WLAN_SEC_WPA or WLAN_SEC_WPA2 -//! @param ssid up to 32 bytes and is ASCII SSID of the AP -//! @param ssid_len length of the SSID -//! @param bssid 6 bytes specified the AP bssid -//! @param key up to 16 bytes specified the AP security key -//! @param key_len key length -//! -//! @return On success, zero is returned. On error, negative is returned. -//! Note that even though a zero is returned on success to trigger -//! connection operation, it does not mean that CCC3000 is already -//! connected. An asynchronous "Connected" event is generated when -//! actual association process finishes and CC3000 is connected to -//! the AP. If DHCP is set, An asynchronous "DHCP" event is -//! generated when DHCP process is finish. -//! -//! -//! @brief Connect to AP -//! @warning Please Note that when connection to AP configured with security -//! type WEP, please confirm that the key is set as ASCII and not -//! as HEX. -//! @sa wlan_disconnect -// -//***************************************************************************** +/***************************************************************************** + * Public Function Prototypes + *****************************************************************************/ + +/***************************************************************************** + * Name: wlan_init + * + * Input Parameters: + * sWlanCB Asynchronous events callback. + * 0 no event call back. + * - call back parameters: + * 1) event_type: HCI_EVNT_WLAN_UNSOL_CONNECT connect event, + * HCI_EVNT_WLAN_UNSOL_DISCONNECT disconnect event, + * HCI_EVNT_WLAN_ASYNC_SIMPLE_CONFIG_DONE config done, + * HCI_EVNT_WLAN_UNSOL_DHCP dhcp report, + * HCI_EVNT_WLAN_ASYNC_PING_REPORT ping report OR + * HCI_EVNT_WLAN_KEEPALIVE keepalive. + * 2) data: pointer to extra data that received by the event + * (NULL no data). + * 3) length: data length. + * - Events with extra data: + * HCI_EVNT_WLAN_UNSOL_DHCP: 4 bytes IP, 4 bytes Mask, + * 4 bytes default gateway, 4 bytes DHCP server and 4 bytes + * for DNS server. + * HCI_EVNT_WLAN_ASYNC_PING_REPORT: 4 bytes Packets sent, + * 4 bytes Packets received, 4 bytes Min round time, + * 4 bytes Max round time and 4 bytes for Avg round time. + * + * sFWPatches 0 no patch or pointer to FW patches + * sDriverPatches 0 no patch or pointer to driver patches + * sBootLoaderPatches 0 no patch or pointer to bootloader patches + * sReadWlanInterruptPin init callback. the callback read wlan + * interrupt status. + * sWlanInterruptEnable init callback. the callback enable wlan + * interrupt. + * sWlanInterruptDisable init callback. the callback disable wlan + * interrupt. + * sWriteWlanPin init callback. the callback write value + * to device pin. + * + * Returned Value: + * None + * + * Description: + * Initialize wlan driver + * + * WARNING: This function must be called before ANY other wlan driver function + * + *****************************************************************************/ + +void wlan_init(tWlanCB sWlanCB, tFWPatches sFWPatches, + tDriverPatches sDriverPatches, + tBootLoaderPatches sBootLoaderPatches, + tWlanReadInteruptPin sReadWlanInterruptPin, + tWlanInterruptEnable sWlanInterruptEnable, + tWlanInterruptDisable sWlanInterruptDisable, + tWriteWlanPin sWriteWlanPin)' + + +/***************************************************************************** + * Name: wlan_start + * + * Input Parameters: + * usPatchesAvailableAtHost - flag to indicate if patches available + * from host or from EEPROM. Due to the + * fact the patches are burn to the EEPROM + * using the patch programmer utility, the + * patches will be available from the EEPROM + * and not from the host. + * + * Returned Value: + * None + * + * Description: + * Start WLAN device. This function asserts the enable pin of + * the device (WLAN_EN), starting the HW initialization process. + * The function blocked until device Initialization is completed. + * Function also configure patches (FW, driver or bootloader) + * and calls appropriate device callbacks. + * + * NOTE: Prior calling the function wlan_init shall be called. + * WARNING: This function must be called after wlan_init and before any + * other wlan API + * + *****************************************************************************/ + +void wlan_start(uint16_t usPatchesAvailableAtHost); + +/***************************************************************************** + * Name: wlan_stop + * + * Input Parameters: + * None + * + * Returned Value: + * None + * + * Description: + * Stop WLAN device by putting it into reset state. + * + *****************************************************************************/ + +void wlan_stop(void); + +/***************************************************************************** + * Name: wlan_connect + * + * Input Parameters: + * sec_type security options: + * WLAN_SEC_UNSEC, + * WLAN_SEC_WEP (ASCII support only), + * WLAN_SEC_WPA or WLAN_SEC_WPA2 + * ssid up to 32 bytes and is ASCII SSID of the AP + * ssid_len length of the SSID + * bssid 6 bytes specified the AP bssid + * key up to 16 bytes specified the AP security key + * key_len key length + * + * Returned Value: + * On success, zero is returned. On error, negative is returned. + * Note that even though a zero is returned on success to trigger + * connection operation, it does not mean that CCC3000 is already + * connected. An asynchronous "Connected" event is generated when + * actual association process finishes and CC3000 is connected to + * the AP. If DHCP is set, An asynchronous "DHCP" event is + * generated when DHCP process is finish. + * + * Description: + * Connect to AP + * + * WARNING: Please Note that when connection to AP configured with security + * type WEP, please confirm that the key is set as ASCII and not + * as HEX. + * + *****************************************************************************/ + #ifndef CC3000_TINY_DRIVER -extern long wlan_connect(unsigned long ulSecType, char *ssid, long ssid_len, - uint8_t *bssid, uint8_t *key, long key_len); +long wlan_connect(unsigned long ulSecType, char *ssid, long ssid_len, + uint8_t *bssid, uint8_t *key, long key_len); #else -extern long wlan_connect(char *ssid, long ssid_len); - +long wlan_connect(char *ssid, long ssid_len); #endif -//***************************************************************************** -// -//! wlan_disconnect -//! -//! @return 0 disconnected done, other CC3000 already disconnected -//! -//! @brief Disconnect connection from AP. -//! -//! @sa wlan_connect -// -//***************************************************************************** - -extern long wlan_disconnect(void); - -//***************************************************************************** -// -//! wlan_add_profile -//! -//! @param ulSecType WLAN_SEC_UNSEC,WLAN_SEC_WEP,WLAN_SEC_WPA,WLAN_SEC_WPA2 -//! @param ucSsid ssid SSID up to 32 bytes -//! @param ulSsidLen ssid length -//! @param ucBssid bssid 6 bytes -//! @param ulPriority ulPriority profile priority. Lowest priority:0. -//! @param ulPairwiseCipher_Or_TxKeyLen key length for WEP security -//! @param ulGroupCipher_TxKeyIndex key index -//! @param ulKeyMgmt KEY management -//! @param ucPf_OrKey security key -//! @param ulPassPhraseLen security key length for WPA\WPA2 -//! -//! @return On success, zero is returned. On error, -1 is returned -//! -//! @brief When auto start is enabled, the device connects to -//! station from the profiles table. Up to 7 profiles are supported. -//! If several profiles configured the device choose the highest -//! priority profile, within each priority group, device will choose -//! profile based on security policy, signal strength, etc -//! parameters. All the profiles are stored in CC3000 NVMEM. -//! -//! @sa wlan_ioctl_del_profile -// -//***************************************************************************** - -extern long wlan_add_profile(unsigned long ulSecType, uint8_t* ucSsid, - unsigned long ulSsidLen, - uint8_t *ucBssid, - unsigned long ulPriority, - unsigned long ulPairwiseCipher_Or_Key, - unsigned long ulGroupCipher_TxKeyLen, - unsigned long ulKeyMgmt, - uint8_t* ucPf_OrKey, - unsigned long ulPassPhraseLen); - - - -//***************************************************************************** -// -//! wlan_ioctl_del_profile -//! -//! @param index number of profile to delete -//! -//! @return On success, zero is returned. On error, -1 is returned -//! -//! @brief Delete WLAN profile -//! -//! @Note In order to delete all stored profile, set index to 255. -//! -//! @sa wlan_add_profile -// -//***************************************************************************** -extern long wlan_ioctl_del_profile(unsigned long ulIndex); - -//***************************************************************************** -// -//! wlan_set_event_mask -//! -//! @param mask mask option: -//! HCI_EVNT_WLAN_UNSOL_CONNECT connect event -//! HCI_EVNT_WLAN_UNSOL_DISCONNECT disconnect event -//! HCI_EVNT_WLAN_ASYNC_SIMPLE_CONFIG_DONE smart config done -//! HCI_EVNT_WLAN_UNSOL_INIT init done -//! HCI_EVNT_WLAN_UNSOL_DHCP dhcp event report -//! HCI_EVNT_WLAN_ASYNC_PING_REPORT ping report -//! HCI_EVNT_WLAN_KEEPALIVE keepalive -//! HCI_EVNT_WLAN_TX_COMPLETE - disable information on end of transmission -//! Saved: no. -//! -//! @return On success, zero is returned. On error, -1 is returned -//! -//! @brief Mask event according to bit mask. In case that event is -//! masked (1), the device will not send the masked event to host. -// -//***************************************************************************** -extern long wlan_set_event_mask(unsigned long ulMask); - -//***************************************************************************** -// -//! wlan_ioctl_statusget -//! -//! @param none -//! -//! @return WLAN_STATUS_DISCONNECTED, WLAN_STATUS_SCANING, -//! STATUS_CONNECTING or WLAN_STATUS_CONNECTED -//! -//! @brief get wlan status: disconnected, scanning, connecting or connected -// -//***************************************************************************** -extern long wlan_ioctl_statusget(void); - - -//***************************************************************************** -// -//! wlan_ioctl_set_connection_policy -//! -//! @param should_connect_to_open_ap enable(1), disable(0) connect to any -//! available AP. This parameter corresponds to the configuration of -//! item # 3 in the brief description. -//! @param should_use_fast_connect enable(1), disable(0). if enabled, tries -//! to connect to the last connected AP. This parameter corresponds -//! to the configuration of item # 1 in the brief description. -//! @param auto_start enable(1), disable(0) auto connect -//! after reset and periodically reconnect if needed. This -//! configuration configures option 2 in the above description. -//! -//! @return On success, zero is returned. On error, -1 is returned -//! -//! @brief When auto is enabled, the device tries to connect according -//! the following policy: -//! 1) If fast connect is enabled and last connection is valid, -//! the device will try to connect to it without the scanning -//! procedure (fast). The last connection will be marked as -//! invalid, due to adding/removing profile. -//! 2) If profile exists, the device will try to connect it -//! (Up to seven profiles). -//! 3) If fast and profiles are not found, and open mode is -//! enabled, the device will try to connect to any AP. -//! * Note that the policy settings are stored in the CC3000 NVMEM. -//! -//! @sa wlan_add_profile , wlan_ioctl_del_profile -// -//***************************************************************************** -extern long wlan_ioctl_set_connection_policy( - unsigned long should_connect_to_open_ap, - unsigned long should_use_fast_connect, - unsigned long ulUseProfiles); - -//***************************************************************************** -// -//! wlan_ioctl_get_scan_results -//! -//! @param[in] scan_timeout parameter not supported -//! @param[out] ucResults scan result (_wlan_full_scan_results_args_t) -//! -//! @return On success, zero is returned. On error, -1 is returned -//! -//! @brief Gets entry from scan result table. -//! The scan results are returned one by one, and each entry -//! represents a single AP found in the area. The following is a -//! format of the scan result: -//! - 4 Bytes: number of networks found -//! - 4 Bytes: The status of the scan: 0 - aged results, -//! 1 - results valid, 2 - no results -//! - 42 bytes: Result entry, where the bytes are arranged as follows: -//! -//! - 1 bit isValid - is result valid or not -//! - 7 bits rssi - RSSI value; -//! - 2 bits: securityMode - security mode of the AP: -//! 0 - Open, 1 - WEP, 2 WPA, 3 WPA2 -//! - 6 bits: SSID name length -//! - 2 bytes: the time at which the entry has entered into -//! scans result table -//! - 32 bytes: SSID name -//! - 6 bytes: BSSID -//! -//! @Note scan_timeout, is not supported on this version. -//! -//! @sa wlan_ioctl_set_scan_params -// -//***************************************************************************** - - -extern long wlan_ioctl_get_scan_results(unsigned long ulScanTimeout, - uint8_t *ucResults); - -//***************************************************************************** -// -//! wlan_ioctl_set_scan_params -//! -//! @param uiEnable - start/stop application scan: -//! 1 = start scan with default interval value of 10 min. -//! in order to set a different scan interval value apply the value -//! in milliseconds. minimum 1 second. 0=stop). Wlan reset -//! (wlan_stop() wlan_start()) is needed when changing scan interval -//! value. Saved: No -//! @param uiMinDwellTime minimum dwell time value to be used for each -//! channel, in milliseconds. Saved: yes -//! Recommended Value: 100 (Default: 20) -//! @param uiMaxDwellTime maximum dwell time value to be used for each -//! channel, in milliseconds. Saved: yes -//! Recommended Value: 100 (Default: 30) -//! @param uiNumOfProbeRequests max probe request between dwell time. -//! Saved: yes. Recommended Value: 5 (Default:2) -//! @param uiChannelMask bitwise, up to 13 channels (0x1fff). -//! Saved: yes. Default: 0x7ff -//! @param uiRSSIThreshold RSSI threshold. Saved: yes (Default: -80) -//! @param uiSNRThreshold NSR threshold. Saved: yes (Default: 0) -//! @param uiDefaultTxPower probe Tx power. Saved: yes (Default: 205) -//! @param aiIntervalList pointer to array with 16 entries (16 channels) -//! each entry (unsigned long) holds timeout between periodic scan -//! (connection scan) - in milliseconds. Saved: yes. Default 2000ms. -//! -//! @return On success, zero is returned. On error, -1 is returned -//! -//! @brief start and stop scan procedure. Set scan parameters. -//! -//! @Note uiDefaultTxPower, is not supported on this version. -//! -//! @sa wlan_ioctl_get_scan_results -// -//***************************************************************************** -extern long wlan_ioctl_set_scan_params(unsigned long uiEnable, unsigned long - uiMinDwellTime,unsigned long uiMaxDwellTime, - unsigned long uiNumOfProbeRequests, - unsigned long uiChannelMask, - long iRSSIThreshold,unsigned long uiSNRThreshold, - unsigned long uiDefaultTxPower, - unsigned long *aiIntervalList); - - -//***************************************************************************** -// -//! wlan_smart_config_start -//! -//! @param algoEncryptedFlag indicates whether the information is encrypted -//! -//! @return On success, zero is returned. On error, -1 is returned -//! -//! @brief Start to acquire device profile. The device acquire its own -//! profile, if profile message is found. The acquired AP information -//! is stored in CC3000 EEPROM only in case AES128 encryption is used. -//! In case AES128 encryption is not used, a profile is created by -//! CC3000 internally. -//! -//! @Note An asynchronous event - Smart Config Done will be generated as soon -//! as the process finishes successfully. -//! -//! @sa wlan_smart_config_set_prefix , wlan_smart_config_stop -// -//***************************************************************************** -extern long wlan_smart_config_start(unsigned long algoEncryptedFlag); - - -//***************************************************************************** -// -//! wlan_smart_config_stop -//! -//! @param algoEncryptedFlag indicates whether the information is encrypted -//! -//! @return On success, zero is returned. On error, -1 is returned -//! -//! @brief Stop the acquire profile procedure -//! -//! @sa wlan_smart_config_start , wlan_smart_config_set_prefix -// -//***************************************************************************** -extern long wlan_smart_config_stop(void); - -//***************************************************************************** -// -//! wlan_smart_config_set_prefix -//! -//! @param newPrefix 3 bytes identify the SSID prefix for the Smart Config. -//! -//! @return On success, zero is returned. On error, -1 is returned -//! -//! @brief Configure station ssid prefix. The prefix is used internally -//! in CC3000. It should always be TTT. -//! -//! @Note The prefix is stored in CC3000 NVMEM -//! -//! @sa wlan_smart_config_start , wlan_smart_config_stop -// -//***************************************************************************** -extern long wlan_smart_config_set_prefix(char* cNewPrefix); - -//***************************************************************************** -// -//! wlan_smart_config_process -//! -//! @param none -//! -//! @return On success, zero is returned. On error, -1 is returned -//! -//! @brief process the acquired data and store it as a profile. The acquired -//! AP information is stored in CC3000 EEPROM encrypted. -//! The encrypted data is decrypted and stored as a profile. -//! behavior is as defined by connection policy. -// -//***************************************************************************** -extern long wlan_smart_config_process(void); - -//***************************************************************************** -// -// Close the Doxygen group. -//! @} -// -//***************************************************************************** - - - -//***************************************************************************** -// -// Mark the end of the C bindings section for C++ compilers. -// -//***************************************************************************** -#ifdef __cplusplus +/***************************************************************************** + * Name: wlan_disconnect + * + * Input Parameters: + * None + * + * Returned Value: + * 0 disconnected done, other CC3000 already disconnected + * + * Description: + * Disconnect connection from AP. + * + *****************************************************************************/ + +long wlan_disconnect(void); + +/***************************************************************************** + * Name: wlan_add_profile + * + * Input Parameters: + * ulSecType WLAN_SEC_UNSEC,WLAN_SEC_WEP,WLAN_SEC_WPA,WLAN_SEC_WPA2 + * ucSsid ssid SSID up to 32 bytes + * ulSsidLen ssid length + * ucBssid bssid 6 bytes + * ulPriority ulPriority profile priority. Lowest priority:0. + * ulPairwiseCipher_Or_TxKeyLen key length for WEP security + * ulGroupCipher_TxKeyIndex key index + * ulKeyMgmt KEY management + * ucPf_OrKey security key + * ulPassPhraseLen security key length for WPA\WPA2 + * + * Returned Value: + * On success, zero is returned. On error, -1 is returned + * + * Description: + * When auto start is enabled, the device connects to + * station from the profiles table. Up to 7 profiles are supported. + * If several profiles configured the device choose the highest + * priority profile, within each priority group, device will choose + * profile based on security policy, signal strength, etc + * parameters. All the profiles are stored in CC3000 NVMEM. + * + *****************************************************************************/ + +long wlan_add_profile(unsigned long ulSecType, uint8_t* ucSsid, + unsigned long ulSsidLen, uint8_t *ucBssid, + unsigned long ulPriority, + unsigned long ulPairwiseCipher_Or_TxKeyLen, + unsigned long ulGroupCipher_TxKeyIndex, + unsigned long ulKeyMgmt, uint8_t* ucPf_OrKey, + unsigned long ulPassPhraseLen); + +/***************************************************************************** + * Name: wlan_ioctl_del_profile + * + * Input Parameters: + * index number of profile to delete + * + * Returned Value: + * On success, zero is returned. On error, -1 is returned + * + * Description: + * Delete WLAN profile + * + * @Note In order to delete all stored profile, set index to 255. + * + *****************************************************************************/ + +long wlan_ioctl_del_profile(unsigned long ulIndex); + +/***************************************************************************** + * Name: wlan_set_event_mask + * + * Input Parameters: + * mask mask option: + * HCI_EVNT_WLAN_UNSOL_CONNECT connect event + * HCI_EVNT_WLAN_UNSOL_DISCONNECT disconnect event + * HCI_EVNT_WLAN_ASYNC_SIMPLE_CONFIG_DONE smart config done + * HCI_EVNT_WLAN_UNSOL_INIT init done + * HCI_EVNT_WLAN_UNSOL_DHCP dhcp event report + * HCI_EVNT_WLAN_ASYNC_PING_REPORT ping report + * HCI_EVNT_WLAN_KEEPALIVE keepalive + * HCI_EVNT_WLAN_TX_COMPLETE - disable information on end of transmission + * Saved: no. + * + * Returned Value: + * On success, zero is returned. On error, -1 is returned + * + * Description: + * Mask event according to bit mask. In case that event is + * masked (1), the device will not send the masked event to host. + * + *****************************************************************************/ + +long wlan_set_event_mask(unsigned long ulMask); + +/***************************************************************************** + * Name: wlan_ioctl_statusget + * + * Input Parameters: + * None + * + * Returned Value: + * WLAN_STATUS_DISCONNECTED, WLAN_STATUS_SCANING, + * STATUS_CONNECTING or WLAN_STATUS_CONNECTED + * + * Description: + * get wlan status: disconnected, scanning, connecting or connected + * + *****************************************************************************/ + +long wlan_ioctl_statusget(void); + +/***************************************************************************** + * Name: wlan_ioctl_set_connection_policy + * + * Input Parameters: + * should_connect_to_open_ap enable(1), disable(0) connect to any + * available AP. This parameter corresponds to the configuration of + * item # 3 in the brief description. + * should_use_fast_connect enable(1), disable(0). if enabled, tries + * to connect to the last connected AP. This parameter corresponds + * to the configuration of item # 1 in the brief description. + * auto_start enable(1), disable(0) auto connect + * after reset and periodically reconnect if needed. This + * configuration configures option 2 in the above description. + * + * Returned Value: + * On success, zero is returned. On error, -1 is returned + * + * Description: + * When auto is enabled, the device tries to connect according + * the following policy: + * 1) If fast connect is enabled and last connection is valid, + * the device will try to connect to it without the scanning + * procedure (fast). The last connection will be marked as + * invalid, due to adding/removing profile. + * 2) If profile exists, the device will try to connect it + * (Up to seven profiles). + * 3) If fast and profiles are not found, and open mode is + * enabled, the device will try to connect to any AP. + * * Note that the policy settings are stored in the CC3000 NVMEM. + * + *****************************************************************************/ + +long wlan_ioctl_set_connection_policy(unsigned long should_connect_to_open_ap, + unsigned long ulShouldUseFastConnect, + unsigned long ulUseProfiles); + +/***************************************************************************** + * Name: wlan_ioctl_get_scan_results + * + * Input Parameters: + * scan_timeout parameter not supported + * ucResults scan results (_wlan_full_scan_results_args_t) + * + * Returned Value: + * On success, zero is returned. On error, -1 is returned + * + * Description: + * Gets entry from scan result table. + * The scan results are returned one by one, and each entry + * represents a single AP found in the area. The following is a + * format of the scan result: + * - 4 Bytes: number of networks found + * - 4 Bytes: The status of the scan: 0 - aged results, + * 1 - results valid, 2 - no results + * - 42 bytes: Result entry, where the bytes are arranged as follows: + * - 1 bit isValid - is result valid or not + * - 7 bits rssi - RSSI value; + * - 2 bits: securityMode - security mode of the AP: + * 0 - Open, 1 - WEP, 2 WPA, 3 WPA2 + * - 6 bits: SSID name length + * - 2 bytes: the time at which the entry has entered into + * scans result table + * - 32 bytes: SSID name + * - 6 bytes: BSSID + * + * NOTE: scan_timeout, is not supported on this version. + * + *****************************************************************************/ + +long wlan_ioctl_get_scan_results(unsigned long ulScanTimeout, uint8_t *ucResults); + +/***************************************************************************** + * Name: wlan_ioctl_set_scan_params + * + * Input Parameters: + * uiEnable - start/stop application scan: + * 1 = start scan with default interval value of 10 min. + * in order to set a different scan interval value apply the value + * in milliseconds. minimum 1 second. 0=stop). Wlan reset + * (wlan_stop() wlan_start()) is needed when changing scan interval + * value. Saved: No + * uiMinDwellTime minimum dwell time value to be used for each + * channel, in milliseconds. Saved: yes + * Recommended Value: 100 (Default: 20) + * uiMaxDwellTime maximum dwell time value to be used for each + * channel, in milliseconds. Saved: yes + * Recommended Value: 100 (Default: 30) + * uiNumOfProbeRequests max probe request between dwell time. + * Saved: yes. Recommended Value: 5 (Default:2) + * uiChannelMask bitwise, up to 13 channels (0x1fff). + * Saved: yes. Default: 0x7ff + * uiRSSIThreshold RSSI threshold. Saved: yes (Default: -80) + * uiSNRThreshold NSR threshold. Saved: yes (Default: 0) + * uiDefaultTxPower probe Tx power. Saved: yes (Default: 205) + * aiIntervalList pointer to array with 16 entries (16 channels) + * each entry (unsigned long) holds timeout between periodic scan + * (connection scan) - in millisecond. Saved: yes. Default 2000ms. + * + * Returned Value: + * On success, zero is returned. On error, -1 is returned + * + * Description: + * start and stop scan procedure. Set scan parameters. + * + * @Note uiDefaultTxPower, is not supported on this version. + * + *****************************************************************************/ + +#ifndef CC3000_TINY_DRIVER +long wlan_ioctl_set_scan_params(unsigned long uiEnable, + unsigned long uiMinDwellTime, + unsigned long uiMaxDwellTime, + unsigned long uiNumOfProbeRequests, + unsigned long uiChannelMask,long iRSSIThreshold, + unsigned long uiSNRThreshold, + unsigned long uiDefaultTxPower, + unsigned long *aiIntervalList); + +/***************************************************************************** + * Name: wlan_smart_config_start + * + * Input Parameters: + * algoEncryptedFlag indicates whether the information is encrypted + * + * Returned Value: + * On success, zero is returned. On error, -1 is returned + * + * Description: + * Start to acquire device profile. The device acquire its own + * profile, if profile message is found. The acquired AP information + * is stored in CC3000 EEPROM only in case AES128 encryption is used. + * In case AES128 encryption is not used, a profile is created by + * CC3000 internally. + * + * @Note An asynchronous event - Smart Config Done will be generated as soon + * as the process finishes successfully. + * + *****************************************************************************/ + +long wlan_smart_config_start(unsigned long algoEncryptedFlag); + +/***************************************************************************** + * Name: wlan_smart_config_stop + * + * Input Parameters: + * algoEncryptedFlag indicates whether the information is encrypted + * + * Returned Value: + * On success, zero is returned. On error, -1 is returned + * + * Description: + * Stop the acquire profile procedure + * + *****************************************************************************/ + +long wlan_smart_config_stop(void); + +/***************************************************************************** + * Name: wlan_smart_config_set_prefix + * + * Input Parameters: + * newPrefix 3 bytes identify the SSID prefix for the Smart Config. + * + * Returned Value: + * On success, zero is returned. On error, -1 is returned + * + * Description: + * Configure station ssid prefix. The prefix is used internally + * in CC3000. It should always be TTT. + * + * @Note The prefix is stored in CC3000 NVMEM + * + *****************************************************************************/ + +long wlan_smart_config_set_prefix(char* cNewPrefix); + +/***************************************************************************** + * Name: wlan_smart_config_process + * + * Input Parameters: + * None + * + * Returned Value: + * On success, zero is returned. On error, -1 is returned + * + * Description: + * process the acquired data and store it as a profile. The acquired + * AP information is stored in CC3000 EEPROM encrypted. + * The encrypted data is decrypted and stored as a profile. + * behavior is as defined by connection policy. + * + *****************************************************************************/ + +long wlan_smart_config_process(void); + +#ifdef __cplusplus } #endif // __cplusplus -#endif // __WLAN_H__ +#endif // _INCLUDE_NUTTX_WIRELESS_CC3000_WLAN_H |