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