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:
- 1:ac2de545b981
- Parent:
- 0:affdbb35faa4
- Child:
- 4:c5720f4d13ff
diff -r affdbb35faa4 -r ac2de545b981 WncController.cpp --- a/WncController.cpp Wed Aug 31 02:06:26 2016 +0000 +++ b/WncController.cpp Thu Sep 01 02:28:10 2016 +0000 @@ -97,6 +97,12 @@ return (str); } +const char * WncController::_to_hex_string(uint8_t value) +{ + static char str[3]; // room for 8-bit + null + itoa(value, str, 16); + return (str); +} /** * \brief Constructor for UART controlled WNC @@ -110,9 +116,8 @@ * a constructor should be added for each type just like the SerialBuffered * constructor below. */ -WncController::WncController(const char * const apnStr) +WncController::WncController(void) { - m_sApnStr = apnStr; } void WncController::enableDebug(bool on, bool moreDebugOn) @@ -174,14 +179,14 @@ * and bring it to life. It will also initialize the WNC enough to get it to be able to open sockets * (with AT commands) */ -bool WncController::powerWncOn(uint8_t powerUpTimeoutSecs) +bool WncController::powerWncOn(const char * const apn, uint8_t powerUpTimeoutSecs) { dbgPuts("Waiting for WNC to Initialize..."); m_sPowerUpTimeoutSecs = powerUpTimeoutSecs; m_sState = WNC_ON_NO_CELL_LINK; // Turn soft on to allow "AT" for init to be sent! if (initWncModem(powerUpTimeoutSecs) == true) { // Set the Apn - setApnName(m_sApnStr.c_str()); + setApnName(apn); if (false == softwareInitMdm()) { dbgPuts("Software init failed!"); m_sState = WNC_OFF; @@ -192,7 +197,7 @@ m_sState = WNC_OFF; } - return (m_sState == WNC_ON_NO_CELL_LINK); + return (m_sState != WNC_ON_NO_CELL_LINK); } size_t WncController::sendCustomCmd(const char * cmd, char * resp, size_t sizeRespBuf, int ms_timeout) @@ -345,7 +350,7 @@ m_sSock[numSock].myPort = port; m_sSock[numSock].isTcp = tcp; m_sSock[numSock].timeOutSec = timeOutSec; - m_sSock[numSock].open = at_sockopen_wnc(m_sSock[numSock].myIpAddressStr, port, numSock, tcp, timeOutSec); + m_sSock[numSock].open = at_sockopen_wnc(m_sSock[numSock].myIpAddressStr.c_str(), port, numSock, tcp, timeOutSec); if (m_sSock[numSock].open == false) { dbgPuts("Socket open fail!!!!"); // Work-around. If the sock open fails it needs to be told @@ -374,7 +379,7 @@ * arriving at the endpoint. */ -bool WncController::sockWrite(const char * s, uint32_t n, uint16_t numSock, bool isTcp) +bool WncController::sockWrite(const char * const s, uint32_t n, uint16_t numSock, bool isTcp) { bool result = true;; @@ -382,7 +387,7 @@ if (cmdRes != WNC_AT_CMD_OK) { 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 wrote out of the WNC + // This may throw away any data that hasn't been written out of the WNC // but at this point with the way the WNC currently works we have // no choice. closeOpenSocket(numSock); @@ -575,19 +580,19 @@ // Note: If you want to make it more portable, create a // arecharsavailable() and readchar() -size_t WncController::mdmGetline(string & buff, int timeout_ms) +size_t WncController::mdmGetline(string * buff, int timeout_ms) { char chin = '\0'; char chin_last; size_t len = 0; startTimerB(); - while ((len < (MAX_LEN_WNC_CMD_RESPONSE - 1)) && (getUsTimerTicksB() < timeout_ms)) { - if (byteReady()) { + while ((len < (MAX_LEN_WNC_CMD_RESPONSE - 1)) && (getTimerTicksB_mS() < timeout_ms)) { + if (charReady()) { chin_last = chin; - chin = (char)getc(); + chin = getc(); if (isprint(chin)) { - buff += (char)chin; + *buff += chin; len++; // Bound the copy length to something reaonable just in case continue; } @@ -595,7 +600,6 @@ break; } } - rx_char_wait(); } stopTimerB(); @@ -751,7 +755,7 @@ do { dbgPuts("Try to close and re-open socket"); at_sockclose_wnc(numSock); - m_sSock[numSock].open = at_sockopen_wnc(m_sSock[numSock].myIpAddressStr, m_sSock[numSock].myPort, numSock, m_sSock[numSock].isTcp, m_sSock[numSock].timeOutSec); + m_sSock[numSock].open = at_sockopen_wnc(m_sSock[numSock].myIpAddressStr.c_str(), m_sSock[numSock].myPort, numSock, m_sSock[numSock].isTcp, m_sSock[numSock].timeOutSec); if (m_sSock[numSock].open == false) dbgPuts("Failed to re-open socket!"); } while (m_sSock[numSock].open == false); @@ -1225,7 +1229,7 @@ } -bool WncController::at_sockopen_wnc(const string & ipStr, uint16_t port, uint16_t numSock, bool tcp, uint16_t timeOutSec) +bool WncController::at_sockopen_wnc(const char * const ip, uint16_t port, uint16_t numSock, bool tcp, uint16_t timeOutSec) { string * pRespStr; string cmd_str("AT@SOCKCREAT="); @@ -1241,7 +1245,7 @@ cmd_str = "AT@SOCKCONN="; cmd_str += _to_string(numSock + 1); cmd_str += ",\""; - cmd_str += ipStr; + cmd_str += ip; cmd_str += "\","; cmd_str += _to_string(port); cmd_str += ","; @@ -1304,8 +1308,9 @@ // sending simple 'AT' commands to modem once per second. if (timeoutSecs > 0) { do { - dbgPuts("\rWaiting ", false); dbgPutsNoTime(_to_string(timeoutSecs), false); timeoutSecs--; + dbgPutsNoTime("\rWaiting ", false); dbgPutsNoTime(_to_string(timeoutSecs), false); + dbgPutsNoTime(" ", false); AtCmdErr_e rc = mdmSendAtCmdRsp("AT", 500, &m_sWncStr); if (rc == WNC_AT_CMD_OK) { dbgPutsNoTime(""); // CR LF @@ -1314,6 +1319,7 @@ waitMs(500); } while (timeoutSecs > 0); + dbgPutsNoTime(""); // CR LF } return (false); @@ -1325,7 +1331,7 @@ if ((n > 0) && (n <= MAX_WNC_WRITE_BYTES)) { string * pRespStr; - char num2str[10]; + const char * num2str; string cmd_str; if (isTcp == true) @@ -1335,17 +1341,14 @@ cmd_str += _to_string(numSock + 1); cmd_str += ","; - _to_string(n); + cmd_str += _to_string(n); cmd_str += num2str; cmd_str += ",\""; while(*s != '\0') { - _to_string((int8_t)*s++); + num2str = _to_hex_string((uint8_t)*s++); // Always 2-digit ascii hex: - if (strlen(num2str) == 1) { - num2str[2] = '\0'; - num2str[1] = num2str[0]; - num2str[0] = '0'; - } + if (strlen(num2str) == 1) + cmd_str += '0'; cmd_str += num2str; } cmd_str += "\""; @@ -1391,13 +1394,13 @@ else i = 0; - // If data convert the hex string into byte values + // If data, convert the hex string into byte values if (i > 0 && i <= (2*MAX_WNC_READ_BYTES)) { string byte; while (pos_start < pos_end) { byte = pRespStr->substr(pos_start, 2); - *pS += (char)strtol(byte.c_str(), NULL, 16); + *pS += (uint8_t)strtol(byte.c_str(), NULL, 16); pos_start += 2; (*numRead)++; } @@ -1471,8 +1474,8 @@ } startTimerA(); - while (getUsTimerTicksA() < timeout_ms) { - n = mdmGetline(*rsp, timeout_ms - getUsTimerTicksA()); + while (getTimerTicksA_mS() < timeout_ms) { + n = mdmGetline(rsp, timeout_ms - getTimerTicksA_mS()); if (n == 0) continue; @@ -1659,9 +1662,9 @@ int WncController::dbgPutsNoTime(const char * s, bool crlf) { if (m_sDebugEnabled == true) { - int r = dbgWriteBytes(s); + int r = dbgWriteChars(s); if (crlf == true) - return (dbgWriteBytes("\r\n")); + return (dbgWriteChars("\r\n")); else return (r); } @@ -1673,11 +1676,12 @@ { dbgPutsNoTime("[*] ", false); dbgPutsNoTime(_to_string(getLogTimerTicks()), false); - dbgPutsNoTime(" "); + dbgPutsNoTime(" ", false); int r = dbgPutsNoTime(s, false); + if (crlf == true) - return (dbgPutsNoTime("\r\n", false)); + return (dbgPutsNoTime("", true)); else return (r); };