Mail Archives: cygwin/2007/01/09/02:21:25
Hi,
I am running Cygwin on a PC that is running Windows XP. My Cygwin
version is "CYGWIN_NT-5.1" and it was downloaded and installed late last
month (Dec 2006). I have a std serial port capable (according to the device
manager) of speeds to 460800. I also have a USB connected serial port
capable of 921600 baud. I would like to run at these speeds.
I have a serial I/O routine that I have mostly written, but it is partly
downloaded from a program that I found on the web.
In the routine where the baud rates are set, we have the following.
Note the
B230400 entry that I have added. (Similarly the commented out entries for
460800 and 921600 baud rates)
case 57600 : local_rate = B57600; break;
case 115200 : local_rate = B115200; break;
/* This 230400 entry is new */
case 230400 : local_rate = B230400; break;
/* leave two here for when we have support */
// case 460800 : local_rate = B460800; break;
// case 921600 : local_rate = B921600; break;
#endif
}
if ((cfsetispeed(&t,local_rate) != -1) &&
(cfsetospeed(&t,local_rate) != -1))
{
if (tcsetattr(rtnval,TCSANOW,&t) == -1)
rtnval = -1;
}
Below is a section of termios.h
------ Start Partial List of /usr/include/sys/termios.h ---------
#define B50 0x00001
#define B75 0x00002
#define B110 0x00003
#define B134 0x00004
#define B150 0x00005
#define B200 0x00006
#define B300 0x00007
#define B600 0x00008
#define B1200 0x00009
#define B1800 0x0000a
#define B2400 0x0000b
#define B4800 0x0000c
#define B9600 0x0000d
#define B19200 0x0000e
#define B38400 0x0000f
#define CSIZE 0x00030
#define CS5 0x00000
#define CS6 0x00010
#define CS7 0x00020
#define CS8 0x00030
#define CSTOPB 0x00040
#define CREAD 0x00080
#define PARENB 0x00100
#define PARODD 0x00200
#define HUPCL 0x00400
#define CLOCAL 0x00800
#define CBAUDEX 0x0100f
#define B57600 0x01001
#define B115200 0x01002
#define B128000 0x01003
#define B230400 0x01004
#define B256000 0x01005
------ End Partial List of /usr/include/sys/termios.h ---------
As expected from termios.h, changing to B230400 works fine.
Adding entries into termios.h for higher
baudrates using the convention that B460800 was 0x01006,
B500000 was 0x01007, and B921600 was 0x01008
caused errors.
#define B230400 0x01004
#define B256000 0x01005
/* 3 new entries - as an experiement to see if it works */
#define B460800 0x01006
#define B500000 0x01007
#define B921600 0x01008
The calls to cfsetispeed() and cfsetospeed() failed. Not unsurprising,
as one could assume that they had been using the original termios.h when
they were compiled.
I thought I'd peruse first this mailing list looking for 460800, B460800,
921600, B921600, max(imum) baud rate, highest baud rate, etc and
got nowhere.
When perusing the web, I did find a few cryptic references to adding support
for such higher speeds in TeraTerm Pro (version 4.24) and in a file called
"defs.c", and to various linux ports for other architectures, but
nothing that
seemed relevant to Cygwin.
I also found several references to stty not being able to handle baud
rates above 115200. In my version of Cygwin this is NOT true, setting
the baud rate to 230400 does not give stty any grief. Not only
does
stty -F /dev/com[1|3]
report the correct baud rate, but
stty -F /dev/com[1|3] 230400
works as expected. (NB com1 is my std serial port, and com3 is my USB
connected port).
Various manual entries for linux, Unix, etc list upper baud rate limits of
57600, 115200 baud, and 460800 baud. (as taken from various sys/termios.h
files). Man entries for functions such as cfsetispeed() eg just refer
one to
termios.h for detailed info.
Now for the questions:
1) Is there a build available for Cygwin (on a Windows platform) that
has support for higher baud rates? If so, does anyone know where I
could find it?
2) Assuming there is no such build available, are there plans to add
support for higher baud rates? If so, does anyone know when?
2) Would it be difficult to download the appropriate source files, modify
them, and make my own Cygwin build? (The idea of doing this terrifies
me by the way). If it is possible, could someone give me some pointers
on how to do this?
regards,
David le Comte
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/
- Raw text -