Browse Source

Merge pull request #10 from dawidcieszynski/master

Skip stream timeouts, et al.
v_master
Sara Damiano 7 years ago
committed by GitHub
parent
commit
12de2c425e
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 220 additions and 15 deletions
  1. BIN
      extras/doc/SIM800 Series_AT Command Manual_V1.09.pdf
  2. BIN
      extras/doc/SIM800 Series_Software Upgrade_Application Note_V1.00.pdf
  3. BIN
      extras/doc/SIM800+Series_Bluetooth_Application_Note_V1.04.pdf
  4. BIN
      extras/doc/SIM800+Series_Email_Application_Note_V1.00.pdf
  5. +7
    -3
      src/TinyGsmClientA6.h
  6. +7
    -3
      src/TinyGsmClientESP8266.h
  7. +7
    -3
      src/TinyGsmClientM590.h
  8. +192
    -3
      src/TinyGsmClientSIM800.h
  9. +7
    -3
      src/TinyGsmClientU201.h

BIN
extras/doc/SIM800 Series_AT Command Manual_V1.09.pdf View File


BIN
extras/doc/SIM800 Series_Software Upgrade_Application Note_V1.00.pdf View File


BIN
extras/doc/SIM800+Series_Bluetooth_Application_Note_V1.04.pdf View File


BIN
extras/doc/SIM800+Series_Email_Application_Note_V1.00.pdf View File


+ 7
- 3
src/TinyGsmClientA6.h View File

