Uwe Bonnes wrote:>
> Probably the programm requests some notification that isn't
> delivered. Either because Wine doesn't provide that notification or
because
> the card or the driver for that card doesn't provide the notification.
Did
> you try on a another serial port, like the chipset built in port?
>
> --
> Uwe Bonnes bon at elektron.ikp.physik.tu-darmstadt.de
>
> Institut fuer Kernphysik Schlossgartenstrasse 9 64289 Darmstadt
> --------- Tel. 06151 162516 -------- Fax. 06151 164321 ----------
Let me state my problem clearly.
I am trying to get the Garmin Mapsource program to communicate with my GPS over
a serial port. Mapsource autodetects the GPS but will not transfer data to or
from it.
For debugging purposes, I have connected a null modem cable from my Motherboard
serial port (Intel 865G chipset) to a USB/serial adapter. I can communicate
perfectly between two minicom terminal programs, but when trying to communicate
between minicom and teraterm under wine I have trouble. Characters typed in
the teraterm window appear in the minicom window immediately, but characters
typed in the minicom either take 10 seconds or so to appear in the teraterm
window, or do not appear at all. The symptoms are identical regardless of
hardware handshaking settings or whether the teraterm/wine program uses the MB
or USB serial port.
Starting teraterm, typing some characters into minicom, and quitting teraterm
produces the following trace:
Code:
fixme:font:WineEngCreateFontInstance Untranslated charset 255
fixme:imm:ImmReleaseContext (0x700a2, 0x12ca18): stub
trace:comm:io_control 0x74 IOCTL_SERIAL_GET_COMMSTATUS (nil) 0 0x32ec84 20
0x32ec2c
trace:comm:io_control 0x74 IOCTL_SERIAL_SET_QUEUE_SIZE 0x32ec98 8 (nil) 0
0x32ec4c
fixme:comm:set_queue_size insize 8192 outsize 2048 unimplemented stub
trace:comm:io_control 0x74 IOCTL_SERIAL_PURGE 0x32ecb4 4 (nil) 0 0x32ec60
trace:comm:SetCommTimeouts (0x74, 0x32ecc4)
trace:comm:io_control 0x74 IOCTL_SERIAL_SET_TIMEOUTS 0x32ec8c 20 (nil) 0
0x32ec40
trace:comm:dump_dcb bytesize=8 baudrate=9600 fParity=0 Parity=0 stopbits=1
trace:comm:dump_dcb ~IXON ~IXOFF
trace:comm:dump_dcb fOutxCtsFlow=0 fRtsControl=1
trace:comm:dump_dcb fOutxDsrFlow=0 fDtrControl=1
trace:comm:dump_dcb ~CRTSCTS
trace:comm:io_control 0x74 IOCTL_SERIAL_SET_BAUD_RATE 0x32ec98 4 (nil) 0
0x32ec40
trace:comm:io_control 0x74 IOCTL_SERIAL_SET_LINE_CONTROL 0x32ec9d 3 (nil) 0
0x32ec40
trace:comm:io_control 0x74 IOCTL_SERIAL_SET_HANDFLOW 0x32ec80 16 (nil) 0
0x32ec40
trace:comm:io_control 0x74 IOCTL_SERIAL_SET_CHARS 0x32ec92 6 (nil) 0 0x32ec40
trace:comm:SetCommMask handle 0x74, mask 0
trace:comm:io_control 0x74 IOCTL_SERIAL_SET_WAIT_MASK 0x32ecb4 4 (nil) 0
0x32ec60
trace:comm:SetCommMask handle 0x74, mask 1
trace:comm:io_control 0x74 IOCTL_SERIAL_SET_WAIT_MASK 0x32ecb4 4 (nil) 0
0x32ec60
trace:comm:io_control 0x74 IOCTL_SERIAL_WAIT_ON_MASK (nil) 0 0x7e0569e4 4
0x7e056974
trace:comm:get_modem_status 4126 -> MS_DSR_ON MS_CTS_ON
trace:comm:check_events mask 0x00000001
trace:comm:check_events old->rx 0x0000132d vs. new->rx
0x0000132d
trace:comm:check_events old->tx 0x000001ec vs. new->tx
0x000001ec
trace:comm:check_events old->frame 0x00000012 vs. new->frame
0x00000012
trace:comm:check_events old->overrun 0x00000000 vs. new->overrun
0x00000000
trace:comm:check_events old->parity 0x00000000 vs. new->parity
0x00000000
trace:comm:check_events old->brk 0x00000000 vs. new->brk
0x00000000
trace:comm:check_events old->buf_overrun 0x00000000 vs. new->buf_overrun
0x00000000
trace:comm:wait_for_event device=0x74 fd=0x00000013 mask=0x00000001
buffer=0x7e0569e4 event=0x88 irq_info=0x12e904
trace:comm:get_modem_status 4126 -> MS_DSR_ON MS_CTS_ON
trace:comm:check_events mask 0x00000001
trace:comm:check_events old->rx 0x0000132d vs. new->rx
0x0000132d
trace:comm:check_events old->tx 0x000001ec vs. new->tx
0x000001ec
trace:comm:check_events old->frame 0x00000012 vs. new->frame
0x00000012
trace:comm:check_events old->overrun 0x00000000 vs. new->overrun
0x00000000
trace:comm:check_events old->parity 0x00000000 vs. new->parity
0x00000000
trace:comm:check_events old->brk 0x00000000 vs. new->brk
0x00000000
trace:comm:check_events old->buf_overrun 0x00000000 vs. new->buf_overrun
0x00000000
/*repeat above section many times*/
trace:comm:get_modem_status 4126 -> MS_DSR_ON MS_CTS_ON
trace:comm:check_events mask 0x00000001
trace:comm:check_events old->rx 0x0000132d vs. new->rx
0x0000132e
trace:comm:check_events old->tx 0x000001ec vs. new->tx
0x000001ec
trace:comm:check_events old->frame 0x00000012 vs. new->frame
0x00000012
trace:comm:check_events old->overrun 0x00000000 vs. new->overrun
0x00000000
trace:comm:check_events old->parity 0x00000000 vs. new->parity
0x00000000
trace:comm:check_events old->brk 0x00000000 vs. new->brk
0x00000000
trace:comm:check_events old->buf_overrun 0x00000000 vs. new->buf_overrun
0x00000000
trace:comm:io_control 0x74 IOCTL_SERIAL_GET_COMMSTATUS (nil) 0 0x32fba8 20
0x32fb50
trace:comm:io_control 0x74 IOCTL_SERIAL_GET_TIMEOUTS (nil) 0 0x32fac0 20
0x32fb3c
/*repeat above section many times*/
trace:comm:get_modem_status 4126 -> MS_DSR_ON MS_CTS_ON
trace:comm:check_events mask 0x00000001
trace:comm:check_events old->rx 0x00001345 vs. new->rx
0x00001345
trace:comm:check_events old->tx 0x000001ec vs. new->tx
0x000001ec
trace:comm:check_events old->frame 0x00000012 vs. new->frame
0x00000012
trace:comm:check_events old->overrun 0x00000000 vs. new->overrun
0x00000000
trace:comm:check_events old->parity 0x00000000 vs. new->parity
0x00000000
trace:comm:check_events old->brk 0x00000000 vs. new->brk
0x00000000
trace:comm:check_events old->buf_overrun 0x00000000 vs. new->buf_overrun
0x00000000
trace:comm:wait_for_event device=0x74 fd=0x00000013 mask=0x00000001
buffer=0x7e0569e4 event=0x88 irq_info=0x12fc7c
trace:comm:get_modem_status 4126 -> MS_DSR_ON MS_CTS_ON
trace:comm:check_events mask 0x00000001
trace:comm:check_events old->rx 0x00001345 vs. new->rx
0x00001345
trace:comm:check_events old->tx 0x000001ec vs. new->tx
0x000001ec
trace:comm:check_events old->frame 0x00000012 vs. new->frame
0x00000012
trace:comm:check_events old->overrun 0x00000000 vs. new->overrun
0x00000000
trace:comm:check_events old->parity 0x00000000 vs. new->parity
0x00000000
trace:comm:check_events old->brk 0x00000000 vs. new->brk
0x00000000
trace:comm:check_events old->buf_overrun 0x00000000 vs. new->buf_overrun
0x00000000
trace:comm:get_modem_status 4126 -> MS_DSR_ON MS_CTS_ON
trace:comm:check_events mask 0x00000001
/*repeat above section many times*/
trace:comm:io_control 0x74 IOCTL_SERIAL_PURGE 0x32e360 4 (nil) 0 0x32e30c
trace:comm:io_control 0x74 IOCTL_SERIAL_CLR_DTR (nil) 0 (nil) 0 0x32e30c
trace:comm:SetCommMask handle 0x74, mask 0
trace:comm:io_control 0x74 IOCTL_SERIAL_SET_WAIT_MASK 0x32e360 4 (nil) 0
0x32e30c
fixme:htmlhelp:HtmlHelpW HH case HH_CLOSE_ALL not handled.
trace:comm:get_irq_info TIOCGICOUNT err Bad file descriptor
warn:comm:get_modem_status ioctl failed
trace:comm:wait_for_event get_modem_status failed
trace:comm:check_events mask 0x00000001
trace:comm:check_events old->rx 0x00001345 vs. new->rx
0x00000000
trace:comm:check_events old->tx 0x000001ec vs. new->tx
0x00000000
trace:comm:check_events old->frame 0x00000012 vs. new->frame
0x00000000
trace:comm:check_events old->overrun 0x00000000 vs. new->overrun
0x00000000
trace:comm:check_events old->parity 0x00000000 vs. new->parity
0x00000000
trace:comm:check_events old->brk 0x00000000 vs. new->brk
0x00000000
trace:comm:check_events old->buf_overrun 0x00000000 vs. new->buf_overrun
0x00000000
warn:comm:check_events TIOCINQ returned error
trace:comm:get_irq_info TIOCGICOUNT err Bad file descriptor
warn:comm:get_modem_status ioctl failed
trace:comm:wait_for_event get_modem_status failed
trace:comm:check_events mask 0x00000001
trace:comm:check_events old->rx 0x00001345 vs. new->rx
0x00000000
trace:comm:check_events old->tx 0x000001ec vs. new->tx
0x00000000
trace:comm:check_events old->frame 0x00000012 vs. new->frame
0x00000000
trace:comm:check_events old->overrun 0x00000000 vs. new->overrun
0x00000000
trace:comm:check_events old->parity 0x00000000 vs. new->parity
0x00000000
trace:comm:check_events old->brk 0x00000000 vs. new->brk
0x00000000
trace:comm:check_events old->buf_overrun 0x00000000 vs. new->buf_overrun
0x00000000
warn:comm:check_events TIOCINQ returned error
/*end*/
By adding trace statements and recompiliing, I determined that the ReadFile
function is called and it always returns false, setting a STATUS_PENDING error.