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