diff --git a/.travis.yml b/.travis.yml index a3dc361..33c975a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,23 +18,30 @@ env: - PLATFORMIO_CI_SRC=tools/FactoryReset # Arduino test - - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_SIM800' --project-option='framework=arduino' --board=uno --board=leonardo --board=yun --board=megaatmega2560 --board=genuino101 --board=mkr1000USB --board=zero --board=teensy31 --board=bluepill_f103c8 --board=uno_pic32 --board=esp01 --board=nodemcuv2 --board=esp32dev --board=mayfly" - - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_SIM900' --project-option='framework=arduino' --board=uno --board=leonardo --board=yun --board=megaatmega2560 --board=genuino101 --board=mkr1000USB --board=zero --board=teensy31 --board=bluepill_f103c8 --board=uno_pic32 --board=esp01 --board=nodemcuv2 --board=esp32dev --board=mayfly" - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_A6' --project-option='framework=arduino' --board=uno --board=leonardo --board=yun --board=megaatmega2560 --board=genuino101 --board=mkr1000USB --board=zero --board=teensy31 --board=bluepill_f103c8 --board=uno_pic32 --board=esp01 --board=nodemcuv2 --board=esp32dev --board=mayfly" - - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_M590' --project-option='framework=arduino' --board=uno --board=leonardo --board=yun --board=megaatmega2560 --board=genuino101 --board=mkr1000USB --board=zero --board=teensy31 --board=bluepill_f103c8 --board=uno_pic32 --board=esp01 --board=nodemcuv2 --board=esp32dev --board=mayfly" + - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_BG96' --project-option='framework=arduino' --board=uno --board=leonardo --board=yun --board=megaatmega2560 --board=genuino101 --board=mkr1000USB --board=zero --board=teensy31 --board=bluepill_f103c8 --board=uno_pic32 --board=esp01 --board=nodemcuv2 --board=esp32dev --board=mayfly" - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_ESP8266' --project-option='framework=arduino' --board=uno --board=leonardo --board=yun --board=megaatmega2560 --board=genuino101 --board=mkr1000USB --board=zero --board=teensy31 --board=bluepill_f103c8 --board=uno_pic32 --board=esp01 --board=nodemcuv2 --board=esp32dev --board=mayfly" - - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_UBLOX' --project-option='framework=arduino' --board=uno --board=leonardo --board=yun --board=megaatmega2560 --board=genuino101 --board=mkr1000USB --board=zero --board=teensy31 --board=bluepill_f103c8 --board=uno_pic32 --board=esp01 --board=nodemcuv2 --board=esp32dev --board=mayfly" - - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_BG96' --project-option='framework=arduino' --board=uno --board=leonardo --board=yun --board=megaatmega2560 --board=genuino101 --board=mkr1000USB --board=zero --board=teensy31 --board=bluepill_f103c8 --board=uno_pic32 --board=esp01 --board=nodemcuv2 --board=esp32dev --board=mayfly" + - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_M95' --project-option='framework=arduino' --board=uno --board=leonardo --board=yun --board=megaatmega2560 --board=genuino101 --board=mkr1000USB --board=zero --board=teensy31 --board=bluepill_f103c8 --board=uno_pic32 --board=esp01 --board=nodemcuv2 --board=esp32dev --board=mayfly" + - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_M590' --project-option='framework=arduino' --board=uno --board=leonardo --board=yun --board=megaatmega2560 --board=genuino101 --board=mkr1000USB --board=zero --board=teensy31 --board=bluepill_f103c8 --board=uno_pic32 --board=esp01 --board=nodemcuv2 --board=esp32dev --board=mayfly" + - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_MC60' --project-option='framework=arduino' --board=uno --board=leonardo --board=yun --board=megaatmega2560 --board=genuino101 --board=mkr1000USB --board=zero --board=teensy31 --board=bluepill_f103c8 --board=uno_pic32 --board=esp01 --board=nodemcuv2 --board=esp32dev --board=mayfly" + - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_SIM800' --project-option='framework=arduino' --board=uno --board=leonardo --board=yun --board=megaatmega2560 --board=genuino101 --board=mkr1000USB --board=zero --board=teensy31 --board=bluepill_f103c8 --board=uno_pic32 --board=esp01 --board=nodemcuv2 --board=esp32dev --board=mayfly" + - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_SIM900' --project-option='framework=arduino' --board=uno --board=leonardo --board=yun --board=megaatmega2560 --board=genuino101 --board=mkr1000USB --board=zero --board=teensy31 --board=bluepill_f103c8 --board=uno_pic32 --board=esp01 --board=nodemcuv2 --board=esp32dev --board=mayfly" + - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_SIM808' --project-option='framework=arduino' --board=uno --board=leonardo --board=yun --board=megaatmega2560 --board=genuino101 --board=mkr1000USB --board=zero --board=teensy31 --board=bluepill_f103c8 --board=uno_pic32 --board=esp01 --board=nodemcuv2 --board=esp32dev --board=mayfly" + - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_UBLOX' --project-option='framework=arduino' --board=uno --board=leonardo --board=yun --board=megaatmega2560 --board=genuino101 --board=mkr1000USB --board=zero --board=teensy31 --board=bluepill_f103c8 --board=uno_pic32 --board=esp01 --board=nodemcuv2 --board=esp32dev --board=mayfly" - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_XBEE' --project-option='framework=arduino' --board=uno --board=leonardo --board=yun --board=megaatmega2560 --board=genuino101 --board=mkr1000USB --board=zero --board=teensy31 --board=bluepill_f103c8 --board=uno_pic32 --board=esp01 --board=nodemcuv2 --board=esp32dev --board=mayfly" # Energia test - - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_SIM800' --project-option='framework=energia' --board=lplm4f120h5qr" - - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_SIM900' --project-option='framework=energia' --board=lplm4f120h5qr" - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_A6' --project-option='framework=energia' --board=lplm4f120h5qr" - - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_M590' --project-option='framework=energia' --board=lplm4f120h5qr" - - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_ESP8266' --project-option='framework=energia' --board=lplm4f120h5qr" - - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_UBLOX' --project-option='framework=energia' --board=lplm4f120h5qr" - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_BG96' --project-option='framework=energia' --board=lplm4f120h5qr" + - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_ESP8266' --project-option='framework=energia' --board=lplm4f120h5qr" + - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_M95' --project-option='framework=energia' --board=lplm4f120h5qr" + - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_M590' --project-option='framework=energia' --board=lplm4f120h5qr" + - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_MC60' --project-option='framework=energia' --board=lplm4f120h5qr" + - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_SIM800' --project-option='framework=energia' --board=lplm4f120h5qr" + - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_SIM900' --project-option='framework=energia' --board=lplm4f120h5qr" + - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_SIM808' --project-option='framework=energia' --board=lplm4f120h5qr" + - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_UBLOX' --project-option='framework=energia' --board=lplm4f120h5qr" + - PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_XBEE' --project-option='framework=energia' --board=lplm4f120h5qr" # Disabled due to a bug in Energia readBytes implementation #- PLATFORMIO_CI_SRC=tools/test_build PLATFORMIO_CI_ARGS="--project-option='build_flags=-D TINY_GSM_MODEM_XBEE' --project-option='framework=energia' --board=lplm4f120h5qr" @@ -58,5 +65,7 @@ install: - platformio lib -g install 89 415 1202 1286 - platformio lib -g update - platformio lib update + - platformio lib list + - platformio lib -g list script: make travis-build diff --git a/extras/doc/Quectel_M95_GSM_Specification_V3.1.pdf b/extras/doc/Quectel_M95_GSM_Specification_V3.1.pdf deleted file mode 100644 index b73c228..0000000 Binary files a/extras/doc/Quectel_M95_GSM_Specification_V3.1.pdf and /dev/null differ diff --git a/extras/doc/SIM800 AT Commands v1.10.pdf b/extras/doc/SIM800 AT Commands v1.10.pdf deleted file mode 100644 index 0ec8983..0000000 Binary files a/extras/doc/SIM800 AT Commands v1.10.pdf and /dev/null differ diff --git a/extras/doc/SIM800 Hardware Design V1.08.pdf b/extras/doc/SIM800 Hardware Design V1.08.pdf deleted file mode 100644 index fed3779..0000000 Binary files a/extras/doc/SIM800 Hardware Design V1.08.pdf and /dev/null differ diff --git a/extras/doc/SIM800 Series Software Upgrade Application Note V1.00.pdf b/extras/doc/SIM800 Series Software Upgrade Application Note V1.00.pdf deleted file mode 100644 index e3b3460..0000000 Binary files a/extras/doc/SIM800 Series Software Upgrade Application Note V1.00.pdf and /dev/null differ diff --git a/extras/doc/SIM800+Series Bluetooth Application Note V1.04.pdf b/extras/doc/SIM800+Series Bluetooth Application Note V1.04.pdf deleted file mode 100644 index b0ed6c6..0000000 Binary files a/extras/doc/SIM800+Series Bluetooth Application Note V1.04.pdf and /dev/null differ diff --git a/extras/doc/SIM800+Series Email Application Note V1.00.pdf b/extras/doc/SIM800+Series Email Application Note V1.00.pdf deleted file mode 100644 index 3664f5e..0000000 Binary files a/extras/doc/SIM800+Series Email Application Note V1.00.pdf and /dev/null differ diff --git a/library.json b/library.json index 7fa368a..c49992d 100644 --- a/library.json +++ b/library.json @@ -1,6 +1,6 @@ { "name": "TinyGSM", - "version": "0.4.2", + "version": "0.4.3", "description": "A small Arduino library for GPRS modules, that just works. Includes examples for Blynk, MQTT, File Download, and Web Client. Supports many GSM and wifi modules with AT command interfaces.", "keywords": "GSM, AT commands, AT, SIM800, SIM900, A6, A7, M590, ESP8266, SIM800A, SIM800C, SIM800L, SIM800H, SIM808, SIM868, SIM900A, SIM900D, SIM908, SIM968, M95, MC60, MC60E, BG96, ublox", "authors": diff --git a/library.properties b/library.properties index 83d7f81..8c65d1a 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=TinyGSM -version=0.4.2 +version=0.4.3 author=Volodymyr Shymanskyy maintainer=Volodymyr Shymanskyy sentence=A small Arduino library for GPRS modules, that just works. diff --git a/src/TinyGsmClientA6.h b/src/TinyGsmClientA6.h index 42760d4..5e9d84d 100644 --- a/src/TinyGsmClientA6.h +++ b/src/TinyGsmClientA6.h @@ -12,10 +12,6 @@ //#define TINY_GSM_DEBUG Serial -#if !defined(TINY_GSM_RX_BUFFER) - #define TINY_GSM_RX_BUFFER 256 -#endif - #define TINY_GSM_MUX_COUNT 8 #include @@ -125,8 +121,7 @@ public: virtual int read(uint8_t *buf, size_t size) { TINY_GSM_YIELD(); size_t cnt = 0; - uint32_t _startMillis = millis(); - while (cnt < size && millis() - _startMillis < _timeout) { + while (cnt < size && sock_connected) { size_t chunk = TinyGsmMin(size-cnt, rx.size()); if (chunk > 0) { rx.get(buf, chunk); @@ -135,9 +130,8 @@ public: continue; } // TODO: Read directly into user buffer? - if (!rx.size() && sock_connected) { + if (!rx.size()) { at->maintain(); - //break; } } return cnt; @@ -189,7 +183,6 @@ public: */ bool init(const char* pin = NULL) { - DBG(GF("### Modem Defined:"), getModemName()); if (!testAT()) { return false; } @@ -197,12 +190,11 @@ public: if (waitResponse() != 1) { return false; } - sendAT(GF("+CMEE=0")); + sendAT(GF("+CMEE=0")); // Turn of verbose errors waitResponse(); - - sendAT(GF("+CMER=3,0,0,2")); + sendAT(GF("+CMER=3,0,0,2")); // Set unsolicited result code output destination waitResponse(); - + DBG(GF("### Modem:"), getModemName()); getSimStatus(); return true; } @@ -223,10 +215,7 @@ public: bool testAT(unsigned long timeout = 10000L) { for (unsigned long start = millis(); millis() - start < timeout; ) { sendAT(GF("")); - if (waitResponse(200) == 1) { - delay(100); - return true; - } + if (waitResponse(200) == 1) return true; delay(100); } return false; diff --git a/src/TinyGsmClientBG96.h b/src/TinyGsmClientBG96.h index ac76365..5809f04 100644 --- a/src/TinyGsmClientBG96.h +++ b/src/TinyGsmClientBG96.h @@ -13,10 +13,6 @@ //#define TINY_GSM_DEBUG Serial //#define TINY_GSM_USE_HEX -#if !defined(TINY_GSM_RX_BUFFER) - #define TINY_GSM_RX_BUFFER 64 -#endif - #define TINY_GSM_MUX_COUNT 12 #include @@ -213,7 +209,6 @@ public: */ bool init(const char* pin = NULL) { - DBG(GF("### Modem Defined:"), getModemName()); if (!testAT()) { return false; } @@ -221,6 +216,7 @@ public: if (waitResponse() != 1) { return false; } + DBG(GF("### Modem:"), getModemName()); getSimStatus(); return true; } @@ -236,10 +232,7 @@ public: bool testAT(unsigned long timeout = 10000L) { for (unsigned long start = millis(); millis() - start < timeout; ) { sendAT(GF("")); - if (waitResponse(200) == 1) { - delay(100); - return true; - } + if (waitResponse(200) == 1) return true; delay(100); } return false; @@ -308,8 +301,9 @@ public: } bool poweroff() { - sendAT(GF("+QPOWD")); - return waitResponse(GF("POWERED DOWN")) == 1; // TODO + sendAT(GF("+QPOWD=1")); + waitResponse(300); // returns OK first + return waitResponse(300, GF("POWERED DOWN")) == 1; } bool radioOff() { diff --git a/src/TinyGsmClientESP8266.h b/src/TinyGsmClientESP8266.h index b6da2b2..91f0319 100644 --- a/src/TinyGsmClientESP8266.h +++ b/src/TinyGsmClientESP8266.h @@ -12,10 +12,6 @@ //#define TINY_GSM_DEBUG Serial -#if !defined(TINY_GSM_RX_BUFFER) - #define TINY_GSM_RX_BUFFER 512 -#endif - #define TINY_GSM_MUX_COUNT 5 #include @@ -122,8 +118,7 @@ public: virtual int read(uint8_t *buf, size_t size) { TINY_GSM_YIELD(); size_t cnt = 0; - uint32_t _startMillis = millis(); - while (cnt < size && millis() - _startMillis < _timeout) { + while (cnt < size && sock_connected) { size_t chunk = TinyGsmMin(size-cnt, rx.size()); if (chunk > 0) { rx.get(buf, chunk); @@ -132,9 +127,8 @@ public: continue; } // TODO: Read directly into user buffer? - if (!rx.size() && sock_connected) { + if (!rx.size()) { at->maintain(); - //break; } } return cnt; @@ -206,7 +200,6 @@ public: */ bool init(const char* pin = NULL) { - DBG(GF("### Modem Defined:"), getModemName()); if (!testAT()) { return false; } @@ -222,6 +215,7 @@ public: if (waitResponse() != 1) { return false; } + DBG(GF("### Modem:"), getModemName()); return true; } @@ -236,10 +230,7 @@ public: bool testAT(unsigned long timeout = 10000L) { for (unsigned long start = millis(); millis() - start < timeout; ) { sendAT(GF("")); - if (waitResponse(200) == 1) { - delay(100); - return true; - } + if (waitResponse(200) == 1) return true; delay(100); } return false; @@ -297,7 +288,10 @@ public: return init(); } - bool poweroff() TINY_GSM_ATTR_NOT_IMPLEMENTED; + bool poweroff() { + sendAT(GF("+GSLP=0")); // Power down indefinitely - until manually reset! + return waitResponse() == 1; + } bool radioOff() TINY_GSM_ATTR_NOT_IMPLEMENTED; diff --git a/src/TinyGsmClientM590.h b/src/TinyGsmClientM590.h index d919a17..fa4eb57 100644 --- a/src/TinyGsmClientM590.h +++ b/src/TinyGsmClientM590.h @@ -12,10 +12,6 @@ //#define TINY_GSM_DEBUG Serial -#if !defined(TINY_GSM_RX_BUFFER) - #define TINY_GSM_RX_BUFFER 256 -#endif - #define TINY_GSM_MUX_COUNT 2 #include @@ -122,8 +118,7 @@ public: virtual int read(uint8_t *buf, size_t size) { TINY_GSM_YIELD(); size_t cnt = 0; - uint32_t _startMillis = millis(); - while (cnt < size && millis() - _startMillis < _timeout) { + while (cnt < size && sock_connected) { size_t chunk = TinyGsmMin(size-cnt, rx.size()); if (chunk > 0) { rx.get(buf, chunk); @@ -132,9 +127,8 @@ public: continue; } // TODO: Read directly into user buffer? - if (!rx.size() && sock_connected) { + if (!rx.size()) { at->maintain(); - //break; } } return cnt; @@ -186,7 +180,6 @@ public: */ bool init(const char* pin = NULL) { - DBG(GF("### Modem Defined:"), getModemName()); if (!testAT()) { return false; } @@ -198,7 +191,7 @@ public: sendAT(GF("+CMEE=2")); waitResponse(); #endif - + DBG(GF("### Modem:"), getModemName()); getSimStatus(); return true; } @@ -214,10 +207,7 @@ public: bool testAT(unsigned long timeout = 10000L) { for (unsigned long start = millis(); millis() - start < timeout; ) { sendAT(GF("")); - if (waitResponse(200) == 1) { - delay(100); - return true; - } + if (waitResponse(200) == 1) return true; delay(100); } return false; diff --git a/src/TinyGsmClientM95.h b/src/TinyGsmClientM95.h index 6b01da1..2642b2f 100644 --- a/src/TinyGsmClientM95.h +++ b/src/TinyGsmClientM95.h @@ -13,10 +13,6 @@ //#define TINY_GSM_DEBUG Serial //#define TINY_GSM_USE_HEX -#if !defined(TINY_GSM_RX_BUFFER) - #define TINY_GSM_RX_BUFFER 64 -#endif - #define TINY_GSM_MUX_COUNT 6 #include @@ -137,7 +133,7 @@ public: // TODO: Read directly into user buffer? at->maintain(); if (sock_available > 0) { - at->modemRead(rx.free(), mux); + sock_available -= at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux); } else { break; } @@ -213,7 +209,6 @@ public: */ bool init(const char* pin = NULL) { - DBG(GF("### Modem Defined:"), getModemName()); if (!testAT()) { return false; } @@ -225,7 +220,7 @@ public: sendAT(GF("+CMEE=2")); waitResponse(); #endif - + DBG(GF("### Modem:"), getModemName()); getSimStatus(); return true; } @@ -241,10 +236,7 @@ public: bool testAT(unsigned long timeout = 10000L) { for (unsigned long start = millis(); millis() - start < timeout; ) { sendAT(GF("")); - if (waitResponse(200) == 1) { - delay(100); - return true; - } + if (waitResponse(200) == 1) return true; delay(100); } return false; @@ -316,8 +308,8 @@ public: } bool poweroff() { - sendAT(GF("+QPOWD")); - return waitResponse(GF("POWERED DOWN")) == 1; // TODO + sendAT(GF("+QPOWD=1")); + return waitResponse(300, GF("NORMAL POWER DOWN")) == 1; } bool radioOff() { @@ -329,6 +321,8 @@ public: return true; } + bool sleepEnable(bool enable = true) TINY_GSM_ATTR_NOT_IMPLEMENTED; + /* * SIM card functions */ @@ -644,14 +638,11 @@ public: protected: bool modemConnect(const char* host, uint16_t port, uint8_t mux, bool ssl = false) { - sendAT(GF("+QIOPEN="), GF("\"TCP"), GF("\",\""), host, GF("\","), port); + sendAT(GF("+QIOPEN="), mux, GF("\"TCP"), GF("\",\""), host, GF("\","), port); int rsp = waitResponse(75000L, GF("CONNECT OK" GSM_NL), GF("CONNECT FAIL" GSM_NL), GF("ALREADY CONNECT" GSM_NL)); - if ( rsp != 1 ) { - return false; - } return (1 == rsp); } diff --git a/src/TinyGsmClientMC60.h b/src/TinyGsmClientMC60.h index 6e908c6..08cd77d 100644 --- a/src/TinyGsmClientMC60.h +++ b/src/TinyGsmClientMC60.h @@ -16,10 +16,6 @@ //#define TINY_GSM_DEBUG Serial //#define TINY_GSM_USE_HEX -#if !defined(TINY_GSM_RX_BUFFER) - #define TINY_GSM_RX_BUFFER 64 -#endif - #define TINY_GSM_MUX_COUNT 6 #include @@ -141,7 +137,7 @@ public: // TODO: Read directly into user buffer? at->maintain(); if (sock_available > 0) { - at->modemRead(rx.free(), mux); + sock_available -= at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux); } else { break; } @@ -217,7 +213,6 @@ public: */ bool init(const char* pin = NULL) { - DBG(GF("### Modem Defined:"), getModemName()); if (!testAT()) { return false; } @@ -227,6 +222,7 @@ public: if (waitResponse() != 1) { return false; } + DBG(GF("### Modem:"), getModemName()); getSimStatus(); return true; } @@ -247,10 +243,7 @@ public: bool testAT(unsigned long timeout = 10000L) { for (unsigned long start = millis(); millis() - start < timeout; ) { sendAT(GF("")); - if (waitResponse(200) == 1) { - delay(100); - return true; - } + if (waitResponse(200) == 1) return true; delay(100); } return false; @@ -350,6 +343,8 @@ public: return true; } + bool sleepEnable(bool enable = true) TINY_GSM_ATTR_NOT_IMPLEMENTED; + /* * SIM card functions */ @@ -671,14 +666,11 @@ public: protected: bool modemConnect(const char* host, uint16_t port, uint8_t mux, bool ssl = false) { - sendAT(GF("+QIOPEN="), GF("\"TCP"), GF("\",\""), host, GF("\","), port); + sendAT(GF("+QIOPEN="), mux, GF("\"TCP"), GF("\",\""), host, GF("\","), port); int rsp = waitResponse(75000L, GF("CONNECT OK" GSM_NL), GF("CONNECT FAIL" GSM_NL), GF("ALREADY CONNECT" GSM_NL)); - if ( rsp != 1 ) { - return false; - } return (1 == rsp); } diff --git a/src/TinyGsmClientSIM800.h b/src/TinyGsmClientSIM800.h index e34020d..924275a 100644 --- a/src/TinyGsmClientSIM800.h +++ b/src/TinyGsmClientSIM800.h @@ -13,10 +13,6 @@ //#define TINY_GSM_DEBUG Serial //#define TINY_GSM_USE_HEX -#if !defined(TINY_GSM_RX_BUFFER) - #define TINY_GSM_RX_BUFFER 64 -#endif - #define TINY_GSM_MUX_COUNT 5 #include @@ -150,7 +146,7 @@ public: // TODO: Read directly into user buffer? at->maintain(); if (sock_available > 0) { - at->modemRead(rx.free(), mux); + sock_available -= at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux); } else { break; } @@ -227,7 +223,6 @@ public: */ bool init(const char* pin = NULL) { - DBG(GF("### Modem Defined:"), getModemName()); if (!testAT()) { return false; } @@ -237,6 +232,7 @@ public: if (waitResponse() != 1) { return false; } + DBG(GF("### Modem:"), getModemName()); getSimStatus(); return true; } @@ -262,10 +258,7 @@ public: //streamWrite(GF("AAAAA" GSM_NL)); // TODO: extra A's to help detect the baud rate for (unsigned long start = millis(); millis() - start < timeout; ) { sendAT(GF("")); - if (waitResponse(200) == 1) { - delay(100); - return true; - } + if (waitResponse(200) == 1) return true; delay(100); } return false; diff --git a/src/TinyGsmClientUBLOX.h b/src/TinyGsmClientUBLOX.h index 48556d5..43a1c63 100644 --- a/src/TinyGsmClientUBLOX.h +++ b/src/TinyGsmClientUBLOX.h @@ -12,10 +12,6 @@ //#define TINY_GSM_DEBUG Serial -#if !defined(TINY_GSM_RX_BUFFER) - #define TINY_GSM_RX_BUFFER 64 -#endif - #define TINY_GSM_MUX_COUNT 5 #include @@ -212,7 +208,6 @@ public: */ bool init(const char* pin = NULL) { - DBG(GF("### Modem Defined:"), getModemName()); if (!testAT()) { return false; } @@ -220,6 +215,7 @@ public: if (waitResponse() != 1) { return false; } + DBG(GF("### Modem:"), getModemName()); int ret = getSimStatus(); if (ret != SIM_READY && pin != NULL && strlen(pin) > 0) { simUnlock(pin); @@ -228,7 +224,25 @@ public: } String getModemName() { - return "u-blox Cellular Modem"; + sendAT(GF("+CGMI")); + String res1; + if (waitResponse(1000L, res1) != 1) { + return "u-blox Cellular Modem"; + } + res1.replace(GSM_NL "OK" GSM_NL, ""); + res1.replace(GSM_NL, " "); + res1.trim(); + + sendAT(GF("+GMM")); + String res2; + if (waitResponse(1000L, res2) != 1) { + return "u-blox Cellular Modem"; + } + res2.replace(GSM_NL "OK" GSM_NL, ""); + res2.replace(GSM_NL, " "); + res2.trim(); + + return res1 + String(' ') + res2; } void setBaud(unsigned long baud) { @@ -238,10 +252,7 @@ public: bool testAT(unsigned long timeout = 10000L) { for (unsigned long start = millis(); millis() - start < timeout; ) { sendAT(GF("")); - if (waitResponse(200) == 1) { - delay(100); - return true; - } + if (waitResponse(200) == 1) return true; delay(100); } return false; @@ -307,7 +318,10 @@ public: return init(); } - bool poweroff() TINY_GSM_ATTR_NOT_IMPLEMENTED; + bool poweroff() { + sendAT(GF("+CPWROFF")); + return waitResponse(40000L) == 1; + } bool radioOff() { sendAT(GF("+CFUN=0")); @@ -568,8 +582,8 @@ public: protected: bool modemConnect(const char* host, uint16_t port, uint8_t* mux, bool ssl = false) { - sendAT(GF("+USOCR=6")); - if (waitResponse(GF(GSM_NL "+USOCR:")) != 1) { + sendAT(GF("+USOCR=6")); // create a socket + if (waitResponse(GF(GSM_NL "+USOCR:")) != 1) { // reply is +USOCR: ## of socket created return false; } *mux = stream.readStringUntil('\n').toInt(); @@ -588,7 +602,7 @@ protected: //sendAT(GF("+USOSO="), *mux, GF(",6,2,30000")); //waitResponse(); - sendAT(GF("+USOCO="), *mux, ",\"", host, "\",", port); + sendAT(GF("+USOCO="), *mux, ",\"", host, "\",", port); // connect on socket int rsp = waitResponse(75000L); return (1 == rsp); } diff --git a/src/TinyGsmClientXBee.h b/src/TinyGsmClientXBee.h index 0c82962..8191330 100644 --- a/src/TinyGsmClientXBee.h +++ b/src/TinyGsmClientXBee.h @@ -276,9 +276,9 @@ public: { sendAT(); if (waitResponse(200) == 1) { + exitCommand(); return true; } - exitCommand(); } delay(100); } @@ -402,7 +402,9 @@ public: exitCommand(); } - bool poweroff() TINY_GSM_ATTR_NOT_IMPLEMENTED; + bool poweroff() { // Not supported + return false; + } bool radioOff() TINY_GSM_ATTR_NOT_IMPLEMENTED; diff --git a/src/TinyGsmCommon.h b/src/TinyGsmCommon.h index 2cd7827..d915b26 100644 --- a/src/TinyGsmCommon.h +++ b/src/TinyGsmCommon.h @@ -31,6 +31,10 @@ #define TINY_GSM_YIELD() { delay(0); } #endif +#if !defined(TINY_GSM_RX_BUFFER) + #define TINY_GSM_RX_BUFFER 256 +#endif + #define TINY_GSM_ATTR_NOT_AVAILABLE __attribute__((error("Not available on this modem type"))) #define TINY_GSM_ATTR_NOT_IMPLEMENTED __attribute__((error("Not implemented"))) @@ -239,6 +243,7 @@ public: */ virtual bool restart() = 0; + virtual bool poweroff() = 0; /* * SIM card functions - only apply to cellular modems @@ -282,6 +287,7 @@ public: return false; } virtual bool gprsDisconnect() { return false; } + virtual bool isGprsConnected() { return false; } /* * IP Address functions diff --git a/tools/test_build/test_build.ino b/tools/test_build/test_build.ino index 0086c2a..296f623 100644 --- a/tools/test_build/test_build.ino +++ b/tools/test_build/test_build.ino @@ -3,7 +3,7 @@ * DO NOT USE THIS - this is just a compilation test! * **************************************************************/ -#define TINY_GSM_MODEM_SIM800 +// #define TINY_GSM_MODEM_SIM800 #include