SNIC UART Interface library: Serial to Wi-Fi library for Murata TypeYD Wi-Fi module. For more information about TypeYD: http://www.murata.co.jp/products/microwave/module/lbwb1zzydz/index.html
Dependents: SNIC-xively-jumpstart-demo SNIC-FluentLogger-example TCPEchoServer murataDemo ... more
Fork of YDwifiInterface by
Revision 11:c49007d49e52, committed 2014-03-19
- Comitter:
- kishino
- Date:
- Wed Mar 19 01:48:37 2014 +0000
- Parent:
- 10:49ffd373066b
- Child:
- 12:0254eaccfda2
- Commit message:
- C_SNICwifi was modified to singleton class.
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SNIC/SNICwifi.cpp Wed Mar 19 01:48:37 2014 +0000 @@ -0,0 +1,205 @@ +#include "mbed.h" +#include "SNICwifi.h" +#include "SNICwifi_uartmsg.h" +#include <string> +//#include <algorithm> + +using namespace murata_wifi; + +#define UART_RECVBUF_SIZE 2048 +typedef struct +{ + unsigned char buf[UART_RECVBUF_SIZE]; + unsigned int size; + bool is_receive; +}tagUART_RECVBUF_T; +tagUART_RECVBUF_T gUART_RCVBUF; +unsigned char gUART_TEMP_BUF[UART_RECVBUF_SIZE]; + +C_SNICwifi *C_SNICwifi::mInstance_p = NULL; + +C_SNICwifi *C_SNICwifi::getInstance() +{ + if( mInstance_p == NULL ) + { + mInstance_p = new C_SNICwifi(); + } + return mInstance_p; +} + +C_SNICwifi::C_SNICwifi() +{ + mUartRecvThread_p = NULL; +} + +int C_SNICwifi::initUart(PinName tx, PinName rx, int baud) +{ + printf("[C_SNICwifi::initUart]1\r\n"); + + mUartRequestSeq = 0; + + mUart_p = new RawSerial( tx, rx ); + mUart_p->baud( baud ); + mUart_p->format(8, SerialBase::None, 1); + + printf("[C_SNICwifi::initUart]2\r\n"); + // Initialize uart + gUART_RCVBUF.is_receive = false; + gUART_RCVBUF.size = 0; + + // Create UART recv thread + mUartRecvThread_p = new Thread( C_SNICwifi::uartRecvThread ); + printf("[C_SNICwifi::initUart]3\r\n"); + if( mUartRecvThread_p == NULL ) + { + printf("[C_SNICwifi::initUart] thread cread failed\r\n"); + return -1; + } + + return 0; +} + +unsigned int C_SNICwifi::preparationSendCommand( unsigned char cmd_id, unsigned char cmd_sid + , unsigned char *req_buf_p, unsigned int req_buf_len + , unsigned char *response_buf_p, unsigned char *command_p ) +{ + unsigned char payload_array[UART_REQUEST_PAYLOAD_MAX]; + unsigned short payload_len; + unsigned int command_len = 0; + + // Make command payload + payload_len = C_SNIC_UartMsg::makePayload( req_buf_len, req_buf_p, payload_array ); + // Make all command request + command_len = C_SNIC_UartMsg::makeRequest( cmd_id, payload_array, payload_len, command_p ); + + // Set data for response + mUartCommand.setCommandID( cmd_id ); + mUartCommand.setCommandSID( cmd_sid ); + mUartCommand.setResponseBuf( response_buf_p ); + + return command_len; +} + +int C_SNICwifi::sendUart( unsigned int len, unsigned char *data ) +{ + int ret = 0; + + mUartMutex.lock(); + for( int i = 0; i < len; i++ ) + { + // Write to UART + ret = mUart_p->putc( data[i] ); + if( ret == -1 ) + { + ret = -1; + break; + } + } + mUartMutex.unlock(); + return ret; +} + +tagMEMPOOL_BLOCK_T *C_SNICwifi::getAlocCmdBuf() +{ + // Get buffer from MemoryPool + return mMemPoolPayload.alloc(); +} + +void C_SNICwifi::freeCmdBuf( tagMEMPOOL_BLOCK_T *buf_p ) +{ + mMemPoolPayload.free( buf_p ); +} + +void C_SNICwifi::uartRecvThread (void const *args_p) { + + C_SNICwifi *instance_p = C_SNICwifi::getInstance(); + if ( instance_p == NULL ) + { + printf("Socket constructor error: no wifly instance available!\r\n"); + } + + int recvdata = 0; + int i; + + /* UART recv thread main loop */ + for (;;) + { + while( instance_p->mUart_p->readable() ) + { + // Receive data from UART. + instance_p->mUartMutex.lock(); + recvdata = instance_p->mUart_p->getc(); + instance_p->mUartMutex.unlock(); + + // Check UART receiving flg + if( gUART_RCVBUF.is_receive ) + { + gUART_RCVBUF.buf[ gUART_RCVBUF.size ] = (unsigned char)recvdata; + gUART_RCVBUF.size++; + // Check received data is EOM. + if( recvdata == UART_CMD_EOM ) + { +/* + printf("[recv]\r\n"); + for( i = 0; i < gUART_RCVBUF.size; i++ ) + { + printf("%02x ", gUART_RCVBUF.buf[i]); + } + printf("\r\n"); +*/ + unsigned char command_id; + // Get payload from received data from UART. + int payload_len = C_SNIC_UartMsg::getResponsePayload( gUART_RCVBUF.size, gUART_RCVBUF.buf + , &command_id, gUART_TEMP_BUF ); +/* + printf("[payload]\r\n"); + for( i = 0; i < payload_len; i++ ) + { + printf("%02x ", gUART_TEMP_BUF[i]); + } + printf("\r\n"); +*/ + // Check scan results indication + if( (command_id == UART_CMD_ID_WIFI) || (gUART_TEMP_BUF[0] == UART_CMD_SID_WIFI_SCAN_RESULT_IND) ) + { + // Scan result indicate + instance_p->mUartCommand.scanResultIndicate( gUART_TEMP_BUF, payload_len ); + } + + // Checks in the command which is waiting. + if( instance_p->mUartCommand.isWaitingCommand(command_id, gUART_TEMP_BUF) ) + { + // Get buffer for payload data + unsigned char *payload_buf_p = instance_p->mUartCommand.getResponseBuf(); + if( payload_buf_p != NULL ) + { + memcpy( payload_buf_p, gUART_TEMP_BUF, payload_len ); + instance_p->mUartCommand.setResponseBuf( NULL ); + } + // Set status + instance_p->mUartCommand.setCommandStatus( gUART_TEMP_BUF[2] ); + // Set signal for command response wait. + instance_p->mUartCommand.signal(); + } + + gUART_RCVBUF.size = 0; + gUART_RCVBUF.is_receive = false; + } + } + else + { + // Check received data is SOM. + if( recvdata == UART_CMD_SOM ) + { + gUART_RCVBUF.size = 0; + gUART_RCVBUF.buf[ gUART_RCVBUF.size ] = (unsigned char)recvdata; + gUART_RCVBUF.size++; + gUART_RCVBUF.is_receive = true; + } + } +// Thread::yield(); + } + Thread::yield(); + } +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SNIC/SNICwifi.h Wed Mar 19 01:48:37 2014 +0000 @@ -0,0 +1,195 @@ +#ifndef _SNIC_WIFI_H_ +#define _SNIC_WIFI_H_ + +#include "mbed.h" +#include "rtos.h" +#include "RawSerial.h" + +#include "SNICwifiUartCommand.h" +//#include "CBuffer.h" + +namespace murata_wifi +{ +#define UART_REQUEST_PAYLOAD_MAX 256 + +#define MEMPOOL_BLOCK_SIZE 2048 +#define MEMPOOL_PAYLOAD_NUM 1 +typedef struct +{ + unsigned char buf[MEMPOOL_BLOCK_SIZE]; +}tagMEMPOOL_BLOCK_T; + +/** Wi-Fi security + */ +typedef enum SECURITY { + /** Securiry Open */ + e_SEC_OPEN = 0x00, + /** Securiry WEP */ + e_SEC_WEP = 0x01, + /** Securiry WPA-PSK(TKIP) */ + e_SEC_WPA_TKIP = 0x02, + /** Securiry WPA2-PSK(AES) */ + e_SEC_WPA2_AES = 0x04, + /** Securiry WPA2-PSK(TKIP/AES) */ + e_SEC_WPA2_MIXED = 0x06, + /** Securiry WPA-PSK(AES) */ + e_SEC_WPA_AES = 0x07 +}E_SECURITY; + +/** Wi-Fi Network type + */ +typedef enum NETWORK_TYPE { + /** Infrastructure */ + e_INFRA = 0, + /** Adhoc */ + e_ADHOC = 1 +}E_NETWORK_TYPE; + +/** Wi-Fi status + */ +typedef enum WIFI_STATUS { + /** Wi-Fi OFF */ + e_STATUS_OFF = 0, + /** No network */ + e_NO_NETWORK, + /** Connected to AP (STA mode) */ + e_STA_JOINED, + /** Started on AP mode */ + e_AP_STARTED +}E_WIFI_STATUS; + +/** GEN_FW_VER_GET_REQ Command */ +typedef struct +{ + unsigned char cmd_sid; + unsigned char seq; +}tagGEN_FW_VER_GET_REQ_T; + +/** SNIC_INIT_REQ */ +typedef struct +{ + unsigned char cmd_sid; + unsigned char seq; + unsigned short buf_size; +}tagSNIC_INIT_REQ_T; + +/** WIFI_ON_REQ Command */ +typedef struct +{ + unsigned char cmd_sid; + unsigned char seq; + char country[COUNTRYC_CODE_LENTH]; +}tagWIFI_ON_REQ_T; + +/** WIFI_OFF_REQ Command */ +typedef struct +{ + unsigned char cmd_sid; + unsigned char seq; +}tagWIFI_OFF_REQ_T; + +/** WIFI_DISCONNECT_REQ Command */ +typedef struct +{ + unsigned char cmd_sid; + unsigned char seq; +}tagWIFI_DISCONNECT_REQ_T; + +/** WIFI_GET_STA_RSSI_REQ Command */ +typedef struct +{ + unsigned char cmd_sid; + unsigned char seq; +}tagWIFI_GET_STA_RSSI_REQ_T; + +/** WIFI_GET_STATUS_REQ Command */ +typedef struct +{ + unsigned char cmd_sid; + unsigned char seq; + unsigned char interface; +}tagWIFI_GET_STATUS_REQ_T; + +/** WIFI_SCAN_REQ Command */ +typedef struct +{ + unsigned char cmd_sid; + unsigned char seq; + unsigned char scan_type; + unsigned char bss_type; + unsigned char bssid[BSSID_MAC_LENTH]; + unsigned char chan_list; + unsigned char ssid[SSID_MAX_LENGTH+1]; +}tagWIFI_SCAN_REQ_T; + +/** C_SNICwifi class + */ +class C_SNICwifi +{ + +public: + C_SNICwifiUartCommand mUartCommand; + + /** Get buffer for command from memory pool. + @return Pointer of buffer + */ + tagMEMPOOL_BLOCK_T *getAlocCmdBuf(); + + /** Release buffer to memory pool. + @param buf_p Pointer of buffer + */ + void freeCmdBuf( tagMEMPOOL_BLOCK_T *buf_p ); + + /** Initialize UART + */ + int initUart( PinName tx, PinName rx, int baud ); + + /** Send data to UART + @param len Length of send data + @param data Pointer of send data + @return 0:success/other:fail + */ + int sendUart( unsigned int len, unsigned char *data ); + + /** Preparation of the UART command + @param cmd_id UART Command ID + @param cmd_sid UART Command SubID + @param req_buf_p Pointer of UART request buffer + @param req_buf_len Length of UART request buffer + @param response_buf_p Pointer of UART response buffer + @param command_p Pointer of UART command[output] + @return Length of UART command. + */ + unsigned int preparationSendCommand( unsigned char cmd_id, unsigned char cmd_sid + , unsigned char *req_buf_p, unsigned int req_buf_len + , unsigned char *response_buf_p, unsigned char *command_p ); + + /** Get an instance of the C_SNICwifi class. + @return Instance of the C_SNICwifi class + @note Please do not create an instance in the default constructor this class. + Please use this method when you want to get an instance. + */ + static C_SNICwifi *getInstance(); + +protected: + static C_SNICwifi *mInstance_p; + Thread *mUartRecvThread_p; + RawSerial *mUart_p; + Mutex mUartMutex; +// DigitalInOut mModuleReset; + +private: + /** MemoryPool for payload of UART response */ + MemoryPool<tagMEMPOOL_BLOCK_T, MEMPOOL_PAYLOAD_NUM> mMemPoolPayload; + + /** Constructor + */ + C_SNICwifi(); + + /** Receiving thread of UART + */ + static void uartRecvThread( void const *args_p ); +}; +} + +#endif \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SNIC/SNICwifiUartCommand.cpp Wed Mar 19 01:48:37 2014 +0000 @@ -0,0 +1,126 @@ +#include "SNICwifiUartCommand.h" + +using namespace murata_wifi; + +void C_SNICwifiUartCommand::setCommandID( unsigned char cmd_id ) +{ + mCommandID = cmd_id; +} + +unsigned char C_SNICwifiUartCommand::getCommandID() +{ + return mCommandID; +} + +void C_SNICwifiUartCommand::setCommandSID( unsigned char cmd_sid ) +{ + mCommandSID = cmd_sid; +} + +unsigned char C_SNICwifiUartCommand::getCommandSID() +{ + return mCommandSID; +} + +void C_SNICwifiUartCommand::setCommandStatus( unsigned char status ) +{ + mCommandStatus = status; +} + +unsigned char C_SNICwifiUartCommand::getCommandStatus() +{ + return mCommandStatus; +} + +void C_SNICwifiUartCommand::setResponseBuf( unsigned char *buf_p ) +{ + mResponseBuf_p = buf_p; +} + +unsigned char *C_SNICwifiUartCommand::getResponseBuf() +{ + return mResponseBuf_p; +} + +void C_SNICwifiUartCommand::setScanResultHandler( void (*handler_p)(tagSCAN_RESULT_T *scan_result) ) +{ + mScanResultHandler_p = handler_p; +} + + +int C_SNICwifiUartCommand::wait() +{ + int ret = 0; + + // Get thread ID + mCommandThreadID = osThreadGetId(); + + // Signal flags that are reported as event are automatically cleared. + osEvent event_ret = osSignalWait( UART_COMMAND_SIGNAL, UART_COMMAND_WAIT_TIMEOUT); + if( event_ret.status != osEventSignal ) + { + ret = -1; + } + + return ret; +} + +int C_SNICwifiUartCommand::signal() +{ + // set signal + return osSignalSet(mCommandThreadID, UART_COMMAND_SIGNAL); +} + +bool C_SNICwifiUartCommand::isWaitingCommand( unsigned int command_id, unsigned char *payload_p ) +{ + bool ret = false; + + if( (command_id == getCommandID()) + && (payload_p[0] == (getCommandSID() | 0x80) ) ) + { + ret = true; + } + return ret; +} + +void C_SNICwifiUartCommand::scanResultIndicate( unsigned char *payload_p, int payload_len ) +{ + if( (payload_p == NULL) || (mScanResultHandler_p == NULL) ) + { + return; + } + + tagSCAN_RESULT_T scan_result; + int ap_count = payload_p[2]; + + if( ap_count == 0 ) + { + mScanResultHandler_p( NULL ); + } + + unsigned char *ap_info_p = &payload_p[3]; + int ap_info_idx = 0; + + for( int i = 0; i < ap_count; i++ ) + { + scan_result.channel = ap_info_p[ap_info_idx]; + ap_info_idx++; + scan_result.rssi = (signed)ap_info_p[ap_info_idx]; + ap_info_idx++; + scan_result.security= ap_info_p[ap_info_idx]; + ap_info_idx++; + memcpy( scan_result.bssid, &ap_info_p[ap_info_idx], BSSID_MAC_LENTH ); + ap_info_idx += BSSID_MAC_LENTH; + scan_result.network_type= ap_info_p[ap_info_idx]; + ap_info_idx++; + scan_result.max_rate= ap_info_p[ap_info_idx]; + ap_info_idx++; + ap_info_idx++; // reserved + strcpy( scan_result.ssid, (char *)&ap_info_p[ap_info_idx] ); + ap_info_idx += strlen( (char *)&ap_info_p[ap_info_idx] ); + ap_info_idx++; + + // Scanresult callback + mScanResultHandler_p( &scan_result ); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SNIC/SNICwifiUartCommand.h Wed Mar 19 01:48:37 2014 +0000 @@ -0,0 +1,119 @@ +#ifndef _SNIC_WIFI_UART_COMMAND_H_ +#define _SNIC_WIFI_UART_COMMAND_H_ +#include "mbed.h" +#include "rtos.h" + +namespace murata_wifi +{ +/** Max length of SSID */ +#define SSID_MAX_LENGTH 32 +/** Max length of BSSID */ +#define BSSID_MAC_LENTH 6 +/** Length of Country code */ +#define COUNTRYC_CODE_LENTH 2 + +/** Wait signal ID of UART command */ +#define UART_COMMAND_SIGNAL 0x00000001 +/** Timeout of UART command wait(ms)*/ +#define UART_COMMAND_WAIT_TIMEOUT 10000 + +/** Scan result +*/ +typedef struct { + bool is_complete; + /** Channel */ + unsigned char channel; + /** RSSI */ + signed char rssi; + /** Security type */ + unsigned char security; + /** BSSID */ + unsigned char bssid[BSSID_MAC_LENTH]; + /** Network type */ + unsigned char network_type; + /** Max data rate */ + unsigned char max_rate; + /** SSID */ + char ssid[SSID_MAX_LENGTH+1]; +}tagSCAN_RESULT_T; + +/** C_SNICwifiUartCommand class + */ +class C_SNICwifiUartCommand +{ +public: + /** Set Command ID + @param cmd_id Command ID + */ + void setCommandID( unsigned char cmd_id ); + + /** Get Command ID + @return Command ID + */ + unsigned char getCommandID(); + + /** Set Command SubID + @param cmd_sid Command Sub ID + */ + void setCommandSID( unsigned char cmd_sid ); + + /** Get Command SubID + @return Command Sub ID + */ + unsigned char getCommandSID(); + + /** Set Command status + @param status Command status + */ + void setCommandStatus( unsigned char status ); + + /** Get Command status + @return Command status + */ + unsigned char getCommandStatus(); + + /** Set Response buffer + @param buf_p Pointer of response buffer + */ + void setResponseBuf( unsigned char *buf_p ); + + /** Get Response buffer + @return Pointer of response buffer + */ + unsigned char *getResponseBuf(); + + /** Set scan result callback hander + @param handler_p Pointer of callback function + */ + void setScanResultHandler( void (*handler_p)(tagSCAN_RESULT_T *scan_result) ); + + void scanResultIndicate( unsigned char *payload_p, int payload_len ); + + /** Checks in the command which is waiting from Command ID and Sub ID. + @param command_id Command ID + @param payload_p Command payload + @return true: Waiting command / false: Not waiting command + */ + bool isWaitingCommand( unsigned int command_id, unsigned char *payload_p ); + + int wait(); + + int signal(); + +private: + /** Command request thread ID */ + osThreadId mCommandThreadID; + /** Command ID */ + unsigned char mCommandID; + /** Command SubID */ + unsigned char mCommandSID; + /** Status of command response */ + unsigned char mCommandStatus; + /** ResponseData of command response */ + unsigned char *mResponseBuf_p; + /** Scan result handler */ + void (*mScanResultHandler_p)(tagSCAN_RESULT_T *scan_result); +}; + +} +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SNIC/SNICwifi_uartmsg.cpp Wed Mar 19 01:48:37 2014 +0000 @@ -0,0 +1,129 @@ +#include "SNICwifi_uartmsg.h" + +using namespace murata_wifi; + +C_SNIC_UartMsg::C_SNIC_UartMsg() +{ +} + +unsigned short C_SNIC_UartMsg::makePayload( unsigned int cmd_len, unsigned char *cmd_p, unsigned char *payload_p ) +{ + unsigned short payload_len = 0; + int i; + + for( i = 0; i < cmd_len; i++, payload_p++, payload_len++ ) + { + /* check Escape code */ + if( ( cmd_p[i] == UART_CMD_SOM ) || ( cmd_p[i] == UART_CMD_EOM ) || ( cmd_p[i] == UART_CMD_ESC ) ) + { + /* Add ESC */ + *payload_p = UART_CMD_ESC; + payload_len++; + + payload_p++; + *payload_p = (0x80 | cmd_p[i]); + } + else + { + *payload_p = cmd_p[i]; + } + } + + return payload_len; +} + +unsigned int C_SNIC_UartMsg::makeRequest( unsigned char cmd_id,unsigned char *payload_p + , unsigned short payload_len, unsigned char *uart_command_p ) +{ + unsigned char check_sum = 0; // Check Sum + unsigned int uart_cmd_len = 0; + int i; + + // set SOM + *uart_command_p = UART_CMD_SOM; + uart_command_p++; + uart_cmd_len++; + + // set payload length L0 + *uart_command_p = (0x80 | (payload_len & 0x007f)); + check_sum += *uart_command_p; + uart_command_p++; + uart_cmd_len++; + + // set payload length L1 + *uart_command_p = (0x80 | ( (payload_len >> 7) & 0x003f)); + check_sum += *uart_command_p; + uart_command_p++; + uart_cmd_len++; + + // set Command ID + *uart_command_p = (0x80 | cmd_id); + check_sum += *uart_command_p; + uart_command_p++; + uart_cmd_len++; + + // set Payload + for( i = 0; i < payload_len; i++, uart_command_p++, uart_cmd_len++ ) + { + *uart_command_p = payload_p[i]; + check_sum += *uart_command_p; + } + + // set Check sum + *uart_command_p = (0x80 | check_sum); + uart_command_p++; + uart_cmd_len++; + + // set EOM + *uart_command_p = UART_CMD_EOM; + uart_cmd_len++; + + return uart_cmd_len; +} + +unsigned int C_SNIC_UartMsg::getResponsePayload( unsigned int recvdata_len, unsigned char *recvdata_p + , unsigned char *command_id_p, unsigned char *payload_p ) +{ + unsigned short payload_len = 0; + unsigned int response_len = 0; + unsigned char *buf = NULL; + bool isESC = false; + int i; + + // get payload length + payload_len = ( ( (recvdata_p[1] & ~0x80) & 0xff) | ( ( (recvdata_p[2] & ~0xC0) << 7) & 0xff80) ); + + // get Command ID + *command_id_p = (recvdata_p[3] & ~0x80); + + buf = &recvdata_p[4]; + + // get payload data + for( i = 0; i < payload_len; i++, buf++ ) + { + if( isESC ) + { + *payload_p = (*buf & ~0x80); + payload_p++; + response_len++; + isESC = false; + } + else + { + // Check Escape code + if( *buf == UART_CMD_ESC ) + { + isESC = true; + continue; + } + else + { + *payload_p = *buf; + payload_p++; + response_len++; + } + } + } + + return response_len; +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SNIC/SNICwifi_uartmsg.h Wed Mar 19 01:48:37 2014 +0000 @@ -0,0 +1,159 @@ +#ifndef _SNIC_WIFI_UART_MSG_H_ +#define _SNIC_WIFI_UART_MSG_H_ + +#include "mbed.h" +#include "rtos.h" +#include "RawSerial.h" + +namespace murata_wifi +{ + +#define UART_CMD_SOM 0x02 +#define UART_CMD_EOM 0x04 +#define UART_CMD_ESC 0x10 + +/* SNIC UART Command ID */ +#define UART_CMD_ID_GEN 0x01 //General command +#define UART_CMD_ID_SNIC 0x70 //SNIC command +#define UART_CMD_ID_WIFI 0x50 //Wi-Fi command + +/* SNIC UART Subcommand ID */ +#define UART_CMD_SID_GEN_PWR_UP_IND 0x00 //Power up indication +#define UART_CMD_SID_GEN_FW_VER_GET_REQ 0x08 //Get firmware version string + +#define UART_CMD_SID_SNIC_INIT_REQ 0x00 // SNIC API initialization +#define UART_CMD_SID_SNIC_CLEANUP_REQ 0x01 // SNIC API cleanup +#define UART_CMD_SID_SNIC_SEND_FROM_SOCKET_REQ 0x02 // Send from socket +#define UART_CMD_SID_SNIC_CLOSE_SOCKET_REQ 0x03 // Close socket +#define UART_CMD_SID_SNIC_ SOCKET _PARTIAL_CLOSE_ REQ 0x04 // Socket partial close +#define UART_CMD_SID_SNIC_GETSOCKOPT_REQ 0x05 // Get socket option +#define UART_CMD_SID_SNIC_SETSOCKOPT_REQ 0x06 // Set socket option +#define UART_CMD_SID_SNIC_SOCKET_GETNAME_REQ 0x07 // Get name or peer name +#define UART_CMD_SID_SNIC_SEND_ARP_REQ 0x08 // Send ARP request +#define UART_CMD_SID_SNIC_GET_DHCP_INFO_REQ 0x09 // Get DHCP info +#define UART_CMD_SID_SNIC_RESOLVE_NAME_REQ 0x0A // Resolve a host name to IP address +#define UART_CMD_SID_SNIC_IP_CONFIG_REQ 0x0B // Configure DHCP or static IP +#define UART_CMD_SID_SNIC_DATA_IND_ACK_CONFIG_REQ 0x0C // ACK configuration for data indications +#define UART_CMD_SID_SNIC_TCP_CREATE_SOCKET_REQ 0x10 // Create TCP socket +#define UART_CMD_SID_SNIC_TCP_CREATE_CONNECTION_REQ 0x11 // Create TCP connection server +#define UART_CMD_SID_SNIC_TCP_CONNECT_TO_SERVER_REQ 0x12 // Connect to TCP server +#define UART_CMD_SID_SNIC_UDP_CREATE_SOCKET_REQ 0x13 // Create UDP socket +#define UART_CMD_SID_SNIC_UDP_START_RECV_REQ 0x14 // Start UDP receive on socket +#define UART_CMD_SID_SNIC_UDP_SIMPLE_SEND_REQ 0x15 // Send UDP packet +#define UART_CMD_SID_SNIC_UDP_SEND_ FROM_SOCKET_REQ 0x16 // Send UDP packet from socket +#define UART_CMD_SID_SNIC_HTTP_REQ 0x17 // Send HTTP request +#define UART_CMD_SID_SNIC_HTTP_MORE_REQ 0x18 // Send HTTP more data request +#define UART_CMD_SID_SNIC_HTTPS_REQ 0x19 // Send HTTPS request +#define UART_CMD_SID_SNIC_TCP_CREATE_ADV_TLS_SOCKET_REQ 0x1A // Create advanced TLS TCP socket +#define UART_CMD_SID_SNIC_TCP_CREAET_SIMPLE_TLS_SOCKET_REQ 0x1B // Create simple TLS TCP socket +#define UART_CMD_SID_SNIC_TCP_CONNECTION_STATUS_IND 0x20 // Connection status indication +#define UART_CMD_SID_SNIC_TCP_CLIENT_SOCKET_IND 0x21 // TCP client socket indication +#define UART_CMD_SID_SNIC_CONNECTION_RECV_IND 0x22 // TCP or connected UDP packet received indication +#define UART_CMD_SID_SNIC_UDP_RECV_IND 0x23 // UCP packet received indication +#define UART_CMD_SID_SNIC_ARP_REPLY_IND 0x24 // ARP reply indication +#define UART_CMD_SID_SNIC_HTTP_RSP_IND 0x25 // HTTP response indication + +#define UART_CMD_SID_WIFI_ON_REQ 0x00 // Turn on Wifi +#define UART_CMD_SID_WIFI_OFF_REQ 0x01 // Turn off Wifi +#define UART_CMD_SID_WIFI_JOIN_REQ 0x02 // Associate to a network +#define UART_CMD_SID_WIFI_DISCONNECT_REQ 0x03 // Disconnect from a network +#define UART_CMD_SID_WIFI_GET_STATUS_REQ 0x04 // Get WiFi status +#define UART_CMD_SID_WIFI_SCAN_REQ 0x05 // Scan WiFi networks +#define UART_CMD_SID_WIFI_GET_STA_RSSI_REQ 0x06 // Get STA signal strength (RSSI) +#define UART_CMD_SID_WIFI_AP_CTRL_REQ 0x07 // Soft AP on-off control +#define UART_CMD_SID_WIFI_WPS_REQ 0x08 // Start WPS process +#define UART_CMD_SID_WIFI_AP_GET_CLIENT_REQ 0x0A // Get clients that are associated to the soft AP. +#define UART_CMD_SID_WIFI_NETWORK_STATUS_IND 0x10 // Network status indication +#define UART_CMD_SID_WIFI_SCAN_RESULT_IND 0x11 // Scan result indication + +/* SNIC UART Command response status code */ +#define UART_CMD_RES_SNIC_SUCCESS 0x00 +#define UART_CMD_RES_SNIC_FAIL 0x01 +#define UART_CMD_RES_SNIC_INIT_FAIL 0x02 +#define UART_CMD_RES_SNIC_CLEANUP_FAIL 0x03 +#define UART_CMD_RES_SNIC_GETADDRINFO_FAIL 0x04 +#define UART_CMD_RES_SNIC_CREATE_SOCKET_FAIL 0x05 +#define UART_CMD_RES_SNIC_BIND_SOCKET_FAIL 0x06 +#define UART_CMD_RES_SNIC_LISTEN_SOCKET_FAIL 0x07 +#define UART_CMD_RES_SNIC_ACCEPT_SOCKET_FAIL 0x08 +#define UART_CMD_RES_SNIC_PARTIAL_CLOSE_FAIL 0x09 +#define UART_CMD_RES_SNIC_SOCKET_PARTIALLY_CLOSED 0x0A +#define UART_CMD_RES_SNIC_SOCKET_CLOSED 0x0B +#define UART_CMD_RES_SNIC_CLOSE_SOCKET_FAIL 0x0C +#define UART_CMD_RES_SNIC_PACKET_TOO_LARGE 0x0D +#define UART_CMD_RES_SNIC_SEND_FAIL 0x0E +#define UART_CMD_RES_SNIC_CONNECT_TO_SERVER_FAIL 0x0F +#define UART_CMD_RES_SNIC_NOT_ENOUGH_MEMORY 0x10 +#define UART_CMD_RES_SNIC_TIMEOUT 0x11 +#define UART_CMD_RES_SNIC_CONNECTION_UP 0x12 +#define UART_CMD_RES_SNIC_GETSOCKOPT_FAIL 0x13 +#define UART_CMD_RES_SNIC_SETSOCKOPT_FAIL 0x14 +#define UART_CMD_RES_SNIC_INVALID_ARGUMENT 0x15 +#define UART_CMD_RES_SNIC_SEND_ARP_FAIL 0x16 +#define UART_CMD_RES_SNIC_INVALID_SOCKET 0x17 +#define UART_CMD_RES_SNIC_COMMAND_PENDING 0x18 +#define UART_CMD_RES_SNIC_SOCKET_NOT_BOUND 0x19 +#define UART_CMD_RES_SNIC_SOCKET_NOT_CONNECTED 0x1A +#define UART_CMD_RES_SNIC_NO_NETWORK 0x20 +#define UART_CMD_RES_SNIC_INIT_NOT_DONE 0x21 +#define UART_CMD_RES_SNIC_NET_IF_FAIL 0x22 +#define UART_CMD_RES_SNIC_NET_IF_NOT_UP 0x23 +#define UART_CMD_RES_SNIC_DHCP_START_FAIL 0x24 + +#define UART_CMD_RES_WIFI_SUCCESS 0x00 +#define UART_CMD_RES_WIFI_ERR_UNKNOWN_COUNTRY 0x01 +#define UART_CMD_RES_WIFI_ERR_INIT_FAIL 0x02 +#define UART_CMD_RES_WIFI_ERR_ALREADY_JOINED 0x03 +#define UART_CMD_RES_WIFI_ERR_AUTH_TYPE 0x04 +#define UART_CMD_RES_WIFI_ERR_JOIN_FAIL 0x05 +#define UART_CMD_RES_WIFI_ERR_NOT_JOINED 0x06 +#define UART_CMD_RES_WIFI_ERR_LEAVE_FAILED 0x07 +#define UART_CMD_RES_WIFI_COMMAND_PENDING 0x08 +#define UART_CMD_RES_WIFI_WPS_NO_CONFIG 0x09 +#define UART_CMD_RES_WIFI_NETWORK_UP 0x10 +#define UART_CMD_RES_WIFI_NETWORK_DOWN 0x11 +#define UART_CMD_RES_WIFI_FAIL 0xFF + +/** UART Command sequence number +*/ +static unsigned char mUartRequestSeq; + +/** C_SNIC_UartMsg class + */ +class C_SNIC_UartMsg +{ + +public: + C_SNIC_UartMsg(); + + /** Make SNIC UART command payload. + @param cmd_len Command length + @param cmd_p Command pointer + @param payload_p Payload pointer[output] + @return payload length + */ + static unsigned short makePayload( unsigned int cmd_len, unsigned char *cmd_p, unsigned char *payload_p ); + + /** Make SNIC UART command. + @param cmd_id Command ID + @param payload_p Payload pointer + @param uart_command_p UART Command pointer [output] + @return UART Command length + */ + static unsigned int makeRequest( unsigned char cmd_id, unsigned char *payload_p, unsigned short payload_len, unsigned char *uart_command_p ); + + + /** Get uart command from receive data. + @param recvdata_len Receive data length + @param recvdata_p Pointer of received data from UART + @param command_id_p Pointer of command ID[output] + @param payload_p Pointer of payload[output] + @return Payload length + */ + static unsigned int getResponsePayload( unsigned int recvdata_len, unsigned char *recvdata_p + , unsigned char *command_id_p, unsigned char *payload_p ); +protected: + +}; +} +#endif /* _YD_WIFI_UART_MSG_H_ */ \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SNICInterface.cpp Wed Mar 19 01:48:37 2014 +0000 @@ -0,0 +1,515 @@ +#include "SNICInterface.h" +#include "SNICwifi_uartmsg.h" + +using namespace murata_wifi; + +C_SNICInterface::C_SNICInterface( PinName tx, PinName rx, PinName cts, PinName rts, PinName reset, PinName alarm, int baud) +{ + mSNICWifi_p = C_SNICwifi::getInstance(); + + mUART_tx = tx; + mUART_rx = rx; + mUART_cts = cts; + mUART_rts = rts;; + mUART_baud = baud; + mModuleReset = reset; +} + +int C_SNICInterface::init() +{ + /* Initialize UART */ + mSNICWifi_p->initUart( mUART_tx, mUART_rx, mUART_baud ); + + /* Initialize SNIC API */ + // Get buffer for response payload from MemoryPool + tagMEMPOOL_BLOCK_T *payload_buf = mSNICWifi_p->getAlocCmdBuf(); + if( payload_buf == NULL ) + { + printf("snic_init payload_buf NULL\r\n"); + return -1; + } + + tagSNIC_INIT_REQ_T req; + // Make request + req.cmd_sid = UART_CMD_SID_SNIC_INIT_REQ; + req.seq = mUartRequestSeq++; + req.buf_size = 0x800; + + unsigned char command_array[UART_REQUEST_PAYLOAD_MAX]; + unsigned int command_len; + // Preparation of command + command_len = mSNICWifi_p->preparationSendCommand( UART_CMD_ID_SNIC, req.cmd_sid, (unsigned char *)&req + , sizeof(tagSNIC_INIT_REQ_T), payload_buf->buf, command_array ); + + // Send uart command request + mSNICWifi_p->sendUart( command_len, command_array ); + + int ret; + // Wait UART response + ret = mSNICWifi_p->mUartCommand.wait(); + if( ret != 0 ) + { + printf( "snic_init failed\r\n" ); + mSNICWifi_p->freeCmdBuf( payload_buf ); + return -1; + } + + if( mSNICWifi_p->mUartCommand.getCommandStatus() != 0 ) + { + printf("snic_init status:%02x\r\n", mSNICWifi_p->mUartCommand.getCommandStatus()); + ret = -1; + } + mSNICWifi_p->freeCmdBuf( payload_buf ); + + return ret; +} + +int C_SNICInterface::getFWVersion( unsigned char *version_p ) +{ + // Get buffer for response payload from MemoryPool + tagMEMPOOL_BLOCK_T *payload_buf = mSNICWifi_p->getAlocCmdBuf(); + if( payload_buf == NULL ) + { + printf("getFWVersion payload_buf NULL\r\n"); + return -1; + } + + tagGEN_FW_VER_GET_REQ_T req; + // Make request + req.cmd_sid = UART_CMD_SID_GEN_FW_VER_GET_REQ; + req.seq = mUartRequestSeq++; + + unsigned char command_array[UART_REQUEST_PAYLOAD_MAX]; + unsigned int command_len; + // Preparation of command + command_len = mSNICWifi_p->preparationSendCommand( UART_CMD_ID_GEN, req.cmd_sid, (unsigned char *)&req + , sizeof(tagGEN_FW_VER_GET_REQ_T), payload_buf->buf, command_array ); + + int ret; + + // Send uart command request + mSNICWifi_p->sendUart( command_len, command_array ); + + // Wait UART response + ret = mSNICWifi_p->mUartCommand.wait(); + if( ret != 0 ) + { + printf( "getFWversion failed\r\n" ); + mSNICWifi_p->freeCmdBuf( payload_buf ); + return -1; + } + + if( mSNICWifi_p->mUartCommand.getCommandStatus() == 0 ) + { + unsigned char version_len = payload_buf->buf[3]; + memcpy( version_p, &payload_buf->buf[4], version_len ); + } + mSNICWifi_p->freeCmdBuf( payload_buf ); + return 0; +} + +int C_SNICInterface::connect(const char *ssid_p, unsigned char ssid_len, E_SECURITY sec_type + , const char *sec_key_p, unsigned char sec_key_len) +{ + // Parameter check(SSID) + if( (ssid_p == NULL) || (ssid_len == 0) ) + { + printf( "connect failed [ parameter NG:SSID ]\r\n" ); + return -1; + } + + // Parameter check(Security key) + if( (sec_type != e_SEC_OPEN) && ( (sec_key_len == 0) || (sec_key_p == NULL) ) ) + { + printf( "connect failed [ parameter NG:Security key ]\r\n" ); + return -1; + } + + // Get buffer for response payload from MemoryPool + tagMEMPOOL_BLOCK_T *payload_buf = mSNICWifi_p->getAlocCmdBuf(); + if( payload_buf == NULL ) + { + printf("connect payload_buf NULL\r\n"); + return -1; + } + + unsigned char buf[UART_REQUEST_PAYLOAD_MAX]; + unsigned int buf_len = 0; + unsigned char command_array[UART_REQUEST_PAYLOAD_MAX]; + unsigned int command_len; + + memset( buf, 0, UART_REQUEST_PAYLOAD_MAX ); + // Make request + buf[0] = UART_CMD_SID_WIFI_JOIN_REQ; + buf_len++; + buf[1] = mUartRequestSeq++; + buf_len++; + // SSID + memcpy( &buf[2], ssid_p, ssid_len ); + buf_len += ssid_len; + buf_len++; + + // Security mode + buf[ buf_len ] = (unsigned char)sec_type; + buf_len++; + + // Security key + if( sec_type != e_SEC_OPEN ) + { + buf[ buf_len ] = sec_key_len; + buf_len++; + if( sec_key_len > 0 ) + { + memcpy( &buf[buf_len], sec_key_p, sec_key_len ); + buf_len += sec_key_len; + } + } + + // Preparation of command + command_len = mSNICWifi_p->preparationSendCommand( UART_CMD_ID_WIFI, UART_CMD_SID_WIFI_JOIN_REQ, buf + , buf_len, payload_buf->buf, command_array ); + + // Send uart command request + mSNICWifi_p->sendUart( command_len, command_array ); + + int ret; + // Wait UART response + ret = mSNICWifi_p->mUartCommand.wait(); + if( ret != 0 ) + { + printf( "join failed\r\n" ); + mSNICWifi_p->freeCmdBuf( payload_buf ); + return -1; + } + + if( mSNICWifi_p->mUartCommand.getCommandStatus() != 0 ) + { + printf("join status:%02x\r\n", mSNICWifi_p->mUartCommand.getCommandStatus()); + ret = -1; + } + mSNICWifi_p->freeCmdBuf( payload_buf ); + + return ret; +} + +int C_SNICInterface::disconnect() +{ + // Get buffer for response payload from MemoryPool + tagMEMPOOL_BLOCK_T *payload_buf = mSNICWifi_p->getAlocCmdBuf(); + if( payload_buf == NULL ) + { + printf("disconnect payload_buf NULL\r\n"); + return -1; + } + + tagWIFI_DISCONNECT_REQ_T req; + // Make request + req.cmd_sid = UART_CMD_SID_WIFI_DISCONNECT_REQ; + req.seq = mUartRequestSeq++; + + unsigned char command_array[UART_REQUEST_PAYLOAD_MAX]; + unsigned int command_len; + // Preparation of command + command_len = mSNICWifi_p->preparationSendCommand( UART_CMD_ID_WIFI, req.cmd_sid, (unsigned char *)&req + , sizeof(tagWIFI_DISCONNECT_REQ_T), payload_buf->buf, command_array ); + + // Send uart command request + mSNICWifi_p->sendUart( command_len, command_array ); + + int ret; + // Wait UART response + ret = mSNICWifi_p->mUartCommand.wait(); + if( ret != 0 ) + { + printf( "disconnect failed\r\n" ); + mSNICWifi_p->freeCmdBuf( payload_buf ); + return -1; + } + + if( mSNICWifi_p->mUartCommand.getCommandStatus() != 0 ) + { + printf("disconnect status:%02x\r\n", mSNICWifi_p->mUartCommand.getCommandStatus()); + ret = -1; + } + mSNICWifi_p->freeCmdBuf( payload_buf ); + return ret; +} + +int C_SNICInterface::scan( const char *ssid_p, unsigned char *bssid_p + , void (*result_handler_p)(tagSCAN_RESULT_T *scan_result) ) +{ + // Get buffer for response payload from MemoryPool + tagMEMPOOL_BLOCK_T *payload_buf = mSNICWifi_p->getAlocCmdBuf(); + if( payload_buf == NULL ) + { + printf("scan payload_buf NULL\r\n"); + return -1; + } + + tagWIFI_SCAN_REQ_T req; + unsigned int buf_len = 0; + + memset( &req, 0, sizeof(tagWIFI_SCAN_REQ_T) ); + // Make request + req.cmd_sid = UART_CMD_SID_WIFI_SCAN_REQ; + buf_len++; + req.seq = mUartRequestSeq++; + buf_len++; + + // Set scan type(Active scan) + req.scan_type = 0; + buf_len++; + // Set bss type(any) + req.bss_type = 2; + buf_len++; + // Set BSSID + if( bssid_p != NULL ) + { + memcpy( req.bssid, bssid_p, BSSID_MAC_LENTH ); + } + buf_len += BSSID_MAC_LENTH; + // Set channel list(0) + req.chan_list = 0; + buf_len++; + //Set SSID + if( ssid_p != NULL ) + { + strcpy( (char *)req.ssid, ssid_p ); + buf_len += strlen(ssid_p); + } + buf_len++; + + unsigned char command_array[UART_REQUEST_PAYLOAD_MAX]; + unsigned int command_len; + // Preparation of command + command_len = mSNICWifi_p->preparationSendCommand( UART_CMD_ID_WIFI, req.cmd_sid, (unsigned char *)&req + , buf_len, payload_buf->buf, command_array ); + + // Set scan result callback + mSNICWifi_p->mUartCommand.setScanResultHandler( result_handler_p ); + + // Send uart command request + mSNICWifi_p->sendUart( command_len, command_array ); + + int ret; + // Wait UART response + ret = mSNICWifi_p->mUartCommand.wait(); + printf( "scan wait:%d\r\n", ret ); + if( ret != 0 ) + { + printf( "scan failed\r\n" ); + mSNICWifi_p->freeCmdBuf( payload_buf ); + return -1; + } + + if( mSNICWifi_p->mUartCommand.getCommandStatus() != 0 ) + { + printf("scan status:%02x\r\n", mSNICWifi_p->mUartCommand.getCommandStatus()); + ret = -1; + } + + mSNICWifi_p->freeCmdBuf( payload_buf ); + + return ret; +} + +int C_SNICInterface::wifi_on( const char *country_p ) +{ + // Parameter check + if( country_p == NULL ) + { + printf("wifi_on parameter error\r\n"); + return -1; + } + + // Get buffer for response payload from MemoryPool + tagMEMPOOL_BLOCK_T *payload_buf = mSNICWifi_p->getAlocCmdBuf(); + if( payload_buf == NULL ) + { + printf("wifi_on payload_buf NULL\r\n"); + return -1; + } + + tagWIFI_ON_REQ_T req; + // Make request + req.cmd_sid = UART_CMD_SID_WIFI_ON_REQ; + req.seq = mUartRequestSeq++; + memcpy( req.country, country_p, COUNTRYC_CODE_LENTH ); + + unsigned char command_array[UART_REQUEST_PAYLOAD_MAX]; + unsigned int command_len; + // Preparation of command + command_len = mSNICWifi_p->preparationSendCommand( UART_CMD_ID_WIFI, req.cmd_sid, (unsigned char *)&req + , sizeof(tagWIFI_ON_REQ_T), payload_buf->buf, command_array ); + + // Send uart command request + mSNICWifi_p->sendUart( command_len, command_array ); + + int ret; + // Wait UART response + ret = mSNICWifi_p->mUartCommand.wait(); + if( ret != 0 ) + { + printf( "wifi_on failed\r\n" ); + mSNICWifi_p->freeCmdBuf( payload_buf ); + return -1; + } + + if( mSNICWifi_p->mUartCommand.getCommandStatus() != 0 ) + { + printf("wifi_on status:%02x\r\n", mSNICWifi_p->mUartCommand.getCommandStatus()); + ret = -1; + } + mSNICWifi_p->freeCmdBuf( payload_buf ); + + return ret; +} + +int C_SNICInterface::wifi_off() +{ + // Get buffer for response payload from MemoryPool + tagMEMPOOL_BLOCK_T *payload_buf = mSNICWifi_p->getAlocCmdBuf(); + if( payload_buf == NULL ) + { + printf("wifi_off payload_buf NULL\r\n"); + return -1; + } + + tagWIFI_OFF_REQ_T req; + // Make request + req.cmd_sid = UART_CMD_SID_WIFI_OFF_REQ; + req.seq = mUartRequestSeq++; + + unsigned char command_array[UART_REQUEST_PAYLOAD_MAX]; + unsigned int command_len; + // Preparation of command + command_len = mSNICWifi_p->preparationSendCommand( UART_CMD_ID_WIFI, req.cmd_sid, (unsigned char *)&req + , sizeof(tagWIFI_OFF_REQ_T), payload_buf->buf, command_array ); + + // Send uart command request + mSNICWifi_p->sendUart( command_len, command_array ); + + int ret; + // Wait UART response + ret = mSNICWifi_p->mUartCommand.wait(); + if( ret != 0 ) + { + printf( "wifi_off failed\r\n" ); + mSNICWifi_p->freeCmdBuf( payload_buf ); + return -1; + } + + if( mSNICWifi_p->mUartCommand.getCommandStatus() != 0 ) + { + printf("wifi_off status:%02x\r\n", mSNICWifi_p->mUartCommand.getCommandStatus()); + ret = -1; + } + mSNICWifi_p->freeCmdBuf( payload_buf ); + + return ret; +} + +int C_SNICInterface::getRssi( signed char *rssi_p ) +{ + if( rssi_p == NULL ) + { + printf("getRssi parameter error\r\n"); + return -1; + } + + // Get buffer for response payload from MemoryPool + tagMEMPOOL_BLOCK_T *payload_buf = mSNICWifi_p->getAlocCmdBuf(); + if( payload_buf == NULL ) + { + printf("getRssi payload_buf NULL\r\n"); + return -1; + } + + tagWIFI_GET_STA_RSSI_REQ_T req; + + // Make request + req.cmd_sid = UART_CMD_SID_WIFI_GET_STA_RSSI_REQ; + req.seq = mUartRequestSeq++; + + unsigned char command_array[UART_REQUEST_PAYLOAD_MAX]; + unsigned int command_len; + command_len = mSNICWifi_p->preparationSendCommand( UART_CMD_ID_WIFI, req.cmd_sid, (unsigned char *)&req + , sizeof(tagWIFI_GET_STA_RSSI_REQ_T), payload_buf->buf, command_array ); + + int ret; + // Send uart command request + mSNICWifi_p->sendUart( command_len, command_array ); + + // Wait UART response + ret = mSNICWifi_p->mUartCommand.wait(); + if( ret != 0 ) + { + printf( "getRssi failed\r\n" ); + mSNICWifi_p->freeCmdBuf( payload_buf ); + return -1; + } + + *rssi_p = (signed char)payload_buf->buf[2]; + + mSNICWifi_p->freeCmdBuf( payload_buf ); + return 0; +} + +int C_SNICInterface::getWifiStatus( tagWIFI_STATUS_T *status_p) +{ + if( status_p == NULL ) + { + printf("getWifiStatus parameter error\r\n"); + return -1; + } + + // Get buffer for response payload from MemoryPool + tagMEMPOOL_BLOCK_T *payload_buf = mSNICWifi_p->getAlocCmdBuf(); + if( payload_buf == NULL ) + { + printf("getWifiStatus payload_buf NULL\r\n"); + return -1; + } + + tagWIFI_GET_STATUS_REQ_T req; + // Make request + req.cmd_sid = UART_CMD_SID_WIFI_GET_STATUS_REQ; + req.seq = mUartRequestSeq++; + req.interface = 0; + + unsigned char command_array[UART_REQUEST_PAYLOAD_MAX]; + unsigned int command_len; + command_len = mSNICWifi_p->preparationSendCommand( UART_CMD_ID_WIFI, req.cmd_sid, (unsigned char *)&req + , sizeof(tagWIFI_GET_STATUS_REQ_T), payload_buf->buf, command_array ); + + // Send uart command request + mSNICWifi_p->sendUart( command_len, command_array ); + + int ret; + // Wait UART response + ret = mSNICWifi_p->mUartCommand.wait(); + if( ret != 0 ) + { + printf( "getWifiStatus failed\r\n" ); + mSNICWifi_p->freeCmdBuf( payload_buf ); + return -1; + } + + // set status + status_p->status = (E_WIFI_STATUS)payload_buf->buf[2]; + + // set Mac address + if( status_p->status != e_STATUS_OFF ) + { + memcpy( status_p->mac_address, &payload_buf->buf[3], BSSID_MAC_LENTH ); + } + + // set SSID + if( ( status_p->status == e_STA_JOINED ) == ( status_p->status == e_AP_STARTED ) ) + { + memcpy( status_p->ssid, &payload_buf->buf[9], strlen( (char *)&payload_buf->buf[9]) ); + } + + mSNICWifi_p->freeCmdBuf( payload_buf ); + return 0; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SNICInterface.h Wed Mar 19 01:48:37 2014 +0000 @@ -0,0 +1,146 @@ +#ifndef _SNIC_WIFIINTERFACE_H_ +#define _SNIC_WIFIINTERFACE_H_ + +#include "SNICwifi.h" + +namespace murata_wifi +{ + +/** C_SNICInterface class + */ +class C_SNICInterface { +public: + /** Wi-Fi status */ + typedef struct + { + /** status */ + E_WIFI_STATUS status; + /** Mac address */ + char mac_address[BSSID_MAC_LENTH]; + /** SSID */ + char ssid[SSID_MAX_LENGTH+1]; + }tagWIFI_STATUS_T; + + /** Constructor + @param tx mbed pin to use for tx line of Serial interface + @param rx mbed pin to use for rx line of Serial interface + @param cts mbed pin to use for cts line of Serial interface + @param rts mbed pin to use for rts line of Serial interface + @param reset reset pin of the wifi module + @param alarm alarm pin of the wifi module (default: NC) + @param baud baud rate of Serial interface (default: 9600) + */ + C_SNICInterface(PinName tx, PinName rx, PinName cts, PinName rts, PinName reset, PinName alarm = NC, int baud = 115200); + + /** Initialize the interface. + @return 0 on success, a negative number on failure + */ + int init(); + + /** Get Firmware version string. + @param version_p Pointer of FW version string.(null terminated)[output] + @return 0:success/other:fail + @note This function is blocked until a returns. + When you use it by UI thread, be careful. + */ + int getFWVersion( unsigned char *version_p ); + + /** Connect to AP + @param ssid_p Wi-Fi SSID(null terminated) + @param ssid_len Wi-Fi SSID length + @param sec_type Wi-Fi security type. + @param sec_key_len Wi-Fi passphrase or security key length + @param sec_key_p Wi-Fi passphrase or security key + @return 0 on success, a negative number on failure + @note This function is blocked until a returns. + When you use it by UI thread, be careful. + */ + int connect(const char *ssid_p, unsigned char ssid_len, E_SECURITY sec_type, const char *sec_key_p, unsigned char sec_key_len); + + /** Disconnect from AP + @return 0 on success, a negative number on failure + @note This function is blocked until a returns. + When you use it by UI thread, be careful. + */ + int disconnect(); + + /** Scan AP + @param ssid_p Wi-Fi SSID(null terminated) + If do not specify SSID, set to NULL. + @param bssid_p Wi-Fi BSSID(null terminated) + If do not specify SSID, set to NULL. + @param result_handler_p Pointer of scan result callback function. + @return 0 on success, a negative number on failure + @note This function is blocked until a returns. + When you use it by UI thread, be careful. + Scan results will be notified by asynchronous callback function. + If there is no continuity data, result_handler_p will be set NULL.. + */ + int scan( const char *ssid_p, unsigned char *bssid_p + ,void (*result_handler_p)(tagSCAN_RESULT_T *scan_result) ); + + /** Wi-Fi Turn on + @param country_p Pointer of country code. + @return 0 on success, a negative number on failure + @note This function is blocked until a returns. + When you use it by UI thread, be careful. + */ + int wifi_on( const char *country_p ); + + /** Wi-Fi Turn off + @return 0 on success, a negative number on failure + @note This function is blocked until a returns. + When you use it by UI thread, be careful. + */ + int wifi_off(); + + /** Get Wi-Fi RSSI + @param rssi_p Pointer of RSSI.[output] + @return 0 on success, a negative number on failure + @note This function is blocked until a returns. + When you use it by UI thread, be careful. + */ + int getRssi( signed char *rssi_p ); + + /** Get Wi-Fi status + @param status_p Pointer of status structure.[output] + @return 0 on success, a negative number on failure + @note This function is blocked until a returns. + When you use it by UI thread, be careful. + */ + int getWifiStatus( tagWIFI_STATUS_T *status_p); + +#if 0 + /** Get the MAC address of your Ethernet interface + * \return a pointer to a string containing the MAC address + */ + char* getMACAddress(); + + /** Get the IP address of your Ethernet interface + * \return a pointer to a string containing the IP address + */ + char* getIPAddress(); + + /** Get the Gateway address of your Ethernet interface + * \return a pointer to a string containing the Gateway address + */ + char* getGateway(); + + /** Get the Network mask of your Ethernet interface + * \return a pointer to a string containing the Network mask + */ + char* getNetworkMask(); +#endif + +private: + C_SNICwifi *mSNICWifi_p; + + PinName mUART_tx; + PinName mUART_rx; + PinName mUART_cts; + PinName mUART_rts; + int mUART_baud; + PinName mModuleReset; +}; +} +#endif /* _YD_WIFIINTERFACE_H_ */ \ No newline at end of file
--- a/SNICwifi/SNICwifi.cpp Tue Mar 18 02:57:24 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,191 +0,0 @@ -#include "mbed.h" -#include "SNICwifi.h" -#include "SNICwifi_uartmsg.h" -#include <string> -//#include <algorithm> - -using namespace murata_wifi; - -#define UART_RECVBUF_SIZE 2048 -typedef struct -{ - unsigned char buf[UART_RECVBUF_SIZE]; - unsigned int size; - bool is_receive; -}tagUART_RECVBUF_T; -tagUART_RECVBUF_T gUART_RCVBUF; -unsigned char gUART_TEMP_BUF[UART_RECVBUF_SIZE]; - -C_SNICwifi *C_SNICwifi::mInstance_p; - -C_SNICwifi::C_SNICwifi(PinName tx, PinName rx, PinName cts, PinName rts, PinName reset, PinName alarm, int baud): - mUart(tx, rx) -{ - mUartRecvThread_p = NULL; - mInstance_p = this; - mUartRequestSeq = 0; - - // Initialize uart - gUART_RCVBUF.is_receive = false; - gUART_RCVBUF.size = 0; - mUart.baud( 115200 ); - mUart.format(8, SerialBase::None, 1); -} - -int C_SNICwifi::initUart() -{ - // Create UART recv thread - mUartRecvThread_p = new Thread( C_SNICwifi::uartRecvThread ); - if( mUartRecvThread_p == NULL ) - { - printf("[C_SNICwifi::initUart] thread cread failed\r\n"); - return -1; - } - - return 0; -} - -unsigned int C_SNICwifi::preparationSendCommand( unsigned char cmd_id, unsigned char cmd_sid - , unsigned char *req_buf_p, unsigned int req_buf_len - , unsigned char *response_buf_p, unsigned char *command_p ) -{ - unsigned char payload_array[UART_REQUEST_PAYLOAD_MAX]; - unsigned short payload_len; - unsigned int command_len = 0; - - // Make command payload - payload_len = C_SNIC_UartMsg::makePayload( req_buf_len, req_buf_p, payload_array ); - // Make all command request - command_len = C_SNIC_UartMsg::makeRequest( cmd_id, payload_array, payload_len, command_p ); - - // Set data for response - mUartCommand.setCommandID( cmd_id ); - mUartCommand.setCommandSID( cmd_sid ); - mUartCommand.setResponseBuf( response_buf_p ); - - return command_len; -} - -int C_SNICwifi::sendUart( unsigned int len, unsigned char *data ) -{ - int ret = 0; - - mUartMutex.lock(); - for( int i = 0; i < len; i++ ) - { - // Write to UART - ret = mUart.putc( data[i] ); - if( ret == -1 ) - { - ret = -1; - break; - } - } - mUartMutex.unlock(); - return ret; -} - -tagMEMPOOL_BLOCK_T *C_SNICwifi::getAlocCmdBuf() -{ - // Get buffer from MemoryPool - return mMemPoolPayload.alloc(); -} - -void C_SNICwifi::freeCmdBuf( tagMEMPOOL_BLOCK_T *buf_p ) -{ - mMemPoolPayload.free( buf_p ); -} - -void C_SNICwifi::uartRecvThread (void const *args_p) { - - C_SNICwifi *instance_p = C_SNICwifi::getInstance(); - if ( instance_p == NULL ) - { - printf("Socket constructor error: no wifly instance available!\r\n"); - } - - int recvdata = 0; - int i; - - /* UART recv thread main loop */ - for (;;) - { - while( instance_p->mUart.readable() ) - { - // Receive data from UART. - instance_p->mUartMutex.lock(); - recvdata = instance_p->mUart.getc(); - instance_p->mUartMutex.unlock(); - - // Check UART receiving flg - if( gUART_RCVBUF.is_receive ) - { - gUART_RCVBUF.buf[ gUART_RCVBUF.size ] = (unsigned char)recvdata; - gUART_RCVBUF.size++; - // Check received data is EOM. - if( recvdata == UART_CMD_EOM ) - { -/* - printf("[recv]\r\n"); - for( i = 0; i < gUART_RCVBUF.size; i++ ) - { - printf("%02x ", gUART_RCVBUF.buf[i]); - } - printf("\r\n"); -*/ - unsigned char command_id; - // Get payload from received data from UART. - int payload_len = C_SNIC_UartMsg::getResponsePayload( gUART_RCVBUF.size, gUART_RCVBUF.buf - , &command_id, gUART_TEMP_BUF ); -/* - printf("[payload]\r\n"); - for( i = 0; i < payload_len; i++ ) - { - printf("%02x ", gUART_TEMP_BUF[i]); - } - printf("\r\n"); -*/ - // Check scan results indication - if( (command_id == UART_CMD_ID_WIFI) || (gUART_TEMP_BUF[0] == UART_CMD_SID_WIFI_SCAN_RESULT_IND) ) - { - // Scan result indicate - instance_p->mUartCommand.scanResultIndicate( gUART_TEMP_BUF, payload_len ); - } - - // Checks in the command which is waiting. - if( instance_p->mUartCommand.isWaitingCommand(command_id, gUART_TEMP_BUF) ) - { - // Get buffer for payload data - unsigned char *payload_buf_p = instance_p->mUartCommand.getResponseBuf(); - if( payload_buf_p != NULL ) - { - memcpy( payload_buf_p, gUART_TEMP_BUF, payload_len ); - instance_p->mUartCommand.setResponseBuf( NULL ); - } - // Set status - instance_p->mUartCommand.setCommandStatus( gUART_TEMP_BUF[2] ); - // Set signal for command response wait. - instance_p->mUartCommand.signal(); - } - - gUART_RCVBUF.size = 0; - gUART_RCVBUF.is_receive = false; - } - } - else - { - // Check received data is SOM. - if( recvdata == UART_CMD_SOM ) - { - gUART_RCVBUF.size = 0; - gUART_RCVBUF.buf[ gUART_RCVBUF.size ] = (unsigned char)recvdata; - gUART_RCVBUF.size++; - gUART_RCVBUF.is_receive = true; - } - } -// Thread::yield(); - } - Thread::yield(); - } -} -
--- a/SNICwifi/SNICwifi.h Tue Mar 18 02:57:24 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,199 +0,0 @@ -#ifndef _SNIC_WIFI_H_ -#define _SNIC_WIFI_H_ - -#include "mbed.h" -#include "rtos.h" -#include "RawSerial.h" - -#include "SNICwifiUartCommand.h" -//#include "CBuffer.h" - -namespace murata_wifi -{ -#define UART_REQUEST_PAYLOAD_MAX 256 - -#define MEMPOOL_BLOCK_SIZE 2048 -#define MEMPOOL_PAYLOAD_NUM 1 -typedef struct -{ - unsigned char buf[MEMPOOL_BLOCK_SIZE]; -}tagMEMPOOL_BLOCK_T; - -/** C_SNICwifi class - */ -class C_SNICwifi -{ - -public: - /** Wi-Fi security - */ - typedef enum SECURITY { - /** Securiry Open */ - e_SEC_OPEN = 0x00, - /** Securiry WEP */ - e_SEC_WEP = 0x01, - /** Securiry WPA-PSK(TKIP) */ - e_SEC_WPA_TKIP = 0x02, - /** Securiry WPA2-PSK(AES) */ - e_SEC_WPA2_AES = 0x04, - /** Securiry WPA2-PSK(TKIP/AES) */ - e_SEC_WPA2_MIXED = 0x06, - /** Securiry WPA-PSK(AES) */ - e_SEC_WPA_AES = 0x07 - }E_SECURITY; - - /** Wi-Fi Network type - */ - typedef enum NETWORK_TYPE { - /** Infrastructure */ - e_INFRA = 0, - /** Adhoc */ - e_ADHOC = 1 - }E_NETWORK_TYPE; - - /** Wi-Fi status - */ - typedef enum WIFI_STATUS { - /** Wi-Fi OFF */ - e_STATUS_OFF = 0, - /** No network */ - e_NO_NETWORK, - /** Connected to AP (STA mode) */ - e_STA_JOINED, - /** Started on AP mode */ - e_AP_STARTED - }E_WIFI_STATUS; - - /** Get buffer for command from memory pool. - @return Pointer of buffer - */ - tagMEMPOOL_BLOCK_T *getAlocCmdBuf(); - - /** Release buffer to memory pool. - @param buf_p Pointer of buffer - */ - void freeCmdBuf( tagMEMPOOL_BLOCK_T *buf_p ); - - /** Preparation of the UART command - @param cmd_id UART Command ID - @param cmd_sid UART Command SubID - @param req_buf_p Pointer of UART request buffer - @param req_buf_len Length of UART request buffer - @param response_buf_p Pointer of UART response buffer - @param command_p Pointer of UART command[output] - @return Length of UART command. - */ - unsigned int preparationSendCommand( unsigned char cmd_id, unsigned char cmd_sid - , unsigned char *req_buf_p, unsigned int req_buf_len - , unsigned char *response_buf_p, unsigned char *command_p ); - -protected: - /** GEN_FW_VER_GET_REQ Command */ - typedef struct - { - unsigned char cmd_sid; - unsigned char seq; - }tagGEN_FW_VER_GET_REQ_T; - - /** SNIC_INIT_REQ */ - typedef struct - { - unsigned char cmd_sid; - unsigned char seq; - unsigned short buf_size; - }tagSNIC_INIT_REQ_T; - - /** WIFI_ON_REQ Command */ - typedef struct - { - unsigned char cmd_sid; - unsigned char seq; - char country[COUNTRYC_CODE_LENTH]; - }tagWIFI_ON_REQ_T; - - /** WIFI_OFF_REQ Command */ - typedef struct - { - unsigned char cmd_sid; - unsigned char seq; - }tagWIFI_OFF_REQ_T; - - /** WIFI_DISCONNECT_REQ Command */ - typedef struct - { - unsigned char cmd_sid; - unsigned char seq; - }tagWIFI_DISCONNECT_REQ_T; - - /** WIFI_GET_STA_RSSI_REQ Command */ - typedef struct - { - unsigned char cmd_sid; - unsigned char seq; - }tagWIFI_GET_STA_RSSI_REQ_T; - - /** WIFI_GET_STATUS_REQ Command */ - typedef struct - { - unsigned char cmd_sid; - unsigned char seq; - unsigned char interface; - }tagWIFI_GET_STATUS_REQ_T; - - /** WIFI_SCAN_REQ Command */ - typedef struct - { - unsigned char cmd_sid; - unsigned char seq; - unsigned char scan_type; - unsigned char bss_type; - unsigned char bssid[BSSID_MAC_LENTH]; - unsigned char chan_list; - unsigned char ssid[SSID_MAX_LENGTH+1]; - }tagWIFI_SCAN_REQ_T; - - static C_SNICwifi *mInstance_p; - Thread *mUartRecvThread_p; - Mutex mUartMutex; -// DigitalInOut mModuleReset; - C_SNICwifiUartCommand mUartCommand; - RawSerial mUart; - - /** Constructor - * \param tx mbed pin to use for tx line of Serial interface - * \param rx mbed pin to use for rx line of Serial interface - * \param cts mbed pin to use for cts line of Serial interface - * \param rts mbed pin to use for rts line of Serial interface - * \param reset reset pin of the wifi module - * \param alarm alarm pin of the wifi module - * \param baud baud rate of Serial interface - */ - C_SNICwifi (PinName tx, PinName rx, PinName cts, PinName rts, PinName reset, PinName alarm, int baud); - - /** Initialize UART - */ - int initUart(); - - static C_SNICwifi * getInstance() { - return mInstance_p; - }; - - /** Send data to UART - @param len Length of send data - @param data Pointer of send data - @return 0:success/other:fail - */ - int sendUart( unsigned int len, unsigned char *data ); - - /** Receiving thread of UART - */ - static void uartRecvThread( void const *args_p ); - -private: - /** MemoryPool for payload of UART response */ - MemoryPool<tagMEMPOOL_BLOCK_T, MEMPOOL_PAYLOAD_NUM> mMemPoolPayload; - -}; -} - -#endif \ No newline at end of file
--- a/SNICwifi/SNICwifiUartCommand.cpp Tue Mar 18 02:57:24 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,126 +0,0 @@ -#include "SNICwifiUartCommand.h" - -using namespace murata_wifi; - -void C_SNICwifiUartCommand::setCommandID( unsigned char cmd_id ) -{ - mCommandID = cmd_id; -} - -unsigned char C_SNICwifiUartCommand::getCommandID() -{ - return mCommandID; -} - -void C_SNICwifiUartCommand::setCommandSID( unsigned char cmd_sid ) -{ - mCommandSID = cmd_sid; -} - -unsigned char C_SNICwifiUartCommand::getCommandSID() -{ - return mCommandSID; -} - -void C_SNICwifiUartCommand::setCommandStatus( unsigned char status ) -{ - mCommandStatus = status; -} - -unsigned char C_SNICwifiUartCommand::getCommandStatus() -{ - return mCommandStatus; -} - -void C_SNICwifiUartCommand::setResponseBuf( unsigned char *buf_p ) -{ - mResponseBuf_p = buf_p; -} - -unsigned char *C_SNICwifiUartCommand::getResponseBuf() -{ - return mResponseBuf_p; -} - -void C_SNICwifiUartCommand::setScanResultHandler( void (*handler_p)(tagSCAN_RESULT_T *scan_result) ) -{ - mScanResultHandler_p = handler_p; -} - - -int C_SNICwifiUartCommand::wait() -{ - int ret = 0; - - // Get thread ID - mCommandThreadID = osThreadGetId(); - - // Signal flags that are reported as event are automatically cleared. - osEvent event_ret = osSignalWait( UART_COMMAND_SIGNAL, UART_COMMAND_WAIT_TIMEOUT); - if( event_ret.status != osEventSignal ) - { - ret = -1; - } - - return ret; -} - -int C_SNICwifiUartCommand::signal() -{ - // set signal - return osSignalSet(mCommandThreadID, UART_COMMAND_SIGNAL); -} - -bool C_SNICwifiUartCommand::isWaitingCommand( unsigned int command_id, unsigned char *payload_p ) -{ - bool ret = false; - - if( (command_id == getCommandID()) - && (payload_p[0] == (getCommandSID() | 0x80) ) ) - { - ret = true; - } - return ret; -} - -void C_SNICwifiUartCommand::scanResultIndicate( unsigned char *payload_p, int payload_len ) -{ - if( (payload_p == NULL) || (mScanResultHandler_p == NULL) ) - { - return; - } - - tagSCAN_RESULT_T scan_result; - int ap_count = payload_p[2]; - - if( ap_count == 0 ) - { - mScanResultHandler_p( NULL ); - } - - unsigned char *ap_info_p = &payload_p[3]; - int ap_info_idx = 0; - - for( int i = 0; i < ap_count; i++ ) - { - scan_result.channel = ap_info_p[ap_info_idx]; - ap_info_idx++; - scan_result.rssi = (signed)ap_info_p[ap_info_idx]; - ap_info_idx++; - scan_result.security= ap_info_p[ap_info_idx]; - ap_info_idx++; - memcpy( scan_result.bssid, &ap_info_p[ap_info_idx], BSSID_MAC_LENTH ); - ap_info_idx += BSSID_MAC_LENTH; - scan_result.network_type= ap_info_p[ap_info_idx]; - ap_info_idx++; - scan_result.max_rate= ap_info_p[ap_info_idx]; - ap_info_idx++; - ap_info_idx++; // reserved - strcpy( scan_result.ssid, (char *)&ap_info_p[ap_info_idx] ); - ap_info_idx += strlen( (char *)&ap_info_p[ap_info_idx] ); - ap_info_idx++; - - // Scanresult callback - mScanResultHandler_p( &scan_result ); - } -}
--- a/SNICwifi/SNICwifiUartCommand.h Tue Mar 18 02:57:24 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,119 +0,0 @@ -#ifndef _SNIC_WIFI_UART_COMMAND_H_ -#define _SNIC_WIFI_UART_COMMAND_H_ -#include "mbed.h" -#include "rtos.h" - -namespace murata_wifi -{ -/** Max length of SSID */ -#define SSID_MAX_LENGTH 32 -/** Max length of BSSID */ -#define BSSID_MAC_LENTH 6 -/** Length of Country code */ -#define COUNTRYC_CODE_LENTH 2 - -/** Wait signal ID of UART command */ -#define UART_COMMAND_SIGNAL 0x00000001 -/** Timeout of UART command wait(ms)*/ -#define UART_COMMAND_WAIT_TIMEOUT 10000 - -/** Scan result -*/ -typedef struct { - bool is_complete; - /** Channel */ - unsigned char channel; - /** RSSI */ - signed char rssi; - /** Security type */ - unsigned char security; - /** BSSID */ - unsigned char bssid[BSSID_MAC_LENTH]; - /** Network type */ - unsigned char network_type; - /** Max data rate */ - unsigned char max_rate; - /** SSID */ - char ssid[SSID_MAX_LENGTH+1]; -}tagSCAN_RESULT_T; - -/** C_SNICwifiUartCommand class - */ -class C_SNICwifiUartCommand -{ -public: - /** Set Command ID - @param cmd_id Command ID - */ - void setCommandID( unsigned char cmd_id ); - - /** Get Command ID - @return Command ID - */ - unsigned char getCommandID(); - - /** Set Command SubID - @param cmd_sid Command Sub ID - */ - void setCommandSID( unsigned char cmd_sid ); - - /** Get Command SubID - @return Command Sub ID - */ - unsigned char getCommandSID(); - - /** Set Command status - @param status Command status - */ - void setCommandStatus( unsigned char status ); - - /** Get Command status - @return Command status - */ - unsigned char getCommandStatus(); - - /** Set Response buffer - @param buf_p Pointer of response buffer - */ - void setResponseBuf( unsigned char *buf_p ); - - /** Get Response buffer - @return Pointer of response buffer - */ - unsigned char *getResponseBuf(); - - /** Set scan result callback hander - @param handler_p Pointer of callback function - */ - void setScanResultHandler( void (*handler_p)(tagSCAN_RESULT_T *scan_result) ); - - void scanResultIndicate( unsigned char *payload_p, int payload_len ); - - /** Checks in the command which is waiting from Command ID and Sub ID. - @param command_id Command ID - @param payload_p Command payload - @return true: Waiting command / false: Not waiting command - */ - bool isWaitingCommand( unsigned int command_id, unsigned char *payload_p ); - - int wait(); - - int signal(); - -protected: - /** Command request thread ID */ - osThreadId mCommandThreadID; - /** Command ID */ - unsigned char mCommandID; - /** Command SubID */ - unsigned char mCommandSID; - /** Status of command response */ - unsigned char mCommandStatus; - /** ResponseData of command response */ - unsigned char *mResponseBuf_p; - /** Scan result handler */ - void (*mScanResultHandler_p)(tagSCAN_RESULT_T *scan_result); -}; - -} -#endif
--- a/SNICwifi/SNICwifi_uartmsg.cpp Tue Mar 18 02:57:24 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,129 +0,0 @@ -#include "SNICwifi_uartmsg.h" - -using namespace murata_wifi; - -C_SNIC_UartMsg::C_SNIC_UartMsg() -{ -} - -unsigned short C_SNIC_UartMsg::makePayload( unsigned int cmd_len, unsigned char *cmd_p, unsigned char *payload_p ) -{ - unsigned short payload_len = 0; - int i; - - for( i = 0; i < cmd_len; i++, payload_p++, payload_len++ ) - { - /* check Escape code */ - if( ( cmd_p[i] == UART_CMD_SOM ) || ( cmd_p[i] == UART_CMD_EOM ) || ( cmd_p[i] == UART_CMD_ESC ) ) - { - /* Add ESC */ - *payload_p = UART_CMD_ESC; - payload_len++; - - payload_p++; - *payload_p = (0x80 | cmd_p[i]); - } - else - { - *payload_p = cmd_p[i]; - } - } - - return payload_len; -} - -unsigned int C_SNIC_UartMsg::makeRequest( unsigned char cmd_id,unsigned char *payload_p - , unsigned short payload_len, unsigned char *uart_command_p ) -{ - unsigned char check_sum = 0; // Check Sum - unsigned int uart_cmd_len = 0; - int i; - - // set SOM - *uart_command_p = UART_CMD_SOM; - uart_command_p++; - uart_cmd_len++; - - // set payload length L0 - *uart_command_p = (0x80 | (payload_len & 0x007f)); - check_sum += *uart_command_p; - uart_command_p++; - uart_cmd_len++; - - // set payload length L1 - *uart_command_p = (0x80 | ( (payload_len >> 7) & 0x003f)); - check_sum += *uart_command_p; - uart_command_p++; - uart_cmd_len++; - - // set Command ID - *uart_command_p = (0x80 | cmd_id); - check_sum += *uart_command_p; - uart_command_p++; - uart_cmd_len++; - - // set Payload - for( i = 0; i < payload_len; i++, uart_command_p++, uart_cmd_len++ ) - { - *uart_command_p = payload_p[i]; - check_sum += *uart_command_p; - } - - // set Check sum - *uart_command_p = (0x80 | check_sum); - uart_command_p++; - uart_cmd_len++; - - // set EOM - *uart_command_p = UART_CMD_EOM; - uart_cmd_len++; - - return uart_cmd_len; -} - -unsigned int C_SNIC_UartMsg::getResponsePayload( unsigned int recvdata_len, unsigned char *recvdata_p - , unsigned char *command_id_p, unsigned char *payload_p ) -{ - unsigned short payload_len = 0; - unsigned int response_len = 0; - unsigned char *buf = NULL; - bool isESC = false; - int i; - - // get payload length - payload_len = ( ( (recvdata_p[1] & ~0x80) & 0xff) | ( ( (recvdata_p[2] & ~0xC0) << 7) & 0xff80) ); - - // get Command ID - *command_id_p = (recvdata_p[3] & ~0x80); - - buf = &recvdata_p[4]; - - // get payload data - for( i = 0; i < payload_len; i++, buf++ ) - { - if( isESC ) - { - *payload_p = (*buf & ~0x80); - payload_p++; - response_len++; - isESC = false; - } - else - { - // Check Escape code - if( *buf == UART_CMD_ESC ) - { - isESC = true; - continue; - } - else - { - *payload_p = *buf; - payload_p++; - response_len++; - } - } - } - - return response_len; -} \ No newline at end of file
--- a/SNICwifi/SNICwifi_uartmsg.h Tue Mar 18 02:57:24 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,159 +0,0 @@ -#ifndef _SNIC_WIFI_UART_MSG_H_ -#define _SNIC_WIFI_UART_MSG_H_ - -#include "mbed.h" -#include "rtos.h" -#include "RawSerial.h" - -namespace murata_wifi -{ - -#define UART_CMD_SOM 0x02 -#define UART_CMD_EOM 0x04 -#define UART_CMD_ESC 0x10 - -/* SNIC UART Command ID */ -#define UART_CMD_ID_GEN 0x01 //General command -#define UART_CMD_ID_SNIC 0x70 //SNIC command -#define UART_CMD_ID_WIFI 0x50 //Wi-Fi command - -/* SNIC UART Subcommand ID */ -#define UART_CMD_SID_GEN_PWR_UP_IND 0x00 //Power up indication -#define UART_CMD_SID_GEN_FW_VER_GET_REQ 0x08 //Get firmware version string - -#define UART_CMD_SID_SNIC_INIT_REQ 0x00 // SNIC API initialization -#define UART_CMD_SID_SNIC_CLEANUP_REQ 0x01 // SNIC API cleanup -#define UART_CMD_SID_SNIC_SEND_FROM_SOCKET_REQ 0x02 // Send from socket -#define UART_CMD_SID_SNIC_CLOSE_SOCKET_REQ 0x03 // Close socket -#define UART_CMD_SID_SNIC_ SOCKET _PARTIAL_CLOSE_ REQ 0x04 // Socket partial close -#define UART_CMD_SID_SNIC_GETSOCKOPT_REQ 0x05 // Get socket option -#define UART_CMD_SID_SNIC_SETSOCKOPT_REQ 0x06 // Set socket option -#define UART_CMD_SID_SNIC_SOCKET_GETNAME_REQ 0x07 // Get name or peer name -#define UART_CMD_SID_SNIC_SEND_ARP_REQ 0x08 // Send ARP request -#define UART_CMD_SID_SNIC_GET_DHCP_INFO_REQ 0x09 // Get DHCP info -#define UART_CMD_SID_SNIC_RESOLVE_NAME_REQ 0x0A // Resolve a host name to IP address -#define UART_CMD_SID_SNIC_IP_CONFIG_REQ 0x0B // Configure DHCP or static IP -#define UART_CMD_SID_SNIC_DATA_IND_ACK_CONFIG_REQ 0x0C // ACK configuration for data indications -#define UART_CMD_SID_SNIC_TCP_CREATE_SOCKET_REQ 0x10 // Create TCP socket -#define UART_CMD_SID_SNIC_TCP_CREATE_CONNECTION_REQ 0x11 // Create TCP connection server -#define UART_CMD_SID_SNIC_TCP_CONNECT_TO_SERVER_REQ 0x12 // Connect to TCP server -#define UART_CMD_SID_SNIC_UDP_CREATE_SOCKET_REQ 0x13 // Create UDP socket -#define UART_CMD_SID_SNIC_UDP_START_RECV_REQ 0x14 // Start UDP receive on socket -#define UART_CMD_SID_SNIC_UDP_SIMPLE_SEND_REQ 0x15 // Send UDP packet -#define UART_CMD_SID_SNIC_UDP_SEND_ FROM_SOCKET_REQ 0x16 // Send UDP packet from socket -#define UART_CMD_SID_SNIC_HTTP_REQ 0x17 // Send HTTP request -#define UART_CMD_SID_SNIC_HTTP_MORE_REQ 0x18 // Send HTTP more data request -#define UART_CMD_SID_SNIC_HTTPS_REQ 0x19 // Send HTTPS request -#define UART_CMD_SID_SNIC_TCP_CREATE_ADV_TLS_SOCKET_REQ 0x1A // Create advanced TLS TCP socket -#define UART_CMD_SID_SNIC_TCP_CREAET_SIMPLE_TLS_SOCKET_REQ 0x1B // Create simple TLS TCP socket -#define UART_CMD_SID_SNIC_TCP_CONNECTION_STATUS_IND 0x20 // Connection status indication -#define UART_CMD_SID_SNIC_TCP_CLIENT_SOCKET_IND 0x21 // TCP client socket indication -#define UART_CMD_SID_SNIC_CONNECTION_RECV_IND 0x22 // TCP or connected UDP packet received indication -#define UART_CMD_SID_SNIC_UDP_RECV_IND 0x23 // UCP packet received indication -#define UART_CMD_SID_SNIC_ARP_REPLY_IND 0x24 // ARP reply indication -#define UART_CMD_SID_SNIC_HTTP_RSP_IND 0x25 // HTTP response indication - -#define UART_CMD_SID_WIFI_ON_REQ 0x00 // Turn on Wifi -#define UART_CMD_SID_WIFI_OFF_REQ 0x01 // Turn off Wifi -#define UART_CMD_SID_WIFI_JOIN_REQ 0x02 // Associate to a network -#define UART_CMD_SID_WIFI_DISCONNECT_REQ 0x03 // Disconnect from a network -#define UART_CMD_SID_WIFI_GET_STATUS_REQ 0x04 // Get WiFi status -#define UART_CMD_SID_WIFI_SCAN_REQ 0x05 // Scan WiFi networks -#define UART_CMD_SID_WIFI_GET_STA_RSSI_REQ 0x06 // Get STA signal strength (RSSI) -#define UART_CMD_SID_WIFI_AP_CTRL_REQ 0x07 // Soft AP on-off control -#define UART_CMD_SID_WIFI_WPS_REQ 0x08 // Start WPS process -#define UART_CMD_SID_WIFI_AP_GET_CLIENT_REQ 0x0A // Get clients that are associated to the soft AP. -#define UART_CMD_SID_WIFI_NETWORK_STATUS_IND 0x10 // Network status indication -#define UART_CMD_SID_WIFI_SCAN_RESULT_IND 0x11 // Scan result indication - -/* SNIC UART Command response status code */ -#define UART_CMD_RES_SNIC_SUCCESS 0x00 -#define UART_CMD_RES_SNIC_FAIL 0x01 -#define UART_CMD_RES_SNIC_INIT_FAIL 0x02 -#define UART_CMD_RES_SNIC_CLEANUP_FAIL 0x03 -#define UART_CMD_RES_SNIC_GETADDRINFO_FAIL 0x04 -#define UART_CMD_RES_SNIC_CREATE_SOCKET_FAIL 0x05 -#define UART_CMD_RES_SNIC_BIND_SOCKET_FAIL 0x06 -#define UART_CMD_RES_SNIC_LISTEN_SOCKET_FAIL 0x07 -#define UART_CMD_RES_SNIC_ACCEPT_SOCKET_FAIL 0x08 -#define UART_CMD_RES_SNIC_PARTIAL_CLOSE_FAIL 0x09 -#define UART_CMD_RES_SNIC_SOCKET_PARTIALLY_CLOSED 0x0A -#define UART_CMD_RES_SNIC_SOCKET_CLOSED 0x0B -#define UART_CMD_RES_SNIC_CLOSE_SOCKET_FAIL 0x0C -#define UART_CMD_RES_SNIC_PACKET_TOO_LARGE 0x0D -#define UART_CMD_RES_SNIC_SEND_FAIL 0x0E -#define UART_CMD_RES_SNIC_CONNECT_TO_SERVER_FAIL 0x0F -#define UART_CMD_RES_SNIC_NOT_ENOUGH_MEMORY 0x10 -#define UART_CMD_RES_SNIC_TIMEOUT 0x11 -#define UART_CMD_RES_SNIC_CONNECTION_UP 0x12 -#define UART_CMD_RES_SNIC_GETSOCKOPT_FAIL 0x13 -#define UART_CMD_RES_SNIC_SETSOCKOPT_FAIL 0x14 -#define UART_CMD_RES_SNIC_INVALID_ARGUMENT 0x15 -#define UART_CMD_RES_SNIC_SEND_ARP_FAIL 0x16 -#define UART_CMD_RES_SNIC_INVALID_SOCKET 0x17 -#define UART_CMD_RES_SNIC_COMMAND_PENDING 0x18 -#define UART_CMD_RES_SNIC_SOCKET_NOT_BOUND 0x19 -#define UART_CMD_RES_SNIC_SOCKET_NOT_CONNECTED 0x1A -#define UART_CMD_RES_SNIC_NO_NETWORK 0x20 -#define UART_CMD_RES_SNIC_INIT_NOT_DONE 0x21 -#define UART_CMD_RES_SNIC_NET_IF_FAIL 0x22 -#define UART_CMD_RES_SNIC_NET_IF_NOT_UP 0x23 -#define UART_CMD_RES_SNIC_DHCP_START_FAIL 0x24 - -#define UART_CMD_RES_WIFI_SUCCESS 0x00 -#define UART_CMD_RES_WIFI_ERR_UNKNOWN_COUNTRY 0x01 -#define UART_CMD_RES_WIFI_ERR_INIT_FAIL 0x02 -#define UART_CMD_RES_WIFI_ERR_ALREADY_JOINED 0x03 -#define UART_CMD_RES_WIFI_ERR_AUTH_TYPE 0x04 -#define UART_CMD_RES_WIFI_ERR_JOIN_FAIL 0x05 -#define UART_CMD_RES_WIFI_ERR_NOT_JOINED 0x06 -#define UART_CMD_RES_WIFI_ERR_LEAVE_FAILED 0x07 -#define UART_CMD_RES_WIFI_COMMAND_PENDING 0x08 -#define UART_CMD_RES_WIFI_WPS_NO_CONFIG 0x09 -#define UART_CMD_RES_WIFI_NETWORK_UP 0x10 -#define UART_CMD_RES_WIFI_NETWORK_DOWN 0x11 -#define UART_CMD_RES_WIFI_FAIL 0xFF - -/** UART Command sequence number -*/ -static unsigned char mUartRequestSeq; - -/** C_SNIC_UartMsg class - */ -class C_SNIC_UartMsg -{ - -public: - C_SNIC_UartMsg(); - - /** Make SNIC UART command payload. - @param cmd_len Command length - @param cmd_p Command pointer - @param payload_p Payload pointer[output] - @return payload length - */ - static unsigned short makePayload( unsigned int cmd_len, unsigned char *cmd_p, unsigned char *payload_p ); - - /** Make SNIC UART command. - @param cmd_id Command ID - @param payload_p Payload pointer - @param uart_command_p UART Command pointer [output] - @return UART Command length - */ - static unsigned int makeRequest( unsigned char cmd_id, unsigned char *payload_p, unsigned short payload_len, unsigned char *uart_command_p ); - - - /** Get uart command from receive data. - @param recvdata_len Receive data length - @param recvdata_p Pointer of received data from UART - @param command_id_p Pointer of command ID[output] - @param payload_p Pointer of payload[output] - @return Payload length - */ - static unsigned int getResponsePayload( unsigned int recvdata_len, unsigned char *recvdata_p - , unsigned char *command_id_p, unsigned char *payload_p ); -protected: - -}; -} -#endif /* _YD_WIFI_UART_MSG_H_ */ \ No newline at end of file
--- a/SNICwifiInterface.cpp Tue Mar 18 02:57:24 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,508 +0,0 @@ -#include "SNICwifiInterface.h" -#include "SNICwifi_uartmsg.h" - -using namespace murata_wifi; - -C_SNICwifiInterface::C_SNICwifiInterface( PinName tx, PinName rx, PinName cts, PinName rts, PinName reset, PinName alarm, int baud): - C_SNICwifi(tx, rx, cts, rts, reset, alarm, baud) -{ -} - -int C_SNICwifiInterface::init() -{ - /* Initialize UART */ - initUart(); - - /* Initialize SNIC API */ - // Get buffer for response payload from MemoryPool - tagMEMPOOL_BLOCK_T *payload_buf = getAlocCmdBuf(); - if( payload_buf == NULL ) - { - printf("snic_init payload_buf NULL\r\n"); - return -1; - } - - tagSNIC_INIT_REQ_T req; - // Make request - req.cmd_sid = UART_CMD_SID_SNIC_INIT_REQ; - req.seq = mUartRequestSeq++; - req.buf_size = 0x800; - - unsigned char command_array[UART_REQUEST_PAYLOAD_MAX]; - unsigned int command_len; - // Preparation of command - command_len = preparationSendCommand( UART_CMD_ID_SNIC, req.cmd_sid, (unsigned char *)&req - , sizeof(tagSNIC_INIT_REQ_T), payload_buf->buf, command_array ); - - // Send uart command request - sendUart( command_len, command_array ); - - int ret; - // Wait UART response - ret = mUartCommand.wait(); - if( ret != 0 ) - { - printf( "snic_init failed\r\n" ); - freeCmdBuf( payload_buf ); - return -1; - } - - if( mUartCommand.getCommandStatus() != 0 ) - { - printf("snic_init status:%02x\r\n", mUartCommand.getCommandStatus()); - ret = -1; - } - freeCmdBuf( payload_buf ); - - return ret; -} - -int C_SNICwifiInterface::getFWVersion( unsigned char *version_p ) -{ - // Get buffer for response payload from MemoryPool - tagMEMPOOL_BLOCK_T *payload_buf = getAlocCmdBuf(); - if( payload_buf == NULL ) - { - printf("getFWVersion payload_buf NULL\r\n"); - return -1; - } - - tagGEN_FW_VER_GET_REQ_T req; - // Make request - req.cmd_sid = UART_CMD_SID_GEN_FW_VER_GET_REQ; - req.seq = mUartRequestSeq++; - - unsigned char command_array[UART_REQUEST_PAYLOAD_MAX]; - unsigned int command_len; - // Preparation of command - command_len = preparationSendCommand( UART_CMD_ID_GEN, req.cmd_sid, (unsigned char *)&req - , sizeof(tagGEN_FW_VER_GET_REQ_T), payload_buf->buf, command_array ); - - int ret; - - // Send uart command request - sendUart( command_len, command_array ); - - // Wait UART response - ret = mUartCommand.wait(); - if( ret != 0 ) - { - printf( "getFWversion failed\r\n" ); - freeCmdBuf( payload_buf ); - return -1; - } - - if( mUartCommand.getCommandStatus() == 0 ) - { - unsigned char version_len = payload_buf->buf[3]; - memcpy( version_p, &payload_buf->buf[4], version_len ); - } - freeCmdBuf( payload_buf ); - return 0; -} - -int C_SNICwifiInterface::connect(const char *ssid_p, unsigned char ssid_len, E_SECURITY sec_type - , const char *sec_key_p, unsigned char sec_key_len) -{ - // Parameter check(SSID) - if( (ssid_p == NULL) || (ssid_len == 0) ) - { - printf( "connect failed [ parameter NG:SSID ]\r\n" ); - return -1; - } - - // Parameter check(Security key) - if( (sec_type != e_SEC_OPEN) && ( (sec_key_len == 0) || (sec_key_p == NULL) ) ) - { - printf( "connect failed [ parameter NG:Security key ]\r\n" ); - return -1; - } - - // Get buffer for response payload from MemoryPool - tagMEMPOOL_BLOCK_T *payload_buf = getAlocCmdBuf(); - if( payload_buf == NULL ) - { - printf("connect payload_buf NULL\r\n"); - return -1; - } - - unsigned char buf[UART_REQUEST_PAYLOAD_MAX]; - unsigned int buf_len = 0; - unsigned char command_array[UART_REQUEST_PAYLOAD_MAX]; - unsigned int command_len; - - memset( buf, 0, UART_REQUEST_PAYLOAD_MAX ); - // Make request - buf[0] = UART_CMD_SID_WIFI_JOIN_REQ; - buf_len++; - buf[1] = mUartRequestSeq++; - buf_len++; - // SSID - memcpy( &buf[2], ssid_p, ssid_len ); - buf_len += ssid_len; - buf_len++; - - // Security mode - buf[ buf_len ] = (unsigned char)sec_type; - buf_len++; - - // Security key - if( sec_type != e_SEC_OPEN ) - { - buf[ buf_len ] = sec_key_len; - buf_len++; - if( sec_key_len > 0 ) - { - memcpy( &buf[buf_len], sec_key_p, sec_key_len ); - buf_len += sec_key_len; - } - } - - // Preparation of command - command_len = preparationSendCommand( UART_CMD_ID_WIFI, UART_CMD_SID_WIFI_JOIN_REQ, buf - , buf_len, payload_buf->buf, command_array ); - - // Send uart command request - sendUart( command_len, command_array ); - - int ret; - // Wait UART response - ret = mUartCommand.wait(); - if( ret != 0 ) - { - printf( "join failed\r\n" ); - freeCmdBuf( payload_buf ); - return -1; - } - - if( mUartCommand.getCommandStatus() != 0 ) - { - printf("join status:%02x\r\n", mUartCommand.getCommandStatus()); - ret = -1; - } - freeCmdBuf( payload_buf ); - - return ret; -} - -int C_SNICwifiInterface::disconnect() -{ - // Get buffer for response payload from MemoryPool - tagMEMPOOL_BLOCK_T *payload_buf = getAlocCmdBuf(); - if( payload_buf == NULL ) - { - printf("disconnect payload_buf NULL\r\n"); - return -1; - } - - tagWIFI_DISCONNECT_REQ_T req; - // Make request - req.cmd_sid = UART_CMD_SID_WIFI_DISCONNECT_REQ; - req.seq = mUartRequestSeq++; - - unsigned char command_array[UART_REQUEST_PAYLOAD_MAX]; - unsigned int command_len; - // Preparation of command - command_len = preparationSendCommand( UART_CMD_ID_WIFI, req.cmd_sid, (unsigned char *)&req - , sizeof(tagWIFI_DISCONNECT_REQ_T), payload_buf->buf, command_array ); - - // Send uart command request - sendUart( command_len, command_array ); - - int ret; - // Wait UART response - ret = mUartCommand.wait(); - if( ret != 0 ) - { - printf( "disconnect failed\r\n" ); - freeCmdBuf( payload_buf ); - return -1; - } - - if( mUartCommand.getCommandStatus() != 0 ) - { - printf("disconnect status:%02x\r\n", mUartCommand.getCommandStatus()); - ret = -1; - } - freeCmdBuf( payload_buf ); - return ret; -} - -int C_SNICwifiInterface::scan( const char *ssid_p, unsigned char *bssid_p - , void (*result_handler_p)(tagSCAN_RESULT_T *scan_result) ) -{ - // Get buffer for response payload from MemoryPool - tagMEMPOOL_BLOCK_T *payload_buf = getAlocCmdBuf(); - if( payload_buf == NULL ) - { - printf("scan payload_buf NULL\r\n"); - return -1; - } - - tagWIFI_SCAN_REQ_T req; - unsigned int buf_len = 0; - - memset( &req, 0, sizeof(tagWIFI_SCAN_REQ_T) ); - // Make request - req.cmd_sid = UART_CMD_SID_WIFI_SCAN_REQ; - buf_len++; - req.seq = mUartRequestSeq++; - buf_len++; - - // Set scan type(Active scan) - req.scan_type = 0; - buf_len++; - // Set bss type(any) - req.bss_type = 2; - buf_len++; - // Set BSSID - if( bssid_p != NULL ) - { - memcpy( req.bssid, bssid_p, BSSID_MAC_LENTH ); - } - buf_len += BSSID_MAC_LENTH; - // Set channel list(0) - req.chan_list = 0; - buf_len++; - //Set SSID - if( ssid_p != NULL ) - { - strcpy( (char *)req.ssid, ssid_p ); - buf_len += strlen(ssid_p); - } - buf_len++; - - unsigned char command_array[UART_REQUEST_PAYLOAD_MAX]; - unsigned int command_len; - // Preparation of command - command_len = preparationSendCommand( UART_CMD_ID_WIFI, req.cmd_sid, (unsigned char *)&req - , buf_len, payload_buf->buf, command_array ); - - // Set scan result callback - mUartCommand.setScanResultHandler( result_handler_p ); - - // Send uart command request - sendUart( command_len, command_array ); - - int ret; - // Wait UART response - ret = mUartCommand.wait(); - printf( "scan wait:%d\r\n", ret ); - if( ret != 0 ) - { - printf( "scan failed\r\n" ); - freeCmdBuf( payload_buf ); - return -1; - } - - if( mUartCommand.getCommandStatus() != 0 ) - { - printf("scan status:%02x\r\n", mUartCommand.getCommandStatus()); - ret = -1; - } - - freeCmdBuf( payload_buf ); - - return ret; -} - -int C_SNICwifiInterface::wifi_on( const char *country_p ) -{ - // Parameter check - if( country_p == NULL ) - { - printf("wifi_on parameter error\r\n"); - return -1; - } - - // Get buffer for response payload from MemoryPool - tagMEMPOOL_BLOCK_T *payload_buf = getAlocCmdBuf(); - if( payload_buf == NULL ) - { - printf("wifi_on payload_buf NULL\r\n"); - return -1; - } - - tagWIFI_ON_REQ_T req; - // Make request - req.cmd_sid = UART_CMD_SID_WIFI_ON_REQ; - req.seq = mUartRequestSeq++; - memcpy( req.country, country_p, COUNTRYC_CODE_LENTH ); - - unsigned char command_array[UART_REQUEST_PAYLOAD_MAX]; - unsigned int command_len; - // Preparation of command - command_len = preparationSendCommand( UART_CMD_ID_WIFI, req.cmd_sid, (unsigned char *)&req - , sizeof(tagWIFI_ON_REQ_T), payload_buf->buf, command_array ); - - // Send uart command request - sendUart( command_len, command_array ); - - int ret; - // Wait UART response - ret = mUartCommand.wait(); - if( ret != 0 ) - { - printf( "wifi_on failed\r\n" ); - freeCmdBuf( payload_buf ); - return -1; - } - - if( mUartCommand.getCommandStatus() != 0 ) - { - printf("wifi_on status:%02x\r\n", mUartCommand.getCommandStatus()); - ret = -1; - } - freeCmdBuf( payload_buf ); - - return ret; -} - -int C_SNICwifiInterface::wifi_off() -{ - // Get buffer for response payload from MemoryPool - tagMEMPOOL_BLOCK_T *payload_buf = getAlocCmdBuf(); - if( payload_buf == NULL ) - { - printf("wifi_off payload_buf NULL\r\n"); - return -1; - } - - tagWIFI_OFF_REQ_T req; - // Make request - req.cmd_sid = UART_CMD_SID_WIFI_OFF_REQ; - req.seq = mUartRequestSeq++; - - unsigned char command_array[UART_REQUEST_PAYLOAD_MAX]; - unsigned int command_len; - // Preparation of command - command_len = preparationSendCommand( UART_CMD_ID_WIFI, req.cmd_sid, (unsigned char *)&req - , sizeof(tagWIFI_OFF_REQ_T), payload_buf->buf, command_array ); - - // Send uart command request - sendUart( command_len, command_array ); - - int ret; - // Wait UART response - ret = mUartCommand.wait(); - if( ret != 0 ) - { - printf( "wifi_off failed\r\n" ); - freeCmdBuf( payload_buf ); - return -1; - } - - if( mUartCommand.getCommandStatus() != 0 ) - { - printf("wifi_off status:%02x\r\n", mUartCommand.getCommandStatus()); - ret = -1; - } - freeCmdBuf( payload_buf ); - - return ret; -} - -int C_SNICwifiInterface::getRssi( signed char *rssi_p ) -{ - if( rssi_p == NULL ) - { - printf("getRssi parameter error\r\n"); - return -1; - } - - // Get buffer for response payload from MemoryPool - tagMEMPOOL_BLOCK_T *payload_buf = getAlocCmdBuf(); - if( payload_buf == NULL ) - { - printf("getRssi payload_buf NULL\r\n"); - return -1; - } - - tagWIFI_GET_STA_RSSI_REQ_T req; - - // Make request - req.cmd_sid = UART_CMD_SID_WIFI_GET_STA_RSSI_REQ; - req.seq = mUartRequestSeq++; - - unsigned char command_array[UART_REQUEST_PAYLOAD_MAX]; - unsigned int command_len; - command_len = preparationSendCommand( UART_CMD_ID_WIFI, req.cmd_sid, (unsigned char *)&req - , sizeof(tagWIFI_GET_STA_RSSI_REQ_T), payload_buf->buf, command_array ); - - int ret; - // Send uart command request - sendUart( command_len, command_array ); - - // Wait UART response - ret = mUartCommand.wait(); - if( ret != 0 ) - { - printf( "getRssi failed\r\n" ); - freeCmdBuf( payload_buf ); - return -1; - } - - *rssi_p = (signed char)payload_buf->buf[2]; - - freeCmdBuf( payload_buf ); - return 0; -} - -int C_SNICwifiInterface::getWifiStatus( tagWIFI_STATUS_T *status_p) -{ - if( status_p == NULL ) - { - printf("getWifiStatus parameter error\r\n"); - return -1; - } - - // Get buffer for response payload from MemoryPool - tagMEMPOOL_BLOCK_T *payload_buf = getAlocCmdBuf(); - if( payload_buf == NULL ) - { - printf("getWifiStatus payload_buf NULL\r\n"); - return -1; - } - - tagWIFI_GET_STATUS_REQ_T req; - // Make request - req.cmd_sid = UART_CMD_SID_WIFI_GET_STATUS_REQ; - req.seq = mUartRequestSeq++; - req.interface = 0; - - unsigned char command_array[UART_REQUEST_PAYLOAD_MAX]; - unsigned int command_len; - command_len = preparationSendCommand( UART_CMD_ID_WIFI, req.cmd_sid, (unsigned char *)&req - , sizeof(tagWIFI_GET_STATUS_REQ_T), payload_buf->buf, command_array ); - - // Send uart command request - sendUart( command_len, command_array ); - - int ret; - // Wait UART response - ret = mUartCommand.wait(); - if( ret != 0 ) - { - printf( "getWifiStatus failed\r\n" ); - freeCmdBuf( payload_buf ); - return -1; - } - - // set status - status_p->status = (E_WIFI_STATUS)payload_buf->buf[2]; - - // set Mac address - if( status_p->status != e_STATUS_OFF ) - { - memcpy( status_p->mac_address, &payload_buf->buf[3], BSSID_MAC_LENTH ); - } - - // set SSID - if( ( status_p->status == e_STA_JOINED ) == ( status_p->status == e_AP_STARTED ) ) - { - memcpy( status_p->ssid, &payload_buf->buf[9], strlen( (char *)&payload_buf->buf[9]) ); - } - - freeCmdBuf( payload_buf ); - return 0; -}
--- a/SNICwifiInterface.h Tue Mar 18 02:57:24 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,136 +0,0 @@ -#ifndef _SNIC_WIFIINTERFACE_H_ -#define _SNIC_WIFIINTERFACE_H_ - -#include "SNICwifi.h" - -namespace murata_wifi -{ - -/** C_SNICwifiInterface class - */ -class C_SNICwifiInterface: public C_SNICwifi { -public: - /** Wi-Fi status */ - typedef struct - { - /** status */ - E_WIFI_STATUS status; - /** Mac address */ - char mac_address[BSSID_MAC_LENTH]; - /** SSID */ - char ssid[SSID_MAX_LENGTH+1]; - }tagWIFI_STATUS_T; - - /** Constructor - @param tx mbed pin to use for tx line of Serial interface - @param rx mbed pin to use for rx line of Serial interface - @param cts mbed pin to use for cts line of Serial interface - @param rts mbed pin to use for rts line of Serial interface - @param reset reset pin of the wifi module - @param alarm alarm pin of the wifi module (default: NC) - @param baud baud rate of Serial interface (default: 9600) - */ - C_SNICwifiInterface(PinName tx, PinName rx, PinName cts, PinName rts, PinName reset, PinName alarm = NC, int baud = 9600); - - /** Initialize the interface. - @return 0 on success, a negative number on failure - */ - int init(); - - /** Get Firmware version string. - @param version_p Pointer of FW version string.(null terminated)[output] - @return 0:success/other:fail - @note This function is blocked until a returns. - When you use it by UI thread, be careful. - */ - int getFWVersion( unsigned char *version_p ); - - /** Connect to AP - @param ssid_p Wi-Fi SSID(null terminated) - @param ssid_len Wi-Fi SSID length - @param sec_type Wi-Fi security type. - @param sec_key_len Wi-Fi passphrase or security key length - @param sec_key_p Wi-Fi passphrase or security key - @return 0 on success, a negative number on failure - @note This function is blocked until a returns. - When you use it by UI thread, be careful. - */ - int connect(const char *ssid_p, unsigned char ssid_len, E_SECURITY sec_type, const char *sec_key_p, unsigned char sec_key_len); - - /** Disconnect from AP - @return 0 on success, a negative number on failure - @note This function is blocked until a returns. - When you use it by UI thread, be careful. - */ - int disconnect(); - - /** Scan AP - @param ssid_p Wi-Fi SSID(null terminated) - If do not specify SSID, set to NULL. - @param bssid_p Wi-Fi BSSID(null terminated) - If do not specify SSID, set to NULL. - @param result_handler_p Pointer of scan result callback function. - @return 0 on success, a negative number on failure - @note This function is blocked until a returns. - When you use it by UI thread, be careful. - Scan results will be notified by asynchronous callback function. - If there is no continuity data, result_handler_p will be set NULL.. - */ - int scan( const char *ssid_p, unsigned char *bssid_p - ,void (*result_handler_p)(tagSCAN_RESULT_T *scan_result) ); - - /** Wi-Fi Turn on - @param country_p Pointer of country code. - @return 0 on success, a negative number on failure - @note This function is blocked until a returns. - When you use it by UI thread, be careful. - */ - int wifi_on( const char *country_p ); - - /** Wi-Fi Turn off - @return 0 on success, a negative number on failure - @note This function is blocked until a returns. - When you use it by UI thread, be careful. - */ - int wifi_off(); - - /** Get Wi-Fi RSSI - @param rssi_p Pointer of RSSI.[output] - @return 0 on success, a negative number on failure - @note This function is blocked until a returns. - When you use it by UI thread, be careful. - */ - int getRssi( signed char *rssi_p ); - - /** Get Wi-Fi status - @param status_p Pointer of status structure.[output] - @return 0 on success, a negative number on failure - @note This function is blocked until a returns. - When you use it by UI thread, be careful. - */ - int getWifiStatus( tagWIFI_STATUS_T *status_p); - -#if 0 - /** Get the MAC address of your Ethernet interface - * \return a pointer to a string containing the MAC address - */ - char* getMACAddress(); - - /** Get the IP address of your Ethernet interface - * \return a pointer to a string containing the IP address - */ - char* getIPAddress(); - - /** Get the Gateway address of your Ethernet interface - * \return a pointer to a string containing the Gateway address - */ - char* getGateway(); - - /** Get the Network mask of your Ethernet interface - * \return a pointer to a string containing the Network mask - */ - char* getNetworkMask(); -#endif -}; -} -#endif /* _YD_WIFIINTERFACE_H_ */ \ No newline at end of file