Ok, I think I have gotten to the bottom of it: 1.: Using zap_channel_dequeue_dtmf() correctly identifies digits for both in-band PRI and analog. 2.: Setting an event callback and waiting for ZAP_EVENT_DTMF works for in-band digits on a PRI channel. 3.: Potential bug: As suggested by Moises, adding extra logging in libteletone_detect.c shows that digits were detected, but the ZAP_EVENT_DTMF events were *not* sent back for an analog channel (I am using an Openvox A800p, but it looks to be the same for all analog cards). 4.: Potential bug: DTMF digit detection *eats some audio* each time a digit is detected. If the device is connected directly to free switch this is not a problem. If a device makes a call through freeswitch (to let's say phone banking) a digit that is held down may be detected as 3 digits (sometimes more) due to the consumed audio. This can be heard on the other side of freeswitch as a start-stop at the start of the DTMF. Any thoughts? Cheers -alex Moises Silva wrote:
On Tue, Aug 11, 2009 at 1:17 AM, Alex Green <alexg@etherstack.com <mailto:alexg@etherstack.com>> wrote:
Thanks Moises, do I need to do a flush_dtmf() or set values for DTMF on/off period, or anything else?
I think default on/off times are good enough, but I suppose you may have to play with it. As of flushing, sounds like a good idea to do when the call starts, but that depends on your applications, if you are certain of consuming all DTMF always, then is not needed.
Are you using hw dtmf? are you using Sangoma boards?
I noticed that openzap behavior will be different from an API point of view when using hardware DTMF than when using software DTMF, since the callbacks (for span and channel) are currently not available when using hardware DTMF. That sounds like a bug to me, the behavior should be available regardless of the backend system used for DTMF. I will fix that asap.
zap_channel_dequeue_dtmf() correctly identifies the digit, but if the digit is held down it is detected more than once. I am using a frame size of 160 for the read.
More than once like in twice? 3 times, 4 times? ad infinitum if the digit is hold? I'd need to debug to try to figure out where that comes from. If you are using hardware dtmf in wanpipe boards you can go to src/ozmod/ozmod_wanpipe/ozmod_wanpipe.c and search for WP_TDMAPI_EVENT_DTMF, then uncomment the log line there to see if the digit is detected twice by the drivers.
If using software DTMF, some logging in zap_channel_read when calling teletone_dtmf_detect() can be added to check if its detecting it twice.
-- Moises Silva Software Developer Sangoma Technologies Inc. | 50 McIntosh Drive, Suite 120, Markham ON L3R 9T3 Canada t. 1 905 474 1990 x 128 | e. moy@sangoma.com <mailto:moy@sangoma.com>
------------------------------------------------------------------------
_______________________________________________ FreeSWITCH-dev mailing list FreeSWITCH-dev@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-dev http://www.freeswitch.org