From c2f0133a3bae3f04b1d35dd8873d55c02b47892f Mon Sep 17 00:00:00 2001 From: Matthew Fredrickson Date: Tue, 10 Jan 2006 21:34:04 +0000 Subject: [PATCH] Update chan_phone to indicate FLASH properley (#4935) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@7947 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_phone.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/channels/chan_phone.c b/channels/chan_phone.c index abea80c924..8f732e9ae2 100644 --- a/channels/chan_phone.c +++ b/channels/chan_phone.c @@ -160,6 +160,7 @@ static int phone_write(struct ast_channel *ast, struct ast_frame *frame); static struct ast_frame *phone_exception(struct ast_channel *ast); static int phone_send_text(struct ast_channel *ast, const char *text); static int phone_fixup(struct ast_channel *old, struct ast_channel *new); +static int phone_indicate(struct ast_channel *chan, int condition); static const struct ast_channel_tech phone_tech = { .type = type, @@ -173,6 +174,7 @@ static const struct ast_channel_tech phone_tech = { .read = phone_read, .write = phone_write, .exception = phone_exception, + .indicate = phone_indicate, .fixup = phone_fixup }; @@ -189,11 +191,31 @@ static struct ast_channel_tech phone_tech_fxs = { .exception = phone_exception, .write_video = phone_write, .send_text = phone_send_text, + .indicate = phone_indicate, .fixup = phone_fixup }; static struct ast_channel_tech *cur_tech; +static int phone_indicate(struct ast_channel *chan, int condition) +{ + struct phone_pvt *p = chan->tech_pvt; + int res=-1; + ast_log(LOG_DEBUG, "Requested indication %d on channel %s\n", condition, chan->name); + switch(condition) { + case AST_CONTROL_FLASH: + ioctl(p->fd, IXJCTL_PSTN_SET_STATE, PSTN_ON_HOOK); + usleep(320000); + ioctl(p->fd, IXJCTL_PSTN_SET_STATE, PSTN_OFF_HOOK); + p->lastformat = -1; + res = 0; + break; + default: + ast_log(LOG_WARNING, "Condition %d is not supported on channel %s\n", condition, chan->name); + } + return res; +} + static int phone_fixup(struct ast_channel *old, struct ast_channel *new) { struct phone_pvt *pvt = old->tech_pvt;