Delta / Mbed OS NNN50_CLI

Dependencies:   NNN50_WIFI_API

Fork of NNN50_WiFi_HelloWorld by Delta

Committer:
silviaChen
Date:
Thu Sep 14 01:48:08 2017 +0000
Revision:
9:871fc0231c7f
Support both BLE UART service and WiFi CLI command

Who changed what in which revision?

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