This library controls the WNC. There is a derived class for usage from the K64F board.
Fork of WncControllerLibrary by
Diff: WncController.cpp
- Revision:
- 33:2958e09ad308
- Parent:
- 32:6512f41ac6f0
- Child:
- 35:7c9d0f29ff7a
--- a/WncController.cpp Mon Oct 10 17:02:24 2016 +0000
+++ b/WncController.cpp Thu Nov 17 15:30:42 2016 +0000
@@ -24,6 +24,54 @@
@version 1.0
@date July 2016
@author Fred Kellerman
+
+
+ An Example of usage:
+
+ WncControllerK64F mdm(&wncPinList, &mdmUart, &debugUart);
+
+ mdm.enableDebug(true, true);
+
+ if (false == mdm.powerWncOn("m2m.com.attz", 60)) {
+ while(1);
+ }
+
+ // ICCID and MSISDN
+ string iccid; string msisdn;
+ if (mdm.getICCID(&iccid) == true) {
+ if (mdm.convertICCIDtoMSISDN(iccid, &msisdn) == true) {
+ // Send an SMS message (must use 15-digit MISDN number!)
+ mdm.sendSMSText(msisdn.c_str(), "Hello from WNC Kit -> from WNC");
+ }
+ }
+
+ // Get an IP address setup for the socket #1 (0 indexed))
+ if (true == mdm.resolveUrl(0, "www.att.com"))
+ {
+ // Report server IP
+ if (true == mdm.getIpAddr(0, ipAddrStr)) {
+ debugUart.puts("Server IP: ");
+ debugUart.puts(ipAddrStr);
+ debugUart.puts("\r\n");
+ }
+
+ // Open Socket #1, TCP=true resolved IP on port 80:
+ if (true == mdm.openSocket(0, 80, true)) {
+ // Write some data
+ const uint8_t * dataStr = "GET /index.html HTTP/1.0\r\nFrom: someuser@someuser.com\r\nUser-Agent: HTTPTool/1.0\r\n\r\n";
+ if (true == mdm.write(0, dataStr, strlen((const char *)dataStr)))
+ {
+ const uint8_t * myBuf;
+ mdm.setReadRetries(0, 20);
+ uint32_t n = mdm.read(0, &myBuf);
+ if (n > 0)
+ debugUart.printf("Read %d chars: %s\r\n", n, myBuf);
+ else
+ debugUart.puts("No read data!\r\n");
+ }
+ }
+ }
+
*/
@@ -55,8 +103,7 @@
* C++ version 0.4 char* style "itoa":
* Written by Lukás Chmela
* Released under GPLv3.
-*/
-
+ */
static char* itoa(int64_t value, char* result, int base)
{
// check that the base is valid
@@ -103,18 +150,6 @@
return (str);
}
-/**
- * \brief Constructor for UART controlled WNC
- *
- * \param [in] wnc_uart - Reference to a SerialBuffered object which will
- * be used as the bus to control the WNC.
- *
- * \return None.
- *
- * \details Adding another way to talk to the WNC, like I2C or USB,
- * a constructor should be added for each type just like the SerialBuffered
- * constructor below.
- */
WncController::WncController(void)
{
for(unsigned i; i<MAX_NUM_WNC_SOCKETS; i++)
@@ -127,29 +162,11 @@
m_sMoreDebugEnabled = moreDebugOn;
}
-/**
- * \brief Used internally but also make public for a user of the Class to interrogate state as well.
- *
- * \param [in] None.
- *
- * \return The state of the WNC Modem.
- *
- * \details None.
- */
WncController::WncState_e WncController::getWncStatus(void)
{
return (m_sState);
}
-/**
- * \brief Return signal quality dBm level
- *
- * \param [in] None.
- *
- * \return The dBm signal level at the time of the request.
- *
- * \details This polls (at the time of the call) the cell signal.
- */
int16_t WncController::getDbmRssi(void)
{
int16_t rssi, ber;
@@ -168,18 +185,6 @@
return (99);
}
-
-/**
- * \brief Power up and down (down not implemented yet)
- *
- * \param [in] on - set true to power on, otherwise false
- *
- * \return None.
- *
- * \details Power-on works but not power-down. This will manipulate WNC Shield hardware
- * 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(const char * const apn, uint8_t powerUpTimeoutSecs)
{
dbgPuts("Waiting for WNC to Initialize...");
@@ -270,16 +275,6 @@
return (false);
}
-
-/**
- * \brief Look-up a URL text string and convert into an IP Address string.
- *
- * \param [in] url - the URL to lookup. numSock - the socket number to resolve.
- *
- * \return true - if the IP address has been resolved. false - if the URL could not be resolved.
- *
- * \details None.
- */
bool WncController::resolveUrl(uint16_t numSock, const char * url)
{
bool cmdRes;
@@ -300,16 +295,6 @@
return (false);
}
-/**
- * \brief Set IP Address string
- *
- * \param [in] numSock - socket reference to set the string for. ipStr - text string of the IP
- * address you want to talk to. There is no sanity check - beware!!!
- *
- * \return true - if the IP address has been set. false - if the IP could not be set.
- *
- * \details None.
- */
bool WncController::setIpAddr(uint16_t numSock, const char * ipStr)
{
if (numSock < MAX_NUM_WNC_SOCKETS) {
@@ -327,17 +312,6 @@
m_sCmdTimeoutMs = toMs;
}
-/**
- * \brief Opens a WNC socket.
- *
- * \param [in] sockNum - the number of the socket to open. ipAddr - a string containing
- * the IP address. port - the IP port number to open the socket connection.
- *
- * \return true - if the socket is/was opened. false otherwise.
- *
- * \details None.
- */
-
bool WncController::openSocketUrl(uint16_t numSock, const char * url, uint16_t port, bool tcp, uint16_t timeOutSec)
{
if (resolveUrl(numSock, url) == true)
@@ -402,19 +376,7 @@
return (m_sSock[numSock].open);
}
-/**
- * \brief Write bytes of data to an open socket
- *
- * \param [in] sockNum - the number of the socket to write. s - a string containing
- * the byte data to send must be less than = 1500.
- *
- * \return true - if the write was successful. false otherwise.
- *
- * \details The results of the write do not have anything to do with the data
- * arriving at the endpoint.
- */
-
-bool WncController::sockWrite(const char * const s, uint16_t n, uint16_t numSock, bool isTcp)
+bool WncController::sockWrite(const uint8_t * const s, uint16_t n, uint16_t numSock, bool isTcp)
{
bool result = true;
@@ -433,7 +395,7 @@
return (result);
}
-bool WncController::write(uint16_t numSock, const char * s, uint32_t n)
+bool WncController::write(uint16_t numSock, const uint8_t * s, uint32_t n)
{
bool result;
@@ -472,18 +434,6 @@
return (result);
}
-/**
- * \brief Poll and read back data from the WNC (if it has any)
- * If auto poll is enabled this read might fail (return with no data).
- *
- * \param [in] sockNum - the number of the socket to read. result - a string pointer containing
- * the byte data readback from the WNC.
- *
- * \return The number of bytes/chars that are read from the socket.
- *
- * \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)
{
static string theBuf;
@@ -613,16 +563,6 @@
return (numCopied);
}
-/**
- * \brief Set how many times the above read method will retry if data is not returned.
- *
- * \param [in] sockNum - the number of the socket to set. retries - how many times to
- * poll until data is found.
- *
- * \return None.
- *
- * \details None.
- */
void WncController::setReadRetries(uint16_t numSock, uint16_t retries)
{
if (numSock < MAX_NUM_WNC_SOCKETS)
@@ -631,16 +571,6 @@
dbgPuts("Bad socket num!");
}
-/**
- * \brief Set how long between retries to wait.
- *
- * \param [in] sockNum - the number of the socket to set. readRetryWaitMs - how long to wait
- * before doing the read poll (calling read(...)).
- *
- * \return None.
- *
- * \details None.
- */
void WncController::setReadRetryWait(uint16_t numSock, uint16_t readRetryWaitMs)
{
if (numSock < MAX_NUM_WNC_SOCKETS)
@@ -649,15 +579,6 @@
dbgPuts("Bad socket num!");
}
-/**
- * \brief Close the socket.
- *
- * \param [in] sockNum - the number of the socket to close.
- *
- * \return None.
- *
- * \details None.
- */
bool WncController::closeSocket(uint16_t numSock)
{
if (numSock < MAX_NUM_WNC_SOCKETS) {
@@ -676,8 +597,6 @@
return (m_sSock[numSock].open == false);
}
-// Note: If you want to make it more portable, create a
-// arecharsavailable() and readchar()
size_t WncController::mdmGetline(string * buff, int timeout_ms)
{
char chin = '\0';
@@ -707,7 +626,6 @@
return (len);
}
-// Eventually this should try to reinstate the sockets open
bool WncController::softwareInitMdm(void)
{
static bool reportStatus = true;
@@ -744,8 +662,6 @@
}
}
-
-// Sets a global with failure or success, assumes 1 thread all the time
WncController::AtCmdErr_e WncController::sendWncCmd(const char * const s, string ** r, int ms_timeout)
{
if (checkCellLink() == false) {
@@ -883,7 +799,6 @@
} while (m_sSock[numSock].open == false);
}
-
bool WncController::getICCID(string * iccid)
{
if (at_geticcid_wnc(iccid) == false) {
@@ -919,7 +834,6 @@
return (true);
}
-
bool WncController::convertICCIDtoMSISDN(const string & iccid, string * msisdn)
{
msisdn->erase();
@@ -939,7 +853,6 @@
return (true);
}
-
bool WncController::sendSMSText(const char * const phoneNum, const char * const text)
{
if (at_sendSMStext_wnc(phoneNum, text) == true)
@@ -1628,7 +1541,6 @@
return (true);
}
-
int16_t WncController::at_sockopen_wnc(const char * const ip, uint16_t port, uint16_t numSock, bool tcp, uint16_t timeOutSec)
{
string * pRespStr;
@@ -1748,7 +1660,7 @@
return (false);
}
-WncController::AtCmdErr_e WncController::at_sockwrite_wnc(const char * s, uint16_t n, uint16_t numSock, bool isTcp)
+WncController::AtCmdErr_e WncController::at_sockwrite_wnc(const uint8_t * s, uint16_t n, uint16_t numSock, bool isTcp)
{
AtCmdErr_e result;
@@ -1768,7 +1680,7 @@
cmd_str += ",\"";
while(n > 0) {
n--;
- num2str = _to_hex_string((uint8_t)*s++);
+ num2str = _to_hex_string(*s++);
// Always 2-digit ascii hex:
if (num2str[1] == '\0')
cmd_str += '0';
@@ -2197,7 +2109,6 @@
puts("\r\n");
}
-// WNC used to have troubles handling full speed, seems to not need this now.
void WncController::sendCmd(const char * cmd, unsigned n, unsigned wait_uS, bool crLf)
{
while (n--) {
@@ -2212,5 +2123,4 @@
}
}
-
}; // End namespace WncController_fk
