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 XadowGPS mbed
Fork of Avnet_ATT_Cellular_IOT by
Diff: wnc_control.cpp
- Revision:
- 30:33be8e2992f3
- Parent:
- 22:41e6c417ace1
- Child:
- 32:1e052a3e73fe
--- a/wnc_control.cpp Fri Jul 22 00:35:37 2016 +0000
+++ b/wnc_control.cpp Fri Jul 22 15:06:52 2016 +0000
@@ -31,7 +31,7 @@
{
WNC_MDM_ERR = WNC_OK;
at_init_wnc();
- if (WNC_MDM_ERR != WNC_OK)
+ if (WNC_MDM_ERR == WNC_NO_RESPONSE)
reinitialize_mdm();
} while (WNC_MDM_ERR != WNC_OK);
}
@@ -55,7 +55,7 @@
}
} while (WNC_MDM_ERR != WNC_OK);
- pc.printf("My Server IP: %s\r\n", MyServerIpAddress.data());
+ pc.printf("My Server IP: %s\r\n", MyServerIpAddress.c_str());
}
void sockopen_mdm(void)
@@ -104,25 +104,37 @@
puts("Socket is closed for write!\r\n");
}
-void sockread_mdm(string * sockData, int len, int retries)
+unsigned sockread_mdm(string * sockData, int len, int retries)
{
+ unsigned n = 0;
+
+ // Clean slate:
+ sockData->erase();
+
if (socketOpen == 1)
{
do
{
WNC_MDM_ERR = WNC_OK;
- at_sockread_wnc(sockData, len, retries);
+ n = at_sockread_wnc(sockData, len, retries);
if (WNC_MDM_ERR == WNC_NO_RESPONSE)
{
- reinitialize_mdm();
- software_init_mdm();
+ if (n == 0)
+ {
+ reinitialize_mdm();
+ software_init_mdm();
+ }
+ else
+ puts("Sock read partial data!!!\r\n");
}
else if (WNC_MDM_ERR == WNC_CMD_ERR)
puts("Sock read fail!!!!\r\n");
- } while (WNC_MDM_ERR != WNC_OK);
+ } while (WNC_MDM_ERR == WNC_NO_RESPONSE);
}
else
puts("Socket is closed for read\r\n");
+
+ return (n);
}
void sockclose_mdm(void)
@@ -190,6 +202,9 @@
static const char * rsp_lst[] = { "OK", "ERROR", NULL };
int len;
+ // Per WNC between every AT cmd:
+ wait_ms(20);
+
pc.printf("Send: %s\r\n",s);
int res = mdm_sendAtCmdRsp(s, rsp_lst, ms_timeout, &wncStr, &len);
*r = &wncStr; // Return a pointer to the static string
@@ -197,7 +212,7 @@
if (res >= 0)
{
pc.puts("[");
- pc.puts(wncStr.data());
+ pc.puts(wncStr.c_str());
pc.puts("]\n\r");
if (res > 0)
{
@@ -230,7 +245,7 @@
string cmd_str("AT%PDNSET=1,");
cmd_str += MY_APN_STR;
cmd_str += ",IP";
- send_wnc_cmd(cmd_str.data(), &pRespStr, 2*WNC_TIMEOUT_MS); // Set APN, cmd seems to take a little longer sometimes
+ send_wnc_cmd(cmd_str.c_str(), &pRespStr, 2*WNC_TIMEOUT_MS); // Set APN, cmd seems to take a little longer sometimes
send_wnc_cmd("AT@INTERNET=1", &pRespStr, WNC_TIMEOUT_MS); // Internet services enabled
send_wnc_cmd("AT@SOCKDIAL=1", &pRespStr, WNC_TIMEOUT_MS);
}
@@ -243,7 +258,7 @@
cmd_str += ipStr;
cmd_str += "\",";
cmd_str += port;
- send_wnc_cmd(cmd_str.data(), &pRespStr, WNC_TIMEOUT_MS);
+ send_wnc_cmd(cmd_str.c_str(), &pRespStr, WNC_TIMEOUT_MS);
}
void at_sockclose_wnc(void)
@@ -258,7 +273,7 @@
string str(s);
str = "AT@DNSRESVDON=\"" + str;
str += "\"\r\n";
- if (send_wnc_cmd(str.data(), &pRespStr, WNC_TIMEOUT_MS) == 0)
+ if (send_wnc_cmd(str.c_str(), &pRespStr, WNC_TIMEOUT_MS) == 0)
{
size_t pos_start = pRespStr->find(":\"") + 2;
if (pos_start != string::npos)
@@ -311,7 +326,7 @@
cmd_str += num2str;
}
cmd_str += "\"";
- send_wnc_cmd(cmd_str.data(), &pRespStr, WNC_TIMEOUT_MS);
+ send_wnc_cmd(cmd_str.c_str(), &pRespStr, WNC_TIMEOUT_MS);
}
else
pc.puts("sockwrite Err, string to long\r\n");
@@ -322,6 +337,10 @@
unsigned i;
string * pRespStr;
string cmd_str("AT@SOCKREAD=1,");
+
+ // Clean slate
+ pS->erase();
+
if (n <= 1500)
{
char num2str[6];
@@ -336,7 +355,7 @@
// between each retry.
wait_ms(10);
- send_wnc_cmd(cmd_str.data(), &pRespStr, WNC_TIMEOUT_MS);
+ 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;
i = pos_end - pos_start + 1;
@@ -344,11 +363,10 @@
{
retries = 0; // If any data found stop retrying
string byte;
- pS->erase();
while (pos_start < pos_end)
{
byte = pRespStr->substr(pos_start, 2);
- *pS += (char)strtol(byte.data(), NULL, 16);
+ *pS += (char)strtol(byte.c_str(), NULL, 16);
pos_start += 2;
}
return i;
