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
YDwifi/YDwifi.cpp@2:0ba43344c814, 2014-03-11 (annotated)
- 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?
| User | Revision | Line number | New 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 |
muRata

Murata TypeYD