diff --git a/drivers/SerialBase.h b/drivers/SerialBase.h index 3422eca71b..7d248c6187 100644 --- a/drivers/SerialBase.h +++ b/drivers/SerialBase.h @@ -344,6 +344,9 @@ protected: bool _tx_enabled; const PinName _tx_pin; const PinName _rx_pin; + Flow _flow_type; + PinName _flow1; + PinName _flow2; #endif }; diff --git a/drivers/source/SerialBase.cpp b/drivers/source/SerialBase.cpp index 405b5e5674..e5e5a22273 100644 --- a/drivers/source/SerialBase.cpp +++ b/drivers/source/SerialBase.cpp @@ -30,7 +30,15 @@ SerialBase::SerialBase(PinName tx, PinName rx, int baud) : _rx_callback(NULL), _tx_asynch_set(false), _rx_asynch_set(false), #endif - _serial(), _baud(baud), _rx_enabled(true), _tx_enabled(true), _tx_pin(tx), _rx_pin(rx) + _serial(), + _baud(baud), + _rx_enabled(true), + _tx_enabled(true), + _tx_pin(tx), + _rx_pin(rx), + _flow_type(Disabled), + _flow1(NC), + _flow2(NC) { // No lock needed in the constructor @@ -121,6 +129,7 @@ int SerialBase::_base_putc(int c) void SerialBase::_init() { serial_init(&_serial, _tx_pin, _rx_pin); + set_flow_control(_flow_type, _flow1, _flow2); serial_baud(&_serial, _baud); serial_irq_handler(&_serial, SerialBase::_irq_handler, (uint32_t)this); } diff --git a/drivers/source/UARTSerial.cpp b/drivers/source/UARTSerial.cpp index db13b6c96e..fe2db72c18 100644 --- a/drivers/source/UARTSerial.cpp +++ b/drivers/source/UARTSerial.cpp @@ -77,6 +77,9 @@ void UARTSerial::set_format(int bits, Parity parity, int stop_bits) void UARTSerial::set_flow_control(Flow type, PinName flow1, PinName flow2) { api_lock(); + _flow_type = type; + _flow1 = flow1; + _flow2 = flow2; SerialBase::set_flow_control(type, flow1, flow2); api_unlock(); }