[Freeswitch-dev] Detecting in-band DTMF Digits in Openzap?

Moises Silva moises.silva at gmail.com
Mon Aug 10 20:59:10 PDT 2009


On Mon, Aug 10, 2009 at 10:26 PM, Alex Green <alexg at etherstack.com> wrote:

> For FXO I switch back to the dialtone state and collect the digits via
> the ZAP_SIGEVENT_COLLECTED_DIGIT call back (which is a little bit ugly
> and does not allow dial ahead, but it works).


Sounds way too ugly, I don't think you should be doing that.


> DIALTONE' is printed if you try). Openzap must be able to detect digits
> during a call, but I am having trouble figuring out how.
>
> ie. How do you use Openzap to detect in-band DTMF digits during a call?
>

Take a look at mod_openzap/mod_openzap.c, on_clear_channel_signal()

It seem to me you should do the same.

zap_channel_command(sigmsg->channel, ZAP_COMMAND_ENABLE_DTMF_DETECT, &tt);
where tt = ZAP_TONE_DTMF and sigmsg->channel is the zap_channel_t

That will enable the DTMF detection feature in the channel (either in
software or hardware if its available).

After enabling that feature, you can use zap_channel_dequeue_dtmf(zchan,
dtmf, sizeof(dtmf)); to dequeue DTMF after calling zap_channel_read(), since
there is where dtmf (if any) is enqueued. Check zap_channel_read so you can
see how the DTMF is detected and enqueued.

If you don't want to call zap_channel_dequeue_dtmf on each read (or you
can't), then register an event callback for the span with
zap_span_set_event_callback(), then your code will be called with
ZAP_EVENT_DTMF when dtmf is received in any channel on that span.

Hope that helps,

-- 
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 at sangoma.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freeswitch.org/pipermail/freeswitch-dev/attachments/20090810/6a4c041a/attachment.html 


More information about the FreeSWITCH-dev mailing list