Browse Source

Merge pull request #287 from EnviroDIY/master

Fix the damage I did to SIM800
v_master v0.7.7
Sara Damiano 5 years ago
committed by GitHub
parent
commit
7e4de816a0
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
20 changed files with 339 additions and 185 deletions
  1. +1
    -0
      .gitignore
  2. +55
    -41
      examples/AllFunctions/AllFunctions.ino
  3. +1
    -1
      examples/BlynkClient/BlynkClient.ino
  4. +16
    -9
      examples/HttpClient/HttpClient.ino
  5. +24
    -10
      examples/HttpsClient/HttpsClient.ino
  6. +63
    -8
      examples/MqttClient/MqttClient.ino
  7. +25
    -15
      examples/WebClient/WebClient.ino
  8. +1
    -1
      library.json
  9. +1
    -1
      library.properties
  10. +5
    -4
      src/TinyGsmClientBG96.h
  11. +17
    -21
      src/TinyGsmClientM95.h
  12. +16
    -20
      src/TinyGsmClientMC60.h
  13. +10
    -10
      src/TinyGsmClientSIM7000.h
  14. +11
    -11
      src/TinyGsmClientSIM800.h
  15. +0
    -1
      src/TinyGsmClientSaraR4.h
  16. +3
    -3
      src/TinyGsmClientSequansMonarch.h
  17. +0
    -1
      src/TinyGsmClientUBLOX.h
  18. +2
    -2
      src/TinyGsmClientXBee.h
  19. +4
    -4
      src/TinyGsmCommon.h
  20. +84
    -22
      tools/Diagnostics/Diagnostics.ino

+ 1
- 0
.gitignore View File

