NNN40_CLI_HOST_WIFI : 1.0.3. NNN40 CLI host demo code.LPC1768 is CLI host, P9 (TX)/P10 (RX), baud reate : 115200

Dependencies:   C12832 mbed-rtos mbed websocket_demo

Fork of NNN40_CLI_HOST_WIFI by Gordon Lu

  1. TEST_TCP_CLIENT (1) => NNN40 is in client mode
  2. TEST_TCP_CLIENT (0) => NNN40 is in server mode
Committer:
gordonlu
Date:
Tue Jul 21 07:58:43 2015 +0000
Revision:
13:c9ecf749d6fd
Parent:
12:b68d0162da48
NNN40_CLI_HOST_WIFI : 1.0.3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gordonlu 7:71124ec77f83 1 #include "mbed.h"
gordonlu 10:a0dc152a0060 2 #include "string"
gordonlu 7:71124ec77f83 3 #include "C12832.h"
gordonlu 10:a0dc152a0060 4
gordonlu 11:362f6022ffef 5
gordonlu 11:362f6022ffef 6
gordonlu 11:362f6022ffef 7
gordonlu 11:362f6022ffef 8
gordonlu 11:362f6022ffef 9
gordonlu 11:362f6022ffef 10 //NNN40 is server or client
gordonlu 11:362f6022ffef 11 #define TEST_TCP_CLIENT (1)
gordonlu 11:362f6022ffef 12
gordonlu 10:a0dc152a0060 13 //debug message
gordonlu 10:a0dc152a0060 14 #define MESSAGE_TO_LCD (1)
gordonlu 10:a0dc152a0060 15 #define MESSAGE_TO_UART (1)
gordonlu 10:a0dc152a0060 16
gordonlu 10:a0dc152a0060 17
gordonlu 10:a0dc152a0060 18 //measure reponse time
gordonlu 10:a0dc152a0060 19 #define MEASURE_RESPONSE_TIME (0)
gordonlu 10:a0dc152a0060 20
gordonlu 10:a0dc152a0060 21 //UART baud rate
gordonlu 10:a0dc152a0060 22 #define BAUD_RATE_CLI (115200)
gordonlu 10:a0dc152a0060 23 #define BAUD_RATE_UART (115200)
gordonlu 7:71124ec77f83 24
gordonlu 10:a0dc152a0060 25 //CLI parameters
gordonlu 11:362f6022ffef 26 #define CLI_COMMAND_MAX_SIZE (128)
gordonlu 11:362f6022ffef 27 #define CLI_SEND_DATA_MAX_SIZE (CLI_COMMAND_MAX_SIZE - 26)
gordonlu 11:362f6022ffef 28 #define CLI_RECEIVE_DATA_MAX_SIZE (128)
gordonlu 11:362f6022ffef 29 #define CLI_RESPONSE_MAX_SIZE (128)
gordonlu 11:362f6022ffef 30 #define CLI_RETRY_MAX (3)
gordonlu 11:362f6022ffef 31 #define CLI_RESPONSE_TIMEOUT (2725350) //1 sec
gordonlu 10:a0dc152a0060 32
gordonlu 10:a0dc152a0060 33
gordonlu 10:a0dc152a0060 34 #define DEFAULT_AP_NAME "Airport123"
gordonlu 10:a0dc152a0060 35 #define DEFAULT_AP_PASSWORD "12345678"
gordonlu 10:a0dc152a0060 36 #define DEFAULT_HOST_IP "10.0.1.3"
gordonlu 10:a0dc152a0060 37 #define DEFAULT_HOST_PORT (5222)
gordonlu 10:a0dc152a0060 38 #define DEFAULT_CLI_TIMEOUT_SEC (3) //3 sec
gordonlu 10:a0dc152a0060 39
gordonlu 10:a0dc152a0060 40
gordonlu 11:362f6022ffef 41 //version string
gordonlu 13:c9ecf749d6fd 42 #define VERSION_STRING ("NNN40_CLI_HOST_WIFI : 1.0.3")
gordonlu 11:362f6022ffef 43
gordonlu 11:362f6022ffef 44
gordonlu 11:362f6022ffef 45 enum WORKINGSTAGE {INITWIFI, TCP_CONNECT_TO_HOST, TCP_LISTEN_FROM_CLIENT, TCP_SEND, TCP_RECEIVE};
gordonlu 11:362f6022ffef 46
gordonlu 10:a0dc152a0060 47
gordonlu 7:71124ec77f83 48 C12832 lcd(p5, p7, p6, p8, p11);
gordonlu 7:71124ec77f83 49 DigitalOut myled1(LED1);
gordonlu 7:71124ec77f83 50 DigitalOut myled2(LED2);
gordonlu 7:71124ec77f83 51 DigitalOut myled3(LED3);
gordonlu 7:71124ec77f83 52 DigitalOut myled4(LED4);
gordonlu 10:a0dc152a0060 53
gordonlu 10:a0dc152a0060 54
gordonlu 10:a0dc152a0060 55 Serial pc(USBTX, USBRX);//debug port , 115200
gordonlu 10:a0dc152a0060 56 Serial cli(p9, p10); //CLI port, 115200
gordonlu 10:a0dc152a0060 57
gordonlu 10:a0dc152a0060 58 //CLI response buffer
gordonlu 10:a0dc152a0060 59 static char RESULT[CLI_RESPONSE_MAX_SIZE];
gordonlu 10:a0dc152a0060 60
gordonlu 8:421c13d323a0 61
gordonlu 11:362f6022ffef 62
gordonlu 11:362f6022ffef 63
gordonlu 10:a0dc152a0060 64 void message(const char * const msg, bool isClearLcd = true, int lcd_X = 0, int lcd_Y = 0)
gordonlu 10:a0dc152a0060 65 {
gordonlu 10:a0dc152a0060 66 #if(MESSAGE_TO_UART)
gordonlu 10:a0dc152a0060 67 puts(msg);
gordonlu 10:a0dc152a0060 68 #endif
gordonlu 10:a0dc152a0060 69
gordonlu 10:a0dc152a0060 70
gordonlu 10:a0dc152a0060 71 #if(MESSAGE_TO_LCD)
gordonlu 10:a0dc152a0060 72 if(isClearLcd)lcd.cls();
gordonlu 10:a0dc152a0060 73 lcd.locate(lcd_X,lcd_Y);
gordonlu 10:a0dc152a0060 74 lcd.puts(msg);
gordonlu 10:a0dc152a0060 75 #endif
gordonlu 10:a0dc152a0060 76 }
gordonlu 7:71124ec77f83 77
gordonlu 10:a0dc152a0060 78 bool CLI_wait4Response(unsigned int timeout_sec)
gordonlu 10:a0dc152a0060 79 {
gordonlu 8:421c13d323a0 80
gordonlu 10:a0dc152a0060 81 bool rc = false;
gordonlu 10:a0dc152a0060 82 int i = 0;
gordonlu 10:a0dc152a0060 83 int c = 0;
gordonlu 11:362f6022ffef 84 const unsigned tosec = CLI_RESPONSE_TIMEOUT * timeout_sec;
gordonlu 11:362f6022ffef 85 unsigned int to = tosec;
gordonlu 8:421c13d323a0 86
gordonlu 10:a0dc152a0060 87 #if (MEASURE_RESPONSE_TIME)
gordonlu 10:a0dc152a0060 88 int j = 0;
gordonlu 10:a0dc152a0060 89 #endif
gordonlu 10:a0dc152a0060 90
gordonlu 10:a0dc152a0060 91 //clear buffer
gordonlu 10:a0dc152a0060 92 memset(RESULT,0,sizeof(RESULT));
gordonlu 10:a0dc152a0060 93
gordonlu 10:a0dc152a0060 94 #if (MEASURE_RESPONSE_TIME)
gordonlu 10:a0dc152a0060 95 while(1)
gordonlu 10:a0dc152a0060 96 #else
gordonlu 10:a0dc152a0060 97 while(--to)
gordonlu 10:a0dc152a0060 98 #endif
gordonlu 10:a0dc152a0060 99
gordonlu 10:a0dc152a0060 100 {
gordonlu 10:a0dc152a0060 101 #if (MEASURE_RESPONSE_TIME)
gordonlu 10:a0dc152a0060 102 ++j;
gordonlu 10:a0dc152a0060 103 #endif
gordonlu 10:a0dc152a0060 104
gordonlu 10:a0dc152a0060 105 if(cli.readable() && EOF != (c = cli.getc()))
gordonlu 10:a0dc152a0060 106 {
gordonlu 10:a0dc152a0060 107 if( c!=0x0D && c!= 0x0A)
gordonlu 10:a0dc152a0060 108 {
gordonlu 10:a0dc152a0060 109 if(i < sizeof(RESULT))
gordonlu 10:a0dc152a0060 110 {
gordonlu 10:a0dc152a0060 111 RESULT[i++] = (char)c;
gordonlu 11:362f6022ffef 112 to = tosec;
gordonlu 10:a0dc152a0060 113 }
gordonlu 10:a0dc152a0060 114 }
gordonlu 10:a0dc152a0060 115 else if( 0 != i) //get one line response
gordonlu 10:a0dc152a0060 116 {
gordonlu 10:a0dc152a0060 117 #if (MEASURE_RESPONSE_TIME)
gordonlu 10:a0dc152a0060 118 printf("MEASURE_RESPONSE_TIME : %d\n",j);
gordonlu 11:362f6022ffef 119 #endif
gordonlu 11:362f6022ffef 120
gordonlu 11:362f6022ffef 121
gordonlu 11:362f6022ffef 122 if(0 == strncmp(RESULT,"OK",2) || 0 == strncmp(RESULT,"ERROR",5))
gordonlu 11:362f6022ffef 123 {
gordonlu 11:362f6022ffef 124 break;
gordonlu 11:362f6022ffef 125 }
gordonlu 11:362f6022ffef 126 else //if not OK or ERROR, keep waiting
gordonlu 11:362f6022ffef 127 {
gordonlu 11:362f6022ffef 128 message(RESULT);
gordonlu 11:362f6022ffef 129 memset(RESULT,0,sizeof(RESULT));
gordonlu 11:362f6022ffef 130 i = 0;
gordonlu 11:362f6022ffef 131 }
gordonlu 8:421c13d323a0 132
gordonlu 10:a0dc152a0060 133 }
gordonlu 10:a0dc152a0060 134 }
gordonlu 8:421c13d323a0 135 }
gordonlu 8:421c13d323a0 136
gordonlu 11:362f6022ffef 137 if( 0 == to )
gordonlu 10:a0dc152a0060 138 {
gordonlu 10:a0dc152a0060 139 memcpy(RESULT,"ERROR;CLI Timeout",17);
gordonlu 10:a0dc152a0060 140 }
gordonlu 10:a0dc152a0060 141 else if (RESULT[0] == 'O' && RESULT[1] == 'K')
gordonlu 10:a0dc152a0060 142 {
gordonlu 10:a0dc152a0060 143 rc = true;
gordonlu 10:a0dc152a0060 144 }
gordonlu 10:a0dc152a0060 145
gordonlu 10:a0dc152a0060 146 return rc;
gordonlu 8:421c13d323a0 147 }
gordonlu 8:421c13d323a0 148
gordonlu 10:a0dc152a0060 149 bool CLI_command(const char * cmd, unsigned int timeout_sec)
gordonlu 10:a0dc152a0060 150 {
gordonlu 10:a0dc152a0060 151 bool rc = false;
gordonlu 10:a0dc152a0060 152
gordonlu 10:a0dc152a0060 153 message(cmd);
gordonlu 10:a0dc152a0060 154
gordonlu 10:a0dc152a0060 155 //clear rx buffer at first
gordonlu 10:a0dc152a0060 156 while(cli.readable())
gordonlu 10:a0dc152a0060 157 {
gordonlu 10:a0dc152a0060 158 cli.getc();
gordonlu 10:a0dc152a0060 159 }
gordonlu 10:a0dc152a0060 160
gordonlu 10:a0dc152a0060 161 //send CLI command
gordonlu 10:a0dc152a0060 162 cli.puts(cmd);
gordonlu 10:a0dc152a0060 163
gordonlu 10:a0dc152a0060 164 //wait for reponse
gordonlu 10:a0dc152a0060 165 rc = CLI_wait4Response(timeout_sec);
gordonlu 10:a0dc152a0060 166
gordonlu 10:a0dc152a0060 167 message(RESULT,false,0,11);
gordonlu 10:a0dc152a0060 168
gordonlu 10:a0dc152a0060 169 return rc;
gordonlu 10:a0dc152a0060 170 }
gordonlu 10:a0dc152a0060 171
gordonlu 11:362f6022ffef 172 bool CLI_CMD(const char * cmd, unsigned int timeout_sec = DEFAULT_CLI_TIMEOUT_SEC, bool autoRetry = true)
gordonlu 8:421c13d323a0 173 {
gordonlu 10:a0dc152a0060 174 bool rc = false;
gordonlu 10:a0dc152a0060 175
gordonlu 10:a0dc152a0060 176 if(autoRetry)
gordonlu 10:a0dc152a0060 177 {
gordonlu 10:a0dc152a0060 178 for(int i=0; i<=CLI_RETRY_MAX; ++i)
gordonlu 8:421c13d323a0 179 {
gordonlu 9:999997e8e4cc 180
gordonlu 10:a0dc152a0060 181 if(CLI_command(cmd, timeout_sec))
gordonlu 9:999997e8e4cc 182 {
gordonlu 10:a0dc152a0060 183 rc = true;
gordonlu 10:a0dc152a0060 184 break;
gordonlu 10:a0dc152a0060 185 }
gordonlu 10:a0dc152a0060 186
gordonlu 10:a0dc152a0060 187 wait(2); //wait for a while
gordonlu 10:a0dc152a0060 188 }
gordonlu 10:a0dc152a0060 189 }
gordonlu 10:a0dc152a0060 190 else
gordonlu 10:a0dc152a0060 191 {
gordonlu 10:a0dc152a0060 192 rc = CLI_command(cmd, timeout_sec);
gordonlu 10:a0dc152a0060 193 }
gordonlu 10:a0dc152a0060 194
gordonlu 10:a0dc152a0060 195 return rc;
gordonlu 9:999997e8e4cc 196 }
gordonlu 9:999997e8e4cc 197
gordonlu 10:a0dc152a0060 198 bool initWifi(const char * apName = DEFAULT_AP_NAME, const char * apPassword = DEFAULT_AP_PASSWORD)
gordonlu 9:999997e8e4cc 199 {
gordonlu 10:a0dc152a0060 200 //reset module
gordonlu 10:a0dc152a0060 201 if (!CLI_CMD("cynb reset\r")) return false;
gordonlu 10:a0dc152a0060 202
gordonlu 10:a0dc152a0060 203 //wait for reset completely
gordonlu 10:a0dc152a0060 204 wait(2);
gordonlu 10:a0dc152a0060 205
gordonlu 10:a0dc152a0060 206 //get infomation of module
gordonlu 10:a0dc152a0060 207 if(!CLI_CMD("cynb info\r")) return false;
gordonlu 10:a0dc152a0060 208
gordonlu 10:a0dc152a0060 209 //switch to wifi module
gordonlu 10:a0dc152a0060 210 if(!CLI_CMD("cynw device_switch 1\r")) return false;
gordonlu 10:a0dc152a0060 211
gordonlu 10:a0dc152a0060 212 //setup AP anme and password
gordonlu 11:362f6022ffef 213 char cmd[CLI_COMMAND_MAX_SIZE];
gordonlu 10:a0dc152a0060 214 sprintf(cmd, "cynw device_network %s %s 0\r", apName, apPassword);
gordonlu 10:a0dc152a0060 215 if(!CLI_CMD(cmd))return false;
gordonlu 10:a0dc152a0060 216
gordonlu 10:a0dc152a0060 217 //init ethernet
gordonlu 12:b68d0162da48 218 if(!CLI_CMD("cynw ethernet_init\r",10))return false;
gordonlu 10:a0dc152a0060 219
gordonlu 11:362f6022ffef 220 //connecting...,
gordonlu 11:362f6022ffef 221 if (!CLI_CMD("cynw ethernet_connect 40000\r",45))return false;
gordonlu 10:a0dc152a0060 222
gordonlu 10:a0dc152a0060 223 //get mac address
gordonlu 10:a0dc152a0060 224 if(!CLI_CMD("cynw ethernet_mac\r"))return false;
gordonlu 10:a0dc152a0060 225
gordonlu 10:a0dc152a0060 226
gordonlu 10:a0dc152a0060 227 //get ip address
gordonlu 10:a0dc152a0060 228 if(!CLI_CMD("cynw ethernet_ip\r"))return false;
gordonlu 10:a0dc152a0060 229
gordonlu 10:a0dc152a0060 230 return true;
gordonlu 10:a0dc152a0060 231 }
gordonlu 11:362f6022ffef 232 bool isTCPConnected()
gordonlu 11:362f6022ffef 233 {
gordonlu 11:362f6022ffef 234 if(!CLI_CMD("cynw tcp_connection_is_connect\r")) return false;
gordonlu 11:362f6022ffef 235
gordonlu 11:362f6022ffef 236 if(strncmp(RESULT, "OK;TRUE", 7) == 0) return true;
gordonlu 11:362f6022ffef 237
gordonlu 11:362f6022ffef 238 return false;
gordonlu 11:362f6022ffef 239 }
gordonlu 11:362f6022ffef 240 bool TCPConnectToHost(const char * ip = DEFAULT_HOST_IP, unsigned int port = DEFAULT_HOST_PORT)
gordonlu 10:a0dc152a0060 241 {
gordonlu 11:362f6022ffef 242 char cmd[CLI_COMMAND_MAX_SIZE];
gordonlu 10:a0dc152a0060 243 sprintf(cmd, "cynw tcp_connection_connect %s %d\r", ip, port);
gordonlu 10:a0dc152a0060 244
gordonlu 11:362f6022ffef 245 //timeout=20sec
gordonlu 11:362f6022ffef 246 if(!CLI_CMD(cmd,20))return false;
gordonlu 10:a0dc152a0060 247
gordonlu 10:a0dc152a0060 248 if(!CLI_CMD("cynw tcp_connection_is_connect\r")) return false;
gordonlu 10:a0dc152a0060 249
gordonlu 11:362f6022ffef 250 return isTCPConnected();
gordonlu 11:362f6022ffef 251 }
gordonlu 11:362f6022ffef 252 bool TCPListenFromClient( unsigned int port = DEFAULT_HOST_PORT)
gordonlu 11:362f6022ffef 253 {
gordonlu 11:362f6022ffef 254 char cmd[CLI_COMMAND_MAX_SIZE];
gordonlu 11:362f6022ffef 255
gordonlu 11:362f6022ffef 256 //binding
gordonlu 11:362f6022ffef 257 sprintf(cmd, "cynw tcp_server_bind %d\r",port);
gordonlu 11:362f6022ffef 258 if(!CLI_CMD(cmd))return false;
gordonlu 11:362f6022ffef 259
gordonlu 11:362f6022ffef 260 //listen
gordonlu 11:362f6022ffef 261 if(!CLI_CMD("cynw tcp_server_listen\r")) return false;
gordonlu 11:362f6022ffef 262
gordonlu 11:362f6022ffef 263 //accept
gordonlu 12:b68d0162da48 264 if(!CLI_CMD("cynw tcp_server_accept\r",10)) return false;
gordonlu 11:362f6022ffef 265
gordonlu 11:362f6022ffef 266 return true;
gordonlu 11:362f6022ffef 267 }
gordonlu 11:362f6022ffef 268 bool send(const char* data)
gordonlu 11:362f6022ffef 269 {
gordonlu 11:362f6022ffef 270 char cmd[CLI_COMMAND_MAX_SIZE];
gordonlu 11:362f6022ffef 271
gordonlu 11:362f6022ffef 272 sprintf(cmd, "cynw tcp_connection_send %s\r",data);
gordonlu 11:362f6022ffef 273 return CLI_CMD(cmd);
gordonlu 11:362f6022ffef 274 }
gordonlu 12:b68d0162da48 275 bool receive(char * buf, int len, int timeout_sec)
gordonlu 11:362f6022ffef 276 {
gordonlu 11:362f6022ffef 277 if(len > 128) len = 128;
gordonlu 11:362f6022ffef 278
gordonlu 11:362f6022ffef 279 char cmd[CLI_COMMAND_MAX_SIZE];
gordonlu 11:362f6022ffef 280
gordonlu 12:b68d0162da48 281 if(-1 == timeout_sec)//blocking
gordonlu 11:362f6022ffef 282 {
gordonlu 11:362f6022ffef 283 sprintf(cmd, "%s" , "cynw tcp_connection_blocking 1\r");
gordonlu 11:362f6022ffef 284 }
gordonlu 11:362f6022ffef 285 else //non-blocking
gordonlu 11:362f6022ffef 286 {
gordonlu 12:b68d0162da48 287 sprintf(cmd, "cynw tcp_connection_blocking 0 %d\r",timeout_sec * 1000);
gordonlu 11:362f6022ffef 288 }
gordonlu 11:362f6022ffef 289
gordonlu 11:362f6022ffef 290 if(!CLI_CMD(cmd)) return false;
gordonlu 11:362f6022ffef 291
gordonlu 11:362f6022ffef 292
gordonlu 12:b68d0162da48 293 sprintf(cmd, "cynw tcp_connection_receive %d\r" , len);
gordonlu 12:b68d0162da48 294 if(!CLI_CMD(cmd,timeout_sec + 2)) return false;
gordonlu 10:a0dc152a0060 295
gordonlu 10:a0dc152a0060 296 return true;
gordonlu 11:362f6022ffef 297
gordonlu 8:421c13d323a0 298 }
gordonlu 7:71124ec77f83 299 int main()
gordonlu 10:a0dc152a0060 300 {
gordonlu 11:362f6022ffef 301 WORKINGSTAGE ws = INITWIFI;
gordonlu 10:a0dc152a0060 302 //set baud rate
gordonlu 10:a0dc152a0060 303 pc.baud(BAUD_RATE_UART);
gordonlu 10:a0dc152a0060 304 cli.baud(BAUD_RATE_CLI);
gordonlu 10:a0dc152a0060 305
gordonlu 10:a0dc152a0060 306 //show version string
gordonlu 10:a0dc152a0060 307 message(VERSION_STRING);
gordonlu 8:421c13d323a0 308
gordonlu 11:362f6022ffef 309 //NNN40 as client/server led=0/led = 1
gordonlu 11:362f6022ffef 310 myled1 = TEST_TCP_CLIENT;
gordonlu 11:362f6022ffef 311
gordonlu 11:362f6022ffef 312
gordonlu 10:a0dc152a0060 313 #if(MESSAGE_TO_LCD)
gordonlu 10:a0dc152a0060 314 //give some display time for lcd
gordonlu 10:a0dc152a0060 315 wait(1);
gordonlu 10:a0dc152a0060 316 #endif
gordonlu 10:a0dc152a0060 317
gordonlu 11:362f6022ffef 318 while(1)
gordonlu 10:a0dc152a0060 319 {
gordonlu 11:362f6022ffef 320 switch(ws)
gordonlu 11:362f6022ffef 321 {
gordonlu 11:362f6022ffef 322 case INITWIFI:
gordonlu 10:a0dc152a0060 323 {
gordonlu 11:362f6022ffef 324 if(initWifi())
gordonlu 10:a0dc152a0060 325 {
gordonlu 11:362f6022ffef 326 //
gordonlu 11:362f6022ffef 327 #if(TEST_TCP_CLIENT == 1) //NNN40 as client
gordonlu 11:362f6022ffef 328 ws = TCP_CONNECT_TO_HOST;
gordonlu 11:362f6022ffef 329 #else //NNN40 as server
gordonlu 11:362f6022ffef 330 ws = TCP_LISTEN_FROM_CLIENT;
gordonlu 11:362f6022ffef 331 #endif
gordonlu 11:362f6022ffef 332 }
gordonlu 11:362f6022ffef 333 break;
gordonlu 11:362f6022ffef 334 }
gordonlu 11:362f6022ffef 335 case TCP_CONNECT_TO_HOST:
gordonlu 11:362f6022ffef 336 {
gordonlu 11:362f6022ffef 337 if(TCPConnectToHost())
gordonlu 11:362f6022ffef 338 {
gordonlu 11:362f6022ffef 339 ws = TCP_SEND;
gordonlu 11:362f6022ffef 340 //ws = TCP_RECEIVE;
gordonlu 11:362f6022ffef 341 }
gordonlu 11:362f6022ffef 342 else
gordonlu 11:362f6022ffef 343 {
gordonlu 11:362f6022ffef 344 //check if there is IP address
gordonlu 11:362f6022ffef 345 if(!CLI_CMD("cynw ethernet_ip\r"))
gordonlu 10:a0dc152a0060 346 {
gordonlu 11:362f6022ffef 347 //if no IP , init wifi again
gordonlu 11:362f6022ffef 348 ws = INITWIFI;
gordonlu 10:a0dc152a0060 349 }
gordonlu 11:362f6022ffef 350 wait(1);
gordonlu 10:a0dc152a0060 351 }
gordonlu 11:362f6022ffef 352 break;
gordonlu 10:a0dc152a0060 353 }
gordonlu 11:362f6022ffef 354 case TCP_LISTEN_FROM_CLIENT:
gordonlu 11:362f6022ffef 355 {
gordonlu 11:362f6022ffef 356 if(TCPListenFromClient())
gordonlu 11:362f6022ffef 357 {
gordonlu 11:362f6022ffef 358 ws = TCP_SEND;
gordonlu 11:362f6022ffef 359 //ws = TCP_RECEIVE;
gordonlu 11:362f6022ffef 360 }
gordonlu 11:362f6022ffef 361 else
gordonlu 11:362f6022ffef 362 {
gordonlu 11:362f6022ffef 363 //check if there is IP address
gordonlu 11:362f6022ffef 364 if(!CLI_CMD("cynw ethernet_ip\r"))
gordonlu 11:362f6022ffef 365 {
gordonlu 11:362f6022ffef 366 //if no IP , init wifi again
gordonlu 11:362f6022ffef 367 ws = INITWIFI;
gordonlu 11:362f6022ffef 368 }
gordonlu 11:362f6022ffef 369 wait(1);
gordonlu 11:362f6022ffef 370 }
gordonlu 11:362f6022ffef 371 break;
gordonlu 11:362f6022ffef 372 }
gordonlu 11:362f6022ffef 373 case TCP_SEND:
gordonlu 11:362f6022ffef 374 {
gordonlu 11:362f6022ffef 375 static int tx = 0;
gordonlu 11:362f6022ffef 376 char buf[CLI_SEND_DATA_MAX_SIZE];
gordonlu 11:362f6022ffef 377
gordonlu 11:362f6022ffef 378 sprintf(buf, "TEST-%d", tx);
gordonlu 11:362f6022ffef 379 if(send(buf))
gordonlu 11:362f6022ffef 380 {
gordonlu 11:362f6022ffef 381 ++tx;
gordonlu 12:b68d0162da48 382 if(tx % 10 == 0) ws = TCP_RECEIVE; //change to receive
gordonlu 11:362f6022ffef 383 }
gordonlu 11:362f6022ffef 384 else if(!isTCPConnected())
gordonlu 11:362f6022ffef 385 {
gordonlu 11:362f6022ffef 386 #if(TEST_TCP_CLIENT == 1) //NNN40 as client
gordonlu 11:362f6022ffef 387 ws = TCP_CONNECT_TO_HOST;
gordonlu 11:362f6022ffef 388 #else //NNN40 as server
gordonlu 11:362f6022ffef 389 ws = TCP_LISTEN_FROM_CLIENT;
gordonlu 11:362f6022ffef 390 #endif
gordonlu 11:362f6022ffef 391 }
gordonlu 11:362f6022ffef 392 wait(1);
gordonlu 11:362f6022ffef 393 break;
gordonlu 11:362f6022ffef 394 }
gordonlu 11:362f6022ffef 395 case TCP_RECEIVE:
gordonlu 11:362f6022ffef 396 {
gordonlu 11:362f6022ffef 397 char buf[CLI_RECEIVE_DATA_MAX_SIZE];
gordonlu 12:b68d0162da48 398 if(!receive(buf, 5, 5) && !isTCPConnected())
gordonlu 12:b68d0162da48 399 {
gordonlu 12:b68d0162da48 400 #if(TEST_TCP_CLIENT == 1) //NNN40 as client
gordonlu 12:b68d0162da48 401 ws = TCP_CONNECT_TO_HOST;
gordonlu 12:b68d0162da48 402 #else //NNN40 as server
gordonlu 12:b68d0162da48 403 ws = TCP_LISTEN_FROM_CLIENT;
gordonlu 12:b68d0162da48 404 #endif
gordonlu 12:b68d0162da48 405 }
gordonlu 12:b68d0162da48 406 else
gordonlu 12:b68d0162da48 407 {
gordonlu 12:b68d0162da48 408 ws = TCP_SEND; //change to send
gordonlu 12:b68d0162da48 409 }
gordonlu 11:362f6022ffef 410 break;
gordonlu 11:362f6022ffef 411 }
gordonlu 11:362f6022ffef 412 default:break;
gordonlu 11:362f6022ffef 413
gordonlu 11:362f6022ffef 414 }//end switch
gordonlu 11:362f6022ffef 415 }//end wile
gordonlu 11:362f6022ffef 416 }//end main