Am Donnerstag, 17. August 2006 23:14 schrieb Karsten Keil:
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: <VOICE DATA 10176 bytes>
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 <kkeil@suse.de> 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 <kkeil@suse.de>
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);
#ifdef CONFIG_ISDN_AUDIO }len -= count_put;
From: Karsten Keil <kkeil@suse.de> 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 <leo2@pec.homeip.net>
Signed-off-by: Karsten Keil <kkeil@suse.de>
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) {
tty_insert_flip_char(tty, DLE, 0); tty_insert_flip_char(tty, *dp++, 0); }
-- Karsten Keil SuSE Labs ISDN development
habe die beiden Patches eingebaut, es funktioniert. Danke für die schnelle Hilfe. Klaus Nitsche