fork test

Dependencies:   BLE_API WIFI_API_32kRAM mbed nRF51822

Fork of NNN40_CLI by Delta

Committer:
gillwei7
Date:
Fri Oct 02 10:36:29 2015 +0000
Revision:
3:38ec8ad317f4
Parent:
0:5c195ab2f696
Child:
4:b52035367aee
Gill Wei commit 20151002 update with WIFI_API_32kRAM Rev. 12, provide Scan, Read version and other wifi function, Set AP mode not ready.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gillwei7 0:5c195ab2f696 1 /**
gillwei7 0:5c195ab2f696 2 * File: wifi-cli.c
gillwei7 0:5c195ab2f696 3 * Description: WIFI CLI commands used by all applications WIFI of profile.
gillwei7 0:5c195ab2f696 4 *
gillwei7 0:5c195ab2f696 5 * Copyright 2015 by CYNTEC Corporation. All rights reserved.
gillwei7 0:5c195ab2f696 6 * Author: Lester Lee
gillwei7 0:5c195ab2f696 7 */
gillwei7 3:38ec8ad317f4 8
gillwei7 3:38ec8ad317f4 9
gillwei7 0:5c195ab2f696 10 #include <stdlib.h>
gillwei7 0:5c195ab2f696 11 #include <string.h>
gillwei7 0:5c195ab2f696 12 #include "mbed.h"
gillwei7 0:5c195ab2f696 13 #include "wifi_cli.h"
gillwei7 0:5c195ab2f696 14 #include "command-interpreter.h"
gillwei7 0:5c195ab2f696 15 #include "WIFIDevice.h"
gillwei7 0:5c195ab2f696 16 #include "EthernetInterface.h"
gillwei7 0:5c195ab2f696 17
gillwei7 0:5c195ab2f696 18 #define AP_SSID_MAX_LEN 33
gillwei7 0:5c195ab2f696 19 #define AP_PW_MAX_LEN 64
gillwei7 0:5c195ab2f696 20 #define STATIC_IP_MAX_LEN 15
gillwei7 0:5c195ab2f696 21 #define TCP_SEND_MAX_LEN 128
gillwei7 0:5c195ab2f696 22 #define UDP_SEND_MAX_LEN 128
gillwei7 3:38ec8ad317f4 23 #define DELTA_WIFI_DEBUG
gillwei7 3:38ec8ad317f4 24 #define WIFI_MAX_AP_NUMBER 15
gillwei7 3:38ec8ad317f4 25 // WiFI_API_32kRAM ver. 8
gillwei7 3:38ec8ad317f4 26 #define MAX_MEM_WRITE_LENGTH 0x3FFFF
gillwei7 3:38ec8ad317f4 27 #define MAX_MEM_ERASE_ADDR 0x3F000
gillwei7 3:38ec8ad317f4 28 #define MAX_DATA_LENGTH 256
gillwei7 3:38ec8ad317f4 29 extern uint8_t isValidGPIO; // from ble_cli.cpp
gillwei7 0:5c195ab2f696 30
gillwei7 0:5c195ab2f696 31 uint8_t static_ip[STATIC_IP_MAX_LEN] = "192.168.1.100";
gillwei7 0:5c195ab2f696 32
gillwei7 0:5c195ab2f696 33 WIFIDevice wifiDevice;
gillwei7 0:5c195ab2f696 34 extern Serial console;
gillwei7 3:38ec8ad317f4 35 //Serial console(p25,p23);
gillwei7 0:5c195ab2f696 36 extern const char* cyntecCommandErrorNames[];
gillwei7 0:5c195ab2f696 37
gillwei7 0:5c195ab2f696 38 typedef struct deviceNetwork_s {
gillwei7 3:38ec8ad317f4 39 char ap_ssid[AP_SSID_MAX_LEN+1];
gillwei7 3:38ec8ad317f4 40 char ap_pw[AP_PW_MAX_LEN+1];
gillwei7 0:5c195ab2f696 41 } deviceNetwork_t;
gillwei7 0:5c195ab2f696 42
gillwei7 0:5c195ab2f696 43 deviceNetwork_t devNetwork[3];
gillwei7 0:5c195ab2f696 44
gillwei7 0:5c195ab2f696 45 TCPSocketConnection tcpConnect;
gillwei7 0:5c195ab2f696 46 UDPSocket udpSocket;
gillwei7 0:5c195ab2f696 47 Endpoint cliEndpoint;
gillwei7 0:5c195ab2f696 48 TCPSocketServer tcpServer;
gillwei7 0:5c195ab2f696 49
gillwei7 0:5c195ab2f696 50 static uint8_t is_Listen = false;
gillwei7 3:38ec8ad317f4 51 static uint8_t apInd;
gillwei7 3:38ec8ad317f4 52 static unsigned char *preSSID;
gillwei7 3:38ec8ad317f4 53 static unsigned char *newSSID;
gillwei7 3:38ec8ad317f4 54 static scanApInfo saveAP[WIFI_MAX_AP_NUMBER];
gillwei7 3:38ec8ad317f4 55 static bool wifi_init = false;
gillwei7 0:5c195ab2f696 56
gillwei7 0:5c195ab2f696 57 static uint8_t cyntecIsValidIP(uint8_t *startIdx, uint8_t totalLen)
gillwei7 0:5c195ab2f696 58 {
gillwei7 3:38ec8ad317f4 59 uint8_t *ipIdx = startIdx;
gillwei7 3:38ec8ad317f4 60 uint8_t *tempIdx = ipIdx;
gillwei7 3:38ec8ad317f4 61 uint8_t IPAddr[3];
gillwei7 3:38ec8ad317f4 62 //uint8_t IPTokenLen = 0;
gillwei7 3:38ec8ad317f4 63 int16_t ipToken;
gillwei7 3:38ec8ad317f4 64
gillwei7 3:38ec8ad317f4 65 while ( (tempIdx - startIdx) <= totalLen ) {
gillwei7 3:38ec8ad317f4 66 if (*tempIdx == '.' || ((tempIdx - startIdx) == totalLen)) {
gillwei7 3:38ec8ad317f4 67 memset( IPAddr, 0, 3);
gillwei7 3:38ec8ad317f4 68 memcpy( IPAddr, ipIdx, (tempIdx - ipIdx));
gillwei7 3:38ec8ad317f4 69
gillwei7 3:38ec8ad317f4 70 ipToken = atoi((const char *)IPAddr);
gillwei7 3:38ec8ad317f4 71 if (ipToken > 255 || ipToken < 0)
gillwei7 3:38ec8ad317f4 72 return 1;
gillwei7 3:38ec8ad317f4 73
gillwei7 3:38ec8ad317f4 74 ipIdx = tempIdx + 1;
gillwei7 3:38ec8ad317f4 75 }
gillwei7 3:38ec8ad317f4 76 tempIdx++;
gillwei7 3:38ec8ad317f4 77 }
gillwei7 3:38ec8ad317f4 78
gillwei7 3:38ec8ad317f4 79
gillwei7 3:38ec8ad317f4 80 return 0;
gillwei7 0:5c195ab2f696 81 }
gillwei7 0:5c195ab2f696 82
gillwei7 0:5c195ab2f696 83 static void cyntecPrintOk(void)
gillwei7 0:5c195ab2f696 84 {
gillwei7 3:38ec8ad317f4 85 console.printf("\r\nOK\r\n\r\n");
gillwei7 0:5c195ab2f696 86 }
gillwei7 0:5c195ab2f696 87
gillwei7 0:5c195ab2f696 88 static void cyntecPrintError(uint8_t errIdx)
gillwei7 0:5c195ab2f696 89 {
gillwei7 3:38ec8ad317f4 90 console.printf("\r\nERROR;%s\r\n\r\n",cyntecCommandErrorNames[errIdx]);
gillwei7 3:38ec8ad317f4 91 }
gillwei7 3:38ec8ad317f4 92
gillwei7 3:38ec8ad317f4 93 static void cyn_wifi_help()
gillwei7 3:38ec8ad317f4 94 {
gillwei7 3:38ec8ad317f4 95 console.printf("");
gillwei7 3:38ec8ad317f4 96
gillwei7 0:5c195ab2f696 97 }
gillwei7 0:5c195ab2f696 98
gillwei7 0:5c195ab2f696 99 /////////**** WIFI Device Implement ****//////////
gillwei7 0:5c195ab2f696 100 static void cyn_wifi_device_sleep()
gillwei7 0:5c195ab2f696 101 {
gillwei7 3:38ec8ad317f4 102 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 103 wifiDevice.sleep();
gillwei7 0:5c195ab2f696 104 }
gillwei7 3:38ec8ad317f4 105
gillwei7 3:38ec8ad317f4 106 static void cyn_wifi_device_coex()
gillwei7 0:5c195ab2f696 107 {
gillwei7 3:38ec8ad317f4 108 if (cyntecGetCommandTokenCnt() != 2) {
gillwei7 3:38ec8ad317f4 109 cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS);
gillwei7 3:38ec8ad317f4 110 return;
gillwei7 3:38ec8ad317f4 111 }
gillwei7 3:38ec8ad317f4 112 uint8_t err_code = wifiDevice.enableCoexistance();
gillwei7 3:38ec8ad317f4 113 if (err_code == 0)
gillwei7 3:38ec8ad317f4 114 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 115 else
gillwei7 3:38ec8ad317f4 116 return;
gillwei7 3:38ec8ad317f4 117
gillwei7 0:5c195ab2f696 118 }
gillwei7 3:38ec8ad317f4 119
gillwei7 0:5c195ab2f696 120 static void cyn_wifi_device_network()
gillwei7 0:5c195ab2f696 121 {
gillwei7 3:38ec8ad317f4 122 if (cyntecGetCommandTokenCnt() == 5) {
gillwei7 3:38ec8ad317f4 123 uint8_t argLen = 0;
gillwei7 3:38ec8ad317f4 124 uint8_t *argSSID;
gillwei7 3:38ec8ad317f4 125 uint8_t *argPW;
gillwei7 3:38ec8ad317f4 126 uint8_t *argPriority;
gillwei7 3:38ec8ad317f4 127 /* 0~2, 0 is highest */
gillwei7 3:38ec8ad317f4 128 uint8_t priority = 0;
gillwei7 3:38ec8ad317f4 129
gillwei7 3:38ec8ad317f4 130 /* handle priority */
gillwei7 3:38ec8ad317f4 131 argPriority = cyntecGetCommandArgument(2, NULL);
gillwei7 3:38ec8ad317f4 132 switch(*argPriority) {
gillwei7 3:38ec8ad317f4 133 case '0':
gillwei7 3:38ec8ad317f4 134 priority = 0;
gillwei7 3:38ec8ad317f4 135 break;
gillwei7 3:38ec8ad317f4 136 case '1':
gillwei7 3:38ec8ad317f4 137 priority = 1;
gillwei7 3:38ec8ad317f4 138 break;
gillwei7 3:38ec8ad317f4 139 case '2':
gillwei7 3:38ec8ad317f4 140 priority = 2;
gillwei7 3:38ec8ad317f4 141 break;
gillwei7 3:38ec8ad317f4 142 default:
gillwei7 3:38ec8ad317f4 143 cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_OUT_OF_RANGE);
gillwei7 3:38ec8ad317f4 144 return;
gillwei7 3:38ec8ad317f4 145 }
gillwei7 3:38ec8ad317f4 146
gillwei7 3:38ec8ad317f4 147 /* handle SSID */
gillwei7 3:38ec8ad317f4 148 argSSID = cyntecGetCommandArgument(0, &argLen);
gillwei7 3:38ec8ad317f4 149 if ( argLen > AP_SSID_MAX_LEN ) {
gillwei7 3:38ec8ad317f4 150 cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_OUT_OF_RANGE);
gillwei7 3:38ec8ad317f4 151 return;
gillwei7 3:38ec8ad317f4 152 }
gillwei7 3:38ec8ad317f4 153 memset( devNetwork[priority].ap_ssid , 0, AP_SSID_MAX_LEN+1);
gillwei7 3:38ec8ad317f4 154 memcpy( devNetwork[priority].ap_ssid, argSSID, argLen);
gillwei7 3:38ec8ad317f4 155
gillwei7 3:38ec8ad317f4 156 /* handle Password */
gillwei7 3:38ec8ad317f4 157 argPW = cyntecGetCommandArgument(1, &argLen);
gillwei7 3:38ec8ad317f4 158 if ( argLen > AP_PW_MAX_LEN ) {
gillwei7 3:38ec8ad317f4 159 cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_OUT_OF_RANGE);
gillwei7 3:38ec8ad317f4 160 return;
gillwei7 3:38ec8ad317f4 161 }
gillwei7 3:38ec8ad317f4 162 memset( devNetwork[priority].ap_pw, 0, AP_PW_MAX_LEN+1);
gillwei7 3:38ec8ad317f4 163 memcpy( devNetwork[priority].ap_pw, argPW, argLen);
gillwei7 3:38ec8ad317f4 164
gillwei7 3:38ec8ad317f4 165 /* call setup API */
gillwei7 3:38ec8ad317f4 166 wifiDevice.setNetwork(devNetwork[priority].ap_ssid, devNetwork[priority].ap_pw, priority);
gillwei7 3:38ec8ad317f4 167 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 168 } else {
gillwei7 3:38ec8ad317f4 169 cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS);
gillwei7 3:38ec8ad317f4 170 }
gillwei7 3:38ec8ad317f4 171 }
gillwei7 3:38ec8ad317f4 172
gillwei7 3:38ec8ad317f4 173 // gill 20150910
gillwei7 3:38ec8ad317f4 174 // Comply to WIFI_API_32kRAM version 8
gillwei7 3:38ec8ad317f4 175 static void cyn_wifi_read_wifi_sp_version()
gillwei7 3:38ec8ad317f4 176 {
gillwei7 3:38ec8ad317f4 177 wifiSpInfo version = wifiDevice.read_WIFI_SP_version();
gillwei7 3:38ec8ad317f4 178 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 179 console.printf("%X,", version.chipID);
gillwei7 3:38ec8ad317f4 180 console.printf("%i,", version.imgStaID);
gillwei7 3:38ec8ad317f4 181 console.printf("%i\r\n", version.imgApID);
gillwei7 3:38ec8ad317f4 182 }
gillwei7 3:38ec8ad317f4 183
gillwei7 3:38ec8ad317f4 184 void scanCallback(scanApInfo result)
gillwei7 3:38ec8ad317f4 185 {
gillwei7 3:38ec8ad317f4 186 newSSID = result.ssid.ssid;
gillwei7 3:38ec8ad317f4 187 if (memcmp(newSSID,preSSID,result.ssid.ssid_len)) {
gillwei7 3:38ec8ad317f4 188 #ifdef DELTA_WIFI_DEBUG
gillwei7 3:38ec8ad317f4 189 console.printf("SSID repeat\r\n");
gillwei7 3:38ec8ad317f4 190 #endif
gillwei7 3:38ec8ad317f4 191 } else {
gillwei7 3:38ec8ad317f4 192 console.printf("%i,", apInd);
gillwei7 3:38ec8ad317f4 193 console.printf("%s,", result.ssid.ssid);
gillwei7 3:38ec8ad317f4 194 //console.printf("%i,", result.ssid.ssid_len);
gillwei7 3:38ec8ad317f4 195 console.printf("%i,", result.ApRssi);
gillwei7 3:38ec8ad317f4 196 console.printf("%i,", result.channelNo);
gillwei7 3:38ec8ad317f4 197 console.printf("%i\r\n", result.secType);
gillwei7 3:38ec8ad317f4 198 apInd++;
gillwei7 3:38ec8ad317f4 199 }
gillwei7 3:38ec8ad317f4 200 preSSID = result.ssid.ssid;
gillwei7 3:38ec8ad317f4 201 }
gillwei7 3:38ec8ad317f4 202
gillwei7 3:38ec8ad317f4 203 static void cyn_wifi_device_ap_scan()
gillwei7 3:38ec8ad317f4 204 {
gillwei7 3:38ec8ad317f4 205 if (wifi_init== false) {
gillwei7 3:38ec8ad317f4 206 cyntecPrintError(CYNTEC_CMD_ERR_WRONG_CMD_ORDER);
gillwei7 3:38ec8ad317f4 207 return;
gillwei7 3:38ec8ad317f4 208 }
gillwei7 3:38ec8ad317f4 209 memset(saveAP,0,sizeof(saveAP));
gillwei7 3:38ec8ad317f4 210 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 211 apInd = 1;
gillwei7 3:38ec8ad317f4 212 wifiDevice.apScan(scanCallback);
gillwei7 3:38ec8ad317f4 213 return;
gillwei7 3:38ec8ad317f4 214 }
gillwei7 3:38ec8ad317f4 215
gillwei7 3:38ec8ad317f4 216 static void cyn_wifi_set_ap()
gillwei7 3:38ec8ad317f4 217 {
gillwei7 3:38ec8ad317f4 218 if (cyntecGetCommandTokenCnt() == 6) {
gillwei7 3:38ec8ad317f4 219 uint8_t *arg;
gillwei7 3:38ec8ad317f4 220 uint8_t argLen = 0;
gillwei7 3:38ec8ad317f4 221 char setSSID[AP_SSID_MAX_LEN];
gillwei7 3:38ec8ad317f4 222 //uint8_t * setSSID;
gillwei7 3:38ec8ad317f4 223 char setPW[AP_PW_MAX_LEN];
gillwei7 3:38ec8ad317f4 224
gillwei7 3:38ec8ad317f4 225 /* handle SSID */
gillwei7 3:38ec8ad317f4 226 arg = cyntecGetCommandArgument(0, &argLen);
gillwei7 3:38ec8ad317f4 227 if ( argLen > AP_SSID_MAX_LEN ) {
gillwei7 3:38ec8ad317f4 228 cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_OUT_OF_RANGE);
gillwei7 3:38ec8ad317f4 229 return;
gillwei7 3:38ec8ad317f4 230 }
gillwei7 3:38ec8ad317f4 231 memset( setSSID, 0, AP_SSID_MAX_LEN);
gillwei7 3:38ec8ad317f4 232 memcpy( setSSID, arg, argLen);
gillwei7 3:38ec8ad317f4 233 //setSSID[argLen] = '\0';
gillwei7 3:38ec8ad317f4 234
gillwei7 3:38ec8ad317f4 235 /* handle Password */
gillwei7 3:38ec8ad317f4 236 arg = cyntecGetCommandArgument(1, &argLen);
gillwei7 3:38ec8ad317f4 237 if ( argLen > AP_PW_MAX_LEN ) {
gillwei7 3:38ec8ad317f4 238 cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_OUT_OF_RANGE);
gillwei7 3:38ec8ad317f4 239 return;
gillwei7 3:38ec8ad317f4 240 }
gillwei7 3:38ec8ad317f4 241 memset( setPW, 0, AP_PW_MAX_LEN);
gillwei7 3:38ec8ad317f4 242 memcpy( setPW, arg, argLen);
gillwei7 3:38ec8ad317f4 243 //setPW[argLen] = '\0';
gillwei7 3:38ec8ad317f4 244
gillwei7 3:38ec8ad317f4 245 /* handle Security */
gillwei7 3:38ec8ad317f4 246 security_t setSec = SECURITY_WPA2_AES_PSK;
gillwei7 3:38ec8ad317f4 247 arg = cyntecGetCommandArgument(2, &argLen);
gillwei7 3:38ec8ad317f4 248 char numSec[argLen];
gillwei7 3:38ec8ad317f4 249 memcpy( numSec, arg, argLen);
gillwei7 3:38ec8ad317f4 250 uint8_t sec = atoi(numSec);
gillwei7 3:38ec8ad317f4 251 //uint8_t numSec = atoi((const char *)arg);
gillwei7 3:38ec8ad317f4 252
gillwei7 3:38ec8ad317f4 253 if ( (int)sec > 7 || (int)sec < 0) {
gillwei7 3:38ec8ad317f4 254 cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_OUT_OF_RANGE);
gillwei7 3:38ec8ad317f4 255 return;
gillwei7 3:38ec8ad317f4 256 }
gillwei7 3:38ec8ad317f4 257 security_t arrySec[8]={SECURITY_OPEN,
gillwei7 3:38ec8ad317f4 258 SECURITY_WEP_PSK,
gillwei7 3:38ec8ad317f4 259 SECURITY_WEP_SHARED,
gillwei7 3:38ec8ad317f4 260 SECURITY_WPA_TKIP_PSK,
gillwei7 3:38ec8ad317f4 261 SECURITY_WPA_AES_PSK,
gillwei7 3:38ec8ad317f4 262 SECURITY_WPA2_AES_PSK,
gillwei7 3:38ec8ad317f4 263 SECURITY_WPA2_TKIP_PSK,
gillwei7 3:38ec8ad317f4 264 SECURITY_WPA2_MIXED_PSK
gillwei7 3:38ec8ad317f4 265 };
gillwei7 3:38ec8ad317f4 266 for (uint8_t i=0;i<8;i++)
gillwei7 3:38ec8ad317f4 267 {
gillwei7 3:38ec8ad317f4 268 if(sec==i)
gillwei7 3:38ec8ad317f4 269 setSec = arrySec[i];
gillwei7 3:38ec8ad317f4 270 }
gillwei7 3:38ec8ad317f4 271
gillwei7 3:38ec8ad317f4 272 /* handle Channel */
gillwei7 3:38ec8ad317f4 273 arg = cyntecGetCommandArgument(3, &argLen);
gillwei7 3:38ec8ad317f4 274 uint8_t setChan = atoi((char *)arg);
gillwei7 3:38ec8ad317f4 275
gillwei7 3:38ec8ad317f4 276 if ( (int)setChan > 14 || (int)setChan < 1) {
gillwei7 3:38ec8ad317f4 277 cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_OUT_OF_RANGE);
gillwei7 3:38ec8ad317f4 278 return;
gillwei7 3:38ec8ad317f4 279 }
gillwei7 3:38ec8ad317f4 280 #ifdef DELTA_WIFI_DEBUG
gillwei7 3:38ec8ad317f4 281 console.printf("setSSID:%s\r\n",setSSID);
gillwei7 3:38ec8ad317f4 282 console.printf("setPW:%s\r\n",setPW);
gillwei7 3:38ec8ad317f4 283 console.printf("sec:%i\r\n",sec);
gillwei7 3:38ec8ad317f4 284 console.printf("setChan:%i\r\n",setChan);
gillwei7 3:38ec8ad317f4 285 #endif
gillwei7 3:38ec8ad317f4 286
gillwei7 3:38ec8ad317f4 287 /* call setup API */
gillwei7 3:38ec8ad317f4 288 wifiDevice.setAccessPoint(setSSID, setPW, setSec, setChan);
gillwei7 3:38ec8ad317f4 289 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 290
gillwei7 3:38ec8ad317f4 291 } else {
gillwei7 3:38ec8ad317f4 292 cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS);
gillwei7 3:38ec8ad317f4 293 }
gillwei7 3:38ec8ad317f4 294 }
gillwei7 3:38ec8ad317f4 295
gillwei7 3:38ec8ad317f4 296 static void cyn_wifi_mem_erase4k()
gillwei7 3:38ec8ad317f4 297 {
gillwei7 3:38ec8ad317f4 298 if (cyntecGetCommandTokenCnt() == 3) {
gillwei7 3:38ec8ad317f4 299 uint8_t argLen = 0;
gillwei7 3:38ec8ad317f4 300 uint8_t *arg;
gillwei7 3:38ec8ad317f4 301 uint32_t setAddr;
gillwei7 3:38ec8ad317f4 302 arg = cyntecGetCommandArgument(0, &argLen);
gillwei7 3:38ec8ad317f4 303 if (arg[0] != '0' || arg[1] != 'x') {
gillwei7 3:38ec8ad317f4 304 cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_SYNTAX_ERROR);
gillwei7 3:38ec8ad317f4 305 return;
gillwei7 3:38ec8ad317f4 306 }
gillwei7 3:38ec8ad317f4 307 setAddr = cyntecHexToUint32(arg+2,argLen-2);
gillwei7 3:38ec8ad317f4 308 if (setAddr % 0x1000 != 0 || setAddr > MAX_MEM_ERASE_ADDR) {
gillwei7 3:38ec8ad317f4 309 cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_OUT_OF_RANGE);
gillwei7 3:38ec8ad317f4 310 return;
gillwei7 3:38ec8ad317f4 311 }
gillwei7 3:38ec8ad317f4 312 #ifdef DELTA_WIFI_DEBUG
gillwei7 3:38ec8ad317f4 313 console.printf("setAddr:%08X\r\n",setAddr);
gillwei7 3:38ec8ad317f4 314 #endif
gillwei7 3:38ec8ad317f4 315 int err_code = wifiDevice.storage_erase4KB(setAddr);
gillwei7 3:38ec8ad317f4 316 if (err_code == 0)
gillwei7 3:38ec8ad317f4 317 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 318 else
gillwei7 3:38ec8ad317f4 319 console.printf("ERROR;\r\n");
gillwei7 3:38ec8ad317f4 320 }
gillwei7 3:38ec8ad317f4 321 else {
gillwei7 3:38ec8ad317f4 322 cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS);
gillwei7 3:38ec8ad317f4 323 }
gillwei7 3:38ec8ad317f4 324 }
gillwei7 3:38ec8ad317f4 325
gillwei7 3:38ec8ad317f4 326 static void cyn_wifi_mem_write()
gillwei7 3:38ec8ad317f4 327 {
gillwei7 3:38ec8ad317f4 328 uint8_t argLen = 0;
gillwei7 3:38ec8ad317f4 329 uint8_t *arg;
gillwei7 3:38ec8ad317f4 330 uint32_t setAddr;
gillwei7 3:38ec8ad317f4 331 uint8_t setData[MAX_DATA_LENGTH] = {0};
gillwei7 3:38ec8ad317f4 332 uint16_t writeLen;
gillwei7 3:38ec8ad317f4 333 arg = cyntecGetCommandArgument(0, &argLen);
gillwei7 3:38ec8ad317f4 334 if (arg[0] != '0' || arg[1] != 'x') {
gillwei7 3:38ec8ad317f4 335 cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_SYNTAX_ERROR);
gillwei7 3:38ec8ad317f4 336 return;
gillwei7 3:38ec8ad317f4 337 }
gillwei7 3:38ec8ad317f4 338 setAddr = cyntecHexToUint32(arg+2,argLen-2);
gillwei7 3:38ec8ad317f4 339 #ifdef DELTA_WIFI_DEBUG
gillwei7 3:38ec8ad317f4 340 console.printf("%08X\r\n",setAddr);
gillwei7 3:38ec8ad317f4 341 #endif
gillwei7 3:38ec8ad317f4 342 if (setAddr > MAX_MEM_WRITE_LENGTH) {
gillwei7 3:38ec8ad317f4 343 cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_OUT_OF_RANGE);
gillwei7 3:38ec8ad317f4 344 return;
gillwei7 3:38ec8ad317f4 345 }
gillwei7 3:38ec8ad317f4 346 arg = cyntecGetCommandArgument(1, &argLen);
gillwei7 3:38ec8ad317f4 347 if (arg[0]!='0' || arg[1]!='x' || (argLen-2)%2!=0) {
gillwei7 3:38ec8ad317f4 348 cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_SYNTAX_ERROR);
gillwei7 3:38ec8ad317f4 349 return;
gillwei7 3:38ec8ad317f4 350 }
gillwei7 3:38ec8ad317f4 351 //memset(setData,0,(argLen-2)/2);
gillwei7 3:38ec8ad317f4 352 for (int i=0 ; i < (argLen-2)/2; i++) {
gillwei7 3:38ec8ad317f4 353 setData[i] = cyntecArgToUint8(arg+2*(i+1), 2);
gillwei7 3:38ec8ad317f4 354 #ifdef DELTA_WIFI_DEBUG
gillwei7 3:38ec8ad317f4 355 console.printf("%02X",setData[i]);
gillwei7 3:38ec8ad317f4 356 #endif
gillwei7 3:38ec8ad317f4 357 }
gillwei7 3:38ec8ad317f4 358 writeLen = (argLen-2)/2;
gillwei7 3:38ec8ad317f4 359 // gill need confirm
gillwei7 3:38ec8ad317f4 360 if (writeLen > MAX_MEM_WRITE_LENGTH) {
gillwei7 3:38ec8ad317f4 361 cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_OUT_OF_RANGE);
gillwei7 3:38ec8ad317f4 362 return;
gillwei7 3:38ec8ad317f4 363 }
gillwei7 3:38ec8ad317f4 364 #ifdef DELTA_WIFI_DEBUG
gillwei7 3:38ec8ad317f4 365 console.printf("\r\nwriteLen:%i\r\n",writeLen);
gillwei7 3:38ec8ad317f4 366 #endif
gillwei7 3:38ec8ad317f4 367 int err_code = wifiDevice.storage_write(setAddr,setData,writeLen);
gillwei7 3:38ec8ad317f4 368 if (err_code == 0)
gillwei7 3:38ec8ad317f4 369 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 370 else
gillwei7 3:38ec8ad317f4 371 console.printf("ERROR;\r\n");
gillwei7 3:38ec8ad317f4 372 }
gillwei7 3:38ec8ad317f4 373
gillwei7 3:38ec8ad317f4 374 static void cyn_wifi_mem_read()
gillwei7 3:38ec8ad317f4 375 {
gillwei7 3:38ec8ad317f4 376 uint8_t argLen = 0;
gillwei7 3:38ec8ad317f4 377 uint8_t *arg;
gillwei7 3:38ec8ad317f4 378 uint32_t setAddr;
gillwei7 3:38ec8ad317f4 379 uint8_t setData[MAX_DATA_LENGTH] = {0};
gillwei7 3:38ec8ad317f4 380 uint16_t readLen;
gillwei7 3:38ec8ad317f4 381 arg = cyntecGetCommandArgument(0, &argLen);
gillwei7 3:38ec8ad317f4 382 if (arg[0] != '0' || arg[1] != 'x') {
gillwei7 3:38ec8ad317f4 383 cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_SYNTAX_ERROR);
gillwei7 3:38ec8ad317f4 384 return;
gillwei7 3:38ec8ad317f4 385 }
gillwei7 3:38ec8ad317f4 386 setAddr = cyntecHexToUint32(arg+2,argLen-2);
gillwei7 3:38ec8ad317f4 387 #ifdef DELTA_WIFI_DEBUG
gillwei7 3:38ec8ad317f4 388 console.printf("%08X\r\n",setAddr);
gillwei7 3:38ec8ad317f4 389 #endif
gillwei7 3:38ec8ad317f4 390 if (setAddr > MAX_MEM_WRITE_LENGTH) {
gillwei7 3:38ec8ad317f4 391 cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_OUT_OF_RANGE);
gillwei7 3:38ec8ad317f4 392 return;
gillwei7 3:38ec8ad317f4 393 }
gillwei7 3:38ec8ad317f4 394 arg = cyntecGetCommandArgument(1, &argLen);
gillwei7 3:38ec8ad317f4 395
gillwei7 3:38ec8ad317f4 396 readLen = cyntecAtoiUint16(arg,argLen);
gillwei7 3:38ec8ad317f4 397
gillwei7 3:38ec8ad317f4 398 #ifdef DELTA_WIFI_DEBUG
gillwei7 3:38ec8ad317f4 399 console.printf("\r\nreadLen:%04X\r\n",readLen);
gillwei7 3:38ec8ad317f4 400 #endif
gillwei7 3:38ec8ad317f4 401
gillwei7 3:38ec8ad317f4 402 int err_code = wifiDevice.storage_read(setAddr,setData,readLen);
gillwei7 3:38ec8ad317f4 403 if (err_code == 0) {
gillwei7 3:38ec8ad317f4 404 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 405 for (int i=0;i<readLen;i++) {
gillwei7 3:38ec8ad317f4 406 console.printf("%02X",setData[i]);
gillwei7 0:5c195ab2f696 407 }
gillwei7 3:38ec8ad317f4 408 console.printf("\r\n");
gillwei7 3:38ec8ad317f4 409 }
gillwei7 3:38ec8ad317f4 410 else
gillwei7 3:38ec8ad317f4 411 console.printf("ERROR;\r\n");
gillwei7 3:38ec8ad317f4 412
gillwei7 0:5c195ab2f696 413 }
gillwei7 3:38ec8ad317f4 414
gillwei7 3:38ec8ad317f4 415
gillwei7 3:38ec8ad317f4 416
gillwei7 0:5c195ab2f696 417 /////////**** WIFI Ethernet Implement ****//////////
gillwei7 0:5c195ab2f696 418 static void cyn_wifi_ethernet_init()
gillwei7 0:5c195ab2f696 419 {
gillwei7 3:38ec8ad317f4 420 uint8_t argLen = 0;
gillwei7 3:38ec8ad317f4 421 uint8_t *argIP;
gillwei7 3:38ec8ad317f4 422 EthernetInterface ethInterface;
gillwei7 3:38ec8ad317f4 423
gillwei7 3:38ec8ad317f4 424 if (cyntecGetCommandTokenCnt() == 2) {
gillwei7 3:38ec8ad317f4 425 /* use DHCP to get IP */
gillwei7 3:38ec8ad317f4 426 if ( ethInterface.init() == 0 ) {
gillwei7 3:38ec8ad317f4 427 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 428 wifi_init = true;
gillwei7 3:38ec8ad317f4 429 }
gillwei7 3:38ec8ad317f4 430 else
gillwei7 3:38ec8ad317f4 431 cyntecPrintError(CYNTEC_CMD_ERR_CALL_FAIL);
gillwei7 3:38ec8ad317f4 432
gillwei7 3:38ec8ad317f4 433 } else if ( cyntecGetCommandTokenCnt() == 3 ) {
gillwei7 3:38ec8ad317f4 434 /* use static to get IP */
gillwei7 3:38ec8ad317f4 435 argIP = cyntecGetCommandArgument(0, &argLen);
gillwei7 0:5c195ab2f696 436
gillwei7 3:38ec8ad317f4 437 if ( cyntecIsValidIP(argIP,argLen) != 0) {
gillwei7 3:38ec8ad317f4 438 cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_OUT_OF_RANGE);
gillwei7 3:38ec8ad317f4 439 return;
gillwei7 3:38ec8ad317f4 440 }
gillwei7 3:38ec8ad317f4 441
gillwei7 3:38ec8ad317f4 442 memset( static_ip, 0, STATIC_IP_MAX_LEN);
gillwei7 3:38ec8ad317f4 443 memcpy( static_ip, argIP, argLen);
gillwei7 3:38ec8ad317f4 444 if ( ethInterface.init((const char *)static_ip, NULL, NULL) == 0) {
gillwei7 3:38ec8ad317f4 445 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 446 wifi_init = true;
gillwei7 3:38ec8ad317f4 447 }
gillwei7 3:38ec8ad317f4 448 else
gillwei7 3:38ec8ad317f4 449 cyntecPrintError(CYNTEC_CMD_ERR_CALL_FAIL);
gillwei7 3:38ec8ad317f4 450 } else {
gillwei7 3:38ec8ad317f4 451 cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS);
gillwei7 3:38ec8ad317f4 452 }
gillwei7 3:38ec8ad317f4 453
gillwei7 3:38ec8ad317f4 454 return;
gillwei7 0:5c195ab2f696 455 }
gillwei7 0:5c195ab2f696 456 static void cyn_wifi_ethernet_connect()
gillwei7 0:5c195ab2f696 457 {
gillwei7 3:38ec8ad317f4 458 int timeout_ms = 35000;
gillwei7 3:38ec8ad317f4 459 uint8_t *argTimeout;
gillwei7 3:38ec8ad317f4 460 EthernetInterface ethInterface;
gillwei7 3:38ec8ad317f4 461
gillwei7 3:38ec8ad317f4 462 if (cyntecGetCommandTokenCnt() == 2) {
gillwei7 3:38ec8ad317f4 463 #ifdef DELTA_WIFI_DEBUG
gillwei7 3:38ec8ad317f4 464 console.printf("\r\n");
gillwei7 3:38ec8ad317f4 465 console.printf("Connecting..., Waiting for 35000 ms...");
gillwei7 3:38ec8ad317f4 466 console.printf("\r\n\r\n");
gillwei7 3:38ec8ad317f4 467 #endif
gillwei7 3:38ec8ad317f4 468
gillwei7 3:38ec8ad317f4 469 if ( ethInterface.connect() == 0 )
gillwei7 3:38ec8ad317f4 470 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 471 else
gillwei7 3:38ec8ad317f4 472 cyntecPrintError(CYNTEC_CMD_ERR_CALL_FAIL);
gillwei7 3:38ec8ad317f4 473
gillwei7 3:38ec8ad317f4 474 } else if (cyntecGetCommandTokenCnt() == 3) {
gillwei7 3:38ec8ad317f4 475 argTimeout = cyntecGetCommandArgument(0, NULL);
gillwei7 3:38ec8ad317f4 476 timeout_ms = atoi((const char*)argTimeout);
gillwei7 3:38ec8ad317f4 477
gillwei7 3:38ec8ad317f4 478 if (timeout_ms < 0) {
gillwei7 3:38ec8ad317f4 479 cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_OUT_OF_RANGE);
gillwei7 3:38ec8ad317f4 480 return;
gillwei7 3:38ec8ad317f4 481 }
gillwei7 3:38ec8ad317f4 482 #ifdef DELTA_WIFI_DEBUG
gillwei7 3:38ec8ad317f4 483 console.printf("\r\nConnecting..., Waiting for ");
gillwei7 3:38ec8ad317f4 484 console.printf((char*)argTimeout);
gillwei7 3:38ec8ad317f4 485 console.printf(" ms...\r\n\r\n");
gillwei7 3:38ec8ad317f4 486 #endif
gillwei7 3:38ec8ad317f4 487 if ( ethInterface.connect(timeout_ms) == 0 )
gillwei7 3:38ec8ad317f4 488 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 489 else
gillwei7 3:38ec8ad317f4 490 cyntecPrintError(CYNTEC_CMD_ERR_CALL_FAIL);
gillwei7 3:38ec8ad317f4 491
gillwei7 3:38ec8ad317f4 492 } else {
gillwei7 3:38ec8ad317f4 493 cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS);
gillwei7 3:38ec8ad317f4 494 }
gillwei7 3:38ec8ad317f4 495 return;
gillwei7 0:5c195ab2f696 496 }
gillwei7 0:5c195ab2f696 497 static void cyn_wifi_ethernet_disconnect()
gillwei7 0:5c195ab2f696 498 {
gillwei7 3:38ec8ad317f4 499 EthernetInterface ethInterface;
gillwei7 3:38ec8ad317f4 500
gillwei7 3:38ec8ad317f4 501 ethInterface.disconnect();
gillwei7 3:38ec8ad317f4 502 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 503 return;
gillwei7 0:5c195ab2f696 504 }
gillwei7 0:5c195ab2f696 505 static void cyn_wifi_ethernet_mac()
gillwei7 0:5c195ab2f696 506 {
gillwei7 3:38ec8ad317f4 507 EthernetInterface ethInterface;
gillwei7 0:5c195ab2f696 508
gillwei7 3:38ec8ad317f4 509 char mac_addr[19];
gillwei7 3:38ec8ad317f4 510 memset(mac_addr, 0, 19);
gillwei7 3:38ec8ad317f4 511 memcpy(mac_addr, ethInterface.getMACAddress(), 19);
gillwei7 3:38ec8ad317f4 512
gillwei7 3:38ec8ad317f4 513 console.printf("\r\nOK;%s\r\n\r\n",mac_addr);
gillwei7 3:38ec8ad317f4 514
gillwei7 3:38ec8ad317f4 515 return;
gillwei7 0:5c195ab2f696 516 }
gillwei7 0:5c195ab2f696 517 static void cyn_wifi_ethernet_ip()
gillwei7 0:5c195ab2f696 518 {
gillwei7 3:38ec8ad317f4 519 EthernetInterface ethInterface;
gillwei7 0:5c195ab2f696 520
gillwei7 3:38ec8ad317f4 521 char ip_addr[15] = "\0";
gillwei7 3:38ec8ad317f4 522 memset(ip_addr, 0, 15);
gillwei7 3:38ec8ad317f4 523 memcpy(ip_addr, ethInterface.getIPAddress(), 15);
gillwei7 3:38ec8ad317f4 524
gillwei7 3:38ec8ad317f4 525 console.printf("\r\nOK;%s\r\n\r\n",ip_addr);
gillwei7 3:38ec8ad317f4 526
gillwei7 3:38ec8ad317f4 527 return;
gillwei7 0:5c195ab2f696 528 }
gillwei7 0:5c195ab2f696 529 /* not implement yet... */
gillwei7 0:5c195ab2f696 530 ////static void cyn_wifi_ethernet_gateway(){}
gillwei7 0:5c195ab2f696 531 ////static void cyn_wifi_ethernet_mask(){}
gillwei7 0:5c195ab2f696 532 /* not implement yet... */
gillwei7 0:5c195ab2f696 533
gillwei7 0:5c195ab2f696 534 /////////**** WIFI TCP Socket Server Implement ****//////////
gillwei7 0:5c195ab2f696 535 static void cyn_wifi_tcp_server_bind()
gillwei7 0:5c195ab2f696 536 {
gillwei7 0:5c195ab2f696 537 // TCPSocketServer tcpServer;
gillwei7 3:38ec8ad317f4 538
gillwei7 3:38ec8ad317f4 539 int port = 1;
gillwei7 3:38ec8ad317f4 540 if (cyntecGetCommandTokenCnt() == 2) {
gillwei7 3:38ec8ad317f4 541 if ( tcpServer.bind(port) == 0 )
gillwei7 3:38ec8ad317f4 542 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 543 else
gillwei7 3:38ec8ad317f4 544 cyntecPrintError(CYNTEC_CMD_ERR_CALL_FAIL);
gillwei7 3:38ec8ad317f4 545
gillwei7 3:38ec8ad317f4 546 } else if (cyntecGetCommandTokenCnt() == 3) {
gillwei7 3:38ec8ad317f4 547 port = atoi((const char*)(cyntecGetCommandArgument(0, NULL)));
gillwei7 3:38ec8ad317f4 548 if (port < 0) {
gillwei7 3:38ec8ad317f4 549 cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_OUT_OF_RANGE);
gillwei7 3:38ec8ad317f4 550 return;
gillwei7 3:38ec8ad317f4 551 }
gillwei7 3:38ec8ad317f4 552
gillwei7 3:38ec8ad317f4 553 if ( tcpServer.bind(port) == 0 )
gillwei7 3:38ec8ad317f4 554 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 555 else
gillwei7 3:38ec8ad317f4 556 cyntecPrintError(CYNTEC_CMD_ERR_CALL_FAIL);
gillwei7 3:38ec8ad317f4 557
gillwei7 3:38ec8ad317f4 558 } else {
gillwei7 3:38ec8ad317f4 559 cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS);
gillwei7 3:38ec8ad317f4 560 }
gillwei7 0:5c195ab2f696 561 }
gillwei7 0:5c195ab2f696 562 static void cyn_wifi_tcp_server_listen()
gillwei7 0:5c195ab2f696 563 {
gillwei7 0:5c195ab2f696 564 // TCPSocketServer tcpServer;
gillwei7 3:38ec8ad317f4 565
gillwei7 3:38ec8ad317f4 566 int backlog = 1;
gillwei7 3:38ec8ad317f4 567 if (cyntecGetCommandTokenCnt() == 2) {
gillwei7 3:38ec8ad317f4 568 if ( tcpServer.listen(backlog) == 0 ) {
gillwei7 3:38ec8ad317f4 569 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 570 is_Listen = true;
gillwei7 3:38ec8ad317f4 571 } else
gillwei7 3:38ec8ad317f4 572 cyntecPrintError(CYNTEC_CMD_ERR_CALL_FAIL);
gillwei7 3:38ec8ad317f4 573 } else {
gillwei7 3:38ec8ad317f4 574 cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS);
gillwei7 3:38ec8ad317f4 575 }
gillwei7 0:5c195ab2f696 576 }
gillwei7 0:5c195ab2f696 577 static void cyn_wifi_tcp_server_accept()
gillwei7 0:5c195ab2f696 578 {
gillwei7 0:5c195ab2f696 579 // TCPSocketServer tcpServer;
gillwei7 3:38ec8ad317f4 580
gillwei7 3:38ec8ad317f4 581 if (cyntecGetCommandTokenCnt() == 2) {
gillwei7 3:38ec8ad317f4 582 if (is_Listen == false) {
gillwei7 3:38ec8ad317f4 583 cyntecPrintError(CYNTEC_CMD_ERR_INVALID_STATE_TO_PERFORM_OPERATION);
gillwei7 3:38ec8ad317f4 584 return;
gillwei7 3:38ec8ad317f4 585 }
gillwei7 3:38ec8ad317f4 586
gillwei7 3:38ec8ad317f4 587 if ( tcpServer.accept(tcpConnect) == 0 ) {
gillwei7 3:38ec8ad317f4 588 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 589 is_Listen = false;
gillwei7 3:38ec8ad317f4 590 } else
gillwei7 3:38ec8ad317f4 591 cyntecPrintError(CYNTEC_CMD_ERR_CALL_FAIL);
gillwei7 3:38ec8ad317f4 592
gillwei7 3:38ec8ad317f4 593 } else {
gillwei7 3:38ec8ad317f4 594 cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS);
gillwei7 3:38ec8ad317f4 595 }
gillwei7 0:5c195ab2f696 596 }
gillwei7 0:5c195ab2f696 597 static void cyn_wifi_tcp_server_blocking()
gillwei7 0:5c195ab2f696 598 {
gillwei7 0:5c195ab2f696 599 // TCPSocketServer tcpServer;
gillwei7 3:38ec8ad317f4 600
gillwei7 3:38ec8ad317f4 601 bool blocking = false;
gillwei7 3:38ec8ad317f4 602 unsigned int timeout;
gillwei7 3:38ec8ad317f4 603
gillwei7 3:38ec8ad317f4 604 uint8_t *arg;
gillwei7 0:5c195ab2f696 605
gillwei7 3:38ec8ad317f4 606 if (cyntecGetCommandTokenCnt() == 3) {
gillwei7 3:38ec8ad317f4 607
gillwei7 3:38ec8ad317f4 608 arg = cyntecGetCommandArgument(0, NULL);
gillwei7 3:38ec8ad317f4 609 if (arg[0] == '1')
gillwei7 3:38ec8ad317f4 610 blocking = true;
gillwei7 3:38ec8ad317f4 611
gillwei7 3:38ec8ad317f4 612 tcpServer.set_blocking(blocking, 1500);
gillwei7 3:38ec8ad317f4 613 cyntecPrintOk();
gillwei7 0:5c195ab2f696 614
gillwei7 3:38ec8ad317f4 615 } else if (cyntecGetCommandTokenCnt() == 4) {
gillwei7 3:38ec8ad317f4 616
gillwei7 3:38ec8ad317f4 617 arg = cyntecGetCommandArgument(0, NULL);
gillwei7 3:38ec8ad317f4 618 if (arg[0] == '1')
gillwei7 3:38ec8ad317f4 619 blocking = true;
gillwei7 3:38ec8ad317f4 620
gillwei7 3:38ec8ad317f4 621 arg = cyntecGetCommandArgument(1, NULL);
gillwei7 3:38ec8ad317f4 622 timeout = (unsigned int)atoi((const char *)arg);
gillwei7 3:38ec8ad317f4 623
gillwei7 3:38ec8ad317f4 624 tcpServer.set_blocking(blocking, timeout);
gillwei7 3:38ec8ad317f4 625 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 626
gillwei7 3:38ec8ad317f4 627 } else {
gillwei7 3:38ec8ad317f4 628 cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS);
gillwei7 3:38ec8ad317f4 629 }
gillwei7 0:5c195ab2f696 630 }
gillwei7 0:5c195ab2f696 631 static void cyn_wifi_tcp_server_close()
gillwei7 0:5c195ab2f696 632 {
gillwei7 0:5c195ab2f696 633 // TCPSocketServer tcpServer;
gillwei7 3:38ec8ad317f4 634
gillwei7 3:38ec8ad317f4 635 bool shutdown = true;
gillwei7 3:38ec8ad317f4 636 uint8_t *arg;
gillwei7 3:38ec8ad317f4 637
gillwei7 3:38ec8ad317f4 638 if (cyntecGetCommandTokenCnt() == 2) {
gillwei7 3:38ec8ad317f4 639 if ( tcpServer.close(shutdown) == 0 )
gillwei7 3:38ec8ad317f4 640 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 641 else
gillwei7 3:38ec8ad317f4 642 cyntecPrintError(CYNTEC_CMD_ERR_CALL_FAIL);
gillwei7 3:38ec8ad317f4 643
gillwei7 3:38ec8ad317f4 644 } else if (cyntecGetCommandTokenCnt() == 3) {
gillwei7 3:38ec8ad317f4 645 arg = cyntecGetCommandArgument(0, NULL);
gillwei7 3:38ec8ad317f4 646 if (arg[0] == '0')
gillwei7 3:38ec8ad317f4 647 shutdown = false;
gillwei7 3:38ec8ad317f4 648
gillwei7 3:38ec8ad317f4 649 if ( tcpServer.close(shutdown) == 0 )
gillwei7 3:38ec8ad317f4 650 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 651 else
gillwei7 3:38ec8ad317f4 652 cyntecPrintError(CYNTEC_CMD_ERR_CALL_FAIL);
gillwei7 3:38ec8ad317f4 653
gillwei7 3:38ec8ad317f4 654 } else {
gillwei7 3:38ec8ad317f4 655 cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS);
gillwei7 3:38ec8ad317f4 656 }
gillwei7 0:5c195ab2f696 657 }
gillwei7 0:5c195ab2f696 658 /////////**** WIFI TCP Socket Connection ****//////////
gillwei7 0:5c195ab2f696 659 static void cyn_wifi_tcp_connection_connect()
gillwei7 0:5c195ab2f696 660 {
gillwei7 3:38ec8ad317f4 661 uint8_t connect_ip[STATIC_IP_MAX_LEN];
gillwei7 3:38ec8ad317f4 662 int port;
gillwei7 3:38ec8ad317f4 663
gillwei7 3:38ec8ad317f4 664 uint8_t argLen = 0;
gillwei7 3:38ec8ad317f4 665 uint8_t *argIP;
gillwei7 3:38ec8ad317f4 666
gillwei7 3:38ec8ad317f4 667 if (cyntecGetCommandTokenCnt() == 4) {
gillwei7 3:38ec8ad317f4 668 /* handle IP arg */
gillwei7 3:38ec8ad317f4 669 argIP = cyntecGetCommandArgument(0, &argLen);
gillwei7 3:38ec8ad317f4 670 memset( connect_ip, 0, STATIC_IP_MAX_LEN);
gillwei7 3:38ec8ad317f4 671 memcpy( connect_ip, argIP, argLen);
gillwei7 3:38ec8ad317f4 672
gillwei7 3:38ec8ad317f4 673 /* handle Port arg */
gillwei7 3:38ec8ad317f4 674 port = atoi((const char *)cyntecGetCommandArgument(1, NULL));
gillwei7 3:38ec8ad317f4 675
gillwei7 3:38ec8ad317f4 676 if ( tcpConnect.connect((const char *)connect_ip, port) == 0 )
gillwei7 3:38ec8ad317f4 677 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 678 else
gillwei7 3:38ec8ad317f4 679 cyntecPrintError(CYNTEC_CMD_ERR_CALL_FAIL);
gillwei7 3:38ec8ad317f4 680
gillwei7 3:38ec8ad317f4 681 } else {
gillwei7 3:38ec8ad317f4 682 cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS);
gillwei7 3:38ec8ad317f4 683 }
gillwei7 0:5c195ab2f696 684 }
gillwei7 0:5c195ab2f696 685 static void cyn_wifi_tcp_connection_is_connected()
gillwei7 0:5c195ab2f696 686 {
gillwei7 3:38ec8ad317f4 687 bool is_connected = false;
gillwei7 3:38ec8ad317f4 688 is_connected = tcpConnect.is_connected();
gillwei7 3:38ec8ad317f4 689
gillwei7 3:38ec8ad317f4 690 if (is_connected == true)
gillwei7 3:38ec8ad317f4 691 console.printf("\r\nOK;TRUE\r\n\r\n");
gillwei7 3:38ec8ad317f4 692 else
gillwei7 3:38ec8ad317f4 693 console.printf("\r\nOK;FALSE\r\n\r\n");
gillwei7 0:5c195ab2f696 694 }
gillwei7 0:5c195ab2f696 695 static void cyn_wifi_tcp_connection_send()
gillwei7 0:5c195ab2f696 696 {
gillwei7 0:5c195ab2f696 697 char msg[TCP_SEND_MAX_LEN+1];
gillwei7 3:38ec8ad317f4 698
gillwei7 3:38ec8ad317f4 699 uint8_t *arg;
gillwei7 3:38ec8ad317f4 700 int argLen = 0;
gillwei7 3:38ec8ad317f4 701 int sendData;
gillwei7 3:38ec8ad317f4 702
gillwei7 3:38ec8ad317f4 703 if (cyntecGetCommandTokenCnt() == 3) {
gillwei7 3:38ec8ad317f4 704 if ( tcpConnect.is_connected() == false ) {
gillwei7 3:38ec8ad317f4 705 cyntecPrintError(CYNTEC_CMD_ERR_INVALID_STATE_TO_PERFORM_OPERATION);
gillwei7 3:38ec8ad317f4 706 return;
gillwei7 3:38ec8ad317f4 707 }
gillwei7 3:38ec8ad317f4 708
gillwei7 3:38ec8ad317f4 709 /* handle Message arg */
gillwei7 3:38ec8ad317f4 710 arg = cyntecGetCommandArgument(0, (uint8_t *)&argLen);
gillwei7 0:5c195ab2f696 711
gillwei7 3:38ec8ad317f4 712 if (argLen > TCP_SEND_MAX_LEN) {
gillwei7 3:38ec8ad317f4 713 cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_OUT_OF_RANGE);
gillwei7 3:38ec8ad317f4 714 return;
gillwei7 3:38ec8ad317f4 715 }
gillwei7 3:38ec8ad317f4 716
gillwei7 3:38ec8ad317f4 717 memset( msg, 0, TCP_SEND_MAX_LEN+1);
gillwei7 3:38ec8ad317f4 718 memcpy( msg, arg, argLen);
gillwei7 3:38ec8ad317f4 719 sendData = tcpConnect.send(msg, argLen);
gillwei7 3:38ec8ad317f4 720 if ( sendData >= 0 ){
gillwei7 3:38ec8ad317f4 721 console.printf("\r\nOK;");
gillwei7 3:38ec8ad317f4 722 console.printf("%i\r\n\r\n",sendData);
gillwei7 3:38ec8ad317f4 723 }
gillwei7 3:38ec8ad317f4 724 else
gillwei7 3:38ec8ad317f4 725 cyntecPrintError(CYNTEC_CMD_ERR_CALL_FAIL);
gillwei7 3:38ec8ad317f4 726
gillwei7 3:38ec8ad317f4 727 } else {
gillwei7 3:38ec8ad317f4 728 cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS);
gillwei7 3:38ec8ad317f4 729 }
gillwei7 0:5c195ab2f696 730 }
gillwei7 0:5c195ab2f696 731 static void cyn_wifi_tcp_connection_send_all()
gillwei7 0:5c195ab2f696 732 {
gillwei7 0:5c195ab2f696 733 char msg[TCP_SEND_MAX_LEN+1];
gillwei7 3:38ec8ad317f4 734
gillwei7 3:38ec8ad317f4 735 uint8_t *arg;
gillwei7 3:38ec8ad317f4 736 int argLen = 0;
gillwei7 3:38ec8ad317f4 737
gillwei7 3:38ec8ad317f4 738 if (cyntecGetCommandTokenCnt() == 3) {
gillwei7 3:38ec8ad317f4 739 /* handle Message arg */
gillwei7 3:38ec8ad317f4 740 arg = cyntecGetCommandArgument(0, (uint8_t *)&argLen);
gillwei7 0:5c195ab2f696 741
gillwei7 3:38ec8ad317f4 742 if (argLen > TCP_SEND_MAX_LEN) {
gillwei7 3:38ec8ad317f4 743 cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_OUT_OF_RANGE);
gillwei7 3:38ec8ad317f4 744 return;
gillwei7 3:38ec8ad317f4 745 }
gillwei7 3:38ec8ad317f4 746
gillwei7 3:38ec8ad317f4 747 memset( msg, 0, TCP_SEND_MAX_LEN+1);
gillwei7 3:38ec8ad317f4 748 memcpy( msg, arg, argLen);
gillwei7 3:38ec8ad317f4 749
gillwei7 3:38ec8ad317f4 750 if ( tcpConnect.send_all(msg, argLen) >= 0 )
gillwei7 3:38ec8ad317f4 751 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 752 else
gillwei7 3:38ec8ad317f4 753 cyntecPrintError(CYNTEC_CMD_ERR_CALL_FAIL);
gillwei7 3:38ec8ad317f4 754
gillwei7 3:38ec8ad317f4 755 } else {
gillwei7 3:38ec8ad317f4 756 cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS);
gillwei7 3:38ec8ad317f4 757 }
gillwei7 0:5c195ab2f696 758 }
gillwei7 0:5c195ab2f696 759 static void cyn_wifi_tcp_connection_receive()
gillwei7 0:5c195ab2f696 760 {
gillwei7 0:5c195ab2f696 761 char msg[TCP_SEND_MAX_LEN+1];
gillwei7 3:38ec8ad317f4 762 int argLen = 0;
gillwei7 3:38ec8ad317f4 763
gillwei7 3:38ec8ad317f4 764 if (cyntecGetCommandTokenCnt() == 3) {
gillwei7 3:38ec8ad317f4 765 /* handle Message arg */
gillwei7 3:38ec8ad317f4 766 argLen = atoi((const char *)cyntecGetCommandArgument(0, NULL));
gillwei7 3:38ec8ad317f4 767
gillwei7 3:38ec8ad317f4 768 if (argLen > TCP_SEND_MAX_LEN || argLen < 0) {
gillwei7 3:38ec8ad317f4 769 cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_OUT_OF_RANGE);
gillwei7 3:38ec8ad317f4 770 return;
gillwei7 3:38ec8ad317f4 771 }
gillwei7 0:5c195ab2f696 772
gillwei7 3:38ec8ad317f4 773 memset( msg, 0, TCP_SEND_MAX_LEN+1);
gillwei7 3:38ec8ad317f4 774
gillwei7 3:38ec8ad317f4 775 if ( tcpConnect.receive(msg, argLen) >= 0 ) {
gillwei7 3:38ec8ad317f4 776 console.printf("\r\nOK;%s\r\n\r\n",msg);
gillwei7 3:38ec8ad317f4 777 } else
gillwei7 3:38ec8ad317f4 778 cyntecPrintError(CYNTEC_CMD_ERR_CALL_FAIL);
gillwei7 3:38ec8ad317f4 779
gillwei7 3:38ec8ad317f4 780 } else {
gillwei7 3:38ec8ad317f4 781 cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS);
gillwei7 3:38ec8ad317f4 782 }
gillwei7 0:5c195ab2f696 783 }
gillwei7 0:5c195ab2f696 784 static void cyn_wifi_tcp_connection_receive_all()
gillwei7 0:5c195ab2f696 785 {
gillwei7 0:5c195ab2f696 786 char msg[TCP_SEND_MAX_LEN+1];
gillwei7 3:38ec8ad317f4 787 int argLen = 0;
gillwei7 3:38ec8ad317f4 788
gillwei7 3:38ec8ad317f4 789 if (cyntecGetCommandTokenCnt() == 3) {
gillwei7 3:38ec8ad317f4 790 /* handle Message arg */
gillwei7 3:38ec8ad317f4 791 argLen = atoi((const char *)cyntecGetCommandArgument(0, NULL));
gillwei7 3:38ec8ad317f4 792
gillwei7 3:38ec8ad317f4 793 if (argLen > TCP_SEND_MAX_LEN || argLen < 0) {
gillwei7 3:38ec8ad317f4 794 cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_OUT_OF_RANGE);
gillwei7 3:38ec8ad317f4 795 return;
gillwei7 3:38ec8ad317f4 796 }
gillwei7 0:5c195ab2f696 797
gillwei7 3:38ec8ad317f4 798 memset( msg, 0, TCP_SEND_MAX_LEN+1);
gillwei7 3:38ec8ad317f4 799
gillwei7 3:38ec8ad317f4 800 if ( tcpConnect.receive_all(msg, argLen) >= 0 ) {
gillwei7 3:38ec8ad317f4 801 console.printf("\r\nOK;%s\r\n\r\n",msg);
gillwei7 3:38ec8ad317f4 802 } else
gillwei7 3:38ec8ad317f4 803 cyntecPrintError(CYNTEC_CMD_ERR_CALL_FAIL);
gillwei7 3:38ec8ad317f4 804
gillwei7 3:38ec8ad317f4 805 } else {
gillwei7 3:38ec8ad317f4 806 cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS);
gillwei7 3:38ec8ad317f4 807 }
gillwei7 0:5c195ab2f696 808 }
gillwei7 0:5c195ab2f696 809 static void cyn_wifi_tcp_connection_blocking()
gillwei7 0:5c195ab2f696 810 {
gillwei7 3:38ec8ad317f4 811 bool blocking = false;
gillwei7 3:38ec8ad317f4 812 unsigned int timeout;
gillwei7 3:38ec8ad317f4 813
gillwei7 3:38ec8ad317f4 814 uint8_t *arg;
gillwei7 3:38ec8ad317f4 815
gillwei7 3:38ec8ad317f4 816 if (cyntecGetCommandTokenCnt() == 3) {
gillwei7 0:5c195ab2f696 817
gillwei7 3:38ec8ad317f4 818 arg = cyntecGetCommandArgument(0, NULL);
gillwei7 3:38ec8ad317f4 819 if (arg[0] == '1')
gillwei7 3:38ec8ad317f4 820 blocking = true;
gillwei7 3:38ec8ad317f4 821
gillwei7 3:38ec8ad317f4 822 tcpConnect.set_blocking(blocking, 1500);
gillwei7 3:38ec8ad317f4 823 cyntecPrintOk();
gillwei7 0:5c195ab2f696 824
gillwei7 3:38ec8ad317f4 825 } else if (cyntecGetCommandTokenCnt() == 4) {
gillwei7 3:38ec8ad317f4 826 arg = cyntecGetCommandArgument(0, NULL);
gillwei7 3:38ec8ad317f4 827 if (arg[0] == '1')
gillwei7 3:38ec8ad317f4 828 blocking = true;
gillwei7 3:38ec8ad317f4 829
gillwei7 3:38ec8ad317f4 830 arg = cyntecGetCommandArgument(1, NULL);
gillwei7 3:38ec8ad317f4 831 timeout = (unsigned int)atoi((const char *)arg);
gillwei7 3:38ec8ad317f4 832
gillwei7 3:38ec8ad317f4 833 tcpConnect.set_blocking(blocking, timeout);
gillwei7 3:38ec8ad317f4 834 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 835
gillwei7 3:38ec8ad317f4 836 } else {
gillwei7 3:38ec8ad317f4 837 cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS);
gillwei7 3:38ec8ad317f4 838 }
gillwei7 0:5c195ab2f696 839 }
gillwei7 0:5c195ab2f696 840 static void cyn_wifi_tcp_connection_close()
gillwei7 0:5c195ab2f696 841 {
gillwei7 3:38ec8ad317f4 842 bool shutdown = true;
gillwei7 3:38ec8ad317f4 843 uint8_t *arg;
gillwei7 3:38ec8ad317f4 844
gillwei7 3:38ec8ad317f4 845 if (cyntecGetCommandTokenCnt() == 2) {
gillwei7 3:38ec8ad317f4 846 if ( tcpConnect.close(shutdown) == 0 )
gillwei7 3:38ec8ad317f4 847 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 848 else
gillwei7 3:38ec8ad317f4 849 cyntecPrintError(CYNTEC_CMD_ERR_CALL_FAIL);
gillwei7 3:38ec8ad317f4 850
gillwei7 3:38ec8ad317f4 851 } else if (cyntecGetCommandTokenCnt() == 3) {
gillwei7 3:38ec8ad317f4 852 arg = cyntecGetCommandArgument(0, NULL);
gillwei7 3:38ec8ad317f4 853 if (arg[0] == '0')
gillwei7 3:38ec8ad317f4 854 shutdown = false;
gillwei7 3:38ec8ad317f4 855
gillwei7 3:38ec8ad317f4 856 if ( tcpConnect.close(shutdown) == 0 )
gillwei7 3:38ec8ad317f4 857 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 858 else
gillwei7 3:38ec8ad317f4 859 cyntecPrintError(CYNTEC_CMD_ERR_CALL_FAIL);
gillwei7 3:38ec8ad317f4 860
gillwei7 3:38ec8ad317f4 861 } else {
gillwei7 3:38ec8ad317f4 862 cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS);
gillwei7 3:38ec8ad317f4 863 }
gillwei7 0:5c195ab2f696 864 }
gillwei7 0:5c195ab2f696 865 //static void cyn_wifi_tcp_connection_reset_address(){}
gillwei7 0:5c195ab2f696 866 //static void cyn_wifi_tcp_connection_set_address(){}
gillwei7 0:5c195ab2f696 867 //static void cyn_wifi_tcp_connection_address(){}
gillwei7 3:38ec8ad317f4 868 //static void cyn_wifi_tcp_connection_port(){}
gillwei7 3:38ec8ad317f4 869
gillwei7 0:5c195ab2f696 870
gillwei7 3:38ec8ad317f4 871
gillwei7 3:38ec8ad317f4 872 /////////**** WIFI UDP Socket Implement ****//////////
gillwei7 0:5c195ab2f696 873 static void cyn_wifi_udp_init()
gillwei7 3:38ec8ad317f4 874 {
gillwei7 3:38ec8ad317f4 875 if (cyntecGetCommandTokenCnt() == 2) {
gillwei7 3:38ec8ad317f4 876 if ( udpSocket.init() == 0 )
gillwei7 3:38ec8ad317f4 877 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 878 else
gillwei7 3:38ec8ad317f4 879 cyntecPrintError(CYNTEC_CMD_ERR_CALL_FAIL);
gillwei7 3:38ec8ad317f4 880
gillwei7 3:38ec8ad317f4 881 } else {
gillwei7 3:38ec8ad317f4 882 cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS);
gillwei7 3:38ec8ad317f4 883 }
gillwei7 3:38ec8ad317f4 884 }
gillwei7 0:5c195ab2f696 885 static void cyn_wifi_udp_bind()
gillwei7 0:5c195ab2f696 886 {
gillwei7 3:38ec8ad317f4 887 int port = 1;
gillwei7 3:38ec8ad317f4 888 if (cyntecGetCommandTokenCnt() == 2) {
gillwei7 3:38ec8ad317f4 889 udpSocket.bind(port);
gillwei7 3:38ec8ad317f4 890 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 891 // if ( udpSocket.bind(port) == 0 )
gillwei7 3:38ec8ad317f4 892 // cyntecPrintOk();
gillwei7 3:38ec8ad317f4 893 // else
gillwei7 3:38ec8ad317f4 894 // cyntecPrintError(CYNTEC_CMD_ERR_CALL_FAIL);
gillwei7 3:38ec8ad317f4 895
gillwei7 3:38ec8ad317f4 896 } else if (cyntecGetCommandTokenCnt() == 3) {
gillwei7 3:38ec8ad317f4 897 port = atoi((const char*)(cyntecGetCommandArgument(0, NULL)));
gillwei7 3:38ec8ad317f4 898
gillwei7 3:38ec8ad317f4 899 if (port < 0) {
gillwei7 3:38ec8ad317f4 900 cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_OUT_OF_RANGE);
gillwei7 3:38ec8ad317f4 901 return;
gillwei7 3:38ec8ad317f4 902 }
gillwei7 3:38ec8ad317f4 903
gillwei7 3:38ec8ad317f4 904 udpSocket.bind(port);
gillwei7 3:38ec8ad317f4 905 cyntecPrintOk();
gillwei7 0:5c195ab2f696 906 // if ( udpSocket.bind(port) == 0 )
gillwei7 0:5c195ab2f696 907 // cyntecPrintOk();
gillwei7 0:5c195ab2f696 908 // else
gillwei7 0:5c195ab2f696 909 // cyntecPrintError(CYNTEC_CMD_ERR_CALL_FAIL);
gillwei7 3:38ec8ad317f4 910
gillwei7 3:38ec8ad317f4 911 } else {
gillwei7 3:38ec8ad317f4 912 cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS);
gillwei7 3:38ec8ad317f4 913 }
gillwei7 3:38ec8ad317f4 914 }
gillwei7 0:5c195ab2f696 915 static void cyn_wifi_udp_set_broadcasting()
gillwei7 0:5c195ab2f696 916 {
gillwei7 3:38ec8ad317f4 917 bool broadcast = true;
gillwei7 3:38ec8ad317f4 918 uint8_t *arg;
gillwei7 3:38ec8ad317f4 919
gillwei7 3:38ec8ad317f4 920 if (cyntecGetCommandTokenCnt() == 2) {
gillwei7 3:38ec8ad317f4 921 if ( udpSocket.set_broadcasting(broadcast) == 0 )
gillwei7 3:38ec8ad317f4 922 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 923 else
gillwei7 3:38ec8ad317f4 924 cyntecPrintError(CYNTEC_CMD_ERR_CALL_FAIL);
gillwei7 3:38ec8ad317f4 925
gillwei7 3:38ec8ad317f4 926 } else if (cyntecGetCommandTokenCnt() == 3) {
gillwei7 3:38ec8ad317f4 927 arg = cyntecGetCommandArgument(0, NULL);
gillwei7 3:38ec8ad317f4 928 if (arg[0] == '0')
gillwei7 3:38ec8ad317f4 929 broadcast = false;
gillwei7 3:38ec8ad317f4 930
gillwei7 3:38ec8ad317f4 931 if ( udpSocket.set_broadcasting(broadcast) == 0 )
gillwei7 3:38ec8ad317f4 932 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 933 else
gillwei7 3:38ec8ad317f4 934 cyntecPrintError(CYNTEC_CMD_ERR_CALL_FAIL);
gillwei7 3:38ec8ad317f4 935
gillwei7 3:38ec8ad317f4 936 } else {
gillwei7 3:38ec8ad317f4 937 cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS);
gillwei7 3:38ec8ad317f4 938 }
gillwei7 3:38ec8ad317f4 939 }
gillwei7 0:5c195ab2f696 940 static void cyn_wifi_udp_send_to()
gillwei7 0:5c195ab2f696 941 {
gillwei7 0:5c195ab2f696 942 char msg[UDP_SEND_MAX_LEN+1];
gillwei7 3:38ec8ad317f4 943
gillwei7 3:38ec8ad317f4 944 uint8_t *arg;
gillwei7 3:38ec8ad317f4 945 int argLen = 0;
gillwei7 3:38ec8ad317f4 946
gillwei7 3:38ec8ad317f4 947 if (cyntecGetCommandTokenCnt() == 3) {
gillwei7 3:38ec8ad317f4 948 /* handle Message arg */
gillwei7 3:38ec8ad317f4 949 arg = cyntecGetCommandArgument(0, (uint8_t *)&argLen);
gillwei7 3:38ec8ad317f4 950
gillwei7 3:38ec8ad317f4 951 if (argLen > UDP_SEND_MAX_LEN || argLen < 0) {
gillwei7 3:38ec8ad317f4 952 cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_OUT_OF_RANGE);
gillwei7 3:38ec8ad317f4 953 return;
gillwei7 3:38ec8ad317f4 954 }
gillwei7 0:5c195ab2f696 955
gillwei7 3:38ec8ad317f4 956 memset( msg, 0, UDP_SEND_MAX_LEN+1);
gillwei7 3:38ec8ad317f4 957 memcpy( msg, arg, argLen);
gillwei7 3:38ec8ad317f4 958
gillwei7 3:38ec8ad317f4 959 if ( udpSocket.sendTo(cliEndpoint, msg, argLen) >= 0 )
gillwei7 3:38ec8ad317f4 960 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 961 else
gillwei7 3:38ec8ad317f4 962 cyntecPrintError(CYNTEC_CMD_ERR_CALL_FAIL);
gillwei7 3:38ec8ad317f4 963
gillwei7 3:38ec8ad317f4 964 } else {
gillwei7 3:38ec8ad317f4 965 cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS);
gillwei7 3:38ec8ad317f4 966 }
gillwei7 3:38ec8ad317f4 967 }
gillwei7 0:5c195ab2f696 968 static void cyn_wifi_udp_received_from()
gillwei7 0:5c195ab2f696 969 {
gillwei7 0:5c195ab2f696 970 char msg[UDP_SEND_MAX_LEN+1];
gillwei7 3:38ec8ad317f4 971 int argLen = 0;
gillwei7 3:38ec8ad317f4 972
gillwei7 3:38ec8ad317f4 973 if (cyntecGetCommandTokenCnt() == 3) {
gillwei7 3:38ec8ad317f4 974 /* handle Message arg */
gillwei7 3:38ec8ad317f4 975 argLen = atoi((const char *)cyntecGetCommandArgument(0, NULL));
gillwei7 3:38ec8ad317f4 976
gillwei7 3:38ec8ad317f4 977 if (argLen > UDP_SEND_MAX_LEN || argLen < 0) {
gillwei7 3:38ec8ad317f4 978 cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_OUT_OF_RANGE);
gillwei7 3:38ec8ad317f4 979 return;
gillwei7 3:38ec8ad317f4 980 }
gillwei7 0:5c195ab2f696 981
gillwei7 3:38ec8ad317f4 982 memset( msg, 0, UDP_SEND_MAX_LEN+1);
gillwei7 3:38ec8ad317f4 983
gillwei7 3:38ec8ad317f4 984 if ( udpSocket.receiveFrom(cliEndpoint, msg, argLen) >= 0 ) {
gillwei7 3:38ec8ad317f4 985 console.printf("\r\nOK;%s\r\n\r\n",msg);
gillwei7 3:38ec8ad317f4 986 } else
gillwei7 3:38ec8ad317f4 987 cyntecPrintError(CYNTEC_CMD_ERR_CALL_FAIL);
gillwei7 3:38ec8ad317f4 988
gillwei7 3:38ec8ad317f4 989 } else {
gillwei7 3:38ec8ad317f4 990 cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS);
gillwei7 3:38ec8ad317f4 991 }
gillwei7 0:5c195ab2f696 992 }
gillwei7 0:5c195ab2f696 993 static void cyn_wifi_udp_blocking()
gillwei7 0:5c195ab2f696 994 {
gillwei7 3:38ec8ad317f4 995 bool blocking = false;
gillwei7 3:38ec8ad317f4 996 unsigned int timeout;
gillwei7 3:38ec8ad317f4 997
gillwei7 3:38ec8ad317f4 998 uint8_t *arg;
gillwei7 3:38ec8ad317f4 999 if (cyntecGetCommandTokenCnt() == 3) {
gillwei7 0:5c195ab2f696 1000
gillwei7 3:38ec8ad317f4 1001 arg = cyntecGetCommandArgument(0, NULL);
gillwei7 3:38ec8ad317f4 1002 if (arg[0] == '1')
gillwei7 3:38ec8ad317f4 1003 blocking = true;
gillwei7 3:38ec8ad317f4 1004
gillwei7 3:38ec8ad317f4 1005 udpSocket.set_blocking(blocking, 1500);
gillwei7 3:38ec8ad317f4 1006 cyntecPrintOk();
gillwei7 0:5c195ab2f696 1007
gillwei7 3:38ec8ad317f4 1008 } else if (cyntecGetCommandTokenCnt() == 4) {
gillwei7 3:38ec8ad317f4 1009 arg = cyntecGetCommandArgument(0, NULL);
gillwei7 3:38ec8ad317f4 1010 if (arg[0] == '1')
gillwei7 3:38ec8ad317f4 1011 blocking = true;
gillwei7 3:38ec8ad317f4 1012
gillwei7 3:38ec8ad317f4 1013 arg = cyntecGetCommandArgument(1, NULL);
gillwei7 3:38ec8ad317f4 1014 timeout = (unsigned int)atoi((const char *)arg);
gillwei7 3:38ec8ad317f4 1015
gillwei7 3:38ec8ad317f4 1016 udpSocket.set_blocking(blocking, timeout);
gillwei7 3:38ec8ad317f4 1017 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 1018
gillwei7 3:38ec8ad317f4 1019 } else {
gillwei7 3:38ec8ad317f4 1020 cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS);
gillwei7 3:38ec8ad317f4 1021 }
gillwei7 3:38ec8ad317f4 1022 }
gillwei7 0:5c195ab2f696 1023 static void cyn_wifi_udp_close()
gillwei7 0:5c195ab2f696 1024 {
gillwei7 3:38ec8ad317f4 1025 bool shutdown = true;
gillwei7 3:38ec8ad317f4 1026 uint8_t *arg;
gillwei7 3:38ec8ad317f4 1027
gillwei7 3:38ec8ad317f4 1028 if (cyntecGetCommandTokenCnt() == 2) {
gillwei7 3:38ec8ad317f4 1029 if ( udpSocket.close(shutdown) == 0 )
gillwei7 3:38ec8ad317f4 1030 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 1031 else
gillwei7 3:38ec8ad317f4 1032 cyntecPrintError(CYNTEC_CMD_ERR_CALL_FAIL);
gillwei7 3:38ec8ad317f4 1033
gillwei7 3:38ec8ad317f4 1034 } else if (cyntecGetCommandTokenCnt() == 3) {
gillwei7 3:38ec8ad317f4 1035 arg = cyntecGetCommandArgument(0, NULL);
gillwei7 3:38ec8ad317f4 1036 if (arg[0] == '0')
gillwei7 3:38ec8ad317f4 1037 shutdown = false;
gillwei7 3:38ec8ad317f4 1038
gillwei7 3:38ec8ad317f4 1039 if ( udpSocket.close(shutdown) == 0 )
gillwei7 3:38ec8ad317f4 1040 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 1041 else
gillwei7 3:38ec8ad317f4 1042 cyntecPrintError(CYNTEC_CMD_ERR_CALL_FAIL);
gillwei7 3:38ec8ad317f4 1043
gillwei7 3:38ec8ad317f4 1044 } else {
gillwei7 3:38ec8ad317f4 1045 cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS);
gillwei7 3:38ec8ad317f4 1046 }
gillwei7 3:38ec8ad317f4 1047 }
gillwei7 3:38ec8ad317f4 1048
gillwei7 3:38ec8ad317f4 1049
gillwei7 3:38ec8ad317f4 1050
gillwei7 3:38ec8ad317f4 1051 /////////**** WIFI UDP Endpoint Implement ****//////////
gillwei7 0:5c195ab2f696 1052 static void cyn_wifi_udp_endpoint_reset_address()
gillwei7 0:5c195ab2f696 1053 {
gillwei7 3:38ec8ad317f4 1054 if (cyntecGetCommandTokenCnt() == 2) {
gillwei7 3:38ec8ad317f4 1055 cliEndpoint.reset_address();
gillwei7 3:38ec8ad317f4 1056 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 1057 } else {
gillwei7 3:38ec8ad317f4 1058 cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS);
gillwei7 3:38ec8ad317f4 1059 }
gillwei7 3:38ec8ad317f4 1060 }
gillwei7 0:5c195ab2f696 1061 static void cyn_wifi_udp_endpoint_address()
gillwei7 0:5c195ab2f696 1062 {
gillwei7 3:38ec8ad317f4 1063 uint8_t argHost[STATIC_IP_MAX_LEN];
gillwei7 3:38ec8ad317f4 1064 int port;
gillwei7 3:38ec8ad317f4 1065
gillwei7 3:38ec8ad317f4 1066 uint8_t *arg;
gillwei7 3:38ec8ad317f4 1067 uint8_t argLen;
gillwei7 3:38ec8ad317f4 1068
gillwei7 3:38ec8ad317f4 1069 if ( cyntecGetCommandTokenCnt() == 4 ) {
gillwei7 3:38ec8ad317f4 1070 /* handle Host addr */
gillwei7 3:38ec8ad317f4 1071 arg = cyntecGetCommandArgument(0, &argLen);
gillwei7 3:38ec8ad317f4 1072
gillwei7 3:38ec8ad317f4 1073 if ( cyntecIsValidIP(arg,argLen) != 0) {
gillwei7 3:38ec8ad317f4 1074 cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_OUT_OF_RANGE);
gillwei7 3:38ec8ad317f4 1075 return;
gillwei7 3:38ec8ad317f4 1076 }
gillwei7 3:38ec8ad317f4 1077
gillwei7 3:38ec8ad317f4 1078 memset( argHost, 0, STATIC_IP_MAX_LEN);
gillwei7 3:38ec8ad317f4 1079 memcpy( argHost, arg, argLen);
gillwei7 3:38ec8ad317f4 1080
gillwei7 3:38ec8ad317f4 1081 /* Handle Port */
gillwei7 3:38ec8ad317f4 1082 port = atoi((const char *)(cyntecGetCommandArgument(1, NULL)));
gillwei7 3:38ec8ad317f4 1083 if (port < 0) {
gillwei7 3:38ec8ad317f4 1084 cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_OUT_OF_RANGE);
gillwei7 3:38ec8ad317f4 1085 return;
gillwei7 3:38ec8ad317f4 1086 }
gillwei7 3:38ec8ad317f4 1087
gillwei7 3:38ec8ad317f4 1088 if ( cliEndpoint.set_address((const char *)argHost, (const int)port) == 0)
gillwei7 3:38ec8ad317f4 1089 cyntecPrintOk();
gillwei7 3:38ec8ad317f4 1090 else
gillwei7 3:38ec8ad317f4 1091 cyntecPrintError(CYNTEC_CMD_ERR_CALL_FAIL);
gillwei7 3:38ec8ad317f4 1092
gillwei7 3:38ec8ad317f4 1093 } else {
gillwei7 3:38ec8ad317f4 1094 console.printf("\r\nOK;%s\r\n\r\n",cliEndpoint.get_address());
gillwei7 3:38ec8ad317f4 1095 }
gillwei7 3:38ec8ad317f4 1096 }
gillwei7 3:38ec8ad317f4 1097 //static void cyn_wifi_udp_endpoint_get_address(){}
gillwei7 0:5c195ab2f696 1098 static void cyn_wifi_udp_endpoint_port()
gillwei7 0:5c195ab2f696 1099 {
gillwei7 3:38ec8ad317f4 1100 console.printf("\r\nOK;%d\r\n\r\n",cliEndpoint.get_port());
gillwei7 3:38ec8ad317f4 1101 }
gillwei7 0:5c195ab2f696 1102
gillwei7 0:5c195ab2f696 1103 // 2015/1/20: Lester add
gillwei7 0:5c195ab2f696 1104
gillwei7 0:5c195ab2f696 1105 CyntecCommandEntry wifiCommandSets[] = {
gillwei7 0:5c195ab2f696 1106
gillwei7 3:38ec8ad317f4 1107 /////////**** WIFI Device ****//////////
gillwei7 3:38ec8ad317f4 1108 {"device_sleep", cyn_wifi_device_sleep, NULL, "Set WIFI module to sleep mode"},
gillwei7 3:38ec8ad317f4 1109 {"device_coex", cyn_wifi_device_coex, NULL, "Set/Get device switch for WIFI module"},
gillwei7 3:38ec8ad317f4 1110 {"device_network", cyn_wifi_device_network, NULL, " <SSID> <PASSWORD> <PRIORITY> Set SSID and PASSWORD for WIFI module"},
gillwei7 3:38ec8ad317f4 1111 //gill
gillwei7 3:38ec8ad317f4 1112 // void WIFIDevice::setAccessPoint(char* SSID, char* PW, security_t security=SECURITY_WPA2_AES_PSK, uint8_t channel=1);
gillwei7 3:38ec8ad317f4 1113 {"device_read_wifi_sp_version",cyn_wifi_read_wifi_sp_version, NULL, "Set network connection in priority"},
gillwei7 3:38ec8ad317f4 1114 {"device_ap_scan", cyn_wifi_device_ap_scan, NULL, "Perform WIFI scan"},
gillwei7 3:38ec8ad317f4 1115 {"device_set_ap",cyn_wifi_set_ap, NULL, " <SSID> <PASSWORD> <SECURITY> Set Access Point in given configuration"},
gillwei7 3:38ec8ad317f4 1116 {"device_mem_erase4k",cyn_wifi_mem_erase4k, NULL, " <MEMADDR> Erase a 4KB sector of embedded flash"},
gillwei7 3:38ec8ad317f4 1117 {"device_mem_read",cyn_wifi_mem_read, NULL, " <MEMADDR> <LEN> Read data from embeeded flash"},
gillwei7 3:38ec8ad317f4 1118 {"device_mem_write",cyn_wifi_mem_write, NULL, " <MEMADDR> <DATA> Write data into embeeded flash"},
gillwei7 0:5c195ab2f696 1119
gillwei7 3:38ec8ad317f4 1120 /////////**** WIFI Ethernet ****//////////
gillwei7 3:38ec8ad317f4 1121 {"ethernet_init", cyn_wifi_ethernet_init, NULL, " <STATIC IP> Initialize the interface to use DHCP"},
gillwei7 3:38ec8ad317f4 1122 {"ethernet_connect", cyn_wifi_ethernet_connect, NULL, "<TIMEOUT MS> Bring up the WiFi connection"},
gillwei7 3:38ec8ad317f4 1123 {"ethernet_disconnect", cyn_wifi_ethernet_disconnect, NULL, "Bring the interface down"},
gillwei7 3:38ec8ad317f4 1124 {"ethernet_mac", cyn_wifi_ethernet_mac, NULL, "Get MAC addr of Ehternet Interface"},
gillwei7 3:38ec8ad317f4 1125 {"ethernet_ip", cyn_wifi_ethernet_ip, NULL, "Get IP addr of Ehternet Interface"},
gillwei7 3:38ec8ad317f4 1126 /* not implement yet... */
gillwei7 3:38ec8ad317f4 1127 ////{"ethernet_gateway", cyn_wifi_ethernet_gateway, NULL, "........."},
gillwei7 3:38ec8ad317f4 1128 ////{"ethernet_mask", cyn_wifi_ethernet_mask, NULL, "........."},
gillwei7 3:38ec8ad317f4 1129 /* not implement yet... */
gillwei7 3:38ec8ad317f4 1130
gillwei7 3:38ec8ad317f4 1131 /////////**** WIFI TCP Socket Server ****//////////
gillwei7 3:38ec8ad317f4 1132 {"tcp_server_bind", cyn_wifi_tcp_server_bind, NULL, " <PORT> Bind a socket to a port"},
gillwei7 3:38ec8ad317f4 1133 {"tcp_server_listen", cyn_wifi_tcp_server_listen, NULL, "Start listening for incomming connections"},
gillwei7 3:38ec8ad317f4 1134 {"tcp_server_accept", cyn_wifi_tcp_server_accept, NULL, "Accept a new connection"},
gillwei7 3:38ec8ad317f4 1135 {"tcp_server_blocking", cyn_wifi_tcp_server_blocking, NULL, " <SETTING> <TIMEOUT MS> Set blocking mode and timeout"},
gillwei7 3:38ec8ad317f4 1136 {"tcp_server_close", cyn_wifi_tcp_server_close, NULL, " <SHUTDOWN> Close the socket"},
gillwei7 3:38ec8ad317f4 1137
gillwei7 3:38ec8ad317f4 1138 /////////**** WIFI TCP Socket Connection ****//////////
gillwei7 3:38ec8ad317f4 1139 {"tcp_connection_connect", cyn_wifi_tcp_connection_connect, NULL, " <IPADDR> <PORT> Connects TCP socket to the server"},
gillwei7 3:38ec8ad317f4 1140 {"tcp_connection_is_connect", cyn_wifi_tcp_connection_is_connected, NULL, "Check if the socket is connected"},
gillwei7 3:38ec8ad317f4 1141 {"tcp_connection_send", cyn_wifi_tcp_connection_send, NULL, " <DATA> Send data to the remote host"},
gillwei7 3:38ec8ad317f4 1142 {"tcp_connection_send_all", cyn_wifi_tcp_connection_send_all, NULL, " <DATA> Send all the data to the remote host"},
gillwei7 3:38ec8ad317f4 1143 {"tcp_connection_receive", cyn_wifi_tcp_connection_receive, NULL, " <DATALEN> Receive data from the remote host"},
gillwei7 3:38ec8ad317f4 1144 {"tcp_connection_receive_all", cyn_wifi_tcp_connection_receive_all, NULL, "<DATALEN> Receive all the data from the remote host"},
gillwei7 3:38ec8ad317f4 1145 {"tcp_connection_blocking ", cyn_wifi_tcp_connection_blocking, NULL, "<SETTING> <TIMEOUT MS> Set blocking mode and timeout"},
gillwei7 3:38ec8ad317f4 1146 {"tcp_connection_close", cyn_wifi_tcp_connection_close, NULL, "<SHUTDOWN> Close the connection"},
gillwei7 0:5c195ab2f696 1147 // {"tcp_connection_reset_address", cyn_wifi_tcp_connection_reset_address, NULL, "........."},
gillwei7 0:5c195ab2f696 1148 // {"tcp_connection_address", cyn_wifi_tcp_connection_address, NULL, "........."},
gillwei7 0:5c195ab2f696 1149 // {"tcp_connection_port", cyn_wifi_tcp_connection_port, NULL, "........."},
gillwei7 3:38ec8ad317f4 1150
gillwei7 3:38ec8ad317f4 1151 /////////**** WIFI UDP Socket ****//////////
gillwei7 3:38ec8ad317f4 1152 {"udp_init", cyn_wifi_udp_init, NULL, "Init UDP Client Socket"},
gillwei7 3:38ec8ad317f4 1153 {"udp_bind", cyn_wifi_udp_bind, NULL, " <PORT> Bind UDP Server Socket to a port"},
gillwei7 3:38ec8ad317f4 1154 {"udp_set_broadcasting", cyn_wifi_udp_set_broadcasting, NULL, " <IS_BROADCAST> Set socket in broadcasting"},
gillwei7 3:38ec8ad317f4 1155 {"udp_send_to", cyn_wifi_udp_send_to, NULL, " <DATA> Send a packet to a remote endpoint"},
gillwei7 3:38ec8ad317f4 1156 {"udp_received_from", cyn_wifi_udp_received_from, NULL, " <DATALEN> Receive a packet from a remote endpont"},
gillwei7 3:38ec8ad317f4 1157 {"udp_blocking", cyn_wifi_udp_blocking, NULL, " <DATALEN> Set blocking mode and timeout"},
gillwei7 3:38ec8ad317f4 1158 {"udp_close", cyn_wifi_udp_close, NULL, " <SHUTDOWN> Close the socket"},
gillwei7 3:38ec8ad317f4 1159
gillwei7 3:38ec8ad317f4 1160 /////////**** WIFI UDP Endpoint ****//////////
gillwei7 3:38ec8ad317f4 1161 {"udp_endpoint_reset", cyn_wifi_udp_endpoint_reset_address, NULL, "Reset the address of this endpoint"},
gillwei7 3:38ec8ad317f4 1162 {"udp_endpoint_address", cyn_wifi_udp_endpoint_address, NULL, " <IPADDR> <PORT> Set/Get the address of this endpoint"},
gillwei7 3:38ec8ad317f4 1163 {"udp_endpoint_port", cyn_wifi_udp_endpoint_port, NULL, "Get the port of this endpoint"},
gillwei7 3:38ec8ad317f4 1164
gillwei7 3:38ec8ad317f4 1165 {NULL, NULL, NULL, NULL},
gillwei7 0:5c195ab2f696 1166
gillwei7 0:5c195ab2f696 1167 };
gillwei7 0:5c195ab2f696 1168
gillwei7 0:5c195ab2f696 1169
gillwei7 3:38ec8ad317f4 1170