Init Project for TCP

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