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.
Fork of WncControllerLibrary by
Diff: WncController.cpp
- Revision:
- 12:33290e9e6e5f
- Parent:
- 11:3ff6c1cb5b03
- Child:
- 13:73629a6e9122
diff -r 3ff6c1cb5b03 -r 33290e9e6e5f WncController.cpp
--- a/WncController.cpp Fri Sep 09 23:58:12 2016 +0000
+++ b/WncController.cpp Sat Sep 10 00:49:34 2016 +0000
@@ -529,7 +529,7 @@
uint8_t i = m_sSock[numSock].readRetries;
uint16_t to = m_sSock[numSock].readRetryWaitMs;
bool foundData = false;
- size_t numRead;
+ uint16_t numRead;
do {
AtCmdErr_e cmdRes;
if (maxReadBufLen < MAX_WNC_READ_BYTES)
@@ -1482,39 +1482,36 @@
// Experimental: read should not need to check cell net status
result = at_send_wnc_cmd(cmd_str.c_str(), &pRespStr, m_sCmdTimeoutMs);
if (result == WNC_AT_CMD_OK) {
- pos_start = pRespStr->find("\"") + 1;
- pos_end = pRespStr->rfind("\"") - 1;
-
+ pos_start = pRespStr->find("\"");
+ pos_end = pRespStr->rfind("\"");
// 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
+ if (pos_start != string::npos && pos_end != string::npos) {
+ pos_start++;
+ i = pos_end - pos_start; // Num hex chars, 2 per byte
+ }
else
i = 0;
- if (i < 0)
+ if ((i < 0) || ((i % 2) == 1))
dbgPuts("Invalid READ string!");
- else if (i > 2*MAX_WNC_READ_BYTES) {
- // Bound the ill formated WNC read string!
+
+ if (i > 2*MAX_WNC_READ_BYTES) {
i = 2*MAX_WNC_READ_BYTES;
- dbgPuts("TRUNCATING read data!");
+ dbgPuts("DANGER WNC read data does not match length!");
}
// If data, convert the hex string into byte values
- if (i > 0)
- {
- string byte;
- while (pos_start < pos_end) {
- byte = pRespStr->substr(pos_start, 2);
- *pS += (uint8_t)strtol(byte.c_str(), NULL, 16);
- pos_start += 2;
- }
+ while (i > 0) {
+ i -= 2;
+ *pS += (uint8_t)strtol(pRespStr->substr(pos_start, 2).c_str(), NULL, 16);
+ pos_start += 2;
}
}
return (result);
}
-WncController::AtCmdErr_e WncController::at_sockread_wnc(uint8_t * pS, uint32_t * numRead, uint16_t n, uint16_t numSock, bool isTcp)
+WncController::AtCmdErr_e WncController::at_sockread_wnc(uint8_t * pS, uint16_t * numRead, uint16_t n, uint16_t numSock, bool isTcp)
{
AtCmdErr_e result = WNC_AT_CMD_OK;
*numRead = 0;
@@ -1537,33 +1534,31 @@
// Experimental: read should not need to check cell net status
result = at_send_wnc_cmd(cmd_str.c_str(), &pRespStr, m_sCmdTimeoutMs);
if (result == WNC_AT_CMD_OK) {
- pos_start = pRespStr->find("\"") + 1;
- pos_end = pRespStr->rfind("\"") - 1;
-
+ pos_start = pRespStr->find("\"");
+ pos_end = pRespStr->rfind("\"");
// 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
+ if (pos_start != string::npos && pos_end != string::npos) {
+ pos_start++;
+ i = pos_end - pos_start; // Num hex chars, 2 per byte
+ }
else
i = 0;
- if (i < 0)
+ if ((i < 0) || ((i % 2) == 1))
dbgPuts("Invalid READ string!");
- else if (i > 2*n) {
+
+ if (i > 2*n) {
// Bound the ill formated WNC read string!
i = 2*n;
dbgPuts("TRUNCATING read data!");
}
// If data, convert the hex string into byte values
- if (i > 0)
- {
- string byte;
- while (pos_start < pos_end) {
- byte = pRespStr->substr(pos_start, 2);
- *pS++ = (uint8_t)strtol(byte.c_str(), NULL, 16);
- pos_start += 2;
- (*numRead)++;
- }
+ *numRead = i / 2;
+ while (i > 0) {
+ i -= 2;
+ *pS++ = (uint8_t)strtol(pRespStr->substr(pos_start, 2).c_str(), NULL, 16);
+ pos_start += 2;
}
}
}
