diff --git a/examples/01_SMS_Send/01_SMS_Send.ino b/examples/01_SMS_Send/01_SMS_Send.ino index 46b0df2..4cfb382 100644 --- a/examples/01_SMS_Send/01_SMS_Send.ino +++ b/examples/01_SMS_Send/01_SMS_Send.ino @@ -35,7 +35,7 @@ SoftwareSerial lteSerial(8, 9); LTE_Shield lte; // Set the cell phone number to be texted -String DESTINATION_NUMBER = "11234567890"; +String DESTINATION_NUMBER = "11234567890"; //This is the full cell # including country code void setup() { Serial.begin(9600); @@ -64,4 +64,4 @@ void loop() { message += c; // Add last character to message } } -} \ No newline at end of file +} diff --git a/keywords.txt b/keywords.txt index 1f423de..6e9fd0e 100644 --- a/keywords.txt +++ b/keywords.txt @@ -107,6 +107,10 @@ gpsGetRmc KEYWORD2 gpsEnableSpeed KEYWORD2 gpsGetSpeed KEYWORD2 gpsRequest KEYWORD2 +enableDebugging KEYWORD2 +disableDebugging KEYWORD2 +debug KEYWORD2 +debugln KEYWORD2 ####################################### # Constants LITERAL1 diff --git a/src/SparkFun_LTE_Shield_Arduino_Library.cpp b/src/SparkFun_LTE_Shield_Arduino_Library.cpp index c570076..af1aeec 100644 --- a/src/SparkFun_LTE_Shield_Arduino_Library.cpp +++ b/src/SparkFun_LTE_Shield_Arduino_Library.cpp @@ -100,7 +100,7 @@ char lteShieldRXBuffer[128]; static boolean parseGPRMCString(char *rmcString, PositionData *pos, ClockData *clk, SpeedData *spd); -LTE_Shield::LTE_Shield(uint8_t powerPin, uint8_t resetPin) +LTE_Shield::LTE_Shield(uint8_t powerPin, uint8_t resetPin, uint8_t maxInitDepth) { #ifdef LTE_SHIELD_SOFTWARE_SERIAL_ENABLED _softSerial = NULL; @@ -109,6 +109,7 @@ LTE_Shield::LTE_Shield(uint8_t powerPin, uint8_t resetPin) _baud = 0; _resetPin = resetPin; _powerPin = powerPin; + _maxInitDepth = maxInitDepth; _socketReadCallback = NULL; _socketCloseCallback = NULL; _lastRemoteIP = {0, 0, 0, 0}; @@ -1564,10 +1565,21 @@ LTE_Shield_error_t LTE_Shield::init(unsigned long baud, { LTE_Shield_error_t err; + //If we have recursively called init too many times, bail + _currentInitDepth++; + if (_currentInitDepth == _maxInitDepth) + { + debugln(F("Module failed to init. Exiting.")); + return (LTE_SHIELD_ERROR_NO_RESPONSE); + } + + debugln(F("Begin module init.")); + beginSerial(baud); // Begin serial if (initType == LTE_SHIELD_INIT_AUTOBAUD) { + debugln(F("Attempting autobaud connection to module.")); if (autobaud(baud) != LTE_SHIELD_ERROR_SUCCESS) { return init(baud, LTE_SHIELD_INIT_RESET); @@ -1575,6 +1587,7 @@ LTE_Shield_error_t LTE_Shield::init(unsigned long baud, } else if (initType == LTE_SHIELD_INIT_RESET) { + debugln(F("Power cycling module.")); powerOn(); if (at() != LTE_SHIELD_ERROR_SUCCESS) { @@ -1586,7 +1599,12 @@ LTE_Shield_error_t LTE_Shield::init(unsigned long baud, err = enableEcho(false); if (err != LTE_SHIELD_ERROR_SUCCESS) + { + debugln(F("Module failed echo test.")); return init(baud, LTE_SHIELD_INIT_AUTOBAUD); + } + + debugln(F("Module responded successfully.")); _baud = baud; setGpioMode(GPIO1, NETWORK_STATUS); @@ -1607,6 +1625,8 @@ void LTE_Shield::powerOn(void) digitalWrite(_powerPin, LOW); delay(LTE_SHIELD_POWER_PULSE_PERIOD); pinMode(_powerPin, INPUT); // Return to high-impedance, rely on SARA module internal pull-up + delay(2000); //Wait before sending AT commands to module. 100 is too short. + debugln("Power cycle complete"); } void LTE_Shield::hwReset(void) @@ -1774,7 +1794,8 @@ LTE_Shield_error_t LTE_Shield::sendCommandWithResponse( if (hwAvailable()) { char c = readChar(); - //Serial.write(c); + debug((String)c); + if (responseDest != NULL) { responseDest[destIndex++] = c; @@ -2056,6 +2077,28 @@ char *LTE_Shield::lte_calloc_char(size_t num) return (char *)calloc(num, sizeof(char)); } +//Enable or disable the printing of extra debug statements +void LTE_Shield::enableDebugging(Stream &debugPort) +{ + _debugSerial = &debugPort; //Grab which port the user wants us to use for debugging + + _printDebug = true; //Should we print the commands we send? Good for debugging +} +void LTE_Shield::disableDebugging(void) +{ + _printDebug = false; //Turn off extra print statements +} +void LTE_Shield::debug(String toPrint) +{ + if (_printDebug) + _debugSerial->print(toPrint); +} +void LTE_Shield::debugln(String toPrint) +{ + if (_printDebug) + _debugSerial->println(toPrint); +} + // GPS Helper Functions: // Read a source string until a delimiter is hit, store the result in destination @@ -2255,4 +2298,4 @@ static boolean parseGPRMCString(char *rmcString, PositionData *pos, return true; } return false; -} \ No newline at end of file +} diff --git a/src/SparkFun_LTE_Shield_Arduino_Library.h b/src/SparkFun_LTE_Shield_Arduino_Library.h index 8d6b6d4..3bf5a4a 100644 --- a/src/SparkFun_LTE_Shield_Arduino_Library.h +++ b/src/SparkFun_LTE_Shield_Arduino_Library.h @@ -165,7 +165,7 @@ class LTE_Shield : public Print { public: // Constructor - LTE_Shield(uint8_t powerPin = LTE_SHIELD_POWER_PIN, uint8_t resetPin = LTE_SHIELD_RESET_PIN); + LTE_Shield(uint8_t powerPin = LTE_SHIELD_POWER_PIN, uint8_t resetPin = LTE_SHIELD_RESET_PIN, uint8_t maxInitDepth = 9); // Begin -- initialize BT module and ensure it's connected #ifdef LTE_SHIELD_SOFTWARE_SERIAL_ENABLED @@ -319,6 +319,11 @@ class LTE_Shield : public Print LTE_Shield_error_t gpsRequest(unsigned int timeout, uint32_t accuracy, boolean detailed = true); + void enableDebugging(Stream &debugPort = Serial); //Turn on command sending and response printing. If user doesn't specify then Serial will be used + void disableDebugging(void); + void debug(String toPrint); + void debugln(String toPrint); + private: HardwareSerial *_hardSerial; #ifdef LTE_SHIELD_SOFTWARE_SERIAL_ENABLED @@ -331,6 +336,11 @@ class LTE_Shield : public Print IPAddress _lastRemoteIP; IPAddress _lastLocalIP; + bool _printDebug = false; + Stream *_debugSerial; + uint8_t _maxInitDepth; + uint8_t _currentInitDepth = 0; + void (*_socketReadCallback)(int, String); void (*_socketCloseCallback)(int); void (*_gpsRequestCallback)(ClockData, PositionData, SpeedData, unsigned long); pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy