From 99a3ccdba4500df334460bf45b1955d0d663b238 Mon Sep 17 00:00:00 2001 From: tzafrir Date: Thu, 10 Aug 2006 02:38:43 +0000 Subject: - In SIG_CHANGED only sig_toggles bits are interesting (was good in FXS, now fixed in FXO). - Better DBG messages for SIG_CHANGED (FXS and FXO). - Start work on new RING logic (for FXO caller id). git-svn-id: http://svn.digium.com/svn/zaptel/trunk@1279 5390a7c7-147a-4af0-8ec9-7488f05a26cb --- xpp/card_fxo.c | 18 ++++++++++++++---- xpp/card_fxs.c | 4 ++-- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/xpp/card_fxo.c b/xpp/card_fxo.c index 126f890..ae7c06f 100644 --- a/xpp/card_fxo.c +++ b/xpp/card_fxo.c @@ -560,6 +560,8 @@ static /* 0x0F */ HOSTCMD(FXO, SETHOOK, int pos, bool offhook) pack->datalen = len; packet_send(xbus, pack); do_led(xpd, pos, LED_GREEN, (offhook)?LED_ON:LED_OFF); + if(!offhook) + xpd->ringing[pos] = 0; spin_unlock_irqrestore(&xpd->lock, flags); return ret; } @@ -606,10 +608,18 @@ HANDLER_DEF(FXO, SIG_CHANGED) DBG("%s/%s: (PSTN) sig_toggles=0x%04X sig_status=0x%04X\n", xpd->xbus->busname, xpd->xpdname, sig_toggles, sig_status); spin_lock_irqsave(&xpd->lock, flags); for_each_line(xpd, i) { - if(IS_SET(sig_status, i)) { - xpd->ringing[i] = 1; - } else { - xpd->ringing[i] = 0; + if(IS_SET(sig_toggles, i)) { + struct zt_chan *chan = &xpd->span.chans[i]; + + if(IS_SET(sig_status, i)) { + DBG("%s/%s/%d: RING-ON\n", xbus->busname, xpd->xpdname, chan->channo); + xpd->ringing[i] = 1; + do_led(xpd, i, LED_GREEN, LED_ON); + } else { + DBG("%s/%s/%d: RING-OFF\n", xbus->busname, xpd->xpdname, chan->channo); + xpd->ringing[i] = 0; + do_led(xpd, i, LED_GREEN, LED_OFF); + } } } spin_unlock_irqrestore(&xpd->lock, flags); diff --git a/xpp/card_fxs.c b/xpp/card_fxs.c index 094ed71..09f548b 100644 --- a/xpp/card_fxs.c +++ b/xpp/card_fxs.c @@ -781,12 +781,12 @@ HANDLER_DEF(FXS, SIG_CHANGED) do_chan_power(xpd->xbus, xpd, BIT(i), 0); // When not ringing, VBAT is always Low MARK_BLINK(priv,i,LED_GREEN,0); if(IS_SET(sig_status, i)) { - DBG("OFFHOOK: channo=%d\n", chan->channo); + DBG("%s/%s/%d: OFFHOOK\n", xbus->busname, xpd->xpdname, chan->channo); MARK_LED(priv,i,LED_GREEN,LED_ON); BIT_SET(xpd->hookstate, i); zt_hooksig(chan, ZT_RXSIG_OFFHOOK); } else { - DBG("ONHOOK channo=%d\n", chan->channo); + DBG("%s/%s/%d: ONHOOK\n", xbus->busname, xpd->xpdname, chan->channo); MARK_LED(priv,i,LED_GREEN,LED_OFF); BIT_CLR(xpd->hookstate, i); zt_hooksig(chan, ZT_RXSIG_ONHOOK); -- cgit v1.2.3