@ -645,9 +645,13 @@ public:
streamWrite(tail...); streamWrite(tail...);
} }
bool streamSkipUntil(char c) { //TODO: timeout
while (true) {
while (!stream.available()) { TINY_GSM_YIELD(); }
bool streamSkipUntil(char c) {
const unsigned long timeout = 1000L;
unsigned long startMillis = millis();
while (millis() - startMillis < timeout) {
while (millis() - startMillis < timeout && !stream.available()) {
TINY_GSM_YIELD();
}
if (stream.read() == c) if (stream.read() == c)
return true; return true;
} }


+ 7
- 3
src/TinyGsmClientESP8266.h View File

@ -413,9 +413,13 @@ public:
streamWrite(tail...); streamWrite(tail...);
} }
bool streamSkipUntil(char c) { //TODO: timeout
while (true) {
while (!stream.available()) { TINY_GSM_YIELD(); }
bool streamSkipUntil(char c) {
const unsigned long timeout = 1000L;
unsigned long startMillis = millis();
while (millis() - startMillis < timeout) {
while (millis() - startMillis < timeout && !stream.available()) {
TINY_GSM_YIELD();
}
if (stream.read() == c) if (stream.read() == c)
return true; return true;
} }


+ 7
- 3
src/TinyGsmClientM590.h View File

@ -590,9 +590,13 @@ public:
streamWrite(tail...); streamWrite(tail...);
} }
bool streamSkipUntil(char c) { //TODO: timeout
while (true) {
while (!stream.available()) { TINY_GSM_YIELD(); }
bool streamSkipUntil(char c) {
const unsigned long timeout = 1000L;
unsigned long startMillis = millis();
while (millis() - startMillis < timeout) {
while (millis() - startMillis < timeout && !stream.available()) {
TINY_GSM_YIELD();
}
if (stream.read() == c) if (stream.read() == c)
return true; return true;
} }


+ 192
- 3
src/TinyGsmClientSIM800.h View File

@ -223,6 +223,11 @@ public:
if (waitResponse() != 1) { if (waitResponse() != 1) {
return false; return false;
} }
// PREFERRED SMS STORAGE
sendAT(GF("+CPMS="), GF("\"SM\""), GF(","), GF("\"SM\""), GF(","), GF("\"SM\""));
waitResponse();
getSimStatus(); getSimStatus();
return true; return true;
} }
@ -326,6 +331,28 @@ public:
return true; return true;
} }
bool enableBluetooth() {
uint16_t state;
sendAT(GF("+BTPOWER=1"));
if (waitResponse() != 1) {
return false;
}
return true;
}
bool disableBluetooth() {
uint16_t state;
sendAT(GF("+BTPOWER=0"));
if (waitResponse() != 1) {
return false;
}
return true;
}
/* /*
During sleep, the SIM800 module has its serial communication disabled. In order to reestablish communication During sleep, the SIM800 module has its serial communication disabled. In order to reestablish communication
pull the DRT-pin of the SIM800 module LOW for at least 50ms. Then use this function to disable sleep mode. pull the DRT-pin of the SIM800 module LOW for at least 50ms. Then use this function to disable sleep mode.
@ -652,9 +679,167 @@ public:
} }
} }
int8_t getSMSInterrupt(void){
sendAT(GF("+CFGRI?"));
if(waitResponse(GF(GSM_NL "+CFGRI:")) != 1) return -1;
return stream.readStringUntil('\n').toInt();
}
bool setSMSInterrupt(uint8_t status){
sendAT(GF("+CFGRI="), status);
if(waitResponse() != 1) return false;
return true;
}
int8_t countSMS(void){
sendAT(GF("+CMGF=1"));
if(waitResponse() != 1) return -1;
sendAT(GF("+CPMS?"));
if(waitResponse(GF(GSM_NL "+CPMS:")) != 1) return -1;
streamSkipUntil(',');
uint8_t count = stream.readStringUntil(',').toInt() - 1;
waitResponse();
return count;
}
bool deleteSMS(){
sendAT(GF("+CMGF=1"));
if(waitResponse() != 1) return false;
sendAT(GF("+CMGDA=\"DEL ALL\""));
if(waitResponse() != 1) return false;
return true;
}
bool deleteSMS(uint8_t i){
sendAT(GF("+CMGF=1"));
if(waitResponse() != 1) return false;
sendAT(GF("+CMGD="), i);
if(waitResponse() != 1) return false;
return true;
}
String deleteSMSOpt() {
sendAT(GF("+CMGD=?"));
if (waitResponse() != 1) {
return "";
}
if (waitResponse(10000L, GF(GSM_NL "+CMGD::")) != 1) {
return "";
}
stream.readStringUntil('"');
String indexes = stream.readStringUntil('"');
stream.readStringUntil(',');
String options = stream.readStringUntil('\n');
return indexes;
}
bool readSMS(uint8_t i, String& msg){
// set message format to text mode
sendAT(GF("+CMGF=1"));
if (waitResponse() != 1) return false;
// show sms text mode parameters
sendAT(GF("+CSDH=1"));
if (waitResponse() != 1) return false;
// set GSM charset
sendAT(GF("+CSCS=\"GSM\""));
if (waitResponse() != 1) return false;
sendAT(GF("+CMGR="), i);
uint8_t cmgrResponse = waitResponse(GF(GSM_NL "+CMGR:"));
if ( cmgrResponse == 1 ) {
streamSkipUntil('\n');
msg = stream.readStringUntil('\n');
return true;
}
return false;
}
uint8_t getNewSMSIndex() {
if (waitResponse(GF(GSM_NL "+CMTI:")) != 1) {
return false;
}
streamSkipUntil(',');
int res = stream.readStringUntil('\n').toInt();
return res;
}
bool readSMSRaw(uint8_t i, String& msg) {
// set message format to text mode
sendAT(GF("+CMGF=1"));
if (waitResponse() != 1) return false;
// show sms text mode parameters
sendAT(GF("+CSDH=1"));
if (waitResponse() != 1) return false;
// set GSM charset
sendAT(GF("+CSCS=\"GSM\""));
if (waitResponse() != 1) return false;
// get message by index
sendAT(GF("+CMGR="), i);
uint8_t cmgrResponse = waitResponse(GF(GSM_NL "+CMGR:"));
if ( cmgrResponse != 1 ) {
return false;
}
msg = stream.readStringUntil('\n') + '\n'
+ stream.readStringUntil('\n') + '\n';
if (waitResponse() != 1) {
return false;
}
return true;
}
bool readAllSMSRaw(String& msg) {
// set message format to text mode
sendAT(GF("+CMGF=1"));
if (waitResponse() != 1) return false;
// show sms text mode parameters
sendAT(GF("+CSDH=1"));
if (waitResponse() != 1) return false;
// set GSM charset
sendAT(GF("+CSCS=\"GSM\""));
if (waitResponse() != 1) return false;
// get all messages
sendAT(GF("+CMGL=\"ALL\""));
const unsigned long timeout = 10000L;
unsigned long startMillis = millis();
bool isTimeout = false;
String line;
do {
line = stream.readStringUntil('\n');
line.trim();
if ( line != "" && line != "OK" ) {
msg = msg + line + String("\r\n");
}
isTimeout = (millis() - startMillis) > timeout;
delay(0);
if ( isTimeout ) {
DBG("timeout");
break;
}
} while (line != "OK");
return (line == "OK");
}
bool sendSMS(const String& number, const String& text) { bool sendSMS(const String& number, const String& text) {
sendAT(GF("+CMGF=1")); sendAT(GF("+CMGF=1"));
waitResponse(); waitResponse();
sendAT(GF("+CSCS=\"GSM\""));
waitResponse();
sendAT(GF("+CMGS=\""), number, GF("\"")); sendAT(GF("+CMGS=\""), number, GF("\""));
if (waitResponse(GF(">")) != 1) { if (waitResponse(GF(">")) != 1) {
return false; return false;
@ -837,9 +1022,13 @@ public:
streamWrite(tail...); streamWrite(tail...);
} }
bool streamSkipUntil(char c) { //TODO: timeout
while (true) {
while (!stream.available()) { TINY_GSM_YIELD(); }
bool streamSkipUntil(char c) {
const unsigned long timeout = 1000L;
unsigned long startMillis = millis();
while (millis() - startMillis < timeout) {
while (millis() - startMillis < timeout && !stream.available()) {
TINY_GSM_YIELD();
}
if (stream.read() == c) if (stream.read() == c)
return true; return true;
} }


+ 7
- 3
src/TinyGsmClientU201.h View File

@ -606,9 +606,13 @@ public:
streamWrite(tail...); streamWrite(tail...);
} }
bool streamSkipUntil(char c) { //TODO: timeout
while (true) {
while (!stream.available()) { TINY_GSM_YIELD(); }
bool streamSkipUntil(char c) {
const unsigned long timeout = 1000L;
unsigned long startMillis = millis();
while (millis() - startMillis < timeout) {
while (millis() - startMillis < timeout && !stream.available()) {
TINY_GSM_YIELD();
}
if (stream.read() == c) if (stream.read() == c)
return true; return true;
} }


Loading…
Cancel
Save