The Dynamic C 10.60 compiler under linux/wine

As soon as my 5700 kit arrived, I opened it up. The development board has a micro USB cable right on the board and it shipped with an appropriate USB cable. There is actually a USB to serial chip on the development board, and this is what the USB subsystem sees.

So, I snap the RCM5700 module onto the development board, connect the USB cable and plug it in. Linux sees the USB device and recognizes a USB to serial gizmo made by FTDI with vendor id 0403 and product id 6001. It assigns ttyUSB0 to this, and this all looks quite encouraging.
(But the joy pretty much ends right here).

To try to help Wine find this USB pseudo-device, I create a link as follows:

cd /home/sam/.wine/dosdevices
ln -s /dev/ttyUSB0 com3

Note that /dev/ttyUSB0 does not actually exist until the USB device gets plugged in.

My RCM5700 development kit, shipped with a Dynamic C 10.54 disk. A little sniffing around the rabbit website clued me in to the fact that as of 12/15/2009 this was somewhat stale and the 10.60 version of the compiler was available for download. I submitted my request and was emailed a download link. This allowed me to download DC1060.zip, which was a 101 Mb file, containing DynamicC_10.60_WebFull.exe, which itself was only slightly bigger. I install this under wine via:

wine "C:\windows\DynamicC_10.60_WebFull.exe"
This does the trick, launching the Dynamic C 10.60 Setup Wizard. I go along agreeing with a license and such. It warns me that this compiler supports 4000 and 5000 targets (which I knew); they must have gotten tired of tech support calls from people trying to use this compiler with 3000 family products. The only alarming thing is a warning:
Serial/USB ports not found.
To launch Dynamic C, I now use the following command (which I wrap inside of a tiny shell script, that I call "rabbit"):
wine "c:\dcrabbit_10.60\dcrab_10.60.exe"
This fires up Dynamic C quite nicely, and I see a status line on the bottom of the screen shows COM1:115200.

I change the COM port setting via the Options -> Project Options pulldown menu to COM3 (this setting is persistent). I then use the Compile -> Reset Target pulldown to test communications. I get an error popup, which says:

While Sending Cold Loader
Could not open serial port.

A little poking around shows that /dev/ttyUSB0 is owned by root, and only accessible to users in the "dialout" group. I edit /etc/group and add myself to this group and now things actually take off for a while (but finally end with a comm error).

I can turn on wine debug via: WINEDEBUG="+comm,"serial" wine "c:\dcrabbit_10.60\dcrab_10.60.exe" This shows the following:

trace:comm:dump_dcb bytesize=8 baudrate=57600 fParity=0 Parity=0 stopbits=2
trace:comm:dump_dcb ~IXON ~IXOFF
trace:comm:dump_dcb fOutxCtsFlow=0 fRtsControl=0
trace:comm:dump_dcb fOutxDsrFlow=0 fDtrControl=0
trace:comm:dump_dcb ~CRTSCTS
trace:comm:io_control 0xb0 IOCTL_SERIAL_SET_BAUD_RATE 0x33e410 4 (nil) 0 0x33e3a0
trace:comm:io_control 0xb0 IOCTL_SERIAL_SET_LINE_CONTROL 0x33e415 3 (nil) 0 0x33e3a0
trace:comm:io_control 0xb0 IOCTL_SERIAL_SET_HANDFLOW 0x33e3f4 16 (nil) 0 0x33e3a0
trace:comm:io_control 0xb0 IOCTL_SERIAL_SET_CHARS 0x33e406 6 (nil) 0 0x33e3a0
trace:comm:SetCommMask handle 0xb0, mask 81
trace:comm:io_control 0xb0 IOCTL_SERIAL_SET_WAIT_MASK 0x33e43c 4 (nil) 0 0x33e3d0
trace:comm:SetCommTimeouts (0xb0, 0x33e468)
trace:comm:io_control 0xb0 IOCTL_SERIAL_SET_TIMEOUTS 0x33e400 20 (nil) 0 0x33e3b0
trace:comm:io_control 0xb0 IOCTL_SERIAL_SET_QUEUE_SIZE 0x33e418 8 (nil) 0 0x33e3cc
fixme:comm:set_queue_size insize 65584 outsize 65584 unimplemented stub
The "fixme" with a note about an unimplemented stub is curious.

This is how things are as of 5-7-2010. The above was attempted using wine version 1.1.38 under Fedora Core 12 with a 2.6.32 kernel.

Here is a link to an entry in the wine wiki that seems to hint that USB support is only possible in the latest development version of Wine (as of early 2010).

Here is a link to Wine bug 8783 entitled "USB serial ports do not work". Someone else working with Dynamic C has indicated his problems in this lengthy bug discussion. Also note that this bug has been fixed and then gets broken again later (regression bug).

Monkey with the Registry

Some suggestions have been made about dorking with the wine registry, one fellow thought the following addition might be helpful. I have not yet tried any of this.
[Hardware\\Devicemap\\Serialcomm] 1231984861
@=""
"Serial0"="COM1"
"Serial1"="COM2"
"Serial2"="COM3"
"Serial3"="COM4"
"Serial4"="COM5"
"Serial5"="COM6"
"Serial6"="COM7"
"Serial7"="COM8"
"Serial8"="COM9"

Feedback? Questions? Drop me a line!

Tom's Computer Info / tom@mmto.org