[Haskell-cafe] Serial Communications in Haskell

Ronald Guida ronguida at mindspring.com
Sat Sep 8 03:27:50 EDT 2007


On 8/28/07, Ronald Guida wrote:
 > I'm on a Windows box and I'm looking for a way to talk to a serial
 > port (for example, RS-232) from Haskell.  I couldn't find a library to
 > do this, so I am wondering how to create one.

I figured out FFI and marshaling, and I got my serial port to work in
Haskell.  See http://ronguida.home.mindspring.com/ for a simple
demonstration.  To test this program, I connected my COM1 and COM2
ports with a null-modem cable and I used Hyperterminal to talk to
COM2.

The demo only does a few things: open a serial port, configure it,
write to it, and read from it.

I have some questions regarding this demonstration:

1. In the DCB and COMMTIMEOUTS datatypes and their marshaling code,
   is it better to convert Win32 datatypes to Haskell equivalents
   (e.g. DWORD to Int), like I did with DCB, or is it better to leave
   things in machine types like I did with COMMTIMEOUTS (e.g. DWORD to
   Word32) ?

2. Can anyone tell me whether I am making proper use of
   unsafeInterleaveIO in my implementation of getContentsSerialPort?

I am interested in creating a library for serial ports under Win32,
and I'm wondering, how should I proceed?

-- Ron



More information about the Haskell-Cafe mailing list