Init Project for HTTP

Committer:
AustinKim
Date:
Tue Sep 17 23:50:37 2019 +0000
Revision:
1:b195d2a6ad11
Parent:
0:37121f302ff1
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
AustinKim 0:37121f302ff1 42 #define WM01_APN_PROTOCOL WM01_APN_PROTOCOL_IPv6
AustinKim 0:37121f302ff1 43 #define WM01_DEFAULT_BAUD_RATE 115200
AustinKim 0:37121f302ff1 44 #define WM01_PARSER_DELIMITER "\r\n"
AustinKim 0:37121f302ff1 45
AustinKim 0:37121f302ff1 46 #define CATM1_APN_SKT "lte-internet.sktelecom.com"
AustinKim 0:37121f302ff1 47
AustinKim 0:37121f302ff1 48 #define CATM1_DEVICE_NAME_WM01 "WM01"
AustinKim 0:37121f302ff1 49 #define DEVNAME CATM1_DEVICE_NAME_WM01
AustinKim 0:37121f302ff1 50
AustinKim 0:37121f302ff1 51 #define devlog(f_, ...) if(CATM1_DEVICE_DEBUG == DEBUG_ENABLE) { pc.printf("\r\n[%s] ", DEVNAME); pc.printf((f_), ##__VA_ARGS__); }
AustinKim 0:37121f302ff1 52 #define myprintf(f_, ...) {pc.printf("\r\n[MAIN] "); pc.printf((f_), ##__VA_ARGS__);}
AustinKim 1:b195d2a6ad11 53 #define httpprintf(f_, ...) {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 1:b195d2a6ad11 74 char dest_domain_name[] = "www.kma.go.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 // Functions: Print information
AustinKim 0:37121f302ff1 80 void printInfo(void);
AustinKim 0:37121f302ff1 81
AustinKim 0:37121f302ff1 82 // Functions: Module Status
AustinKim 0:37121f302ff1 83 void waitCatM1Ready(void);
AustinKim 0:37121f302ff1 84 int8_t setEchoStatus_WM01(bool onoff);
AustinKim 0:37121f302ff1 85 int8_t getUsimStatus_WM01(void);
AustinKim 0:37121f302ff1 86 int8_t getNetworkStatus_WM01(void);
AustinKim 0:37121f302ff1 87
AustinKim 0:37121f302ff1 88 // Functions: PDP context
AustinKim 0:37121f302ff1 89 int8_t setContextActivate_WM01(void); // Activate a PDP Context
AustinKim 0:37121f302ff1 90 int8_t setContextDeactivate_WM01(void); // Deactivate a PDP Context
AustinKim 0:37121f302ff1 91
AustinKim 0:37121f302ff1 92 // Functions: TCP/UDP socket service
AustinKim 0:37121f302ff1 93 int8_t sockOpenConnect_WM01(int protocol, const char *addr, int port, int pckttype);
AustinKim 0:37121f302ff1 94 int8_t sockClose_WM01(void);
AustinKim 1:b195d2a6ad11 95 int8_t sendData_WM01(void);
AustinKim 1:b195d2a6ad11 96 int8_t recvData_WM01(void);
AustinKim 0:37121f302ff1 97
AustinKim 0:37121f302ff1 98 Serial pc(USBTX, USBRX); // USB debug
AustinKim 0:37121f302ff1 99
AustinKim 0:37121f302ff1 100 UARTSerial *_serial; // Cat.M1 module
AustinKim 0:37121f302ff1 101 ATCmdParser *_parser;
AustinKim 0:37121f302ff1 102
AustinKim 0:37121f302ff1 103 DigitalOut _RESET_WM01(MBED_CONF_IOTSHIELD_CATM1_RESET);
AustinKim 0:37121f302ff1 104 DigitalOut _PWRKEY_WM01(MBED_CONF_IOTSHIELD_CATM1_PWRKEY);
AustinKim 0:37121f302ff1 105
AustinKim 0:37121f302ff1 106 void serialPcInit(void)
AustinKim 0:37121f302ff1 107 {
AustinKim 0:37121f302ff1 108 pc.baud(115200);
AustinKim 0:37121f302ff1 109 pc.format(8, Serial::None, 1);
AustinKim 0:37121f302ff1 110 }
AustinKim 0:37121f302ff1 111
AustinKim 0:37121f302ff1 112 void serialDeviceInit(PinName tx, PinName rx, int baudrate)
AustinKim 0:37121f302ff1 113 {
AustinKim 0:37121f302ff1 114 _serial = new UARTSerial(tx, rx, baudrate);
AustinKim 0:37121f302ff1 115 }
AustinKim 0:37121f302ff1 116
AustinKim 0:37121f302ff1 117 void serialAtParserInit(const char *delimiter, bool debug_en)
AustinKim 0:37121f302ff1 118 {
AustinKim 0:37121f302ff1 119 _parser = new ATCmdParser(_serial);
AustinKim 0:37121f302ff1 120 _parser->debug_on(debug_en);
AustinKim 0:37121f302ff1 121 _parser->set_delimiter(delimiter);
AustinKim 0:37121f302ff1 122 _parser->set_timeout(WM01_DEFAULT_TIMEOUT);
AustinKim 0:37121f302ff1 123 }
AustinKim 0:37121f302ff1 124
AustinKim 0:37121f302ff1 125 void catm1DeviceInit(void)
AustinKim 0:37121f302ff1 126 {
AustinKim 0:37121f302ff1 127 serialDeviceInit( MBED_CONF_IOTSHIELD_CATM1_TX,
AustinKim 0:37121f302ff1 128 MBED_CONF_IOTSHIELD_CATM1_RX,
AustinKim 0:37121f302ff1 129 WM01_DEFAULT_BAUD_RATE);
AustinKim 0:37121f302ff1 130
AustinKim 0:37121f302ff1 131 serialAtParserInit( WM01_PARSER_DELIMITER,
AustinKim 0:37121f302ff1 132 WM01_PARSER_DEBUG);
AustinKim 0:37121f302ff1 133 }
AustinKim 0:37121f302ff1 134
AustinKim 0:37121f302ff1 135 void catm1DeviceReset_WM01(void)
AustinKim 0:37121f302ff1 136 {
AustinKim 0:37121f302ff1 137 _RESET_WM01 = 1;
AustinKim 0:37121f302ff1 138 _PWRKEY_WM01 = 1;
AustinKim 0:37121f302ff1 139 wait_ms(300);
AustinKim 0:37121f302ff1 140
AustinKim 0:37121f302ff1 141 _RESET_WM01 = 0;
AustinKim 0:37121f302ff1 142 _PWRKEY_WM01 = 0;
AustinKim 0:37121f302ff1 143 wait_ms(400);
AustinKim 0:37121f302ff1 144
AustinKim 0:37121f302ff1 145 _RESET_WM01 = 1;
AustinKim 0:37121f302ff1 146 wait_ms(1000);
AustinKim 0:37121f302ff1 147 }
AustinKim 0:37121f302ff1 148
AustinKim 0:37121f302ff1 149 // ----------------------------------------------------------------
AustinKim 0:37121f302ff1 150 // Main routine
AustinKim 0:37121f302ff1 151 // ----------------------------------------------------------------
AustinKim 0:37121f302ff1 152
AustinKim 0:37121f302ff1 153 int main()
AustinKim 0:37121f302ff1 154 {
AustinKim 0:37121f302ff1 155 serialPcInit();
AustinKim 0:37121f302ff1 156 catm1DeviceInit();
AustinKim 0:37121f302ff1 157
AustinKim 0:37121f302ff1 158 myprintf("Waiting for Cat.M1 Module Ready...\r\n");
AustinKim 0:37121f302ff1 159
AustinKim 0:37121f302ff1 160 catm1DeviceReset_WM01();
AustinKim 0:37121f302ff1 161
AustinKim 0:37121f302ff1 162 waitCatM1Ready();
AustinKim 0:37121f302ff1 163
AustinKim 0:37121f302ff1 164 wait_ms(5000);
AustinKim 0:37121f302ff1 165
AustinKim 0:37121f302ff1 166 myprintf("System Init Complete\r\n");
AustinKim 0:37121f302ff1 167
AustinKim 0:37121f302ff1 168 printInfo();
AustinKim 0:37121f302ff1 169
AustinKim 0:37121f302ff1 170 setEchoStatus_WM01(OFF);
AustinKim 0:37121f302ff1 171
AustinKim 0:37121f302ff1 172 getUsimStatus_WM01();
AustinKim 0:37121f302ff1 173
AustinKim 0:37121f302ff1 174 getNetworkStatus_WM01();
AustinKim 0:37121f302ff1 175
AustinKim 0:37121f302ff1 176 setContextActivate_WM01();
AustinKim 0:37121f302ff1 177
AustinKim 1:b195d2a6ad11 178 // TCP Client : Send and Receive
AustinKim 1:b195d2a6ad11 179 myprintf("Connect to %s:%d\r\n", dest_domain_name, dest_port);
AustinKim 0:37121f302ff1 180
AustinKim 1:b195d2a6ad11 181 if(sockOpenConnect_WM01(protocol, dest_domain_name, dest_port, packet_type) == RET_OK)
AustinKim 0:37121f302ff1 182 {
AustinKim 0:37121f302ff1 183 myprintf("Socket Open Connect : success\r\n");
AustinKim 0:37121f302ff1 184
AustinKim 1:b195d2a6ad11 185 if(sendData_WM01() == RET_OK)
AustinKim 0:37121f302ff1 186 {
AustinKim 1:b195d2a6ad11 187 myprintf("Data Send : success\r\n");
AustinKim 1:b195d2a6ad11 188
AustinKim 1:b195d2a6ad11 189 if(recvData_WM01() == RET_OK)
AustinKim 1:b195d2a6ad11 190 {
AustinKim 1:b195d2a6ad11 191 myprintf("Data Receive : success\r\n");
AustinKim 1:b195d2a6ad11 192 }
AustinKim 1:b195d2a6ad11 193 else
AustinKim 1:b195d2a6ad11 194 {
AustinKim 1:b195d2a6ad11 195 myprintf("Data Receive : failed\r\n");
AustinKim 1:b195d2a6ad11 196 }
AustinKim 0:37121f302ff1 197 }
AustinKim 0:37121f302ff1 198 else
AustinKim 0:37121f302ff1 199 {
AustinKim 1:b195d2a6ad11 200 myprintf("Data Send : failed\r\n");
AustinKim 0:37121f302ff1 201 }
AustinKim 0:37121f302ff1 202 }
AustinKim 0:37121f302ff1 203 else
AustinKim 0:37121f302ff1 204 {
AustinKim 0:37121f302ff1 205 myprintf("Socket Open Connect : failed\r\n");
AustinKim 0:37121f302ff1 206
AustinKim 0:37121f302ff1 207 if(sockClose_WM01() == RET_OK)
AustinKim 0:37121f302ff1 208 {
AustinKim 0:37121f302ff1 209 myprintf("Socket Close : success\r\n");
AustinKim 0:37121f302ff1 210 }
AustinKim 0:37121f302ff1 211 else
AustinKim 0:37121f302ff1 212 {
AustinKim 0:37121f302ff1 213 myprintf("Socket Close : failed\r\n");
AustinKim 0:37121f302ff1 214 }
AustinKim 0:37121f302ff1 215 }
AustinKim 0:37121f302ff1 216 }
AustinKim 0:37121f302ff1 217
AustinKim 0:37121f302ff1 218 // ----------------------------------------------------------------
AustinKim 0:37121f302ff1 219 // Functions: Print information
AustinKim 0:37121f302ff1 220 // ----------------------------------------------------------------
AustinKim 0:37121f302ff1 221
AustinKim 0:37121f302ff1 222 void printInfo(void)
AustinKim 0:37121f302ff1 223 {
AustinKim 0:37121f302ff1 224 myprintf("WIZnet IoT Shield for Arm MBED");
AustinKim 0:37121f302ff1 225 myprintf("LTE Cat.M1 Version");
AustinKim 0:37121f302ff1 226 myprintf("=================================================");
AustinKim 0:37121f302ff1 227 myprintf(">> Target Board: WIoT-WM01 (Woorinet WM-N400MSE)");
AustinKim 0:37121f302ff1 228 myprintf(">> Sample Code: HTTP Test");
AustinKim 0:37121f302ff1 229 myprintf("=================================================\r\n");
AustinKim 0:37121f302ff1 230 }
AustinKim 0:37121f302ff1 231
AustinKim 0:37121f302ff1 232 // ----------------------------------------------------------------
AustinKim 0:37121f302ff1 233 // Functions: Cat.M1 Status
AustinKim 0:37121f302ff1 234 // ----------------------------------------------------------------
AustinKim 0:37121f302ff1 235
AustinKim 0:37121f302ff1 236 void waitCatM1Ready(void)
AustinKim 0:37121f302ff1 237 {
AustinKim 0:37121f302ff1 238 while(1)
AustinKim 0:37121f302ff1 239 {
AustinKim 0:37121f302ff1 240 if(_parser->send("AT") && _parser->recv("OK"))
AustinKim 0:37121f302ff1 241 {
AustinKim 0:37121f302ff1 242 myprintf("WM01 is Available\r\n");
AustinKim 0:37121f302ff1 243
AustinKim 0:37121f302ff1 244 return;
AustinKim 0:37121f302ff1 245 }
AustinKim 0:37121f302ff1 246 }
AustinKim 0:37121f302ff1 247 }
AustinKim 0:37121f302ff1 248
AustinKim 0:37121f302ff1 249 int8_t setEchoStatus_WM01(bool onoff)
AustinKim 0:37121f302ff1 250 {
AustinKim 0:37121f302ff1 251 int8_t ret = RET_NOK;
AustinKim 0:37121f302ff1 252 char _buf[10];
AustinKim 0:37121f302ff1 253
AustinKim 0:37121f302ff1 254 sprintf((char *)_buf, "ATE%d", onoff);
AustinKim 0:37121f302ff1 255
AustinKim 0:37121f302ff1 256 if(_parser->send(_buf) && _parser->recv("OK"))
AustinKim 0:37121f302ff1 257 {
AustinKim 0:37121f302ff1 258 devlog("Turn Echo %s success\r\n", onoff ? "ON" : "OFF");
AustinKim 0:37121f302ff1 259
AustinKim 0:37121f302ff1 260 ret = RET_OK;
AustinKim 0:37121f302ff1 261 }
AustinKim 0:37121f302ff1 262 else
AustinKim 0:37121f302ff1 263 {
AustinKim 0:37121f302ff1 264 devlog("Turn Echo %s failed\r\n", onoff ? "ON" : "OFF");
AustinKim 0:37121f302ff1 265 }
AustinKim 0:37121f302ff1 266
AustinKim 0:37121f302ff1 267 return ret;
AustinKim 0:37121f302ff1 268 }
AustinKim 0:37121f302ff1 269
AustinKim 0:37121f302ff1 270 int8_t getUsimStatus_WM01(void)
AustinKim 0:37121f302ff1 271 {
AustinKim 0:37121f302ff1 272 int8_t ret = RET_NOK;
AustinKim 0:37121f302ff1 273
AustinKim 0:37121f302ff1 274 if(_parser->send("AT$$STAT?") && _parser->recv("$$STAT:READY") && _parser->recv("OK"))
AustinKim 0:37121f302ff1 275 {
AustinKim 0:37121f302ff1 276 devlog("USIM Status : READY\r\n");
AustinKim 0:37121f302ff1 277
AustinKim 0:37121f302ff1 278 ret = RET_OK;
AustinKim 0:37121f302ff1 279 }
AustinKim 0:37121f302ff1 280 else
AustinKim 0:37121f302ff1 281 {
AustinKim 0:37121f302ff1 282 devlog("Retrieving USIM Status failed\r\n");
AustinKim 0:37121f302ff1 283 }
AustinKim 0:37121f302ff1 284
AustinKim 0:37121f302ff1 285 return ret;
AustinKim 0:37121f302ff1 286 }
AustinKim 0:37121f302ff1 287
AustinKim 0:37121f302ff1 288 int8_t getNetworkStatus_WM01(void)
AustinKim 0:37121f302ff1 289 {
AustinKim 0:37121f302ff1 290 int8_t ret = RET_NOK;
AustinKim 0:37121f302ff1 291 int val, stat;
AustinKim 0:37121f302ff1 292
AustinKim 0:37121f302ff1 293 if(_parser->send("AT+CEREG?") && _parser->recv("+CEREG: %d,%d", &val, &stat) && _parser->recv("OK"))
AustinKim 0:37121f302ff1 294 {
AustinKim 0:37121f302ff1 295 if((val == 0) && (stat == 1))
AustinKim 0:37121f302ff1 296 {
AustinKim 0:37121f302ff1 297 devlog("Network Status : attached\r\n");
AustinKim 0:37121f302ff1 298
AustinKim 0:37121f302ff1 299 ret = RET_OK;
AustinKim 0:37121f302ff1 300 }
AustinKim 0:37121f302ff1 301 else
AustinKim 0:37121f302ff1 302 {
AustinKim 0:37121f302ff1 303 devlog("Network Status : %d, %d\r\n", val, stat);
AustinKim 0:37121f302ff1 304 }
AustinKim 0:37121f302ff1 305 }
AustinKim 0:37121f302ff1 306 else
AustinKim 0:37121f302ff1 307 {
AustinKim 0:37121f302ff1 308 devlog("Network Status : Error\r\n");
AustinKim 0:37121f302ff1 309 }
AustinKim 0:37121f302ff1 310
AustinKim 0:37121f302ff1 311 return ret;
AustinKim 0:37121f302ff1 312 }
AustinKim 0:37121f302ff1 313
AustinKim 0:37121f302ff1 314 // ----------------------------------------------------------------
AustinKim 0:37121f302ff1 315 // Functions: Cat.M1 PDP context activate / deactivate
AustinKim 0:37121f302ff1 316 // ----------------------------------------------------------------
AustinKim 0:37121f302ff1 317
AustinKim 0:37121f302ff1 318 int8_t setContextActivate_WM01(void) // Activate a PDP Context
AustinKim 0:37121f302ff1 319 {
AustinKim 0:37121f302ff1 320 int8_t ret = RET_NOK;
AustinKim 0:37121f302ff1 321
AustinKim 0:37121f302ff1 322 _parser->send("AT*RNDISDATA=1");
AustinKim 0:37121f302ff1 323
AustinKim 0:37121f302ff1 324 if(_parser->recv("OK"))
AustinKim 0:37121f302ff1 325 {
AustinKim 0:37121f302ff1 326 devlog("Activate a PDP Context\r\n");
AustinKim 0:37121f302ff1 327
AustinKim 0:37121f302ff1 328 ret = RET_OK;
AustinKim 0:37121f302ff1 329 }
AustinKim 0:37121f302ff1 330 else
AustinKim 0:37121f302ff1 331 {
AustinKim 0:37121f302ff1 332 devlog("PDP Context Activation failed\r\n");
AustinKim 0:37121f302ff1 333 }
AustinKim 0:37121f302ff1 334
AustinKim 0:37121f302ff1 335 return ret;
AustinKim 0:37121f302ff1 336 }
AustinKim 0:37121f302ff1 337
AustinKim 0:37121f302ff1 338 int8_t setContextDeactivate_WM01(void) // Deactivate a PDP Context
AustinKim 0:37121f302ff1 339 {
AustinKim 0:37121f302ff1 340 int8_t ret = RET_NOK;
AustinKim 0:37121f302ff1 341
AustinKim 0:37121f302ff1 342 _parser->send("AT*RNDISDATA=0");
AustinKim 0:37121f302ff1 343
AustinKim 0:37121f302ff1 344 if(_parser->recv("OK"))
AustinKim 0:37121f302ff1 345 {
AustinKim 0:37121f302ff1 346 devlog("Deactivate a PDP Context\r\n");
AustinKim 0:37121f302ff1 347
AustinKim 0:37121f302ff1 348 ret = RET_OK;
AustinKim 0:37121f302ff1 349 }
AustinKim 0:37121f302ff1 350 else
AustinKim 0:37121f302ff1 351 {
AustinKim 0:37121f302ff1 352 devlog("PDP Context Deactivation failed\r\n");
AustinKim 0:37121f302ff1 353 }
AustinKim 0:37121f302ff1 354 return ret;
AustinKim 0:37121f302ff1 355 }
AustinKim 0:37121f302ff1 356
AustinKim 0:37121f302ff1 357 // ----------------------------------------------------------------
AustinKim 0:37121f302ff1 358 // Functions: TCP/UDP socket service
AustinKim 0:37121f302ff1 359 // ----------------------------------------------------------------
AustinKim 0:37121f302ff1 360
AustinKim 0:37121f302ff1 361 int8_t sockOpenConnect_WM01(int protocol, const char *addr, int port, int pckttype)
AustinKim 0:37121f302ff1 362 {
AustinKim 0:37121f302ff1 363 int8_t ret = RET_NOK;
AustinKim 0:37121f302ff1 364 bool done = false;
AustinKim 0:37121f302ff1 365 int ok = 0; // 0 : failure , 1 : success
AustinKim 0:37121f302ff1 366 int id = 0;
AustinKim 0:37121f302ff1 367
AustinKim 0:37121f302ff1 368 Timer t;
AustinKim 0:37121f302ff1 369
AustinKim 0:37121f302ff1 370 _parser->set_timeout(WM01_CONNECT_TIMEOUT);
AustinKim 0:37121f302ff1 371
AustinKim 0:37121f302ff1 372 if((protocol != 0) && (protocol != 1)) // 0 : TCP, 1 : UDP
AustinKim 0:37121f302ff1 373 {
AustinKim 0:37121f302ff1 374 return RET_NOK;
AustinKim 0:37121f302ff1 375 }
AustinKim 0:37121f302ff1 376
AustinKim 0:37121f302ff1 377 t.start();
AustinKim 0:37121f302ff1 378
AustinKim 0:37121f302ff1 379 _parser->send("AT+WSOCR=%d,%s,%d,%d,%d", id, addr, port, protocol, pckttype);
AustinKim 0:37121f302ff1 380
AustinKim 0:37121f302ff1 381 do
AustinKim 0:37121f302ff1 382 {
AustinKim 0:37121f302ff1 383 done = (_parser->recv("+WSOCR:%d,%d", &ok,&id) && (ok == 1));
AustinKim 0:37121f302ff1 384 } while(!done && t.read_ms() < WM01_CONNECT_TIMEOUT);
AustinKim 0:37121f302ff1 385
AustinKim 0:37121f302ff1 386 if(done)
AustinKim 0:37121f302ff1 387 {
AustinKim 0:37121f302ff1 388 if(_parser->send("AT+WSOCO=%d", id) && _parser->recv("+WSOCO:%d,%d,OPEN_WAIT", &ok, &id) && _parser->recv("OK"))
AustinKim 0:37121f302ff1 389 {
AustinKim 0:37121f302ff1 390 if(ok == 1)
AustinKim 0:37121f302ff1 391 {
AustinKim 0:37121f302ff1 392 if(_parser->recv("+WSOCO:%d,OPEN_CMPL", &id))
AustinKim 0:37121f302ff1 393 {
AustinKim 0:37121f302ff1 394 ret = RET_OK;
AustinKim 0:37121f302ff1 395 }
AustinKim 0:37121f302ff1 396 }
AustinKim 0:37121f302ff1 397 }
AustinKim 0:37121f302ff1 398 }
AustinKim 0:37121f302ff1 399
AustinKim 0:37121f302ff1 400 _parser->set_timeout(WM01_DEFAULT_TIMEOUT);
AustinKim 0:37121f302ff1 401 _parser->flush();
AustinKim 0:37121f302ff1 402
AustinKim 0:37121f302ff1 403 return ret;
AustinKim 0:37121f302ff1 404 }
AustinKim 0:37121f302ff1 405
AustinKim 0:37121f302ff1 406 int8_t sockClose_WM01(void)
AustinKim 0:37121f302ff1 407 {
AustinKim 0:37121f302ff1 408 int8_t ret = RET_NOK;
AustinKim 0:37121f302ff1 409 int ok = 0; // 0 : failure , 1 : success
AustinKim 0:37121f302ff1 410 int id = 0;
AustinKim 0:37121f302ff1 411
AustinKim 0:37121f302ff1 412 _parser->set_timeout(WM01_CONNECT_TIMEOUT);
AustinKim 0:37121f302ff1 413
AustinKim 0:37121f302ff1 414 if(_parser->send("AT+WSOCL=%d", id) && _parser->recv("+WSOCL:%d,%d,CLOSE_WAIT", &ok, &id) &&_parser->recv("OK"))
AustinKim 0:37121f302ff1 415 {
AustinKim 0:37121f302ff1 416 if(ok == 1)
AustinKim 0:37121f302ff1 417 {
AustinKim 0:37121f302ff1 418 ret = RET_OK;
AustinKim 0:37121f302ff1 419 }
AustinKim 0:37121f302ff1 420 }
AustinKim 0:37121f302ff1 421
AustinKim 0:37121f302ff1 422 _parser->set_timeout(WM01_DEFAULT_TIMEOUT);
AustinKim 0:37121f302ff1 423
AustinKim 0:37121f302ff1 424 return ret;
AustinKim 0:37121f302ff1 425 }
AustinKim 0:37121f302ff1 426
AustinKim 1:b195d2a6ad11 427 int8_t sendData_WM01(void)
AustinKim 0:37121f302ff1 428 {
AustinKim 0:37121f302ff1 429 int8_t ret = RET_NOK;
AustinKim 0:37121f302ff1 430 bool done = false;
AustinKim 1:b195d2a6ad11 431 // REST(Representational State Transfer) API
AustinKim 1:b195d2a6ad11 432 char rest_data_1st[] = "GET /wid/queryDFSRSS.jsp?zone=4113552000 HTTP/1.1";
AustinKim 1:b195d2a6ad11 433 char rest_data_2nd[] = "HOST: www.kma.go.kr";
AustinKim 1:b195d2a6ad11 434 char rest_data_3rd[] = "Connection: close";
AustinKim 0:37121f302ff1 435 int ok = 0; // 0 : failure , 1 : success
AustinKim 0:37121f302ff1 436 int id = 0;
AustinKim 1:b195d2a6ad11 437 int len = 93;
AustinKim 0:37121f302ff1 438
AustinKim 0:37121f302ff1 439 _parser->set_timeout(WM01_SEND_TIMEOUT);
AustinKim 0:37121f302ff1 440
AustinKim 1:b195d2a6ad11 441 _parser->send("AT+WSOWR=%d,%d,%s", id, len, rest_data_1st);
AustinKim 1:b195d2a6ad11 442 _parser->send("%s", rest_data_2nd);
AustinKim 1:b195d2a6ad11 443 _parser->send("%s", rest_data_3rd);
AustinKim 1:b195d2a6ad11 444 _parser->send("\r\n");
AustinKim 0:37121f302ff1 445
AustinKim 0:37121f302ff1 446 if(_parser->recv("+WSOWR:%d,%d", &ok, &id) && _parser->recv("OK"))
AustinKim 0:37121f302ff1 447 {
AustinKim 0:37121f302ff1 448 if(ok == 1)
AustinKim 0:37121f302ff1 449 {
AustinKim 0:37121f302ff1 450 ret = RET_OK;
AustinKim 0:37121f302ff1 451 }
AustinKim 0:37121f302ff1 452 }
AustinKim 0:37121f302ff1 453
AustinKim 0:37121f302ff1 454 _parser->set_timeout(WM01_DEFAULT_TIMEOUT);
AustinKim 0:37121f302ff1 455
AustinKim 0:37121f302ff1 456 return ret;
AustinKim 1:b195d2a6ad11 457 }
AustinKim 1:b195d2a6ad11 458
AustinKim 1:b195d2a6ad11 459 int8_t recvData_WM01(void)
AustinKim 1:b195d2a6ad11 460 {
AustinKim 1:b195d2a6ad11 461 int8_t ret = RET_NOK;
AustinKim 1:b195d2a6ad11 462 char _tmpbuf[50] = {0, };
AustinKim 1:b195d2a6ad11 463 char http_version[10] = {0, };
AustinKim 1:b195d2a6ad11 464 int id = 0;
AustinKim 1:b195d2a6ad11 465 int bufsize = 0;
AustinKim 1:b195d2a6ad11 466 int status_code = 0;
AustinKim 1:b195d2a6ad11 467
AustinKim 1:b195d2a6ad11 468 Timer t;
AustinKim 1:b195d2a6ad11 469
AustinKim 1:b195d2a6ad11 470 _parser->set_timeout((1000 * 4));
AustinKim 1:b195d2a6ad11 471
AustinKim 1:b195d2a6ad11 472 if(_parser->recv("+WSORD:%d,%d,%s %d OK", &id, &bufsize, http_version, &status_code))
AustinKim 1:b195d2a6ad11 473 {
AustinKim 1:b195d2a6ad11 474 t.start();
AustinKim 1:b195d2a6ad11 475
AustinKim 1:b195d2a6ad11 476 while(t.read_ms() < (1000 * 4))
AustinKim 1:b195d2a6ad11 477 {
AustinKim 1:b195d2a6ad11 478 pc.printf("%c", _parser->getc());
AustinKim 1:b195d2a6ad11 479 }
AustinKim 1:b195d2a6ad11 480
AustinKim 1:b195d2a6ad11 481 ret = RET_OK;
AustinKim 1:b195d2a6ad11 482 }
AustinKim 1:b195d2a6ad11 483
AustinKim 1:b195d2a6ad11 484 _parser->set_timeout(WM01_DEFAULT_TIMEOUT);
AustinKim 1:b195d2a6ad11 485 _parser->flush();
AustinKim 1:b195d2a6ad11 486
AustinKim 1:b195d2a6ad11 487 return ret;
AustinKim 0:37121f302ff1 488 }