@ -16,6 +16,7 @@
.settings
.pioenvs
.piolibdeps
.pio/*
.clang_complete
.gcc-flags.json
platformio.ini


+ 55
- 41
examples/AllFunctions/AllFunctions.ino View File

@ -28,6 +28,16 @@
// #define TINY_GSM_MODEM_XBEE
// #define TINY_GSM_MODEM_SEQUANS_MONARCH
// See all AT commands, if wanted
// #define DUMP_AT_COMMANDS
// Define the serial console for debug prints, if needed
#define TINY_GSM_DEBUG SerialMon
// Range to attempt to autobaud
#define GSM_AUTOBAUD_MIN 9600
#define GSM_AUTOBAUD_MAX 38400
// Set serial for debug console (to the Serial Monitor, default speed 115200)
#define SerialMon Serial
@ -39,24 +49,15 @@
//#include <SoftwareSerial.h>
//SoftwareSerial SerialAT(2, 3); // RX, TX
// See all AT commands, if wanted
//#define DUMP_AT_COMMANDS
// See the debugging, if wanted
#define TINY_GSM_DEBUG SerialMon
// Range to attempt to autobaud
#define GSM_AUTOBAUD_MIN 9600
#define GSM_AUTOBAUD_MAX 38400
/*
* Test enabled
*/
#define TINY_GSM_USE_GPRS true
#define TINY_GSM_USE_WIFI false
#define TINY_GSM_USE_CALL true
#define TINY_GSM_USE_SMS true
#define TINY_GSM_USE_USSD true
#define TINY_GSM_TEST_GPRS true
#define TINY_GSM_TEST_WIFI false
#define TINY_GSM_TEST_CALL true
#define TINY_GSM_TEST_SMS true
#define TINY_GSM_TEST_USSD true
#define TINY_GSM_TEST_BATTERY true
// powerdown modem after tests
#define TINY_GSM_POWERDOWN false
@ -70,10 +71,10 @@
// Your GPRS credentials
// Leave empty, if missing user or pass
const char apn[] = "YourAPN";
const char user[] = "";
const char pass[] = "";
const char gprsUser[] = "";
const char gprsPass[] = "";
const char wifiSSID[] = "YourSSID";
const char wifiPass[] = "SSIDpw";
const char wifiPass[] = "YourWiFiPass";
#include <TinyGsmClient.h>
@ -98,11 +99,11 @@ void setup() {
digitalWrite(23, HIGH);
DBG("Wait...");
delay(3000);
// Set GSM module baud rate
TinyGsmAutoBaud(SerialAT,GSM_AUTOBAUD_MIN,GSM_AUTOBAUD_MAX);
// SerialAT.begin(9600);
//SerialAT.begin(9600);
delay(3000);
}
void loop() {
@ -120,26 +121,34 @@ void loop() {
return;
}
String name = modem.getModemName();
DBG("Modem Name:", name);
String modemInfo = modem.getModemInfo();
DBG("Modem:", modemInfo);
DBG("Modem Info:", modemInfo);
#if TINY_GSM_USE_GPRS
#if TINY_GSM_TEST_GPRS
// Unlock your SIM card with a PIN if needed
if ( GSM_PIN && modem.getSimStatus() != 3 ) {
modem.simUnlock(GSM_PIN);
}
#endif
#if TINY_GSM_USE_WIFI
SerialMon.print(F("Setting SSID/password..."));
#if TINY_GSM_TEST_WIFI
DBG("Setting SSID/password...");
if (!modem.networkConnect(wifiSSID, wifiPass)) {
SerialMon.println(" fail");
DBG(" fail");
delay(10000);
return;
}
SerialMon.println(" OK");
#endif
#if TINY_GSM_TEST_GPRS && defined TINY_GSM_MODEM_XBEE
// The XBee must run the gprsConnect function BEFORE waiting for network!
modem.gprsConnect(apn, gprsUser, gprsPass);
#endif
DBG("Waiting for network...");
if (!modem.waitForNetwork()) {
delay(10000);
@ -150,9 +159,9 @@ void loop() {
DBG("Network connected");
}
#if TINY_GSM_USE_GPRS
#if TINY_GSM_TEST_GPRS
DBG("Connecting to", apn);
if (!modem.gprsConnect(apn, user, pass)) {
if (!modem.gprsConnect(apn, gprsUser, gprsPass)) {
delay(10000);
return;
}
@ -175,17 +184,9 @@ void loop() {
int csq = modem.getSignalQuality();
DBG("Signal quality:", csq);
// This is NOT supported on M590
int battLevel = modem.getBattPercent();
DBG("Battery lavel:", battLevel);
// This is only supported on SIMxxx series
float battVoltage = modem.getBattVoltage() / 1000.0F;
DBG("Battery voltage:", battVoltage);
// This is only supported on SIMxxx series
String gsmLoc = modem.getGsmLocation();
DBG("GSM location:", gsmLoc);
// String gsmLoc = modem.getGsmLocation();
// DBG("GSM location:", gsmLoc);
// This is only supported on SIMxxx series
// String gsmTime = modem.getGSMDateTime(DATE_TIME);
@ -207,7 +208,7 @@ void loop() {
DBG("GPS raw data:", gps_raw);
#endif
#if TINY_GSM_USE_SMS && defined(SMS_TARGET)
#if TINY_GSM_TEST_SMS && defined(SMS_TARGET)
res = modem.sendSMS(SMS_TARGET, String("Hello from ") + imei);
DBG("SMS:", res ? "OK" : "fail");
@ -216,7 +217,7 @@ void loop() {
DBG("UTF16 SMS:", res ? "OK" : "fail");
#endif
#if TINY_GSM_USE_CALL && defined(CALL_TARGET)
#if TINY_GSM_TEST_CALL && defined(CALL_TARGET)
DBG("Calling:", CALL_TARGET);
// This is NOT supported on M590
@ -241,7 +242,20 @@ void loop() {
}
#endif
#if TINY_GSM_USE_GPRS
#if TINY_GSM_TEST_BATTERY
uint8_t chargeState = -99;
int8_t percent = -99;
uint16_t milliVolts = -9999;
modem.getBattStats(chargeState, percent, milliVolts)
DBG("Battery charge state:", chargeState);
DBG("Battery charge 'percent':", percent);
DBG("Battery voltage:", milliVolts / 1000.0F);
float temp = modem.getTemperature();
DBG("Chip temperature:", temp);
#endif
#if TINY_GSM_TEST_GPRS
modem.gprsDisconnect();
if (!modem.isGprsConnected()) {
DBG("GPRS disconnected");
@ -250,7 +264,7 @@ void loop() {
}
#endif
#if TINY_GSM_USE_WIFI
#if TINY_GSM_TEST_WIFI
modem.networkDisconnect();
DBG("WiFi disconnected");
#endif


+ 1
- 1
examples/BlynkClient/BlynkClient.ino View File

@ -48,7 +48,7 @@
// #define TINY_GSM_MODEM_SEQUANS_MONARCH
#include <TinyGsmClient.h>
#include <BlynkSimpleSIM800.h>
#include <BlynkSimpleTinyGSM.h>
// Set serial for debug console (to the Serial Monitor, default speed 115200)
#define SerialMon Serial


+ 16
- 9
examples/HttpClient/HttpClient.ino View File

@ -12,9 +12,10 @@
*
* For more HTTP API examples, see ArduinoHttpClient library
*
* NOTE: This example does NOT work with the XBee because the
* NOTE: This example may NOT work with the XBee because the
* HttpClient library does not empty to serial buffer fast enough
* and the buffer overflow causes the HttpClient library to stall.
* Boards with faster processors may work, 8MHz boards will not.
**************************************************************/
// Select your modem:
@ -45,16 +46,13 @@
// See all AT commands, if wanted
//#define DUMP_AT_COMMANDS
// See the debugging, if wanted
// Define the serial console for debug prints, if needed
//#define TINY_GSM_DEBUG Serial
//#define LOGGING
//#define LOGGING // <- Logging is for the HTTP library
// Add a reception delay, if needed
//#define TINY_GSM_YIELD() { delay(1); }
#include <TinyGsmClient.h>
#include <ArduinoHttpClient.h>
// Set serial for debug console (to the Serial Monitor, default speed 115200)
#define SerialMon Serial
@ -85,6 +83,9 @@ const char server[] = "vsh.pp.ua";
const char resource[] = "/TinyGSM/logo.txt";
const int port = 80;
#include <TinyGsmClient.h>
#include <ArduinoHttpClient.h>
#ifdef DUMP_AT_COMMANDS
#include <StreamDebugger.h>
StreamDebugger debugger(SerialAT, SerialMon);
@ -118,6 +119,7 @@ void setup() {
// To skip it, call init() instead of restart()
SerialMon.println("Initializing modem...");
modem.restart();
// modem.init();
String modemInfo = modem.getModemInfo();
SerialMon.print("Modem: ");
@ -129,7 +131,7 @@ void setup() {
void loop() {
#if TINY_GSM_USE_WIFI
#if defined TINY_GSM_USE_WIFI && defined TINY_GSM_MODEM_HAS_WIFI
SerialMon.print(F("Setting SSID/password..."));
if (!modem.networkConnect(wifiSSID, wifiPass)) {
SerialMon.println(" fail");
@ -139,6 +141,11 @@ void loop() {
SerialMon.println(" OK");
#endif
#if TINY_GSM_USE_GPRS && defined TINY_GSM_MODEM_XBEE
// The XBee must run the gprsConnect function BEFORE waiting for network!
modem.gprsConnect(apn, gprsUser, gprsPass);
#endif
SerialMon.print("Waiting for network...");
if (!modem.waitForNetwork()) {
SerialMon.println(" fail");
@ -148,10 +155,10 @@ void loop() {
SerialMon.println(" OK");
if (modem.isNetworkConnected()) {
SerialMon.print("Network connected");
SerialMon.println("Network connected");
}
#if TINY_GSM_USE_GPRS
#if TINY_GSM_USE_GPRS && defined TINY_GSM_MODEM_HAS_GPRS
SerialMon.print(F("Connecting to "));
SerialMon.print(apn);
if (!modem.gprsConnect(apn, gprsUser, gprsPass)) {


+ 24
- 10
examples/HttpsClient/HttpsClient.ino View File

@ -10,22 +10,30 @@
* TinyGSM Getting Started guide:
* https://tiny.cc/tinygsm-readme
*
* SSL/TLS is currently supported only with: SIM8xx, uBlox, ESP8266
* SSL/TLS is not yet supported on the Quectel modems
* The A6/A7/A20 and M590 are not capable of SSL/TLS
*
* For more HTTP API examples, see ArduinoHttpClient library
*
* NOTE: This example may NOT work with the XBee because the
* HttpClient library does not empty to serial buffer fast enough
* and the buffer overflow causes the HttpClient library to stall.
* Boards with faster processors may work, 8MHz boards will not.
**************************************************************/
// Select your modem:
#define TINY_GSM_MODEM_SIM800
// #define TINY_GSM_MODEM_SIM808
// #define TINY_GSM_MODEM_SIM868
// #define TINY_GSM_MODEM_SIM7000
// #define TINY_GSM_MODEM_UBLOX
// #define TINY_GSM_MODEM_SARAR4
// #define TINY_GSM_MODEM_ESP8266
// #define TINY_GSM_MODEM_XBEE
// #define TINY_GSM_MODEM_SEQUANS_MONARCH
// Increase RX buffer to capture the entire response
// Chips without internal buffering (ESP8266)
// Chips without internal buffering (A6/A7, ESP8266, M590)
// need enough space in the buffer for the entire response
// else data will be lost (and the http library will fail).
#define TINY_GSM_RX_BUFFER 650
@ -33,16 +41,13 @@
// See all AT commands, if wanted
//#define DUMP_AT_COMMANDS
// See the debugging, if wanted
// Define the serial console for debug prints, if needed
//#define TINY_GSM_DEBUG Serial
//#define LOGGING
//#define LOGGING // <- Logging is for the HTTP library
// Add a reception delay, if needed
//#define TINY_GSM_YIELD() { delay(1); }
#include <TinyGsmClient.h>
#include <ArduinoHttpClient.h>
// Set serial for debug console (to the Serial Monitor, default speed 115200)
#define SerialMon Serial
@ -73,6 +78,9 @@ const char server[] = "vsh.pp.ua";
const char resource[] = "/TinyGSM/logo.txt";
const int port = 443;
#include <TinyGsmClient.h>
#include <ArduinoHttpClient.h>
#ifdef DUMP_AT_COMMANDS
#include <StreamDebugger.h>
StreamDebugger debugger(SerialAT, SerialMon);
@ -106,6 +114,7 @@ void setup() {
// To skip it, call init() instead of restart()
SerialMon.println("Initializing modem...");
modem.restart();
// modem.init();
String modemInfo = modem.getModemInfo();
SerialMon.print("Modem: ");
@ -122,7 +131,7 @@ void setup() {
void loop() {
#if TINY_GSM_USE_WIFI
#if defined TINY_GSM_USE_WIFI && defined TINY_GSM_MODEM_HAS_WIFI
SerialMon.print(F("Setting SSID/password..."));
if (!modem.networkConnect(wifiSSID, wifiPass)) {
SerialMon.println(" fail");
@ -132,6 +141,11 @@ void loop() {
SerialMon.println(" OK");
#endif
#if TINY_GSM_USE_GPRS && defined TINY_GSM_MODEM_XBEE
// The XBee must run the gprsConnect function BEFORE waiting for network!
modem.gprsConnect(apn, gprsUser, gprsPass);
#endif
SerialMon.print("Waiting for network...");
if (!modem.waitForNetwork()) {
SerialMon.println(" fail");
@ -141,10 +155,10 @@ void loop() {
SerialMon.println(" OK");
if (modem.isNetworkConnected()) {
SerialMon.print("Network connected");
SerialMon.println("Network connected");
}
#if TINY_GSM_USE_GPRS
#if TINY_GSM_USE_GPRS && defined TINY_GSM_MODEM_HAS_GPRS
SerialMon.print(F("Connecting to "));
SerialMon.print(apn);
if (!modem.gprsConnect(apn, gprsUser, gprsPass)) {


+ 63
- 8
examples/MqttClient/MqttClient.ino View File

@ -46,12 +46,23 @@
// #define TINY_GSM_MODEM_XBEE
// #define TINY_GSM_MODEM_SEQUANS_MONARCH
#include <TinyGsmClient.h>
#include <PubSubClient.h>
// See all AT commands, if wanted
// #define DUMP_AT_COMMANDS
// Define the serial console for debug prints, if needed
#define TINY_GSM_DEBUG SerialMon
// Range to attempt to autobaud
#define GSM_AUTOBAUD_MIN 9600
#define GSM_AUTOBAUD_MAX 38400
// Add a reception delay, if needed
#define TINY_GSM_YIELD() { delay(2); }
// Set serial for debug console (to the Serial Monitor, default speed 115200)
#define SerialMon Serial
// Set serial for AT commands (to the module)
// Use Hardware Serial on Mega, Leonardo, Micro
#define SerialAT Serial1
@ -73,7 +84,17 @@ const char* topicLed = "GsmClientTest/led";
const char* topicInit = "GsmClientTest/init";
const char* topicLedStatus = "GsmClientTest/ledStatus";
#include <TinyGsmClient.h>
#include <PubSubClient.h>
#ifdef DUMP_AT_COMMANDS
#include <StreamDebugger.h>
StreamDebugger debugger(SerialAT, SerialMon);
TinyGsm modem(debugger);
#else
TinyGsm modem(SerialAT);
#endif
TinyGsmClient client(modem);
PubSubClient mqtt(client);
@ -83,12 +104,22 @@ int ledStatus = LOW;
long lastReconnectAttempt = 0;
void setup() {
pinMode(LED_PIN, OUTPUT);
// Set console baud rate
SerialMon.begin(115200);
delay(10);
// Set your reset, enable, power pins here
pinMode(LED_PIN, OUTPUT);
pinMode(20, OUTPUT);
digitalWrite(20, HIGH);
pinMode(23, OUTPUT);
digitalWrite(23, LOW);
SerialMon.println("Wait...");
// Set GSM module baud rate
SerialAT.begin(115200);
delay(3000);
@ -97,6 +128,7 @@ void setup() {
// To skip it, call init() instead of restart()
SerialMon.println("Initializing modem...");
modem.restart();
// modem.init();
String modemInfo = modem.getModemInfo();
SerialMon.print("Modem: ");
@ -105,20 +137,43 @@ void setup() {
// Unlock your SIM card with a PIN
//modem.simUnlock("1234");
#if TINY_GSM_USE_WIFI
SerialMon.print(F("Setting SSID/password..."));
if (!modem.networkConnect(wifiSSID, wifiPass)) {
SerialMon.println(" fail");
delay(10000);
return;
}
SerialMon.println(" OK");
#endif
#if TINY_GSM_USE_GPRS && defined TINY_GSM_MODEM_XBEE
// The XBee must run the gprsConnect function BEFORE waiting for network!
modem.gprsConnect(apn, gprsUser, gprsPass);
#endif
SerialMon.print("Waiting for network...");
if (!modem.waitForNetwork()) {
if (!modem.waitForNetwork(240000L)) {
SerialMon.println(" fail");
while (true);
delay(10000);
return;
}
SerialMon.println(" OK");
SerialMon.print("Connecting to ");
if (modem.isNetworkConnected()) {
SerialMon.println("Network connected");
}
#if TINY_GSM_USE_GPRS && defined TINY_GSM_MODEM_HAS_GPRS
SerialMon.print(F("Connecting to "));
SerialMon.print(apn);
if (!modem.gprsConnect(apn, user, pass)) {
if (!modem.gprsConnect(apn, gprsUser, gprsPass)) {
SerialMon.println(" fail");
while (true);
delay(10000);
return;
}
SerialMon.println(" OK");
#endif
// MQTT Broker setup
mqtt.setServer(broker, 1883);


+ 25
- 15
examples/WebClient/WebClient.ino View File

@ -30,6 +30,16 @@
// Increase RX buffer if needed
// #define TINY_GSM_RX_BUFFER 512
// See all AT commands, if wanted
// #define DUMP_AT_COMMANDS
// Define the serial console for debug prints, if needed
#define TINY_GSM_DEBUG SerialMon
// Range to attempt to autobaud
#define GSM_AUTOBAUD_MIN 9600
#define GSM_AUTOBAUD_MAX 115200
// Add a reception delay, if needed
// #define TINY_GSM_YIELD() { delay(1); }
@ -47,16 +57,6 @@
//#include <SoftwareSerial.h>
//SoftwareSerial SerialAT(2, 3); // RX, TX
// See all AT commands, if wanted
//#define DUMP_AT_COMMANDS
// See the debugging, if wanted
// #define TINY_GSM_DEBUG SerialMon
// Range to attempt to autobaud
#define GSM_AUTOBAUD_MIN 9600
#define GSM_AUTOBAUD_MAX 38400
#define TINY_GSM_USE_GPRS true
#define TINY_GSM_USE_WIFI false
@ -122,8 +122,12 @@ void setup() {
SerialMon.print("Modem: ");
SerialMon.println(modemInfo);
// Unlock your SIM card with a PIN
//modem.simUnlock("1234");
#if TINY_GSM_USE_GPRS
// Unlock your SIM card with a PIN if needed
if ( GSM_PIN && modem.getSimStatus() != 3 ) {
modem.simUnlock(GSM_PIN);
}
#endif
}
void loop() {
@ -138,6 +142,11 @@ void loop() {
SerialMon.println(" OK");
#endif
#if TINY_GSM_USE_GPRS && defined TINY_GSM_MODEM_XBEE
// The XBee must run the gprsConnect function BEFORE waiting for network!
modem.gprsConnect(apn, gprsUser, gprsPass);
#endif
SerialMon.print("Waiting for network...");
if (!modem.waitForNetwork(240000L)) {
SerialMon.println(" fail");
@ -150,9 +159,9 @@ void loop() {
SerialMon.println("Network connected");
}
#if TINY_GSM_USE_GPRS
#if TINY_GSM_USE_GPRS && defined TINY_GSM_MODEM_HAS_GPRS
SerialMon.print(F("Connecting to "));
SerialMon.println(apn);
SerialMon.print(apn);
if (!modem.gprsConnect(apn, gprsUser, gprsPass)) {
SerialMon.println(" fail");
delay(10000);
@ -172,9 +181,10 @@ void loop() {
// Make a HTTP GET request:
SerialMon.println("Performing HTTP GET request...");
client.print(String("GET ") + resource + " HTTP/1.0\r\n");
client.print(String("GET ") + resource + " HTTP/1.1\r\n");
client.print(String("Host: ") + server + "\r\n");
client.print("Connection: close\r\n\r\n");
client.println();
unsigned long timeout = millis();
while (client.connected() && millis() - timeout < 10000L) {


+ 1
- 1
library.json View File

@ -1,6 +1,6 @@
{
"name": "TinyGSM",
"version": "0.7.4",
"version": "0.7.7",
"description": "A small Arduino library for GPRS modules, that just works. Includes examples for Blynk, MQTT, File Download, and Web Client. Supports many GSM, LTE, and WiFi modules with AT command interfaces.",
"keywords": "GSM, AT commands, AT, SIM800, SIM900, A6, A7, M590, ESP8266, SIM7000, SIM800A, SIM800C, SIM800L, SIM800H, SIM808, SIM868, SIM900A, SIM900D, SIM908, SIM968, M95, MC60, MC60E, BG96, ublox, Quectel, SIMCOM, AI Thinker, LTE, LTE-M",
"authors":


+ 1
- 1
library.properties View File

@ -1,5 +1,5 @@
name=TinyGSM
version=0.7.4
version=0.7.7
author=Volodymyr Shymanskyy
maintainer=Volodymyr Shymanskyy
sentence=A small Arduino library for GPRS modules, that just works.


+ 5
- 4
src/TinyGsmClientBG96.h View File

@ -62,6 +62,7 @@ public:
this->at = modem;
this->mux = mux;
sock_available = 0;
prev_check = 0;
sock_connected = false;
got_data = false;
@ -102,9 +103,9 @@ TINY_GSM_CLIENT_CONNECT_OVERLOADS()
TINY_GSM_CLIENT_WRITE()
TINY_GSM_CLIENT_AVAILABLE_NO_BUFFER_CHECK()
TINY_GSM_CLIENT_AVAILABLE_WITH_BUFFER_CHECK()
TINY_GSM_CLIENT_READ_NO_BUFFER_CHECK()
TINY_GSM_CLIENT_READ_WITH_BUFFER_CHECK()
TINY_GSM_CLIENT_PEEK_FLUSH_CONNECTED()
@ -115,9 +116,10 @@ TINY_GSM_CLIENT_PEEK_FLUSH_CONNECTED()
String remoteIP() TINY_GSM_ATTR_NOT_IMPLEMENTED;
private:
TinyGsmBG96* at;
TinyGsmBG96* at;
uint8_t mux;
uint16_t sock_available;
uint32_t prev_check;
bool sock_connected;
bool got_data;
RxFifo rx;
@ -544,7 +546,6 @@ protected:
return 0;
}
size_t len = stream.readStringUntil('\n').toInt();
sockets[mux]->sock_available = len;
for (size_t i=0; i<len; i++) {
TINY_GSM_MODEM_STREAM_TO_MUX_FIFO_WITH_DOUBLE_TIMEOUT


+ 17
- 21
src/TinyGsmClientM95.h View File

@ -186,7 +186,7 @@ TINY_GSM_MODEM_SET_BAUD_IPR()
TINY_GSM_MODEM_TEST_AT()
TINY_GSM_MODEM_MAINTAIN_CHECK_SOCKS()
TINY_GSM_MODEM_MAINTAIN_LISTEN()
bool factoryDefault() {
sendAT(GF("&FZE0&W")); // Factory + Reset + Echo Off + Write
@ -606,37 +606,33 @@ protected:
}
size_t modemRead(size_t size, uint8_t mux) {
sendAT(GF("+QIRD="), mux, ',', size);
// TODO: Does this work????
// AT+QIRD=<id>,<sc>,<sid>,<len>
// id = GPRS context number - 0, set in GPRS connect
// sc = roll in connection - 1, client of connection
// sid = index of connection - mux
// len = maximum length of data to send
sendAT(GF("+QIRD=0,1,"), mux, ',', size);
// sendAT(GF("+QIRD="), mux, ',', size);
if (waitResponse(GF("+QIRD:")) != 1) {
return 0;
}
size_t len = stream.readStringUntil('\n').toInt();
streamSkipUntil(':'); // skip IP address
streamSkipUntil(','); // skip port
streamSkipUntil(','); // skip connection type (TCP/UDP)
size_t len = stream.readStringUntil('\n').toInt(); // read length
sockets[mux]->sock_available = len;
for (size_t i=0; i<len; i++) {
TINY_GSM_MODEM_STREAM_TO_MUX_FIFO_WITH_DOUBLE_TIMEOUT
sockets[mux]->sock_available--;
// ^^ One less character available after moving from modem's FIFO to our FIFO
}
waitResponse();
waitResponse(); // ends with an OK
DBG("### READ:", len, "from", mux);
return len;
}
size_t modemGetAvailable(uint8_t mux) {
sendAT(GF("+QIRD="), mux, GF(",0"));
size_t result = 0;
if (waitResponse(GF("+QIRD:")) == 1) {
streamSkipUntil(','); // Skip total received
streamSkipUntil(','); // Skip have read
result = stream.readStringUntil('\n').toInt();
if (result) DBG("### DATA AVAILABLE:", result, "on", mux);
waitResponse();
}
if (!result) {
sockets[mux]->sock_connected = modemGetConnected(mux);
}
return result;
}
bool modemGetConnected(uint8_t mux) {
sendAT(GF("+QISTATE=1,"), mux);
//+QISTATE: 0,"TCP","151.139.237.11",80,5087,4,1,0,0,"uart1"
@ -700,7 +696,7 @@ TINY_GSM_MODEM_STREAM_UTILITIES()
} else if (r5 && data.endsWith(r5)) {
index = 5;
goto finish;
} else if (data.endsWith(GF(GSM_NL "+QIRD:"))) {
} else if (data.endsWith(GF(GSM_NL "+QIRD:"))) { // TODO: QIRD? or QIRDI?
streamSkipUntil(','); // Skip the context
streamSkipUntil(','); // Skip the role
int mux = stream.readStringUntil('\n').toInt();


+ 16
- 20
src/TinyGsmClientMC60.h View File

@ -193,7 +193,7 @@ TINY_GSM_MODEM_SET_BAUD_IPR()
TINY_GSM_MODEM_TEST_AT()
TINY_GSM_MODEM_MAINTAIN_CHECK_SOCKS()
TINY_GSM_MODEM_MAINTAIN_LISTEN()
bool factoryDefault() {
sendAT(GF("&FZE0&W")); // Factory + Reset + Echo Off + Write
@ -613,37 +613,33 @@ protected:
}
size_t modemRead(size_t size, uint8_t mux) {
sendAT(GF("+QIRD="), mux, ',', size);
// TODO: Does this work????
// AT+QIRD=<id>,<sc>,<sid>,<len>
// id = GPRS context number - 0, set in GPRS connect
// sc = roll in connection - 1, client of connection
// sid = index of connection - mux
// len = maximum length of data to send
sendAT(GF("+QIRD=0,1,"), mux, ',', size);
// sendAT(GF("+QIRD="), mux, ',', size);
if (waitResponse(GF("+QIRD:")) != 1) {
return 0;
}
size_t len = stream.readStringUntil('\n').toInt();
streamSkipUntil(':'); // skip IP address
streamSkipUntil(','); // skip port
streamSkipUntil(','); // skip connection type (TCP/UDP)
size_t len = stream.readStringUntil('\n').toInt(); // read length
sockets[mux]->sock_available = len;
for (size_t i=0; i<len; i++) {
TINY_GSM_MODEM_STREAM_TO_MUX_FIFO_WITH_DOUBLE_TIMEOUT
sockets[mux]->sock_available--;
// ^^ One less character available after moving from modem's FIFO to our FIFO
}
waitResponse();
DBG("### READ:", len, "from", mux);
return len;
}
size_t modemGetAvailable(uint8_t mux) {
sendAT(GF("+QIRD="), mux, GF(",0"));
size_t result = 0;
if (waitResponse(GF("+QIRD:")) == 1) {
streamSkipUntil(','); // Skip total received
streamSkipUntil(','); // Skip have read
result = stream.readStringUntil('\n').toInt();
if (result) DBG("### DATA AVAILABLE:", result, "on", mux);
waitResponse();
}
if (!result) {
sockets[mux]->sock_connected = modemGetConnected(mux);
}
return result;
}
bool modemGetConnected(uint8_t mux) {
sendAT(GF("+QISTATE=1,"), mux);
//+QISTATE: 0,"TCP","151.139.237.11",80,5087,4,1,0,0,"uart1"
@ -711,7 +707,7 @@ TINY_GSM_MODEM_STREAM_UTILITIES()
} else if (r6 && data.endsWith(r6)) {
index = 6;
goto finish;
} else if (data.endsWith(GF(GSM_NL "+QIRD:"))) {
} else if (data.endsWith(GF(GSM_NL "+QIRD:"))) { // TODO: QIRD? or QIRDI?
streamSkipUntil(','); // Skip the context
streamSkipUntil(','); // Skip the role
int mux = stream.readStringUntil('\n').toInt();


+ 10
- 10
src/TinyGsmClientSIM7000.h View File

@ -481,7 +481,6 @@ TINY_GSM_MODEM_WAIT_FOR_NETWORK()
return TinyGsmIpFromString(getLocalIP());
}
/*
* Phone Call functions
*/
@ -726,7 +725,7 @@ TINY_GSM_MODEM_WAIT_FOR_NETWORK()
}
/*
* Battery functions
* Battery & temperature functions
*/
// Use: float vBatt = modem.getBattVoltage() / 1000.0;
@ -739,6 +738,7 @@ TINY_GSM_MODEM_WAIT_FOR_NETWORK()
streamSkipUntil(','); // Skip battery charge level
// return voltage in mV
uint16_t res = stream.readStringUntil(',').toInt();
// Wait for final OK
waitResponse();
return res;
}
@ -751,6 +751,7 @@ TINY_GSM_MODEM_WAIT_FOR_NETWORK()
streamSkipUntil(','); // Skip battery charge status
// Read battery charge level
int res = stream.readStringUntil(',').toInt();
// Wait for final OK
waitResponse();
return res;
}
@ -835,14 +836,10 @@ protected:
size_t len_requested = stream.readStringUntil(',').toInt();
// ^^ Requested number of data bytes (1-1460 bytes)to be read
size_t len_confirmed = stream.readStringUntil('\n').toInt();
if (len_confirmed < len_requested) {
DBG(len_requested - len_confirmed, "fewer bytes confirmed than requested!");
}
sockets[mux]->sock_available = len_confirmed;
// ^^ Confirmed number of data bytes to be read, which may be less than requested.
// 0 indicates that no data can be read.
for (size_t i=0; i<TinyGsmMin(len_confirmed, len_requested) ; i++) {
// This is actually be the number of bytes that will be remaining after the read
for (size_t i=0; i<len_requested; i++) {
uint32_t startMillis = millis();
#ifdef TINY_GSM_USE_HEX
while (stream.available() < 2 && (millis() - startMillis < sockets[mux]->_timeout)) { TINY_GSM_YIELD(); }
@ -856,9 +853,11 @@ protected:
#endif
sockets[mux]->rx.put(c);
}
DBG("### READ:", len_requested, "from", mux);
// sockets[mux]->sock_available = modemGetAvailable(mux);
sockets[mux]->sock_available = len_confirmed;
waitResponse();
DBG("### READ:", TinyGsmMin(len_confirmed, len_requested), "from", mux);
return TinyGsmMin(len_confirmed, len_requested);
return len_requested;
}
size_t modemGetAvailable(uint8_t mux) {
@ -870,6 +869,7 @@ protected:
result = stream.readStringUntil('\n').toInt();
waitResponse();
}
DBG("### Available:", result, "on", mux);
if (!result) {
sockets[mux]->sock_connected = modemGetConnected(mux);
}


+ 11
- 11
src/TinyGsmClientSIM800.h View File

@ -308,7 +308,7 @@ TINY_GSM_MODEM_GET_IMEI_GSN()
delay(1000);
continue;
}
int status = waitResponse(GF("READY"), GF("SIM PIN"), GF("SIM PUK"), GF("NOT INSERTED"));
int status = waitResponse(GF("READY"), GF("SIM PIN"), GF("SIM PUK"), GF("NOT INSERTED"), GF("NOT READY"));
waitResponse();
switch (status) {
case 2:
@ -459,7 +459,6 @@ TINY_GSM_MODEM_WAIT_FOR_NETWORK()
return true;
}
/*
* IP Address functions
*/
@ -765,14 +764,10 @@ protected:
size_t len_requested = stream.readStringUntil(',').toInt();
// ^^ Requested number of data bytes (1-1460 bytes)to be read
size_t len_confirmed = stream.readStringUntil('\n').toInt();
if (len_confirmed < len_requested) {
DBG(len_requested - len_confirmed, "fewer bytes confirmed than requested!");
}
sockets[mux]->sock_available = len_confirmed;
// ^^ Confirmed number of data bytes to be read, which may be less than requested.
// 0 indicates that no data can be read.
for (size_t i=0; i<TinyGsmMin(len_confirmed, len_requested) ; i++) {
// This is actually be the number of bytes that will be remaining after the read
for (size_t i=0; i<len_requested; i++) {
uint32_t startMillis = millis();
#ifdef TINY_GSM_USE_HEX
while (stream.available() < 2 && (millis() - startMillis < sockets[mux]->_timeout)) { TINY_GSM_YIELD(); }
@ -786,9 +781,11 @@ protected:
#endif
sockets[mux]->rx.put(c);
}
DBG("### READ:", len_requested, "from", mux);
// sockets[mux]->sock_available = modemGetAvailable(mux);
sockets[mux]->sock_available = len_confirmed;
waitResponse();
DBG("### READ:", TinyGsmMin(len_confirmed, len_requested), "from", mux);
return TinyGsmMin(len_confirmed, len_requested);
return len_requested;
}
size_t modemGetAvailable(uint8_t mux) {
@ -800,6 +797,7 @@ protected:
result = stream.readStringUntil('\n').toInt();
waitResponse();
}
DBG("### Available:", result, "on", mux);
if (!result) {
sockets[mux]->sock_connected = modemGetConnected(mux);
}
@ -808,7 +806,9 @@ protected:
bool modemGetConnected(uint8_t mux) {
sendAT(GF("+CIPSTATUS="), mux);
int res = waitResponse(GF(",\"CONNECTED\""), GF(",\"CLOSED\""), GF(",\"CLOSING\""), GF(",\"INITIAL\""));
waitResponse(GF("+CIPSTATUS"));
int res = waitResponse(GF(",\"CONNECTED\""), GF(",\"CLOSED\""), GF(",\"CLOSING\""),
GF(",\"REMOTE CLOSING\""), GF(",\"INITIAL\""));
waitResponse();
return 1 == res;
}


+ 0
- 1
src/TinyGsmClientSaraR4.h View File

@ -605,7 +605,6 @@ protected:
}
streamSkipUntil(','); // Skip mux
size_t len = stream.readStringUntil(',').toInt();
sockets[mux]->sock_available = len;
streamSkipUntil('\"');
for (size_t i=0; i<len; i++) {


+ 3
- 3
src/TinyGsmClientSequansMonarch.h View File

@ -622,9 +622,9 @@ protected:
char c = stream.read(); \
sockets[mux % TINY_GSM_MUX_COUNT]->rx.put(c);
}
// DBG("### Read:", len, "from", mux);
DBG("### Read:", len, "from", mux);
waitResponse();
sockets[mux % TINY_GSM_MUX_COUNT]->sock_available = modemGetAvailable(mux);
// sockets[mux % TINY_GSM_MUX_COUNT]->sock_available = modemGetAvailable(mux);
return len;
}
@ -638,7 +638,7 @@ protected:
result = stream.readStringUntil(',').toInt(); // keep data not yet read
waitResponse();
}
// DBG("### Available:", result, "on", mux);
DBG("### Available:", result, "on", mux);
return result;
}


+ 0
- 1
src/TinyGsmClientUBLOX.h View File

@ -593,7 +593,6 @@ protected:
}
streamSkipUntil(','); // Skip mux
size_t len = stream.readStringUntil(',').toInt();
sockets[mux]->sock_available = len;
streamSkipUntil('\"');
for (size_t i=0; i<len; i++) {


+ 2
- 2
src/TinyGsmClientXBee.h View File

@ -109,7 +109,7 @@ public:
virtual int connect(IPAddress ip, uint16_t port, int timeout_s) {
// NOTE: Not caling stop() or yeild() here
at->streamClear(); // Empty anything in the buffer before starting
sock_connected = at->modemConnect(ip, port, mux, timeout_s);
sock_connected = at->modemConnect(ip, port, mux, false, timeout_s);
return sock_connected;
}
virtual int connect(IPAddress ip, uint16_t port) {
@ -247,7 +247,7 @@ public:
virtual int connect(IPAddress ip, uint16_t port, int timeout_s) {
// NOTE: Not caling stop() or yeild() here
at->streamClear(); // Empty anything in the buffer before starting
sock_connected = at->modemConnect(ip, port, mux, timeout_s);
sock_connected = at->modemConnect(ip, port, mux, true, timeout_s);
return sock_connected;
}
};


+ 4
- 4
src/TinyGsmCommon.h View File

@ -10,7 +10,7 @@
#define TinyGsmCommon_h
// The current library version number
#define TINYGSM_VERSION "0.7.4"
#define TINYGSM_VERSION "0.7.7"
#if defined(SPARK) || defined(PARTICLE)
#include "Particle.h"
@ -100,7 +100,7 @@ uint32_t TinyGsmAutoBaud(T& SerialAT, uint32_t minimum = 9600, uint32_t maximum
DBG("Trying baud rate", rate, "...");
SerialAT.begin(rate);
delay(10);
for (int i=0; i<3; i++) {
for (int i=0; i<10; i++) {
SerialAT.print("AT\r\n");
String input = SerialAT.readString();
if (input.indexOf("OK") >= 0) {
@ -249,7 +249,7 @@ String TinyGsmDecodeHex16bit(String &instr) {
/* Workaround: sometimes module forgets to notify about data arrival.
TODO: Currently we ping the module periodically,
but maybe there's a better indicator that we need to poll */ \
if (millis() - prev_check > 250) { \
if (millis() - prev_check > 500) { \
got_data = true; \
prev_check = millis(); \
} \
@ -311,7 +311,7 @@ String TinyGsmDecodeHex16bit(String &instr) {
/* Workaround: sometimes module forgets to notify about data arrival.
TODO: Currently we ping the module periodically,
but maybe there's a better indicator that we need to poll */ \
if (millis() - prev_check > 250) { \
if (millis() - prev_check > 500) { \
got_data = true; \
prev_check = millis(); \
} \


+ 84
- 22
tools/Diagnostics/Diagnostics.ino View File

@ -14,7 +14,10 @@
// #define TINY_GSM_MODEM_SIM900
// #define TINY_GSM_MODEM_SIM808
// #define TINY_GSM_MODEM_SIM868
// #define TINY_GSM_MODEM_SIM900
// #define TINY_GSM_MODEM_SIM7000
// #define TINY_GSM_MODEM_UBLOX
// #define TINY_GSM_MODEM_SARAR4
// #define TINY_GSM_MODEM_M95
// #define TINY_GSM_MODEM_BG96
// #define TINY_GSM_MODEM_A6
@ -24,22 +27,28 @@
// #define TINY_GSM_MODEM_MC60E
// #define TINY_GSM_MODEM_ESP8266
// #define TINY_GSM_MODEM_XBEE
// #define TINY_GSM_MODEM_SEQUANS_MONARCH
// Increase the buffer
// Increase RX buffer if needed
#define TINY_GSM_RX_BUFFER 512
// See all AT commands, if wanted
#define DUMP_AT_COMMANDS
// Define the serial console for debug prints, if needed
//#define TINY_GSM_DEBUG Serial
#define TINY_GSM_DEBUG Serial
#include <TinyGsmClient.h>
// Range to attempt to autobaud
#define GSM_AUTOBAUD_MIN 9600
#define GSM_AUTOBAUD_MAX 115200
// Your GPRS credentials
// Leave empty, if missing user or pass
const char apn[] = "YourAPN";
const char user[] = "";
const char pass[] = "";
// Add a reception delay, if needed
#define TINY_GSM_YIELD() { delay(2); }
// Set serial for debug console (to the Serial Monitor, speed 115200)
// Uncomment this if you want to use SSL
//#define USE_SSL
// Set serial for debug console (to the Serial Monitor, default speed 115200)
#define SerialMon Serial
// Set serial for AT commands (to the module)
@ -50,28 +59,59 @@ const char pass[] = "";
//#include <SoftwareSerial.h>
//SoftwareSerial SerialAT(2, 3); // RX, TX
#define TINY_GSM_USE_GPRS true
#define TINY_GSM_USE_WIFI false
#include <StreamDebugger.h>
StreamDebugger debugger(SerialAT, SerialMon);
TinyGsm modem(debugger);
// set GSM PIN, if any
#define GSM_PIN ""
// Your GPRS credentials
// Leave empty, if missing user or pass
const char apn[] = "YourAPN";
const char gprsUser[] = "";
const char gprsPass[] = "";
const char wifiSSID[] = "YourSSID";
const char wifiPass[] = "YourWiFiPass";
// Server details
const char server[] = "vsh.pp.ua";
const char resource[] = "/TinyGSM/logo.txt";
const int port = 80;
TinyGsmClient client(modem);
#include <TinyGsmClient.h>
// For SSL:
//const int port = 443;
//TinyGsmClientSecure client(modem);
#ifdef DUMP_AT_COMMANDS
#include <StreamDebugger.h>
StreamDebugger debugger(SerialAT, SerialMon);
TinyGsm modem(debugger);
#else
TinyGsm modem(SerialAT);
#endif
#ifdef USE_SSL
TinyGsmClientSecure client(modem);
const int port = 443;
#else
TinyGsmClient client(modem);
const int port = 80;
#endif
void setup() {
// Set console baud rate
SerialMon.begin(115200);
delay(10);
// Set your reset, enable, power pins here
pinMode(20, OUTPUT);
digitalWrite(20, HIGH);
pinMode(23, OUTPUT);
digitalWrite(23, HIGH);
SerialMon.println("Wait...");
// Set GSM module baud rate
SerialAT.begin(115200);
TinyGsmAutoBaud(SerialAT,GSM_AUTOBAUD_MIN,GSM_AUTOBAUD_MAX);
// SerialAT.begin(115200);
delay(3000);
}
@ -80,6 +120,7 @@ void loop() {
// To skip it, call init() instead of restart()
SerialMon.print("Initializing modem...");
if (!modem.restart()) {
// if (!modem.init()) {
SerialMon.println(F(" [fail]"));
SerialMon.println(F("************************"));
SerialMon.println(F(" Is your modem connected properly?"));
@ -97,11 +138,30 @@ void loop() {
SerialMon.print("Modem: ");
SerialMon.println(modemInfo);
// Unlock your SIM card with a PIN
//modem.simUnlock("1234");
#if TINY_GSM_USE_GPRS
// Unlock your SIM card with a PIN if needed
if ( GSM_PIN && modem.getSimStatus() != 3 ) {
modem.simUnlock(GSM_PIN);
}
#endif
#if TINY_GSM_USE_WIFI
SerialMon.print(F("Setting SSID/password..."));
if (!modem.networkConnect(wifiSSID, wifiPass)) {
SerialMon.println(" fail");
delay(10000);
return;
}
SerialMon.println(" OK");
#endif
#if TINY_GSM_USE_GPRS && defined TINY_GSM_MODEM_XBEE
// The XBee must run the gprsConnect function BEFORE waiting for network!
modem.gprsConnect(apn, gprsUser, gprsPass);
#endif
SerialMon.print("Waiting for network...");
if (!modem.waitForNetwork()) {
if (!modem.waitForNetwork(600000L)) { // You may need lengthen this in poor service areas
SerialMon.println(F(" [fail]"));
SerialMon.println(F("************************"));
SerialMon.println(F(" Is your sim card locked?"));
@ -114,9 +174,10 @@ void loop() {
}
SerialMon.println(F(" [OK]"));
#if TINY_GSM_USE_GPRS && defined TINY_GSM_MODEM_HAS_GPRS
SerialMon.print("Connecting to ");
SerialMon.print(apn);
if (!modem.gprsConnect(apn, user, pass)) {
if (!modem.gprsConnect(apn, gprsUser, gprsPass)) {
SerialMon.println(F(" [fail]"));
SerialMon.println(F("************************"));
SerialMon.println(F(" Is GPRS enabled by network provider?"));
@ -126,6 +187,7 @@ void loop() {
return;
}
SerialMon.println(F(" [OK]"));
#endif
IPAddress local = modem.localIP();
SerialMon.print("Local IP: ");


Loading…
Cancel
Save