Init Project for HTTP

Committer:
AustinKim
Date:
Wed Sep 11 07:34:13 2019 +0000
Revision:
0:37121f302ff1
Child:
1:b195d2a6ad11
Init Project for HTTP

Who changed what in which revision?

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