![]() |
minicom output:
1: info
OK ATI MT5656ZDXV OK AT
+FCLASS=? 0,1,1.0,2,8,10
2: Broken DTMF via minicom
RING AT+FCLASS=8;
+VLS=1 OK ./.4.9.~./.8.~
3: Good DTMF from other modem
RING AT+FCLASS=8;
+VLS=1 OK ./.4.~./.9.~./.8.~
--- hylafax.orig/faxd/ClassModem.c++ 2010-02-15 12:08:17.000000000 -0800 +++ hylafax/faxd/ClassModem.c++ 2010-03-23 21:37:01.608828392 -0700 @@ -1488,25 +1488,26 @@ for (u_int j = 0 ; j < conf.idConfig.length(); j++) { if (conf.idConfig[j].pattern == "SHIELDED_DTMF") { // retrieve DID, e.g. via voice DTMF ringstart = Sys::now(); - bool marked = false, gotdigit = false; + bool marked = false; + int gotdigit = 0; do { int c = server.getModemChar(10000); if (c == 0x10) c = server.getModemChar(10000); if (c == 0x23 || c == 0x2A || (c >= 0x30 && c <= 0x39)) { // a DTMF digit was received... - if (!marked || (marked && !gotdigit)) { + if (!marked || !gotdigit || (c != gotdigit)) { protoTrace("MODEM HEARD DTMF: %c", c); callid[j].append(fxStr::format("%c", c)); - gotdigit = true; + gotdigit = c; } } else if (c == 0x2F) { // got IS-101 DTMF lead marker marked = true; - gotdigit = false; + gotdigit = 0; } else if (c == 0x7E) { // got IS-101 DTMF end marker marked = false; - gotdigit = false; + gotdigit = 0; } else if (c == 0x73) { // got silence, keep waiting protoTrace("MODEM HEARD SILENCE");