From 2b14a9349cde885fd38274508394084c1ef47fe5 Mon Sep 17 00:00:00 2001 From: Javier Zorzano Date: Thu, 8 Jan 2015 18:36:41 +0100 Subject: [PATCH] Align types: int to unsigned int Block send SMS until finished operation. GSM3IO.h. Keeps most of board-dependant pins Flush buffer after GPRS detach Delete some references to HardwareSerial.h Include OFF modem status --- libraries/GSM/src/GSM.h | 3 +- libraries/GSM/src/GSM3CircularBuffer.cpp | 4 +-- libraries/GSM/src/GSM3IO.h | 26 +++++++++++++++ libraries/GSM/src/GSM3MobileAccessProvider.h | 7 +++- .../GSM/src/GSM3MobileMockupProvider.cpp | 1 + .../GSM/src/GSM3MobileNetworkProvider.cpp | 1 - .../GSM/src/GSM3ShieldV1AccessProvider.cpp | 33 +++++++++++++++++-- .../GSM/src/GSM3ShieldV1AccessProvider.h | 5 +++ .../src/GSM3ShieldV1DataNetworkProvider.cpp | 2 ++ libraries/GSM/src/GSM3ShieldV1ModemCore.cpp | 2 +- .../GSM/src/GSM3ShieldV1ModemVerification.cpp | 12 ++----- .../GSM/src/GSM3ShieldV1ModemVerification.h | 2 +- libraries/GSM/src/GSM3ShieldV1PinManagement.h | 2 +- libraries/GSM/src/GSM3ShieldV1SMSProvider.cpp | 1 + .../GSM/src/GSM3ShieldV1ScanNetworks.cpp | 2 +- libraries/GSM/src/GSM3SoftSerial.cpp | 15 +-------- 16 files changed, 83 insertions(+), 35 deletions(-) create mode 100644 libraries/GSM/src/GSM3IO.h diff --git a/libraries/GSM/src/GSM.h b/libraries/GSM/src/GSM.h index ec2bf6ae2..a071b082f 100644 --- a/libraries/GSM/src/GSM.h +++ b/libraries/GSM/src/GSM.h @@ -47,6 +47,7 @@ https://github.com/BlueVia/Official-Arduino #include #include #include +#include #include #include #include @@ -61,7 +62,7 @@ https://github.com/BlueVia/Official-Arduino #define GSMPIN GSM3ShieldV1PinManagement #define GSMModem GSM3ShieldV1ModemVerification -#define GSMCell GSM3CellManagement +#define GSMCell GSM3ShieldV1CellManagement #define GSMBand GSM3ShieldV1BandManagement #define GSMScanner GSM3ShieldV1ScanNetworks diff --git a/libraries/GSM/src/GSM3CircularBuffer.cpp b/libraries/GSM/src/GSM3CircularBuffer.cpp index e64c57120..cb6c4cbf9 100644 --- a/libraries/GSM/src/GSM3CircularBuffer.cpp +++ b/libraries/GSM/src/GSM3CircularBuffer.cpp @@ -31,8 +31,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA The latest version of this library can always be found at https://github.com/BlueVia/Official-Arduino */ -#include "GSM3CircularBuffer.h" -#include +#include +#include GSM3CircularBuffer::GSM3CircularBuffer(GSM3CircularBufferManager* mgr) { diff --git a/libraries/GSM/src/GSM3IO.h b/libraries/GSM/src/GSM3IO.h new file mode 100644 index 000000000..502b55237 --- /dev/null +++ b/libraries/GSM/src/GSM3IO.h @@ -0,0 +1,26 @@ +#ifdef TTOPEN_V1 + #define __POWERPIN__ 5 + #define __RESETPIN__ 6 +#else + #define __RESETPIN__ 7 +#endif + +#if defined(__AVR_ATmega328P__) + #ifdef TTOPEN_V1 + #define __TXPIN__ 3 + #define __RXPIN__ 4 + #define __RXINT__ 3 + #else + #define __TXPIN__ 3 + #define __RXPIN__ 2 + #define __RXINT__ 3 + #endif +#elif defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__) + #define __TXPIN__ 3 + #define __RXPIN__ 10 + #define __RXINT__ 4 +#elif defined(__AVR_ATmega32U4__) + #define __TXPIN__ 3 + #define __RXPIN__ 8 + #define __RXINT__ 3 +#endif \ No newline at end of file diff --git a/libraries/GSM/src/GSM3MobileAccessProvider.h b/libraries/GSM/src/GSM3MobileAccessProvider.h index 21ecd1b01..afaadc8b4 100644 --- a/libraries/GSM/src/GSM3MobileAccessProvider.h +++ b/libraries/GSM/src/GSM3MobileAccessProvider.h @@ -34,7 +34,7 @@ https://github.com/BlueVia/Official-Arduino #ifndef _GSM3MOBILEACCESSPROVIDER_ #define _GSM3MOBILEACCESSPROVIDER_ -enum GSM3_NetworkStatus_t { ERROR, IDLE, CONNECTING, GSM_READY, GPRS_READY, TRANSPARENT_CONNECTED}; +enum GSM3_NetworkStatus_t { ERROR, IDLE, CONNECTING, GSM_READY, GPRS_READY, TRANSPARENT_CONNECTED, OFF}; class GSM3MobileAccessProvider { @@ -59,6 +59,11 @@ class GSM3MobileAccessProvider */ virtual inline bool shutdown()=0; + /** Secure shutdown the modem (power off really) + @return always true + */ + virtual inline bool secureShutdown()=0; + /** Get last command status @return returns 0 if last command is still executing, 1 success, >1 error */ diff --git a/libraries/GSM/src/GSM3MobileMockupProvider.cpp b/libraries/GSM/src/GSM3MobileMockupProvider.cpp index b39ee26f5..8680e1846 100644 --- a/libraries/GSM/src/GSM3MobileMockupProvider.cpp +++ b/libraries/GSM/src/GSM3MobileMockupProvider.cpp @@ -35,6 +35,7 @@ https://github.com/BlueVia/Official-Arduino #include #include #include +#include GSM3MobileMockupProvider::GSM3MobileMockupProvider() diff --git a/libraries/GSM/src/GSM3MobileNetworkProvider.cpp b/libraries/GSM/src/GSM3MobileNetworkProvider.cpp index a8a91c219..c9fe01af3 100644 --- a/libraries/GSM/src/GSM3MobileNetworkProvider.cpp +++ b/libraries/GSM/src/GSM3MobileNetworkProvider.cpp @@ -32,7 +32,6 @@ The latest version of this library can always be found at https://github.com/BlueVia/Official-Arduino */ #include -#include GSM3MobileNetworkProvider* theProvider; diff --git a/libraries/GSM/src/GSM3ShieldV1AccessProvider.cpp b/libraries/GSM/src/GSM3ShieldV1AccessProvider.cpp index d628c9055..330d3f835 100644 --- a/libraries/GSM/src/GSM3ShieldV1AccessProvider.cpp +++ b/libraries/GSM/src/GSM3ShieldV1AccessProvider.cpp @@ -1,7 +1,7 @@ #include #include +#include "GSM3IO.h" -#define __RESETPIN__ 7 #define __TOUTSHUTDOWN__ 5000 #define __TOUTMODEMCONFIGURATION__ 5000//equivalent to 30000 because of time in interrupt routine. #define __TOUTAT__ 1000 @@ -38,6 +38,11 @@ GSM3_NetworkStatus_t GSM3ShieldV1AccessProvider::begin(char* pin, bool restart, { pinMode(__RESETPIN__, OUTPUT); + #ifdef TTOPEN_V1 + pinMode(__POWERPIN__, OUTPUT); + digitalWrite(__POWERPIN__, HIGH); + #endif + // If asked for modem restart, restart if (restart) HWrestart(); @@ -60,7 +65,11 @@ GSM3_NetworkStatus_t GSM3ShieldV1AccessProvider::begin(char* pin, bool restart, //HWrestart. int GSM3ShieldV1AccessProvider::HWrestart() { - + #ifdef TTOPEN_V1 + digitalWrite(__POWERPIN__, HIGH); + delay(1000); + #endif + theGSM3ShieldV1ModemCore.setStatus(IDLE); digitalWrite(__RESETPIN__, HIGH); delay(12000); @@ -292,5 +301,23 @@ bool GSM3ShieldV1AccessProvider::shutdown() return resp; } return false; -} +} +//Secure shutdown. +bool GSM3ShieldV1AccessProvider::secureShutdown() +{ + // It makes no sense to have an asynchronous shutdown + pinMode(__RESETPIN__, OUTPUT); + digitalWrite(__RESETPIN__, HIGH); + delay(900); + digitalWrite(__RESETPIN__, LOW); + theGSM3ShieldV1ModemCore.setStatus(OFF); + theGSM3ShieldV1ModemCore.gss.close(); + +#ifdef TTOPEN_V1 + _delay_ms(12000); + digitalWrite(__POWERPIN__, LOW); +#endif + + return true; +} \ No newline at end of file diff --git a/libraries/GSM/src/GSM3ShieldV1AccessProvider.h b/libraries/GSM/src/GSM3ShieldV1AccessProvider.h index 1ddcc8cc3..638fb5f17 100644 --- a/libraries/GSM/src/GSM3ShieldV1AccessProvider.h +++ b/libraries/GSM/src/GSM3ShieldV1AccessProvider.h @@ -89,6 +89,11 @@ class GSM3ShieldV1AccessProvider : public GSM3MobileAccessProvider, public GSM3S */ bool shutdown(); + /** Secure shutdown the modem (power off really) + @return true if successful + */ + bool secureShutdown(); + /** Returns 0 if last command is still executing @return 1 if success, >1 if error */ diff --git a/libraries/GSM/src/GSM3ShieldV1DataNetworkProvider.cpp b/libraries/GSM/src/GSM3ShieldV1DataNetworkProvider.cpp index f0b732a74..5f10df76c 100644 --- a/libraries/GSM/src/GSM3ShieldV1DataNetworkProvider.cpp +++ b/libraries/GSM/src/GSM3ShieldV1DataNetworkProvider.cpp @@ -219,6 +219,8 @@ void GSM3ShieldV1DataNetworkProvider::detachGPRSContinue() } else theGSM3ShieldV1ModemCore.closeCommand(3); } + theGSM3ShieldV1ModemCore.theBuffer().flush(); + theGSM3ShieldV1ModemCore.gss.spaceAvailable(); break; } } diff --git a/libraries/GSM/src/GSM3ShieldV1ModemCore.cpp b/libraries/GSM/src/GSM3ShieldV1ModemCore.cpp index ea08150ff..20678feeb 100644 --- a/libraries/GSM/src/GSM3ShieldV1ModemCore.cpp +++ b/libraries/GSM/src/GSM3ShieldV1ModemCore.cpp @@ -78,7 +78,7 @@ void GSM3ShieldV1ModemCore::closeCommand(int code) void GSM3ShieldV1ModemCore::genericCommand_rq(PGM_P str, bool addCR) { theBuffer().flush(); - writePGM(str, addCR); + writePGM(str, addCR); } //Generic command (const string). diff --git a/libraries/GSM/src/GSM3ShieldV1ModemVerification.cpp b/libraries/GSM/src/GSM3ShieldV1ModemVerification.cpp index 1ad15e9e9..c0e3da991 100644 --- a/libraries/GSM/src/GSM3ShieldV1ModemVerification.cpp +++ b/libraries/GSM/src/GSM3ShieldV1ModemVerification.cpp @@ -61,19 +61,13 @@ int GSM3ShieldV1ModemVerification::begin() // get IMEI String GSM3ShieldV1ModemVerification::getIMEI() { - String number; + String number(NULL); // AT command for obtain IMEI String modemResponse = modemAccess.writeModemCommand("AT+GSN", 2000); // Parse and check response char res_to_compare[modemResponse.length()]; modemResponse.toCharArray(res_to_compare, modemResponse.length()); - if(strstr(res_to_compare,"OK") == NULL) - { - return String(NULL); - } - else - { + if(strstr(res_to_compare,"OK") != NULL) number = modemResponse.substring(1, 17); - return number; - } + return number; } diff --git a/libraries/GSM/src/GSM3ShieldV1ModemVerification.h b/libraries/GSM/src/GSM3ShieldV1ModemVerification.h index e03980e03..98dbc4988 100644 --- a/libraries/GSM/src/GSM3ShieldV1ModemVerification.h +++ b/libraries/GSM/src/GSM3ShieldV1ModemVerification.h @@ -61,4 +61,4 @@ class GSM3ShieldV1ModemVerification }; -#endif; \ No newline at end of file +#endif \ No newline at end of file diff --git a/libraries/GSM/src/GSM3ShieldV1PinManagement.h b/libraries/GSM/src/GSM3ShieldV1PinManagement.h index ce43cdd14..d5924ea1f 100644 --- a/libraries/GSM/src/GSM3ShieldV1PinManagement.h +++ b/libraries/GSM/src/GSM3ShieldV1PinManagement.h @@ -100,4 +100,4 @@ class GSM3ShieldV1PinManagement void setPINUsed(bool used); }; -#endif; \ No newline at end of file +#endif \ No newline at end of file diff --git a/libraries/GSM/src/GSM3ShieldV1SMSProvider.cpp b/libraries/GSM/src/GSM3ShieldV1SMSProvider.cpp index 9ed075e7b..85d999067 100644 --- a/libraries/GSM/src/GSM3ShieldV1SMSProvider.cpp +++ b/libraries/GSM/src/GSM3ShieldV1SMSProvider.cpp @@ -52,6 +52,7 @@ int GSM3ShieldV1SMSProvider::endSMS() { theGSM3ShieldV1ModemCore.openCommand(this,ENDSMS); endSMSContinue(); + while(ready()==0) delay(100); return theGSM3ShieldV1ModemCore.getCommandError(); } diff --git a/libraries/GSM/src/GSM3ShieldV1ScanNetworks.cpp b/libraries/GSM/src/GSM3ShieldV1ScanNetworks.cpp index 9d7ea6b13..8b5d5e498 100644 --- a/libraries/GSM/src/GSM3ShieldV1ScanNetworks.cpp +++ b/libraries/GSM/src/GSM3ShieldV1ScanNetworks.cpp @@ -92,7 +92,7 @@ String GSM3ShieldV1ScanNetworks::readNetworks() String result; bool inQuotes=false; int quoteCounter=0; - for(int i=0; i #include #include "pins_arduino.h" #include #include -#if defined(__AVR_ATmega328P__) -#define __TXPIN__ 3 -#define __RXPIN__ 2 -#define __RXINT__ 3 -#elif defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__) -#define __TXPIN__ 3 -#define __RXPIN__ 10 -#define __RXINT__ 4 -#elif defined(__AVR_ATmega32U4__) -#define __TXPIN__ 3 -#define __RXPIN__ 8 -#define __RXINT__ 3 -#endif - #define __XON__ 0x11 #define __XOFF__ 0x13