Fix dtmfSend, callNumber, localIP

This commit is contained in:
Volodymyr Shymanskyy
2017-09-28 11:04:32 +03:00
parent 8931ec46a9
commit 3db1007fb0
2 changed files with 55 additions and 24 deletions

View File

@@ -192,6 +192,9 @@ public:
sendAT(GF("+CMEE=0")); sendAT(GF("+CMEE=0"));
waitResponse(); waitResponse();
sendAT(GF("+CMER=3,0,0,2"));
waitResponse();
getSimStatus(); getSimStatus();
return true; return true;
} }
@@ -448,42 +451,54 @@ public:
// Returns true on pick-up, false on error/busy // Returns true on pick-up, false on error/busy
bool callNumber(const String& number) { bool callNumber(const String& number) {
sendAT(GF("D\""), number, "\";"); if (number == GF("last")) {
if (waitResponse() != 1) { sendAT(GF("DLST"));
} else {
sendAT(GF("D\""), number, "\";");
}
if (waitResponse(5000L) != 1) {
return false; return false;
} }
if (waitResponse(60000L, GF(GSM_NL "+CIEV: \"CALL\",1"), GF(GSM_NL "+CIEV: \"CALL\",0")) != 1) { if (waitResponse(60000L,
GF(GSM_NL "+CIEV: \"CALL\",1"),
GF(GSM_NL "+CIEV: \"CALL\",0"),
GFP(GSM_ERROR)) != 1)
{
return false; return false;
} }
int rsp = waitResponse(60000L, GF(GSM_NL "+CIEV: \"SOUNDER\",0"), GF(GSM_NL "+CIEV: \"CALL\",0")); int rsp = waitResponse(60000L,
GF(GSM_NL "+CIEV: \"SOUNDER\",0"),
GF(GSM_NL "+CIEV: \"CALL\",0"));
int rsp2 = waitResponse(300L, GF(GSM_NL "BUSY" GSM_NL), GF(GSM_NL "NO ANSWER" GSM_NL)); int rsp2 = waitResponse(300L, GF(GSM_NL "BUSY" GSM_NL), GF(GSM_NL "NO ANSWER" GSM_NL));
return rsp == 1 && rsp2 == 0; return rsp == 1 && rsp2 == 0;
} }
//bool callRedial() {
// sendAT(GF("DLST"));
// return waitResponse() == 1;
//}
bool callHangup() { bool callHangup() {
sendAT(GF("H")); sendAT(GF("H"));
return waitResponse() == 1; return waitResponse() == 1;
} }
// 0-9,*,#,A,B,C,D // 0-9,*,#,A,B,C,D
bool dtmfSend(char cmd) { bool dtmfSend(char cmd, unsigned duration_ms = 100) {
sendAT(GF("+VTS="), cmd); duration_ms = constrain(duration_ms, 100, 1000);
return waitResponse() == 1;
}
// Duration in milliseconds // The duration parameter is not working, so we simulate it using delay..
bool dtmfSetDuration(unsigned ms) { // TODO: Maybe there's another way...
sendAT(GF("+VTD="), ms / 100); // VTD accepts in 1/10 of a second
return waitResponse() == 1; //sendAT(GF("+VTD="), duration_ms / 100);
//waitResponse();
sendAT(GF("+VTS="), cmd);
if (waitResponse(10000L) == 1) {
delay(duration_ms);
return true;
}
return false;
} }
/* /*

View File

@@ -551,6 +551,8 @@ public:
if (waitResponse(10000L, res) != 1) { if (waitResponse(10000L, res) != 1) {
return ""; return "";
} }
res.replace(GSM_NL "OK" GSM_NL, "");
res.replace(GSM_NL, "");
res.trim(); res.trim();
return res; return res;
} }
@@ -575,8 +577,16 @@ public:
// Returns true on pick-up, false on error/busy // Returns true on pick-up, false on error/busy
bool callNumber(const String& number) { bool callNumber(const String& number) {
sendAT(GF("D"), number, ";"); if (number == GF("last")) {
int status = waitResponse(60000L, GF("OK"), GF("BUSY"), GF("NO ANSWER"), GF("NO CARRIER")); sendAT(GF("DL"));
} else {
sendAT(GF("D"), number, ";");
}
int status = waitResponse(60000L,
GFP(GSM_OK),
GF("BUSY" GSM_NL),
GF("NO ANSWER" GSM_NL),
GF("NO CARRIER" GSM_NL));
switch (status) { switch (status) {
case 1: return true; case 1: return true;
case 2: case 2:
@@ -585,16 +595,22 @@ public:
} }
} }
//bool callRedial() {
// sendAT(GF("DL"));
// return waitResponse() == 1;
//}
bool callHangup() { bool callHangup() {
sendAT(GF("H")); sendAT(GF("H"));
return waitResponse() == 1; return waitResponse() == 1;
} }
// 0-9,*,#,A,B,C,D
bool dtmfSend(char cmd, int duration_ms = 100) {
duration_ms = constrain(duration_ms, 100, 1000);
sendAT(GF("+VTD="), duration_ms / 100); // VTD accepts in 1/10 of a second
waitResponse();
sendAT(GF("+VTS="), cmd);
return waitResponse(10000L) == 1;
}
/* /*
* Messaging functions * Messaging functions
*/ */