µOS++ IIIe Reference 7.0.0
The third edition of µOS++, a POSIX inspired open source framework, written in C++
Loading...
Searching...
No Matches
usart-wrapper.h
Go to the documentation of this file.
1/*
2 * This file is part of the µOS++ project (https://micro-os-plus.github.io/).
3 * Copyright (c) 2016-2025 Liviu Ionescu. All rights reserved.
4 *
5 * Permission to use, copy, modify, and/or distribute this software
6 * for any purpose is hereby granted, under the terms of the MIT license.
7 *
8 * If a copy of the license was not distributed with this file, it can
9 * be obtained from https://opensource.org/licenses/mit.
10 */
11
12#ifndef CMSIS_PLUS_DRIVER_USART_WRAPPER_H_
13#define CMSIS_PLUS_DRIVER_USART_WRAPPER_H_
14
16
17// ----------------------------------------------------------------------------
18
19#pragma GCC diagnostic push
20#if defined(__clang__)
21#pragma clang diagnostic ignored "-Wc++98-compat"
22#endif
23
24// ----------------------------------------------------------------------------
25
26extern "C"
27{
28 // Avoid to include <Driver_USART.h>
29 typedef void (*ARM_USART_SignalEvent_t) (uint32_t event);
30
31 typedef struct _ARM_DRIVER_USART const ARM_DRIVER_USART;
32}
33
34namespace os
35{
36 namespace driver
37 {
38 // ========================================================================
39
40#pragma GCC diagnostic push
41#if defined(__clang__)
42#pragma clang diagnostic ignored "-Wpadded"
43#elif defined(__GNUC__)
44#pragma GCC diagnostic ignored "-Wpadded"
45#endif
46
47 // This wrapper makes a CMSIS USART Keil driver behave like a
48 // µOS++ Serial driver.
49
50 class usart_wrapper : public Serial
51 {
52 public:
53 // ----------------------------------------------------------------------
54
56 ARM_USART_SignalEvent_t c_cb_func) noexcept;
57
58 usart_wrapper (const usart_wrapper&) = delete;
59
61
64 = delete;
65
68 = delete;
69
70 virtual ~usart_wrapper () noexcept override;
71
72 // ----------------------------------------------------------------------
73
74 protected:
75 virtual const Version&
76 do_get_version (void) noexcept override;
77
78 virtual const serial::Capabilities&
79 do_get_capabilities (void) noexcept override;
80
81 virtual return_t
82 do_power (Power state) noexcept override;
83
84 virtual return_t
85 do_send (const void* data, std::size_t num) noexcept override;
86
87 virtual return_t
88 do_receive (void* data, std::size_t num) noexcept override;
89
90 virtual return_t
91 do_transfer (const void* data_out, void* data_in,
92 std::size_t num) noexcept override;
93
94 virtual std::size_t
95 do_get_tx_count (void) noexcept override;
96
97 virtual std::size_t
98 do_get_rx_count (void) noexcept override;
99
100 virtual return_t
101 do_configure (serial::config_t ctrl,
102 serial::config_arg_t arg) noexcept override;
103
104 virtual return_t
105 do_control (serial::control_t ctrl) noexcept override;
106
107 virtual serial::Status&
108 do_get_status (void) noexcept override;
109
110 virtual return_t
111 do_control_modem_line (serial::Modem_control ctrl) noexcept override;
112
113 virtual serial::Modem_status&
114 do_get_modem_status (void) noexcept override;
115
116 // ----------------------------------------------------------------------
117
118 private:
121
125
126 // Attempts to somehow use && failed, since the Keil driver
127 // functions return temporary objects. So the only portable
128 // solution was to copy these objects here and return
129 // references to these objects.
130 // (Not particularly proud of this solution, but could not find
131 // a better one.)
132
135 // serial::Status status_;
136 // serial::Modem_status modem_status_;
137 };
138
139#pragma GCC diagnostic pop
140
141 } /* namespace driver */
142} /* namespace os */
143
144#pragma GCC diagnostic pop
145
146// ----------------------------------------------------------------------------
147
148#endif /* CMSIS_PLUS_DRIVER_USART_WRAPPER_H_ */
Serial device driver capabilities.
Definition serial.h:455
usart_wrapper(usart_wrapper &&)=delete
virtual std::size_t do_get_rx_count(void) noexcept override
usart_wrapper & operator=(const usart_wrapper &)=delete
serial::Capabilities capa_
virtual ~usart_wrapper() noexcept override
ARM_USART_SignalEvent_t c_cb_func_
virtual serial::Status & do_get_status(void) noexcept override
virtual const Version & do_get_version(void) noexcept override
virtual return_t do_receive(void *data, std::size_t num) noexcept override
virtual return_t do_transfer(const void *data_out, void *data_in, std::size_t num) noexcept override
ARM_DRIVER_USART * driver_
Pointer to CMSIS USART Keil driver.
virtual std::size_t do_get_tx_count(void) noexcept override
virtual const serial::Capabilities & do_get_capabilities(void) noexcept override
virtual serial::Modem_status & do_get_modem_status(void) noexcept override
virtual return_t do_control(serial::control_t ctrl) noexcept override
virtual return_t do_power(Power state) noexcept override
virtual return_t do_configure(serial::config_t ctrl, serial::config_arg_t arg) noexcept override
virtual return_t do_send(const void *data, std::size_t num) noexcept override
virtual return_t do_control_modem_line(serial::Modem_control ctrl) noexcept override
usart_wrapper(const usart_wrapper &)=delete
int32_t return_t
Definition common.h:46
System namespace.
Standard std namespace.
struct _ARM_DRIVER_USART const ARM_DRIVER_USART
void(* ARM_USART_SignalEvent_t)(uint32_t event)