The Hiking Pal tracking device firmware. See full description on the detail page: https://www.hackster.io/bowenfeng/hiking-pal-v1-07c02d

Dependencies:   FXOS8700CQ MODSERIAL mbed

Fork of Avnet_ATT_Cellular_IOT by Avnet

Committer:
fkellermavnet
Date:
Fri Aug 12 19:47:29 2016 +0000
Revision:
73:da723fedfdd2
Parent:
68:6e311c747045
Child:
75:8cc98a3b9c62
Merged in WNC suggestions for:  Check for EXTERR and close and reopen the socket if it occurs.  If sockopen fails send command to close the socket.  Don't use find() on empty strings.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fkellermavnet 68:6e311c747045 1 /* ===================================================================
fkellermavnet 68:6e311c747045 2 Copyright © 2016, AVNET Inc.
fkellermavnet 68:6e311c747045 3
fkellermavnet 68:6e311c747045 4 Licensed under the Apache License, Version 2.0 (the "License");
fkellermavnet 68:6e311c747045 5 you may not use this file except in compliance with the License.
fkellermavnet 68:6e311c747045 6 You may obtain a copy of the License at
fkellermavnet 68:6e311c747045 7
fkellermavnet 68:6e311c747045 8 http://www.apache.org/licenses/LICENSE-2.0
fkellermavnet 68:6e311c747045 9
fkellermavnet 68:6e311c747045 10 Unless required by applicable law or agreed to in writing,
fkellermavnet 68:6e311c747045 11 software distributed under the License is distributed on an
fkellermavnet 68:6e311c747045 12 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
fkellermavnet 68:6e311c747045 13 either express or implied. See the License for the specific
fkellermavnet 68:6e311c747045 14 language governing permissions and limitations under the License.
fkellermavnet 68:6e311c747045 15
fkellermavnet 68:6e311c747045 16 ======================================================================== */
fkellermavnet 68:6e311c747045 17
stefanrousseau 61:f6b93129f954 18 #include "mbed.h"
stefanrousseau 61:f6b93129f954 19 #include <cctype>
stefanrousseau 61:f6b93129f954 20 #include <string>
stefanrousseau 61:f6b93129f954 21
stefanrousseau 61:f6b93129f954 22 #include "config_me.h"
stefanrousseau 61:f6b93129f954 23 #include "wnc_control.h"
stefanrousseau 61:f6b93129f954 24 #include "hardware.h"
stefanrousseau 61:f6b93129f954 25
stefanrousseau 61:f6b93129f954 26 #define MDM_DBG_OFF 0
stefanrousseau 61:f6b93129f954 27 #define MDM_DBG_AT_CMDS (1 << 0)
stefanrousseau 61:f6b93129f954 28 int mdm_dbgmask = MDM_DBG_OFF;
stefanrousseau 61:f6b93129f954 29
stefanrousseau 61:f6b93129f954 30 #define WNC_WAIT_FOR_AT_CMD_MS 40
stefanrousseau 61:f6b93129f954 31
stefanrousseau 61:f6b93129f954 32 DigitalOut mdm_uart2_rx_boot_mode_sel(PTC17); // on powerup, 0 = boot mode, 1 = normal boot
stefanrousseau 61:f6b93129f954 33 DigitalOut mdm_power_on(PTB9); // 0 = turn modem on, 1 = turn modem off (should be held high for >5 seconds to cycle modem)
stefanrousseau 61:f6b93129f954 34 DigitalOut mdm_wakeup_in(PTC2); // 0 = let modem sleep, 1 = keep modem awake -- Note: pulled high on shield
stefanrousseau 61:f6b93129f954 35
stefanrousseau 61:f6b93129f954 36 DigitalOut mdm_reset(PTC12); // active high
stefanrousseau 61:f6b93129f954 37
stefanrousseau 61:f6b93129f954 38 DigitalOut shield_3v3_1v8_sig_trans_ena(PTC4); // 0 = disabled (all signals high impedence, 1 = translation active
stefanrousseau 61:f6b93129f954 39 DigitalOut mdm_uart1_cts(PTD0);
stefanrousseau 61:f6b93129f954 40
stefanrousseau 61:f6b93129f954 41 #define TOUPPER(a) (a) //toupper(a)
stefanrousseau 61:f6b93129f954 42
stefanrousseau 61:f6b93129f954 43 const char ok_str[] = "OK";
stefanrousseau 61:f6b93129f954 44 const char error_str[] = "ERROR";
stefanrousseau 61:f6b93129f954 45
stefanrousseau 61:f6b93129f954 46 #define MDM_OK 0
stefanrousseau 61:f6b93129f954 47 #define MDM_ERR_TIMEOUT -1
stefanrousseau 61:f6b93129f954 48
stefanrousseau 61:f6b93129f954 49 #define MAX_AT_RSP_LEN 255
stefanrousseau 61:f6b93129f954 50
stefanrousseau 61:f6b93129f954 51 ssize_t mdm_getline(char *buff, size_t size, int timeout_ms) {
stefanrousseau 61:f6b93129f954 52 int cin = -1;
stefanrousseau 61:f6b93129f954 53 int cin_last;
stefanrousseau 61:f6b93129f954 54
stefanrousseau 61:f6b93129f954 55 if (NULL == buff || size == 0) {
stefanrousseau 61:f6b93129f954 56 return -1;
stefanrousseau 61:f6b93129f954 57 }
stefanrousseau 61:f6b93129f954 58
stefanrousseau 61:f6b93129f954 59 size_t len = 0;
stefanrousseau 61:f6b93129f954 60 Timer timer;
stefanrousseau 61:f6b93129f954 61 timer.start();
stefanrousseau 61:f6b93129f954 62 while ((len < (size-1)) && (timer.read_ms() < timeout_ms)) {
stefanrousseau 61:f6b93129f954 63 if (mdm.readable()) {
stefanrousseau 61:f6b93129f954 64 cin_last = cin;
stefanrousseau 61:f6b93129f954 65 cin = mdm.getc();
stefanrousseau 61:f6b93129f954 66 if (isprint(cin)) {
stefanrousseau 61:f6b93129f954 67 buff[len++] = (char)cin;
stefanrousseau 61:f6b93129f954 68 continue;
stefanrousseau 61:f6b93129f954 69 } else if (('\r' == cin_last) && ('\n' == cin)) {
stefanrousseau 61:f6b93129f954 70 break;
stefanrousseau 61:f6b93129f954 71 }
stefanrousseau 61:f6b93129f954 72 }
stefanrousseau 61:f6b93129f954 73 // wait_ms(1);
stefanrousseau 61:f6b93129f954 74 }
stefanrousseau 61:f6b93129f954 75 buff[len] = (char)NULL;
stefanrousseau 61:f6b93129f954 76
stefanrousseau 61:f6b93129f954 77 return len;
stefanrousseau 61:f6b93129f954 78 }
stefanrousseau 61:f6b93129f954 79
stefanrousseau 61:f6b93129f954 80 int mdm_sendAtCmd(const char *cmd, const char **rsp_list, int timeout_ms) {
stefanrousseau 61:f6b93129f954 81 // Per WNC wait:
stefanrousseau 61:f6b93129f954 82 wait_ms(WNC_WAIT_FOR_AT_CMD_MS);
stefanrousseau 61:f6b93129f954 83
stefanrousseau 61:f6b93129f954 84 if (cmd && strlen(cmd) > 0) {
stefanrousseau 61:f6b93129f954 85 if (mdm_dbgmask & MDM_DBG_AT_CMDS) {
stefanrousseau 64:09004cd610df 86 PRINTF(MAG "ATCMD: " DEF "--> " GRN "%s" DEF "\n", cmd);
stefanrousseau 61:f6b93129f954 87 }
stefanrousseau 61:f6b93129f954 88 mdm.puts(cmd);
stefanrousseau 61:f6b93129f954 89 mdm.puts("\r\n");
stefanrousseau 61:f6b93129f954 90 }
stefanrousseau 61:f6b93129f954 91
stefanrousseau 61:f6b93129f954 92 if (rsp_list) {
stefanrousseau 61:f6b93129f954 93 Timer timer;
stefanrousseau 61:f6b93129f954 94 char rsp[MAX_AT_RSP_LEN+1];
stefanrousseau 61:f6b93129f954 95 int len;
stefanrousseau 61:f6b93129f954 96
stefanrousseau 61:f6b93129f954 97 timer.start();
stefanrousseau 61:f6b93129f954 98 while (timer.read_ms() < timeout_ms) {
stefanrousseau 61:f6b93129f954 99 len = mdm_getline(rsp, sizeof(rsp), timeout_ms - timer.read_ms());
stefanrousseau 61:f6b93129f954 100
stefanrousseau 61:f6b93129f954 101 if (len < 0)
stefanrousseau 61:f6b93129f954 102 return MDM_ERR_TIMEOUT;
stefanrousseau 61:f6b93129f954 103
stefanrousseau 61:f6b93129f954 104 if (len == 0)
stefanrousseau 61:f6b93129f954 105 continue;
stefanrousseau 61:f6b93129f954 106
stefanrousseau 61:f6b93129f954 107 if (mdm_dbgmask & MDM_DBG_AT_CMDS) {
stefanrousseau 64:09004cd610df 108 PRINTF(MAG "ATRSP: " DEF "<-- " CYN "%s" DEF "\n", rsp);
stefanrousseau 61:f6b93129f954 109 }
stefanrousseau 61:f6b93129f954 110
stefanrousseau 61:f6b93129f954 111 if (rsp_list) {
stefanrousseau 61:f6b93129f954 112 int rsp_idx = 0;
stefanrousseau 61:f6b93129f954 113 while (rsp_list[rsp_idx]) {
stefanrousseau 61:f6b93129f954 114 if (strcasecmp(rsp, rsp_list[rsp_idx]) == 0) {
stefanrousseau 61:f6b93129f954 115 return rsp_idx;
stefanrousseau 61:f6b93129f954 116 }
stefanrousseau 61:f6b93129f954 117 rsp_idx++;
stefanrousseau 61:f6b93129f954 118 }
stefanrousseau 61:f6b93129f954 119 }
stefanrousseau 61:f6b93129f954 120 }
stefanrousseau 61:f6b93129f954 121 return MDM_ERR_TIMEOUT;
stefanrousseau 61:f6b93129f954 122 }
stefanrousseau 61:f6b93129f954 123 return MDM_OK;
stefanrousseau 61:f6b93129f954 124 }
stefanrousseau 61:f6b93129f954 125
stefanrousseau 61:f6b93129f954 126 int mdm_init(void) {
stefanrousseau 61:f6b93129f954 127 // Hard reset the modem (doesn't go through
stefanrousseau 61:f6b93129f954 128 // the signal level translator)
stefanrousseau 61:f6b93129f954 129 mdm_reset = 0;
stefanrousseau 61:f6b93129f954 130
stefanrousseau 61:f6b93129f954 131 // disable signal level translator (necessary
stefanrousseau 61:f6b93129f954 132 // for the modem to boot properly). All signals
stefanrousseau 61:f6b93129f954 133 // except mdm_reset go through the level translator
stefanrousseau 61:f6b93129f954 134 // and have internal pull-up/down in the module. While
stefanrousseau 61:f6b93129f954 135 // the level translator is disabled, these pins will
stefanrousseau 61:f6b93129f954 136 // be in the correct state.
stefanrousseau 61:f6b93129f954 137 shield_3v3_1v8_sig_trans_ena = 0;
stefanrousseau 61:f6b93129f954 138
stefanrousseau 61:f6b93129f954 139 // While the level translator is disabled and ouptut pins
stefanrousseau 61:f6b93129f954 140 // are tristated, make sure the inputs are in the same state
stefanrousseau 61:f6b93129f954 141 // as the WNC Module pins so that when the level translator is
stefanrousseau 61:f6b93129f954 142 // enabled, there are no differences.
stefanrousseau 61:f6b93129f954 143 mdm_uart2_rx_boot_mode_sel = 1; // UART2_RX should be high
stefanrousseau 61:f6b93129f954 144 mdm_power_on = 0; // powr_on should be low
stefanrousseau 61:f6b93129f954 145 mdm_wakeup_in = 1; // wake-up should be high
stefanrousseau 61:f6b93129f954 146 mdm_uart1_cts = 0; // indicate that it is ok to send
stefanrousseau 61:f6b93129f954 147
stefanrousseau 61:f6b93129f954 148 // Now, wait for the WNC Module to perform its initial boot correctly
stefanrousseau 61:f6b93129f954 149 wait(1.0);
stefanrousseau 61:f6b93129f954 150
stefanrousseau 61:f6b93129f954 151 // The WNC module initializes comms at 115200 8N1 so set it up
stefanrousseau 61:f6b93129f954 152 mdm.baud(115200);
stefanrousseau 61:f6b93129f954 153
stefanrousseau 61:f6b93129f954 154 //Now, enable the level translator, the input pins should now be the
stefanrousseau 61:f6b93129f954 155 //same as how the M14A module is driving them with internal pull ups/downs.
stefanrousseau 61:f6b93129f954 156 //When enabled, there will be no changes in these 4 pins...
stefanrousseau 61:f6b93129f954 157 shield_3v3_1v8_sig_trans_ena = 1;
stefanrousseau 61:f6b93129f954 158
stefanrousseau 61:f6b93129f954 159 // Now, give the modem 60 seconds to start responding by
stefanrousseau 61:f6b93129f954 160 // sending simple 'AT' commands to modem once per second.
stefanrousseau 61:f6b93129f954 161 Timer timer;
stefanrousseau 61:f6b93129f954 162 timer.start();
stefanrousseau 61:f6b93129f954 163 while (timer.read() < 60) {
stefanrousseau 61:f6b93129f954 164 const char * rsp_lst[] = { ok_str, error_str, NULL };
stefanrousseau 61:f6b93129f954 165 int rc = mdm_sendAtCmd("AT", rsp_lst, 500);
stefanrousseau 61:f6b93129f954 166 if (rc == 0)
stefanrousseau 61:f6b93129f954 167 return true; //timer.read();
stefanrousseau 61:f6b93129f954 168 wait_ms(1000 - (timer.read_ms() % 1000));
stefanrousseau 64:09004cd610df 169 PRINTF("\r%d",timer.read_ms()/1000);
stefanrousseau 61:f6b93129f954 170 }
stefanrousseau 61:f6b93129f954 171 return false;
stefanrousseau 61:f6b93129f954 172 }
stefanrousseau 61:f6b93129f954 173
stefanrousseau 61:f6b93129f954 174 int mdm_sendAtCmdRsp(const char *cmd, const char **rsp_list, int timeout_ms, string * rsp, int * len) {
stefanrousseau 61:f6b93129f954 175 static char cmd_buf[3200]; // Need enough room for the WNC sockreads (over 3000 chars)
stefanrousseau 61:f6b93129f954 176 size_t n = strlen(cmd);
stefanrousseau 61:f6b93129f954 177
stefanrousseau 61:f6b93129f954 178 // Per WNC wait:
stefanrousseau 61:f6b93129f954 179 wait_ms(WNC_WAIT_FOR_AT_CMD_MS);
stefanrousseau 61:f6b93129f954 180
stefanrousseau 61:f6b93129f954 181 if (cmd && n > 0) {
stefanrousseau 61:f6b93129f954 182 if (mdm_dbgmask & MDM_DBG_AT_CMDS) {
stefanrousseau 64:09004cd610df 183 PRINTF(MAG "ATCMD: " DEF "--> " GRN "%s" DEF "\n", cmd);
stefanrousseau 61:f6b93129f954 184 }
stefanrousseau 61:f6b93129f954 185 // mdm.puts(cmd);
stefanrousseau 61:f6b93129f954 186 // mdm.puts("\r\n");
stefanrousseau 61:f6b93129f954 187 while (n--) {
stefanrousseau 61:f6b93129f954 188 mdm.putc(*cmd++);
stefanrousseau 61:f6b93129f954 189 wait_us(1000);
stefanrousseau 61:f6b93129f954 190 };
stefanrousseau 61:f6b93129f954 191 mdm.putc('\r');
stefanrousseau 61:f6b93129f954 192 wait_us(1000);
stefanrousseau 61:f6b93129f954 193 mdm.putc('\n');
stefanrousseau 61:f6b93129f954 194 wait_us(1000);
stefanrousseau 61:f6b93129f954 195 }
stefanrousseau 61:f6b93129f954 196
stefanrousseau 61:f6b93129f954 197 if (rsp_list) {
stefanrousseau 61:f6b93129f954 198 rsp->erase(); // Clean up from prior cmd response
stefanrousseau 61:f6b93129f954 199 *len = 0;
stefanrousseau 61:f6b93129f954 200 Timer timer;
stefanrousseau 61:f6b93129f954 201 timer.start();
stefanrousseau 61:f6b93129f954 202 while (timer.read_ms() < timeout_ms) {
stefanrousseau 61:f6b93129f954 203 int lenCmd = mdm_getline(cmd_buf, sizeof(cmd_buf), timeout_ms - timer.read_ms());
stefanrousseau 61:f6b93129f954 204
stefanrousseau 61:f6b93129f954 205 if (lenCmd == 0)
stefanrousseau 61:f6b93129f954 206 continue;
stefanrousseau 61:f6b93129f954 207
stefanrousseau 61:f6b93129f954 208 if (lenCmd < 0)
stefanrousseau 61:f6b93129f954 209 return MDM_ERR_TIMEOUT;
stefanrousseau 61:f6b93129f954 210 else {
stefanrousseau 61:f6b93129f954 211 *len += lenCmd;
stefanrousseau 61:f6b93129f954 212 *rsp += cmd_buf;
stefanrousseau 61:f6b93129f954 213 }
stefanrousseau 61:f6b93129f954 214
stefanrousseau 61:f6b93129f954 215 if (mdm_dbgmask & MDM_DBG_AT_CMDS) {
stefanrousseau 64:09004cd610df 216 PRINTF(MAG "ATRSP: " DEF "<-- " CYN "%s" DEF "\n", cmd_buf);
stefanrousseau 61:f6b93129f954 217 }
stefanrousseau 61:f6b93129f954 218
stefanrousseau 61:f6b93129f954 219 int rsp_idx = 0;
fkellermavnet 73:da723fedfdd2 220 // TODO: Test if @EXTERR:<code>
stefanrousseau 61:f6b93129f954 221 while (rsp_list[rsp_idx]) {
stefanrousseau 61:f6b93129f954 222 if (strcasecmp(cmd_buf, rsp_list[rsp_idx]) == 0) {
stefanrousseau 61:f6b93129f954 223 return rsp_idx;
fkellermavnet 73:da723fedfdd2 224 } else if (strncmp(cmd_buf, "@EXTERR", 7) == 0){
fkellermavnet 73:da723fedfdd2 225 return rsp_idx;
stefanrousseau 61:f6b93129f954 226 }
stefanrousseau 61:f6b93129f954 227 rsp_idx++;
stefanrousseau 61:f6b93129f954 228 }
stefanrousseau 61:f6b93129f954 229 }
stefanrousseau 61:f6b93129f954 230 return MDM_ERR_TIMEOUT;
stefanrousseau 61:f6b93129f954 231 }
stefanrousseau 61:f6b93129f954 232
stefanrousseau 61:f6b93129f954 233 return MDM_OK;
stefanrousseau 61:f6b93129f954 234 }
stefanrousseau 61:f6b93129f954 235
stefanrousseau 61:f6b93129f954 236 void reinitialize_mdm(void)
stefanrousseau 61:f6b93129f954 237 {
stefanrousseau 61:f6b93129f954 238 // Initialize the modem
stefanrousseau 64:09004cd610df 239 PRINTF(GRN "Modem RE-initializing..." DEF "\r\n");
stefanrousseau 61:f6b93129f954 240 if (!mdm_init()) {
stefanrousseau 64:09004cd610df 241 PRINTF(RED "\n\rModem RE-initialization failed!" DEF "\n");
stefanrousseau 61:f6b93129f954 242 }
stefanrousseau 64:09004cd610df 243 PRINTF("\r\n");
stefanrousseau 61:f6b93129f954 244 }
stefanrousseau 61:f6b93129f954 245 // These are built on the fly
stefanrousseau 61:f6b93129f954 246 string MyServerIpAddress;
stefanrousseau 61:f6b93129f954 247 string MySocketData;
stefanrousseau 61:f6b93129f954 248
stefanrousseau 61:f6b93129f954 249 //********************************************************************************************************************************************
stefanrousseau 61:f6b93129f954 250 //* Process JSON response messages
stefanrousseau 61:f6b93129f954 251 //********************************************************************************************************************************************
stefanrousseau 61:f6b93129f954 252 bool extract_JSON(char* search_field, char* found_string)
stefanrousseau 61:f6b93129f954 253 {
stefanrousseau 61:f6b93129f954 254 char* beginquote;
stefanrousseau 61:f6b93129f954 255 char* endquote;
stefanrousseau 61:f6b93129f954 256 beginquote = strchr(search_field, '{'); //start of JSON
stefanrousseau 61:f6b93129f954 257 endquote = strchr(search_field, '}'); //end of JSON
stefanrousseau 61:f6b93129f954 258 if (beginquote)
stefanrousseau 61:f6b93129f954 259 {
stefanrousseau 61:f6b93129f954 260 uint16_t ifoundlen;
stefanrousseau 61:f6b93129f954 261 if (endquote)
stefanrousseau 61:f6b93129f954 262 {
stefanrousseau 61:f6b93129f954 263 ifoundlen = (uint16_t) (endquote - beginquote) + 1;
stefanrousseau 61:f6b93129f954 264 strncpy(found_string, beginquote, ifoundlen );
stefanrousseau 61:f6b93129f954 265 found_string[ifoundlen] = 0; //null terminate
stefanrousseau 61:f6b93129f954 266 return true;
stefanrousseau 61:f6b93129f954 267 }
stefanrousseau 61:f6b93129f954 268 else
stefanrousseau 61:f6b93129f954 269 {
stefanrousseau 61:f6b93129f954 270 endquote = strchr(search_field, '\0'); //end of string... sometimes the end bracket is missing
stefanrousseau 61:f6b93129f954 271 ifoundlen = (uint16_t) (endquote - beginquote) + 1;
stefanrousseau 61:f6b93129f954 272 strncpy(found_string, beginquote, ifoundlen );
stefanrousseau 61:f6b93129f954 273 found_string[ifoundlen] = 0; //null terminate
stefanrousseau 61:f6b93129f954 274 return false;
stefanrousseau 61:f6b93129f954 275 }
stefanrousseau 61:f6b93129f954 276 }
stefanrousseau 61:f6b93129f954 277 else
stefanrousseau 61:f6b93129f954 278 {
stefanrousseau 61:f6b93129f954 279 return false;
stefanrousseau 61:f6b93129f954 280 }
stefanrousseau 61:f6b93129f954 281 } //extract_JSON
stefanrousseau 61:f6b93129f954 282
stefanrousseau 61:f6b93129f954 283 int cell_modem_init()
stefanrousseau 61:f6b93129f954 284 {
stefanrousseau 61:f6b93129f954 285 int i;
stefanrousseau 61:f6b93129f954 286
stefanrousseau 61:f6b93129f954 287 pc.baud(115200);
stefanrousseau 61:f6b93129f954 288 // Initialize the modem
stefanrousseau 64:09004cd610df 289 PRINTF(GRN "Modem initializing... will take up to 60 seconds" DEF "\r\n");
stefanrousseau 61:f6b93129f954 290 do {
stefanrousseau 61:f6b93129f954 291 i=mdm_init();
stefanrousseau 61:f6b93129f954 292 if (!i) {
stefanrousseau 64:09004cd610df 293 PRINTF(RED "Modem initialization failed!" DEF "\n");
stefanrousseau 61:f6b93129f954 294 }
stefanrousseau 61:f6b93129f954 295 } while (!i);
stefanrousseau 61:f6b93129f954 296
stefanrousseau 61:f6b93129f954 297 //Software init
stefanrousseau 61:f6b93129f954 298 software_init_mdm();
stefanrousseau 61:f6b93129f954 299
stefanrousseau 61:f6b93129f954 300 // Resolve URL to IP address to connect to
stefanrousseau 61:f6b93129f954 301 resolve_mdm();
stefanrousseau 61:f6b93129f954 302 // Open the socket (connect to the server)
stefanrousseau 61:f6b93129f954 303 sockopen_mdm();
stefanrousseau 61:f6b93129f954 304 return (0);
stefanrousseau 61:f6b93129f954 305 }
stefanrousseau 61:f6b93129f954 306
stefanrousseau 61:f6b93129f954 307 int cell_modem_Sendreceive(char* tx_string, char* rx_string)
stefanrousseau 61:f6b93129f954 308 {
stefanrousseau 61:f6b93129f954 309 int iStatus = 0; //error by default
stefanrousseau 64:09004cd610df 310 PRINTF(DEF "\r\n");
stefanrousseau 64:09004cd610df 311 PRINTF(BLU "Sending to modem : %s" DEF "\r\n", &tx_string[0]);
stefanrousseau 61:f6b93129f954 312 sockwrite_mdm(&tx_string[0]);
stefanrousseau 61:f6b93129f954 313 if (sockread_mdm(&MySocketData, 1024, 20))
stefanrousseau 61:f6b93129f954 314 {
stefanrousseau 64:09004cd610df 315 PRINTF(DEF "\r\n");
stefanrousseau 64:09004cd610df 316 PRINTF(YEL "Read back : %s" DEF "\r\n", &MySocketData[0]);
stefanrousseau 61:f6b93129f954 317 char stringToCharBuf[BUF_SIZE_FOR_N_MAX_SOCKREAD*MAX_WNC_SOCKREAD_PAYLOAD+1]; // WNC can return max of 1500 (per sockread)
stefanrousseau 61:f6b93129f954 318 if ((MySocketData.length() + 1) < sizeof(stringToCharBuf))
stefanrousseau 61:f6b93129f954 319 {
stefanrousseau 61:f6b93129f954 320 strcpy(stringToCharBuf, MySocketData.c_str());
stefanrousseau 61:f6b93129f954 321 if (extract_JSON(stringToCharBuf, &rx_string[0]))
stefanrousseau 61:f6b93129f954 322 {
stefanrousseau 64:09004cd610df 323 PRINTF(GRN "JSON : %s" DEF "\n", &rx_string[0]);
stefanrousseau 61:f6b93129f954 324 iStatus = 1; //all good
stefanrousseau 61:f6b93129f954 325 }
stefanrousseau 61:f6b93129f954 326 }
stefanrousseau 61:f6b93129f954 327 else
stefanrousseau 61:f6b93129f954 328 {
stefanrousseau 64:09004cd610df 329 PRINTF(RED "BUFFER not big enough for sock data!" DEF "\r\n");
stefanrousseau 61:f6b93129f954 330 }
stefanrousseau 61:f6b93129f954 331 }
stefanrousseau 61:f6b93129f954 332 else
stefanrousseau 61:f6b93129f954 333 {
stefanrousseau 64:09004cd610df 334 PRINTF(RED "No response..." DEF "\r\n");
stefanrousseau 61:f6b93129f954 335 }
stefanrousseau 61:f6b93129f954 336 return iStatus;
stefanrousseau 61:f6b93129f954 337 }
stefanrousseau 61:f6b93129f954 338