Init project for GPS

Committer:
AustinKim
Date:
Wed Sep 18 04:23:32 2019 +0000
Revision:
3:3fed3b61771e
Parent:
2:6fc697f1ebbd
Update main.cpp

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AustinKim 0:6d4ac55b6b76 1 /* WIZnet IoT Shield Cat.M1 Sample code for Arm MBED
AustinKim 0:6d4ac55b6b76 2 * Copyright (c) 2019 WIZnet Co., Ltd.
AustinKim 0:6d4ac55b6b76 3 * SPDX-License-Identifier: Apache-2.0
AustinKim 0:6d4ac55b6b76 4 */
AustinKim 0:6d4ac55b6b76 5
AustinKim 0:6d4ac55b6b76 6 /*
AustinKim 0:6d4ac55b6b76 7 * Licensed under the Apache License, Version 2.0 (the "License");
AustinKim 0:6d4ac55b6b76 8 * you may not use this file except in compliance with the License.
AustinKim 0:6d4ac55b6b76 9 * You may obtain a copy of the License at
AustinKim 0:6d4ac55b6b76 10 *
AustinKim 0:6d4ac55b6b76 11 * http://www.apache.org/licenses/LICENSE-2.0
AustinKim 0:6d4ac55b6b76 12 *
AustinKim 0:6d4ac55b6b76 13 * Unless required by applicable law or agreed to in writing, software
AustinKim 0:6d4ac55b6b76 14 * distributed under the License is distributed on an "AS IS" BASIS,
AustinKim 0:6d4ac55b6b76 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
AustinKim 0:6d4ac55b6b76 16 *
AustinKim 0:6d4ac55b6b76 17 * See the License for the specific language governing permissions and
AustinKim 0:6d4ac55b6b76 18 * limitations under the License.
AustinKim 0:6d4ac55b6b76 19 *
AustinKim 0:6d4ac55b6b76 20 */
AustinKim 0:6d4ac55b6b76 21
AustinKim 0:6d4ac55b6b76 22 #include "mbed.h"
AustinKim 0:6d4ac55b6b76 23
AustinKim 0:6d4ac55b6b76 24 #include <string>
AustinKim 0:6d4ac55b6b76 25
AustinKim 0:6d4ac55b6b76 26 #define RET_OK 1
AustinKim 0:6d4ac55b6b76 27 #define RET_NOK -1
AustinKim 0:6d4ac55b6b76 28 #define DEBUG_ENABLE 1
AustinKim 0:6d4ac55b6b76 29 #define DEBUG_DISABLE 0
AustinKim 0:6d4ac55b6b76 30 #define ON 1
AustinKim 0:6d4ac55b6b76 31 #define OFF 0
AustinKim 0:6d4ac55b6b76 32
AustinKim 0:6d4ac55b6b76 33 #define MAX_BUF_SIZE 1024
AustinKim 0:6d4ac55b6b76 34
AustinKim 0:6d4ac55b6b76 35 #define WM01_APN_PROTOCOL_IPv4 1
AustinKim 0:6d4ac55b6b76 36 #define WM01_APN_PROTOCOL_IPv6 2
AustinKim 0:6d4ac55b6b76 37 #define WM01_DEFAULT_TIMEOUT 1000
AustinKim 0:6d4ac55b6b76 38 #define WM01_CONNECT_TIMEOUT 15000
AustinKim 0:6d4ac55b6b76 39 #define WM01_SEND_TIMEOUT 500
AustinKim 0:6d4ac55b6b76 40 #define WM01_RECV_TIMEOUT 500
AustinKim 0:6d4ac55b6b76 41
AustinKim 0:6d4ac55b6b76 42 #define WM01_APN_PROTOCOL WM01_APN_PROTOCOL_IPv6
AustinKim 0:6d4ac55b6b76 43 #define WM01_DEFAULT_BAUD_RATE 115200
AustinKim 0:6d4ac55b6b76 44 #define WM01_PARSER_DELIMITER "\r\n"
AustinKim 0:6d4ac55b6b76 45
AustinKim 0:6d4ac55b6b76 46 #define CATM1_APN_SKT "lte-internet.sktelecom.com"
AustinKim 0:6d4ac55b6b76 47
AustinKim 0:6d4ac55b6b76 48 #define CATM1_DEVICE_NAME_WM01 "WM01"
AustinKim 0:6d4ac55b6b76 49 #define DEVNAME CATM1_DEVICE_NAME_WM01
AustinKim 0:6d4ac55b6b76 50
AustinKim 0:6d4ac55b6b76 51 #define devlog(f_, ...) if(CATM1_DEVICE_DEBUG == DEBUG_ENABLE) { pc.printf("\r\n[%s] ", DEVNAME); pc.printf((f_), ##__VA_ARGS__); }
AustinKim 0:6d4ac55b6b76 52 #define myprintf(f_, ...) {pc.printf("\r\n[MAIN] "); pc.printf((f_), ##__VA_ARGS__);}
AustinKim 0:6d4ac55b6b76 53
AustinKim 0:6d4ac55b6b76 54 /* Pin configuraiton */
AustinKim 0:6d4ac55b6b76 55 // Cat.M1
AustinKim 0:6d4ac55b6b76 56 #define MBED_CONF_IOTSHIELD_CATM1_TX D8
AustinKim 0:6d4ac55b6b76 57 #define MBED_CONF_IOTSHIELD_CATM1_RX D2
AustinKim 0:6d4ac55b6b76 58 #define MBED_CONF_IOTSHIELD_CATM1_RESET D7
AustinKim 0:6d4ac55b6b76 59 #define MBED_CONF_IOTSHIELD_CATM1_PWRKEY D9
AustinKim 0:6d4ac55b6b76 60
AustinKim 0:6d4ac55b6b76 61 // Sensors
AustinKim 0:6d4ac55b6b76 62 #define MBED_CONF_IOTSHIELD_SENSOR_CDS A0
AustinKim 0:6d4ac55b6b76 63 #define MBED_CONF_IOTSHIELD_SENSOR_TEMP A1
AustinKim 0:6d4ac55b6b76 64
AustinKim 0:6d4ac55b6b76 65 /* Debug message settings */
AustinKim 0:6d4ac55b6b76 66 #define WM01_PARSER_DEBUG DEBUG_DISABLE
AustinKim 0:6d4ac55b6b76 67 #define CATM1_DEVICE_DEBUG DEBUG_ENABLE
AustinKim 0:6d4ac55b6b76 68
AustinKim 0:6d4ac55b6b76 69 typedef struct
AustinKim 0:6d4ac55b6b76 70 {
AustinKim 0:6d4ac55b6b76 71 int date; // date yyyymmdd
AustinKim 0:6d4ac55b6b76 72 int utc; // utc time hhmmss
AustinKim 0:6d4ac55b6b76 73 float lat; // latitude. (-)dd.ddddd
AustinKim 0:6d4ac55b6b76 74 float lon; // longitude. (-)dd.ddddd
AustinKim 0:6d4ac55b6b76 75 float spkm; // speed over ground (km/h) xxx.x
AustinKim 0:6d4ac55b6b76 76 float cog; // course over ground ddd.m
AustinKim 0:6d4ac55b6b76 77 char reli; // reliability 'A', 'V'
AustinKim 0:6d4ac55b6b76 78 int lte; // LTE status
AustinKim 0:6d4ac55b6b76 79 int emm; // EMM reject
AustinKim 0:6d4ac55b6b76 80 int esm; // ESM reject
AustinKim 0:6d4ac55b6b76 81 int ss; // signal strength
AustinKim 0:6d4ac55b6b76 82 int nsat; // number of satellites 0-12
AustinKim 0:6d4ac55b6b76 83 char satinfo1[8]; // satellites infomation ID-signal strength
AustinKim 0:6d4ac55b6b76 84 char satinfo2[8]; // satellites infomation ID-signal strength
AustinKim 0:6d4ac55b6b76 85 char satinfo3[8]; // satellites infomation ID-signal strength
AustinKim 0:6d4ac55b6b76 86 char satinfo4[8]; // satellites infomation ID-signal strength
AustinKim 0:6d4ac55b6b76 87 } gps_data;
AustinKim 0:6d4ac55b6b76 88
AustinKim 0:6d4ac55b6b76 89 // Functions: Print information
AustinKim 0:6d4ac55b6b76 90 void printInfo(void);
AustinKim 0:6d4ac55b6b76 91
AustinKim 0:6d4ac55b6b76 92 // Functions: Module Status
AustinKim 0:6d4ac55b6b76 93 void waitCatM1Ready(void);
AustinKim 0:6d4ac55b6b76 94 int8_t setEchoStatus_WM01(bool onoff);
AustinKim 0:6d4ac55b6b76 95 int8_t getUsimStatus_WM01(void);
AustinKim 0:6d4ac55b6b76 96 int8_t getNetworkStatus_WM01(void);
AustinKim 0:6d4ac55b6b76 97
AustinKim 0:6d4ac55b6b76 98 // Functions: GPS
AustinKim 0:6d4ac55b6b76 99 int8_t setGpsOnOff_WM01(bool onoff);
AustinKim 0:6d4ac55b6b76 100 int8_t getGpsInfo_WM01(gps_data *gps_info);
AustinKim 0:6d4ac55b6b76 101
AustinKim 2:6fc697f1ebbd 102 // Functions: String seperation
AustinKim 2:6fc697f1ebbd 103 char *strsep(char **stringp, const char * delim);
AustinKim 2:6fc697f1ebbd 104
AustinKim 0:6d4ac55b6b76 105 Serial pc(USBTX, USBRX); // USB debug
AustinKim 0:6d4ac55b6b76 106
AustinKim 0:6d4ac55b6b76 107 UARTSerial *_serial; // Cat.M1 module
AustinKim 0:6d4ac55b6b76 108 ATCmdParser *_parser;
AustinKim 0:6d4ac55b6b76 109
AustinKim 0:6d4ac55b6b76 110 DigitalOut _RESET_WM01(MBED_CONF_IOTSHIELD_CATM1_RESET);
AustinKim 0:6d4ac55b6b76 111 DigitalOut _PWRKEY_WM01(MBED_CONF_IOTSHIELD_CATM1_PWRKEY);
AustinKim 0:6d4ac55b6b76 112
AustinKim 0:6d4ac55b6b76 113 void serialPcInit(void)
AustinKim 0:6d4ac55b6b76 114 {
AustinKim 0:6d4ac55b6b76 115 pc.baud(115200);
AustinKim 0:6d4ac55b6b76 116 pc.format(8, Serial::None, 1);
AustinKim 0:6d4ac55b6b76 117 }
AustinKim 0:6d4ac55b6b76 118
AustinKim 0:6d4ac55b6b76 119 void serialDeviceInit(PinName tx, PinName rx, int baudrate)
AustinKim 0:6d4ac55b6b76 120 {
AustinKim 0:6d4ac55b6b76 121 _serial = new UARTSerial(tx, rx, baudrate);
AustinKim 0:6d4ac55b6b76 122 }
AustinKim 0:6d4ac55b6b76 123
AustinKim 0:6d4ac55b6b76 124 void serialAtParserInit(const char *delimiter, bool debug_en)
AustinKim 0:6d4ac55b6b76 125 {
AustinKim 0:6d4ac55b6b76 126 _parser = new ATCmdParser(_serial);
AustinKim 0:6d4ac55b6b76 127 _parser->debug_on(debug_en);
AustinKim 0:6d4ac55b6b76 128 _parser->set_delimiter(delimiter);
AustinKim 0:6d4ac55b6b76 129 _parser->set_timeout(WM01_DEFAULT_TIMEOUT);
AustinKim 0:6d4ac55b6b76 130 }
AustinKim 0:6d4ac55b6b76 131
AustinKim 0:6d4ac55b6b76 132 void catm1DeviceInit(void)
AustinKim 0:6d4ac55b6b76 133 {
AustinKim 0:6d4ac55b6b76 134 serialDeviceInit( MBED_CONF_IOTSHIELD_CATM1_TX,
AustinKim 0:6d4ac55b6b76 135 MBED_CONF_IOTSHIELD_CATM1_RX,
AustinKim 0:6d4ac55b6b76 136 WM01_DEFAULT_BAUD_RATE);
AustinKim 0:6d4ac55b6b76 137
AustinKim 0:6d4ac55b6b76 138 serialAtParserInit( WM01_PARSER_DELIMITER,
AustinKim 0:6d4ac55b6b76 139 WM01_PARSER_DEBUG);
AustinKim 0:6d4ac55b6b76 140 }
AustinKim 0:6d4ac55b6b76 141
AustinKim 0:6d4ac55b6b76 142 void catm1DeviceReset_WM01(void)
AustinKim 0:6d4ac55b6b76 143 {
AustinKim 0:6d4ac55b6b76 144 _RESET_WM01 = 1;
AustinKim 0:6d4ac55b6b76 145 _PWRKEY_WM01 = 1;
AustinKim 0:6d4ac55b6b76 146 wait_ms(300);
AustinKim 0:6d4ac55b6b76 147
AustinKim 0:6d4ac55b6b76 148 _RESET_WM01 = 0;
AustinKim 0:6d4ac55b6b76 149 _PWRKEY_WM01 = 0;
AustinKim 0:6d4ac55b6b76 150 wait_ms(400);
AustinKim 0:6d4ac55b6b76 151
AustinKim 0:6d4ac55b6b76 152 _RESET_WM01 = 1;
AustinKim 0:6d4ac55b6b76 153 wait_ms(1000);
AustinKim 0:6d4ac55b6b76 154 }
AustinKim 0:6d4ac55b6b76 155
AustinKim 0:6d4ac55b6b76 156 // ----------------------------------------------------------------
AustinKim 0:6d4ac55b6b76 157 // Main routine
AustinKim 0:6d4ac55b6b76 158 // ----------------------------------------------------------------
AustinKim 0:6d4ac55b6b76 159
AustinKim 0:6d4ac55b6b76 160 int main()
AustinKim 0:6d4ac55b6b76 161 {
AustinKim 0:6d4ac55b6b76 162 gps_data gps_info;
AustinKim 0:6d4ac55b6b76 163
AustinKim 0:6d4ac55b6b76 164 serialPcInit();
AustinKim 0:6d4ac55b6b76 165 catm1DeviceInit();
AustinKim 0:6d4ac55b6b76 166
AustinKim 0:6d4ac55b6b76 167 myprintf("Waiting for Cat.M1 Module Ready...\r\n");
AustinKim 0:6d4ac55b6b76 168
AustinKim 0:6d4ac55b6b76 169 catm1DeviceReset_WM01();
AustinKim 0:6d4ac55b6b76 170
AustinKim 0:6d4ac55b6b76 171 waitCatM1Ready();
AustinKim 0:6d4ac55b6b76 172
AustinKim 0:6d4ac55b6b76 173 wait_ms(5000);
AustinKim 0:6d4ac55b6b76 174
AustinKim 0:6d4ac55b6b76 175 myprintf("System Init Complete\r\n");
AustinKim 0:6d4ac55b6b76 176
AustinKim 0:6d4ac55b6b76 177 printInfo();
AustinKim 0:6d4ac55b6b76 178
AustinKim 0:6d4ac55b6b76 179 setEchoStatus_WM01(OFF);
AustinKim 0:6d4ac55b6b76 180
AustinKim 0:6d4ac55b6b76 181 getUsimStatus_WM01();
AustinKim 0:6d4ac55b6b76 182
AustinKim 0:6d4ac55b6b76 183 getNetworkStatus_WM01();
AustinKim 0:6d4ac55b6b76 184
AustinKim 0:6d4ac55b6b76 185 if(setGpsOnOff_WM01(ON))
AustinKim 0:6d4ac55b6b76 186 {
AustinKim 0:6d4ac55b6b76 187 myprintf("GPS On : success\r\n");
AustinKim 0:6d4ac55b6b76 188
AustinKim 0:6d4ac55b6b76 189 while(1)
AustinKim 0:6d4ac55b6b76 190 {
AustinKim 0:6d4ac55b6b76 191 if(getGpsInfo_WM01(&gps_info) == RET_OK)
AustinKim 0:6d4ac55b6b76 192 {
AustinKim 0:6d4ac55b6b76 193 myprintf("gps_info - reli : %c", gps_info.reli); // reliability 'A', 'V'
AustinKim 0:6d4ac55b6b76 194 myprintf("gps_info - data : %d", gps_info.date); // date yyyymmdd
AustinKim 0:6d4ac55b6b76 195 myprintf("gps_info - time : %d", gps_info.utc); // utc time hhmmss
AustinKim 0:6d4ac55b6b76 196 myprintf("gps_info - lat : %f", gps_info.lat / 100000); // latitude. (-)dd.ddddd
AustinKim 0:6d4ac55b6b76 197 myprintf("gps_info - lon : %f", gps_info.lon / 100000); // longitude. (-)dd.ddddd
AustinKim 0:6d4ac55b6b76 198 myprintf("gps_info - spkm : %.1f", gps_info.spkm); // speed over ground (km/h) xxx.x
AustinKim 0:6d4ac55b6b76 199 myprintf("gps_info - cog : %.1f", gps_info.cog); // course over ground ddd.m
AustinKim 0:6d4ac55b6b76 200 myprintf("gps_info - lte : %d", gps_info.lte); // LTE status
AustinKim 0:6d4ac55b6b76 201 myprintf("gps_info - emm : %d", gps_info.emm); // EMM reject
AustinKim 0:6d4ac55b6b76 202 myprintf("gps_info - esm : %d", gps_info.esm); // ESM reject
AustinKim 0:6d4ac55b6b76 203 myprintf("gps_info - ss : %d", gps_info.ss); // signal strength
AustinKim 0:6d4ac55b6b76 204 myprintf("gps_info - nsat : %d", gps_info.nsat); // number of satellites 0-12
AustinKim 0:6d4ac55b6b76 205 myprintf("gps_info - satinfo1 : %s", gps_info.satinfo1); // satellites infomation ID-signal strength
AustinKim 0:6d4ac55b6b76 206 myprintf("gps_info - satinfo2 : %s", gps_info.satinfo2); // satellites infomation ID-signal strength
AustinKim 0:6d4ac55b6b76 207 myprintf("gps_info - satinfo3 : %s", gps_info.satinfo3); // satellites infomation ID-signal strength
AustinKim 2:6fc697f1ebbd 208 myprintf("gps_info - satinfo4 : %s\r\n", gps_info.satinfo4); // satellites infomation ID-signal strength
AustinKim 0:6d4ac55b6b76 209 }
AustinKim 0:6d4ac55b6b76 210 }
AustinKim 0:6d4ac55b6b76 211 }
AustinKim 0:6d4ac55b6b76 212 else
AustinKim 0:6d4ac55b6b76 213 {
AustinKim 0:6d4ac55b6b76 214 myprintf("GPS On : failed\r\n");
AustinKim 0:6d4ac55b6b76 215 }
AustinKim 0:6d4ac55b6b76 216 }
AustinKim 0:6d4ac55b6b76 217
AustinKim 0:6d4ac55b6b76 218 // ----------------------------------------------------------------
AustinKim 0:6d4ac55b6b76 219 // Functions: Print information
AustinKim 0:6d4ac55b6b76 220 // ----------------------------------------------------------------
AustinKim 0:6d4ac55b6b76 221
AustinKim 0:6d4ac55b6b76 222 void printInfo(void)
AustinKim 0:6d4ac55b6b76 223 {
AustinKim 0:6d4ac55b6b76 224 myprintf("WIZnet IoT Shield for Arm MBED");
AustinKim 0:6d4ac55b6b76 225 myprintf("LTE Cat.M1 Version");
AustinKim 0:6d4ac55b6b76 226 myprintf("=================================================");
AustinKim 0:6d4ac55b6b76 227 myprintf(">> Target Board: WIoT-WM01 (Woorinet WM-N400MSE)");
AustinKim 0:6d4ac55b6b76 228 myprintf(">> Sample Code: GPS Test");
AustinKim 0:6d4ac55b6b76 229 myprintf("=================================================\r\n");
AustinKim 0:6d4ac55b6b76 230 }
AustinKim 0:6d4ac55b6b76 231
AustinKim 0:6d4ac55b6b76 232 // ----------------------------------------------------------------
AustinKim 0:6d4ac55b6b76 233 // Functions: Cat.M1 Status
AustinKim 0:6d4ac55b6b76 234 // ----------------------------------------------------------------
AustinKim 0:6d4ac55b6b76 235
AustinKim 0:6d4ac55b6b76 236 void waitCatM1Ready(void)
AustinKim 0:6d4ac55b6b76 237 {
AustinKim 0:6d4ac55b6b76 238 while(1)
AustinKim 0:6d4ac55b6b76 239 {
AustinKim 0:6d4ac55b6b76 240 if(_parser->send("AT") && _parser->recv("OK"))
AustinKim 0:6d4ac55b6b76 241 {
AustinKim 0:6d4ac55b6b76 242 myprintf("WM01 is Available\r\n");
AustinKim 0:6d4ac55b6b76 243
AustinKim 0:6d4ac55b6b76 244 return;
AustinKim 0:6d4ac55b6b76 245 }
AustinKim 0:6d4ac55b6b76 246 }
AustinKim 0:6d4ac55b6b76 247 }
AustinKim 0:6d4ac55b6b76 248
AustinKim 0:6d4ac55b6b76 249 int8_t setEchoStatus_WM01(bool onoff)
AustinKim 0:6d4ac55b6b76 250 {
AustinKim 0:6d4ac55b6b76 251 int8_t ret = RET_NOK;
AustinKim 0:6d4ac55b6b76 252 char _buf[10];
AustinKim 0:6d4ac55b6b76 253
AustinKim 0:6d4ac55b6b76 254 sprintf((char *)_buf, "ATE%d", onoff);
AustinKim 0:6d4ac55b6b76 255
AustinKim 0:6d4ac55b6b76 256 if(_parser->send(_buf) && _parser->recv("OK"))
AustinKim 0:6d4ac55b6b76 257 {
AustinKim 0:6d4ac55b6b76 258 devlog("Turn Echo %s success\r\n", onoff ? "ON" : "OFF");
AustinKim 0:6d4ac55b6b76 259
AustinKim 0:6d4ac55b6b76 260 ret = RET_OK;
AustinKim 0:6d4ac55b6b76 261 }
AustinKim 0:6d4ac55b6b76 262 else
AustinKim 0:6d4ac55b6b76 263 {
AustinKim 0:6d4ac55b6b76 264 devlog("Turn Echo %s failed\r\n", onoff ? "ON" : "OFF");
AustinKim 0:6d4ac55b6b76 265 }
AustinKim 0:6d4ac55b6b76 266
AustinKim 0:6d4ac55b6b76 267 return ret;
AustinKim 0:6d4ac55b6b76 268 }
AustinKim 0:6d4ac55b6b76 269
AustinKim 0:6d4ac55b6b76 270 int8_t getUsimStatus_WM01(void)
AustinKim 0:6d4ac55b6b76 271 {
AustinKim 0:6d4ac55b6b76 272 int8_t ret = RET_NOK;
AustinKim 0:6d4ac55b6b76 273
AustinKim 0:6d4ac55b6b76 274 if(_parser->send("AT$$STAT?") && _parser->recv("$$STAT:READY") && _parser->recv("OK"))
AustinKim 0:6d4ac55b6b76 275 {
AustinKim 0:6d4ac55b6b76 276 devlog("USIM Status : READY\r\n");
AustinKim 0:6d4ac55b6b76 277
AustinKim 0:6d4ac55b6b76 278 ret = RET_OK;
AustinKim 0:6d4ac55b6b76 279 }
AustinKim 0:6d4ac55b6b76 280 else
AustinKim 0:6d4ac55b6b76 281 {
AustinKim 0:6d4ac55b6b76 282 devlog("Retrieving USIM Status failed\r\n");
AustinKim 0:6d4ac55b6b76 283 }
AustinKim 0:6d4ac55b6b76 284
AustinKim 0:6d4ac55b6b76 285 return ret;
AustinKim 0:6d4ac55b6b76 286 }
AustinKim 0:6d4ac55b6b76 287
AustinKim 0:6d4ac55b6b76 288 int8_t getNetworkStatus_WM01(void)
AustinKim 0:6d4ac55b6b76 289 {
AustinKim 0:6d4ac55b6b76 290 int8_t ret = RET_NOK;
AustinKim 0:6d4ac55b6b76 291 int val, stat;
AustinKim 0:6d4ac55b6b76 292
AustinKim 0:6d4ac55b6b76 293 if(_parser->send("AT+CEREG?") && _parser->recv("+CEREG: %d,%d", &val, &stat) && _parser->recv("OK"))
AustinKim 0:6d4ac55b6b76 294 {
AustinKim 0:6d4ac55b6b76 295 if((val == 0) && (stat == 1))
AustinKim 0:6d4ac55b6b76 296 {
AustinKim 0:6d4ac55b6b76 297 devlog("Network Status : attached\r\n");
AustinKim 0:6d4ac55b6b76 298
AustinKim 0:6d4ac55b6b76 299 ret = RET_OK;
AustinKim 0:6d4ac55b6b76 300 }
AustinKim 0:6d4ac55b6b76 301 else
AustinKim 0:6d4ac55b6b76 302 {
AustinKim 0:6d4ac55b6b76 303 devlog("Network Status : %d, %d\r\n", val, stat);
AustinKim 0:6d4ac55b6b76 304 }
AustinKim 0:6d4ac55b6b76 305 }
AustinKim 0:6d4ac55b6b76 306 else
AustinKim 0:6d4ac55b6b76 307 {
AustinKim 0:6d4ac55b6b76 308 devlog("Network Status : Error\r\n");
AustinKim 0:6d4ac55b6b76 309 }
AustinKim 0:6d4ac55b6b76 310
AustinKim 0:6d4ac55b6b76 311 return ret;
AustinKim 0:6d4ac55b6b76 312 }
AustinKim 0:6d4ac55b6b76 313
AustinKim 0:6d4ac55b6b76 314 // ----------------------------------------------------------------
AustinKim 0:6d4ac55b6b76 315 // Functions: Cat.M1 GPS
AustinKim 0:6d4ac55b6b76 316 // ----------------------------------------------------------------
AustinKim 0:6d4ac55b6b76 317
AustinKim 0:6d4ac55b6b76 318 int8_t setGpsOnOff_WM01(bool onoff)
AustinKim 0:6d4ac55b6b76 319 {
AustinKim 0:6d4ac55b6b76 320 int8_t ret = RET_NOK;
AustinKim 0:6d4ac55b6b76 321
AustinKim 0:6d4ac55b6b76 322 if(onoff == ON)
AustinKim 0:6d4ac55b6b76 323 {
AustinKim 0:6d4ac55b6b76 324 if(_parser->send("AT$$GPS") && _parser->recv("OK"))
AustinKim 0:6d4ac55b6b76 325 {
AustinKim 0:6d4ac55b6b76 326 devlog("GPS Rx start : success\r\n");
AustinKim 0:6d4ac55b6b76 327
AustinKim 0:6d4ac55b6b76 328 ret = RET_OK;
AustinKim 0:6d4ac55b6b76 329 }
AustinKim 0:6d4ac55b6b76 330 else
AustinKim 0:6d4ac55b6b76 331 {
AustinKim 0:6d4ac55b6b76 332 devlog("GPS Rx start : failed\r\n");
AustinKim 0:6d4ac55b6b76 333 }
AustinKim 0:6d4ac55b6b76 334 }
AustinKim 0:6d4ac55b6b76 335 else if(onoff == OFF)
AustinKim 0:6d4ac55b6b76 336 {
AustinKim 0:6d4ac55b6b76 337 if(_parser->send("AT$$GPSSTOP") && _parser->recv("OK"))
AustinKim 0:6d4ac55b6b76 338 {
AustinKim 0:6d4ac55b6b76 339 devlog("GPS Rx stop : success\r\n");
AustinKim 0:6d4ac55b6b76 340
AustinKim 0:6d4ac55b6b76 341 ret = RET_OK;
AustinKim 0:6d4ac55b6b76 342 }
AustinKim 0:6d4ac55b6b76 343 else
AustinKim 0:6d4ac55b6b76 344 {
AustinKim 0:6d4ac55b6b76 345 devlog("GPS Rx stop : failed\r\n");
AustinKim 0:6d4ac55b6b76 346 }
AustinKim 0:6d4ac55b6b76 347 }
AustinKim 0:6d4ac55b6b76 348
AustinKim 0:6d4ac55b6b76 349 return ret;
AustinKim 0:6d4ac55b6b76 350 }
AustinKim 0:6d4ac55b6b76 351
AustinKim 0:6d4ac55b6b76 352 int8_t getGpsInfo_WM01(gps_data *gps_info)
AustinKim 0:6d4ac55b6b76 353 {
AustinKim 0:6d4ac55b6b76 354 int8_t ret = RET_NOK;
AustinKim 2:6fc697f1ebbd 355 //char _buf[] = "20190910,111720,3737831,12711294,1,175,A,2,255,255,-31,7,1-32,255-255,11-100,17-22";
AustinKim 0:6d4ac55b6b76 356 char _buf[100] = {0, };
AustinKim 2:6fc697f1ebbd 357 char *_tmp[20] = {0, };
AustinKim 2:6fc697f1ebbd 358 char *gp;
AustinKim 2:6fc697f1ebbd 359 char *sp;
AustinKim 2:6fc697f1ebbd 360 int i = 0;
AustinKim 0:6d4ac55b6b76 361
AustinKim 0:6d4ac55b6b76 362 // structure init : GPS info
AustinKim 0:6d4ac55b6b76 363 gps_info->date = gps_info->utc = gps_info->lte = gps_info->emm = gps_info->esm = gps_info->ss = gps_info->nsat = 0;
AustinKim 0:6d4ac55b6b76 364 gps_info->lat = gps_info->lon = gps_info->spkm = gps_info->cog = 0.0;
AustinKim 0:6d4ac55b6b76 365 gps_info->reli = 'V';
AustinKim 0:6d4ac55b6b76 366 memset(gps_info->satinfo1, 0x00, sizeof(gps_info->satinfo1));
AustinKim 0:6d4ac55b6b76 367 memset(gps_info->satinfo2, 0x00, sizeof(gps_info->satinfo2));
AustinKim 0:6d4ac55b6b76 368 memset(gps_info->satinfo3, 0x00, sizeof(gps_info->satinfo3));
AustinKim 0:6d4ac55b6b76 369 memset(gps_info->satinfo4, 0x00, sizeof(gps_info->satinfo4));
AustinKim 0:6d4ac55b6b76 370
AustinKim 0:6d4ac55b6b76 371 _parser->flush();
AustinKim 0:6d4ac55b6b76 372
AustinKim 0:6d4ac55b6b76 373 if(_parser->recv("$$GPS,%s\n", _buf))
AustinKim 0:6d4ac55b6b76 374 {
AustinKim 2:6fc697f1ebbd 375 sp = _buf;
AustinKim 2:6fc697f1ebbd 376
AustinKim 2:6fc697f1ebbd 377 while((gp = strsep(&sp, ",")) != NULL)
AustinKim 2:6fc697f1ebbd 378 {
AustinKim 2:6fc697f1ebbd 379 _tmp[i] = gp;
AustinKim 2:6fc697f1ebbd 380
AustinKim 2:6fc697f1ebbd 381 i++;
AustinKim 2:6fc697f1ebbd 382 }
AustinKim 0:6d4ac55b6b76 383
AustinKim 2:6fc697f1ebbd 384 // convert data and store
AustinKim 2:6fc697f1ebbd 385 gps_info->date = atoi(_tmp[0]);
AustinKim 2:6fc697f1ebbd 386 gps_info->utc = atoi(_tmp[1]);
AustinKim 2:6fc697f1ebbd 387 gps_info->lat = atof(_tmp[2]);
AustinKim 2:6fc697f1ebbd 388 gps_info->lon = atof(_tmp[3]);
AustinKim 2:6fc697f1ebbd 389 gps_info->spkm = atof(_tmp[4]);
AustinKim 2:6fc697f1ebbd 390 gps_info->cog = atof(_tmp[5]);
AustinKim 2:6fc697f1ebbd 391 gps_info->reli = *_tmp[6];
AustinKim 2:6fc697f1ebbd 392 gps_info->lte = atoi(_tmp[7]);
AustinKim 2:6fc697f1ebbd 393 gps_info->emm = atoi(_tmp[8]);
AustinKim 2:6fc697f1ebbd 394 gps_info->esm = atoi(_tmp[9]);
AustinKim 2:6fc697f1ebbd 395 gps_info->ss = atoi(_tmp[10]);
AustinKim 2:6fc697f1ebbd 396 gps_info->nsat = atoi(_tmp[11]);
AustinKim 2:6fc697f1ebbd 397 memcpy(gps_info->satinfo1, (char *)_tmp[12], strlen(_tmp[12]));
AustinKim 2:6fc697f1ebbd 398 memcpy(gps_info->satinfo2, (char *)_tmp[13], strlen(_tmp[13]));
AustinKim 2:6fc697f1ebbd 399 memcpy(gps_info->satinfo3, (char *)_tmp[14], strlen(_tmp[14]));
AustinKim 2:6fc697f1ebbd 400 memcpy(gps_info->satinfo4, (char *)_tmp[15], strlen(_tmp[15]));
AustinKim 0:6d4ac55b6b76 401
AustinKim 0:6d4ac55b6b76 402 ret = RET_OK;
AustinKim 0:6d4ac55b6b76 403 }
AustinKim 0:6d4ac55b6b76 404
AustinKim 0:6d4ac55b6b76 405 return ret;
AustinKim 2:6fc697f1ebbd 406 }
AustinKim 2:6fc697f1ebbd 407
AustinKim 2:6fc697f1ebbd 408 // ----------------------------------------------------------------
AustinKim 2:6fc697f1ebbd 409 // Functions: String seperation
AustinKim 2:6fc697f1ebbd 410 // ----------------------------------------------------------------
AustinKim 2:6fc697f1ebbd 411
AustinKim 2:6fc697f1ebbd 412 char *strsep(char **stringp, const char * delim)
AustinKim 2:6fc697f1ebbd 413 {
AustinKim 2:6fc697f1ebbd 414 char *ptr = *stringp;
AustinKim 2:6fc697f1ebbd 415
AustinKim 2:6fc697f1ebbd 416 if (ptr == NULL)
AustinKim 2:6fc697f1ebbd 417 {
AustinKim 2:6fc697f1ebbd 418 return NULL;
AustinKim 2:6fc697f1ebbd 419 }
AustinKim 2:6fc697f1ebbd 420
AustinKim 2:6fc697f1ebbd 421 while (**stringp)
AustinKim 2:6fc697f1ebbd 422 {
AustinKim 2:6fc697f1ebbd 423 if (strchr(delim, **stringp) != NULL)
AustinKim 2:6fc697f1ebbd 424 {
AustinKim 2:6fc697f1ebbd 425 **stringp = 0x00;
AustinKim 2:6fc697f1ebbd 426 (*stringp)++;
AustinKim 2:6fc697f1ebbd 427
AustinKim 2:6fc697f1ebbd 428 return ptr;
AustinKim 2:6fc697f1ebbd 429 }
AustinKim 2:6fc697f1ebbd 430 (*stringp)++;
AustinKim 2:6fc697f1ebbd 431 }
AustinKim 2:6fc697f1ebbd 432 *stringp = NULL;
AustinKim 2:6fc697f1ebbd 433
AustinKim 2:6fc697f1ebbd 434 return ptr;
AustinKim 0:6d4ac55b6b76 435 }