fork test

Dependencies:   BLE_API WIFI_API_32kRAM mbed nRF51822

Fork of NNN40_CLI by Delta

Committer:
gillwei7
Date:
Sat Nov 07 09:02:38 2015 +0000
Revision:
4:b52035367aee
Parent:
3:38ec8ad317f4
Child:
5:ee474e3133eb
20151107_Gill Wei commit_change to BLE API/nRF library API; _known bug : if write longer data than before, Read data need twice.

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