sms feature
This commit is contained in:
@@ -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;
|
||||
|
Reference in New Issue
Block a user