Public SerialBase::enable_input

pull/10924/head
Sebastian Stockhammer 2019-07-23 11:49:00 +02:00
parent b3b7f98698
commit aa2969f999
3 changed files with 32 additions and 20 deletions

View File

@ -155,6 +155,30 @@ public:
*/
void send_break();
/** Enable serial input
*
* If both serial input and serial output are disabled, the
* peripheral is freed. If either serial input or serial
* output is re-enabled, the peripheral is reinitialized.
*
* On reinitialisation rx interrupts will be enabled if a
* rx handler is attached. The rx handler is called once
* during reinitialisation.
*/
void enable_input(bool enable = true);
/** Enable serial output
*
* If both serial input and serial output are disabled, the
* peripheral is freed. If either serial input or serial
* output is re-enabled, the peripheral is reinitialized.
*
* On reinitialisation tx interrupts will be enabled if a
* tx handler is attached. The tx handler is called once
* during reinitialisation.
*/
void enable_output(bool enable = true);
#if !defined(DOXYGEN_ONLY)
protected:
@ -303,22 +327,6 @@ protected:
*/
void _deinit();
/** Enable serial input
*
* If both serial input and serial output are disabled, the
* peripheral is freed. If either serial input or serial
* output is re-enabled, the peripheral is reinitialized.
*/
void _enable_input(bool enable = true);
/** Enable serial output
*
* If both serial input and serial output are disabled, the
* peripheral is freed. If either serial input or serial
* output is re-enabled, the peripheral is reinitialized.
*/
void _enable_output(bool enable = true);
#if DEVICE_SERIAL_ASYNCH
CThunk<SerialBase> _thunk_irq;
DMAUsage _tx_usage;

View File

@ -130,8 +130,9 @@ void SerialBase::_deinit()
serial_free(&_serial);
}
void SerialBase::_enable_input(bool enable)
void SerialBase::enable_input(bool enable)
{
lock();
if (_rx_enabled != enable) {
if (enable && !_tx_enabled) {
_init();
@ -156,10 +157,12 @@ void SerialBase::_enable_input(bool enable)
_deinit();
}
}
unlock();
}
void SerialBase::_enable_output(bool enable)
void SerialBase::enable_output(bool enable)
{
lock();
if (_tx_enabled != enable) {
if (enable && !_rx_enabled) {
_init();
@ -184,6 +187,7 @@ void SerialBase::_enable_output(bool enable)
_deinit();
}
}
unlock();
}
void SerialBase::set_break()

View File

@ -367,7 +367,7 @@ void UARTSerial::disable_tx_irq()
int UARTSerial::enable_input(bool enabled)
{
api_lock();
_enable_input(enabled);
SerialBase::enable_input(enabled);
api_unlock();
return 0;
@ -376,7 +376,7 @@ int UARTSerial::enable_input(bool enabled)
int UARTSerial::enable_output(bool enabled)
{
api_lock();
_enable_input(enabled);
SerialBase::enable_input(enabled);
api_unlock();
return 0;