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
- TEST_TCP_CLIENT (1) => NNN40 is in client mode
- TEST_TCP_CLIENT (0) => NNN40 is in server mode
main.cpp@11:362f6022ffef, 2015-07-17 (annotated)
- Committer:
- gordonlu
- Date:
- Fri Jul 17 08:12:29 2015 +0000
- Revision:
- 11:362f6022ffef
- Parent:
- 10:a0dc152a0060
- Child:
- 12:b68d0162da48
1.0.1
Who changed what in which revision?
User | Revision | Line number | New 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 | 11:362f6022ffef | 42 | #define VERSION_STRING ("NNN40_CLI_HOST_WIFI : 1.0.1") |
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 | 10:a0dc152a0060 | 218 | if(!CLI_CMD("cynw ethernet_init\r"))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 | 11:362f6022ffef | 264 | if(!CLI_CMD("cynw tcp_server_accept\r",20)) 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 | 11:362f6022ffef | 275 | bool receive(char * buf, int len, int timeout_ms) |
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 | 11:362f6022ffef | 281 | if(-1 == timeout_ms)//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 | 11:362f6022ffef | 287 | sprintf(cmd, "cynw tcp_connection_blocking 0 %d\r",timeout_ms); |
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 | 11:362f6022ffef | 293 | sprintf(cmd, "cynw tcp_connection_receive_all %d" , len); |
gordonlu | 11:362f6022ffef | 294 | if(!CLI_CMD(cmd)) 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 | 11:362f6022ffef | 382 | } |
gordonlu | 11:362f6022ffef | 383 | else if(!isTCPConnected()) |
gordonlu | 11:362f6022ffef | 384 | { |
gordonlu | 11:362f6022ffef | 385 | #if(TEST_TCP_CLIENT == 1) //NNN40 as client |
gordonlu | 11:362f6022ffef | 386 | ws = TCP_CONNECT_TO_HOST; |
gordonlu | 11:362f6022ffef | 387 | #else //NNN40 as server |
gordonlu | 11:362f6022ffef | 388 | ws = TCP_LISTEN_FROM_CLIENT; |
gordonlu | 11:362f6022ffef | 389 | #endif |
gordonlu | 11:362f6022ffef | 390 | } |
gordonlu | 11:362f6022ffef | 391 | wait(1); |
gordonlu | 11:362f6022ffef | 392 | break; |
gordonlu | 11:362f6022ffef | 393 | } |
gordonlu | 11:362f6022ffef | 394 | case TCP_RECEIVE: |
gordonlu | 11:362f6022ffef | 395 | { |
gordonlu | 11:362f6022ffef | 396 | char buf[CLI_RECEIVE_DATA_MAX_SIZE]; |
gordonlu | 11:362f6022ffef | 397 | receive(buf, 10, 2000); |
gordonlu | 11:362f6022ffef | 398 | break; |
gordonlu | 11:362f6022ffef | 399 | } |
gordonlu | 11:362f6022ffef | 400 | default:break; |
gordonlu | 11:362f6022ffef | 401 | |
gordonlu | 11:362f6022ffef | 402 | }//end switch |
gordonlu | 11:362f6022ffef | 403 | }//end wile |
gordonlu | 11:362f6022ffef | 404 | }//end main |