easy connect wnc added to http request with debug mode enabled. traces collected for AT%CGEQOS, AT%MEAS, AT%PCONI
Fork of WncControllerLibrary by
Diff: WncController.cpp
- Revision:
- 14:e846217affcd
- Parent:
- 13:73629a6e9122
- Child:
- 15:2c8211ef69e1
diff -r 73629a6e9122 -r e846217affcd WncController.cpp --- a/WncController.cpp Sat Sep 10 01:10:20 2016 +0000 +++ b/WncController.cpp Sat Sep 10 02:02:05 2016 +0000 @@ -1001,42 +1001,123 @@ if (pRespStr->size() > 0) { memset((void*)s, '\0', sizeof(*s)); // Clean-up string ss; - unsigned i; size_t pe; size_t ps = pRespStr->rfind("\""); if (ps != string::npos) { ps += 2; // Skip the , after the " pe = ps; - for(i=0;i<4;i++) - pe = pRespStr->find(".", pe) + 1; + + pe = pRespStr->find(".", pe); + if (pe == string::npos) + return (false); + else + pe += 1; + pe = pRespStr->find(".", pe); + if (pe == string::npos) + return (false); + else + pe += 1; + pe = pRespStr->find(".", pe); + if (pe == string::npos) + return (false); + else + pe += 1; + pe = pRespStr->find(".", pe); + if (pe == string::npos) + return (false); + else + pe += 1; + ss = pRespStr->substr(ps, pe - 1 - ps); strncpy(s->ip, ss.c_str(), MAX_LEN_IP_STR); s->ip[MAX_LEN_IP_STR - 1] = '\0'; ps = pe; - for(i=0;i<3;i++) - pe = pRespStr->find(".", pe) + 1; + + pe = pRespStr->find(".", pe); + if (pe == string::npos) + return (false); + else + pe += 1; + pe = pRespStr->find(".", pe); + if (pe == string::npos) + return (false); + else + pe += 1; + pe = pRespStr->find(".", pe); + if (pe == string::npos) + return (false); + else + pe += 1; pe = pRespStr->find(",", pe); + ss = pRespStr->substr(ps, pe - ps); strncpy(s->mask, ss.c_str(), MAX_LEN_IP_STR); s->mask[MAX_LEN_IP_STR - 1] = '\0'; ps = pe + 1; - for(i=0;i<3;i++) - pe = pRespStr->find(".", pe) + 1; + + pe = pRespStr->find(".", pe); + if (pe == string::npos) + return (false); + else + pe += 1; + pe = pRespStr->find(".", pe); + if (pe == string::npos) + return (false); + else + pe += 1; + pe = pRespStr->find(".", pe); + if (pe == string::npos) + return (false); + else + pe += 1; pe = pRespStr->find(",", pe); + ss = pRespStr->substr(ps, pe - ps); strncpy(s->gateway, ss.c_str(), MAX_LEN_IP_STR); s->gateway[MAX_LEN_IP_STR - 1] = '\0'; ps = pe + 1; - for(i=0;i<3;i++) - pe = pRespStr->find(".", pe) + 1; + + pe = pRespStr->find(".", pe); + if (pe == string::npos) + return (false); + else + pe += 1; + pe = pRespStr->find(".", pe); + if (pe == string::npos) + return (false); + else + pe += 1; + pe = pRespStr->find(".", pe); + if (pe == string::npos) + return (false); + else + pe += 1; pe = pRespStr->find(",", pe); + + ss = pRespStr->substr(ps, pe - ps); strncpy(s->dnsPrimary, ss.c_str(), MAX_LEN_IP_STR); s->dnsPrimary[MAX_LEN_IP_STR - 1] = '\0'; ps = pe + 1; - for(i=0;i<3;i++) - pe = pRespStr->find(".", pe) + 1; + + pe = pRespStr->find(".", pe); + if (pe == string::npos) + return (false); + else + pe += 1; + pe = pRespStr->find(".", pe); + if (pe == string::npos) + return (false); + else + pe += 1; + pe = pRespStr->find(".", pe); + if (pe == string::npos) + return (false); + else + pe += 1; pe = pRespStr->find(",", pe); + + ss = pRespStr->substr(ps, pe - ps); strncpy(s->dnsSecondary, ss.c_str(), MAX_LEN_IP_STR); s->dnsSecondary[MAX_LEN_IP_STR - 1] = '\0'; @@ -1327,7 +1408,7 @@ cmd_str += ",0"; res = sendWncCmd(cmd_str.c_str(), &pRespStr, m_sCmdTimeoutMs); - if (res == WNC_AT_CMD_OK) + if (res == WNC_AT_CMD_OK && pRespStr->size() > 0) { size_t pos1 = pRespStr->find("T:"); size_t pos2 = pRespStr->rfind("OK"); @@ -1376,11 +1457,13 @@ { string * pRespStr; string str(s); + AtCmdErr_e r; ipStr->erase(); // Clear out string until resolved! str = "AT@DNSRESVDON=\"" + str; str += "\""; - if (sendWncCmd(str.c_str(), &pRespStr, WNC_DNS_RESOLVE_WAIT_MS) == WNC_AT_CMD_OK) { + r = sendWncCmd(str.c_str(), &pRespStr, WNC_DNS_RESOLVE_WAIT_MS); + if (r == WNC_AT_CMD_OK && pRespStr->size() > 0) { size_t pos_start = pRespStr->find(":\"") + 2; if (pos_start != string::npos) { size_t pos_end = pRespStr->find("\"", pos_start) - 1; @@ -1482,12 +1565,16 @@ // 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("\""); - pos_end = pRespStr->rfind("\""); - // Make sure search finds what it's looking for! - if (pos_start != string::npos && pos_end != string::npos) { - pos_start++; - i = pos_end - pos_start; // Num hex chars, 2 per byte + if (pRespStr->size() > 0) { + 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) { + pos_start++; + i = pos_end - pos_start; // Num hex chars, 2 per byte + } + else + i = 0; } else i = 0; @@ -1534,12 +1621,16 @@ // 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("\""); - pos_end = pRespStr->rfind("\""); - // Make sure search finds what it's looking for! - if (pos_start != string::npos && pos_end != string::npos) { - pos_start++; - i = pos_end - pos_start; // Num hex chars, 2 per byte + if (pRespStr->size() > 0) { + 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) { + pos_start++; + i = pos_end - pos_start; // Num hex chars, 2 per byte + } + else + i = 0; } else i = 0; @@ -1634,7 +1725,7 @@ if (n == 0) continue; - + if (rsp->rfind("OK") != string::npos) { stopTimerA(); return (WNC_AT_CMD_OK); @@ -1745,7 +1836,7 @@ cmdRes1 = at_send_wnc_cmd("AT+CSQ", &pRespStr, m_sCmdTimeoutMs); // Check RSSI,BER cmdRes2 = at_send_wnc_cmd("AT+CPIN?", &pRespStr, m_sCmdTimeoutMs); // Check if SIM locked - if ((cmdRes1 != WNC_AT_CMD_OK) && (cmdRes2 != WNC_AT_CMD_OK)) + if ((cmdRes1 != WNC_AT_CMD_OK) || (cmdRes2 != WNC_AT_CMD_OK) || (pRespStr->size() == 0)) { if (m_sMoreDebugEnabled) { @@ -1768,7 +1859,7 @@ // SIM card OK, now check for signal and cellular network registration cmdRes1 = at_send_wnc_cmd("AT+CREG?", &pRespStr, m_sCmdTimeoutMs); // Check if registered on network - if (cmdRes1 != WNC_AT_CMD_OK) + if (cmdRes1 != WNC_AT_CMD_OK || pRespStr->size() == 0) { if (m_sMoreDebugEnabled) dbgPuts("------------ WNC +CREG? Fail! --------->");