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.
Fork of NySNICInterface by
Revision 12:0254eaccfda2, committed 2014-03-25
- Comitter:
- kishino
- Date:
- Tue Mar 25 01:42:25 2014 +0000
- Parent:
- 11:c49007d49e52
- Child:
- 13:53e6471d5753
- Commit message:
- Refactoring of the class name
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/SNIC/CBuffer.h Tue Mar 25 01:42:25 2014 +0000
@@ -0,0 +1,76 @@
+/* Copyright (C) 2012 mbed.org, MIT License
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef CIRCBUFFER_H_
+#define CIRCBUFFER_H_
+
+template <class T>
+class CircBuffer {
+public:
+ CircBuffer(int length) {
+ write = 0;
+ read = 0;
+ size = length + 1;
+ buf = (T *)malloc(size * sizeof(T));
+ };
+
+ bool isFull() {
+ return (((write + 1) % size) == read);
+ };
+
+ bool isEmpty() {
+ return (read == write);
+ };
+
+ void queue(T k) {
+
+ if (isFull()) {
+ read++;
+ read %= size;
+ }
+ buf[write++] = k;
+ write %= size;
+ }
+
+ void flush() {
+ read = 0;
+ write = 0;
+ }
+
+
+ uint32_t available() {
+ return (write >= read) ? write - read : size - read + write;
+ };
+
+ bool dequeue(T * c) {
+ bool empty = isEmpty();
+ if (!empty) {
+ *c = buf[read++];
+ read %= size;
+ }
+ return(!empty);
+ };
+
+private:
+ volatile uint32_t write;
+ volatile uint32_t read;
+ uint32_t size;
+ T * buf;
+};
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/SNIC/SNIC_Core.cpp Tue Mar 25 01:42:25 2014 +0000
@@ -0,0 +1,223 @@
+#include "mbed.h"
+#include "SNIC_Core.h"
+#include "SNIC_UartMsgUtil.h"
+#include <string>
+
+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_SNIC_Core *C_SNIC_Core::mInstance_p = NULL;
+
+C_SNIC_Core *C_SNIC_Core::getInstance()
+{
+ if( mInstance_p == NULL )
+ {
+ mInstance_p = new C_SNIC_Core();
+ }
+ return mInstance_p;
+}
+
+C_SNIC_Core::C_SNIC_Core()
+{
+ int i;
+
+ for( i = 0; i < MAX_SOCKET_ID+1; i++ )
+ {
+ mConnectInfo[i].recvbuf_p = NULL;
+ mConnectInfo[i].is_connected = false;
+ }
+
+ mUartRecvThread_p = NULL;
+}
+
+int C_SNIC_Core::initUart(PinName tx, PinName rx, int baud)
+{
+// printf("[C_SNIC_Core::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_SNIC_Core::initUart]2\r\n");
+ // Initialize uart
+ gUART_RCVBUF.is_receive = false;
+ gUART_RCVBUF.size = 0;
+
+ // Create UART recv thread
+ mUartRecvThread_p = new Thread( C_SNIC_Core::uartRecvThread );
+// printf("[C_SNIC_Core::initUart]3\r\n");
+ if( mUartRecvThread_p == NULL )
+ {
+ printf("[C_SNIC_Core::initUart] thread cread failed\r\n");
+ return -1;
+ }
+
+ return 0;
+}
+
+unsigned int C_SNIC_Core::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_UartMsgUtil::makePayload( req_buf_len, req_buf_p, payload_array );
+ // Make all command request
+ command_len = C_SNIC_UartMsgUtil::makeRequest( cmd_id, payload_array, payload_len, command_p );
+
+ // Set data for response
+ mUartCommand.setCommandID( cmd_id );
+ mUartCommand.setCommandSID( cmd_sid | 0x80 );
+ mUartCommand.setResponseBuf( response_buf_p );
+
+ return command_len;
+}
+
+int C_SNIC_Core::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_SNIC_Core::getAlocCmdBuf()
+{
+ // Get buffer from MemoryPool
+ return mMemPoolPayload.alloc();
+}
+
+void C_SNIC_Core::freeCmdBuf( tagMEMPOOL_BLOCK_T *buf_p )
+{
+ mMemPoolPayload.free( buf_p );
+}
+
+tagCONNECT_INFO_T *C_SNIC_Core::getConnectInfo( int socket_id )
+{
+ if( (socket_id < 0) || (socket_id > MAX_SOCKET_ID) )
+ {
+ return NULL;
+ }
+ return &mConnectInfo[socket_id];
+}
+
+DigitalOut led1(LED1);
+void C_SNIC_Core::uartRecvThread (void const *args_p) {
+
+ C_SNIC_Core *instance_p = C_SNIC_Core::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 )
+ {
+ led1 = 0;
+#if 0
+ printf("[recv]\r\n");
+ for( i = 0; i < gUART_RCVBUF.size; i++ )
+ {
+ printf("%02x ", gUART_RCVBUF.buf[i]);
+ }
+ printf("\r\n");
+#endif
+ unsigned char command_id;
+ // Get payload from received data from UART.
+ int payload_len = C_SNIC_UartMsgUtil::getResponsePayload( gUART_RCVBUF.size, gUART_RCVBUF.buf
+ , &command_id, gUART_TEMP_BUF );
+
+ // Check receive a TCP or UDP packet
+ if( (command_id == UART_CMD_ID_SNIC) && (gUART_TEMP_BUF[0] == UART_CMD_SID_SNIC_CONNECTION_RECV_IND) )
+ {
+ // Packet buffering
+ instance_p->mUartCommand.bufferredPacket( gUART_TEMP_BUF, payload_len );
+ }
+
+ // Check scan results indication
+ else 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.
+ else 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 )
+ {
+ led1 = 1;
+ 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/SNIC_Core.h Tue Mar 25 01:42:25 2014 +0000
@@ -0,0 +1,242 @@
+#ifndef _SNIC_CORE_H_
+#define _SNIC_CORE_H_
+
+#include "mbed.h"
+#include "rtos.h"
+#include "RawSerial.h"
+#include "CBuffer.h"
+
+#include "SNIC_UartCommandManager.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;
+
+#define MAX_SOCKET_ID 5
+
+/** Connection information
+*/
+typedef struct {
+ CircBuffer<unsigned char> *recvbuf_p;
+ bool is_connected;
+ bool is_received;
+}tagCONNECT_INFO_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;
+
+/** SNIC_TCP_CREATE_SOCKET_REQ */
+typedef struct
+{
+ unsigned char cmd_sid;
+ unsigned char seq;
+ unsigned char bind;
+ unsigned int local_addr;
+ unsigned short local_port;
+}tagSNIC_TCP_CREATE_SOCKET_REQ_T;
+
+/** SNIC_TCP_CONNECT_TO_SERVER_REQ */
+typedef struct
+{
+ unsigned char cmd_sid;
+ unsigned char seq;
+ unsigned char socket_id;
+ unsigned char remote_addr[4];
+ unsigned char remote_port[2];
+ unsigned char recv_bufsize[2];
+/*
+ unsigned int remote_addr;
+ unsigned short remote_port;
+ unsigned short recv_bufsize;
+*/
+ unsigned char timeout;
+}tagSNIC_TCP_CONNECT_TO_SERVER_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_SNIC_Core class
+ */
+class C_SNIC_Core
+{
+
+public:
+ C_SNIC_UartCommandManager 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 pointer of connection information.
+ @param socket_id Socket ID
+ @return The pointer of connection information
+ */
+ tagCONNECT_INFO_T *getConnectInfo( int socket_id );
+
+ /** Get an instance of the C_SNIC_Core class.
+ @return Instance of the C_SNIC_Core 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_SNIC_Core *getInstance();
+
+protected:
+ static C_SNIC_Core *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;
+
+ /** Socket buffer */
+ tagCONNECT_INFO_T mConnectInfo[MAX_SOCKET_ID+1];
+
+ /** Constructor
+ */
+ C_SNIC_Core();
+
+ /** 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/SNIC_UartCommandManager.cpp Tue Mar 25 01:42:25 2014 +0000
@@ -0,0 +1,170 @@
+#include "SNIC_UartCommandManager.h"
+#include "SNIC_Core.h"
+
+using namespace murata_wifi;
+
+void C_SNIC_UartCommandManager::setCommandID( unsigned char cmd_id )
+{
+ mCommandID = cmd_id;
+}
+
+unsigned char C_SNIC_UartCommandManager::getCommandID()
+{
+ return mCommandID;
+}
+
+void C_SNIC_UartCommandManager::setCommandSID( unsigned char cmd_sid )
+{
+ mCommandSID = cmd_sid;
+}
+
+unsigned char C_SNIC_UartCommandManager::getCommandSID()
+{
+ return mCommandSID;
+}
+
+void C_SNIC_UartCommandManager::setCommandStatus( unsigned char status )
+{
+ mCommandStatus = status;
+}
+
+unsigned char C_SNIC_UartCommandManager::getCommandStatus()
+{
+ return mCommandStatus;
+}
+
+void C_SNIC_UartCommandManager::setResponseBuf( unsigned char *buf_p )
+{
+ mResponseBuf_p = buf_p;
+}
+
+unsigned char *C_SNIC_UartCommandManager::getResponseBuf()
+{
+ return mResponseBuf_p;
+}
+
+void C_SNIC_UartCommandManager::setScanResultHandler( void (*handler_p)(tagSCAN_RESULT_T *scan_result) )
+{
+ mScanResultHandler_p = handler_p;
+}
+
+
+int C_SNIC_UartCommandManager::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_SNIC_UartCommandManager::signal()
+{
+ // set signal
+ return osSignalSet(mCommandThreadID, UART_COMMAND_SIGNAL);
+}
+
+bool C_SNIC_UartCommandManager::isWaitingCommand( unsigned int command_id, unsigned char *payload_p )
+{
+ bool ret = false;
+
+ if( (command_id == getCommandID())
+ && (payload_p[0] == getCommandSID()) )
+ {
+ ret = true;
+ }
+ return ret;
+}
+
+void C_SNIC_UartCommandManager::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 );
+ }
+}
+
+void C_SNIC_UartCommandManager::bufferredPacket( unsigned char *payload_p, int payload_len )
+{
+ if( (payload_p == NULL) || (payload_len == 0) )
+ {
+ return;
+ }
+
+ C_SNIC_Core *instance_p = C_SNIC_Core::getInstance();
+
+ int socket_id;
+ unsigned short recv_len;
+
+ // Get socket id from payload
+ socket_id = payload_p[2];
+ // Get Connection information
+ tagCONNECT_INFO_T *con_info_p = instance_p->getConnectInfo( socket_id );
+ if( con_info_p == NULL )
+ {
+ return;
+ }
+
+ if( con_info_p->is_connected == false )
+ {
+ printf(" Socket id \"%d\" is not connected\r\n", socket_id);
+ return;
+ }
+
+ // Get receive length from payload
+ recv_len= ((payload_p[3]<<8) & 0xFF00) | payload_p[4];
+ for( int i = 0; i < recv_len; i++ )
+ {
+ if( con_info_p->recvbuf_p->isFull() )
+ {
+ printf("Receive buffer is full.\r\n");
+ break;
+ }
+
+ // Add to receive buffer
+ con_info_p->recvbuf_p->queue( payload_p[5+i] );
+ }
+ con_info_p->is_received = true;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/SNIC/SNIC_UartCommandManager.h Tue Mar 25 01:42:25 2014 +0000
@@ -0,0 +1,121 @@
+#ifndef _SNIC_UART_COMMAND_MANAGER_H_
+#define _SNIC_UART_COMMAND_MANAGER_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_SNIC_UartCommandManager class
+ */
+class C_SNIC_UartCommandManager
+{
+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 bufferredPacket( unsigned char *payload_p, int payload_len );
+
+ 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/SNIC_UartMsgUtil.cpp Tue Mar 25 01:42:25 2014 +0000
@@ -0,0 +1,129 @@
+#include "SNIC_UartMsgUtil.h"
+
+using namespace murata_wifi;
+
+C_SNIC_UartMsgUtil::C_SNIC_UartMsgUtil()
+{
+}
+
+unsigned short C_SNIC_UartMsgUtil::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_UartMsgUtil::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_UartMsgUtil::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/SNIC_UartMsgUtil.h Tue Mar 25 01:42:25 2014 +0000
@@ -0,0 +1,159 @@
+#ifndef _SNIC_WIFI_UART_MSG_UTIL_H_
+#define _SNIC_WIFI_UART_MSG_UTILH_
+
+#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_UartMsgUtil class
+ */
+class C_SNIC_UartMsgUtil
+{
+
+public:
+ C_SNIC_UartMsgUtil();
+
+ /** 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/SNIC/SNICwifi.cpp Wed Mar 19 01:48:37 2014 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,205 +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 = 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();
- }
-}
-
--- a/SNIC/SNICwifi.h Wed Mar 19 01:48:37 2014 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,195 +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;
-
-/** 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
--- a/SNIC/SNICwifiUartCommand.cpp Wed Mar 19 01:48:37 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/SNIC/SNICwifiUartCommand.h Wed Mar 19 01:48:37 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();
-
-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
--- a/SNIC/SNICwifi_uartmsg.cpp Wed Mar 19 01:48:37 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/SNIC/SNICwifi_uartmsg.h Wed Mar 19 01:48:37 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/SNICInterface.cpp Wed Mar 19 01:48:37 2014 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,515 +0,0 @@
-#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;
-}
--- a/SNICInterface.h Wed Mar 19 01:48:37 2014 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,146 +0,0 @@
-#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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/SNIC_WifiInterface.cpp Tue Mar 25 01:42:25 2014 +0000
@@ -0,0 +1,515 @@
+#include "SNIC_WifiInterface.h"
+#include "SNIC_UartMsgUtil.h"
+
+using namespace murata_wifi;
+
+C_SNIC_WifiInterface::C_SNIC_WifiInterface( PinName tx, PinName rx, PinName cts, PinName rts, PinName reset, PinName alarm, int baud)
+{
+ mSNICWifi_p = C_SNIC_Core::getInstance();
+
+ mUART_tx = tx;
+ mUART_rx = rx;
+ mUART_cts = cts;
+ mUART_rts = rts;;
+ mUART_baud = baud;
+ mModuleReset = reset;
+}
+
+int C_SNIC_WifiInterface::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_SNIC_WifiInterface::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_SNIC_WifiInterface::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_SNIC_WifiInterface::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_SNIC_WifiInterface::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_SNIC_WifiInterface::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_SNIC_WifiInterface::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_SNIC_WifiInterface::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_SNIC_WifiInterface::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/SNIC_WifiInterface.h Tue Mar 25 01:42:25 2014 +0000
@@ -0,0 +1,146 @@
+#ifndef _SNIC_WIFIINTERFACE_H_
+#define _SNIC_WIFIINTERFACE_H_
+
+#include "SNIC_Core.h"
+
+namespace murata_wifi
+{
+
+/** 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;
+
+/** C_SNIC_WifiInterface class
+ */
+class C_SNIC_WifiInterface {
+public:
+ /** 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_SNIC_WifiInterface(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_SNIC_Core *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/Socket/Socket.cpp Wed Mar 19 01:48:37 2014 +0000
+++ b/Socket/Socket.cpp Tue Mar 25 01:42:25 2014 +0000
@@ -22,7 +22,8 @@
Socket::Socket()
{
-
+ mSnicWifi_p = C_SNIC_Core::getInstance();
+ mSocketID = -1;
}
Socket::~Socket() {
@@ -48,4 +49,63 @@
{
return 0;
}
-#endif
\ No newline at end of file
+#endif
+
+int Socket::createSocket( unsigned char bind, unsigned int local_addr, unsigned short port )
+{
+ // Get buffer for response payload from MemoryPool
+ tagMEMPOOL_BLOCK_T *payload_buf = mSnicWifi_p->getAlocCmdBuf();
+ if( payload_buf == NULL )
+ {
+ printf("createSocket payload_buf NULL\r\n");
+ return -1;
+ }
+
+ tagSNIC_TCP_CREATE_SOCKET_REQ_T req;
+ int req_len = 0;
+
+ // Make request
+ req.cmd_sid = UART_CMD_SID_SNIC_TCP_CREATE_SOCKET_REQ;
+ req_len++;
+ req.seq = mUartRequestSeq++;
+ req_len++;
+ req.bind = bind;
+ req_len++;
+ if( bind != 0 )
+ {
+ req.local_addr = local_addr;
+ req_len++;
+ req.local_port = port;
+ req_len++;
+ }
+
+ 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
+ , req_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( "createSocket failed\r\n" );
+ mSnicWifi_p->freeCmdBuf( payload_buf );
+ return -1;
+ }
+
+ if( mSnicWifi_p->mUartCommand.getCommandStatus() != 0 )
+ {
+ printf("createSocket status:%02x\r\n", mSnicWifi_p->mUartCommand.getCommandStatus());
+ mSnicWifi_p->freeCmdBuf( payload_buf );
+ return -1;
+ }
+ mSocketID = payload_buf->buf[3];
+ mSnicWifi_p->freeCmdBuf( payload_buf );
+
+ return 0;
+}
--- a/Socket/Socket.h Wed Mar 19 01:48:37 2014 +0000
+++ b/Socket/Socket.h Tue Mar 25 01:42:25 2014 +0000
@@ -18,13 +18,16 @@
#ifndef SOCKET_H_
#define SOCKET_H_
-#include "SNICwifi.h"
+#include "SNIC_Core.h"
+#include "SNIC_UartMsgUtil.h"
typedef unsigned long socklen_t;
namespace murata_wifi
{
+#define SNIC_UART_RECVBUF_SIZE 2048
+
/** Socket file descriptor and select wrapper
*/
class Socket {
@@ -34,21 +37,21 @@
Socket();
/** Set socket options
- \param level stack level (see: lwip/sockets.h)
- \param optname option ID
- \param optval option value
- \param socklen_t length of the option value
- \return 0 on success, -1 on failure
+ @param level stack level (see: lwip/sockets.h)
+ @param optname option ID
+ @param optval option value
+ @param socklen_t length of the option value
+ @return 0 on success, -1 on failure
*/
int set_option(int level, int optname, const void *optval, socklen_t optlen);
/** Get socket options
- \param level stack level (see: lwip/sockets.h)
- \param optname option ID
+ @param level stack level (see: lwip/sockets.h)
+ @param optname option ID
\param optval buffer pointer where to write the option value
\param socklen_t length of the option value
\return 0 on success, -1 on failure
- */
+ */
int get_option(int level, int optname, void *optval, socklen_t *optlen);
/** Close the socket
@@ -58,7 +61,12 @@
~Socket();
+ int createSocket( unsigned char bind = 0, unsigned int local_addr = 0, unsigned short port = 0 );
+
protected:
+ int mSocketID;
+ C_SNIC_Core *mSnicWifi_p;
+
#if 0
bool _blocking;
int _timeout;
@@ -70,6 +78,7 @@
#endif
private:
+
// int select(struct timeval *timeout, bool read, bool write);
};
}
--- a/Socket/TCPSocketConnection.cpp Wed Mar 19 01:48:37 2014 +0000
+++ b/Socket/TCPSocketConnection.cpp Tue Mar 25 01:42:25 2014 +0000
@@ -20,29 +20,143 @@
using namespace murata_wifi;
-TCPSocketConnection::TCPSocketConnection() :
- _is_connected(false) {
+TCPSocketConnection::TCPSocketConnection()
+{
}
-int TCPSocketConnection::connect(const char* host, const int port)
+int TCPSocketConnection::connect( unsigned int ip_addr, unsigned short port)
{
- _is_connected = true;
+ int ret;
+
+ // Socket create
+ ret = createSocket();
+ if( ret != 0 )
+ {
+ printf("createSocket error : %d\r\n", ret);
+ 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;
+ }
+
+ tagSNIC_TCP_CONNECT_TO_SERVER_REQ_T req;
+ // Make request
+ req.cmd_sid = UART_CMD_SID_SNIC_TCP_CONNECT_TO_SERVER_REQ;
+ req.seq = mUartRequestSeq++;
+ req.socket_id = mSocketID;
+
+ // set ip addr ( byte order )
+ req.remote_addr[0] = ( (ip_addr & 0xFF000000) >> 24 );
+ req.remote_addr[1] = ( (ip_addr & 0xFF0000) >> 16 );
+ req.remote_addr[2] = ( (ip_addr & 0xFF00) >> 8 );
+ req.remote_addr[3] = (ip_addr & 0xFF);
+ req.remote_port[0] = ( (port & 0xFF00) >> 8 );
+ req.remote_port[1] = (port & 0xFF);
+ req.recv_bufsize[0] = ( (SNIC_UART_RECVBUF_SIZE & 0xFF00) >> 8 );
+ req.recv_bufsize[1] = (SNIC_UART_RECVBUF_SIZE & 0xFF);
+ req.timeout = 60;
+
+ 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_TCP_CONNECT_TO_SERVER_REQ_T), payload_buf->buf, command_array );
+
+ // Send uart command request
+ mSnicWifi_p->sendUart( command_len, command_array );
+
+ mSnicWifi_p->mUartCommand.setCommandSID( UART_CMD_SID_SNIC_TCP_CONNECTION_STATUS_IND );
+
+ // Wait UART response
+ ret = mSnicWifi_p->mUartCommand.wait();
+ if( ret != 0 )
+ {
+ printf( "connect failed\r\n" );
+ mSnicWifi_p->freeCmdBuf( payload_buf );
+ return -1;
+ }
+
+ if( mSnicWifi_p->mUartCommand.getCommandStatus() != UART_CMD_RES_SNIC_CONNECTION_UP )
+ {
+ printf("connect status:%02x\r\n", mSnicWifi_p->mUartCommand.getCommandStatus());
+ mSnicWifi_p->freeCmdBuf( payload_buf );
+ return -1;
+ }
+ mSnicWifi_p->freeCmdBuf( payload_buf );
+
+ // Initialize connection information
+ tagCONNECT_INFO_T *con_info_p = mSnicWifi_p->getConnectInfo( mSocketID );
+ if( con_info_p->recvbuf_p == NULL )
+ {
+ printf( "create recv buffer[socket:%d]\r\n", mSocketID);
+ con_info_p->recvbuf_p = new CircBuffer<unsigned char>(SNIC_UART_RECVBUF_SIZE);
+ }
+ con_info_p->is_connected = true;
+ con_info_p->is_received = false;
return 0;
}
bool TCPSocketConnection::is_connected(void)
{
- return _is_connected;
+ tagCONNECT_INFO_T *con_info_p = mSnicWifi_p->getConnectInfo( mSocketID );
+ return con_info_p->is_connected;
}
-int TCPSocketConnection::send(char* data, int length)
+int TCPSocketConnection::send(unsigned char* data_p, int length)
{
return 0;
}
-int TCPSocketConnection::receive(char* data, int length)
+int TCPSocketConnection::receive(unsigned char* data_p, int length)
{
- return 0;
+ int i = 0;
+
+ if( (data_p == NULL) || (length < 1) )
+ {
+ printf("TCPSocketConnection::receive parameter error\r\n");
+ return -1;
+ }
+
+ // Initialize connection information
+ tagCONNECT_INFO_T *con_info_p = mSnicWifi_p->getConnectInfo( mSocketID );
+ if( con_info_p->recvbuf_p == NULL )
+ {
+ printf("TCPSocketConnection::receive Conncection info error\r\n");
+ return -1;
+ }
+
+ // Check connection
+ if( con_info_p->is_connected == false )
+ {
+ printf(" Socket id \"%d\" is not connected\r\n", mSocketID);
+ return -1;
+ }
+
+ if( con_info_p->is_received == false )
+ {
+// printf(" Socket id \"%d\" is not received\r\n", mSocketID);
+ return 0;
+ }
+
+ // Get packet data from buffer for receive.
+ for (i = 0; i < length; i ++)
+ {
+ if (con_info_p->recvbuf_p->dequeue(&data_p[i]) == false)
+ {
+ break;
+ }
+ }
+
+ if( con_info_p->recvbuf_p->isEmpty() )
+ {
+ con_info_p->is_received = false;
+ }
+
+ return i;
}
-
--- a/Socket/TCPSocketConnection.h Wed Mar 19 01:48:37 2014 +0000
+++ b/Socket/TCPSocketConnection.h Tue Mar 25 01:42:25 2014 +0000
@@ -36,33 +36,34 @@
TCPSocketConnection();
/** Connects this TCP socket to the server
- \param host The host to connect to. It can either be an IP Address or a hostname that will be resolved with DNS.
- \param port The host's port to connect to.
- \return 0 on success, -1 on failure.
+ @param host The ip address to connect to.(hexadecimal)("192.168.0.1"->0xC0A80001)
+ @param port The host's port to connect to.
+ @return 0 on success, -1 on failure.
+ @note This function is blocked until a returns.
+ When you use it by UI thread, be careful.
*/
- int connect(const char* host, const int port);
+ int connect( unsigned int ip_addr, unsigned short port );
/** Check if the socket is connected
- \return true if connected, false otherwise.
+ @return true if connected, false otherwise.
*/
bool is_connected(void);
/** Send data to the remote host.
- \param data The buffer to send to the host.
- \param length The length of the buffer to send.
- \return the number of written bytes on success (>=0) or -1 on failure
+ @param data The buffer to send to the host.
+ @param length The length of the buffer to send.
+ @return the number of written bytes on success (>=0) or -1 on failure
*/
- int send(char* data, int length);
+ int send(unsigned char *data_p, int length);
/** Receive data from the remote host.
- \param data The buffer in which to store the data received from the host.
- \param length The maximum length of the buffer.
- \return the number of received bytes on success (>=0) or -1 on failure
+ @param data The buffer in which to store the data received from the host.
+ @param length The maximum length of the buffer.
+ @return the number of received bytes on success (>=0) or -1 on failure
*/
- int receive(char* data, int length);
+ int receive(unsigned char *data_p, int length);
private:
- bool _is_connected;
};
}
