summaryrefslogtreecommitdiff
path: root/xpp/card_fxo.c
diff options
context:
space:
mode:
authortzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2006-08-10 02:38:43 +0000
committertzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2006-08-10 02:38:43 +0000
commit99a3ccdba4500df334460bf45b1955d0d663b238 (patch)
treeb888cbe0c1d9f97948fbe2f27adea811455471bd /xpp/card_fxo.c
parent608b6a40db52a9db9017f384a0c69f0d4b973763 (diff)
- 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
Diffstat (limited to 'xpp/card_fxo.c')
-rw-r--r--xpp/card_fxo.c18
1 files changed, 14 insertions, 4 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);