SKT Cat.M1(BG96) ThingPlug Example

Committer:
hkjung
Date:
Fri Mar 22 07:27:52 2019 +0000
Revision:
3:98c9694fec26
Parent:
2:7e018d5751b1
Child:
4:d6f14b70d8aa
Disabled parser debug messages

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 */
hkjung 0:5cd6077e0a8e 5
hkjung 0:5cd6077e0a8e 6 /*
hkjung 0:5cd6077e0a8e 7 * Licensed under the Apache License, Version 2.0 (the "License");
hkjung 0:5cd6077e0a8e 8 * you may not use this file except in compliance with the License.
hkjung 0:5cd6077e0a8e 9 * You may obtain a copy of the License at
hkjung 0:5cd6077e0a8e 10 *
hkjung 0:5cd6077e0a8e 11 * http://www.apache.org/licenses/LICENSE-2.0
hkjung 0:5cd6077e0a8e 12 *
hkjung 0:5cd6077e0a8e 13 * Unless required by applicable law or agreed to in writing, software
hkjung 0:5cd6077e0a8e 14 * distributed under the License is distributed on an "AS IS" BASIS,
hkjung 0:5cd6077e0a8e 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
hkjung 0:5cd6077e0a8e 16 *
hkjung 0:5cd6077e0a8e 17 * See the License for the specific language governing permissions and
hkjung 0:5cd6077e0a8e 18 * limitations under the License.
hkjung 0:5cd6077e0a8e 19 *
hkjung 0:5cd6077e0a8e 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
hkjung 0:5cd6077e0a8e 67 #define CATM1_DEVICE_DEBUG DEBUG_ENABLE
hkjung 0:5cd6077e0a8e 68
hkjung 1:0d7ba45f12b1 69 /* HTTP */
hkjung 1:0d7ba45f12b1 70 #define HTTP_STATUS_CODE_OK 200
hkjung 1:0d7ba45f12b1 71
hkjung 1:0d7ba45f12b1 72 // Sample HTTP URL: Weather info by Korea Meteorological Administration
hkjung 1:0d7ba45f12b1 73 char request_url[] = "http://www.kma.go.kr/wid/queryDFSRSS.jsp?zone=4113552000";
hkjung 1:0d7ba45f12b1 74
hkjung 1:0d7ba45f12b1 75
hkjung 0:5cd6077e0a8e 76 // Functions: Module Status
hkjung 0:5cd6077e0a8e 77 void waitCatM1Ready(void);
hkjung 0:5cd6077e0a8e 78 int8_t setEchoStatus_BG96(bool onoff);
hkjung 0:5cd6077e0a8e 79 int8_t getUsimStatus_BG96(void);
hkjung 0:5cd6077e0a8e 80 int8_t getNetworkStatus_BG96(void);
hkjung 0:5cd6077e0a8e 81 int8_t checknSetApn_BG96(const char * apn);
hkjung 0:5cd6077e0a8e 82 int8_t getFirmwareVersion_BG96(char * version);
hkjung 0:5cd6077e0a8e 83
hkjung 1:0d7ba45f12b1 84 // Functions: HTTP send & recv
hkjung 2:7e018d5751b1 85 int8_t setHttpRequest_BG96(char * url, int len);
hkjung 1:0d7ba45f12b1 86 int8_t sendHttpRequest_BG96(int timeout, int * rsp_code, int * content_len);
hkjung 1:0d7ba45f12b1 87 int8_t getHttpResponse_BG96(int timeout, char * buf, int len);
hkjung 1:0d7ba45f12b1 88 void dumpHttpRespones_BG96(char * buf);
hkjung 0:5cd6077e0a8e 89
hkjung 0:5cd6077e0a8e 90 Serial pc(USBTX, USBRX); // USB debug
hkjung 0:5cd6077e0a8e 91
hkjung 0:5cd6077e0a8e 92 UARTSerial *_serial; // Cat.M1 module
hkjung 0:5cd6077e0a8e 93 ATCmdParser *_parser;
hkjung 0:5cd6077e0a8e 94
hkjung 1:0d7ba45f12b1 95 DigitalOut _RESET_BG96(MBED_CONF_IOTSHIELD_CATM1_RESET);
hkjung 1:0d7ba45f12b1 96 DigitalOut _PWRKEY_BG96(MBED_CONF_IOTSHIELD_CATM1_PWRKEY);
hkjung 0:5cd6077e0a8e 97
hkjung 0:5cd6077e0a8e 98 void serialPcInit(void)
hkjung 0:5cd6077e0a8e 99 {
hkjung 0:5cd6077e0a8e 100 pc.baud(115200);
hkjung 0:5cd6077e0a8e 101 pc.format(8, Serial::None, 1);
hkjung 0:5cd6077e0a8e 102 }
hkjung 0:5cd6077e0a8e 103
hkjung 0:5cd6077e0a8e 104 void serialDeviceInit(PinName tx, PinName rx, int baudrate)
hkjung 0:5cd6077e0a8e 105 {
hkjung 0:5cd6077e0a8e 106 _serial = new UARTSerial(tx, rx, baudrate);
hkjung 0:5cd6077e0a8e 107 }
hkjung 0:5cd6077e0a8e 108
hkjung 0:5cd6077e0a8e 109 void serialAtParserInit(const char *delimiter, bool debug_en)
hkjung 0:5cd6077e0a8e 110 {
hkjung 0:5cd6077e0a8e 111 _parser = new ATCmdParser(_serial);
hkjung 0:5cd6077e0a8e 112 _parser->debug_on(debug_en);
hkjung 0:5cd6077e0a8e 113 _parser->set_delimiter(delimiter);
hkjung 0:5cd6077e0a8e 114 _parser->set_timeout(BG96_DEFAULT_TIMEOUT);
hkjung 0:5cd6077e0a8e 115 }
hkjung 0:5cd6077e0a8e 116
hkjung 0:5cd6077e0a8e 117 void catm1DeviceInit(void)
hkjung 0:5cd6077e0a8e 118 {
hkjung 0:5cd6077e0a8e 119 serialDeviceInit( MBED_CONF_IOTSHIELD_CATM1_TX,
hkjung 0:5cd6077e0a8e 120 MBED_CONF_IOTSHIELD_CATM1_RX,
hkjung 0:5cd6077e0a8e 121 BG96_DEFAULT_BAUD_RATE);
hkjung 0:5cd6077e0a8e 122
hkjung 0:5cd6077e0a8e 123 serialAtParserInit( BG96_PARSER_DELIMITER,
hkjung 0:5cd6077e0a8e 124 BG96_PARSER_DEBUG);
hkjung 0:5cd6077e0a8e 125 }
hkjung 0:5cd6077e0a8e 126
hkjung 1:0d7ba45f12b1 127 void catm1DeviceReset_BG96(void)
hkjung 1:0d7ba45f12b1 128 {
hkjung 1:0d7ba45f12b1 129 _RESET_BG96 = 1;
hkjung 1:0d7ba45f12b1 130 _PWRKEY_BG96 = 1;
hkjung 1:0d7ba45f12b1 131 wait_ms(300);
hkjung 0:5cd6077e0a8e 132
hkjung 1:0d7ba45f12b1 133 _RESET_BG96 = 0;
hkjung 1:0d7ba45f12b1 134 _PWRKEY_BG96 = 0;
hkjung 1:0d7ba45f12b1 135 wait_ms(400);
hkjung 0:5cd6077e0a8e 136
hkjung 1:0d7ba45f12b1 137 _RESET_BG96 = 1;
hkjung 1:0d7ba45f12b1 138 wait_ms(1000);
hkjung 0:5cd6077e0a8e 139 }
hkjung 0:5cd6077e0a8e 140
hkjung 1:0d7ba45f12b1 141
hkjung 1:0d7ba45f12b1 142 // ----------------------------------------------------------------
hkjung 1:0d7ba45f12b1 143 // Main routine
hkjung 1:0d7ba45f12b1 144 // ----------------------------------------------------------------
hkjung 1:0d7ba45f12b1 145
hkjung 0:5cd6077e0a8e 146 int main()
hkjung 0:5cd6077e0a8e 147 {
hkjung 0:5cd6077e0a8e 148 serialPcInit();
hkjung 0:5cd6077e0a8e 149 catm1DeviceInit();
hkjung 0:5cd6077e0a8e 150
hkjung 0:5cd6077e0a8e 151 myprintf("Waiting for Cat.M1 Module Ready...\r\n");
hkjung 0:5cd6077e0a8e 152
hkjung 1:0d7ba45f12b1 153 catm1DeviceReset_BG96();
hkjung 0:5cd6077e0a8e 154
hkjung 0:5cd6077e0a8e 155 waitCatM1Ready();
hkjung 1:0d7ba45f12b1 156
hkjung 1:0d7ba45f12b1 157 wait_ms(5000);
hkjung 0:5cd6077e0a8e 158
hkjung 0:5cd6077e0a8e 159 myprintf("System Init Complete\r\n");
hkjung 0:5cd6077e0a8e 160
hkjung 0:5cd6077e0a8e 161 myprintf("WIZnet IoT Shield for Arm MBED");
hkjung 0:5cd6077e0a8e 162 myprintf("LTE Cat.M1 Version");
hkjung 0:5cd6077e0a8e 163 myprintf("=================================================");
hkjung 0:5cd6077e0a8e 164 myprintf(">> Target Board: WIoT-QC01 (Quectel BG96)");
hkjung 1:0d7ba45f12b1 165 myprintf(">> Sample Code: HTTP Send & Recv");
hkjung 0:5cd6077e0a8e 166 myprintf("=================================================\r\n");
hkjung 0:5cd6077e0a8e 167
hkjung 0:5cd6077e0a8e 168 setEchoStatus_BG96(OFF);
hkjung 0:5cd6077e0a8e 169
hkjung 0:5cd6077e0a8e 170 getUsimStatus_BG96();
hkjung 0:5cd6077e0a8e 171
hkjung 0:5cd6077e0a8e 172 getNetworkStatus_BG96();
hkjung 0:5cd6077e0a8e 173
hkjung 0:5cd6077e0a8e 174 checknSetApn_BG96(CATM1_APN_SKT);
hkjung 0:5cd6077e0a8e 175
hkjung 1:0d7ba45f12b1 176 // Set HTTP request URL
hkjung 1:0d7ba45f12b1 177 if(setHttpRequest_BG96(request_url, strlen(request_url)-1) != RET_OK) {
hkjung 1:0d7ba45f12b1 178 myprintf("[HTTP] setHttpRequest failed\r\n");
hkjung 1:0d7ba45f12b1 179 while(1){;}
hkjung 1:0d7ba45f12b1 180 }
hkjung 0:5cd6077e0a8e 181
hkjung 1:0d7ba45f12b1 182 int http_response_code = 0;
hkjung 1:0d7ba45f12b1 183 int http_response_len = 0;
hkjung 0:5cd6077e0a8e 184
hkjung 1:0d7ba45f12b1 185 if(sendHttpRequest_BG96(20, &http_response_code, &http_response_len)) {
hkjung 1:0d7ba45f12b1 186 if(http_response_code == HTTP_STATUS_CODE_OK) {
hkjung 1:0d7ba45f12b1 187 myprintf("[HTTP] 200 OK, Response content length: %d\r\n", http_response_len);
hkjung 1:0d7ba45f12b1 188
hkjung 1:0d7ba45f12b1 189 char * http_buf;
hkjung 1:0d7ba45f12b1 190 http_buf = (char*)calloc(http_response_len+2, sizeof(char)); // memory allocation
hkjung 1:0d7ba45f12b1 191
hkjung 1:0d7ba45f12b1 192 if(getHttpResponse_BG96(20, http_buf, http_response_len+2)) {
hkjung 1:0d7ba45f12b1 193 dumpHttpRespones_BG96(http_buf);
hkjung 1:0d7ba45f12b1 194 }
hkjung 1:0d7ba45f12b1 195
hkjung 1:0d7ba45f12b1 196 free(http_buf); // release
hkjung 1:0d7ba45f12b1 197
hkjung 1:0d7ba45f12b1 198 myprintf("[HTTP] getHttpResponse success\r\n");
hkjung 1:0d7ba45f12b1 199 } else {
hkjung 1:0d7ba45f12b1 200 myprintf("[HTTP] sendHttpRequest failed - HTTP response code: %d\r\n", http_response_code);
hkjung 1:0d7ba45f12b1 201 }
hkjung 1:0d7ba45f12b1 202 }
hkjung 0:5cd6077e0a8e 203 }
hkjung 0:5cd6077e0a8e 204
hkjung 1:0d7ba45f12b1 205
hkjung 1:0d7ba45f12b1 206 // ----------------------------------------------------------------
hkjung 1:0d7ba45f12b1 207 // Functions: Cat.M1 Status
hkjung 1:0d7ba45f12b1 208 // ----------------------------------------------------------------
hkjung 1:0d7ba45f12b1 209
hkjung 0:5cd6077e0a8e 210 void waitCatM1Ready(void)
hkjung 0:5cd6077e0a8e 211 {
hkjung 0:5cd6077e0a8e 212 while(1)
hkjung 0:5cd6077e0a8e 213 {
hkjung 0:5cd6077e0a8e 214 if(_parser->recv("RDY"))
hkjung 0:5cd6077e0a8e 215 {
hkjung 0:5cd6077e0a8e 216 myprintf("BG96 ready\r\n");
hkjung 0:5cd6077e0a8e 217 return ;
hkjung 0:5cd6077e0a8e 218 }
hkjung 0:5cd6077e0a8e 219 else if(_parser->send("AT") && _parser->recv("OK"))
hkjung 0:5cd6077e0a8e 220 {
hkjung 0:5cd6077e0a8e 221 myprintf("BG96 already available\r\n");
hkjung 0:5cd6077e0a8e 222 return ;
hkjung 0:5cd6077e0a8e 223 }
hkjung 0:5cd6077e0a8e 224 }
hkjung 0:5cd6077e0a8e 225 }
hkjung 0:5cd6077e0a8e 226
hkjung 0:5cd6077e0a8e 227 int8_t setEchoStatus_BG96(bool onoff)
hkjung 0:5cd6077e0a8e 228 {
hkjung 0:5cd6077e0a8e 229 int8_t ret = RET_NOK;
hkjung 0:5cd6077e0a8e 230 char _buf[10];
hkjung 0:5cd6077e0a8e 231
hkjung 0:5cd6077e0a8e 232 sprintf((char *)_buf, "ATE%d", onoff);
hkjung 0:5cd6077e0a8e 233
hkjung 0:5cd6077e0a8e 234 if(_parser->send(_buf) && _parser->recv("OK")) {
hkjung 0:5cd6077e0a8e 235 devlog("Turn Echo %s success\r\n", onoff?"ON":"OFF");
hkjung 0:5cd6077e0a8e 236 ret = RET_OK;
hkjung 0:5cd6077e0a8e 237 } else {
hkjung 0:5cd6077e0a8e 238 devlog("Turn Echo %s failed\r\n", onoff?"ON":"OFF");
hkjung 0:5cd6077e0a8e 239 }
hkjung 0:5cd6077e0a8e 240 return ret;
hkjung 0:5cd6077e0a8e 241 }
hkjung 0:5cd6077e0a8e 242
hkjung 0:5cd6077e0a8e 243 int8_t getUsimStatus_BG96(void)
hkjung 0:5cd6077e0a8e 244 {
hkjung 0:5cd6077e0a8e 245 int8_t ret = RET_NOK;
hkjung 0:5cd6077e0a8e 246
hkjung 0:5cd6077e0a8e 247 _parser->send("AT+CPIN?");
hkjung 0:5cd6077e0a8e 248 if(_parser->recv("+CPIN: READY") && _parser->recv("OK")) {
hkjung 0:5cd6077e0a8e 249 devlog("USIM Status: READY\r\n");
hkjung 0:5cd6077e0a8e 250 ret = RET_OK;
hkjung 0:5cd6077e0a8e 251 } else {
hkjung 0:5cd6077e0a8e 252 devlog("Retrieving USIM Status failed\r\n");
hkjung 0:5cd6077e0a8e 253 }
hkjung 0:5cd6077e0a8e 254 return ret;
hkjung 0:5cd6077e0a8e 255 }
hkjung 0:5cd6077e0a8e 256
hkjung 0:5cd6077e0a8e 257 int8_t getNetworkStatus_BG96(void)
hkjung 0:5cd6077e0a8e 258 {
hkjung 0:5cd6077e0a8e 259 int8_t ret = RET_NOK;
hkjung 0:5cd6077e0a8e 260
hkjung 0:5cd6077e0a8e 261 if(_parser->send("AT+QCDS") && _parser->recv("+QCDS: \"SRV\"") && _parser->recv("OK")) {
hkjung 0:5cd6077e0a8e 262 devlog("Network Status: attached\r\n");
hkjung 0:5cd6077e0a8e 263 ret = RET_OK;
hkjung 0:5cd6077e0a8e 264 } else if (_parser->send("AT+QCDS") && _parser->recv("+QCDS: \"LIMITED\"") && _parser->recv("OK")) {
hkjung 0:5cd6077e0a8e 265 devlog("Network Status: limited\r\n");
hkjung 0:5cd6077e0a8e 266 ret = RET_OK;
hkjung 0:5cd6077e0a8e 267 } else {
hkjung 0:5cd6077e0a8e 268 devlog("Network Status: Error\r\n");
hkjung 0:5cd6077e0a8e 269 }
hkjung 0:5cd6077e0a8e 270 return ret;
hkjung 0:5cd6077e0a8e 271 }
hkjung 0:5cd6077e0a8e 272
hkjung 0:5cd6077e0a8e 273 int8_t checknSetApn_BG96(const char * apn) // Configure Parameters of a TCP/IP Context
hkjung 0:5cd6077e0a8e 274 {
hkjung 0:5cd6077e0a8e 275 char resp_str[100];
hkjung 0:5cd6077e0a8e 276
hkjung 0:5cd6077e0a8e 277 uint16_t i = 0;
hkjung 0:5cd6077e0a8e 278 char * search_pt;
hkjung 0:5cd6077e0a8e 279
hkjung 0:5cd6077e0a8e 280 memset(resp_str, 0, sizeof(resp_str));
hkjung 0:5cd6077e0a8e 281
hkjung 0:5cd6077e0a8e 282 devlog("Checking APN...\r\n");
hkjung 0:5cd6077e0a8e 283
hkjung 0:5cd6077e0a8e 284 _parser->send("AT+QICSGP=1");
hkjung 0:5cd6077e0a8e 285
hkjung 0:5cd6077e0a8e 286 while(1)
hkjung 0:5cd6077e0a8e 287 {
hkjung 0:5cd6077e0a8e 288 _parser->read(&resp_str[i++], 1);
hkjung 0:5cd6077e0a8e 289 search_pt = strstr(resp_str, "OK\r\n");
hkjung 0:5cd6077e0a8e 290 if (search_pt != 0)
hkjung 0:5cd6077e0a8e 291 {
hkjung 0:5cd6077e0a8e 292 break;
hkjung 0:5cd6077e0a8e 293 }
hkjung 0:5cd6077e0a8e 294 }
hkjung 0:5cd6077e0a8e 295
hkjung 0:5cd6077e0a8e 296 search_pt = strstr(resp_str, apn);
hkjung 0:5cd6077e0a8e 297 if (search_pt == 0)
hkjung 0:5cd6077e0a8e 298 {
hkjung 0:5cd6077e0a8e 299 devlog("Mismatched APN: %s\r\n", resp_str);
hkjung 0:5cd6077e0a8e 300 devlog("Storing APN %s...\r\n", apn);
hkjung 0:5cd6077e0a8e 301 if(!(_parser->send("AT+QICSGP=1,%d,\"%s\",\"\",\"\",0", BG96_APN_PROTOCOL, apn) && _parser->recv("OK")))
hkjung 0:5cd6077e0a8e 302 {
hkjung 0:5cd6077e0a8e 303 return RET_NOK; // failed
hkjung 0:5cd6077e0a8e 304 }
hkjung 0:5cd6077e0a8e 305 }
hkjung 1:0d7ba45f12b1 306 devlog("APN Check Done\r\n");
hkjung 1:0d7ba45f12b1 307
hkjung 0:5cd6077e0a8e 308 return RET_OK;
hkjung 0:5cd6077e0a8e 309 }
hkjung 0:5cd6077e0a8e 310
hkjung 0:5cd6077e0a8e 311 int8_t getFirmwareVersion_BG96(char * version)
hkjung 0:5cd6077e0a8e 312 {
hkjung 0:5cd6077e0a8e 313 int8_t ret = RET_NOK;
hkjung 0:5cd6077e0a8e 314
hkjung 0:5cd6077e0a8e 315 if(_parser->send("AT+QGMR") && _parser->recv("%s\n", version) && _parser->recv("OK"))
hkjung 0:5cd6077e0a8e 316 {
hkjung 0:5cd6077e0a8e 317 ret = RET_OK;
hkjung 0:5cd6077e0a8e 318 }
hkjung 0:5cd6077e0a8e 319 return ret;
hkjung 0:5cd6077e0a8e 320 }
hkjung 0:5cd6077e0a8e 321
hkjung 0:5cd6077e0a8e 322 int8_t getImeiNumber_BG96(char * imei)
hkjung 0:5cd6077e0a8e 323 {
hkjung 0:5cd6077e0a8e 324 int8_t ret = RET_NOK;
hkjung 0:5cd6077e0a8e 325
hkjung 0:5cd6077e0a8e 326 if(_parser->send("AT+CGSN") && _parser->recv("%s\n", imei) && _parser->recv("OK"))
hkjung 0:5cd6077e0a8e 327 {
hkjung 0:5cd6077e0a8e 328 ret = RET_OK;
hkjung 0:5cd6077e0a8e 329 }
hkjung 0:5cd6077e0a8e 330 return ret;
hkjung 0:5cd6077e0a8e 331 }
hkjung 0:5cd6077e0a8e 332
hkjung 1:0d7ba45f12b1 333 // ----------------------------------------------------------------
hkjung 1:0d7ba45f12b1 334 // Functions: Cat.M1 HTTP send & recv
hkjung 1:0d7ba45f12b1 335 // ----------------------------------------------------------------
hkjung 0:5cd6077e0a8e 336
hkjung 1:0d7ba45f12b1 337 int8_t setHttpRequest_BG96(char * req, int len)
hkjung 0:5cd6077e0a8e 338 {
hkjung 0:5cd6077e0a8e 339 int8_t ret = RET_NOK;
hkjung 0:5cd6077e0a8e 340 bool done = false;
hkjung 0:5cd6077e0a8e 341
hkjung 0:5cd6077e0a8e 342 _parser->set_timeout(BG96_CONNECT_TIMEOUT);
hkjung 0:5cd6077e0a8e 343
hkjung 1:0d7ba45f12b1 344 _parser->send("AT+QHTTPURL=%d,%d", len, 5);
hkjung 1:0d7ba45f12b1 345 if( !done && _parser->recv("CONNECT\r\n") )
hkjung 1:0d7ba45f12b1 346 done = (_parser->write(req, len) <= 0);
hkjung 1:0d7ba45f12b1 347
hkjung 1:0d7ba45f12b1 348 if( !done ) {
hkjung 1:0d7ba45f12b1 349 done = (_parser->recv("OK"));
hkjung 1:0d7ba45f12b1 350 if(done) {
hkjung 1:0d7ba45f12b1 351 devlog("Set HTTP request URL success: %s\r\n", req);
hkjung 1:0d7ba45f12b1 352 ret = RET_OK;
hkjung 1:0d7ba45f12b1 353 }
hkjung 0:5cd6077e0a8e 354 }
hkjung 1:0d7ba45f12b1 355 _parser->set_timeout(BG96_DEFAULT_TIMEOUT);
hkjung 0:5cd6077e0a8e 356
hkjung 0:5cd6077e0a8e 357 return ret;
hkjung 0:5cd6077e0a8e 358 }
hkjung 0:5cd6077e0a8e 359
hkjung 1:0d7ba45f12b1 360
hkjung 1:0d7ba45f12b1 361 int8_t sendHttpRequest_BG96(int timeout, int * rsp_code, int * content_len)
hkjung 0:5cd6077e0a8e 362 {
hkjung 0:5cd6077e0a8e 363 int8_t ret = RET_NOK;
hkjung 1:0d7ba45f12b1 364 int err;
hkjung 0:5cd6077e0a8e 365
hkjung 1:0d7ba45f12b1 366 _parser->set_timeout(BG96_DEFAULT_TIMEOUT + (timeout * 1000));
hkjung 0:5cd6077e0a8e 367
hkjung 1:0d7ba45f12b1 368 if( _parser->send("AT+QHTTPGET=%d", timeout)
hkjung 1:0d7ba45f12b1 369 && _parser->recv("+QHTTPGET: %d,%d,%d\r\n", &err, rsp_code, content_len)
hkjung 1:0d7ba45f12b1 370 && (err == 0))
hkjung 1:0d7ba45f12b1 371 {
hkjung 1:0d7ba45f12b1 372 devlog("The HTTP request is sent and the response is successful\r\n");
hkjung 1:0d7ba45f12b1 373 ret = RET_OK;
hkjung 1:0d7ba45f12b1 374 }
hkjung 1:0d7ba45f12b1 375 _parser->set_timeout(BG96_DEFAULT_TIMEOUT);
hkjung 0:5cd6077e0a8e 376
hkjung 0:5cd6077e0a8e 377 return ret;
hkjung 0:5cd6077e0a8e 378 }
hkjung 0:5cd6077e0a8e 379
hkjung 1:0d7ba45f12b1 380
hkjung 1:0d7ba45f12b1 381 int8_t getHttpResponse_BG96(int timeout, char * buf, int len)
hkjung 0:5cd6077e0a8e 382 {
hkjung 0:5cd6077e0a8e 383 int8_t ret = RET_NOK;
hkjung 1:0d7ba45f12b1 384 bool done = false;
hkjung 1:0d7ba45f12b1 385
hkjung 1:0d7ba45f12b1 386 if( _parser->send("AT+QHTTPREAD=%d", timeout) && _parser->recv("CONNECT\r\n")) {
hkjung 1:0d7ba45f12b1 387 done = _parser->read(buf, len);
hkjung 1:0d7ba45f12b1 388 }
hkjung 0:5cd6077e0a8e 389
hkjung 1:0d7ba45f12b1 390 if(done) {
hkjung 1:0d7ba45f12b1 391 if( _parser->recv("OK") && _parser->recv("+QHTTPREAD: 0")) {
hkjung 1:0d7ba45f12b1 392 ret = RET_OK;
hkjung 1:0d7ba45f12b1 393 }
hkjung 1:0d7ba45f12b1 394 }
hkjung 0:5cd6077e0a8e 395 return ret;
hkjung 0:5cd6077e0a8e 396 }
hkjung 0:5cd6077e0a8e 397
hkjung 1:0d7ba45f12b1 398 void dumpHttpRespones_BG96(char * buf)
hkjung 0:5cd6077e0a8e 399 {
hkjung 1:0d7ba45f12b1 400 myprintf("%s", buf);
hkjung 0:5cd6077e0a8e 401 }