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