diff options
Diffstat (limited to 'nuttx/arch/mips')
-rw-r--r-- | nuttx/arch/mips/src/pic32mx/pic32mx-serial.c | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/nuttx/arch/mips/src/pic32mx/pic32mx-serial.c b/nuttx/arch/mips/src/pic32mx/pic32mx-serial.c index 6cb566bb6..5fc1512b1 100644 --- a/nuttx/arch/mips/src/pic32mx/pic32mx-serial.c +++ b/nuttx/arch/mips/src/pic32mx/pic32mx-serial.c @@ -48,6 +48,10 @@ #include <errno.h> #include <debug.h> +#ifdef CONFIG_SERIAL_TERMIOS +# include <termios.h> +#endif + #include <nuttx/irq.h> #include <nuttx/arch.h> #include <nuttx/serial/serial.h> @@ -573,7 +577,7 @@ static int up_interrupt(int irq, void *context) static int up_ioctl(struct file *filep, int cmd, unsigned long arg) { -#if 0 /* Reserved for future growth */ +#ifdef CONFIG_SERIAL_TERMIOS struct inode *inode; struct uart_dev_s *dev; struct up_dev_s *priv; @@ -591,6 +595,43 @@ static int up_ioctl(struct file *filep, int cmd, unsigned long arg) case xxx: /* Add commands here */ break; + case TCGETS: + { + struct termios *termiosp = (struct termios*)arg; + + if (!termiosp) + { + ret = -EINVAL; + break; + } + + /* TODO: Other termios fields are not yet returned. + * Note that only cfsetospeed is not necessary because we have + * knowledge that only one speed is supported. + */ + + cfsetispeed(termiosp, priv->baud); + } + break; + + case TCSETS: + { + struct termios *termiosp = (struct termios*)arg; + + if (!termiosp) + { + ret = -EINVAL; + break; + } + + /* TODO: Handle other termios settings. */ + + priv->baud = termiosp->c_speed; + pic32mx_uartconfigure(priv->uartbase, priv->baud, priv->parity, + priv->bits, priv->stopbits2); + } + break; + default: ret = -ENOTTY; break; |