SKT Cat.M1(BG96) ThingPlug Example

Committer:
jehoon
Date:
Wed Mar 27 07:28:00 2019 +0000
Revision:
4:d6f14b70d8aa
Parent:
3:98c9694fec26
SKT Cat.M1 BG96 ThingPlug Example

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hkjung 0:5cd6077e0a8e 1 /* WIZnet IoT Shield Cat.M1 Sample code for Arm MBED
hkjung 0:5cd6077e0a8e 2 * Copyright (c) 2019 WIZnet Co., Ltd.
hkjung 0:5cd6077e0a8e 3 * SPDX-License-Identifier: Apache-2.0
hkjung 0:5cd6077e0a8e 4 */
jehoon 4:d6f14b70d8aa 5
jehoon 4:d6f14b70d8aa 6 /*
jehoon 4:d6f14b70d8aa 7 * Licensed under the Apache License, Version 2.0 (the "License");
jehoon 4:d6f14b70d8aa 8 * you may not use this file except in compliance with the License.
jehoon 4:d6f14b70d8aa 9 * You may obtain a copy of the License at
jehoon 4:d6f14b70d8aa 10 *
jehoon 4:d6f14b70d8aa 11 * http://www.apache.org/licenses/LICENSE-2.0
jehoon 4:d6f14b70d8aa 12 *
jehoon 4:d6f14b70d8aa 13 * Unless required by applicable law or agreed to in writing, software
jehoon 4:d6f14b70d8aa 14 * distributed under the License is distributed on an "AS IS" BASIS,
jehoon 4:d6f14b70d8aa 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
jehoon 4:d6f14b70d8aa 16 *
jehoon 4:d6f14b70d8aa 17 * See the License for the specific language governing permissions and
jehoon 4:d6f14b70d8aa 18 * limitations under the License.
jehoon 4:d6f14b70d8aa 19 *
jehoon 4:d6f14b70d8aa 20 */
hkjung 0:5cd6077e0a8e 21
hkjung 0:5cd6077e0a8e 22
hkjung 0:5cd6077e0a8e 23 #include <string>
hkjung 0:5cd6077e0a8e 24 #include "mbed.h"
hkjung 0:5cd6077e0a8e 25
hkjung 0:5cd6077e0a8e 26 #define RET_OK 1
hkjung 0:5cd6077e0a8e 27 #define RET_NOK -1
hkjung 0:5cd6077e0a8e 28 #define DEBUG_ENABLE 1
hkjung 0:5cd6077e0a8e 29 #define DEBUG_DISABLE 0
hkjung 0:5cd6077e0a8e 30 #define ON 1
hkjung 0:5cd6077e0a8e 31 #define OFF 0
hkjung 0:5cd6077e0a8e 32
hkjung 0:5cd6077e0a8e 33 #define MAX_BUF_SIZE 1024
hkjung 0:5cd6077e0a8e 34
hkjung 0:5cd6077e0a8e 35 #define BG96_APN_PROTOCOL_IPv4 1
hkjung 0:5cd6077e0a8e 36 #define BG96_APN_PROTOCOL_IPv6 2
hkjung 0:5cd6077e0a8e 37 #define BG96_DEFAULT_TIMEOUT 1000
hkjung 0:5cd6077e0a8e 38 #define BG96_CONNECT_TIMEOUT 15000
hkjung 0:5cd6077e0a8e 39 #define BG96_SEND_TIMEOUT 500
hkjung 0:5cd6077e0a8e 40 #define BG96_RECV_TIMEOUT 500
hkjung 0:5cd6077e0a8e 41
hkjung 0:5cd6077e0a8e 42 #define BG96_APN_PROTOCOL BG96_APN_PROTOCOL_IPv6
hkjung 0:5cd6077e0a8e 43 #define BG96_DEFAULT_BAUD_RATE 115200
hkjung 0:5cd6077e0a8e 44 #define BG96_PARSER_DELIMITER "\r\n"
hkjung 0:5cd6077e0a8e 45
hkjung 0:5cd6077e0a8e 46 #define CATM1_APN_SKT "lte-internet.sktelecom.com"
hkjung 0:5cd6077e0a8e 47
hkjung 0:5cd6077e0a8e 48 #define CATM1_DEVICE_NAME_BG96 "BG96"
hkjung 0:5cd6077e0a8e 49 #define DEVNAME CATM1_DEVICE_NAME_BG96
hkjung 0:5cd6077e0a8e 50
hkjung 0:5cd6077e0a8e 51 #define devlog(f_, ...) if(CATM1_DEVICE_DEBUG == DEBUG_ENABLE) { pc.printf("\r\n[%s] ", DEVNAME); pc.printf((f_), ##__VA_ARGS__); }
hkjung 0:5cd6077e0a8e 52 #define myprintf(f_, ...) {pc.printf("\r\n[MAIN] "); pc.printf((f_), ##__VA_ARGS__);}
hkjung 0:5cd6077e0a8e 53
hkjung 0:5cd6077e0a8e 54 /* Pin configuraiton */
hkjung 0:5cd6077e0a8e 55 // Cat.M1
hkjung 0:5cd6077e0a8e 56 #define MBED_CONF_IOTSHIELD_CATM1_TX D8
hkjung 0:5cd6077e0a8e 57 #define MBED_CONF_IOTSHIELD_CATM1_RX D2
hkjung 1:0d7ba45f12b1 58 #define MBED_CONF_IOTSHIELD_CATM1_RESET D7
hkjung 0:5cd6077e0a8e 59 #define MBED_CONF_IOTSHIELD_CATM1_PWRKEY D9
hkjung 1:0d7ba45f12b1 60
hkjung 0:5cd6077e0a8e 61 // Sensors
hkjung 0:5cd6077e0a8e 62 #define MBED_CONF_IOTSHIELD_SENSOR_CDS A0
hkjung 0:5cd6077e0a8e 63 #define MBED_CONF_IOTSHIELD_SENSOR_TEMP A1
hkjung 0:5cd6077e0a8e 64
hkjung 0:5cd6077e0a8e 65 /* Debug message settings */
hkjung 3:98c9694fec26 66 #define BG96_PARSER_DEBUG DEBUG_DISABLE
jehoon 4:d6f14b70d8aa 67 #define CATM1_DEVICE_DEBUG DEBUG_ENABLE
jehoon 4:d6f14b70d8aa 68
jehoon 4:d6f14b70d8aa 69 /* THINGPLUG */
jehoon 4:d6f14b70d8aa 70 #define THINGPLUG_PROTOCOL "MQTTS"
jehoon 4:d6f14b70d8aa 71 #define THINGPLUG_HOST "test.sktiot.com"
jehoon 4:d6f14b70d8aa 72 #define THINGPLUG_PORT 8883
jehoon 4:d6f14b70d8aa 73 #define THINGPLUG_KEEPALIVE 300
jehoon 4:d6f14b70d8aa 74 #define THINGPLUG_CLEANSESSION 1
jehoon 4:d6f14b70d8aa 75
jehoon 4:d6f14b70d8aa 76 #define THINGPLUG_DATA_FORMAT_JSON 0
jehoon 4:d6f14b70d8aa 77 #define THINGPLUG_DATA_TYPE_TELEMETRY "telemetry"
jehoon 4:d6f14b70d8aa 78 #define THINGPLUG_DATA_TYPE_ATTRIBUTE "attribute"
hkjung 0:5cd6077e0a8e 79
jehoon 4:d6f14b70d8aa 80 #define THINGPLUG_CMD_RES_OK 0
jehoon 4:d6f14b70d8aa 81 #define THINGPLUG_CMD_RES_NOK 1
jehoon 4:d6f14b70d8aa 82 #define ESPCAPE_SEQ 0x1A
hkjung 1:0d7ba45f12b1 83
jehoon 4:d6f14b70d8aa 84 /* THINGPLUG PRIVATE*/
jehoon 4:d6f14b70d8aa 85 #define THINGPLUG_SVC_NAME "svc01"
jehoon 4:d6f14b70d8aa 86 #define THINGPLUG_DEV_ID "dev02"
jehoon 4:d6f14b70d8aa 87 #define THINGPLUG_DEV_TOKEN "a0149f60b*********"
jehoon 4:d6f14b70d8aa 88
jehoon 4:d6f14b70d8aa 89 #define THINGPLUG_TELEMETRY1 "temperature"
jehoon 4:d6f14b70d8aa 90 #define THINGPLUG_TELEMETRY2 "humidity"
jehoon 4:d6f14b70d8aa 91 #define THINGPLUG_ATTRIBUTE "LED"
hkjung 1:0d7ba45f12b1 92
hkjung 1:0d7ba45f12b1 93
hkjung 0:5cd6077e0a8e 94 // Functions: Module Status
hkjung 0:5cd6077e0a8e 95 void waitCatM1Ready(void);
hkjung 0:5cd6077e0a8e 96 int8_t setEchoStatus_BG96(bool onoff);
hkjung 0:5cd6077e0a8e 97 int8_t getUsimStatus_BG96(void);
hkjung 0:5cd6077e0a8e 98 int8_t getNetworkStatus_BG96(void);
hkjung 0:5cd6077e0a8e 99 int8_t checknSetApn_BG96(const char * apn);
hkjung 0:5cd6077e0a8e 100 int8_t getFirmwareVersion_BG96(char * version);
hkjung 0:5cd6077e0a8e 101
jehoon 4:d6f14b70d8aa 102 // Functions: ThingPlug send & recv
jehoon 4:d6f14b70d8aa 103 int8_t connectThingPlug_BG96(char* svc_id, char* dev_id, char* dev_token);
jehoon 4:d6f14b70d8aa 104 int8_t sendThingPlugData_Json_BG96(char* type, char * data, int len);
jehoon 4:d6f14b70d8aa 105 int8_t recvThingPlugCmd_BG96(char* cmd_type, unsigned int* rpc_id, char* msg);
jehoon 4:d6f14b70d8aa 106 int8_t sendThingPlugResp_BG96(char* cmd_type, unsigned int rpc_id, int result, char* result_data, int result_len);
hkjung 0:5cd6077e0a8e 107
hkjung 0:5cd6077e0a8e 108 Serial pc(USBTX, USBRX); // USB debug
hkjung 0:5cd6077e0a8e 109
jehoon 4:d6f14b70d8aa 110 UARTSerial *_serial; // Cat.M1 module
hkjung 0:5cd6077e0a8e 111 ATCmdParser *_parser;
hkjung 0:5cd6077e0a8e 112
hkjung 1:0d7ba45f12b1 113 DigitalOut _RESET_BG96(MBED_CONF_IOTSHIELD_CATM1_RESET);
hkjung 1:0d7ba45f12b1 114 DigitalOut _PWRKEY_BG96(MBED_CONF_IOTSHIELD_CATM1_PWRKEY);
hkjung 0:5cd6077e0a8e 115
hkjung 0:5cd6077e0a8e 116 void serialPcInit(void)
hkjung 0:5cd6077e0a8e 117 {
hkjung 0:5cd6077e0a8e 118 pc.baud(115200);
hkjung 0:5cd6077e0a8e 119 pc.format(8, Serial::None, 1);
hkjung 0:5cd6077e0a8e 120 }
hkjung 0:5cd6077e0a8e 121
jehoon 4:d6f14b70d8aa 122 void serialDeviceInit(PinName tx, PinName rx, int baudrate)
jehoon 4:d6f14b70d8aa 123 {
jehoon 4:d6f14b70d8aa 124 _serial = new UARTSerial(tx, rx, baudrate);
hkjung 0:5cd6077e0a8e 125 }
hkjung 0:5cd6077e0a8e 126
hkjung 0:5cd6077e0a8e 127 void serialAtParserInit(const char *delimiter, bool debug_en)
hkjung 0:5cd6077e0a8e 128 {
jehoon 4:d6f14b70d8aa 129 _parser = new ATCmdParser(_serial);
hkjung 0:5cd6077e0a8e 130 _parser->debug_on(debug_en);
jehoon 4:d6f14b70d8aa 131 _parser->set_delimiter(delimiter);
hkjung 0:5cd6077e0a8e 132 _parser->set_timeout(BG96_DEFAULT_TIMEOUT);
hkjung 0:5cd6077e0a8e 133 }
hkjung 0:5cd6077e0a8e 134
hkjung 0:5cd6077e0a8e 135 void catm1DeviceInit(void)
hkjung 0:5cd6077e0a8e 136 {
jehoon 4:d6f14b70d8aa 137 serialDeviceInit( MBED_CONF_IOTSHIELD_CATM1_TX,
jehoon 4:d6f14b70d8aa 138 MBED_CONF_IOTSHIELD_CATM1_RX,
hkjung 0:5cd6077e0a8e 139 BG96_DEFAULT_BAUD_RATE);
jehoon 4:d6f14b70d8aa 140
jehoon 4:d6f14b70d8aa 141 serialAtParserInit( BG96_PARSER_DELIMITER,
hkjung 0:5cd6077e0a8e 142 BG96_PARSER_DEBUG);
hkjung 0:5cd6077e0a8e 143 }
hkjung 0:5cd6077e0a8e 144
hkjung 1:0d7ba45f12b1 145 void catm1DeviceReset_BG96(void)
hkjung 1:0d7ba45f12b1 146 {
hkjung 1:0d7ba45f12b1 147 _RESET_BG96 = 1;
hkjung 1:0d7ba45f12b1 148 _PWRKEY_BG96 = 1;
hkjung 1:0d7ba45f12b1 149 wait_ms(300);
jehoon 4:d6f14b70d8aa 150
hkjung 1:0d7ba45f12b1 151 _RESET_BG96 = 0;
hkjung 1:0d7ba45f12b1 152 _PWRKEY_BG96 = 0;
hkjung 1:0d7ba45f12b1 153 wait_ms(400);
jehoon 4:d6f14b70d8aa 154
jehoon 4:d6f14b70d8aa 155 _RESET_BG96 = 1;
hkjung 1:0d7ba45f12b1 156 wait_ms(1000);
hkjung 0:5cd6077e0a8e 157 }
hkjung 0:5cd6077e0a8e 158
hkjung 1:0d7ba45f12b1 159
hkjung 1:0d7ba45f12b1 160 // ----------------------------------------------------------------
hkjung 1:0d7ba45f12b1 161 // Main routine
hkjung 1:0d7ba45f12b1 162 // ----------------------------------------------------------------
hkjung 1:0d7ba45f12b1 163
hkjung 0:5cd6077e0a8e 164 int main()
hkjung 0:5cd6077e0a8e 165 {
jehoon 4:d6f14b70d8aa 166 serialPcInit();
hkjung 0:5cd6077e0a8e 167 catm1DeviceInit();
jehoon 4:d6f14b70d8aa 168
hkjung 0:5cd6077e0a8e 169 myprintf("Waiting for Cat.M1 Module Ready...\r\n");
jehoon 4:d6f14b70d8aa 170
hkjung 1:0d7ba45f12b1 171 catm1DeviceReset_BG96();
jehoon 4:d6f14b70d8aa 172
hkjung 0:5cd6077e0a8e 173 waitCatM1Ready();
jehoon 4:d6f14b70d8aa 174
hkjung 1:0d7ba45f12b1 175 wait_ms(5000);
jehoon 4:d6f14b70d8aa 176
hkjung 0:5cd6077e0a8e 177 myprintf("System Init Complete\r\n");
jehoon 4:d6f14b70d8aa 178
hkjung 0:5cd6077e0a8e 179 myprintf("WIZnet IoT Shield for Arm MBED");
hkjung 0:5cd6077e0a8e 180 myprintf("LTE Cat.M1 Version");
hkjung 0:5cd6077e0a8e 181 myprintf("=================================================");
hkjung 0:5cd6077e0a8e 182 myprintf(">> Target Board: WIoT-QC01 (Quectel BG96)");
jehoon 4:d6f14b70d8aa 183 myprintf(">> Sample Code: ThingPlug Send & Recv");
hkjung 0:5cd6077e0a8e 184 myprintf("=================================================\r\n");
jehoon 4:d6f14b70d8aa 185
hkjung 0:5cd6077e0a8e 186 setEchoStatus_BG96(OFF);
jehoon 4:d6f14b70d8aa 187
hkjung 0:5cd6077e0a8e 188 getUsimStatus_BG96();
jehoon 4:d6f14b70d8aa 189
hkjung 0:5cd6077e0a8e 190 getNetworkStatus_BG96();
jehoon 4:d6f14b70d8aa 191
hkjung 0:5cd6077e0a8e 192 checknSetApn_BG96(CATM1_APN_SKT);
jehoon 4:d6f14b70d8aa 193
jehoon 4:d6f14b70d8aa 194 // Connect to ThingPlug
jehoon 4:d6f14b70d8aa 195
jehoon 4:d6f14b70d8aa 196
jehoon 4:d6f14b70d8aa 197 if(connectThingPlug_BG96(THINGPLUG_SVC_NAME, THINGPLUG_DEV_ID, THINGPLUG_DEV_TOKEN) != RET_OK) {
jehoon 4:d6f14b70d8aa 198 myprintf("[ThingPlug] Connection failed\r\n");
jehoon 4:d6f14b70d8aa 199 while(1) {;}
jehoon 4:d6f14b70d8aa 200 }
jehoon 4:d6f14b70d8aa 201
jehoon 4:d6f14b70d8aa 202 char thingplug_telemetry[128] ={0,};
jehoon 4:d6f14b70d8aa 203 sprintf(thingplug_telemetry, "{\"%s\":%d, \"%s\":%d}", THINGPLUG_TELEMETRY1, 12, THINGPLUG_TELEMETRY2, 34);
jehoon 4:d6f14b70d8aa 204 // Send ThingPlug Telemetry test
jehoon 4:d6f14b70d8aa 205 if(sendThingPlugData_Json_BG96(THINGPLUG_DATA_TYPE_TELEMETRY, thingplug_telemetry, strlen(thingplug_telemetry)) == RET_OK) {
jehoon 4:d6f14b70d8aa 206 myprintf("[ThingPlug] Send telemetry: \"%s\"\r\n", thingplug_telemetry);
jehoon 4:d6f14b70d8aa 207 }
jehoon 4:d6f14b70d8aa 208
jehoon 4:d6f14b70d8aa 209 // wait_ms(400);
jehoon 4:d6f14b70d8aa 210 //
jehoon 4:d6f14b70d8aa 211 // char thingplug_attribute[128] ={0,};
jehoon 4:d6f14b70d8aa 212 // sprintf(thingplug_attribute, "{\"%s\":\"%s\"}", THINGPLUG_ATTRIBUTE, "ON");
jehoon 4:d6f14b70d8aa 213 // if(sendThingPlugData_Json_BG96(THINGPLUG_DATA_TYPE_ATTRIBUTE, thingplug_attribute, strlen(thingplug_attribute)) == RET_OK) {
jehoon 4:d6f14b70d8aa 214 // myprintf("[ThingPlug] Send attribute: \"%s\"\r\n", thingplug_attribute);
jehoon 4:d6f14b70d8aa 215 // }
hkjung 0:5cd6077e0a8e 216
jehoon 4:d6f14b70d8aa 217 char recved_cmd_type[32] = {0,};
jehoon 4:d6f14b70d8aa 218 char recved_rpc_msg[128] = {0,};
jehoon 4:d6f14b70d8aa 219 unsigned int recved_rpc_id = 0;
jehoon 4:d6f14b70d8aa 220
jehoon 4:d6f14b70d8aa 221 // Recv ThingPlug RPC message test
jehoon 4:d6f14b70d8aa 222 while(1) {
jehoon 4:d6f14b70d8aa 223 // ThingPlug RPC received
jehoon 4:d6f14b70d8aa 224 if(recvThingPlugCmd_BG96(recved_cmd_type, &recved_rpc_id, recved_rpc_msg) == RET_OK) {
jehoon 4:d6f14b70d8aa 225 myprintf("[ThingPlug] Recieved RPC Type: \"%s\" ID: %d, Message: \"%s\"\r\n", recved_cmd_type, recved_rpc_id, recved_rpc_msg);
jehoon 4:d6f14b70d8aa 226
jehoon 4:d6f14b70d8aa 227 {
jehoon 4:d6f14b70d8aa 228 wait_ms(400);
jehoon 4:d6f14b70d8aa 229 //RPC Process
hkjung 1:0d7ba45f12b1 230 }
hkjung 1:0d7ba45f12b1 231
jehoon 4:d6f14b70d8aa 232 // Send ThingPlug RPC Result
jehoon 4:d6f14b70d8aa 233 if(sendThingPlugResp_BG96(recved_cmd_type, recved_rpc_id, THINGPLUG_CMD_RES_OK, recved_rpc_msg, strlen(recved_rpc_msg)) == RET_OK) {
jehoon 4:d6f14b70d8aa 234 myprintf("[ThingPlug] Send RPC Result, Type: \"%s\" ID: %d, Result: %d\r\n", recved_cmd_type, recved_rpc_id, THINGPLUG_CMD_RES_OK);
jehoon 4:d6f14b70d8aa 235 }
hkjung 1:0d7ba45f12b1 236 }
hkjung 1:0d7ba45f12b1 237 }
hkjung 0:5cd6077e0a8e 238 }
hkjung 0:5cd6077e0a8e 239
hkjung 1:0d7ba45f12b1 240
hkjung 1:0d7ba45f12b1 241 // ----------------------------------------------------------------
hkjung 1:0d7ba45f12b1 242 // Functions: Cat.M1 Status
hkjung 1:0d7ba45f12b1 243 // ----------------------------------------------------------------
hkjung 1:0d7ba45f12b1 244
hkjung 0:5cd6077e0a8e 245 void waitCatM1Ready(void)
hkjung 0:5cd6077e0a8e 246 {
jehoon 4:d6f14b70d8aa 247 while(1) {
jehoon 4:d6f14b70d8aa 248 if(_parser->recv("RDY")) {
hkjung 0:5cd6077e0a8e 249 myprintf("BG96 ready\r\n");
hkjung 0:5cd6077e0a8e 250 return ;
jehoon 4:d6f14b70d8aa 251 } else if(_parser->send("AT") && _parser->recv("OK")) {
jehoon 4:d6f14b70d8aa 252 myprintf("BG96 already available\r\n");
jehoon 4:d6f14b70d8aa 253 return ;
hkjung 0:5cd6077e0a8e 254 }
jehoon 4:d6f14b70d8aa 255 }
hkjung 0:5cd6077e0a8e 256 }
hkjung 0:5cd6077e0a8e 257
hkjung 0:5cd6077e0a8e 258 int8_t setEchoStatus_BG96(bool onoff)
hkjung 0:5cd6077e0a8e 259 {
hkjung 0:5cd6077e0a8e 260 int8_t ret = RET_NOK;
jehoon 4:d6f14b70d8aa 261 char _buf[10];
jehoon 4:d6f14b70d8aa 262
jehoon 4:d6f14b70d8aa 263 sprintf((char *)_buf, "ATE%d", onoff);
jehoon 4:d6f14b70d8aa 264
jehoon 4:d6f14b70d8aa 265 if(_parser->send(_buf) && _parser->recv("OK")) {
hkjung 0:5cd6077e0a8e 266 devlog("Turn Echo %s success\r\n", onoff?"ON":"OFF");
hkjung 0:5cd6077e0a8e 267 ret = RET_OK;
jehoon 4:d6f14b70d8aa 268 } else {
hkjung 0:5cd6077e0a8e 269 devlog("Turn Echo %s failed\r\n", onoff?"ON":"OFF");
jehoon 4:d6f14b70d8aa 270 }
hkjung 0:5cd6077e0a8e 271 return ret;
hkjung 0:5cd6077e0a8e 272 }
jehoon 4:d6f14b70d8aa 273
hkjung 0:5cd6077e0a8e 274 int8_t getUsimStatus_BG96(void)
hkjung 0:5cd6077e0a8e 275 {
hkjung 0:5cd6077e0a8e 276 int8_t ret = RET_NOK;
jehoon 4:d6f14b70d8aa 277
jehoon 4:d6f14b70d8aa 278 _parser->send("AT+CPIN?");
hkjung 0:5cd6077e0a8e 279 if(_parser->recv("+CPIN: READY") && _parser->recv("OK")) {
hkjung 0:5cd6077e0a8e 280 devlog("USIM Status: READY\r\n");
hkjung 0:5cd6077e0a8e 281 ret = RET_OK;
jehoon 4:d6f14b70d8aa 282 } else {
jehoon 4:d6f14b70d8aa 283 devlog("Retrieving USIM Status failed\r\n");
hkjung 0:5cd6077e0a8e 284 }
hkjung 0:5cd6077e0a8e 285 return ret;
hkjung 0:5cd6077e0a8e 286 }
hkjung 0:5cd6077e0a8e 287
hkjung 0:5cd6077e0a8e 288 int8_t getNetworkStatus_BG96(void)
hkjung 0:5cd6077e0a8e 289 {
jehoon 4:d6f14b70d8aa 290 int8_t ret = RET_NOK;
jehoon 4:d6f14b70d8aa 291
hkjung 0:5cd6077e0a8e 292 if(_parser->send("AT+QCDS") && _parser->recv("+QCDS: \"SRV\"") && _parser->recv("OK")) {
hkjung 0:5cd6077e0a8e 293 devlog("Network Status: attached\r\n");
hkjung 0:5cd6077e0a8e 294 ret = RET_OK;
hkjung 0:5cd6077e0a8e 295 } else if (_parser->send("AT+QCDS") && _parser->recv("+QCDS: \"LIMITED\"") && _parser->recv("OK")) {
hkjung 0:5cd6077e0a8e 296 devlog("Network Status: limited\r\n");
jehoon 4:d6f14b70d8aa 297 ret = RET_OK;
jehoon 4:d6f14b70d8aa 298 } else {
jehoon 4:d6f14b70d8aa 299 devlog("Network Status: Error\r\n");
hkjung 0:5cd6077e0a8e 300 }
hkjung 0:5cd6077e0a8e 301 return ret;
hkjung 0:5cd6077e0a8e 302 }
hkjung 0:5cd6077e0a8e 303
hkjung 0:5cd6077e0a8e 304 int8_t checknSetApn_BG96(const char * apn) // Configure Parameters of a TCP/IP Context
jehoon 4:d6f14b70d8aa 305 {
hkjung 0:5cd6077e0a8e 306 char resp_str[100];
jehoon 4:d6f14b70d8aa 307
hkjung 0:5cd6077e0a8e 308 uint16_t i = 0;
hkjung 0:5cd6077e0a8e 309 char * search_pt;
jehoon 4:d6f14b70d8aa 310
hkjung 0:5cd6077e0a8e 311 memset(resp_str, 0, sizeof(resp_str));
jehoon 4:d6f14b70d8aa 312
hkjung 0:5cd6077e0a8e 313 devlog("Checking APN...\r\n");
jehoon 4:d6f14b70d8aa 314
hkjung 0:5cd6077e0a8e 315 _parser->send("AT+QICSGP=1");
jehoon 4:d6f14b70d8aa 316
jehoon 4:d6f14b70d8aa 317 while(1) {
jehoon 4:d6f14b70d8aa 318 _parser->read(&resp_str[i++], 1);
hkjung 0:5cd6077e0a8e 319 search_pt = strstr(resp_str, "OK\r\n");
jehoon 4:d6f14b70d8aa 320 if (search_pt != 0) {
hkjung 0:5cd6077e0a8e 321 break;
hkjung 0:5cd6077e0a8e 322 }
hkjung 0:5cd6077e0a8e 323 }
jehoon 4:d6f14b70d8aa 324
hkjung 0:5cd6077e0a8e 325 search_pt = strstr(resp_str, apn);
jehoon 4:d6f14b70d8aa 326 if (search_pt == 0) {
hkjung 0:5cd6077e0a8e 327 devlog("Mismatched APN: %s\r\n", resp_str);
hkjung 0:5cd6077e0a8e 328 devlog("Storing APN %s...\r\n", apn);
jehoon 4:d6f14b70d8aa 329 if(!(_parser->send("AT+QICSGP=1,%d,\"%s\",\"\",\"\",0", BG96_APN_PROTOCOL, apn) && _parser->recv("OK"))) {
hkjung 0:5cd6077e0a8e 330 return RET_NOK; // failed
hkjung 0:5cd6077e0a8e 331 }
jehoon 4:d6f14b70d8aa 332 }
hkjung 1:0d7ba45f12b1 333 devlog("APN Check Done\r\n");
jehoon 4:d6f14b70d8aa 334
hkjung 0:5cd6077e0a8e 335 return RET_OK;
hkjung 0:5cd6077e0a8e 336 }
hkjung 0:5cd6077e0a8e 337
hkjung 0:5cd6077e0a8e 338 int8_t getFirmwareVersion_BG96(char * version)
hkjung 0:5cd6077e0a8e 339 {
hkjung 0:5cd6077e0a8e 340 int8_t ret = RET_NOK;
jehoon 4:d6f14b70d8aa 341
jehoon 4:d6f14b70d8aa 342 if(_parser->send("AT+QGMR") && _parser->recv("%s\n", version) && _parser->recv("OK")) {
hkjung 0:5cd6077e0a8e 343 ret = RET_OK;
jehoon 4:d6f14b70d8aa 344 }
hkjung 0:5cd6077e0a8e 345 return ret;
hkjung 0:5cd6077e0a8e 346 }
hkjung 0:5cd6077e0a8e 347
hkjung 0:5cd6077e0a8e 348 int8_t getImeiNumber_BG96(char * imei)
hkjung 0:5cd6077e0a8e 349 {
jehoon 4:d6f14b70d8aa 350 int8_t ret = RET_NOK;
jehoon 4:d6f14b70d8aa 351
jehoon 4:d6f14b70d8aa 352 if(_parser->send("AT+CGSN") && _parser->recv("%s\n", imei) && _parser->recv("OK")) {
hkjung 0:5cd6077e0a8e 353 ret = RET_OK;
jehoon 4:d6f14b70d8aa 354 }
hkjung 0:5cd6077e0a8e 355 return ret;
hkjung 0:5cd6077e0a8e 356 }
hkjung 0:5cd6077e0a8e 357
hkjung 1:0d7ba45f12b1 358 // ----------------------------------------------------------------
jehoon 4:d6f14b70d8aa 359 // Functions: Cat.M1 ThingPlug send & recv
hkjung 1:0d7ba45f12b1 360 // ----------------------------------------------------------------
hkjung 0:5cd6077e0a8e 361
jehoon 4:d6f14b70d8aa 362 int8_t connectThingPlug_BG96(char* svc_id, char* dev_id, char* dev_token)
hkjung 0:5cd6077e0a8e 363 {
jehoon 4:d6f14b70d8aa 364 int8_t ret = RET_NOK;
jehoon 4:d6f14b70d8aa 365
hkjung 0:5cd6077e0a8e 366 _parser->set_timeout(BG96_CONNECT_TIMEOUT);
jehoon 4:d6f14b70d8aa 367
jehoon 4:d6f14b70d8aa 368 if( _parser->send("AT+SKTPCON=1,\"%s\",\"%s\",%d,%d,%d,\"simple_v1\",\"%s\",\"%s\",\"%s\"",\
jehoon 4:d6f14b70d8aa 369 THINGPLUG_PROTOCOL, THINGPLUG_HOST, THINGPLUG_PORT, THINGPLUG_KEEPALIVE, THINGPLUG_CLEANSESSION,\
jehoon 4:d6f14b70d8aa 370 dev_token, svc_id, dev_id)
jehoon 4:d6f14b70d8aa 371 && _parser->recv("OK")
jehoon 4:d6f14b70d8aa 372 && _parser->recv("+SKTPCON: 0")) {
jehoon 4:d6f14b70d8aa 373 devlog("BG96 Device is connected to ThingPlug successfully\r\n");
jehoon 4:d6f14b70d8aa 374 ret = RET_OK;
jehoon 4:d6f14b70d8aa 375 }
jehoon 4:d6f14b70d8aa 376 _parser->set_timeout(BG96_DEFAULT_TIMEOUT);
jehoon 4:d6f14b70d8aa 377
jehoon 4:d6f14b70d8aa 378 return ret;
jehoon 4:d6f14b70d8aa 379 }
jehoon 4:d6f14b70d8aa 380
jehoon 4:d6f14b70d8aa 381 int8_t sendThingPlugData_Json_BG96(char* type, char * data, int len)
jehoon 4:d6f14b70d8aa 382 {
jehoon 4:d6f14b70d8aa 383 int8_t ret = RET_NOK;
jehoon 4:d6f14b70d8aa 384 bool done = false;
jehoon 4:d6f14b70d8aa 385
jehoon 4:d6f14b70d8aa 386 if( _parser->send("AT+SKTPDAT=1,\"%s\",%d", type, THINGPLUG_DATA_FORMAT_JSON));
jehoon 4:d6f14b70d8aa 387
jehoon 4:d6f14b70d8aa 388 if( !done && _parser->recv(">") )
jehoon 4:d6f14b70d8aa 389 done = !(_parser->write(data, len) <= 0) & _parser->send("%c", ESPCAPE_SEQ);
jehoon 4:d6f14b70d8aa 390
jehoon 4:d6f14b70d8aa 391 if( _parser->recv("OK") ) {
jehoon 4:d6f14b70d8aa 392 devlog("send ThingPlug Data successfully: %s\r\n", data);
hkjung 1:0d7ba45f12b1 393 if(done) {
hkjung 1:0d7ba45f12b1 394 ret = RET_OK;
hkjung 1:0d7ba45f12b1 395 }
hkjung 0:5cd6077e0a8e 396 }
jehoon 4:d6f14b70d8aa 397
jehoon 4:d6f14b70d8aa 398 _parser->flush();
jehoon 4:d6f14b70d8aa 399
jehoon 4:d6f14b70d8aa 400 return ret;
jehoon 4:d6f14b70d8aa 401 }
jehoon 4:d6f14b70d8aa 402
jehoon 4:d6f14b70d8aa 403 int8_t sendThingPlugResp_BG96(char* cmd_type, unsigned int rpc_id, int result, char* result_data, int result_len)
jehoon 4:d6f14b70d8aa 404 {
jehoon 4:d6f14b70d8aa 405 int8_t ret = RET_NOK;
jehoon 4:d6f14b70d8aa 406 bool done = false;
jehoon 4:d6f14b70d8aa 407
jehoon 4:d6f14b70d8aa 408 if( _parser->send("AT+SKTPRES=1,\"%s\",%d,%d", cmd_type, rpc_id, result));
jehoon 4:d6f14b70d8aa 409
jehoon 4:d6f14b70d8aa 410 if( !done && _parser->recv(">") )
jehoon 4:d6f14b70d8aa 411 done = !(_parser->write(result_data, result_len) <= 0) & _parser->send("%c", ESPCAPE_SEQ);
jehoon 4:d6f14b70d8aa 412
jehoon 4:d6f14b70d8aa 413 if( _parser->recv("OK") ) {
jehoon 4:d6f14b70d8aa 414 devlog("send Command result successfully %d\r\n", rpc_id);
jehoon 4:d6f14b70d8aa 415
jehoon 4:d6f14b70d8aa 416 if(done) {
jehoon 4:d6f14b70d8aa 417 ret = RET_OK;
jehoon 4:d6f14b70d8aa 418 }
jehoon 4:d6f14b70d8aa 419 }
jehoon 4:d6f14b70d8aa 420 _parser->flush();
hkjung 0:5cd6077e0a8e 421
hkjung 0:5cd6077e0a8e 422 return ret;
hkjung 0:5cd6077e0a8e 423 }
hkjung 0:5cd6077e0a8e 424
jehoon 4:d6f14b70d8aa 425 int8_t recvThingPlugCmd_BG96(char* cmd_type, unsigned int* rpc_id, char* msg)
hkjung 0:5cd6077e0a8e 426 {
hkjung 0:5cd6077e0a8e 427 int8_t ret = RET_NOK;
jehoon 4:d6f14b70d8aa 428 unsigned int status;
jehoon 4:d6f14b70d8aa 429 bool received = false;
hkjung 0:5cd6077e0a8e 430
jehoon 4:d6f14b70d8aa 431 _parser->set_timeout(1);
hkjung 1:0d7ba45f12b1 432
jehoon 4:d6f14b70d8aa 433 received = _parser->recv("+SKTPCMD: %[^\\,],%u,%u,%s\r\n", cmd_type, rpc_id, &status, msg);
jehoon 4:d6f14b70d8aa 434 // received = _parser->recv("+SKTPCMD: %[^\,],%u,%u,%s\r\n", cmd_type, rpc_id, &status, msg);
jehoon 4:d6f14b70d8aa 435 _parser->set_timeout(BG96_DEFAULT_TIMEOUT);
jehoon 4:d6f14b70d8aa 436
jehoon 4:d6f14b70d8aa 437 if(received) ret = RET_OK;
hkjung 0:5cd6077e0a8e 438 return ret;
jehoon 4:d6f14b70d8aa 439 }