Hello Christian, This looks fine. Are you the original author of the patch?
Miguel On Tue, Feb 24, 2015 at 3:45 PM, Christian Hofstaedtler < ch---mono-de...@zeha.at> wrote: > 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 >
_______________________________________________ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list