diff options
author | patacongo <patacongo@7fd9a85b-ad96-42d3-883c-3090e2eb8679> | 2012-07-24 17:16:25 +0000 |
---|---|---|
committer | patacongo <patacongo@7fd9a85b-ad96-42d3-883c-3090e2eb8679> | 2012-07-24 17:16:25 +0000 |
commit | ac6f7a722bd9bdb35e738b7fbbd1cd32d68b2373 (patch) | |
tree | 6a6b125c6652cae62e66ca6c93c2c3a4e5b7ed87 | |
parent | 4b1fcb6da83f49ca9a3b9faff31d3a1d43bf5ca0 (diff) | |
download | px4-firmware-ac6f7a722bd9bdb35e738b7fbbd1cd32d68b2373.tar.gz px4-firmware-ac6f7a722bd9bdb35e738b7fbbd1cd32d68b2373.tar.bz2 px4-firmware-ac6f7a722bd9bdb35e738b7fbbd1cd32d68b2373.zip |
Ooops.. c_speed is now read-only
git-svn-id: https://nuttx.svn.sourceforge.net/svnroot/nuttx/trunk@4974 7fd9a85b-ad96-42d3-883c-3090e2eb8679
-rw-r--r-- | nuttx/arch/arm/src/lpc43xx/lpc43_serial.c | 42 | ||||
-rw-r--r-- | nuttx/arch/arm/src/stm32/stm32_serial.c | 7 | ||||
-rw-r--r-- | nuttx/arch/mips/src/pic32mx/pic32mx-serial.c | 43 |
3 files changed, 89 insertions, 3 deletions
diff --git a/nuttx/arch/arm/src/lpc43xx/lpc43_serial.c b/nuttx/arch/arm/src/lpc43xx/lpc43_serial.c index 9d678b125..c125660e1 100644 --- a/nuttx/arch/arm/src/lpc43xx/lpc43_serial.c +++ b/nuttx/arch/arm/src/lpc43xx/lpc43_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> @@ -1091,6 +1095,44 @@ static int up_ioctl(struct file *filep, int cmd, unsigned long arg) } break; +#ifdef CONFIG_SERIAL_TERMIOS + 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; + lpc43_setbaud(priv->uartbase, priv->basefreq, priv->baud); + } + break; +#endif + case TIOCSBRK: /* BSD compatibility: Turn break on, unconditionally */ { irqstate_t flags = irqsave(); diff --git a/nuttx/arch/arm/src/stm32/stm32_serial.c b/nuttx/arch/arm/src/stm32/stm32_serial.c index 0546bb7ff..5572ee662 100644 --- a/nuttx/arch/arm/src/stm32/stm32_serial.c +++ b/nuttx/arch/arm/src/stm32/stm32_serial.c @@ -1248,9 +1248,12 @@ static int up_ioctl(struct file *filep, int cmd, unsigned long arg) break; } - /* TODO: Other termios fields are not yet returned. */ + /* 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. + */ - termiosp->c_speed = priv->baud; + cfsetispeed(termiosp, priv->baud); } break; 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; |