Modified example with AT command traces for AT%MEAS, AT%PCONI and AT%CGEQOS. Loading times calculated for each cloud transfer

Dependencies:   FXOS8700CQ MODSERIAL mbed

Fork of Avnet_ATT_Cellular_IOT by Avnet

Committer:
nrithya
Date:
Thu Dec 14 00:23:22 2017 +0000
Revision:
82:340a51ed8760
Parent:
78:00cca62e5d9f
added AT% commands PCONI,MEAS,CGEQOS and loading times in cell_modem.cpp

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fkellermavnet 68:6e311c747045 1 /* ===================================================================
fkellermavnet 74:3e3ee15584e5 2 Copyright c 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
nrithya 82:340a51ed8760 51 Timer t;
nrithya 82:340a51ed8760 52
stefanrousseau 61:f6b93129f954 53 ssize_t mdm_getline(char *buff, size_t size, int timeout_ms) {
stefanrousseau 61:f6b93129f954 54 int cin = -1;
stefanrousseau 61:f6b93129f954 55 int cin_last;
stefanrousseau 61:f6b93129f954 56
stefanrousseau 61:f6b93129f954 57 if (NULL == buff || size == 0) {
stefanrousseau 61:f6b93129f954 58 return -1;
stefanrousseau 61:f6b93129f954 59 }
stefanrousseau 61:f6b93129f954 60
stefanrousseau 61:f6b93129f954 61 size_t len = 0;
stefanrousseau 61:f6b93129f954 62 Timer timer;
stefanrousseau 61:f6b93129f954 63 timer.start();
stefanrousseau 61:f6b93129f954 64 while ((len < (size-1)) && (timer.read_ms() < timeout_ms)) {
stefanrousseau 61:f6b93129f954 65 if (mdm.readable()) {
stefanrousseau 61:f6b93129f954 66 cin_last = cin;
stefanrousseau 61:f6b93129f954 67 cin = mdm.getc();
stefanrousseau 61:f6b93129f954 68 if (isprint(cin)) {
stefanrousseau 61:f6b93129f954 69 buff[len++] = (char)cin;
stefanrousseau 61:f6b93129f954 70 continue;
stefanrousseau 61:f6b93129f954 71 } else if (('\r' == cin_last) && ('\n' == cin)) {
stefanrousseau 61:f6b93129f954 72 break;
stefanrousseau 61:f6b93129f954 73 }
stefanrousseau 61:f6b93129f954 74 }
stefanrousseau 61:f6b93129f954 75 // wait_ms(1);
stefanrousseau 61:f6b93129f954 76 }
stefanrousseau 61:f6b93129f954 77 buff[len] = (char)NULL;
stefanrousseau 61:f6b93129f954 78
stefanrousseau 61:f6b93129f954 79 return len;
stefanrousseau 61:f6b93129f954 80 }
stefanrousseau 61:f6b93129f954 81
stefanrousseau 61:f6b93129f954 82 int mdm_sendAtCmd(const char *cmd, const char **rsp_list, int timeout_ms) {
stefanrousseau 61:f6b93129f954 83 // Per WNC wait:
stefanrousseau 61:f6b93129f954 84 wait_ms(WNC_WAIT_FOR_AT_CMD_MS);
stefanrousseau 61:f6b93129f954 85
stefanrousseau 61:f6b93129f954 86 if (cmd && strlen(cmd) > 0) {
stefanrousseau 61:f6b93129f954 87 if (mdm_dbgmask & MDM_DBG_AT_CMDS) {
stefanrousseau 64:09004cd610df 88 PRINTF(MAG "ATCMD: " DEF "--> " GRN "%s" DEF "\n", cmd);
stefanrousseau 61:f6b93129f954 89 }
stefanrousseau 61:f6b93129f954 90 mdm.puts(cmd);
stefanrousseau 61:f6b93129f954 91 mdm.puts("\r\n");
stefanrousseau 61:f6b93129f954 92 }
stefanrousseau 61:f6b93129f954 93
stefanrousseau 61:f6b93129f954 94 if (rsp_list) {
stefanrousseau 61:f6b93129f954 95 Timer timer;
stefanrousseau 61:f6b93129f954 96 char rsp[MAX_AT_RSP_LEN+1];
stefanrousseau 61:f6b93129f954 97 int len;
stefanrousseau 61:f6b93129f954 98
stefanrousseau 61:f6b93129f954 99 timer.start();
stefanrousseau 61:f6b93129f954 100 while (timer.read_ms() < timeout_ms) {
stefanrousseau 61:f6b93129f954 101 len = mdm_getline(rsp, sizeof(rsp), timeout_ms - timer.read_ms());
stefanrousseau 61:f6b93129f954 102
stefanrousseau 61:f6b93129f954 103 if (len < 0)
stefanrousseau 61:f6b93129f954 104 return MDM_ERR_TIMEOUT;
stefanrousseau 61:f6b93129f954 105
stefanrousseau 61:f6b93129f954 106 if (len == 0)
stefanrousseau 61:f6b93129f954 107 continue;
stefanrousseau 61:f6b93129f954 108
stefanrousseau 61:f6b93129f954 109 if (mdm_dbgmask & MDM_DBG_AT_CMDS) {
stefanrousseau 64:09004cd610df 110 PRINTF(MAG "ATRSP: " DEF "<-- " CYN "%s" DEF "\n", rsp);
stefanrousseau 61:f6b93129f954 111 }
stefanrousseau 61:f6b93129f954 112
stefanrousseau 61:f6b93129f954 113 if (rsp_list) {
stefanrousseau 61:f6b93129f954 114 int rsp_idx = 0;
stefanrousseau 61:f6b93129f954 115 while (rsp_list[rsp_idx]) {
stefanrousseau 61:f6b93129f954 116 if (strcasecmp(rsp, rsp_list[rsp_idx]) == 0) {
stefanrousseau 61:f6b93129f954 117 return rsp_idx;
fkellermavnet 74:3e3ee15584e5 118 } else if (strncmp(rsp, "@EXTERR", 7) == 0){
fkellermavnet 74:3e3ee15584e5 119 pc.printf("----- We got EXTERR ---\r\n");
fkellermavnet 74:3e3ee15584e5 120 return 2;
fkellermavnet 74:3e3ee15584e5 121 } else if (strncmp(rsp, "+CME", 4) == 0){
fkellermavnet 74:3e3ee15584e5 122 return 3;
fkellermavnet 74:3e3ee15584e5 123 }
stefanrousseau 61:f6b93129f954 124 rsp_idx++;
stefanrousseau 61:f6b93129f954 125 }
stefanrousseau 61:f6b93129f954 126 }
stefanrousseau 61:f6b93129f954 127 }
stefanrousseau 61:f6b93129f954 128 return MDM_ERR_TIMEOUT;
stefanrousseau 61:f6b93129f954 129 }
stefanrousseau 61:f6b93129f954 130 return MDM_OK;
stefanrousseau 61:f6b93129f954 131 }
stefanrousseau 61:f6b93129f954 132
stefanrousseau 61:f6b93129f954 133 int mdm_init(void) {
stefanrousseau 61:f6b93129f954 134 // Hard reset the modem (doesn't go through
stefanrousseau 61:f6b93129f954 135 // the signal level translator)
stefanrousseau 61:f6b93129f954 136 mdm_reset = 0;
stefanrousseau 61:f6b93129f954 137
stefanrousseau 61:f6b93129f954 138 // disable signal level translator (necessary
stefanrousseau 61:f6b93129f954 139 // for the modem to boot properly). All signals
stefanrousseau 61:f6b93129f954 140 // except mdm_reset go through the level translator
stefanrousseau 61:f6b93129f954 141 // and have internal pull-up/down in the module. While
stefanrousseau 61:f6b93129f954 142 // the level translator is disabled, these pins will
stefanrousseau 61:f6b93129f954 143 // be in the correct state.
stefanrousseau 61:f6b93129f954 144 shield_3v3_1v8_sig_trans_ena = 0;
stefanrousseau 61:f6b93129f954 145
stefanrousseau 61:f6b93129f954 146 // While the level translator is disabled and ouptut pins
stefanrousseau 61:f6b93129f954 147 // are tristated, make sure the inputs are in the same state
stefanrousseau 61:f6b93129f954 148 // as the WNC Module pins so that when the level translator is
stefanrousseau 61:f6b93129f954 149 // enabled, there are no differences.
stefanrousseau 61:f6b93129f954 150 mdm_uart2_rx_boot_mode_sel = 1; // UART2_RX should be high
stefanrousseau 61:f6b93129f954 151 mdm_power_on = 0; // powr_on should be low
stefanrousseau 61:f6b93129f954 152 mdm_wakeup_in = 1; // wake-up should be high
stefanrousseau 61:f6b93129f954 153 mdm_uart1_cts = 0; // indicate that it is ok to send
stefanrousseau 61:f6b93129f954 154
stefanrousseau 61:f6b93129f954 155 // Now, wait for the WNC Module to perform its initial boot correctly
stefanrousseau 61:f6b93129f954 156 wait(1.0);
stefanrousseau 61:f6b93129f954 157
stefanrousseau 61:f6b93129f954 158 // The WNC module initializes comms at 115200 8N1 so set it up
stefanrousseau 61:f6b93129f954 159 mdm.baud(115200);
stefanrousseau 61:f6b93129f954 160
stefanrousseau 61:f6b93129f954 161 //Now, enable the level translator, the input pins should now be the
stefanrousseau 61:f6b93129f954 162 //same as how the M14A module is driving them with internal pull ups/downs.
stefanrousseau 61:f6b93129f954 163 //When enabled, there will be no changes in these 4 pins...
stefanrousseau 61:f6b93129f954 164 shield_3v3_1v8_sig_trans_ena = 1;
stefanrousseau 61:f6b93129f954 165
stefanrousseau 61:f6b93129f954 166 // Now, give the modem 60 seconds to start responding by
stefanrousseau 61:f6b93129f954 167 // sending simple 'AT' commands to modem once per second.
stefanrousseau 61:f6b93129f954 168 Timer timer;
stefanrousseau 61:f6b93129f954 169 timer.start();
stefanrousseau 61:f6b93129f954 170 while (timer.read() < 60) {
stefanrousseau 61:f6b93129f954 171 const char * rsp_lst[] = { ok_str, error_str, NULL };
stefanrousseau 61:f6b93129f954 172 int rc = mdm_sendAtCmd("AT", rsp_lst, 500);
stefanrousseau 61:f6b93129f954 173 if (rc == 0)
stefanrousseau 61:f6b93129f954 174 return true; //timer.read();
stefanrousseau 61:f6b93129f954 175 wait_ms(1000 - (timer.read_ms() % 1000));
stefanrousseau 64:09004cd610df 176 PRINTF("\r%d",timer.read_ms()/1000);
stefanrousseau 61:f6b93129f954 177 }
stefanrousseau 61:f6b93129f954 178 return false;
stefanrousseau 61:f6b93129f954 179 }
stefanrousseau 61:f6b93129f954 180
stefanrousseau 61:f6b93129f954 181 int mdm_sendAtCmdRsp(const char *cmd, const char **rsp_list, int timeout_ms, string * rsp, int * len) {
stefanrousseau 61:f6b93129f954 182 static char cmd_buf[3200]; // Need enough room for the WNC sockreads (over 3000 chars)
stefanrousseau 61:f6b93129f954 183 size_t n = strlen(cmd);
stefanrousseau 61:f6b93129f954 184
stefanrousseau 61:f6b93129f954 185 // Per WNC wait:
stefanrousseau 61:f6b93129f954 186 wait_ms(WNC_WAIT_FOR_AT_CMD_MS);
stefanrousseau 61:f6b93129f954 187
stefanrousseau 61:f6b93129f954 188 if (cmd && n > 0) {
stefanrousseau 61:f6b93129f954 189 if (mdm_dbgmask & MDM_DBG_AT_CMDS) {
stefanrousseau 64:09004cd610df 190 PRINTF(MAG "ATCMD: " DEF "--> " GRN "%s" DEF "\n", cmd);
stefanrousseau 61:f6b93129f954 191 }
stefanrousseau 61:f6b93129f954 192 // mdm.puts(cmd);
stefanrousseau 61:f6b93129f954 193 // mdm.puts("\r\n");
stefanrousseau 61:f6b93129f954 194 while (n--) {
stefanrousseau 61:f6b93129f954 195 mdm.putc(*cmd++);
stefanrousseau 61:f6b93129f954 196 wait_us(1000);
stefanrousseau 61:f6b93129f954 197 };
stefanrousseau 61:f6b93129f954 198 mdm.putc('\r');
stefanrousseau 61:f6b93129f954 199 wait_us(1000);
stefanrousseau 61:f6b93129f954 200 mdm.putc('\n');
stefanrousseau 61:f6b93129f954 201 wait_us(1000);
stefanrousseau 61:f6b93129f954 202 }
stefanrousseau 61:f6b93129f954 203
stefanrousseau 61:f6b93129f954 204 if (rsp_list) {
stefanrousseau 61:f6b93129f954 205 rsp->erase(); // Clean up from prior cmd response
stefanrousseau 61:f6b93129f954 206 *len = 0;
stefanrousseau 61:f6b93129f954 207 Timer timer;
stefanrousseau 61:f6b93129f954 208 timer.start();
stefanrousseau 61:f6b93129f954 209 while (timer.read_ms() < timeout_ms) {
stefanrousseau 61:f6b93129f954 210 int lenCmd = mdm_getline(cmd_buf, sizeof(cmd_buf), timeout_ms - timer.read_ms());
stefanrousseau 61:f6b93129f954 211
stefanrousseau 61:f6b93129f954 212 if (lenCmd == 0)
stefanrousseau 61:f6b93129f954 213 continue;
stefanrousseau 61:f6b93129f954 214
stefanrousseau 61:f6b93129f954 215 if (lenCmd < 0)
stefanrousseau 61:f6b93129f954 216 return MDM_ERR_TIMEOUT;
stefanrousseau 61:f6b93129f954 217 else {
stefanrousseau 61:f6b93129f954 218 *len += lenCmd;
stefanrousseau 61:f6b93129f954 219 *rsp += cmd_buf;
stefanrousseau 61:f6b93129f954 220 }
stefanrousseau 61:f6b93129f954 221
stefanrousseau 61:f6b93129f954 222 if (mdm_dbgmask & MDM_DBG_AT_CMDS) {
stefanrousseau 64:09004cd610df 223 PRINTF(MAG "ATRSP: " DEF "<-- " CYN "%s" DEF "\n", cmd_buf);
stefanrousseau 61:f6b93129f954 224 }
stefanrousseau 61:f6b93129f954 225
stefanrousseau 61:f6b93129f954 226 int rsp_idx = 0;
fkellermavnet 73:da723fedfdd2 227 // TODO: Test if @EXTERR:<code>
stefanrousseau 61:f6b93129f954 228 while (rsp_list[rsp_idx]) {
stefanrousseau 61:f6b93129f954 229 if (strcasecmp(cmd_buf, rsp_list[rsp_idx]) == 0) {
stefanrousseau 61:f6b93129f954 230 return rsp_idx;
fkellermavnet 73:da723fedfdd2 231 } else if (strncmp(cmd_buf, "@EXTERR", 7) == 0){
fkellermavnet 75:8cc98a3b9c62 232 PRINTF("----- We got EXTERR ---\r\n");
fkellermavnet 74:3e3ee15584e5 233 return 2;
fkellermavnet 74:3e3ee15584e5 234 } else if (strncmp(cmd_buf, "+CME", 4) == 0){
fkellermavnet 74:3e3ee15584e5 235 return 3;
fkellermavnet 74:3e3ee15584e5 236 }
stefanrousseau 61:f6b93129f954 237 rsp_idx++;
stefanrousseau 61:f6b93129f954 238 }
stefanrousseau 61:f6b93129f954 239 }
stefanrousseau 61:f6b93129f954 240 return MDM_ERR_TIMEOUT;
stefanrousseau 61:f6b93129f954 241 }
stefanrousseau 61:f6b93129f954 242
stefanrousseau 61:f6b93129f954 243 return MDM_OK;
stefanrousseau 61:f6b93129f954 244 }
stefanrousseau 61:f6b93129f954 245
stefanrousseau 61:f6b93129f954 246 void reinitialize_mdm(void)
stefanrousseau 61:f6b93129f954 247 {
stefanrousseau 61:f6b93129f954 248 // Initialize the modem
stefanrousseau 64:09004cd610df 249 PRINTF(GRN "Modem RE-initializing..." DEF "\r\n");
stefanrousseau 61:f6b93129f954 250 if (!mdm_init()) {
stefanrousseau 64:09004cd610df 251 PRINTF(RED "\n\rModem RE-initialization failed!" DEF "\n");
stefanrousseau 61:f6b93129f954 252 }
stefanrousseau 64:09004cd610df 253 PRINTF("\r\n");
stefanrousseau 61:f6b93129f954 254 }
stefanrousseau 61:f6b93129f954 255 // These are built on the fly
stefanrousseau 61:f6b93129f954 256 string MyServerIpAddress;
stefanrousseau 61:f6b93129f954 257 string MySocketData;
stefanrousseau 61:f6b93129f954 258
stefanrousseau 61:f6b93129f954 259 //********************************************************************************************************************************************
stefanrousseau 61:f6b93129f954 260 //* Process JSON response messages
stefanrousseau 61:f6b93129f954 261 //********************************************************************************************************************************************
stefanrousseau 61:f6b93129f954 262 bool extract_JSON(char* search_field, char* found_string)
stefanrousseau 61:f6b93129f954 263 {
stefanrousseau 61:f6b93129f954 264 char* beginquote;
stefanrousseau 61:f6b93129f954 265 char* endquote;
stefanrousseau 61:f6b93129f954 266 beginquote = strchr(search_field, '{'); //start of JSON
stefanrousseau 61:f6b93129f954 267 endquote = strchr(search_field, '}'); //end of JSON
stefanrousseau 61:f6b93129f954 268 if (beginquote)
stefanrousseau 61:f6b93129f954 269 {
stefanrousseau 61:f6b93129f954 270 uint16_t ifoundlen;
stefanrousseau 61:f6b93129f954 271 if (endquote)
stefanrousseau 61:f6b93129f954 272 {
stefanrousseau 61:f6b93129f954 273 ifoundlen = (uint16_t) (endquote - beginquote) + 1;
stefanrousseau 61:f6b93129f954 274 strncpy(found_string, beginquote, ifoundlen );
stefanrousseau 61:f6b93129f954 275 found_string[ifoundlen] = 0; //null terminate
stefanrousseau 61:f6b93129f954 276 return true;
stefanrousseau 61:f6b93129f954 277 }
stefanrousseau 61:f6b93129f954 278 else
stefanrousseau 61:f6b93129f954 279 {
stefanrousseau 61:f6b93129f954 280 endquote = strchr(search_field, '\0'); //end of string... sometimes the end bracket is missing
stefanrousseau 61:f6b93129f954 281 ifoundlen = (uint16_t) (endquote - beginquote) + 1;
stefanrousseau 61:f6b93129f954 282 strncpy(found_string, beginquote, ifoundlen );
stefanrousseau 61:f6b93129f954 283 found_string[ifoundlen] = 0; //null terminate
stefanrousseau 61:f6b93129f954 284 return false;
stefanrousseau 61:f6b93129f954 285 }
stefanrousseau 61:f6b93129f954 286 }
stefanrousseau 61:f6b93129f954 287 else
stefanrousseau 61:f6b93129f954 288 {
stefanrousseau 61:f6b93129f954 289 return false;
stefanrousseau 61:f6b93129f954 290 }
stefanrousseau 61:f6b93129f954 291 } //extract_JSON
stefanrousseau 61:f6b93129f954 292
stefanrousseau 61:f6b93129f954 293 int cell_modem_init()
stefanrousseau 61:f6b93129f954 294 {
stefanrousseau 61:f6b93129f954 295 int i;
stefanrousseau 61:f6b93129f954 296
stefanrousseau 61:f6b93129f954 297 pc.baud(115200);
stefanrousseau 61:f6b93129f954 298 // Initialize the modem
stefanrousseau 64:09004cd610df 299 PRINTF(GRN "Modem initializing... will take up to 60 seconds" DEF "\r\n");
stefanrousseau 61:f6b93129f954 300 do {
stefanrousseau 61:f6b93129f954 301 i=mdm_init();
stefanrousseau 61:f6b93129f954 302 if (!i) {
stefanrousseau 64:09004cd610df 303 PRINTF(RED "Modem initialization failed!" DEF "\n");
stefanrousseau 61:f6b93129f954 304 }
stefanrousseau 61:f6b93129f954 305 } while (!i);
stefanrousseau 61:f6b93129f954 306
stefanrousseau 61:f6b93129f954 307 //Software init
stefanrousseau 61:f6b93129f954 308 software_init_mdm();
stefanrousseau 61:f6b93129f954 309
stefanrousseau 61:f6b93129f954 310 // Resolve URL to IP address to connect to
stefanrousseau 61:f6b93129f954 311 resolve_mdm();
stefanrousseau 61:f6b93129f954 312 // Open the socket (connect to the server)
stefanrousseau 61:f6b93129f954 313 sockopen_mdm();
stefanrousseau 61:f6b93129f954 314 return (0);
stefanrousseau 61:f6b93129f954 315 }
stefanrousseau 61:f6b93129f954 316
stefanrousseau 61:f6b93129f954 317 int cell_modem_Sendreceive(char* tx_string, char* rx_string)
stefanrousseau 61:f6b93129f954 318 {
stefanrousseau 61:f6b93129f954 319 int iStatus = 0; //error by default
stefanrousseau 64:09004cd610df 320 PRINTF(DEF "\r\n");
nrithya 82:340a51ed8760 321 t.start();
stefanrousseau 64:09004cd610df 322 PRINTF(BLU "Sending to modem : %s" DEF "\r\n", &tx_string[0]);
stefanrousseau 61:f6b93129f954 323 sockwrite_mdm(&tx_string[0]);
stefanrousseau 61:f6b93129f954 324 if (sockread_mdm(&MySocketData, 1024, 20))
stefanrousseau 61:f6b93129f954 325 {
stefanrousseau 64:09004cd610df 326 PRINTF(DEF "\r\n");
fkellermavnet 78:00cca62e5d9f 327 PRINTF(YEL "Read back : %s" DEF "\r\n", MySocketData.c_str());
stefanrousseau 61:f6b93129f954 328 char stringToCharBuf[BUF_SIZE_FOR_N_MAX_SOCKREAD*MAX_WNC_SOCKREAD_PAYLOAD+1]; // WNC can return max of 1500 (per sockread)
stefanrousseau 61:f6b93129f954 329 if ((MySocketData.length() + 1) < sizeof(stringToCharBuf))
stefanrousseau 61:f6b93129f954 330 {
stefanrousseau 61:f6b93129f954 331 strcpy(stringToCharBuf, MySocketData.c_str());
stefanrousseau 61:f6b93129f954 332 if (extract_JSON(stringToCharBuf, &rx_string[0]))
stefanrousseau 61:f6b93129f954 333 {
stefanrousseau 64:09004cd610df 334 PRINTF(GRN "JSON : %s" DEF "\n", &rx_string[0]);
stefanrousseau 61:f6b93129f954 335 iStatus = 1; //all good
stefanrousseau 61:f6b93129f954 336 }
stefanrousseau 61:f6b93129f954 337 }
stefanrousseau 61:f6b93129f954 338 else
stefanrousseau 61:f6b93129f954 339 {
stefanrousseau 64:09004cd610df 340 PRINTF(RED "BUFFER not big enough for sock data!" DEF "\r\n");
stefanrousseau 61:f6b93129f954 341 }
stefanrousseau 61:f6b93129f954 342 }
stefanrousseau 61:f6b93129f954 343 else
stefanrousseau 61:f6b93129f954 344 {
stefanrousseau 64:09004cd610df 345 PRINTF(RED "No response..." DEF "\r\n");
stefanrousseau 61:f6b93129f954 346 }
nrithya 82:340a51ed8760 347
nrithya 82:340a51ed8760 348 t.stop();
nrithya 82:340a51ed8760 349 PRINTF("loading time: %f \n",t.read());
nrithya 82:340a51ed8760 350 PRINTF("DELIMIT");
nrithya 82:340a51ed8760 351 t.reset();
stefanrousseau 61:f6b93129f954 352 return iStatus;
nrithya 82:340a51ed8760 353
stefanrousseau 61:f6b93129f954 354 }
fkellermavnet 77:c65eae5b9958 355
fkellermavnet 77:c65eae5b9958 356 void display_wnc_firmware_rev(void)
fkellermavnet 77:c65eae5b9958 357 {
fkellermavnet 77:c65eae5b9958 358 display_modem_firmware_version();
fkellermavnet 77:c65eae5b9958 359 }