Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: FXOS8700CQ MODSERIAL mbed
Fork of Avnet_ATT_Cellular_IOT by
Diff: wnc_control.cpp
- Revision:
- 75:8cc98a3b9c62
- Parent:
- 74:3e3ee15584e5
- Parent:
- 73:da723fedfdd2
- Child:
- 77:c65eae5b9958
--- a/wnc_control.cpp Sat Aug 13 15:08:11 2016 +0000
+++ b/wnc_control.cpp Sat Aug 13 17:46:30 2016 +0000
@@ -59,12 +59,12 @@
cmd_str += MY_APN_STR;
cmd_str += ",IP";
at_send_wnc_cmd(cmd_str.c_str(), &pRespStr, 4*WNC_TIMEOUT_MS); // Set APN, cmd seems to take a little longer sometimes
- PUTS(cmd_str.c_str());
}
static bool reportStatus = true;
do
{
+ PUTS("------------ software_init_mdm! --------->\r\n");
if (check_wnc_ready() == 0)
{
if (reportStatus == false)
@@ -290,6 +290,8 @@
// SIM card OK, now check for signal and cellular network registration
cmdRes1 = at_send_wnc_cmd("AT+CREG?", &pRespStr, WNC_TIMEOUT_MS); // Check if registered on network
+ if (pRespStr->size() > 0)
+ {
pos = pRespStr->find("CREG: ");
if (pos != string::npos)
{
@@ -309,7 +311,15 @@
#ifdef WNC_CMD_DEBUG_ON_VERBOSE
PUTS("------------ WNC Ready ---------------->\r\n");
#endif
-
+ }
+ else
+ {
+#ifdef WNC_CMD_DEBUG_ON_VERBOSE
+ PUTS("------------ CREG No Reply !----------->\r\n");
+#endif
+ return (-2);
+ }
+
return (0);
}
@@ -326,6 +336,7 @@
PUTS("FAIL send cmd: ");
#ifdef WNC_CMD_DEBUG_ON_VERBOSE
PUTS(s);
+
#else
string truncStr(s, 50);
truncStr += "\r\n";
@@ -366,7 +377,7 @@
pc.printf("[[WNC_MDM_ERR = WNC_EXTERR]] \r\n");
}
- if (cmdRes == 0)
+ if (cmdRes == 0)
WNC_MDM_ERR = WNC_OK;
return (cmdRes);
@@ -375,8 +386,7 @@
int at_send_wnc_cmd(const char * s, string ** r, int ms_timeout)
{
//Eaddy
- static const char * rsp_lst[] = { "OK", "ERROR","@EXTERR", "+CME",NULL };
- //static const char * rsp_lst[] = { "OK", "ERROR", NULL };
+ static const char * rsp_lst[] = { "OK", "ERROR","@EXTERR", "+CME", NULL };
int len;
#ifdef WNC_CMD_DEBUG_ON
@@ -416,6 +426,7 @@
PUTS("]\r\n");
#endif
#endif
+
#if 0
if (res > 0)
return -1;
@@ -428,7 +439,7 @@
return 0;
} else if (res == 2) {
/* @EXTERR */
- pc.printf("@EXTERR and res = %d \r\n", res);
+ PRINTF("@EXTERR and res = %d \r\n", res);
return -3;
} else
return -1;
@@ -522,7 +533,11 @@
cmd_str += "\",";
cmd_str += port;
cmd_str += ",30";
- send_wnc_cmd(cmd_str.c_str(), &pRespStr, 31000);
+ int cmd = send_wnc_cmd(cmd_str.c_str(), &pRespStr, 31000);
+ if (cmd != WNC_OK) {
+ // Per WNC: re-close even if open fails!
+ at_sockclose_wnc();
+ }
}
void at_sockclose_wnc(void)
@@ -588,7 +603,6 @@
}
cmd_str += "\"";
res = send_wnc_cmd(cmd_str.c_str(), &pRespStr, 120000);
-
if (res == -3)
PUTS("sockwrite is disconnect \r\n");
}
@@ -619,29 +633,35 @@
// between each retry.
wait_ms(10);
- send_wnc_cmd(cmd_str.c_str(), &pRespStr, WNC_TIMEOUT_MS);
-
- size_t pos_start = pRespStr->find("\"") + 1;
- size_t pos_end = pRespStr->rfind("\"") - 1;
+ if (send_wnc_cmd(cmd_str.c_str(), &pRespStr, WNC_TIMEOUT_MS) == 0)
+ {
+ size_t pos_start = pRespStr->find("\"") + 1;
+ size_t pos_end = pRespStr->rfind("\"") - 1;
- // Make sure search finds what it's looking for!
- if (pos_start != string::npos && pos_end != string::npos)
+ // Make sure search finds what it's looking for!
+ if (pos_start != string::npos && pos_end != string::npos)
i = (pos_end - pos_start + 1); // Num hex chars, 2 per byte
- else
+ else
i = 0;
- if (i > 0)
+ if (i > 0)
+ {
+ retries = 1; // If any data found retry 1 more time to catch data that might be in another
+ // WNC payload
+ string byte;
+ while (pos_start < pos_end)
+ {
+ byte = pRespStr->substr(pos_start, 2);
+ *pS += (char)strtol(byte.c_str(), NULL, 16);
+ pos_start += 2;
+ }
+ numBytes += i/2;
+ }
+ }
+ else
{
- retries = 1; // If any data found retry 1 more time to catch data that might be in another
- // WNC payload
- string byte;
- while (pos_start < pos_end)
- {
- byte = pRespStr->substr(pos_start, 2);
- *pS += (char)strtol(byte.c_str(), NULL, 16);
- pos_start += 2;
- }
- numBytes += i/2;
+ PUTS("no readsock reply!\r\n");
+ return (0);
}
}
}
