Browse Source

sms feature

v_master
Dawid Cieszynski 7 years ago
parent
commit
962cb482fa
1 changed files with 163 additions and 0 deletions
  1. +163
    -0
      src/TinyGsmClientSIM800.h

+ 163
- 0
src/TinyGsmClientSIM800.h View File

@ -223,6 +223,11 @@ public:
if (waitResponse() != 1) {
return false;
}
// PREFERRED SMS STORAGE
sendAT(GF("+CPMS="), GF("\"SM\""), GF(","), GF("\"SM\""), GF(","), GF("\"SM\""));
waitResponse();
getSimStatus();
return true;
}
@ -652,9 +657,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) {
sendAT(GF("+CMGF=1"));
waitResponse();
sendAT(GF("+CSCS=\"GSM\""));
waitResponse();
sendAT(GF("+CMGS=\""), number, GF("\""));
if (waitResponse(GF(">")) != 1) {
return false;


Loading…
Cancel
Save