Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: SNIC-httpclient-example SNIC-ntpclient-example
Fork of SNICInterface 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
