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@5:ef3befe3edad, 2014-03-13 (annotated)
- Committer:
- kishino
- Date:
- Thu Mar 13 08:44:33 2014 +0000
- Revision:
- 5:ef3befe3edad
- Parent:
- 3:9f90024d7fb2
- Child:
- 6:70f522934032
Create Wi-Fi turn on command; Create Wi-Fi turn off command; Create get RSSI command
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 | 3:9f90024d7fb2 | 17 | unsigned char gUART_TEMP_BUF[UART_RECVBUF_SIZE]; |
| kishino | 2:0ba43344c814 | 18 | |
| kishino | 0:61c402886fbb | 19 | C_YDwifi *C_YDwifi::mInstance_p; |
| kishino | 0:61c402886fbb | 20 | |
| kishino | 0:61c402886fbb | 21 | C_YDwifi::C_YDwifi(PinName tx, PinName rx, PinName cts, PinName rts, PinName reset, PinName alarm, int baud): |
| kishino | 0:61c402886fbb | 22 | mUart(tx, rx), mModuleReset(reset) |
| kishino | 0:61c402886fbb | 23 | { |
| kishino | 0:61c402886fbb | 24 | mUartRecvThread_p = NULL; |
| kishino | 0:61c402886fbb | 25 | mInstance_p = this; |
| kishino | 0:61c402886fbb | 26 | mUartRequestSeq = 0; |
| kishino | 0:61c402886fbb | 27 | |
| kishino | 2:0ba43344c814 | 28 | // Initialize uart |
| kishino | 2:0ba43344c814 | 29 | gUART_RCVBUF.is_receive = false; |
| kishino | 2:0ba43344c814 | 30 | gUART_RCVBUF.size = 0; |
| kishino | 2:0ba43344c814 | 31 | mUart.baud( 115200 ); |
| kishino | 2:0ba43344c814 | 32 | mUart.format(8, SerialBase::None, 1); |
| kishino | 0:61c402886fbb | 33 | } |
| kishino | 0:61c402886fbb | 34 | |
| kishino | 0:61c402886fbb | 35 | int C_YDwifi::initUart() |
| kishino | 0:61c402886fbb | 36 | { |
| kishino | 0:61c402886fbb | 37 | // Create UART recv thread |
| kishino | 0:61c402886fbb | 38 | mUartRecvThread_p = new Thread( C_YDwifi::uartRecvThread ); |
| kishino | 0:61c402886fbb | 39 | if( mUartRecvThread_p == NULL ) |
| kishino | 0:61c402886fbb | 40 | { |
| kishino | 0:61c402886fbb | 41 | printf("[C_YDwifi::initUart] thread cread failed\r\n"); |
| kishino | 0:61c402886fbb | 42 | return -1; |
| kishino | 0:61c402886fbb | 43 | } |
| kishino | 2:0ba43344c814 | 44 | |
| kishino | 0:61c402886fbb | 45 | return 0; |
| kishino | 0:61c402886fbb | 46 | } |
| kishino | 0:61c402886fbb | 47 | |
| kishino | 2:0ba43344c814 | 48 | int C_YDwifi::sendUart( unsigned int len, unsigned char *data ) |
| kishino | 0:61c402886fbb | 49 | { |
| kishino | 2:0ba43344c814 | 50 | int ret = 0; |
| kishino | 2:0ba43344c814 | 51 | |
| kishino | 2:0ba43344c814 | 52 | mUartMutex.lock(); |
| kishino | 2:0ba43344c814 | 53 | for( int i = 0; i < len; i++ ) |
| kishino | 2:0ba43344c814 | 54 | { |
| kishino | 2:0ba43344c814 | 55 | // Write to UART |
| kishino | 2:0ba43344c814 | 56 | ret = mUart.putc( data[i] ); |
| kishino | 2:0ba43344c814 | 57 | if( ret == -1 ) |
| kishino | 2:0ba43344c814 | 58 | { |
| kishino | 2:0ba43344c814 | 59 | ret = -1; |
| kishino | 2:0ba43344c814 | 60 | break; |
| kishino | 2:0ba43344c814 | 61 | } |
| kishino | 2:0ba43344c814 | 62 | } |
| kishino | 2:0ba43344c814 | 63 | mUartMutex.unlock(); |
| kishino | 2:0ba43344c814 | 64 | return ret; |
| kishino | 0:61c402886fbb | 65 | } |
| kishino | 0:61c402886fbb | 66 | |
| kishino | 0:61c402886fbb | 67 | void C_YDwifi::uartRecvThread (void const *args_p) { |
| kishino | 2:0ba43344c814 | 68 | |
| kishino | 0:61c402886fbb | 69 | C_YDwifi *instance_p = C_YDwifi::getInstance(); |
| kishino | 0:61c402886fbb | 70 | if ( instance_p == NULL ) |
| kishino | 0:61c402886fbb | 71 | { |
| kishino | 0:61c402886fbb | 72 | printf("Socket constructor error: no wifly instance available!\r\n"); |
| kishino | 0:61c402886fbb | 73 | } |
| kishino | 0:61c402886fbb | 74 | |
| kishino | 0:61c402886fbb | 75 | int recvdata = 0; |
| kishino | 2:0ba43344c814 | 76 | int i; |
| kishino | 2:0ba43344c814 | 77 | |
| kishino | 0:61c402886fbb | 78 | /* UART recv thread main loop */ |
| kishino | 0:61c402886fbb | 79 | for (;;) |
| kishino | 0:61c402886fbb | 80 | { |
| kishino | 2:0ba43344c814 | 81 | while( instance_p->mUart.readable() ) |
| kishino | 2:0ba43344c814 | 82 | { |
| kishino | 2:0ba43344c814 | 83 | // Receive data from UART. |
| kishino | 2:0ba43344c814 | 84 | instance_p->mUartMutex.lock(); |
| kishino | 2:0ba43344c814 | 85 | recvdata = instance_p->mUart.getc(); |
| kishino | 2:0ba43344c814 | 86 | instance_p->mUartMutex.unlock(); |
| kishino | 2:0ba43344c814 | 87 | |
| kishino | 2:0ba43344c814 | 88 | // Check UART receiving flg |
| kishino | 2:0ba43344c814 | 89 | if( gUART_RCVBUF.is_receive ) |
| kishino | 2:0ba43344c814 | 90 | { |
| kishino | 2:0ba43344c814 | 91 | gUART_RCVBUF.buf[ gUART_RCVBUF.size ] = (unsigned char)recvdata; |
| kishino | 2:0ba43344c814 | 92 | gUART_RCVBUF.size++; |
| kishino | 2:0ba43344c814 | 93 | // Check received data is EOM. |
| kishino | 2:0ba43344c814 | 94 | if( recvdata == UART_CMD_EOM ) |
| kishino | 2:0ba43344c814 | 95 | { |
| kishino | 3:9f90024d7fb2 | 96 | /* |
| kishino | 2:0ba43344c814 | 97 | printf("[recv]\r\n"); |
| kishino | 2:0ba43344c814 | 98 | for( i = 0; i < gUART_RCVBUF.size; i++ ) |
| kishino | 2:0ba43344c814 | 99 | { |
| kishino | 2:0ba43344c814 | 100 | printf("%02x ", gUART_RCVBUF.buf[i]); |
| kishino | 2:0ba43344c814 | 101 | } |
| kishino | 2:0ba43344c814 | 102 | printf("\r\n"); |
| kishino | 5:ef3befe3edad | 103 | */ |
| kishino | 2:0ba43344c814 | 104 | unsigned char command_id; |
| kishino | 3:9f90024d7fb2 | 105 | // Get payload from received data from UART. |
| kishino | 3:9f90024d7fb2 | 106 | int payload_len = C_YD_UartMsg::getResponsePayload( gUART_RCVBUF.size, gUART_RCVBUF.buf |
| kishino | 3:9f90024d7fb2 | 107 | , &command_id, gUART_TEMP_BUF ); |
| kishino | 3:9f90024d7fb2 | 108 | /* |
| kishino | 3:9f90024d7fb2 | 109 | printf("[payload]\r\n"); |
| kishino | 3:9f90024d7fb2 | 110 | for( i = 0; i < payload_len; i++ ) |
| kishino | 3:9f90024d7fb2 | 111 | { |
| kishino | 3:9f90024d7fb2 | 112 | printf("%02x ", gUART_TEMP_BUF[i]); |
| kishino | 3:9f90024d7fb2 | 113 | } |
| kishino | 3:9f90024d7fb2 | 114 | printf("\r\n"); |
| kishino | 5:ef3befe3edad | 115 | */ |
| kishino | 3:9f90024d7fb2 | 116 | // Check scan results indication |
| kishino | 3:9f90024d7fb2 | 117 | if( (command_id == UART_CMD_ID_WIFI) || (gUART_TEMP_BUF[0] == UART_CMD_SID_WIFI_SCAN_RESULT_IND) ) |
| kishino | 3:9f90024d7fb2 | 118 | { |
| kishino | 3:9f90024d7fb2 | 119 | // Scan result indicate |
| kishino | 3:9f90024d7fb2 | 120 | instance_p->mUartCommand.scanResultIndicate( gUART_TEMP_BUF, payload_len ); |
| kishino | 3:9f90024d7fb2 | 121 | } |
| kishino | 2:0ba43344c814 | 122 | |
| kishino | 3:9f90024d7fb2 | 123 | // Checks in the command which is waiting. |
| kishino | 3:9f90024d7fb2 | 124 | if( instance_p->mUartCommand.isWaitingCommand(command_id, gUART_TEMP_BUF) ) |
| kishino | 2:0ba43344c814 | 125 | { |
| kishino | 3:9f90024d7fb2 | 126 | // Get buffer for payload data |
| kishino | 3:9f90024d7fb2 | 127 | unsigned char *payload_buf_p = instance_p->mUartCommand.getResponseBuf(); |
| kishino | 3:9f90024d7fb2 | 128 | if( payload_buf_p != NULL ) |
| kishino | 2:0ba43344c814 | 129 | { |
| kishino | 3:9f90024d7fb2 | 130 | memcpy( payload_buf_p, gUART_TEMP_BUF, payload_len ); |
| kishino | 3:9f90024d7fb2 | 131 | instance_p->mUartCommand.setResponseBuf( NULL ); |
| kishino | 2:0ba43344c814 | 132 | } |
| kishino | 3:9f90024d7fb2 | 133 | // Set status |
| kishino | 3:9f90024d7fb2 | 134 | instance_p->mUartCommand.setCommandStatus( gUART_TEMP_BUF[2] ); |
| kishino | 3:9f90024d7fb2 | 135 | // Set signal for command response wait. |
| kishino | 3:9f90024d7fb2 | 136 | instance_p->mUartCommand.signal(); |
| kishino | 2:0ba43344c814 | 137 | } |
| kishino | 3:9f90024d7fb2 | 138 | |
| kishino | 2:0ba43344c814 | 139 | gUART_RCVBUF.size = 0; |
| kishino | 2:0ba43344c814 | 140 | gUART_RCVBUF.is_receive = false; |
| kishino | 2:0ba43344c814 | 141 | } |
| kishino | 2:0ba43344c814 | 142 | } |
| kishino | 2:0ba43344c814 | 143 | else |
| kishino | 2:0ba43344c814 | 144 | { |
| kishino | 2:0ba43344c814 | 145 | // Check received data is SOM. |
| kishino | 2:0ba43344c814 | 146 | if( recvdata == UART_CMD_SOM ) |
| kishino | 2:0ba43344c814 | 147 | { |
| kishino | 2:0ba43344c814 | 148 | gUART_RCVBUF.size = 0; |
| kishino | 2:0ba43344c814 | 149 | gUART_RCVBUF.buf[ gUART_RCVBUF.size ] = (unsigned char)recvdata; |
| kishino | 2:0ba43344c814 | 150 | gUART_RCVBUF.size++; |
| kishino | 2:0ba43344c814 | 151 | gUART_RCVBUF.is_receive = true; |
| kishino | 2:0ba43344c814 | 152 | } |
| kishino | 2:0ba43344c814 | 153 | } |
| kishino | 2:0ba43344c814 | 154 | } |
| kishino | 2:0ba43344c814 | 155 | Thread::yield(); |
| kishino | 0:61c402886fbb | 156 | } |
| kishino | 0:61c402886fbb | 157 | } |
| kishino | 0:61c402886fbb | 158 |
