![]() |
Hi guys,
I found another issue - when I dial the numbers automatically (from my fax machine and add pauses to bypass the voice greeting, then the desired DTMF code - everything works great, but if I enter the code manually (pressing the keys longer than instantaneous) code does not get recorded properly but with repetitions - for example if I enter 1234, I get 1123 or 1112. Is there a away to avoid "autorepeat" and force the modem to read the digits no matter how long a single digit DTMF is being received?
I found the modem extremely sensitive - if you don't press the keys as quickly as possible you will usually get repetitions.
(OS -RHEL 3 U6, HylaFAX 4.2.4.1, modem LT V.92 1.0 MT5634ZPX-PCI-U INTERNAL
DATA/FAX/VOICE MODEM VERSION 1.32K(MULTI-TECH SYSTEMS MT5634ZPX-PCI-U/1.32k)
--- hylafax.orig/faxd/ClassModem.c++ 2005-12-22 09:24:30.000000000 -0800 +++ hylafax/faxd/ClassModem.c++ 2006-01-04 21:25:31.754091072 -0800 @@ -1376,13 +1376,25 @@ 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; 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... - protoTrace("MODEM HEARD DTMF: %c", c); - callid[j].append(fxStr::format("%c", c)); + if (!marked || (marked && !gotdigit)) { + protoTrace("MODEM HEARD DTMF: %c", c); + callid[j].append(fxStr::format("%c", c)); + gotdigit = true; + } + } else if (c == 0x2F) { + // got IS-101 DTMF lead marker + marked = true; + gotdigit = false; + } else if (c == 0x7E) { + // got IS-101 DTMF end marker + marked = false; + gotdigit = false; } else if (c == 0x73) { // got silence, keep waiting protoTrace("MODEM HEARD SILENCE");