HylaFAX The world's most advanced open source fax server

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [hylafax-users] Voice Modem Problems





David Ronis wrote:

> I'm trying to get hylafax to work with a ZYXEL omni 56K modem on an
> i686-linux-gnu box.  I can get vgetty to answer the modem by itself,
> but would prefer to stick with hylafax.  So far I fax and data calls
> work fine, but I've been completely unsuccessful getting faxgetty to
> answer/recognize voice calls.  I always start with a data connection.
> I use agetty for data and want to use vgetty for voice.
>
> My configuration file is appended.
>
> I've played around with the ModemSetupAACmd, AdaptiveAnswer, and
> AnswerRotary parameters, but so far, without success.
>
> Has anybody gotten any voice modem to work?  If so, could you send me
> a copy of your configuration file?

Yes, I use ZYXEL U1496+.

Configuration is
-----------
AnswerRotary:           extern
EGettyArgs:             "...<args>..."
-----------

My egetty program plays voice promt and exits with code 2 if detected fax tone.
If fax tone was not detected it records voice message.

The typical sessiÏns for egetty program are:

----------- voice call sessiÏn
>>> 'AT\r'
<<< '\r\nOK\r\n'
>>> 'AT+FCLASS=?\r'
<<< '\r\n0,2,2.0,6,8\r\nOK\r\n'
>>> 'AT+FCLASS?\r'
<<< '\r\n2.0\r\nOK\r\n'
>>> 'AT+FCLASS=8\r'        # voice class
<<< '\r\nOK\r\n'
>>> 'ATS39.6=1\r'               # enable receiving DLE codes
<<< '\r\nOK\r\n'
>>> 'AT+VLS=2\r'                # voice connection
<<< '\r\nVCON\r\n'
>>> 'AT+VTX\r'                    # start sending voice
<<< '\r\nCONNECT\r\n'
>>> [RMD file]                      # sending voice prompt
>>> <NUL><DLE><ETX>   # stop sending voice
<<< '\r\nVCON\r\n'
>>> 'AT+VTS=[1200,0,15]\r' # beep
<<< '\r\nOK\r\n'
>>> 'AT+VRX\r'                   # start receiving voice
<<< '\r\nCONNECT\r\n'
<<< [RMD file]                     # receiving/recording voice message
<<< '<DLE>b'                     # busy signal detected
>>> 'AT\r'                            # stop receiving voice
<<< '\r\nVCON\r\n'
>>> 'ATS39.6=0\r'              # restore
<<< '\r\nOK\r\n'
>>> 'AT+FCLASS=2.0\r'   # restore
<<< '\r\nOK\r\n'
>>> 'AT+VLS=0\r'              # on hook
<<< '\r\nOK\r\n'
exit 5                                   #  return to faxgetty with CALLTYPE_DONE
-----------

----------- fax call sessiÏn
>>> 'AT\r'
<<< '\r\nOK\r\n'
>>> 'AT+FCLASS=?\r'
<<< '\r\n0,2,2.0,6,8\r\nOK\r\n'
>>> 'AT+FCLASS?\r'
<<< '\r\n2.0\r\nOK\r\n'
>>> 'AT+FCLASS=8\r'
<<< '\r\nOK\r\n'
>>> 'ATS39.6=1\r'
<<< '\r\nOK\r\n'
>>> 'AT+VLS=2\r'
<<< '\r\nVCON\r\n'
>>> 'AT+VTX\r'
<<< '\r\nCONNECT\r\n'
>>> [RMD file]                      # sending voice prompt
<<< '<DLE>c'                            # fax tone detected
>>> <NUL><DLE><ETX>  # interrupt sending voice
<<< '\r\nVCON\r\n'
>>> 'ATS39.6=0\r'
<<< '\r\nOK\r\n'
>>> 'AT+FCLASS=2.0\r'
<<< '\r\nOK\r\n'
>>> 'ATA\r'                               # answer fax
<<< '\r\nCONNECT FAX\r\n'
exit 2                                         # return to faxgetty with CALLTYPE_FAX
-----------

I'm not using the mgetty+sendfax's vgetty but it seems that it can be used instead egetty.

NOTE: It seems there is a bug in HylaFax on Linux (see below).
If so you can try to patch HylaFax or use egetty script that runs vgetty
(replace "print "ATA\r"; exit 2;" to "exec '/sbin/vgetty...';").

Vyacheslav Frolov wrote:

> Dmitry Bely wrote:
>
> > [---cut---]
> > #!/usr/bin/perl
> > print "ATA\r";  # always answer as a fax
> > exit 2;
> > [---cut---]
> >
> > The problem is that after returning to Hylafax the modem file descriptor
> > becames broken and all commands to the modem fails with the write error :-(
>
> On Linux You can fix that two ways: in HylaFax source (cut1) or in egetty script (cut2).
>
> [---cut1---]
> --- ../org/hylafax-4.1beta2/faxd/GettySysV.c++  Sun Jun 13 11:41:03 1999
> +++ ../hylafax-4.1beta2/faxd/GettySysV.c++      Fri Mar 17 17:40:00 2000
> @@ -95,6 +95,7 @@
>       * the login process that follows.
>       */
>      setsid();
> +#define sco
>  #ifndef sco
>      fd = Sys::open(getLine(), O_RDWR|O_NONBLOCK);
>  #else
> [---cut1---]
>
> [---cut2---]
> #!/usr/bin/perl
> require 'asm/ioctls.ph';
> require 'asm/termios.ph';
> sub termios_t() { 'IIIICC32C3II'; }
> sub m_open() {
>     local $SIG{'HUP'} = sub {};
>     ioctl(STDOUT, &TIOCNOTTY, 0);
>
>     my $termios = "";
>     ioctl(STDOUT, &TCGETS, $termios);
>     my @ar = unpack(termios_t, $termios);
>     $ar[2] |= &CLOCAL;
>     $termios = pack(termios_t, @ar);
>     ioctl(STDOUT, &TCSETS, $termios);
> }
> m_open();
> print "ATA\r";
> exit 2;
> [---cut2---]
>
> Sorry, I had't test the example. It's only the cut from my working script.
>
> Regards,
> Vyacheslav.



____________________ HylaFAX(tm) Users Mailing List _______________________
 To unsub: mail -s unsubscribe hylafax-users-request@hylafax.org < /dev/null




Project hosted by iFAX Solutions