summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJasonJiaJie <[email protected]>2017-11-07 10:45:02 +0800
committerJasonJiaJie <[email protected]>2017-11-07 10:45:02 +0800
commitf82191db8b9115379da05be91f7ac14e1d8bd4af (patch)
treee83eb875f69189c4cc74db69f3f691de7c4d7e5e
parent6b1911e4f4cbde2df51e1c7ced10f0f080dc8e84 (diff)
[DeviceDriver][serial]Fix data bits error issue when using tcsetattr to set uart parameters.
data bits should get from CSIZE.
-rw-r--r--components/drivers/serial/serial.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/components/drivers/serial/serial.c b/components/drivers/serial/serial.c
index 52dd65e17b..7ebec7a7b3 100644
--- a/components/drivers/serial/serial.c
+++ b/components/drivers/serial/serial.c
@@ -32,6 +32,7 @@
* 2015-11-10 bernard fix the poll rx issue when there is no data.
* 2016-05-10 armink add fifo mode to DMA rx when serial->config.bufsz != 0.
* 2017-01-19 aubr.cool prevent change serial rx bufsz when serial is opened.
+ * 2017-11-07 JasonJia fix data bits error issue when using tcsetattr.
*/
#include <rthw.h>
@@ -932,13 +933,24 @@ static rt_err_t rt_serial_control(struct rt_device *dev,
baudrate = _get_baudrate(cfgetospeed(tio));
config.baud_rate = baudrate;
- if (tio->c_cflag & CS6) config.data_bits = DATA_BITS_6;
- else if (tio->c_cflag & CS7) config.data_bits = DATA_BITS_7;
- else if (tio->c_cflag & CS8) config.data_bits = DATA_BITS_8;
- else config.data_bits = DATA_BITS_5;
+ switch (tio->c_cflag & CSIZE)
+ {
+ case CS5:
+ config.data_bits = DATA_BITS_5;
+ break;
+ case CS6:
+ config.data_bits = DATA_BITS_6;
+ break;
+ case CS7:
+ config.data_bits = DATA_BITS_7;
+ break;
+ default:
+ config.data_bits = DATA_BITS_8;
+ break;
+ }
- if (tio->c_cflag & CSTOPB) config.data_bits = STOP_BITS_2;
- else config.data_bits = STOP_BITS_1;
+ if (tio->c_cflag & CSTOPB) config.stop_bits = STOP_BITS_2;
+ else config.stop_bits = STOP_BITS_1;
if (tio->c_cflag & PARENB)
{