Giung Kim / Mbed OS WIZnet-IoTShield-WM-N400MSE-TCP
Committer:
AustinKim
Date:
Wed Sep 18 05:52:10 2019 +0000
Revision:
1:1c65b1dd9e7a
Parent:
0:8f61900631fe
Child:
2:2e1002e6798a
Init project for TCP

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AustinKim 0:8f61900631fe 1 /* WIZnet IoT Shield Cat.M1 Sample code for Arm MBED
AustinKim 0:8f61900631fe 2 * Copyright (c) 2019 WIZnet Co., Ltd.
AustinKim 0:8f61900631fe 3 * SPDX-License-Identifier: Apache-2.0
AustinKim 0:8f61900631fe 4 */
AustinKim 0:8f61900631fe 5
AustinKim 0:8f61900631fe 6 /*
AustinKim 0:8f61900631fe 7 * Licensed under the Apache License, Version 2.0 (the "License");
AustinKim 0:8f61900631fe 8 * you may not use this file except in compliance with the License.
AustinKim 0:8f61900631fe 9 * You may obtain a copy of the License at
AustinKim 0:8f61900631fe 10 *
AustinKim 0:8f61900631fe 11 * http://www.apache.org/licenses/LICENSE-2.0
AustinKim 0:8f61900631fe 12 *
AustinKim 0:8f61900631fe 13 * Unless required by applicable law or agreed to in writing, software
AustinKim 0:8f61900631fe 14 * distributed under the License is distributed on an "AS IS" BASIS,
AustinKim 0:8f61900631fe 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
AustinKim 0:8f61900631fe 16 *
AustinKim 0:8f61900631fe 17 * See the License for the specific language governing permissions and
AustinKim 0:8f61900631fe 18 * limitations under the License.
AustinKim 0:8f61900631fe 19 *
AustinKim 0:8f61900631fe 20 */
AustinKim 0:8f61900631fe 21
AustinKim 0:8f61900631fe 22 #include "mbed.h"
AustinKim 0:8f61900631fe 23
AustinKim 0:8f61900631fe 24 #include <string>
AustinKim 0:8f61900631fe 25
AustinKim 0:8f61900631fe 26 #define RET_OK 1
AustinKim 0:8f61900631fe 27 #define RET_NOK -1
AustinKim 0:8f61900631fe 28 #define DEBUG_ENABLE 1
AustinKim 0:8f61900631fe 29 #define DEBUG_DISABLE 0
AustinKim 0:8f61900631fe 30 #define ON 1
AustinKim 0:8f61900631fe 31 #define OFF 0
AustinKim 0:8f61900631fe 32
AustinKim 0:8f61900631fe 33 #define MAX_BUF_SIZE 1024
AustinKim 0:8f61900631fe 34
AustinKim 0:8f61900631fe 35 #define WM01_APN_PROTOCOL_IPv4 1
AustinKim 0:8f61900631fe 36 #define WM01_APN_PROTOCOL_IPv6 2
AustinKim 0:8f61900631fe 37 #define WM01_DEFAULT_TIMEOUT 1000
AustinKim 0:8f61900631fe 38 #define WM01_CONNECT_TIMEOUT 15000
AustinKim 0:8f61900631fe 39 #define WM01_SEND_TIMEOUT 500
AustinKim 0:8f61900631fe 40 #define WM01_RECV_TIMEOUT 500
AustinKim 0:8f61900631fe 41
AustinKim 0:8f61900631fe 42 #define WM01_APN_PROTOCOL WM01_APN_PROTOCOL_IPv6
AustinKim 0:8f61900631fe 43 #define WM01_DEFAULT_BAUD_RATE 115200
AustinKim 0:8f61900631fe 44 #define WM01_PARSER_DELIMITER "\r\n"
AustinKim 0:8f61900631fe 45
AustinKim 0:8f61900631fe 46 #define CATM1_APN_SKT "lte-internet.sktelecom.com"
AustinKim 0:8f61900631fe 47
AustinKim 0:8f61900631fe 48 #define CATM1_DEVICE_NAME_WM01 "WM01"
AustinKim 0:8f61900631fe 49 #define DEVNAME CATM1_DEVICE_NAME_WM01
AustinKim 0:8f61900631fe 50
AustinKim 0:8f61900631fe 51 #define devlog(f_, ...) if(CATM1_DEVICE_DEBUG == DEBUG_ENABLE) { pc.printf("\r\n[%s] ", DEVNAME); pc.printf((f_), ##__VA_ARGS__); }
AustinKim 0:8f61900631fe 52 #define myprintf(f_, ...) {pc.printf("\r\n[MAIN] "); pc.printf((f_), ##__VA_ARGS__);}
AustinKim 0:8f61900631fe 53
AustinKim 0:8f61900631fe 54 /* Pin configuraiton */
AustinKim 0:8f61900631fe 55 // Cat.M1
AustinKim 0:8f61900631fe 56 #define MBED_CONF_IOTSHIELD_CATM1_TX D8
AustinKim 0:8f61900631fe 57 #define MBED_CONF_IOTSHIELD_CATM1_RX D2
AustinKim 0:8f61900631fe 58 #define MBED_CONF_IOTSHIELD_CATM1_RESET D7
AustinKim 0:8f61900631fe 59 #define MBED_CONF_IOTSHIELD_CATM1_PWRKEY D9
AustinKim 0:8f61900631fe 60
AustinKim 0:8f61900631fe 61 // Sensors
AustinKim 0:8f61900631fe 62 #define MBED_CONF_IOTSHIELD_SENSOR_CDS A0
AustinKim 0:8f61900631fe 63 #define MBED_CONF_IOTSHIELD_SENSOR_TEMP A1
AustinKim 0:8f61900631fe 64
AustinKim 0:8f61900631fe 65 /* Debug message settings */
AustinKim 0:8f61900631fe 66 #define WM01_PARSER_DEBUG DEBUG_DISABLE
AustinKim 0:8f61900631fe 67 #define CATM1_DEVICE_DEBUG DEBUG_ENABLE
AustinKim 0:8f61900631fe 68
AustinKim 0:8f61900631fe 69 // Destination (Remote Host)
AustinKim 0:8f61900631fe 70 // IP address and Port number
AustinKim 0:8f61900631fe 71 // char dest_ip[] = "222.xxx.xxx.xxx";
AustinKim 0:8f61900631fe 72 // int dest_port = xxxx;
AustinKim 1:1c65b1dd9e7a 73 char dest_ip[] = "222.98.173.214";
AustinKim 0:8f61900631fe 74 int dest_port = 8080;
AustinKim 0:8f61900631fe 75 int protocol = 1; // 1 : TCP, 2 : UPD
AustinKim 0:8f61900631fe 76 int packet_type = 0; // 0 : ASCII, 1 : HEX, 2 : Binary
AustinKim 0:8f61900631fe 77
AustinKim 0:8f61900631fe 78 // Functions: Print information
AustinKim 0:8f61900631fe 79 void printInfo(void);
AustinKim 0:8f61900631fe 80
AustinKim 0:8f61900631fe 81 // Functions: Module Status
AustinKim 0:8f61900631fe 82 void waitCatM1Ready(void);
AustinKim 0:8f61900631fe 83 int8_t setEchoStatus_WM01(bool onoff);
AustinKim 0:8f61900631fe 84 int8_t getUsimStatus_WM01(void);
AustinKim 0:8f61900631fe 85 int8_t getNetworkStatus_WM01(void);
AustinKim 0:8f61900631fe 86
AustinKim 0:8f61900631fe 87 // Functions: PDP context
AustinKim 0:8f61900631fe 88 int8_t setContextActivate_WM01(void); // Activate a PDP Context
AustinKim 0:8f61900631fe 89 int8_t setContextDeactivate_WM01(void); // Deactivate a PDP Context
AustinKim 0:8f61900631fe 90
AustinKim 0:8f61900631fe 91 // Functions: TCP/UDP Socket service
AustinKim 0:8f61900631fe 92 int8_t sockOpenConnect_WM01(int protocol, const char *addr, int port, int pckttype);
AustinKim 0:8f61900631fe 93 int8_t sockClose_WM01(void);
AustinKim 0:8f61900631fe 94 int8_t sendData_WM01(char *data, int len);
AustinKim 0:8f61900631fe 95 int8_t recvData_WM01(char *data, int *len);
AustinKim 0:8f61900631fe 96
AustinKim 0:8f61900631fe 97 Serial pc(USBTX, USBRX); // tx, rx
AustinKim 0:8f61900631fe 98
AustinKim 0:8f61900631fe 99 UARTSerial *_serial;
AustinKim 0:8f61900631fe 100 ATCmdParser *_parser;
AustinKim 0:8f61900631fe 101
AustinKim 0:8f61900631fe 102 DigitalOut _RESET_WM01(MBED_CONF_IOTSHIELD_CATM1_RESET);
AustinKim 0:8f61900631fe 103 DigitalOut _PWRKEY_WM01(MBED_CONF_IOTSHIELD_CATM1_PWRKEY);
AustinKim 0:8f61900631fe 104
AustinKim 0:8f61900631fe 105 void serialPcInit(void)
AustinKim 0:8f61900631fe 106 {
AustinKim 0:8f61900631fe 107 pc.baud(115200);
AustinKim 0:8f61900631fe 108 pc.format(8, Serial::None, 1);
AustinKim 0:8f61900631fe 109 }
AustinKim 0:8f61900631fe 110
AustinKim 0:8f61900631fe 111 void serialDeviceInit(PinName tx, PinName rx, int baudrate)
AustinKim 0:8f61900631fe 112 {
AustinKim 0:8f61900631fe 113 _serial = new UARTSerial(tx, rx, baudrate);
AustinKim 0:8f61900631fe 114 }
AustinKim 0:8f61900631fe 115
AustinKim 0:8f61900631fe 116 void serialAtParserInit(const char *delimiter, bool debug_en)
AustinKim 0:8f61900631fe 117 {
AustinKim 0:8f61900631fe 118 _parser = new ATCmdParser(_serial);
AustinKim 0:8f61900631fe 119 _parser->debug_on(debug_en);
AustinKim 0:8f61900631fe 120 _parser->set_delimiter(delimiter);
AustinKim 0:8f61900631fe 121 _parser->set_timeout(WM01_DEFAULT_TIMEOUT);
AustinKim 0:8f61900631fe 122 }
AustinKim 0:8f61900631fe 123
AustinKim 0:8f61900631fe 124 void catm1DeviceInit(void)
AustinKim 0:8f61900631fe 125 {
AustinKim 0:8f61900631fe 126 serialDeviceInit( MBED_CONF_IOTSHIELD_CATM1_TX,
AustinKim 0:8f61900631fe 127 MBED_CONF_IOTSHIELD_CATM1_RX,
AustinKim 0:8f61900631fe 128 WM01_DEFAULT_BAUD_RATE);
AustinKim 0:8f61900631fe 129
AustinKim 0:8f61900631fe 130 serialAtParserInit( WM01_PARSER_DELIMITER,
AustinKim 0:8f61900631fe 131 WM01_PARSER_DEBUG);
AustinKim 0:8f61900631fe 132 }
AustinKim 0:8f61900631fe 133
AustinKim 0:8f61900631fe 134 void catm1DeviceReset_WM01(void)
AustinKim 0:8f61900631fe 135 {
AustinKim 0:8f61900631fe 136 _RESET_WM01 = 1;
AustinKim 0:8f61900631fe 137 _PWRKEY_WM01 = 1;
AustinKim 0:8f61900631fe 138 wait_ms(300);
AustinKim 0:8f61900631fe 139
AustinKim 0:8f61900631fe 140 _RESET_WM01 = 0;
AustinKim 0:8f61900631fe 141 _PWRKEY_WM01 = 0;
AustinKim 0:8f61900631fe 142 wait_ms(400);
AustinKim 0:8f61900631fe 143
AustinKim 0:8f61900631fe 144 _RESET_WM01 = 1;
AustinKim 0:8f61900631fe 145 wait_ms(1000);
AustinKim 0:8f61900631fe 146 }
AustinKim 0:8f61900631fe 147
AustinKim 0:8f61900631fe 148 // ----------------------------------------------------------------
AustinKim 0:8f61900631fe 149 // Main routine
AustinKim 0:8f61900631fe 150 // ----------------------------------------------------------------
AustinKim 0:8f61900631fe 151
AustinKim 0:8f61900631fe 152 int main()
AustinKim 0:8f61900631fe 153 {
AustinKim 0:8f61900631fe 154 char sendbuf[] = "Hello Cat.M1\r\n";
AustinKim 0:8f61900631fe 155
AustinKim 0:8f61900631fe 156 serialPcInit();
AustinKim 0:8f61900631fe 157 catm1DeviceInit();
AustinKim 0:8f61900631fe 158
AustinKim 0:8f61900631fe 159 myprintf("Waiting for Cat.M1 Module Ready...\r\n");
AustinKim 0:8f61900631fe 160
AustinKim 0:8f61900631fe 161 catm1DeviceReset_WM01();
AustinKim 0:8f61900631fe 162
AustinKim 0:8f61900631fe 163 waitCatM1Ready();
AustinKim 0:8f61900631fe 164
AustinKim 0:8f61900631fe 165 wait_ms(5000);
AustinKim 0:8f61900631fe 166
AustinKim 0:8f61900631fe 167 myprintf("System Init Complete\r\n");
AustinKim 0:8f61900631fe 168
AustinKim 0:8f61900631fe 169 printInfo();
AustinKim 0:8f61900631fe 170
AustinKim 0:8f61900631fe 171 setEchoStatus_WM01(OFF);
AustinKim 0:8f61900631fe 172
AustinKim 0:8f61900631fe 173 getUsimStatus_WM01();
AustinKim 0:8f61900631fe 174
AustinKim 0:8f61900631fe 175 getNetworkStatus_WM01();
AustinKim 1:1c65b1dd9e7a 176
AustinKim 1:1c65b1dd9e7a 177 wait_ms(3000);
AustinKim 1:1c65b1dd9e7a 178
AustinKim 0:8f61900631fe 179 setContextActivate_WM01();
AustinKim 0:8f61900631fe 180
AustinKim 0:8f61900631fe 181 // TCP Client: Send and Receive
AustinKim 0:8f61900631fe 182 myprintf("TCP Client Start - Connect to %s:%d\r\n", dest_ip, dest_port);
AustinKim 0:8f61900631fe 183
AustinKim 0:8f61900631fe 184 if(sockOpenConnect_WM01(protocol, dest_ip, dest_port, packet_type) == RET_OK)
AustinKim 0:8f61900631fe 185 {
AustinKim 1:1c65b1dd9e7a 186 myprintf("Socket Open Connect : success\r\n");
AustinKim 0:8f61900631fe 187
AustinKim 0:8f61900631fe 188 if(sendData_WM01(sendbuf, strlen(sendbuf)))
AustinKim 0:8f61900631fe 189 {
AustinKim 1:1c65b1dd9e7a 190 myprintf("Data Send : success [%d] %s\r\n", strlen(sendbuf), sendbuf);
AustinKim 0:8f61900631fe 191 }
AustinKim 0:8f61900631fe 192 else
AustinKim 0:8f61900631fe 193 {
AustinKim 1:1c65b1dd9e7a 194 myprintf("Data Send : failed\r\n");
AustinKim 1:1c65b1dd9e7a 195 }
AustinKim 0:8f61900631fe 196 }
AustinKim 0:8f61900631fe 197 else
AustinKim 0:8f61900631fe 198 {
AustinKim 1:1c65b1dd9e7a 199 myprintf("Socket Open Connect : failed\r\n");
AustinKim 0:8f61900631fe 200
AustinKim 0:8f61900631fe 201 if(sockClose_WM01() == RET_OK)
AustinKim 0:8f61900631fe 202 {
AustinKim 1:1c65b1dd9e7a 203 myprintf("Socket Close : success\r\n");
AustinKim 0:8f61900631fe 204 }
AustinKim 0:8f61900631fe 205 else
AustinKim 0:8f61900631fe 206 {
AustinKim 1:1c65b1dd9e7a 207 myprintf("Socket Close : failed\r\n");
AustinKim 0:8f61900631fe 208 }
AustinKim 0:8f61900631fe 209 }
AustinKim 0:8f61900631fe 210
AustinKim 0:8f61900631fe 211 while(1)
AustinKim 0:8f61900631fe 212 {
AustinKim 0:8f61900631fe 213 // Data received
AustinKim 0:8f61900631fe 214 char recvbuf[100] = {0, };
AustinKim 0:8f61900631fe 215 int recvlen = 0;
AustinKim 1:1c65b1dd9e7a 216
AustinKim 0:8f61900631fe 217 if(recvData_WM01(recvbuf, &recvlen) == RET_OK)
AustinKim 0:8f61900631fe 218 {
AustinKim 1:1c65b1dd9e7a 219 myprintf("Data Receive [%d] %s\r\n", recvlen, recvbuf);
AustinKim 0:8f61900631fe 220
AustinKim 0:8f61900631fe 221 char *ptr = strstr(recvbuf, "exit");
AustinKim 0:8f61900631fe 222
AustinKim 0:8f61900631fe 223 if(ptr != 0)
AustinKim 0:8f61900631fe 224 {
AustinKim 0:8f61900631fe 225 break;
AustinKim 0:8f61900631fe 226 }
AustinKim 0:8f61900631fe 227 }
AustinKim 0:8f61900631fe 228 }
AustinKim 0:8f61900631fe 229
AustinKim 0:8f61900631fe 230 if(sockClose_WM01() == RET_OK)
AustinKim 0:8f61900631fe 231 {
AustinKim 1:1c65b1dd9e7a 232 myprintf("Socket Close : success\r\n");
AustinKim 0:8f61900631fe 233 }
AustinKim 0:8f61900631fe 234 else
AustinKim 0:8f61900631fe 235 {
AustinKim 1:1c65b1dd9e7a 236 myprintf("Socket Close : failed\r\n");
AustinKim 0:8f61900631fe 237 }
AustinKim 0:8f61900631fe 238
AustinKim 0:8f61900631fe 239 setContextDeactivate_WM01();
AustinKim 0:8f61900631fe 240 }
AustinKim 0:8f61900631fe 241
AustinKim 0:8f61900631fe 242 // ----------------------------------------------------------------
AustinKim 0:8f61900631fe 243 // Functions: Print information
AustinKim 0:8f61900631fe 244 // ----------------------------------------------------------------
AustinKim 0:8f61900631fe 245
AustinKim 0:8f61900631fe 246 void printInfo(void)
AustinKim 0:8f61900631fe 247 {
AustinKim 0:8f61900631fe 248 myprintf("WIZnet IoT Shield for Arm MBED");
AustinKim 0:8f61900631fe 249 myprintf("LTE Cat.M1 Version");
AustinKim 0:8f61900631fe 250 myprintf("=================================================");
AustinKim 0:8f61900631fe 251 myprintf(">> Target Board: WIoT-WM01 (Woorinet WM-N400MSE)");
AustinKim 1:1c65b1dd9e7a 252 myprintf(">> Sample Code: TCP Test");
AustinKim 0:8f61900631fe 253 myprintf("=================================================\r\n");
AustinKim 0:8f61900631fe 254 }
AustinKim 0:8f61900631fe 255
AustinKim 0:8f61900631fe 256 // ----------------------------------------------------------------
AustinKim 0:8f61900631fe 257 // Functions: Cat.M1 Status
AustinKim 0:8f61900631fe 258 // ----------------------------------------------------------------
AustinKim 0:8f61900631fe 259
AustinKim 0:8f61900631fe 260 void waitCatM1Ready(void)
AustinKim 0:8f61900631fe 261 {
AustinKim 0:8f61900631fe 262 while(1)
AustinKim 0:8f61900631fe 263 {
AustinKim 0:8f61900631fe 264 if(_parser->send("AT") && _parser->recv("OK"))
AustinKim 0:8f61900631fe 265 {
AustinKim 0:8f61900631fe 266 myprintf("WM01 is Available\r\n");
AustinKim 0:8f61900631fe 267
AustinKim 0:8f61900631fe 268 return;
AustinKim 0:8f61900631fe 269 }
AustinKim 1:1c65b1dd9e7a 270 }
AustinKim 0:8f61900631fe 271 }
AustinKim 0:8f61900631fe 272
AustinKim 0:8f61900631fe 273 int8_t setEchoStatus_WM01(bool onoff)
AustinKim 0:8f61900631fe 274 {
AustinKim 0:8f61900631fe 275 int8_t ret = RET_NOK;
AustinKim 0:8f61900631fe 276 char _buf[10];
AustinKim 0:8f61900631fe 277
AustinKim 0:8f61900631fe 278 sprintf((char *)_buf, "ATE%d", onoff);
AustinKim 0:8f61900631fe 279
AustinKim 0:8f61900631fe 280 if(_parser->send(_buf) && _parser->recv("OK"))
AustinKim 0:8f61900631fe 281 {
AustinKim 1:1c65b1dd9e7a 282 devlog("Turn Echo %s : success\r\n", onoff?"ON":"OFF");
AustinKim 0:8f61900631fe 283
AustinKim 0:8f61900631fe 284 ret = RET_OK;
AustinKim 0:8f61900631fe 285 }
AustinKim 0:8f61900631fe 286 else
AustinKim 0:8f61900631fe 287 {
AustinKim 1:1c65b1dd9e7a 288 devlog("Turn Echo %s : failed\r\n", onoff?"ON":"OFF");
AustinKim 0:8f61900631fe 289 }
AustinKim 0:8f61900631fe 290
AustinKim 0:8f61900631fe 291 return ret;
AustinKim 0:8f61900631fe 292 }
AustinKim 0:8f61900631fe 293
AustinKim 0:8f61900631fe 294 int8_t getUsimStatus_WM01(void)
AustinKim 0:8f61900631fe 295 {
AustinKim 0:8f61900631fe 296 int8_t ret = RET_NOK;
AustinKim 0:8f61900631fe 297
AustinKim 0:8f61900631fe 298 if(_parser->send("AT$$STAT?") && _parser->recv("$$STAT:READY") && _parser->recv("OK"))
AustinKim 0:8f61900631fe 299 {
AustinKim 1:1c65b1dd9e7a 300 devlog("USIM Status : READY\r\n");
AustinKim 0:8f61900631fe 301
AustinKim 0:8f61900631fe 302 ret = RET_OK;
AustinKim 0:8f61900631fe 303 }
AustinKim 0:8f61900631fe 304 else
AustinKim 0:8f61900631fe 305 {
AustinKim 0:8f61900631fe 306 devlog("Retrieving USIM Status failed\r\n");
AustinKim 0:8f61900631fe 307 }
AustinKim 0:8f61900631fe 308
AustinKim 0:8f61900631fe 309 return ret;
AustinKim 0:8f61900631fe 310 }
AustinKim 0:8f61900631fe 311
AustinKim 0:8f61900631fe 312 int8_t getNetworkStatus_WM01(void)
AustinKim 0:8f61900631fe 313 {
AustinKim 0:8f61900631fe 314 int8_t ret = RET_NOK;
AustinKim 0:8f61900631fe 315 int val, stat;
AustinKim 0:8f61900631fe 316
AustinKim 0:8f61900631fe 317 if(_parser->send("AT+CEREG?") && _parser->recv("+CEREG: %d,%d", &val, &stat) && _parser->recv("OK"))
AustinKim 0:8f61900631fe 318 {
AustinKim 0:8f61900631fe 319 if((val == 0) && (stat == 1))
AustinKim 0:8f61900631fe 320 {
AustinKim 1:1c65b1dd9e7a 321 devlog("Network Status : attached\r\n");
AustinKim 0:8f61900631fe 322
AustinKim 0:8f61900631fe 323 ret = RET_OK;
AustinKim 0:8f61900631fe 324 }
AustinKim 0:8f61900631fe 325 else
AustinKim 0:8f61900631fe 326 {
AustinKim 1:1c65b1dd9e7a 327 devlog("Network Status : %d, %d\r\n", val, stat);
AustinKim 0:8f61900631fe 328 }
AustinKim 0:8f61900631fe 329 }
AustinKim 0:8f61900631fe 330 else
AustinKim 0:8f61900631fe 331 {
AustinKim 1:1c65b1dd9e7a 332 devlog("Network Status : Error\r\n");
AustinKim 0:8f61900631fe 333 }
AustinKim 0:8f61900631fe 334
AustinKim 0:8f61900631fe 335 return ret;
AustinKim 0:8f61900631fe 336 }
AustinKim 0:8f61900631fe 337
AustinKim 0:8f61900631fe 338 // ----------------------------------------------------------------
AustinKim 0:8f61900631fe 339 // Functions: Cat.M1 PDP context activate / deactivate
AustinKim 0:8f61900631fe 340 // ----------------------------------------------------------------
AustinKim 0:8f61900631fe 341
AustinKim 0:8f61900631fe 342 int8_t setContextActivate_WM01(void) // Activate a PDP Context
AustinKim 0:8f61900631fe 343 {
AustinKim 0:8f61900631fe 344 int8_t ret = RET_NOK;
AustinKim 0:8f61900631fe 345
AustinKim 0:8f61900631fe 346 _parser->send("AT*RNDISDATA=1");
AustinKim 0:8f61900631fe 347
AustinKim 0:8f61900631fe 348 if(_parser->recv("OK"))
AustinKim 0:8f61900631fe 349 {
AustinKim 0:8f61900631fe 350 devlog("Activate a PDP Context\r\n");
AustinKim 0:8f61900631fe 351
AustinKim 0:8f61900631fe 352 ret = RET_OK;
AustinKim 0:8f61900631fe 353 }
AustinKim 0:8f61900631fe 354 else
AustinKim 0:8f61900631fe 355 {
AustinKim 0:8f61900631fe 356 devlog("PDP Context Activation failed\r\n");
AustinKim 0:8f61900631fe 357 }
AustinKim 0:8f61900631fe 358
AustinKim 0:8f61900631fe 359 return ret;
AustinKim 0:8f61900631fe 360 }
AustinKim 0:8f61900631fe 361
AustinKim 0:8f61900631fe 362 int8_t setContextDeactivate_WM01(void) // Deactivate a PDP Context
AustinKim 0:8f61900631fe 363 {
AustinKim 0:8f61900631fe 364 int8_t ret = RET_NOK;
AustinKim 0:8f61900631fe 365
AustinKim 0:8f61900631fe 366 _parser->send("AT*RNDISDATA=0");
AustinKim 0:8f61900631fe 367
AustinKim 0:8f61900631fe 368 if(_parser->recv("OK"))
AustinKim 0:8f61900631fe 369 {
AustinKim 0:8f61900631fe 370 devlog("Deactivate a PDP Context\r\n");
AustinKim 0:8f61900631fe 371
AustinKim 0:8f61900631fe 372 ret = RET_OK;
AustinKim 0:8f61900631fe 373 }
AustinKim 0:8f61900631fe 374 else
AustinKim 0:8f61900631fe 375 {
AustinKim 0:8f61900631fe 376 devlog("PDP Context Deactivation failed\r\n");
AustinKim 0:8f61900631fe 377 }
AustinKim 1:1c65b1dd9e7a 378
AustinKim 0:8f61900631fe 379 return ret;
AustinKim 0:8f61900631fe 380 }
AustinKim 0:8f61900631fe 381
AustinKim 0:8f61900631fe 382 // ----------------------------------------------------------------
AustinKim 0:8f61900631fe 383 // Functions: TCP/UDP socket service
AustinKim 0:8f61900631fe 384 // ----------------------------------------------------------------
AustinKim 0:8f61900631fe 385
AustinKim 0:8f61900631fe 386 int8_t sockOpenConnect_WM01(int protocol, const char *addr, int port, int pckttype)
AustinKim 0:8f61900631fe 387 {
AustinKim 0:8f61900631fe 388 int8_t ret = RET_NOK;
AustinKim 0:8f61900631fe 389 bool done = false;
AustinKim 0:8f61900631fe 390 int ok = 0; // 0 : failure , 1 : success
AustinKim 0:8f61900631fe 391 int id = 0;
AustinKim 0:8f61900631fe 392
AustinKim 0:8f61900631fe 393 Timer t;
AustinKim 0:8f61900631fe 394
AustinKim 0:8f61900631fe 395 _parser->set_timeout(WM01_CONNECT_TIMEOUT);
AustinKim 0:8f61900631fe 396
AustinKim 0:8f61900631fe 397 if((protocol != 0) && (protocol != 1)) // 0 : TCP, 1 : UDP
AustinKim 0:8f61900631fe 398 {
AustinKim 0:8f61900631fe 399 return RET_NOK;
AustinKim 0:8f61900631fe 400 }
AustinKim 0:8f61900631fe 401
AustinKim 0:8f61900631fe 402 t.start();
AustinKim 0:8f61900631fe 403
AustinKim 0:8f61900631fe 404 _parser->send("AT+WSOCR=%d,%s,%d,%d,%d", id, addr, port, protocol, pckttype);
AustinKim 0:8f61900631fe 405
AustinKim 0:8f61900631fe 406 do
AustinKim 0:8f61900631fe 407 {
AustinKim 0:8f61900631fe 408 done = (_parser->recv("+WSOCR:%d,%d", &ok,&id) && (ok == 1));
AustinKim 0:8f61900631fe 409 } while(!done && t.read_ms() < WM01_CONNECT_TIMEOUT);
AustinKim 0:8f61900631fe 410
AustinKim 0:8f61900631fe 411 if(done)
AustinKim 0:8f61900631fe 412 {
AustinKim 0:8f61900631fe 413 if(_parser->send("AT+WSOCO=%d", id) && _parser->recv("+WSOCO:%d,%d,OPEN_WAIT", &ok, &id) && _parser->recv("OK"))
AustinKim 0:8f61900631fe 414 {
AustinKim 0:8f61900631fe 415 if(ok == 1)
AustinKim 0:8f61900631fe 416 {
AustinKim 0:8f61900631fe 417 if(_parser->recv("+WSOCO:%d,OPEN_CMPL", &id))
AustinKim 0:8f61900631fe 418 {
AustinKim 0:8f61900631fe 419 ret = RET_OK;
AustinKim 0:8f61900631fe 420 }
AustinKim 0:8f61900631fe 421 }
AustinKim 0:8f61900631fe 422 }
AustinKim 0:8f61900631fe 423 }
AustinKim 0:8f61900631fe 424
AustinKim 0:8f61900631fe 425 _parser->set_timeout(WM01_DEFAULT_TIMEOUT);
AustinKim 0:8f61900631fe 426 _parser->flush();
AustinKim 0:8f61900631fe 427
AustinKim 0:8f61900631fe 428 return ret;
AustinKim 0:8f61900631fe 429 }
AustinKim 0:8f61900631fe 430
AustinKim 0:8f61900631fe 431 int8_t sockClose_WM01(void)
AustinKim 0:8f61900631fe 432 {
AustinKim 0:8f61900631fe 433 int8_t ret = RET_NOK;
AustinKim 0:8f61900631fe 434 int ok = 0; // 0 : failure , 1 : success
AustinKim 0:8f61900631fe 435 int id = 0;
AustinKim 0:8f61900631fe 436
AustinKim 0:8f61900631fe 437 _parser->set_timeout(WM01_CONNECT_TIMEOUT);
AustinKim 0:8f61900631fe 438
AustinKim 0:8f61900631fe 439 if(_parser->send("AT+WSOCL=%d", id) && _parser->recv("+WSOCL:%d,%d,CLOSE_WAIT", &ok, &id) &&_parser->recv("OK"))
AustinKim 0:8f61900631fe 440 {
AustinKim 0:8f61900631fe 441 if(ok == 1)
AustinKim 0:8f61900631fe 442 {
AustinKim 0:8f61900631fe 443 ret = RET_OK;
AustinKim 1:1c65b1dd9e7a 444 }
AustinKim 0:8f61900631fe 445 }
AustinKim 1:1c65b1dd9e7a 446
AustinKim 0:8f61900631fe 447 _parser->set_timeout(WM01_DEFAULT_TIMEOUT);
AustinKim 0:8f61900631fe 448
AustinKim 0:8f61900631fe 449 return ret;
AustinKim 0:8f61900631fe 450 }
AustinKim 0:8f61900631fe 451
AustinKim 0:8f61900631fe 452 int8_t sendData_WM01(char *data, int len)
AustinKim 0:8f61900631fe 453 {
AustinKim 0:8f61900631fe 454 int8_t ret = RET_NOK;
AustinKim 0:8f61900631fe 455 bool done = false;
AustinKim 0:8f61900631fe 456 int ok = 0; // 0 : failure , 1 : success
AustinKim 0:8f61900631fe 457 int id = 0;
AustinKim 0:8f61900631fe 458
AustinKim 0:8f61900631fe 459 _parser->set_timeout(WM01_SEND_TIMEOUT);
AustinKim 0:8f61900631fe 460 _parser->send("AT+WSOWR=%d,%d,%s", id, len, data);
AustinKim 0:8f61900631fe 461
AustinKim 0:8f61900631fe 462 if(_parser->recv("+WSOWR:%d,%d", &ok, &id) && _parser->recv("OK"))
AustinKim 0:8f61900631fe 463 {
AustinKim 0:8f61900631fe 464 if(ok == 1) // success
AustinKim 0:8f61900631fe 465 {
AustinKim 0:8f61900631fe 466 ret = RET_OK;
AustinKim 0:8f61900631fe 467 }
AustinKim 0:8f61900631fe 468 }
AustinKim 0:8f61900631fe 469
AustinKim 0:8f61900631fe 470 _parser->set_timeout(WM01_DEFAULT_TIMEOUT);
AustinKim 0:8f61900631fe 471
AustinKim 0:8f61900631fe 472 return ret;
AustinKim 0:8f61900631fe 473 }
AustinKim 0:8f61900631fe 474
AustinKim 0:8f61900631fe 475 int8_t recvData_WM01(char *data, int *len)
AustinKim 0:8f61900631fe 476 {
AustinKim 0:8f61900631fe 477 int8_t ret = RET_NOK;
AustinKim 1:1c65b1dd9e7a 478 char _buf[100] = {0, };
AustinKim 0:8f61900631fe 479 int id = 0;
AustinKim 1:1c65b1dd9e7a 480 int i = 0;
AustinKim 1:1c65b1dd9e7a 481
AustinKim 1:1c65b1dd9e7a 482 Timer t;
AustinKim 0:8f61900631fe 483
AustinKim 0:8f61900631fe 484 _parser->set_timeout(WM01_RECV_TIMEOUT);
AustinKim 0:8f61900631fe 485
AustinKim 1:1c65b1dd9e7a 486 t.start();
AustinKim 1:1c65b1dd9e7a 487
AustinKim 1:1c65b1dd9e7a 488 while(t.read_ms() < WM01_RECV_TIMEOUT)
AustinKim 1:1c65b1dd9e7a 489 {
AustinKim 1:1c65b1dd9e7a 490 _buf[i] = _parser->getc();
AustinKim 1:1c65b1dd9e7a 491
AustinKim 1:1c65b1dd9e7a 492 i++;
AustinKim 1:1c65b1dd9e7a 493 }
AustinKim 1:1c65b1dd9e7a 494
AustinKim 1:1c65b1dd9e7a 495 if(sscanf(_buf,"+WSORD:%d,%d,%[^\n]", &id, len, data))
AustinKim 0:8f61900631fe 496 {
AustinKim 0:8f61900631fe 497 ret = RET_OK;
AustinKim 0:8f61900631fe 498 }
AustinKim 0:8f61900631fe 499
AustinKim 0:8f61900631fe 500 _parser->set_timeout(WM01_DEFAULT_TIMEOUT);
AustinKim 0:8f61900631fe 501 _parser->flush();
AustinKim 0:8f61900631fe 502
AustinKim 0:8f61900631fe 503 return ret;
AustinKim 0:8f61900631fe 504 }