On Thu, Aug 17, 2006 at 10:23:12PM +0200, Klaus Nitsche wrote:
Hallo,
ich beabsichtige das Anrufbeantwortersystem VOCP mit Hilfe von vgetty und
einer Fritz ISDN PCI 2.0 zu betreiben.
Habe SuSE 10.1 mit i4l / capi4linux 2006.4.25-4 und capisuite 0.4.5-19 sowie
die Capi Treiber von http://opensuse.fltronic.de/ für den Kernel 2.6.16-21.
Fogendes Problem: Nach Annahme des Anrufs und eingehender DTMF-Töne reagiert
VOCP nicht. Habe hier mal den vgetty-log:
08/17 20:27:00 yI7 Linux ISDN: OK
...
08/17 20:27:09 yI7 vgetty: AT
08/17 20:27:09 yI7 Linux ISDN: OK
08/17 20:27:09 yI7 tio_set_flow_control( HARD XON_OUT )
08/17 20:27:09 yI7 voice command: 'AT+VTX' -> 'CONNECT|NO ANSWER'
08/17 20:27:09 yI7 vgetty: AT+VTX
08/17 20:27:09 yI7 Linux ISDN: CONNECT
08/17 20:27:09 yI7 Linux ISDN: <DLE> <_>
08/17 20:27:09 yI7 vgetty: Unknown code <DLE> <_>
08/17 20:27:09 yI7 Linux ISDN: <DLE> <_>
08/17 20:27:09 yI7 vgetty: Unknown code <DLE> <_>
08/17 20:27:09 yI7 vgetty:
Die Zeilen "Linux ISDN: <DLE> <_>" sind das eigentliche Problem, da müssten
eigentlich die Ziffern der gedrückten Tasten auftauchen. Da vgetty also nur
"Unkonw code <DLE> <_>" bekommt, kann VOCP natürlich auch auf nichts
reagieren.
Allerdings zeigt "tail -f /var/log/messages | grep dtmf" folgendes:
Aug 17 20:27:03 r2d2 kernel: dtmf: tt='1'
Aug 17 20:27:04 r2d2 kernel: dtmf: tt='2'
Aug 17 20:27:09 r2d2 kernel: dtmf: tt='3'
Aug 17 20:27:09 r2d2 kernel: dtmf: tt='4'
Bekanntes Problem, Fehler im ttyI code.
Ist im kernel 2.6.18 gefixt, hier die 2 Patches:
From: Karsten Keil
Date: Mon Jun 26 20:14:14 2006 +0200
Subject: [PATCH] fix processing of the last byte in isdn_readbchan_tty()
The changes in the tty handling contain a bug while accessing
the last byte in the skb. Since special sequence for control of
DTMF and FAX via ttyI* devices handled via this path, these services
do not work anymore.
Signed-off-by: Karsten Keil
---
drivers/isdn/i4l/isdn_common.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
1bfb4ea878e3e73e64a5507d1a305517c1f2bbdd
diff --git a/drivers/isdn/i4l/isdn_common.c b/drivers/isdn/i4l/isdn_common.c
index 81accdf..b26e509 100644
--- a/drivers/isdn/i4l/isdn_common.c
+++ b/drivers/isdn/i4l/isdn_common.c
@@ -933,7 +933,7 @@ isdn_readbchan_tty(int di, int channel,
count_put = count_pull;
if(count_put > 1)
tty_insert_flip_string(tty, skb->data, count_put - 1);
- last = skb->data[count_put] - 1;
+ last = skb->data[count_put - 1];
len -= count_put;
#ifdef CONFIG_ISDN_AUDIO
}
From: Karsten Keil
Date: Tue Jun 27 12:42:39 2006 +0200
Subject: [PATCH] i4l fix DLE masking in isdn_tty_try_read
DLE masking was none functional since the new tty handling.
Found by Peter Evertz
Signed-off-by: Karsten Keil
---
drivers/isdn/i4l/isdn_tty.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
d895418ed29eb92a72c5c2ef68a6dafeaa53b717
diff --git a/drivers/isdn/i4l/isdn_tty.c b/drivers/isdn/i4l/isdn_tty.c
index 2ac9024..433389d 100644
--- a/drivers/isdn/i4l/isdn_tty.c
+++ b/drivers/isdn/i4l/isdn_tty.c
@@ -82,7 +82,7 @@ isdn_tty_try_read(modem_info * info, str
int l = skb->len;
unsigned char *dp = skb->data;
while (--l) {
- if (*skb->data == DLE)
+ if (*dp == DLE)
tty_insert_flip_char(tty, DLE, 0);
tty_insert_flip_char(tty, *dp++, 0);
}
--
Karsten Keil
SuSE Labs
ISDN development