Date: Wed, 9 Mar 2016 21:21:22 +0000 From: Holger Kipp <Holger.Kipp@alogis.com> To: Ian Lepore <ian@freebsd.org> Cc: "freebsd-stable@freebsd.org" <freebsd-stable@freebsd.org> Subject: [Solved] Problems with ucom/uftdi and sendfax on 10.2 p12 (works like a charm with 7.4) Message-ID: <7D2BDA5F-889D-4234-8F64-6D00956E05E3@alogis.com> In-Reply-To: <9CA439E9-66BD-488D-AC8D-E0FCACC48A15@alogis.com> References: <C2938AE5-8766-4F3B-AB2A-CA35B64391DC@alogis.com> <1456865414.13785.119.camel@freebsd.org>, <9CA439E9-66BD-488D-AC8D-E0FCACC48A15@alogis.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Dear Ian,
> On 02.03.2016, at 11:45, Holger Kipp <Holger.Kipp@alogis.com> wrote:
>
>
> Am 01.03.2016 um 23:08 schrieb Ian Lepore <ian@freebsd.org<mailto:ian@fre=
ebsd.org>>:
>
> On Tue, 2016-03-01 at 19:58 +0000, Holger Kipp wrote:
> Hi all,
>
> I currently encounter a problem with sending faxes with new server
> and FreeBSD 10.2-RELEASE p12
> using mgetty+sendfax and RS232-Modems via USB to RS232-Adapter (com,
> uftdi).
>
> Problem is that _after_ sending the first page, the reply of modem is
> not read correctly.
>
> In Error case, Faxlog says:
>
> 02/29 18:46:10 aU4 read 64, write 64
> 02/29 18:46:10 aU4 read 52, write 52
> 02/29 18:46:10 aU4 page complete, 40900 bytes sent
> 02/29 18:46:10 aU4 sending DLE ','
> 02/29 18:46:10 aU4 got:[0a][0d][0a]OK[0d]
> 02/29 18:46:18 aU4 got response: 'OK'
> 02/29 18:46:18 aU4 fax_send_page("f2.g3") started...
> 02/29 18:46:18 aU4 tio_set_flow_control( HARD )
> 02/29 18:46:18 aU4 fax_send: 'AT+FDT'
> 02/29 18:46:18 aU4 fax_wait_for(CONNECT)
> 02/29 18:46:18 aU4 got:[0a]
> 02/29 18:48:18 aU4 Warning: got alarm signal!
>
> So I run into timeout because the modem does not reply as expected
> after AT+FDT-command (maybe even after sending DLE ',=91 because the OK
> response seems to take some more time than under FreeBSD 7.4).
>
>
> if I issue "tip modem4" (which is /dev/cuaU4), I get the missing
> replies including CONNECT from the modem (then leaving tip with "~.=93)
>
> root@faxserver:/usr/local/etc/mgetty+sendfax # tip modem4
> connected
> AT+FDT
> CONNECT
>
> +FHS:43
>
> OK
> AT+FCLASS=3D0
> OK
> ~
> [EOT]
> root@faxserver:/usr/local/etc/mgetty+sendfax #
>
>
> This works correctly with same modems and USB to RS232-Adapter
> (uftdi) under FreeBSD 7.4.
>
> 02/29 12:18:26 aU4 receiver cap.: '+FIS:1,5,0,2,1,1,0,3' -> fine 144
> 2D/MR ECM** found **
> 02/29 12:18:26 aU4 sendfax: IGNORE DCD (carrier) status
> 02/29 12:18:26 aU4 fax_send: 'AT+FDT'
> 02/29 12:18:26 aU4 fax_wait_for(CONNECT)
> 02/29 12:18:33 aU4 transmission par.: '+FCS:1,5,0,2,0,0,0,3'** found
> **
> 02/29 12:18:33 aU4 sending f1.g3...
> 02/29 12:19:04 aU4 page complete, 34495 bytes sent
> 02/29 12:19:04 aU4 sending DLE ','
> 02/29 12:19:10 aU4 got response: 'OK'
> 02/29 12:19:10 aU4 fax_send: 'AT+FDT'
> 02/29 12:19:10 aU4 fax_wait_for(CONNECT)** found **
> 02/29 12:19:11 aU4 sending f2.g3...
> 02/29 12:19:55 aU4 page complete, 60064 bytes sent
> 02/29 12:19:55 aU4 sending DLE ','
> 02/29 12:20:01 aU4 got response: 'OK'
> 02/29 12:20:01 aU4 fax_send: 'AT+FDT'
> 02/29 12:20:01 aU4 fax_wait_for(CONNECT)** found **
> 02/29 12:20:01 aU4 sending f3.g3...
> 02/29 12:20:52 aU4 page complete, 71335 bytes sent
> 02/29 12:20:52 aU4 sending DLE ','
> 02/29 12:20:57 aU4 got response: 'OK'
> 02/29 12:20:57 aU4 fax_send: 'AT+FDT'
> 02/29 12:20:57 aU4 fax_wait_for(CONNECT)** found **
> 02/29 12:20:58 aU4 sending f4.g3...
> 02/29 12:21:40 aU4 page complete, 58628 bytes sent
> 02/29 12:21:40 aU4 sending DLE '.'
> 02/29 12:21:49 aU4 connection hangup: '+FHS:00'
> 02/29 12:21:49 aU4 got response: 'OK'
> 02/29 12:21:49 aU4 fax_send: 'AT+FCLASS=3D0'
>
> This is with devolo 56k i ISDN-modems, but it looks more like a USB
> interface communication issue to me.
>
> Modems and USB-to-RS232 are the same - connected to FreeBSD 7.4
> servers works (sends all pages), connected to 10.2 server does not
> work (sends first page only).
>
> I can also provide dmesg.boot details on request but didn=92t want to
> pollute the list.
>
> Difference with stty -a /dev/cuaU4 seems to be clocal instead of
> -clocal which I can=92t set for cuaU4, only for .init and .lock. which
> does not help.
> 7.4 Kernel comes with uftdi and ucom compiled in.
> 10.2 Kernel has the same issues with ucom and uftdi loaded as kernel
> modules or compiled in.
>
> mgetty+sendfax is version 1.1.35_1 on FreeBSD 7.4 and version 1.1.37
> on FreeBSD 10.2-RELEASE p12.
>
> Any other ideas where to look further or what to investigate?
>
> Many thanks and best regards,
> Holger
>
> Seeing "tio_set_flow_control( HARD )>" in your output, along with the
> fact that you said the expected output finally appeared after you
> connected with tip, makes me suspect that flow control is at the root
> of this problem.
>
> The biggest ftdi driver difference before/after freebsd 8 is that the
> driver used to automatically re-intialize the chip on every open to set
> up some arbitrary combination of comms parameters (baud, flow control,
> etc) -- I forget all the details now, I'd have to do some digging
> through logs to find exactly what it used to set. Now the driver
> leaves the chip alone at open time, and the contents of the
> /dev/cuaU#.init and cuaU#.lock files should be completely in control of
> the serial parameters.
>
> Is it possible that you set up the .init and/or .lock devices in some
> rc script in freebsd 7 and forgot about it? If not, then maybe the
> driver init changes are enough to explain the glitch.
>
> I wonder if this would fix it:
>
> stty -f /dev/cuaU4.init crtscts
>
> If so, then put that command into an rc script, or maybe into a devd
> rule that runs whenever that usb-serial is attached.
>
> If not... then I guess we'll figure out what to try next. :)
>
> Dear Ian,
>
> below you will find stty settings in old and new system.
> I had tried crtscts, but without success and not properly documented.
> Have tried it once more (see below), now also documented ;-)
>
> FreeBSD 7.4:
> faxserver# stty -f /dev/cuaU4
> speed 9600 baud;
> lflags: -echo
> oflags: -oxtabs
> cflags: cs8 -parenb
> faxserver# stty -f /dev/cuaU4.init
> speed 9600 baud;
> lflags: -echo
> oflags: -oxtabs
> cflags: cs8 -parenb
> faxserver# stty -f /dev/cuaU4.lock
> speed 0 baud;
> lflags: -icanon -isig -iexten -echo
> iflags: -icrnl -ixon -ixany -imaxbel -brkint
> oflags: -opost -onlcr -oxtabs
> cflags: -cread cs5 -parenb -hupcl
> discard dsusp eof eol eol2 erase erase2 intr kill
> ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
> lnext min quit reprint start status stop susp werase
> ^@ 0 ^@ ^@ ^@ ^@ ^@ ^@ ^@
>
>
> FreeBSD 10.2-RELEASE
> faxserver# stty -f /dev/cuaU4
> speed 9600 baud;
> lflags: echoe echoke echoctl
> oflags: tab0
> cflags: cs8 -parenb clocal
> faxserver# stty -f /dev/cuaU4.init
> speed 9600 baud;
> lflags: echoe echoke echoctl
> oflags: tab0
> cflags: cs8 -parenb
> faxserver# stty -f /dev/cuaU4.lock
> speed 0 baud;
> lflags: -icanon -isig -iexten -echo
> iflags: -icrnl -ixon -ixany -imaxbel -brkint
> oflags: -opost -onlcr tab0
> cflags: -cread cs5 -parenb -hupcl
> discard dsusp eof eol eol2 erase erase2 intr kill
> ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
> lnext min quit reprint start status stop susp werase
> ^@ 0 ^@ ^@ ^@ ^@ ^@ ^@ ^@
>
> original settings (I have not changed anything for cuaU7):
> faxserver# stty -f /dev/cuaU7
> speed 9600 baud;
> lflags: echoe echoke echoctl
> oflags: tab0
> cflags: cs8 -parenb clocal
> faxserver# stty -f /dev/cuaU7.init
> speed 9600 baud;
> lflags: echoe echoke echoctl
> oflags: tab0
> cflags: cs8 -parenb
> faxserver# stty -f /dev/cuaU7.lock
> speed 0 baud;
> lflags: -icanon -isig -iexten -echo
> iflags: -icrnl -ixon -ixany -imaxbel -brkint
> oflags: -opost -onlcr tab0
> cflags: -cread cs5 -parenb -hupcl
> discard dsusp eof eol eol2 erase erase2 intr kill
> ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
> lnext min quit reprint start status stop susp werase
> ^@ 0 ^@ ^@ ^@ ^@ ^@ ^@ ^@
>
>
> I have set crtscts on 10.2 as requested:
> faxserver# stty -f /dev/cuaU4.init crtscts
> faxserver# stty -f /dev/cuaU4.init
> speed 9600 baud;
> lflags: echoe echoke echoctl
> oflags: tab0
> cflags: cs8 -parenb crtscts
>
> then during transmission I get:
> faxserver# stty -f /dev/cuaU4
> speed 38400 baud;
> lflags: -icanon -isig -iexten -echo
> iflags: -icrnl -ixon -ixany -imaxbel -brkint
> oflags: -opost -onlcr tab0
> cflags: cs8 -parenb clocal crtscts
> eol
> ^@
>
> so crtscts is obviously set. I don=92t know why clocal is set instead of =
=96clocal, though (I _can_ change /dev/cuaU4 to -clocal whilst cuaU4 is in =
use, but that also does not help (tested separately, see my remarks at the =
end)).
> But behavior for faxing is exactly the same with crtscts set:
>
> 03/02 10:50:34 sendfax: interim release 1.1.37-Jun05
> 03/02 10:50:34 sending fax to <xxxxxxxx>
> 03/02 10:50:34 checking f1.g3
> 03/02 10:50:34 checking f2.g3
> 03/02 10:50:34 checking f3.g3
> 03/02 10:50:34 checking f4.g3
> 03/02 10:50:34 checking f5.g3
> 03/02 10:50:34 aU4 tss: set speed to 38400 (113000)
> 03/02 10:50:34 aU4 mdm_send: 'ATV1Q0'
> 03/02 10:50:34 aU4 got:ATV1Q0[0d]
> 03/02 10:50:34 aU4 mdm_command: string 'ATV1Q0'
> 03/02 10:50:34 aU4 got:[0d][0a]OK[0d]
> 03/02 10:50:34 aU4 mdm_command: string 'OK' -> OK
> 03/02 10:50:34 aU4 mdm_send: 'ATI'
> 03/02 10:50:34 aU4 got:[0a]ATI[0d]
> 03/02 10:50:34 aU4 got:[0d][0a]282[0d]
> 03/02 10:50:34 aU4 mdm_gis: string 1: '282'
> 03/02 10:50:34 aU4 got:[0a][0d][0a]OK[0d]
> 03/02 10:50:34 aU4 mdm_identify: string '282'
> 03/02 10:50:34 aU4 ELSA MicroLink 28.8/56K series detected
> 03/02 10:50:35 aU4 mdm_send: 'ATI3'
> 03/02 10:50:35 aU4 got:[0a]ATI3[0d]
> 03/02 10:50:35 aU4 got:[0d][0a]Version 1.87 / 31.07.2000[0d]
> 03/02 10:50:35 aU4 mdm_gis: string 1: 'Version 1.87 / 31.07.2000'
> 03/02 10:50:35 aU4 got:[0a][0d][0a]OK[0d]
> 03/02 10:50:35 aU4 additional info: 'Version 1.87 / 31.07.2000'
> 03/02 10:50:35 aU4 mdm_send: 'AT+FCLASS=3D2.0'
> 03/02 10:50:35 aU4 got:[0a]AT+FCLASS=3D2.0[0d]
> 03/02 10:50:35 aU4 mdm_command: string 'AT+FCLASS=3D2.0'
> 03/02 10:50:35 aU4 got:[0d][0a]OK[0d]
> 03/02 10:50:35 aU4 mdm_command: string 'OK' -> OK
> 03/02 10:50:35 aU4 mdm_send: 'AT+FLI=3D"+49"'
> 03/02 10:50:35 aU4 got:[0a]AT+FLI=3D"+49"[0d]
> 03/02 10:50:35 aU4 mdm_command: string 'AT+FLI=3D"+49"'
> 03/02 10:50:35 aU4 got:[0d][0a]OK[0d]
> 03/02 10:50:35 aU4 mdm_command: string 'OK' -> OK
> 03/02 10:50:35 aU4 mdm_send: 'AT+FCC=3D1,5,0,2,0,0,0,0'
> 03/02 10:50:35 aU4 got:[0a]AT+FCC=3D1,5,0,2,0,0,0,0[0d]
> 03/02 10:50:35 aU4 mdm_command: string 'AT+FCC=3D1,5,0,2,0,0,0,0'
> 03/02 10:50:35 aU4 got:[0d][0a]OK[0d]
> 03/02 10:50:35 aU4 mdm_command: string 'OK' -> OK
> 03/02 10:50:35 aU4 mdm_send: 'AT+FBO=3D0'
> 03/02 10:50:35 aU4 got:[0a]AT+FBO=3D0[0d]
> 03/02 10:50:35 aU4 mdm_command: string 'AT+FBO=3D0'
> 03/02 10:50:35 aU4 got:[0d][0a]OK[0d]
> 03/02 10:50:35 aU4 mdm_command: string 'OK' -> OK
> 03/02 10:50:35 aU4 mdm_send: 'AT+FNR=3D1,1,1,0'
> 03/02 10:50:35 aU4 got:[0a]AT+FNR=3D1,1,1,0[0d]
> 03/02 10:50:35 aU4 mdm_command: string 'AT+FNR=3D1,1,1,0'
> 03/02 10:50:35 aU4 got:[0d][0a]OK[0d]
> 03/02 10:50:35 aU4 mdm_command: string 'OK' -> OK
> 03/02 10:50:35 aU4 mdm_send: 'AT+FLO=3D2'
> 03/02 10:50:35 aU4 got:[0a]AT+FLO=3D2[0d]
> 03/02 10:50:35 aU4 mdm_command: string 'AT+FLO=3D2'
> 03/02 10:50:35 aU4 got:[0d][0a]OK[0d]
> 03/02 10:50:35 aU4 mdm_command: string 'OK' -> OK
> 03/02 10:50:35 aU4 mdm_send: 'AT&H3'
> 03/02 10:50:35 aU4 got:[0a]AT&H3[0d]
> 03/02 10:50:35 aU4 mdm_command: string 'AT&H3'
> 03/02 10:50:35 aU4 got:[0d][0a]ERROR[0d]
> 03/02 10:50:35 aU4 mdm_command: string 'ERROR' -> ERROR
> 03/02 10:50:35 aU4 cannot set 'modem_handshake'; ignored
> 03/02 10:50:35 aU4 fax_send: 'ATD0<xxxxxxxx>'
> 03/02 10:50:35 aU4 fax_wait_for(OK)
> 03/02 10:50:35 aU4 got:[0a]ATD0<xxxxxxxx>[0d]
> 03/02 10:50:35 aU4 fax_wait_for: string 'ATD0<xxxxxxxx>'
> 03/02 10:50:35 aU4 got:[0d][0a]+FCO[0d]
> 03/02 10:50:48 aU4 fax_wait_for: string '+FCO'
> 03/02 10:50:48 aU4 got:[0a][0d][0a]+FIS:1,3,2,2,0,1,0,0[0d]
> 03/02 10:50:49 aU4 fax_wait_for: string '+FIS:1,3,2,2,0,1,0,0'
> 03/02 10:50:49 aU4 receiver cap.: '+FIS:1,3,2,2,0,1,0,0' -> fine ECM
> 03/02 10:50:49 aU4 got:[0a][0d][0a]OK[0d]
> 03/02 10:50:49 aU4 fax_wait_for: string 'OK'** found **
> 03/02 10:50:49 aU4 sendfax: IGNORE DCD (carrier) status
> 03/02 10:50:49 aU4 fax_send_page("f1.g3") started...
> 03/02 10:50:49 aU4 tio_set_flow_control( HARD )
> 03/02 10:50:49 aU4 fax_send: 'AT+FDT'
> 03/02 10:50:49 aU4 fax_wait_for(CONNECT)
> 03/02 10:50:49 aU4 got:[0a]AT+FDT[0d]
> 03/02 10:50:49 aU4 fax_wait_for: string 'AT+FDT'
> 03/02 10:50:49 aU4 got:[0d][0a]+FCS:1,3,0,2,0,0,0,0[0d]
> 03/02 10:50:55 aU4 fax_wait_for: string '+FCS:1,3,0,2,0,0,0,0'
> 03/02 10:50:55 aU4 transmission par.: '+FCS:1,3,0,2,0,0,0,0'
> 03/02 10:50:55 aU4 got:[0a][0d][0a]CONNECT[0d]
> 03/02 10:50:55 aU4 fax_wait_for: string 'CONNECT'** found **
> 03/02 10:50:55 aU4 tio_set_flow_control( HARD XON_OUT )
> 03/02 10:50:55 aU4 sending f1.g3...
> 03/02 10:50:55 aU4 read 64, write 64
> 03/02 10:50:55 aU4 read 64, write 64
> 03/02 10:50:55 aU4 read 64, write 64
> [..]
> 03/02 10:51:26 aU4 read 64, write 64
> 03/02 10:51:26 aU4 read 64, write 64
> 03/02 10:51:26 aU4 read 52, write 52
> 03/02 10:51:26 aU4 page complete, 40900 bytes sent
> 03/02 10:51:26 aU4 sending DLE ','
> 03/02 10:51:26 aU4 got:[0a][0d][0a]OK[0d]
> 03/02 10:51:33 aU4 got response: 'OK'
> 03/02 10:51:33 aU4 fax_send_page("f2.g3") started...
> 03/02 10:51:33 aU4 tio_set_flow_control( HARD )
> 03/02 10:51:33 aU4 fax_send: 'AT+FDT'
> 03/02 10:51:33 aU4 fax_wait_for(CONNECT)
> 03/02 10:51:33 aU4 got:[0a]
> 03/02 10:53:34 aU4 Warning: got alarm signal!
> 03/02 10:53:34 aU4 mdm_read_byte: read returned -1: Interrupted system c=
all
> 03/02 10:53:34 aU4 mdm_get_line: cannot read byte, return: Interrupted s=
ystem call
> 03/02 10:53:34 aU4 AT+FDT -> some error (-6), abort fax send!
>
> I could change the AT&H3 to devolo-specific AT+IFC=3D2,2 (which is RTS,CT=
S) - had already tested that just to make sure, but that is modem default s=
etting anyway so makes no difference. I reverted to default sendfax.config =
afterwards (identical to the 7.4 settings).
>
> I noticed that for the first page I have HARD XON_OUT and for the second =
page only HARD. This is however exactly the same behavior on 7.4.
> stty -f /dev/cuaU4 reflects this (-ixon is set when trying to send the se=
cond page, and even if -clocal was set before (during transmission of the f=
irst page), this is then set back to clocal when the second page starts).
>
> On both 7.4 and 10.2 file /etc/rc.d/serial is unchanged, so no special se=
ttings are applied.
> No special settings for devd.conf either. And 10.2 (apart from added port=
s) is just the plain RELEASE installation.
> Originally this was a binary installation only (apart from added ports). =
I have installed usr/src (10.2-RELEASE p12) and compiled with ucom, uftdi i=
n kernel (because it was compiled in in 7.4 FreeBSD version) to rule out an=
y possible side effects there. Nothing changed, but at least I=92m now prep=
ared to recompile with any patches thrown at me ;-)
>
> Otherwise I=92m a bit out of ideas right now.
>
> Many thanks and best regards,
> Holger
Setting crtscts on its own did not help. I also tried an LogiLink AU0033 US=
B-Adapter which resulted in a comparable behaviour (sending first page only=
). So it is not related to uftdi.
It turned out to be an issue with the modems as well (even though their def=
ault setting _is_ hardware handshake, there seems to be a problem with xon/=
xoff) - maybe together with changes to tty-handling between 7.4 and 10.2.
setting crtscts -ixon -ixoff for .init
and locking these settings (=3D> crtscts xon xoff for .lock) (done in rc.d/=
serial) however did help.
Modems in question are Devolo 56k-I (ISDN). I have not checked other modems=
(eg ELSA ISDN TL V34) yet due to time constraints.
Maybe this information is helpful if someone else is encountering a similar=
problem.
Many thanks and best regards,
Holger
__________________________________________________________
Holger Kipp
Diplom-Mathematiker
Senior Consultant
Tel. : +49 30 436 58 114
Fax. : +49 30 436 58 214
Mobil: +49 178 36 58 114
Email: holger.kipp@alogis.com
alogis AG
Alt-Moabit 90b
D-10559 Berlin
http://www.alogis.com
__________________________________________________________
alogis AG
Sitz/Registergericht: Berlin/AG Charlottenburg, HRB 71484
Vorstand: Arne Friedrichs, Joern Samuelson
Aufsichtsratsvorsitzender: Reinhard Mielke
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?7D2BDA5F-889D-4234-8F64-6D00956E05E3>
