WIZnet-IoTShield-AMM592-TCP example

Committer:
vikshin
Date:
Tue Sep 17 01:11:16 2019 +0000
Revision:
5:5254d0016504
Parent:
4:5638a7186930
Initial Release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hkjung 0:8f339a252825 1 /* WIZnet IoT Shield Cat.M1 Sample code for Arm MBED
hkjung 0:8f339a252825 2 * Copyright (c) 2019 WIZnet Co., Ltd.
hkjung 0:8f339a252825 3 * SPDX-License-Identifier: Apache-2.0
hkjung 0:8f339a252825 4 */
hkjung 2:46cc35700e0e 5
hkjung 2:46cc35700e0e 6 /*
hkjung 2:46cc35700e0e 7 * Licensed under the Apache License, Version 2.0 (the "License");
hkjung 2:46cc35700e0e 8 * you may not use this file except in compliance with the License.
hkjung 2:46cc35700e0e 9 * You may obtain a copy of the License at
hkjung 2:46cc35700e0e 10 *
hkjung 2:46cc35700e0e 11 * http://www.apache.org/licenses/LICENSE-2.0
hkjung 2:46cc35700e0e 12 *
hkjung 2:46cc35700e0e 13 * Unless required by applicable law or agreed to in writing, software
hkjung 2:46cc35700e0e 14 * distributed under the License is distributed on an "AS IS" BASIS,
hkjung 2:46cc35700e0e 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
hkjung 2:46cc35700e0e 16 *
hkjung 2:46cc35700e0e 17 * See the License for the specific language governing permissions and
hkjung 2:46cc35700e0e 18 * limitations under the License.
hkjung 2:46cc35700e0e 19 *
hkjung 2:46cc35700e0e 20 */
hkjung 2:46cc35700e0e 21
hkjung 0:8f339a252825 22 #include <string>
hkjung 0:8f339a252825 23 #include "mbed.h"
hkjung 0:8f339a252825 24
hkjung 0:8f339a252825 25 #define RET_OK 1
hkjung 0:8f339a252825 26 #define RET_NOK -1
hkjung 0:8f339a252825 27 #define DEBUG_ENABLE 1
hkjung 0:8f339a252825 28 #define DEBUG_DISABLE 0
hkjung 0:8f339a252825 29 #define ON 1
hkjung 0:8f339a252825 30 #define OFF 0
hkjung 0:8f339a252825 31
hkjung 0:8f339a252825 32 #define MAX_BUF_SIZE 1024
hkjung 0:8f339a252825 33
vikshin 4:5638a7186930 34 #define AMM592_APN_PROTOCOL_IPv4 1
vikshin 4:5638a7186930 35 #define AMM592_APN_PROTOCOL_IPv6 2
vikshin 4:5638a7186930 36 #define AMM592_DEFAULT_TIMEOUT 1000
vikshin 4:5638a7186930 37 #define AMM592_CONNECT_TIMEOUT 15000
vikshin 4:5638a7186930 38 #define AMM592_SEND_TIMEOUT 500
vikshin 4:5638a7186930 39 #define AMM592_RECV_TIMEOUT 500
hkjung 0:8f339a252825 40
vikshin 4:5638a7186930 41 #define AMM592_APN_PROTOCOL AMM592_APN_PROTOCOL_IPv6
vikshin 4:5638a7186930 42 #define AMM592_DEFAULT_BAUD_RATE 115200
vikshin 4:5638a7186930 43 #define AMM592_PARSER_DELIMITER "\r\n"
hkjung 0:8f339a252825 44
hkjung 0:8f339a252825 45 #define CATM1_APN_SKT "lte-internet.sktelecom.com"
hkjung 0:8f339a252825 46
vikshin 4:5638a7186930 47 #define CATM1_DEVICE_NAME_AMM592 "AMM592"
vikshin 4:5638a7186930 48 #define DEVNAME CATM1_DEVICE_NAME_AMM592
hkjung 0:8f339a252825 49
hkjung 0:8f339a252825 50 #define devlog(f_, ...) if(CATM1_DEVICE_DEBUG == DEBUG_ENABLE) { pc.printf("\r\n[%s] ", DEVNAME); pc.printf((f_), ##__VA_ARGS__); }
hkjung 0:8f339a252825 51 #define myprintf(f_, ...) {pc.printf("\r\n[MAIN] "); pc.printf((f_), ##__VA_ARGS__);}
hkjung 0:8f339a252825 52
hkjung 0:8f339a252825 53 /* Pin configuraiton */
hkjung 0:8f339a252825 54 // Cat.M1
hkjung 0:8f339a252825 55 #define MBED_CONF_IOTSHIELD_CATM1_TX D8
hkjung 0:8f339a252825 56 #define MBED_CONF_IOTSHIELD_CATM1_RX D2
hkjung 2:46cc35700e0e 57 #define MBED_CONF_IOTSHIELD_CATM1_RESET D7
hkjung 0:8f339a252825 58 #define MBED_CONF_IOTSHIELD_CATM1_PWRKEY D9
hkjung 2:46cc35700e0e 59
hkjung 0:8f339a252825 60 // Sensors
hkjung 0:8f339a252825 61 #define MBED_CONF_IOTSHIELD_SENSOR_CDS A0
hkjung 0:8f339a252825 62 #define MBED_CONF_IOTSHIELD_SENSOR_TEMP A1
hkjung 0:8f339a252825 63
hkjung 0:8f339a252825 64 /* Debug message settings */
vikshin 4:5638a7186930 65 #define AMM592_PARSER_DEBUG DEBUG_DISABLE
hkjung 0:8f339a252825 66 #define CATM1_DEVICE_DEBUG DEBUG_ENABLE
hkjung 0:8f339a252825 67
hkjung 2:46cc35700e0e 68 // Functions: Module Status
hkjung 2:46cc35700e0e 69 void waitCatM1Ready(void);
vikshin 4:5638a7186930 70 int8_t setEchoStatus_AMM592(int onoff);
vikshin 4:5638a7186930 71 int8_t getUsimStatus_AMM592(void);
vikshin 4:5638a7186930 72 int8_t getNetworkStatus_AMM592(void);
vikshin 4:5638a7186930 73 int8_t checknSetApn_AMM592(const char * apn);
hkjung 0:8f339a252825 74
hkjung 2:46cc35700e0e 75 // Functions: DNS
vikshin 4:5638a7186930 76 int8_t getIpAddressByName_AMM592(const char * name);
hkjung 2:46cc35700e0e 77
hkjung 2:46cc35700e0e 78 // Functions: PDP context
vikshin 4:5638a7186930 79 int8_t getIpAddress_AMM592(char * ipstr);
hkjung 2:46cc35700e0e 80
hkjung 2:46cc35700e0e 81 // Functions: TCP/UDP Socket service
vikshin 4:5638a7186930 82 int8_t sockOpenConnect_AMM592(int socket_id, int socket_type, int data_type, const char * addr, int port);
vikshin 4:5638a7186930 83 int8_t sockClose_AMM592(void);
vikshin 4:5638a7186930 84 int8_t sendData_AMM592(int socket_id, int data_type, char * data, int len);
vikshin 4:5638a7186930 85 int8_t recvData_AMM592(int socket_id, int data_type, int * len, char * data);
hkjung 0:8f339a252825 86
hkjung 0:8f339a252825 87 Serial pc(USBTX, USBRX); // tx, rx
hkjung 0:8f339a252825 88
hkjung 0:8f339a252825 89 UARTSerial *_serial;
hkjung 0:8f339a252825 90 ATCmdParser *_parser;
hkjung 0:8f339a252825 91
vikshin 4:5638a7186930 92 DigitalOut _RESET_AMM592(MBED_CONF_IOTSHIELD_CATM1_RESET);
vikshin 4:5638a7186930 93 DigitalOut _PWRKEY_AMM592(MBED_CONF_IOTSHIELD_CATM1_PWRKEY);
hkjung 0:8f339a252825 94
hkjung 1:35abb05061e0 95 // Destination (Remote Host)
hkjung 1:35abb05061e0 96 // IP address and Port number
vikshin 5:5254d0016504 97 char dest_ip[] = "222.xx.xxx.xxx;
vikshin 4:5638a7186930 98 int dest_port = 5000;
hkjung 1:35abb05061e0 99
hkjung 0:8f339a252825 100 void serialPcInit(void)
hkjung 0:8f339a252825 101 {
hkjung 0:8f339a252825 102 pc.baud(115200);
hkjung 0:8f339a252825 103 pc.format(8, Serial::None, 1);
hkjung 0:8f339a252825 104 }
hkjung 0:8f339a252825 105
hkjung 0:8f339a252825 106 void serialDeviceInit(PinName tx, PinName rx, int baudrate)
hkjung 0:8f339a252825 107 {
hkjung 0:8f339a252825 108 _serial = new UARTSerial(tx, rx, baudrate);
hkjung 0:8f339a252825 109 }
hkjung 0:8f339a252825 110
hkjung 0:8f339a252825 111 void serialAtParserInit(const char *delimiter, bool debug_en)
hkjung 0:8f339a252825 112 {
hkjung 0:8f339a252825 113 _parser = new ATCmdParser(_serial);
hkjung 0:8f339a252825 114 _parser->debug_on(debug_en);
hkjung 0:8f339a252825 115 _parser->set_delimiter(delimiter);
vikshin 4:5638a7186930 116 _parser->set_timeout(AMM592_DEFAULT_TIMEOUT);
hkjung 0:8f339a252825 117 }
hkjung 0:8f339a252825 118
hkjung 0:8f339a252825 119 void catm1DeviceInit(void)
hkjung 0:8f339a252825 120 {
hkjung 0:8f339a252825 121 serialDeviceInit( MBED_CONF_IOTSHIELD_CATM1_TX,
hkjung 0:8f339a252825 122 MBED_CONF_IOTSHIELD_CATM1_RX,
vikshin 4:5638a7186930 123 AMM592_DEFAULT_BAUD_RATE);
hkjung 0:8f339a252825 124
vikshin 4:5638a7186930 125 serialAtParserInit( AMM592_PARSER_DELIMITER,
vikshin 4:5638a7186930 126 AMM592_PARSER_DEBUG);
hkjung 0:8f339a252825 127 }
hkjung 0:8f339a252825 128
vikshin 4:5638a7186930 129 void catm1DeviceReset_AMM592(void)
hkjung 0:8f339a252825 130 {
vikshin 4:5638a7186930 131 _RESET_AMM592 = 1;
vikshin 4:5638a7186930 132 _PWRKEY_AMM592 = 1;
hkjung 2:46cc35700e0e 133 wait_ms(300);
hkjung 2:46cc35700e0e 134
vikshin 4:5638a7186930 135 _RESET_AMM592 = 0;
vikshin 4:5638a7186930 136 _PWRKEY_AMM592 = 0;
hkjung 2:46cc35700e0e 137 wait_ms(400);
hkjung 2:46cc35700e0e 138
vikshin 4:5638a7186930 139 _RESET_AMM592 = 1;
hkjung 2:46cc35700e0e 140 wait_ms(1000);
hkjung 0:8f339a252825 141 }
hkjung 0:8f339a252825 142
hkjung 2:46cc35700e0e 143 // ----------------------------------------------------------------
hkjung 2:46cc35700e0e 144 // Main routine
hkjung 2:46cc35700e0e 145 // ----------------------------------------------------------------
hkjung 0:8f339a252825 146
hkjung 0:8f339a252825 147 int main()
hkjung 0:8f339a252825 148 {
hkjung 0:8f339a252825 149 serialPcInit();
hkjung 0:8f339a252825 150 catm1DeviceInit();
hkjung 0:8f339a252825 151
hkjung 0:8f339a252825 152 myprintf("Waiting for Cat.M1 Module Ready...\r\n");
hkjung 0:8f339a252825 153
vikshin 4:5638a7186930 154 catm1DeviceReset_AMM592();
hkjung 0:8f339a252825 155
hkjung 0:8f339a252825 156 waitCatM1Ready();
hkjung 2:46cc35700e0e 157
hkjung 2:46cc35700e0e 158 wait_ms(5000);
hkjung 0:8f339a252825 159
hkjung 0:8f339a252825 160 myprintf("System Init Complete\r\n");
hkjung 0:8f339a252825 161
hkjung 0:8f339a252825 162 myprintf("WIZnet IoT Shield for Arm MBED");
hkjung 0:8f339a252825 163 myprintf("LTE Cat.M1 Version");
hkjung 0:8f339a252825 164 myprintf("=================================================");
vikshin 4:5638a7186930 165 myprintf(">> Target Board: WIoT-AM01 (AM Telecom AMM592)");
hkjung 0:8f339a252825 166 myprintf(">> Sample Code: TCP Client Send & Recv");
hkjung 0:8f339a252825 167 myprintf("=================================================\r\n");
hkjung 0:8f339a252825 168
vikshin 4:5638a7186930 169 setEchoStatus_AMM592(OFF);
hkjung 0:8f339a252825 170
vikshin 4:5638a7186930 171 getUsimStatus_AMM592();
hkjung 0:8f339a252825 172
vikshin 4:5638a7186930 173 getNetworkStatus_AMM592();
vikshin 4:5638a7186930 174
vikshin 4:5638a7186930 175 checknSetApn_AMM592(CATM1_APN_SKT);
vikshin 4:5638a7186930 176
hkjung 0:8f339a252825 177
hkjung 2:46cc35700e0e 178 // DNS Sample
hkjung 2:46cc35700e0e 179 const char dest_domain[] = "www.google.com";
vikshin 4:5638a7186930 180
vikshin 4:5638a7186930 181 if(getIpAddressByName_AMM592(dest_domain)) {
vikshin 4:5638a7186930 182 myprintf("DNSQUERY successful\r\n");
hkjung 2:46cc35700e0e 183 } else {
hkjung 2:46cc35700e0e 184 myprintf("DNS: failed\r\n");
hkjung 2:46cc35700e0e 185 }
hkjung 0:8f339a252825 186
vikshin 4:5638a7186930 187
vikshin 4:5638a7186930 188 //Convert IP to HEX
vikshin 4:5638a7186930 189 //64:ff9b:: is standard SK prefix
vikshin 4:5638a7186930 190 int i=1;
vikshin 4:5638a7186930 191 char * pch;
vikshin 4:5638a7186930 192 char _dest_ip[20]="64:ff9b::";
vikshin 4:5638a7186930 193 char temp[4];
vikshin 4:5638a7186930 194 pch = strtok(dest_ip, ".");
vikshin 4:5638a7186930 195 while(pch!=NULL) {
vikshin 4:5638a7186930 196 if (i!=2) {
vikshin 4:5638a7186930 197 sprintf(temp, "%x\0", atoi(pch));
vikshin 4:5638a7186930 198 strcat(_dest_ip, temp);
vikshin 4:5638a7186930 199 i++;
vikshin 4:5638a7186930 200 }
vikshin 4:5638a7186930 201 else {
vikshin 4:5638a7186930 202 sprintf(temp, "%x:\0", atoi(pch));
vikshin 4:5638a7186930 203 strcat(_dest_ip, temp);
vikshin 4:5638a7186930 204 i++;
vikshin 4:5638a7186930 205 }
vikshin 4:5638a7186930 206 pch = strtok(NULL, ".");
vikshin 4:5638a7186930 207 }
vikshin 4:5638a7186930 208
hkjung 0:8f339a252825 209 // TCP Client: Send and Receive
vikshin 4:5638a7186930 210 myprintf("TCP Client Start - Connect to Remote Host \r\n");
hkjung 0:8f339a252825 211
vikshin 4:5638a7186930 212 if(sockOpenConnect_AMM592(0,0,0, _dest_ip, dest_port) == RET_OK) {
hkjung 0:8f339a252825 213 myprintf("sockOpenConnect: success\r\n");
hkjung 0:8f339a252825 214
vikshin 4:5638a7186930 215 char sendbuf[] = "Hello Cat.M1";
vikshin 4:5638a7186930 216 if(sendData_AMM592(0, 0, sendbuf, strlen(sendbuf))) {
hkjung 3:4041e2cc0f19 217 myprintf("dataSend [%d] %s\r\n", strlen(sendbuf), sendbuf);
hkjung 0:8f339a252825 218 }
hkjung 0:8f339a252825 219
hkjung 0:8f339a252825 220 } else {
hkjung 0:8f339a252825 221 myprintf("sockOpen: failed\r\n");
hkjung 0:8f339a252825 222
vikshin 4:5638a7186930 223 if(sockClose_AMM592() == RET_OK) {
hkjung 0:8f339a252825 224 myprintf("sockClose: success\r\n");
hkjung 0:8f339a252825 225 }
hkjung 0:8f339a252825 226 }
hkjung 0:8f339a252825 227
hkjung 0:8f339a252825 228 _parser->debug_on(DEBUG_DISABLE);
vikshin 4:5638a7186930 229
hkjung 0:8f339a252825 230 while(1)
hkjung 0:8f339a252825 231 {
hkjung 0:8f339a252825 232 char recvbuf[100] = {0, };
hkjung 0:8f339a252825 233 int recvlen = 0;
hkjung 0:8f339a252825 234
vikshin 4:5638a7186930 235 if(recvData_AMM592(0, 0, &recvlen, recvbuf) == RET_OK) {
hkjung 0:8f339a252825 236 myprintf("dataRecv [%d] %s\r\n", recvlen, recvbuf);
hkjung 0:8f339a252825 237
hkjung 3:4041e2cc0f19 238 // Loopback: Resend received data to TCP server
vikshin 4:5638a7186930 239 //sendData_AMM592(0, 0, recvbuf, recvlen);
vikshin 4:5638a7186930 240 //myprintf("dataSend [%d] %s\r\n", recvlen, recvbuf);
hkjung 3:4041e2cc0f19 241
hkjung 0:8f339a252825 242 char * ptr = strstr(recvbuf, "exit");
hkjung 0:8f339a252825 243 if(ptr != 0) break;
vikshin 4:5638a7186930 244 }
hkjung 0:8f339a252825 245 }
vikshin 4:5638a7186930 246
vikshin 4:5638a7186930 247 if(sockClose_AMM592() == RET_OK) {
hkjung 0:8f339a252825 248 myprintf("sockClose: success\r\n");
hkjung 0:8f339a252825 249 }
vikshin 4:5638a7186930 250
vikshin 4:5638a7186930 251
hkjung 0:8f339a252825 252 }
hkjung 0:8f339a252825 253
hkjung 2:46cc35700e0e 254 // ----------------------------------------------------------------
hkjung 2:46cc35700e0e 255 // Functions: Cat.M1 Status
hkjung 2:46cc35700e0e 256 // ----------------------------------------------------------------
hkjung 0:8f339a252825 257
hkjung 2:46cc35700e0e 258 void waitCatM1Ready(void)
hkjung 2:46cc35700e0e 259 {
hkjung 2:46cc35700e0e 260 while(1)
hkjung 2:46cc35700e0e 261 {
vikshin 4:5638a7186930 262 if(_parser->recv("@NOTI:34,AMT_BOOT_ALERT")&& _parser->recv("@NETSTI:3"))
hkjung 2:46cc35700e0e 263 {
vikshin 4:5638a7186930 264 myprintf("AMM592 ready\r\n");
hkjung 2:46cc35700e0e 265 return ;
hkjung 2:46cc35700e0e 266 }
hkjung 2:46cc35700e0e 267 else if(_parser->send("AT") && _parser->recv("OK"))
hkjung 2:46cc35700e0e 268 {
vikshin 4:5638a7186930 269 myprintf("AMM592 already available\r\n");
hkjung 2:46cc35700e0e 270 return ;
hkjung 2:46cc35700e0e 271 }
hkjung 2:46cc35700e0e 272 }
hkjung 2:46cc35700e0e 273 }
hkjung 0:8f339a252825 274
vikshin 4:5638a7186930 275 int8_t setEchoStatus_AMM592(int onoff)
hkjung 0:8f339a252825 276 {
hkjung 0:8f339a252825 277 int8_t ret = RET_NOK;
hkjung 0:8f339a252825 278 char _buf[10];
hkjung 0:8f339a252825 279
hkjung 0:8f339a252825 280 sprintf((char *)_buf, "ATE%d", onoff);
hkjung 0:8f339a252825 281
hkjung 0:8f339a252825 282 if(_parser->send(_buf) && _parser->recv("OK")) {
hkjung 0:8f339a252825 283 devlog("Turn Echo %s success\r\n", onoff?"ON":"OFF");
hkjung 0:8f339a252825 284 ret = RET_OK;
hkjung 0:8f339a252825 285 } else {
hkjung 0:8f339a252825 286 devlog("Turn Echo %s failed\r\n", onoff?"ON":"OFF");
hkjung 0:8f339a252825 287 }
hkjung 0:8f339a252825 288 return ret;
hkjung 0:8f339a252825 289 }
hkjung 0:8f339a252825 290
vikshin 4:5638a7186930 291 int8_t getUsimStatus_AMM592(void)
hkjung 0:8f339a252825 292 {
hkjung 0:8f339a252825 293 int8_t ret = RET_NOK;
hkjung 0:8f339a252825 294
hkjung 0:8f339a252825 295 _parser->send("AT+CPIN?");
hkjung 0:8f339a252825 296 if(_parser->recv("+CPIN: READY") && _parser->recv("OK")) {
hkjung 0:8f339a252825 297 devlog("USIM Status: READY\r\n");
hkjung 0:8f339a252825 298 ret = RET_OK;
hkjung 0:8f339a252825 299 } else {
hkjung 0:8f339a252825 300 devlog("Retrieving USIM Status failed\r\n");
hkjung 0:8f339a252825 301 }
hkjung 0:8f339a252825 302 return ret;
hkjung 0:8f339a252825 303 }
hkjung 0:8f339a252825 304
vikshin 4:5638a7186930 305 int8_t getNetworkStatus_AMM592(void)
hkjung 0:8f339a252825 306 {
vikshin 4:5638a7186930 307 int8_t ret = RET_NOK;
vikshin 4:5638a7186930 308 bool cereg = false, nsi = false;
vikshin 4:5638a7186930 309 int n, stat;
vikshin 4:5638a7186930 310
vikshin 4:5638a7186930 311 if(_parser->send("AT+CEREG?") && _parser->recv("+CEREG: %d, %d", &n, &stat) && _parser->recv("OK")){
vikshin 4:5638a7186930 312 if ((n==0 || n==1) && stat==1){
vikshin 4:5638a7186930 313 cereg = true;
vikshin 4:5638a7186930 314 }
vikshin 4:5638a7186930 315 }
hkjung 0:8f339a252825 316
vikshin 4:5638a7186930 317 if(_parser->send("AT@NSI") && _parser->recv("@NSI:%d,\"IN SRV\"") && _parser->recv("OK")) {
hkjung 0:8f339a252825 318 devlog("Network Status: attached\r\n");
vikshin 4:5638a7186930 319 nsi = true;
vikshin 4:5638a7186930 320 } else if (_parser->send("AT@NSI") && _parser->recv("@NSI: \"LIMITED\"") && _parser->recv("OK")) {
vikshin 4:5638a7186930 321 devlog("Network Status: limited\r\n");
hkjung 0:8f339a252825 322 } else {
hkjung 0:8f339a252825 323 devlog("Network Status: Error\r\n");
hkjung 0:8f339a252825 324 }
vikshin 4:5638a7186930 325
vikshin 4:5638a7186930 326 if (cereg && nsi){
vikshin 4:5638a7186930 327 ret = RET_OK;
vikshin 4:5638a7186930 328 }
hkjung 0:8f339a252825 329 return ret;
hkjung 0:8f339a252825 330 }
hkjung 0:8f339a252825 331
vikshin 4:5638a7186930 332 int8_t checknSetApn_AMM592(const char * apn) // Configure Parameters of a TCP/IP Context
hkjung 0:8f339a252825 333 {
vikshin 4:5638a7186930 334 bool cgdccont = false, cgatt = false;
vikshin 4:5638a7186930 335 int8_t ret = RET_NOK;
hkjung 0:8f339a252825 336
hkjung 0:8f339a252825 337 devlog("Checking APN...\r\n");
vikshin 4:5638a7186930 338 //APN setting
vikshin 4:5638a7186930 339 if (_parser->send("AT+CGDCONT=1,\"IPV4V6\",\"%s\"", apn) && _parser->recv("OK")){
vikshin 4:5638a7186930 340 cgdccont = true;
vikshin 4:5638a7186930 341 }
vikshin 4:5638a7186930 342 //Attach setting
vikshin 4:5638a7186930 343 if (_parser->send("AT+CGATT?") && _parser->recv("+CGATT: 1") &&_parser->recv("OK")){
vikshin 4:5638a7186930 344 cgatt = true;
hkjung 0:8f339a252825 345 }
hkjung 0:8f339a252825 346
vikshin 4:5638a7186930 347 if (cgdccont && cgatt){
hkjung 0:8f339a252825 348 ret = RET_OK;
vikshin 4:5638a7186930 349 }
hkjung 0:8f339a252825 350
vikshin 4:5638a7186930 351 devlog("APN Check Done\r\n");
vikshin 4:5638a7186930 352
hkjung 0:8f339a252825 353 return ret;
hkjung 0:8f339a252825 354 }
hkjung 0:8f339a252825 355
vikshin 4:5638a7186930 356 int8_t getIpAddressByName_AMM592(const char * name)
hkjung 0:8f339a252825 357 {
hkjung 0:8f339a252825 358 int8_t ret = RET_NOK;
hkjung 0:8f339a252825 359
vikshin 4:5638a7186930 360 if( _parser->send("AT@DNSQ6=%s", name)&& _parser->recv("OK"))
vikshin 4:5638a7186930 361 ret = RET_OK;
hkjung 0:8f339a252825 362
vikshin 4:5638a7186930 363 return ret;
hkjung 2:46cc35700e0e 364 }
hkjung 2:46cc35700e0e 365
hkjung 2:46cc35700e0e 366 // ----------------------------------------------------------------
hkjung 2:46cc35700e0e 367 // Functions: TCP/UDP socket service
hkjung 2:46cc35700e0e 368 // ----------------------------------------------------------------
vikshin 4:5638a7186930 369 int8_t sockOpenConnect_AMM592(int socket_id, int socket_type, int data_type, const char * addr, int port)
hkjung 0:8f339a252825 370 {
hkjung 0:8f339a252825 371 int8_t ret = RET_NOK;
vikshin 4:5638a7186930 372 int err = 0;
hkjung 0:8f339a252825 373 int id = 0;
hkjung 0:8f339a252825 374
hkjung 0:8f339a252825 375 bool done = false;
hkjung 0:8f339a252825 376 Timer t;
hkjung 0:8f339a252825 377
vikshin 4:5638a7186930 378 _parser->set_timeout(AMM592_CONNECT_TIMEOUT);
hkjung 0:8f339a252825 379
vikshin 4:5638a7186930 380 if((socket_type != 0) && (socket_type != 1)) {
hkjung 0:8f339a252825 381 return RET_NOK;
hkjung 0:8f339a252825 382 }
hkjung 0:8f339a252825 383
hkjung 0:8f339a252825 384 t.start();
vikshin 4:5638a7186930 385 //devlog("AT@SOCKOPEN6=%d,%d,%d,%s,%d", socket_id, socket_type, data_type, addr, port);
vikshin 4:5638a7186930 386 _parser->send("AT@SOCKOPEN6=%d,%d,%d,%s,%d", socket_id, socket_type, data_type, addr, port);
hkjung 0:8f339a252825 387 do {
vikshin 4:5638a7186930 388 done = (_parser->recv("@SOCKOPEN6:%d,%d", &id, &err) && (err == 0));
vikshin 4:5638a7186930 389 } while(!done && t.read_ms() < AMM592_CONNECT_TIMEOUT);
vikshin 4:5638a7186930 390
vikshin 4:5638a7186930 391 if(done) ret = RET_OK;
hkjung 0:8f339a252825 392
vikshin 4:5638a7186930 393 _parser->set_timeout(AMM592_DEFAULT_TIMEOUT);
hkjung 0:8f339a252825 394 _parser->flush();
hkjung 0:8f339a252825 395
hkjung 0:8f339a252825 396 return ret;
hkjung 0:8f339a252825 397 }
hkjung 0:8f339a252825 398
vikshin 4:5638a7186930 399 int8_t sockClose_AMM592(void)
hkjung 0:8f339a252825 400 {
hkjung 0:8f339a252825 401 int8_t ret = RET_NOK;
hkjung 0:8f339a252825 402 int id = 0;
hkjung 0:8f339a252825 403
vikshin 4:5638a7186930 404 _parser->set_timeout(AMM592_CONNECT_TIMEOUT);
hkjung 0:8f339a252825 405
vikshin 4:5638a7186930 406 if(_parser->send("AT@SOCKCLOSE6=%d", id) && _parser->recv("OK")) {
hkjung 0:8f339a252825 407 ret = RET_OK;
hkjung 0:8f339a252825 408 }
vikshin 4:5638a7186930 409 _parser->set_timeout(AMM592_DEFAULT_TIMEOUT);
hkjung 0:8f339a252825 410
hkjung 0:8f339a252825 411 return ret;
hkjung 0:8f339a252825 412 }
vikshin 4:5638a7186930 413 int8_t sendData_AMM592(int socket_id, int data_type, char * data, int len)
hkjung 0:8f339a252825 414 {
hkjung 0:8f339a252825 415 int8_t ret = RET_NOK;
hkjung 0:8f339a252825 416 int id = 0;
hkjung 0:8f339a252825 417 bool done = false;
vikshin 4:5638a7186930 418 int err = 0;
vikshin 4:5638a7186930 419 int lencom=0;
vikshin 4:5638a7186930 420 Timer t;
hkjung 0:8f339a252825 421
vikshin 4:5638a7186930 422 _parser->set_timeout(AMM592_SEND_TIMEOUT);
vikshin 4:5638a7186930 423 t.start();
hkjung 0:8f339a252825 424
vikshin 4:5638a7186930 425 _parser->send("AT@SOCKSND6=%d,%d,\"%s\"", socket_id, data_type, data);
vikshin 4:5638a7186930 426
vikshin 4:5638a7186930 427 do {
vikshin 4:5638a7186930 428 done = (_parser->recv("@SOCKSND6:%d,%d,%d", &id, &lencom, &err) && (err == 0));
vikshin 4:5638a7186930 429 } while(!done && t.read_ms() < AMM592_CONNECT_TIMEOUT);
hkjung 0:8f339a252825 430
vikshin 4:5638a7186930 431 _parser->set_timeout(AMM592_DEFAULT_TIMEOUT);
hkjung 0:8f339a252825 432
hkjung 0:8f339a252825 433 return ret;
hkjung 0:8f339a252825 434 }
hkjung 0:8f339a252825 435
vikshin 4:5638a7186930 436 int8_t recvData_AMM592(int socket_id, int data_type, int * len, char * data)
hkjung 0:8f339a252825 437 {
hkjung 0:8f339a252825 438 int8_t ret = RET_NOK;
vikshin 4:5638a7186930 439 int recvCount = 0;
vikshin 4:5638a7186930 440 int socketid, datatype;
hkjung 0:8f339a252825 441
vikshin 4:5638a7186930 442 _parser->set_timeout(AMM592_RECV_TIMEOUT);
hkjung 0:8f339a252825 443
vikshin 4:5638a7186930 444 if( _parser->recv("@SOCKRCV6=%d,%d,%d,",&socketid, &datatype, &recvCount) ) {
hkjung 0:8f339a252825 445 if(recvCount > 0) {
hkjung 0:8f339a252825 446 _parser->read(data, recvCount);
vikshin 4:5638a7186930 447 ret = RET_OK;
vikshin 4:5638a7186930 448 }
hkjung 0:8f339a252825 449 }
vikshin 4:5638a7186930 450 _parser->set_timeout(AMM592_DEFAULT_TIMEOUT);
hkjung 0:8f339a252825 451 _parser->flush();
hkjung 0:8f339a252825 452
hkjung 0:8f339a252825 453 *len = recvCount;
hkjung 0:8f339a252825 454
hkjung 0:8f339a252825 455 return ret;
vikshin 4:5638a7186930 456 }