This library controls the WNC. There is a derived class for usage from the K64F board.
Fork of WncControllerLibrary by
Diff: WncController.cpp
- Revision:
- 20:ca2db38d6802
- Parent:
- 19:83a52353b97e
- Child:
- 21:086841abc3aa
--- a/WncController.cpp Wed Sep 14 02:31:35 2016 +0000
+++ b/WncController.cpp Wed Sep 14 23:15:39 2016 +0000
@@ -480,7 +480,7 @@
* \details DO NOT use the same string as is passed to the auto poll setup method!
*/
-size_t WncController::read(uint16_t numSock, const uint8_t ** readBuf)
+int WncController::read(uint16_t numSock, const uint8_t ** readBuf)
{
static string theBuf;
string readStr;
@@ -489,7 +489,7 @@
if (numSock < MAX_NUM_WNC_SOCKETS) {
if (m_sSock[numSock].open == true) {
- uint8_t i = m_sSock[numSock].readRetries;
+ int16_t i = m_sSock[numSock].readRetries;
uint16_t to = m_sSock[numSock].readRetryWaitMs;
bool foundData = false;
do {
@@ -512,13 +512,17 @@
else {
theBuf += readStr; // Append what if any we got before it errored.
dbgPuts("Sockread failed!");
- if (cmdRes == WNC_AT_CMD_ERREXT || cmdRes == WNC_AT_CMD_TIMEOUT)
+ if ((cmdRes == WNC_AT_CMD_ERREXT) || (cmdRes == WNC_AT_CMD_TIMEOUT) || (cmdRes == WNC_AT_CMD_ERRCME))
{
// This may throw away any data that hasn't been read out of the WNC
// but at this point with the way the WNC currently works we have
// no choice.
closeOpenSocket(numSock);
- i = 0;
+ // Free the memory that was used
+ theBuf.erase();
+ *readBuf = (const uint8_t *)theBuf.c_str();
+ // Game over no more data left to pull out!
+ return (-1);
}
else
waitMs(to);
@@ -538,7 +542,7 @@
return (theBuf.size());
}
-size_t WncController::read(uint16_t numSock, uint8_t * readBuf, uint32_t maxReadBufLen)
+int WncController::read(uint16_t numSock, uint8_t * readBuf, uint32_t maxReadBufLen)
{
uint32_t numCopied = 0;
@@ -579,13 +583,14 @@
}
else {
dbgPuts("Sockread failed!");
- if (cmdRes == WNC_AT_CMD_ERREXT || cmdRes == WNC_AT_CMD_TIMEOUT)
+ if ((cmdRes == WNC_AT_CMD_ERREXT) || (cmdRes == WNC_AT_CMD_TIMEOUT) || (cmdRes == WNC_AT_CMD_ERRCME))
{
// This may throw away any data that hasn't been read out of the WNC
// but at this point with the way the WNC currently works we have
// no choice.
closeOpenSocket(numSock);
- i = 0;
+ // Game over
+ return (-1);
}
else
waitMs(to);
@@ -971,7 +976,10 @@
log->e[i].unsent = true;
// Tele number
- pos2 += 3; // Advance to next field
+ pos2 = logStr->find(",\"", pos2);
+ if (pos2 == string::npos)
+ return (false);
+ pos2 += 2; // Advance to next field
pos = logStr->find("\",", pos2);
if ((pos == string::npos) || (pos2 > pos))
return (false);
@@ -982,7 +990,10 @@
// Date
- pos += 4; // Beginning of date field
+ pos = logStr->find(",\"", pos);
+ if (pos == string::npos)
+ return (false);
+ pos += 2; // Beginning of date field
pos2 = logStr->find(",", pos); // End of timestamp field
if ((pos2 == string::npos) || (pos > pos2))
return (false);
@@ -992,7 +1003,10 @@
log->e[i].date = logStr->substr(pos, pos2 - pos);
// Timestamp
- pos2 += 1; // Beginning of time field
+ pos2 = logStr->find(",\"");
+ if (pos2 == string::npos)
+ return (false);
+ pos2 += 2; // Beginning of time field
pos = logStr->find("\",", pos2); // End of timestamp field
if ((pos == string::npos) || (pos2 > pos))
return (false);
@@ -1005,6 +1019,9 @@
// We don't know how many messages we have so the next search
// could end with +CMGL or OK.
+ pos = logStr->find(",\"", pos);
+ if (pos == string::npos)
+ return (false);
pos += 2; // Advanced to message text
pos2 = logStr->find("+CMGL", pos);
if (pos2 == string::npos) {
@@ -1406,7 +1423,7 @@
string * pRespStr;
size_t l = strlen(text);
- if (l <= MAX_WNC_SMS_MSG_SLOTS)
+ if (l <= MAX_WNC_SMS_LENGTH)
{
// Check to see if the SMS service is available
checkCellLink();
