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:
MACRUM
Date:
Tue Mar 31 03:16:46 2015 +0000
Revision:
53:b53ccb9989c4
Parent:
46:876aa57be518
Added default constructor and create() method

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kishino 39:a1233ca02edf 1 /* Copyright (C) 2014 Murata Manufacturing Co.,Ltd., MIT License
kishino 41:1c1b5ad4d491 2 * muRata, SWITCH SCIENCE Wi-FI module TypeYD SNIC-UART.
kishino 20:dd736d328de6 3 *
kishino 39:a1233ca02edf 4 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
kishino 39:a1233ca02edf 5 * and associated documentation files (the "Software"), to deal in the Software without restriction,
kishino 39:a1233ca02edf 6 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
kishino 39:a1233ca02edf 7 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
kishino 39:a1233ca02edf 8 * furnished to do so, subject to the following conditions:
kishino 20:dd736d328de6 9 *
kishino 39:a1233ca02edf 10 * The above copyright notice and this permission notice shall be included in all copies or
kishino 39:a1233ca02edf 11 * substantial portions of the Software.
kishino 20:dd736d328de6 12 *
kishino 39:a1233ca02edf 13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
kishino 39:a1233ca02edf 14 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
kishino 39:a1233ca02edf 15 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
kishino 39:a1233ca02edf 16 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
kishino 39:a1233ca02edf 17 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
kishino 39:a1233ca02edf 18 */
kishino 20:dd736d328de6 19 #include "mbed.h"
kishino 20:dd736d328de6 20 #include "SNIC_Core.h"
kishino 20:dd736d328de6 21 #include "SNIC_UartMsgUtil.h"
kishino 20:dd736d328de6 22 #include <string>
kishino 20:dd736d328de6 23
kishino 29:6a0ba999597d 24 /** Wait signal ID of UART recv */
kishino 35:e4e7f86fd975 25 #define UART_DISPATCH_SIGNAL 0x00000002
kishino 20:dd736d328de6 26
kishino 35:e4e7f86fd975 27 #define UART_RECVBUF_SIZE 2048
kishino 29:6a0ba999597d 28 #define UART_THREAD_STACK_SIZE 512
kishino 39:a1233ca02edf 29 #define UART_FIXED_HEADER_SIZE 3
kishino 39:a1233ca02edf 30 #define UART_FIXED_SIZE_IN_FRAME 6
kishino 39:a1233ca02edf 31 #define UART_RECV_QUEUE_TIMEOUT 500
kishino 29:6a0ba999597d 32
kishino 20:dd736d328de6 33 typedef struct
kishino 20:dd736d328de6 34 {
kishino 35:e4e7f86fd975 35 tagMEMPOOL_BLOCK_T *mem_p;
kishino 20:dd736d328de6 36 unsigned int size;
kishino 20:dd736d328de6 37 }tagUART_RECVBUF_T;
kishino 20:dd736d328de6 38
kishino 29:6a0ba999597d 39 /*
kishino 29:6a0ba999597d 40 Define the global buffer using the area for Ethernet.
kishino 29:6a0ba999597d 41 */
kishino 46:876aa57be518 42 #if defined(TARGET_LPC1768)
kishino 46:876aa57be518 43 unsigned char gUART_TEMP_BUF[UART_RECVBUF_SIZE] __attribute__((section("AHBSRAM1")));
kishino 46:876aa57be518 44 unsigned char gUART_COMMAND_BUF[UART_REQUEST_PAYLOAD_MAX] __attribute__((section("AHBSRAM1")));
kishino 46:876aa57be518 45 /** MemoryPool for payload of UART response */
kishino 46:876aa57be518 46 MemoryPool<tagMEMPOOL_BLOCK_T, MEMPOOL_PAYLOAD_NUM> mMemPoolPayload __attribute__((section("AHBSRAM0")));
kishino 46:876aa57be518 47 /** MemoryPool for UART receive */
kishino 46:876aa57be518 48 MemoryPool<tagMEMPOOL_BLOCK_T, MEMPOOL_UART_RECV_NUM> mMemPoolUartRecv __attribute__((section("AHBSRAM0")));
kishino 46:876aa57be518 49 #else
YuuichiAkagawa 44:9d901fec86b8 50 unsigned char gUART_TEMP_BUF[UART_RECVBUF_SIZE];
YuuichiAkagawa 44:9d901fec86b8 51 unsigned char gUART_COMMAND_BUF[UART_REQUEST_PAYLOAD_MAX];
YuuichiAkagawa 44:9d901fec86b8 52 /** MemoryPool for payload of UART response */
YuuichiAkagawa 44:9d901fec86b8 53 MemoryPool<tagMEMPOOL_BLOCK_T, MEMPOOL_PAYLOAD_NUM> mMemPoolPayload;
YuuichiAkagawa 44:9d901fec86b8 54 /** MemoryPool for UART receive */
YuuichiAkagawa 44:9d901fec86b8 55 MemoryPool<tagMEMPOOL_BLOCK_T, MEMPOOL_UART_RECV_NUM> mMemPoolUartRecv;
YuuichiAkagawa 44:9d901fec86b8 56 #endif
kishino 35:e4e7f86fd975 57 Queue<tagMEMPOOL_BLOCK_T, MEMPOOL_UART_RECV_NUM> mUartRecvQueue;
kishino 29:6a0ba999597d 58
kishino 29:6a0ba999597d 59 tagMEMPOOL_BLOCK_T *gUART_RCVBUF_p;
kishino 43:d80bbb12ffe6 60 int gUART_RECV_COUNT = 0;
kishino 43:d80bbb12ffe6 61
kishino 20:dd736d328de6 62 C_SNIC_Core *C_SNIC_Core::mInstance_p = NULL;
kishino 20:dd736d328de6 63
kishino 20:dd736d328de6 64 C_SNIC_Core *C_SNIC_Core::getInstance()
kishino 20:dd736d328de6 65 {
kishino 20:dd736d328de6 66 if( mInstance_p == NULL )
kishino 20:dd736d328de6 67 {
kishino 20:dd736d328de6 68 mInstance_p = new C_SNIC_Core();
kishino 20:dd736d328de6 69 }
kishino 20:dd736d328de6 70 return mInstance_p;
kishino 20:dd736d328de6 71 }
kishino 20:dd736d328de6 72
kishino 20:dd736d328de6 73 C_SNIC_Core::C_SNIC_Core()
kishino 20:dd736d328de6 74 {
kishino 20:dd736d328de6 75 int i;
kishino 20:dd736d328de6 76
kishino 20:dd736d328de6 77 mUartCommand_p = new C_SNIC_UartCommandManager();
kishino 20:dd736d328de6 78 for( i = 0; i < MAX_SOCKET_ID+1; i++ )
kishino 20:dd736d328de6 79 {
kishino 20:dd736d328de6 80 mConnectInfo[i].recvbuf_p = NULL;
kishino 20:dd736d328de6 81 mConnectInfo[i].is_connected = false;
kishino 43:d80bbb12ffe6 82 mConnectInfo[i].is_receive_complete = true;
kishino 33:33f1bc919486 83
kishino 33:33f1bc919486 84 mUdpRecvInfo[i].recvbuf_p = NULL;
kishino 33:33f1bc919486 85 mUdpRecvInfo[i].is_received = false;
kishino 20:dd736d328de6 86 }
kishino 20:dd736d328de6 87
kishino 29:6a0ba999597d 88 mUartRecvThread_p = NULL;
kishino 29:6a0ba999597d 89 mUartRecvDispatchThread_p = NULL;
kishino 20:dd736d328de6 90 }
kishino 20:dd736d328de6 91
kishino 26:f2e1030964e4 92 C_SNIC_Core::~C_SNIC_Core()
kishino 26:f2e1030964e4 93 {
kishino 26:f2e1030964e4 94 }
kishino 26:f2e1030964e4 95
kishino 29:6a0ba999597d 96 int C_SNIC_Core::resetModule( PinName reset )
kishino 29:6a0ba999597d 97 {
kishino 29:6a0ba999597d 98 DigitalOut reset_pin( reset );
kishino 29:6a0ba999597d 99
kishino 29:6a0ba999597d 100 reset_pin = 0;
kishino 43:d80bbb12ffe6 101 wait(0.3);
kishino 29:6a0ba999597d 102 reset_pin = 1;
kishino 43:d80bbb12ffe6 103 wait(0.3);
kishino 29:6a0ba999597d 104
kishino 29:6a0ba999597d 105 return 0;
kishino 29:6a0ba999597d 106 }
kishino 29:6a0ba999597d 107
kishino 20:dd736d328de6 108 int C_SNIC_Core::initUart(PinName tx, PinName rx, int baud)
kishino 20:dd736d328de6 109 {
kishino 38:f13e4e563d65 110 mUartRequestSeq = 0;
kishino 20:dd736d328de6 111
kishino 20:dd736d328de6 112 mUart_p = new RawSerial( tx, rx );
kishino 20:dd736d328de6 113 mUart_p->baud( baud );
kishino 20:dd736d328de6 114 mUart_p->format(8, SerialBase::None, 1);
kishino 29:6a0ba999597d 115
kishino 20:dd736d328de6 116 // Initialize uart
kishino 38:f13e4e563d65 117 gUART_RCVBUF_p = NULL;
kishino 20:dd736d328de6 118
kishino 35:e4e7f86fd975 119 mUart_p->attach( C_SNIC_Core::uartRecvCallback );
kishino 29:6a0ba999597d 120 // Create UART recv dispatch thread
kishino 29:6a0ba999597d 121 mUartRecvDispatchThread_p = new Thread( C_SNIC_Core::uartRecvDispatchThread, NULL, osPriorityNormal, UART_THREAD_STACK_SIZE);
kishino 29:6a0ba999597d 122 if( mUartRecvDispatchThread_p == NULL )
kishino 20:dd736d328de6 123 {
kishino 40:b6b10c22a121 124 DEBUG_PRINT("[C_SNIC_Core::initUart] thread create failed\r\n");
kishino 20:dd736d328de6 125 return -1;
kishino 20:dd736d328de6 126 }
kishino 20:dd736d328de6 127
kishino 20:dd736d328de6 128 return 0;
kishino 20:dd736d328de6 129 }
kishino 38:f13e4e563d65 130 unsigned int C_SNIC_Core::preparationSendCommand( unsigned char cmd_id, unsigned char cmd_sid
kishino 20:dd736d328de6 131 , unsigned char *req_buf_p, unsigned int req_buf_len
kishino 20:dd736d328de6 132 , unsigned char *response_buf_p, unsigned char *command_p )
kishino 20:dd736d328de6 133 {
kishino 38:f13e4e563d65 134 unsigned int command_len = 0;
kishino 20:dd736d328de6 135
kishino 20:dd736d328de6 136 // Make all command request
kishino 36:f33fcf5975ab 137 command_len = C_SNIC_UartMsgUtil::makeRequest( cmd_id, req_buf_p, req_buf_len, command_p );
kishino 20:dd736d328de6 138
kishino 20:dd736d328de6 139 // Set data for response
kishino 20:dd736d328de6 140 mUartCommand_p->setCommandID( cmd_id );
kishino 20:dd736d328de6 141 mUartCommand_p->setCommandSID( cmd_sid | 0x80 );
kishino 20:dd736d328de6 142 mUartCommand_p->setResponseBuf( response_buf_p );
kishino 20:dd736d328de6 143
kishino 20:dd736d328de6 144 return command_len;
kishino 20:dd736d328de6 145 }
kishino 20:dd736d328de6 146
kishino 20:dd736d328de6 147 int C_SNIC_Core::sendUart( unsigned int len, unsigned char *data )
kishino 20:dd736d328de6 148 {
kishino 20:dd736d328de6 149 int ret = 0;
kishino 20:dd736d328de6 150 mUartMutex.lock();
kishino 20:dd736d328de6 151 for( int i = 0; i < len; i++ )
kishino 20:dd736d328de6 152 {
kishino 20:dd736d328de6 153 // Write to UART
kishino 20:dd736d328de6 154 ret = mUart_p->putc( data[i] );
kishino 20:dd736d328de6 155 if( ret == -1 )
kishino 20:dd736d328de6 156 {
kishino 20:dd736d328de6 157 break;
kishino 20:dd736d328de6 158 }
kishino 20:dd736d328de6 159 }
kishino 20:dd736d328de6 160 mUartMutex.unlock();
kishino 36:f33fcf5975ab 161
kishino 20:dd736d328de6 162 return ret;
kishino 20:dd736d328de6 163 }
kishino 20:dd736d328de6 164
kishino 29:6a0ba999597d 165 tagMEMPOOL_BLOCK_T *C_SNIC_Core::allocCmdBuf()
kishino 20:dd736d328de6 166 {
kishino 20:dd736d328de6 167 // Get buffer from MemoryPool
kishino 20:dd736d328de6 168 return mMemPoolPayload.alloc();
kishino 20:dd736d328de6 169 }
kishino 20:dd736d328de6 170
kishino 20:dd736d328de6 171 void C_SNIC_Core::freeCmdBuf( tagMEMPOOL_BLOCK_T *buf_p )
kishino 20:dd736d328de6 172 {
kishino 20:dd736d328de6 173 mMemPoolPayload.free( buf_p );
kishino 20:dd736d328de6 174 }
kishino 20:dd736d328de6 175
kishino 29:6a0ba999597d 176 tagMEMPOOL_BLOCK_T *C_SNIC_Core::allocUartRcvBuf()
kishino 29:6a0ba999597d 177 {
kishino 29:6a0ba999597d 178 // Get buffer from MemoryPool
kishino 29:6a0ba999597d 179 return mMemPoolUartRecv.alloc();
kishino 29:6a0ba999597d 180 }
kishino 29:6a0ba999597d 181
kishino 29:6a0ba999597d 182 void C_SNIC_Core::freeUartRecvBuf( tagMEMPOOL_BLOCK_T *buf_p )
kishino 29:6a0ba999597d 183 {
kishino 29:6a0ba999597d 184 mMemPoolUartRecv.free( buf_p );
kishino 29:6a0ba999597d 185 }
kishino 29:6a0ba999597d 186
kishino 22:a9ec0cad4f84 187 C_SNIC_Core::tagCONNECT_INFO_T *C_SNIC_Core::getConnectInfo( int socket_id )
kishino 20:dd736d328de6 188 {
kishino 20:dd736d328de6 189 if( (socket_id < 0) || (socket_id > MAX_SOCKET_ID) )
kishino 20:dd736d328de6 190 {
kishino 20:dd736d328de6 191 return NULL;
kishino 20:dd736d328de6 192 }
kishino 20:dd736d328de6 193 return &mConnectInfo[socket_id];
kishino 20:dd736d328de6 194 }
kishino 20:dd736d328de6 195
kishino 33:33f1bc919486 196 C_SNIC_Core::tagUDP_RECVINFO_T *C_SNIC_Core::getUdpRecvInfo( int socket_id )
kishino 33:33f1bc919486 197 {
kishino 33:33f1bc919486 198 if( (socket_id < 0) || (socket_id > MAX_SOCKET_ID) )
kishino 33:33f1bc919486 199 {
kishino 33:33f1bc919486 200 return NULL;
kishino 33:33f1bc919486 201 }
kishino 33:33f1bc919486 202 return &mUdpRecvInfo[socket_id];
kishino 33:33f1bc919486 203 }
kishino 33:33f1bc919486 204
kishino 20:dd736d328de6 205 C_SNIC_UartCommandManager *C_SNIC_Core::getUartCommand()
kishino 20:dd736d328de6 206 {
kishino 20:dd736d328de6 207 return mUartCommand_p;
kishino 20:dd736d328de6 208 }
kishino 20:dd736d328de6 209
kishino 29:6a0ba999597d 210 unsigned char *C_SNIC_Core::getCommandBuf()
kishino 29:6a0ba999597d 211 {
kishino 29:6a0ba999597d 212 return gUART_COMMAND_BUF;
kishino 29:6a0ba999597d 213 }
kishino 20:dd736d328de6 214
kishino 43:d80bbb12ffe6 215 void C_SNIC_Core::lockAPI( void )
kishino 43:d80bbb12ffe6 216 {
kishino 43:d80bbb12ffe6 217 mAPIMutex.lock();
kishino 43:d80bbb12ffe6 218 }
kishino 43:d80bbb12ffe6 219
kishino 43:d80bbb12ffe6 220 void C_SNIC_Core::unlockAPI( void )
kishino 43:d80bbb12ffe6 221 {
kishino 43:d80bbb12ffe6 222 mAPIMutex.unlock();
kishino 43:d80bbb12ffe6 223 }
kishino 43:d80bbb12ffe6 224
kishino 29:6a0ba999597d 225 void C_SNIC_Core::uartRecvCallback( void )
kishino 29:6a0ba999597d 226 {
kishino 20:dd736d328de6 227 C_SNIC_Core *instance_p = C_SNIC_Core::getInstance();
kishino 29:6a0ba999597d 228 if( instance_p != NULL )
kishino 20:dd736d328de6 229 {
kishino 29:6a0ba999597d 230 int recvdata = 0;
kishino 20:dd736d328de6 231
kishino 39:a1233ca02edf 232 // Check received data from UART.
kishino 39:a1233ca02edf 233 while( instance_p->mUart_p->readable() )
kishino 20:dd736d328de6 234 {
kishino 20:dd736d328de6 235 // Receive data from UART.
kishino 20:dd736d328de6 236 recvdata = instance_p->mUart_p->getc();
kishino 20:dd736d328de6 237
kishino 29:6a0ba999597d 238 // Check UART receiving buffer
kishino 29:6a0ba999597d 239 if( gUART_RCVBUF_p != NULL )
kishino 20:dd736d328de6 240 {
kishino 29:6a0ba999597d 241 gUART_RCVBUF_p->buf[ gUART_RCVBUF_p->size ] = (unsigned char)recvdata;
kishino 29:6a0ba999597d 242 gUART_RCVBUF_p->size++;
kishino 29:6a0ba999597d 243
kishino 39:a1233ca02edf 244 if( gUART_RCVBUF_p->size == UART_FIXED_HEADER_SIZE )
kishino 20:dd736d328de6 245 {
kishino 36:f33fcf5975ab 246 // get demand size
kishino 36:f33fcf5975ab 247 unsigned short payload_len = ( ( (gUART_RCVBUF_p->buf[1] & ~0x80) & 0xff) | ( ( (gUART_RCVBUF_p->buf[2] & ~0xC0) << 7) & 0xff80) );
kishino 39:a1233ca02edf 248 gUART_RCVBUF_p->demand_size = payload_len + UART_FIXED_SIZE_IN_FRAME;
kishino 39:a1233ca02edf 249 if( gUART_RCVBUF_p->demand_size > MEMPOOL_BLOCK_SIZE )
kishino 39:a1233ca02edf 250 {
kishino 39:a1233ca02edf 251 gUART_RCVBUF_p->demand_size = MEMPOOL_BLOCK_SIZE;
kishino 39:a1233ca02edf 252 }
kishino 36:f33fcf5975ab 253 }
kishino 36:f33fcf5975ab 254
kishino 36:f33fcf5975ab 255 if( gUART_RCVBUF_p->demand_size > 0 )
kishino 36:f33fcf5975ab 256 {
kishino 36:f33fcf5975ab 257 // Check size of received data.
kishino 36:f33fcf5975ab 258 if( gUART_RCVBUF_p->size >= gUART_RCVBUF_p->demand_size )
kishino 36:f33fcf5975ab 259 {
kishino 36:f33fcf5975ab 260 // Add queue
kishino 36:f33fcf5975ab 261 mUartRecvQueue.put( gUART_RCVBUF_p );
kishino 36:f33fcf5975ab 262
kishino 36:f33fcf5975ab 263 gUART_RCVBUF_p = NULL;
kishino 20:dd736d328de6 264
kishino 43:d80bbb12ffe6 265 if( gUART_RECV_COUNT >= MEMPOOL_UART_RECV_NUM )
kishino 43:d80bbb12ffe6 266 {
kishino 43:d80bbb12ffe6 267 instance_p->mUart_p->attach( NULL );
kishino 43:d80bbb12ffe6 268 }
kishino 36:f33fcf5975ab 269 // set signal for dispatch thread
kishino 36:f33fcf5975ab 270 instance_p->mUartRecvDispatchThread_p->signal_set( UART_DISPATCH_SIGNAL );
kishino 43:d80bbb12ffe6 271 break;
kishino 36:f33fcf5975ab 272 }
kishino 20:dd736d328de6 273 }
kishino 20:dd736d328de6 274 }
kishino 20:dd736d328de6 275 else
kishino 20:dd736d328de6 276 {
kishino 20:dd736d328de6 277 // Check received data is SOM.
kishino 20:dd736d328de6 278 if( recvdata == UART_CMD_SOM )
kishino 20:dd736d328de6 279 {
kishino 29:6a0ba999597d 280 gUART_RCVBUF_p = instance_p->allocUartRcvBuf();
kishino 43:d80bbb12ffe6 281 gUART_RECV_COUNT++;
kishino 29:6a0ba999597d 282 gUART_RCVBUF_p->size = 0;
kishino 36:f33fcf5975ab 283 gUART_RCVBUF_p->demand_size = 0;
kishino 43:d80bbb12ffe6 284
kishino 29:6a0ba999597d 285 // get buffer for Uart receive
kishino 29:6a0ba999597d 286 gUART_RCVBUF_p->buf[ 0 ] = (unsigned char)recvdata;
kishino 29:6a0ba999597d 287
kishino 29:6a0ba999597d 288 gUART_RCVBUF_p->size++;
kishino 20:dd736d328de6 289 }
kishino 20:dd736d328de6 290 }
kishino 20:dd736d328de6 291 }
kishino 20:dd736d328de6 292 }
kishino 20:dd736d328de6 293 }
kishino 20:dd736d328de6 294
kishino 29:6a0ba999597d 295 void C_SNIC_Core::uartRecvDispatchThread (void const *args_p)
kishino 29:6a0ba999597d 296 {
kishino 29:6a0ba999597d 297 C_SNIC_Core *instance_p = C_SNIC_Core::getInstance();
kishino 29:6a0ba999597d 298 C_SNIC_UartCommandManager *uartCmdMgr_p = instance_p->getUartCommand();
kishino 29:6a0ba999597d 299
kishino 29:6a0ba999597d 300 tagMEMPOOL_BLOCK_T *uartRecvBuf_p;
kishino 29:6a0ba999597d 301 osEvent evt;
kishino 29:6a0ba999597d 302
kishino 29:6a0ba999597d 303 for(;;)
kishino 29:6a0ba999597d 304 {
kishino 29:6a0ba999597d 305 // wait
kishino 29:6a0ba999597d 306 Thread::signal_wait( UART_DISPATCH_SIGNAL );
kishino 29:6a0ba999597d 307
kishino 29:6a0ba999597d 308 // Get scanresults from queue
kishino 39:a1233ca02edf 309 evt = mUartRecvQueue.get(UART_RECV_QUEUE_TIMEOUT);
kishino 29:6a0ba999597d 310 if (evt.status == osEventMessage)
kishino 29:6a0ba999597d 311 {
kishino 29:6a0ba999597d 312 do
kishino 29:6a0ba999597d 313 {
kishino 29:6a0ba999597d 314 uartRecvBuf_p = (tagMEMPOOL_BLOCK_T *)evt.value.p;
kishino 29:6a0ba999597d 315
kishino 38:f13e4e563d65 316 #if 0 /* for Debug */
kishino 29:6a0ba999597d 317 {
kishino 29:6a0ba999597d 318 int i;
kishino 29:6a0ba999597d 319 for(i=0;i<uartRecvBuf_p->size;i++)
kishino 29:6a0ba999597d 320 {
kishino 40:b6b10c22a121 321 DEBUG_PRINT("%02x", uartRecvBuf_p->buf[i]);
kishino 29:6a0ba999597d 322 }
kishino 40:b6b10c22a121 323 DEBUG_PRINT("\r\n");
kishino 29:6a0ba999597d 324 }
kishino 32:ae95309643aa 325 #endif
kishino 29:6a0ba999597d 326 unsigned char command_id;
kishino 29:6a0ba999597d 327 // Get payload from received data from UART.
kishino 29:6a0ba999597d 328 int payload_len = C_SNIC_UartMsgUtil::getResponsePayload( uartRecvBuf_p->size, uartRecvBuf_p->buf
kishino 29:6a0ba999597d 329 , &command_id, gUART_TEMP_BUF );
kishino 33:33f1bc919486 330 // Check receive a TCP packet
kishino 29:6a0ba999597d 331 if( (command_id == UART_CMD_ID_SNIC) && (gUART_TEMP_BUF[0] == UART_CMD_SID_SNIC_CONNECTION_RECV_IND) )
kishino 29:6a0ba999597d 332 {
kishino 29:6a0ba999597d 333 // Packet buffering
kishino 29:6a0ba999597d 334 uartCmdMgr_p->bufferredPacket( gUART_TEMP_BUF, payload_len );
kishino 29:6a0ba999597d 335 }
kishino 32:ae95309643aa 336 // Check connected from TCP client
kishino 32:ae95309643aa 337 else if( (command_id == UART_CMD_ID_SNIC) && (gUART_TEMP_BUF[0] == UART_CMD_SID_SNIC_TCP_CLIENT_SOCKET_IND) )
kishino 32:ae95309643aa 338 {
kishino 32:ae95309643aa 339 // Connected from TCP client
kishino 32:ae95309643aa 340 uartCmdMgr_p->connectedTCPClient( gUART_TEMP_BUF, payload_len );
kishino 32:ae95309643aa 341 }
kishino 33:33f1bc919486 342 // Check receive UDP packet
kishino 33:33f1bc919486 343 else if( (command_id == UART_CMD_ID_SNIC) && (gUART_TEMP_BUF[0] == UART_CMD_SID_SNIC_UDP_RECV_IND) )
kishino 33:33f1bc919486 344 {
kishino 33:33f1bc919486 345 // UDP packet buffering
kishino 33:33f1bc919486 346 uartCmdMgr_p->bufferredUDPPacket( gUART_TEMP_BUF, payload_len );
kishino 33:33f1bc919486 347 }
kishino 29:6a0ba999597d 348 // Check scan results indication
kishino 29:6a0ba999597d 349 else if( (command_id == UART_CMD_ID_WIFI) && (gUART_TEMP_BUF[0] == UART_CMD_SID_WIFI_SCAN_RESULT_IND) )
kishino 29:6a0ba999597d 350 {
kishino 29:6a0ba999597d 351 // Scan result indicate
kishino 29:6a0ba999597d 352 uartCmdMgr_p->scanResultIndicate( gUART_TEMP_BUF, payload_len );
kishino 29:6a0ba999597d 353 }
kishino 29:6a0ba999597d 354 // Checks in the command which is waiting.
kishino 29:6a0ba999597d 355 else if( uartCmdMgr_p->isWaitingCommand(command_id, gUART_TEMP_BUF) )
kishino 29:6a0ba999597d 356 {
kishino 29:6a0ba999597d 357 // Get buffer for payload data
kishino 29:6a0ba999597d 358 unsigned char *payload_buf_p = uartCmdMgr_p->getResponseBuf();
kishino 29:6a0ba999597d 359 if( payload_buf_p != NULL )
kishino 29:6a0ba999597d 360 {
kishino 29:6a0ba999597d 361 memcpy( payload_buf_p, gUART_TEMP_BUF, payload_len );
kishino 29:6a0ba999597d 362 uartCmdMgr_p->setResponseBuf( NULL );
kishino 29:6a0ba999597d 363 }
kishino 29:6a0ba999597d 364 // Set status
kishino 29:6a0ba999597d 365 uartCmdMgr_p->setCommandStatus( gUART_TEMP_BUF[2] );
kishino 29:6a0ba999597d 366 // Set signal for command response wait.
kishino 29:6a0ba999597d 367 uartCmdMgr_p->signal();
kishino 29:6a0ba999597d 368 }
kishino 39:a1233ca02edf 369 else
kishino 39:a1233ca02edf 370 {
kishino 43:d80bbb12ffe6 371 //DEBUG_PRINT(" The received data is not expected.\r\n");
kishino 39:a1233ca02edf 372 }
kishino 39:a1233ca02edf 373
kishino 29:6a0ba999597d 374 //
kishino 29:6a0ba999597d 375 instance_p->freeUartRecvBuf( uartRecvBuf_p );
kishino 43:d80bbb12ffe6 376 gUART_RECV_COUNT--;
kishino 43:d80bbb12ffe6 377 if( gUART_RECV_COUNT == (MEMPOOL_UART_RECV_NUM-1) )
kishino 43:d80bbb12ffe6 378 {
kishino 43:d80bbb12ffe6 379 instance_p->mUart_p->attach( C_SNIC_Core::uartRecvCallback ); //debug
kishino 43:d80bbb12ffe6 380 }
kishino 29:6a0ba999597d 381
kishino 29:6a0ba999597d 382 evt = mUartRecvQueue.get(500);
kishino 29:6a0ba999597d 383 } while( evt.status == osEventMessage );
kishino 29:6a0ba999597d 384 }
kishino 29:6a0ba999597d 385 }
kishino 29:6a0ba999597d 386 }