WIZnet-IoTShield-AMM592-GPS for AMM592

Committer:
vikshin
Date:
Wed Sep 25 05:29:51 2019 +0000
Revision:
1:72811bd893df
Parent:
0:98226e0983af
Initial Release;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hkjung 0:98226e0983af 1 /* WIZnet IoT Shield Cat.M1 Sample code for Arm MBED
hkjung 0:98226e0983af 2 * Copyright (c) 2019 WIZnet Co., Ltd.
hkjung 0:98226e0983af 3 * SPDX-License-Identifier: Apache-2.0
hkjung 0:98226e0983af 4 */
hkjung 0:98226e0983af 5
hkjung 0:98226e0983af 6 /*
hkjung 0:98226e0983af 7 * Licensed under the Apache License, Version 2.0 (the "License");
hkjung 0:98226e0983af 8 * you may not use this file except in compliance with the License.
hkjung 0:98226e0983af 9 * You may obtain a copy of the License at
hkjung 0:98226e0983af 10 *
hkjung 0:98226e0983af 11 * http://www.apache.org/licenses/LICENSE-2.0
hkjung 0:98226e0983af 12 *
hkjung 0:98226e0983af 13 * Unless required by applicable law or agreed to in writing, software
hkjung 0:98226e0983af 14 * distributed under the License is distributed on an "AS IS" BASIS,
hkjung 0:98226e0983af 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
hkjung 0:98226e0983af 16 *
hkjung 0:98226e0983af 17 * See the License for the specific language governing permissions and
hkjung 0:98226e0983af 18 * limitations under the License.
hkjung 0:98226e0983af 19 *
hkjung 0:98226e0983af 20 */
hkjung 0:98226e0983af 21
hkjung 0:98226e0983af 22
hkjung 0:98226e0983af 23 #include <string>
hkjung 0:98226e0983af 24 #include "mbed.h"
hkjung 0:98226e0983af 25
hkjung 0:98226e0983af 26 #define RET_OK 1
hkjung 0:98226e0983af 27 #define RET_NOK -1
hkjung 0:98226e0983af 28 #define DEBUG_ENABLE 1
hkjung 0:98226e0983af 29 #define DEBUG_DISABLE 0
hkjung 0:98226e0983af 30 #define ON 1
hkjung 0:98226e0983af 31 #define OFF 0
hkjung 0:98226e0983af 32
hkjung 0:98226e0983af 33 #define MAX_BUF_SIZE 1024
hkjung 0:98226e0983af 34
vikshin 1:72811bd893df 35 #define AMM592_APN_PROTOCOL_IPv4 1
vikshin 1:72811bd893df 36 #define AMM592_APN_PROTOCOL_IPv6 2
vikshin 1:72811bd893df 37 #define AMM592_DEFAULT_TIMEOUT 1000
vikshin 1:72811bd893df 38 #define AMM592_CONNECT_TIMEOUT 15000
vikshin 1:72811bd893df 39 #define AMM592_SEND_TIMEOUT 500
vikshin 1:72811bd893df 40 #define AMM592_RECV_TIMEOUT 500
hkjung 0:98226e0983af 41
vikshin 1:72811bd893df 42 #define AMM592_APN_PROTOCOL AMM592_APN_PROTOCOL_IPv6
vikshin 1:72811bd893df 43 #define AMM592_DEFAULT_BAUD_RATE 115200
vikshin 1:72811bd893df 44 #define AMM592_PARSER_DELIMITER "\r\n"
hkjung 0:98226e0983af 45
hkjung 0:98226e0983af 46 #define CATM1_APN_SKT "lte-internet.sktelecom.com"
hkjung 0:98226e0983af 47
vikshin 1:72811bd893df 48 #define CATM1_DEVICE_NAME_AMM592 "AMM592"
vikshin 1:72811bd893df 49 #define DEVNAME CATM1_DEVICE_NAME_AMM592
hkjung 0:98226e0983af 50
hkjung 0:98226e0983af 51 #define devlog(f_, ...) if(CATM1_DEVICE_DEBUG == DEBUG_ENABLE) { pc.printf("\r\n[%s] ", DEVNAME); pc.printf((f_), ##__VA_ARGS__); }
hkjung 0:98226e0983af 52 #define myprintf(f_, ...) {pc.printf("\r\n[MAIN] "); pc.printf((f_), ##__VA_ARGS__);}
hkjung 0:98226e0983af 53
hkjung 0:98226e0983af 54 /* Pin configuraiton */
hkjung 0:98226e0983af 55 // Cat.M1
hkjung 0:98226e0983af 56 #define MBED_CONF_IOTSHIELD_CATM1_TX D8
hkjung 0:98226e0983af 57 #define MBED_CONF_IOTSHIELD_CATM1_RX D2
hkjung 0:98226e0983af 58 #define MBED_CONF_IOTSHIELD_CATM1_RESET D7
hkjung 0:98226e0983af 59 #define MBED_CONF_IOTSHIELD_CATM1_PWRKEY D9
hkjung 0:98226e0983af 60
hkjung 0:98226e0983af 61 // Sensors
hkjung 0:98226e0983af 62 #define MBED_CONF_IOTSHIELD_SENSOR_CDS A0
hkjung 0:98226e0983af 63 #define MBED_CONF_IOTSHIELD_SENSOR_TEMP A1
hkjung 0:98226e0983af 64
hkjung 0:98226e0983af 65 /* Debug message settings */
vikshin 1:72811bd893df 66 #define AMM592_PARSER_DEBUG DEBUG_DISABLE
hkjung 0:98226e0983af 67 #define CATM1_DEVICE_DEBUG DEBUG_ENABLE
hkjung 0:98226e0983af 68
hkjung 0:98226e0983af 69
hkjung 0:98226e0983af 70 typedef struct gps_data_t {
hkjung 0:98226e0983af 71 float lat; // latitude. (-)dd.ddddd
hkjung 0:98226e0983af 72 float lon; // longitude. (-)dd.ddddd
hkjung 0:98226e0983af 73 } gps_data;
hkjung 0:98226e0983af 74
hkjung 0:98226e0983af 75
hkjung 0:98226e0983af 76 // Functions: Module Status
hkjung 0:98226e0983af 77 void waitCatM1Ready(void);
vikshin 1:72811bd893df 78 int8_t setEchoStatus_AMM592(int onoff);
vikshin 1:72811bd893df 79 int8_t getUsimStatus_AMM592(void);
vikshin 1:72811bd893df 80 int8_t getNetworkStatus_AMM592(void);
vikshin 1:72811bd893df 81 int8_t checknSetApn_AMM592(const char * apn);
vikshin 1:72811bd893df 82 int8_t getFirmwareVersion_AMM592(char * version);
vikshin 1:72811bd893df 83 int8_t getImeiNumber_AMM592(char * imei);
hkjung 0:98226e0983af 84
hkjung 0:98226e0983af 85 // Functions: GPS
vikshin 1:72811bd893df 86 int8_t setGpsSesssion_AMM592(int session_type);
vikshin 1:72811bd893df 87 int8_t setGpsOnOff_AMM592(bool onoff);
vikshin 1:72811bd893df 88 int8_t getGpsLocation_AMM592(gps_data *data);
hkjung 0:98226e0983af 89
hkjung 0:98226e0983af 90
hkjung 0:98226e0983af 91 Serial pc(USBTX, USBRX); // USB debug
hkjung 0:98226e0983af 92
hkjung 0:98226e0983af 93 UARTSerial *_serial; // Cat.M1 module
hkjung 0:98226e0983af 94 ATCmdParser *_parser;
hkjung 0:98226e0983af 95
vikshin 1:72811bd893df 96 DigitalOut _RESET_AMM592(MBED_CONF_IOTSHIELD_CATM1_RESET);
vikshin 1:72811bd893df 97 DigitalOut _PWRKEY_AMM592(MBED_CONF_IOTSHIELD_CATM1_PWRKEY);
hkjung 0:98226e0983af 98
hkjung 0:98226e0983af 99 void serialPcInit(void)
hkjung 0:98226e0983af 100 {
hkjung 0:98226e0983af 101 pc.baud(115200);
hkjung 0:98226e0983af 102 pc.format(8, Serial::None, 1);
hkjung 0:98226e0983af 103 }
hkjung 0:98226e0983af 104
hkjung 0:98226e0983af 105 void serialDeviceInit(PinName tx, PinName rx, int baudrate)
hkjung 0:98226e0983af 106 {
hkjung 0:98226e0983af 107 _serial = new UARTSerial(tx, rx, baudrate);
hkjung 0:98226e0983af 108 }
hkjung 0:98226e0983af 109
hkjung 0:98226e0983af 110 void serialAtParserInit(const char *delimiter, bool debug_en)
hkjung 0:98226e0983af 111 {
hkjung 0:98226e0983af 112 _parser = new ATCmdParser(_serial);
hkjung 0:98226e0983af 113 _parser->debug_on(debug_en);
hkjung 0:98226e0983af 114 _parser->set_delimiter(delimiter);
vikshin 1:72811bd893df 115 _parser->set_timeout(AMM592_DEFAULT_TIMEOUT);
hkjung 0:98226e0983af 116 }
hkjung 0:98226e0983af 117
hkjung 0:98226e0983af 118 void catm1DeviceInit(void)
hkjung 0:98226e0983af 119 {
hkjung 0:98226e0983af 120 serialDeviceInit( MBED_CONF_IOTSHIELD_CATM1_TX,
hkjung 0:98226e0983af 121 MBED_CONF_IOTSHIELD_CATM1_RX,
vikshin 1:72811bd893df 122 AMM592_DEFAULT_BAUD_RATE);
hkjung 0:98226e0983af 123
vikshin 1:72811bd893df 124 serialAtParserInit( AMM592_PARSER_DELIMITER,
vikshin 1:72811bd893df 125 AMM592_PARSER_DEBUG);
hkjung 0:98226e0983af 126 }
hkjung 0:98226e0983af 127
vikshin 1:72811bd893df 128 void catm1DeviceReset_AMM592(void)
hkjung 0:98226e0983af 129 {
vikshin 1:72811bd893df 130 _RESET_AMM592 = 1;
vikshin 1:72811bd893df 131 _PWRKEY_AMM592 = 1;
hkjung 0:98226e0983af 132 wait_ms(300);
hkjung 0:98226e0983af 133
vikshin 1:72811bd893df 134 _RESET_AMM592 = 0;
vikshin 1:72811bd893df 135 _PWRKEY_AMM592 = 0;
hkjung 0:98226e0983af 136 wait_ms(400);
hkjung 0:98226e0983af 137
vikshin 1:72811bd893df 138 _RESET_AMM592 = 1;
hkjung 0:98226e0983af 139 wait_ms(1000);
hkjung 0:98226e0983af 140 }
hkjung 0:98226e0983af 141
hkjung 0:98226e0983af 142
hkjung 0:98226e0983af 143 // ----------------------------------------------------------------
hkjung 0:98226e0983af 144 // Main routine
hkjung 0:98226e0983af 145 // ----------------------------------------------------------------
hkjung 0:98226e0983af 146
hkjung 0:98226e0983af 147 int main()
hkjung 0:98226e0983af 148 {
hkjung 0:98226e0983af 149 serialPcInit();
hkjung 0:98226e0983af 150 catm1DeviceInit();
hkjung 0:98226e0983af 151
hkjung 0:98226e0983af 152 myprintf("Waiting for Cat.M1 Module Ready...\r\n");
hkjung 0:98226e0983af 153
vikshin 1:72811bd893df 154 catm1DeviceReset_AMM592();
hkjung 0:98226e0983af 155
hkjung 0:98226e0983af 156 waitCatM1Ready();
hkjung 0:98226e0983af 157
hkjung 0:98226e0983af 158 wait_ms(5000);
hkjung 0:98226e0983af 159
hkjung 0:98226e0983af 160 myprintf("System Init Complete\r\n");
hkjung 0:98226e0983af 161
hkjung 0:98226e0983af 162 myprintf("WIZnet IoT Shield for Arm MBED");
hkjung 0:98226e0983af 163 myprintf("LTE Cat.M1 Version");
hkjung 0:98226e0983af 164 myprintf("=================================================");
vikshin 1:72811bd893df 165 myprintf(">> Target Board: WIoT-AM01 (AM Telecom AMM592)");
hkjung 0:98226e0983af 166 myprintf(">> Sample Code: GPS");
hkjung 0:98226e0983af 167 myprintf("=================================================\r\n");
hkjung 0:98226e0983af 168
vikshin 1:72811bd893df 169 setEchoStatus_AMM592(0);
hkjung 0:98226e0983af 170
vikshin 1:72811bd893df 171 getUsimStatus_AMM592();
hkjung 0:98226e0983af 172
vikshin 1:72811bd893df 173 getNetworkStatus_AMM592();
hkjung 0:98226e0983af 174
vikshin 1:72811bd893df 175 checknSetApn_AMM592(CATM1_APN_SKT);
hkjung 0:98226e0983af 176
hkjung 0:98226e0983af 177 // GPS information structure
hkjung 0:98226e0983af 178 gps_data gps_info;
hkjung 0:98226e0983af 179
hkjung 0:98226e0983af 180
vikshin 1:72811bd893df 181 if(setGpsSesssion_AMM592(1) == RET_OK) {
vikshin 1:72811bd893df 182 myprintf("GPS Session setting success\r\n");
vikshin 1:72811bd893df 183
vikshin 1:72811bd893df 184 if(setGpsOnOff_AMM592(ON) == RET_OK) {
vikshin 1:72811bd893df 185 myprintf("GPS On\r\n");
vikshin 1:72811bd893df 186
vikshin 1:72811bd893df 187 if(getGpsLocation_AMM592(&gps_info) == RET_OK) {
hkjung 0:98226e0983af 188 myprintf("Get GPS information >>>");
hkjung 0:98226e0983af 189 myprintf("gps_info - lat: %2.5f", gps_info.lat) // latitude: (-)dd.ddddd
hkjung 0:98226e0983af 190 myprintf("gps_info - lon: %2.5f", gps_info.lon) // longitude: (-)dd.ddddd
hkjung 0:98226e0983af 191 } else {
hkjung 0:98226e0983af 192 myprintf("Failed to get GPS information\r\n");
hkjung 0:98226e0983af 193 }
hkjung 0:98226e0983af 194 wait_ms(1000);
vikshin 1:72811bd893df 195
hkjung 0:98226e0983af 196 #if 0
vikshin 1:72811bd893df 197 if(setGpsOnOff_AMM592(OFF) == RET_OK) {
hkjung 0:98226e0983af 198 myprintf("GPS Off\r\n")
hkjung 0:98226e0983af 199 }
hkjung 0:98226e0983af 200 #endif
hkjung 0:98226e0983af 201
vikshin 1:72811bd893df 202 } else {
vikshin 1:72811bd893df 203 myprintf("GPS On failed\r\n")
vikshin 1:72811bd893df 204 }
hkjung 0:98226e0983af 205 } else {
vikshin 1:72811bd893df 206 myprintf("GPS Session setting failed\r\n");
hkjung 0:98226e0983af 207 }
vikshin 1:72811bd893df 208
hkjung 0:98226e0983af 209 }
hkjung 0:98226e0983af 210
hkjung 0:98226e0983af 211 // ----------------------------------------------------------------
hkjung 0:98226e0983af 212 // Functions: Cat.M1 Status
hkjung 0:98226e0983af 213 // ----------------------------------------------------------------
hkjung 0:98226e0983af 214
hkjung 0:98226e0983af 215 void waitCatM1Ready(void)
hkjung 0:98226e0983af 216 {
hkjung 0:98226e0983af 217 while(1)
hkjung 0:98226e0983af 218 {
vikshin 1:72811bd893df 219 if(_parser->recv("@NOTI:34,AMT_BOOT_ALERT") && _parser->recv("@NETSTI:3") )
hkjung 0:98226e0983af 220 {
vikshin 1:72811bd893df 221 myprintf("AM592 ready\r\n");
hkjung 0:98226e0983af 222 return ;
hkjung 0:98226e0983af 223 }
hkjung 0:98226e0983af 224 else if(_parser->send("AT") && _parser->recv("OK"))
hkjung 0:98226e0983af 225 {
vikshin 1:72811bd893df 226 myprintf("AM592 already available\r\n");
vikshin 1:72811bd893df 227 wait_ms(5000);
hkjung 0:98226e0983af 228 return ;
hkjung 0:98226e0983af 229 }
vikshin 1:72811bd893df 230 }
hkjung 0:98226e0983af 231 }
hkjung 0:98226e0983af 232
vikshin 1:72811bd893df 233 int8_t setEchoStatus_AMM592(int onoff)
hkjung 0:98226e0983af 234 {
hkjung 0:98226e0983af 235 int8_t ret = RET_NOK;
hkjung 0:98226e0983af 236 char _buf[10];
hkjung 0:98226e0983af 237
hkjung 0:98226e0983af 238 sprintf((char *)_buf, "ATE%d", onoff);
hkjung 0:98226e0983af 239
hkjung 0:98226e0983af 240 if(_parser->send(_buf) && _parser->recv("OK")) {
hkjung 0:98226e0983af 241 devlog("Turn Echo %s success\r\n", onoff?"ON":"OFF");
hkjung 0:98226e0983af 242 ret = RET_OK;
hkjung 0:98226e0983af 243 } else {
hkjung 0:98226e0983af 244 devlog("Turn Echo %s failed\r\n", onoff?"ON":"OFF");
hkjung 0:98226e0983af 245 }
hkjung 0:98226e0983af 246 return ret;
hkjung 0:98226e0983af 247 }
hkjung 0:98226e0983af 248
vikshin 1:72811bd893df 249 int8_t getUsimStatus_AMM592(void)
hkjung 0:98226e0983af 250 {
hkjung 0:98226e0983af 251 int8_t ret = RET_NOK;
hkjung 0:98226e0983af 252
hkjung 0:98226e0983af 253 _parser->send("AT+CPIN?");
hkjung 0:98226e0983af 254 if(_parser->recv("+CPIN: READY") && _parser->recv("OK")) {
hkjung 0:98226e0983af 255 devlog("USIM Status: READY\r\n");
hkjung 0:98226e0983af 256 ret = RET_OK;
hkjung 0:98226e0983af 257 } else {
hkjung 0:98226e0983af 258 devlog("Retrieving USIM Status failed\r\n");
hkjung 0:98226e0983af 259 }
hkjung 0:98226e0983af 260 return ret;
hkjung 0:98226e0983af 261 }
hkjung 0:98226e0983af 262
vikshin 1:72811bd893df 263 int8_t getNetworkStatus_AMM592(void)
hkjung 0:98226e0983af 264 {
hkjung 0:98226e0983af 265 int8_t ret = RET_NOK;
vikshin 1:72811bd893df 266 bool cereg = false, nsi = false;
vikshin 1:72811bd893df 267 int n, stat;
vikshin 1:72811bd893df 268
vikshin 1:72811bd893df 269 if(_parser->send("AT+CEREG?") && _parser->recv("+CEREG: %d, %d", &n, &stat) && _parser->recv("OK")){
vikshin 1:72811bd893df 270 if ((n==0 || n==1) && stat==1){
vikshin 1:72811bd893df 271 cereg = true;
vikshin 1:72811bd893df 272 }
vikshin 1:72811bd893df 273 }
hkjung 0:98226e0983af 274
vikshin 1:72811bd893df 275 if(_parser->send("AT@NSI") && _parser->recv("@NSI:%d,\"IN SRV\"") && _parser->recv("OK")) {
hkjung 0:98226e0983af 276 devlog("Network Status: attached\r\n");
vikshin 1:72811bd893df 277 nsi = true;
vikshin 1:72811bd893df 278 } else if (_parser->send("AT@NSI") && _parser->recv("@NSI: \"LIMITED\"") && _parser->recv("OK")) {
hkjung 0:98226e0983af 279 devlog("Network Status: limited\r\n");
vikshin 1:72811bd893df 280 nsi = true;
hkjung 0:98226e0983af 281 } else {
hkjung 0:98226e0983af 282 devlog("Network Status: Error\r\n");
hkjung 0:98226e0983af 283 }
vikshin 1:72811bd893df 284
vikshin 1:72811bd893df 285 if (cereg && nsi){
vikshin 1:72811bd893df 286 ret = RET_OK;
vikshin 1:72811bd893df 287 }
hkjung 0:98226e0983af 288 return ret;
hkjung 0:98226e0983af 289 }
hkjung 0:98226e0983af 290
vikshin 1:72811bd893df 291 int8_t checknSetApn_AMM592(const char * apn) // Configure Parameters of a TCP/IP Context
hkjung 0:98226e0983af 292 {
vikshin 1:72811bd893df 293 bool cgdccont = false, cgatt = false;
vikshin 1:72811bd893df 294 int8_t ret = RET_NOK;
hkjung 0:98226e0983af 295
hkjung 0:98226e0983af 296 devlog("Checking APN...\r\n");
vikshin 1:72811bd893df 297 //APN setting
vikshin 1:72811bd893df 298 if (_parser->send("AT+CGDCONT=1,\"IPV4V6\",\"%s\"", apn) && _parser->recv("OK")){
vikshin 1:72811bd893df 299 cgdccont = true;
vikshin 1:72811bd893df 300 }
vikshin 1:72811bd893df 301 //Attach setting
vikshin 1:72811bd893df 302 if (_parser->send("AT+CGATT?") && _parser->recv("+CGATT: 1") &&_parser->recv("OK")){
vikshin 1:72811bd893df 303 cgatt = true;
hkjung 0:98226e0983af 304 }
hkjung 0:98226e0983af 305
vikshin 1:72811bd893df 306 if (cgdccont && cgatt){
hkjung 0:98226e0983af 307 ret = RET_OK;
vikshin 1:72811bd893df 308 }
hkjung 0:98226e0983af 309
vikshin 1:72811bd893df 310 devlog("APN Check Done\r\n");
vikshin 1:72811bd893df 311
hkjung 0:98226e0983af 312 return ret;
hkjung 0:98226e0983af 313 }
hkjung 0:98226e0983af 314
hkjung 0:98226e0983af 315 // ----------------------------------------------------------------
hkjung 0:98226e0983af 316 // Functions: Cat.M1 GPS
hkjung 0:98226e0983af 317 // ----------------------------------------------------------------
hkjung 0:98226e0983af 318
vikshin 1:72811bd893df 319 int8_t setGpsSesssion_AMM592(int session_type)
hkjung 0:98226e0983af 320 {
hkjung 0:98226e0983af 321 int8_t ret = RET_NOK;
vikshin 1:72811bd893df 322
hkjung 0:98226e0983af 323
vikshin 1:72811bd893df 324 if(_parser->send("AT@AMGST=%d", session_type) && _parser->recv("OK")) {
hkjung 0:98226e0983af 325 ret = RET_OK;
hkjung 0:98226e0983af 326 } else {
vikshin 1:72811bd893df 327 devlog("Set GPS session failed");
vikshin 1:72811bd893df 328 }
vikshin 1:72811bd893df 329 return ret;
vikshin 1:72811bd893df 330 }
vikshin 1:72811bd893df 331
vikshin 1:72811bd893df 332 int8_t setGpsOnOff_AMM592(bool onoff)
vikshin 1:72811bd893df 333 {
vikshin 1:72811bd893df 334 int8_t ret = RET_NOK;
vikshin 1:72811bd893df 335 if(onoff == ON){
vikshin 1:72811bd893df 336 if(_parser->send("AT@AMGSTART") && _parser->recv("OK")) {
vikshin 1:72811bd893df 337 ret = RET_OK;
vikshin 1:72811bd893df 338 } else {
vikshin 1:72811bd893df 339 devlog("Set AMGSTART failed\r\n");
vikshin 1:72811bd893df 340 }
vikshin 1:72811bd893df 341 } else {
vikshin 1:72811bd893df 342 if(_parser->send("AT@AMGSTOP") && _parser->recv("OK")) {
vikshin 1:72811bd893df 343 ret = RET_OK;
vikshin 1:72811bd893df 344 } else {
vikshin 1:72811bd893df 345 devlog("Set AMGSTOP failed\r\n");
vikshin 1:72811bd893df 346 }
hkjung 0:98226e0983af 347 }
hkjung 0:98226e0983af 348 return ret;
hkjung 0:98226e0983af 349 }
hkjung 0:98226e0983af 350
hkjung 0:98226e0983af 351
vikshin 1:72811bd893df 352 int8_t getGpsLocation_AMM592(gps_data *data)
hkjung 0:98226e0983af 353 {
hkjung 0:98226e0983af 354 int8_t ret = RET_NOK;
vikshin 1:72811bd893df 355 int state_code=0;
hkjung 0:98226e0983af 356
hkjung 0:98226e0983af 357 bool ok = false;
hkjung 0:98226e0983af 358 Timer t;
vikshin 1:72811bd893df 359 char _buf[100] = {0, };
vikshin 1:72811bd893df 360
hkjung 0:98226e0983af 361 // Structure init: GPS info
vikshin 1:72811bd893df 362 data->lat = data->lon=0;
vikshin 1:72811bd893df 363 memset(&data->lat, 0x00, 7);
hkjung 0:98226e0983af 364
hkjung 0:98226e0983af 365 // timer start
hkjung 0:98226e0983af 366 t.start();
hkjung 0:98226e0983af 367
vikshin 1:72811bd893df 368 while( !ok && (t.read_ms() < 65000 ) ) {
vikshin 1:72811bd893df 369 if (_parser->recv("@AMG:%d,", &state_code)){
vikshin 1:72811bd893df 370 if (state_code == 0) {
vikshin 1:72811bd893df 371 _parser->read(_buf, sizeof(_buf));
vikshin 1:72811bd893df 372 sscanf(_buf, "%f, %f", &data->lat, &data->lon);
vikshin 1:72811bd893df 373 ok = true;
vikshin 1:72811bd893df 374 }
vikshin 1:72811bd893df 375 else {
vikshin 1:72811bd893df 376 _parser->read(_buf, sizeof(_buf));
vikshin 1:72811bd893df 377 devlog("Error: %s", _buf);
vikshin 1:72811bd893df 378 }
hkjung 0:98226e0983af 379 }
hkjung 0:98226e0983af 380
hkjung 0:98226e0983af 381 if(ok == true) ret = RET_OK;
vikshin 1:72811bd893df 382 t.reset();
hkjung 0:98226e0983af 383 return ret;
hkjung 0:98226e0983af 384 }