diff options
| author | Bernard Xiong <[email protected]> | 2017-01-19 22:14:29 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2017-01-19 22:14:29 +0800 |
| commit | ad02d293f66ebe683047db4915b82ed16f9edf7d (patch) | |
| tree | b0a75e67196aa50acab8958a20308ecc8e4516b6 /components | |
| parent | ea8a622aaf2eed7d815194c0e99ea7bef391fe7c (diff) | |
| parent | 4008a0a5fb099670dc0b13f3b90ec0d72b78c22a (diff) | |
Merge pull request #694 from AubrCool/fix-serial
[DeviceDrivers] Fix serial
Diffstat (limited to 'components')
| -rw-r--r-- | components/drivers/serial/serial.c | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/components/drivers/serial/serial.c b/components/drivers/serial/serial.c index a7f1bcfc08..c55406bcd6 100644 --- a/components/drivers/serial/serial.c +++ b/components/drivers/serial/serial.c @@ -31,6 +31,7 @@ * in open function. * 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. */ #include <rthw.h> @@ -603,17 +604,22 @@ static rt_err_t rt_serial_control(struct rt_device *dev, break; case RT_DEVICE_CTRL_CONFIG: - if (args) - { - /* set serial configure */ - serial->config = *(struct serial_configure *)args; - - if (dev->ref_count) - { - /* serial device has been opened, to configure it */ - serial->ops->configure(serial, (struct serial_configure *)args); - } - } + if (args) + { + struct serial_configure *pconfig = (struct serial_configure *) args; + if(pconfig->bufsz != serial->config.bufsz && serial->parent.ref_count) + { + /*can not change buffer size*/ + return RT_EBUSY; + } + /* set serial configure */ + serial->config = *pconfig; + if(serial->parent.ref_count) + { + /* serial device has been opened, to configure it */ + serial->ops->configure(serial, (struct serial_configure *)args); + } + } break; |
