This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Support for Baud Rates above 250000 baud?


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/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]