This patch (against mono-2.10.8.1 from Debian) allows setting custom baud rates, and very likely would support a baudrate of 1000000.
I release this patch under the MIT license. --- serial.c.orig 2013-01-30 12:06:52.379691461 +0100 +++ serial.c.orig 2013-01-30 13:05:50.383390154 +0100 @@ -17,6 +17,11 @@ #endif #include <sys/ioctl.h> +/* This is for ASYNC_*, serial_struct on linux */ +#if defined(__linux__) +#include <linux/serial.h> +#endif + #include <glib.h> /* This is for FIONREAD on solaris */ @@ -151,6 +156,7 @@ set_attributes (int fd, int baud_rate, MonoParity parity, int dataBits, MonoStopBits stopBits, MonoHandshake handshake) { struct termios newtio; + gboolean custom_baud_rate = FALSE; if (tcgetattr (fd, &newtio) == -1) return FALSE; @@ -227,8 +233,10 @@ break; case 50: case 0: - default: baud_rate = B9600; + break; + default: + custom_baud_rate = TRUE; break; } @@ -319,16 +327,54 @@ newtio.c_iflag |= IXOFF | IXON; break; } - - if (cfsetospeed (&newtio, baud_rate) < 0 || cfsetispeed (&newtio, baud_rate) < 0 || - tcsetattr (fd, TCSANOW, &newtio) < 0) + + if (custom_baud_rate == FALSE) { - return FALSE; + if (cfsetospeed (&newtio, baud_rate) < 0 || cfsetispeed (&newtio, baud_rate) < 0) + { + return FALSE; + } } else { - return TRUE; + /* On Linux, to set a custom baud rate, we must set the "standard" baud_rate + * to 38400. */ + if (cfsetospeed (&newtio, B38400) < 0 || cfsetispeed (&newtio, B38400) < 0) + { + return FALSE; + } + } + + if (tcsetattr (fd, TCSANOW, &newtio) < 0) + { + return FALSE; + } + + if (custom_baud_rate == TRUE) + { +#if defined(__linux__) + struct serial_struct ser; + + if (ioctl (fd, TIOCGSERIAL, &ser) < 0) + { + return FALSE; + } + + ser.custom_divisor = ser.baud_base / baud_rate; + ser.flags &= ~ASYNC_SPD_MASK; + ser.flags |= ASYNC_SPD_CUST; + + if (ioctl (fd, TIOCSSERIAL, &ser) < 0) + { + return FALSE; + } +#else + /* Don't know how to set custom baud rate on this platform. */ + return FALSE; +#endif } + + return TRUE; } _______________________________________________ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list