From 6fa8bfd92a3052d3715145fee9c3456ab3d11918 Mon Sep 17 00:00:00 2001 From: "Aubr.Cool" Date: Thu, 19 Jan 2017 09:55:39 +0800 Subject: [PATCH] prevent change serial rx bufsz when serial is opened --- components/drivers/serial/serial.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/components/drivers/serial/serial.c b/components/drivers/serial/serial.c index a7f1bcfc0..c55406bcd 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 @@ -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;