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 Takao Kishino

Committer:
kishino
Date:
Tue Mar 11 10:38:36 2014 +0000
Revision:
2:0ba43344c814
Parent:
0:61c402886fbb
Child:
3:9f90024d7fb2
Created the basic composition of SNIC UART command API.; Created the UART command for getting firmware's version.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kishino 0:61c402886fbb 1 #include "mbed.h"
kishino 0:61c402886fbb 2 #include "YDwifi.h"
kishino 0:61c402886fbb 3 #include "YDwifi_uartmsg.h"
kishino 0:61c402886fbb 4 #include <string>
kishino 0:61c402886fbb 5 //#include <algorithm>
kishino 0:61c402886fbb 6
kishino 2:0ba43344c814 7 using namespace murata_wifi;
kishino 2:0ba43344c814 8
kishino 2:0ba43344c814 9 #define UART_RECVBUF_SIZE 2048
kishino 2:0ba43344c814 10 typedef struct
kishino 2:0ba43344c814 11 {
kishino 2:0ba43344c814 12 unsigned char buf[UART_RECVBUF_SIZE];
kishino 2:0ba43344c814 13 unsigned int size;
kishino 2:0ba43344c814 14 bool is_receive;
kishino 2:0ba43344c814 15 }tagUART_RECVBUF_T;
kishino 2:0ba43344c814 16 tagUART_RECVBUF_T gUART_RCVBUF;
kishino 2:0ba43344c814 17
kishino 0:61c402886fbb 18 C_YDwifi *C_YDwifi::mInstance_p;
kishino 0:61c402886fbb 19
kishino 0:61c402886fbb 20 C_YDwifi::C_YDwifi(PinName tx, PinName rx, PinName cts, PinName rts, PinName reset, PinName alarm, int baud):
kishino 0:61c402886fbb 21 mUart(tx, rx), mModuleReset(reset)
kishino 0:61c402886fbb 22 {
kishino 0:61c402886fbb 23 mUartRecvThread_p = NULL;
kishino 0:61c402886fbb 24 mInstance_p = this;
kishino 0:61c402886fbb 25 mUartRequestSeq = 0;
kishino 0:61c402886fbb 26
kishino 2:0ba43344c814 27 // Initialize uart
kishino 2:0ba43344c814 28 gUART_RCVBUF.is_receive = false;
kishino 2:0ba43344c814 29 gUART_RCVBUF.size = 0;
kishino 2:0ba43344c814 30 mUart.baud( 115200 );
kishino 2:0ba43344c814 31 mUart.format(8, SerialBase::None, 1);
kishino 0:61c402886fbb 32 }
kishino 0:61c402886fbb 33
kishino 0:61c402886fbb 34 int C_YDwifi::initUart()
kishino 0:61c402886fbb 35 {
kishino 0:61c402886fbb 36 // Create UART recv thread
kishino 0:61c402886fbb 37 mUartRecvThread_p = new Thread( C_YDwifi::uartRecvThread );
kishino 0:61c402886fbb 38 if( mUartRecvThread_p == NULL )
kishino 0:61c402886fbb 39 {
kishino 0:61c402886fbb 40 printf("[C_YDwifi::initUart] thread cread failed\r\n");
kishino 0:61c402886fbb 41 return -1;
kishino 0:61c402886fbb 42 }
kishino 2:0ba43344c814 43
kishino 0:61c402886fbb 44 return 0;
kishino 0:61c402886fbb 45 }
kishino 0:61c402886fbb 46
kishino 2:0ba43344c814 47 int C_YDwifi::sendUart( unsigned int len, unsigned char *data )
kishino 0:61c402886fbb 48 {
kishino 2:0ba43344c814 49 int ret = 0;
kishino 2:0ba43344c814 50
kishino 2:0ba43344c814 51 mUartMutex.lock();
kishino 2:0ba43344c814 52 for( int i = 0; i < len; i++ )
kishino 2:0ba43344c814 53 {
kishino 2:0ba43344c814 54 // Write to UART
kishino 2:0ba43344c814 55 ret = mUart.putc( data[i] );
kishino 2:0ba43344c814 56 if( ret == -1 )
kishino 2:0ba43344c814 57 {
kishino 2:0ba43344c814 58 ret = -1;
kishino 2:0ba43344c814 59 break;
kishino 2:0ba43344c814 60 }
kishino 2:0ba43344c814 61 }
kishino 2:0ba43344c814 62 mUartMutex.unlock();
kishino 2:0ba43344c814 63 return ret;
kishino 0:61c402886fbb 64 }
kishino 0:61c402886fbb 65
kishino 0:61c402886fbb 66 void C_YDwifi::uartRecvThread (void const *args_p) {
kishino 2:0ba43344c814 67
kishino 0:61c402886fbb 68 C_YDwifi *instance_p = C_YDwifi::getInstance();
kishino 0:61c402886fbb 69 if ( instance_p == NULL )
kishino 0:61c402886fbb 70 {
kishino 0:61c402886fbb 71 printf("Socket constructor error: no wifly instance available!\r\n");
kishino 0:61c402886fbb 72 }
kishino 0:61c402886fbb 73
kishino 0:61c402886fbb 74 int recvdata = 0;
kishino 2:0ba43344c814 75 int i;
kishino 2:0ba43344c814 76
kishino 0:61c402886fbb 77 /* UART recv thread main loop */
kishino 0:61c402886fbb 78 for (;;)
kishino 0:61c402886fbb 79 {
kishino 2:0ba43344c814 80 while( instance_p->mUart.readable() )
kishino 2:0ba43344c814 81 {
kishino 2:0ba43344c814 82 // Receive data from UART.
kishino 2:0ba43344c814 83 instance_p->mUartMutex.lock();
kishino 2:0ba43344c814 84 recvdata = instance_p->mUart.getc();
kishino 2:0ba43344c814 85 instance_p->mUartMutex.unlock();
kishino 2:0ba43344c814 86
kishino 2:0ba43344c814 87 // Check UART receiving flg
kishino 2:0ba43344c814 88 if( gUART_RCVBUF.is_receive )
kishino 2:0ba43344c814 89 {
kishino 2:0ba43344c814 90 gUART_RCVBUF.buf[ gUART_RCVBUF.size ] = (unsigned char)recvdata;
kishino 2:0ba43344c814 91 gUART_RCVBUF.size++;
kishino 2:0ba43344c814 92 // Check received data is EOM.
kishino 2:0ba43344c814 93 if( recvdata == UART_CMD_EOM )
kishino 2:0ba43344c814 94 {
kishino 2:0ba43344c814 95 printf("[recv]\r\n");
kishino 2:0ba43344c814 96 for( i = 0; i < gUART_RCVBUF.size; i++ )
kishino 2:0ba43344c814 97 {
kishino 2:0ba43344c814 98 printf("%02x ", gUART_RCVBUF.buf[i]);
kishino 2:0ba43344c814 99 }
kishino 2:0ba43344c814 100 printf("\r\n");
kishino 2:0ba43344c814 101
kishino 2:0ba43344c814 102 // Get buffer for payload data
kishino 2:0ba43344c814 103 unsigned char *payload_buf_p = instance_p->mUartCommand.getResponseBuf();
kishino 2:0ba43344c814 104 unsigned char command_id;
kishino 2:0ba43344c814 105
kishino 2:0ba43344c814 106 if( payload_buf_p != NULL )
kishino 2:0ba43344c814 107 {
kishino 2:0ba43344c814 108 // Get payload from received data from UART.
kishino 2:0ba43344c814 109 int payload_len = C_YD_UartMsg::getResponsePayload( gUART_RCVBUF.size, gUART_RCVBUF.buf
kishino 2:0ba43344c814 110 , &command_id, payload_buf_p );
kishino 2:0ba43344c814 111 printf("[payload]\r\n");
kishino 2:0ba43344c814 112 for( i = 0; i < payload_len; i++ )
kishino 2:0ba43344c814 113 {
kishino 2:0ba43344c814 114 printf("%02x ", payload_buf_p[i]);
kishino 2:0ba43344c814 115 }
kishino 2:0ba43344c814 116 printf("\r\n");
kishino 2:0ba43344c814 117
kishino 2:0ba43344c814 118 // Checks in the command which is waiting.
kishino 2:0ba43344c814 119 if( instance_p->mUartCommand.isWaitingCommand(command_id, payload_buf_p) )
kishino 2:0ba43344c814 120 {
kishino 2:0ba43344c814 121 // Set status
kishino 2:0ba43344c814 122 instance_p->mUartCommand.setCommandStatus( payload_buf_p[2] );
kishino 2:0ba43344c814 123 // Set signal for command response wait.
kishino 2:0ba43344c814 124 instance_p->mUartCommand.signal();
kishino 2:0ba43344c814 125 }
kishino 2:0ba43344c814 126 }
kishino 2:0ba43344c814 127 gUART_RCVBUF.size = 0;
kishino 2:0ba43344c814 128 gUART_RCVBUF.is_receive = false;
kishino 2:0ba43344c814 129 }
kishino 2:0ba43344c814 130 }
kishino 2:0ba43344c814 131 else
kishino 2:0ba43344c814 132 {
kishino 2:0ba43344c814 133 // Check received data is SOM.
kishino 2:0ba43344c814 134 if( recvdata == UART_CMD_SOM )
kishino 2:0ba43344c814 135 {
kishino 2:0ba43344c814 136 gUART_RCVBUF.size = 0;
kishino 2:0ba43344c814 137 gUART_RCVBUF.buf[ gUART_RCVBUF.size ] = (unsigned char)recvdata;
kishino 2:0ba43344c814 138 gUART_RCVBUF.size++;
kishino 2:0ba43344c814 139 gUART_RCVBUF.is_receive = true;
kishino 2:0ba43344c814 140 }
kishino 2:0ba43344c814 141 }
kishino 2:0ba43344c814 142 }
kishino 2:0ba43344c814 143 Thread::yield();
kishino 0:61c402886fbb 144 }
kishino 0:61c402886fbb 145 }
kishino 0:61c402886fbb 146