18#ifndef CMSIS_PLUS_DRIVER_SERIAL_H_
19#define CMSIS_PLUS_DRIVER_SERIAL_H_
34#pragma GCC diagnostic push
36#pragma clang diagnostic ignored "-Wc++98-compat"
248#pragma GCC diagnostic push
249#if defined(__clang__)
250#pragma clang diagnostic ignored "-Wpadded"
251#elif defined(__GNUC__)
252#pragma GCC diagnostic ignored "-Wpadded"
315#pragma GCC diagnostic pop
344#pragma GCC diagnostic push
345#if defined(__clang__)
346#pragma clang diagnostic ignored "-Wpadded"
347#elif defined(__GNUC__)
348#pragma GCC diagnostic ignored "-Wpadded"
387#pragma GCC diagnostic pop
444#pragma GCC diagnostic push
445#if defined(__clang__)
446#pragma clang diagnostic ignored "-Wpadded"
447#elif defined(__GNUC__)
448#pragma GCC diagnostic ignored "-Wpadded"
524#pragma GCC diagnostic pop
530#pragma GCC diagnostic push
531#if defined(__clang__)
532#pragma clang diagnostic ignored "-Wpadded"
533#elif defined(__GNUC__)
534#pragma GCC diagnostic ignored "-Wpadded"
557 virtual ~Serial () noexcept override;
570 const
void* cb_object =
nullptr) noexcept;
578 const serial::Capabilities&
589 send (const
void* data,
std::
size_t num) noexcept;
599 receive (
void* data,
std::
size_t num) noexcept;
610 transfer (const
void* data_out,
void* data_in,
std::
size_t num) noexcept;
634 configure (serial::config_t cfg, serial::config_arg_t arg) noexcept;
643 control (serial::control_t ctrl) noexcept;
664 serial::Modem_status&
677 clean (
void) noexcept;
682 virtual const serial::Capabilities&
696 std::
size_t num) noexcept
715 virtual serial::Status&
723 virtual serial::Modem_status&
738#pragma GCC diagnostic pop
748 Status::is_tx_busy (
void)
754 Status::is_rx_busy (
void)
760 Status::is_tx_underflow (
void)
766 Status::is_rx_overflow (
void)
772 Status::is_rx_break (
void)
778 Status::is_rx_framing_error (
void)
784 Status::is_rx_parity_error (
void)
792 Modem_status::is_cts_active (
void)
798 Modem_status::is_dsr_active (
void)
804 Modem_status::is_dcd_active (
void)
810 Modem_status::is_ri_active (
void)
879#pragma GCC diagnostic pop
void signal_event(event_t event) noexcept
Signal serial events.
serial::Status & get_status(void) noexcept
Get serial port status.
return_t control(serial::control_t ctrl) noexcept
Control the serial interface.
serial::Modem_status modem_status_
virtual serial::Status & do_get_status(void) noexcept=0
Serial & operator=(const Serial &)=delete
virtual return_t do_control(serial::control_t ctrl) noexcept=0
void clean(void) noexcept
return_t control_modem_line(serial::Modem_control ctrl) noexcept
Configure serial modem lines.
virtual serial::Modem_status & do_get_modem_status(void) noexcept=0
Serial(const Serial &)=delete
const void * cb_object_
Pointer to object instance associated with this driver.
return_t receive(void *data, std::size_t num) noexcept
Start the serial receiver.
virtual std::size_t do_get_rx_count(void) noexcept=0
virtual return_t do_receive(void *data, std::size_t num) noexcept=0
virtual return_t do_configure(serial::config_t cfg, serial::config_arg_t arg) noexcept=0
virtual std::size_t do_get_tx_count(void) noexcept=0
std::size_t get_rx_count(void) noexcept
Get received bytes count.
return_t configure(serial::config_t cfg, serial::config_arg_t arg) noexcept
Configure the serial interface.
signal_event_t cb_func_
Pointer to static function that implements the callback.
virtual ~Serial() noexcept override
virtual return_t do_control_modem_line(serial::Modem_control ctrl) noexcept=0
virtual return_t do_send(const void *data, std::size_t num) noexcept=0
serial::Modem_status & get_modem_status(void) noexcept
Get serial modem lines state.
std::size_t get_tx_count(void) noexcept
Get transmitted bytes count.
const serial::Capabilities & get_capabilities(void) noexcept
Get driver capabilities.
virtual const serial::Capabilities & do_get_capabilities(void) noexcept=0
return_t send(const void *data, std::size_t num) noexcept
Start the serial transmitter.
return_t transfer(const void *data_out, void *data_in, std::size_t num) noexcept
Start sending/receiving data to/from the serial transmitter/receiver.
void register_callback(signal_event_t cb_func, const void *cb_object=nullptr) noexcept
Register event callback.
virtual return_t do_transfer(const void *data_out, void *data_in, std::size_t num) noexcept=0
Serial device driver capabilities.
bool event_dcd
Signal DCD change event.
bool synchronous_slave
supports Synchronous Slave mode.
bool dtr
DTR Line: false=not available, true=available.
bool dsr
DSR Line: false=not available, true=available.
bool rts
RTS Line: false=not available, true=available.
bool event_cts
Signal CTS change event.
bool event_dsr
Signal DSR change event.
bool event_rx_timeout
Signal receive character timeout event.
bool flow_control_cts
CTS Flow Control available.
bool single_wire
supports Single-wire mode.
bool smart_card_clock
Smart Card Clock generator available.
bool synchronous_master
supports Synchronous Master mode.
bool irda
supports IrDA mode.
bool ri
RI Line: false=not available, true=available.
bool cts
CTS Line: false=not available, true=available.
bool asynchronous
supports Asynchronous mode.
bool smart_card
supports Smart Card mode.
bool event_tx_complete
Transmit completed event.
bool event_ri
Signal RI change event.
bool dcd
DCD Line: false=not available, true=available.
bool flow_control_rts
RTS Flow Control available.
bool ri
RI state: true=Active, false=Inactive.
bool dsr
DSR state: true=Active, false=Inactive.
bool dcd
DCD state: true=Active, false=Inactive.
bool cts
CTS state: true=Active, false=Inactive.
bool is_rx_overflow(void)
bool rx_overflow
Receive data overflow detected (cleared on start of next receive operation).
bool tx_busy
Transmitter busy flag.
bool tx_underflow
Transmit data underflow detected (cleared on start of next send operation).
bool is_rx_parity_error(void)
bool rx_busy
Receiver busy flag.
bool rx_framing_error
Framing error detected on receive (cleared on start of next receive operation).
bool is_rx_framing_error(void)
bool rx_parity_error
Parity error detected on receive (cleared on start of next receive operation).
bool is_tx_underflow(void)
bool rx_break
Break detected on receive (cleared on start of next receive operation).
constexpr config_t PARITY_Msk
constexpr bit_number_t DATA_BITS_Pos
constexpr config_t CPHA0
CPHA = 0 = (default);.
constexpr config_t FLOW_CONTROL_RTS
RTS Flow Control.
constexpr config_t STOP_BITS_2
2 Stop bits.
constexpr config_t PARITY_NONE
No Parity = (default);.
constexpr config_t DATA_BITS_8
8 Data bits = (default);.
constexpr config_t DEFAULT_TX_VALUE
Set default Transmit value = (Synchronous Receive only); arg = value.
constexpr config_t SMART_CARD_NACK
Smart Card NACK generation; arg: 0=disabled, 1=enabled.
constexpr config_t DATA_BITS_6
6 Data bit.
constexpr config_t DATA_BITS_9
9 Data bits.
constexpr return_t ERROR_MODE
Specified Mode not supported.
constexpr config_t MODE_IRDA
UART IrDA; arg = Baudrate.
constexpr bit_number_t PARITY_Pos
constexpr config_t CPHA_Msk
constexpr config_t IRDA_PULSE
Set IrDA Pulse in ns; arg: 0=3/16 of bit period.
constexpr config_t STOP_BITS_1
1 Stop bit = (default);.
constexpr config_t DATA_BITS_Msk
constexpr config_t MODE_SYNCHRONOUS_MASTER
Synchronous Master = (generates clock signal); arg = Baudrate.
constexpr config_t CPOL1
CPOL = 1.
constexpr config_t DATA_BITS_7
7 Data bits.
constexpr config_t CPOL_Msk
constexpr config_t FLOW_CONTROL_RTS_CTS
RTS/CTS Flow Control.
constexpr config_t FLOW_CONTROL_CTS
CTS Flow Control.
constexpr config_t PARITY_EVEN
Even Parity.
constexpr config_t DATA_BITS_5
5 Data bits.
constexpr config_t FLOW_CONTROL_Msk
constexpr config_t CPHA1
CPHA = 1.
constexpr config_t MODE_ASYNCHRONOUS
UART = (Asynchronous);; arg = Baudrate.
constexpr config_t SMART_CARD_CLOCK
Set Smart Card Clock in Hz; arg: 0=Clock not generated.
constexpr config_t MODE_SYNCHRONOUS_SLAVE
Synchronous Slave = (external clock signal);.
constexpr bit_number_t CPHA_Pos
constexpr return_t ERROR_DATA_BITS
Specified number of Data bits not supported.
constexpr config_t MODE_SMART_CARD
UART Smart Card; arg = Baudrate.
constexpr bit_number_t CONFIG_Pos
constexpr config_t CONFIG_Msk(0xFFUL<< CONFIG_Pos)
constexpr config_t FLOW_CONTROL_NONE
No Flow Control = (default);.
constexpr return_t ERROR_CPHA
Specified Clock Phase not supported.
@ abort_receive
Abort Serial::receive().
@ abort_send
Abort Serial::send().
@ enable_break
Enable Continuous Break transmission.
@ disable_break
Disable Continuous Break transmission;.
@ disable_tx
Disable Transmitter.
@ abort_transfer
Abort Serial::transfer().
@ enable_tx
Enable Transmitter.
@ enable_rx
Enable Receiver.
@ disable_rx
Disable Receiver.
constexpr bit_number_t STOP_BITS_Pos
@ cts
CTS state changed (optional).
@ rx_framing_error
Framing error detected on receive.
@ ri
RI state changed (optional).
@ transfer_complete
Transfer completed.
@ dsr
DSR state changed (optional).
@ rx_parity_error
Parity error detected on receive.
@ rx_break
Break detected on receive.
@ tx_underflow
Transmit data not available (Synchronous Slave).
@ dcd
DCD state changed (optional).
@ rx_timeout
Receive character timeout (optional).
@ receive_complete
Receive completed.
@ rx_overflow
Receive data overflow.
@ tx_complete
Transmit completed (optional).
@ send_complete
Send completed; however USART may still transmit data.
constexpr config_t SMART_CARD_GUARD_TIME
Set Smart Card Guard Time; arg = number of bit periods.
constexpr return_t ERROR_BAUDRATE
Specified baudrate not supported.
constexpr config_t MODE_SINGLE_WIRE
UART Single-wire = (half-duplex);; arg = Baudrate.
constexpr return_t ERROR_FLOW_CONTROL
Specified Flow Control not supported.
constexpr config_t PARITY_ODD
Odd Parity.
constexpr config_t STOP_BITS_Msk
constexpr return_t ERROR_STOP_BITS
Specified number of Stop bits not supported.
constexpr bit_number_t FLOW_CONFIG_Pos
constexpr config_t STOP_BITS_0_5
0.5 Stop bits.
constexpr config_t STOP_BITS_1_5
1.5 Stop bits.
Modem_control
Configuration to change the serial modem lines.
@ clear_rts
Deactivate RTS.
@ clear_dtr
Deactivate DTR.
constexpr return_t ERROR_CPOL
Specified Clock Polarity not supported.
constexpr return_t ERROR_PARITY
Specified Parity not supported.
constexpr config_t CPOL0
CPOL = 0 = (default);.
constexpr bit_number_t CPOL_Pos
constexpr return_t ERROR_SPECIFIC
void(* signal_event_t)(const void *object, event_t event)