SNIC UART Interface library: Serial to Wi-Fi library for Murata TypeYD Wi-Fi module. For more information about TypeYD: http://www.murata.co.jp/products/microwave/module/lbwb1zzydz/index.html
Dependents: SNIC-xively-jumpstart-demo SNIC-FluentLogger-example TCPEchoServer murataDemo ... more
Fork of YDwifiInterface by
Revision 5:ef3befe3edad, committed 2014-03-13
- Comitter:
- kishino
- Date:
- Thu Mar 13 08:44:33 2014 +0000
- Parent:
- 4:99cc93fe7d88
- Child:
- 6:70f522934032
- Commit message:
- Create Wi-Fi turn on command; Create Wi-Fi turn off command; Create get RSSI command
Changed in this revision
--- a/YDwifi/YDwifi.cpp Thu Mar 13 03:38:25 2014 +0000 +++ b/YDwifi/YDwifi.cpp Thu Mar 13 08:44:33 2014 +0000 @@ -100,7 +100,7 @@ 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 @@ -112,7 +112,7 @@ 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) ) {
--- a/YDwifi/YDwifi.h Thu Mar 13 03:38:25 2014 +0000 +++ b/YDwifi/YDwifi.h Thu Mar 13 08:44:33 2014 +0000 @@ -51,6 +51,21 @@ 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 { @@ -58,6 +73,13 @@ 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_SCAN_REQ Command */ typedef struct {
--- a/YDwifi/YDwifiUartCommand.h Thu Mar 13 03:38:25 2014 +0000 +++ b/YDwifi/YDwifiUartCommand.h Thu Mar 13 08:44:33 2014 +0000 @@ -9,6 +9,8 @@ #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
--- a/YDwifiInterface.cpp Thu Mar 13 03:38:25 2014 +0000 +++ b/YDwifiInterface.cpp Thu Mar 13 08:44:33 2014 +0000 @@ -62,7 +62,6 @@ // Wait UART response ret = mUartCommand.wait(); - printf( "getFWversion wait:%d\r\n", ret ); if( ret != 0 ) { printf( "getFWversion failed\r\n" ); @@ -218,7 +217,7 @@ ret = -1; } gMEMPOOL_PAYLOAD.free( payload_buf ); - return 0; + return ret; } int C_YDwifiInterface::scan( const char *ssid_p, unsigned char *bssid_p @@ -305,5 +304,174 @@ } 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; -} \ No newline at end of file +}
--- a/YDwifiInterface.h Thu Mar 13 03:38:25 2014 +0000 +++ b/YDwifiInterface.h Thu Mar 13 08:44:33 2014 +0000 @@ -67,6 +67,29 @@ 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 ); + #if 0 /** Get the MAC address of your Ethernet interface * \return a pointer to a string containing the MAC address