µOS++ IIIe Reference 7.0.0
The third edition of µOS++, a POSIX inspired open source framework, written in C++
Loading...
Searching...
No Matches
serial.cpp
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 * Copyright (c) 2013-2014 ARM Ltd.
5 *
6 * Permission to use, copy, modify, and/or distribute this software
7 * for any purpose is hereby granted, under the terms of the MIT license.
8 *
9 * If a copy of the license was not distributed with this file, it can
10 * be obtained from https://opensource.org/licenses/mit.
11 */
12
13/*
14 * The code is inspired by ARM CMSIS Driver_USART.h file, v2.02,
15 * and tries to remain functionally close to the CMSIS specifications.
16 */
17
20
21#include <cassert>
22
23// ----------------------------------------------------------------------------
24
25#if defined(__clang__)
26#pragma clang diagnostic ignored "-Wc++98-compat"
27#endif
28
29// ----------------------------------------------------------------------------
30
31namespace os
32{
33 namespace driver
34 {
35 // ------------------------------------------------------------------------
36
37 Serial::Serial () noexcept
38 {
39 trace::printf ("%s() %p\n", __func__, this);
40
41 cb_func_ = nullptr;
42 cb_object_ = nullptr;
43
44 clean ();
45 }
46
47 Serial::~Serial () noexcept
48 {
49 trace::printf ("%s() %p\n", __func__, this);
50 }
51
52 // ------------------------------------------------------------------------
53
54 void
55 Serial::clean (void) noexcept
56 {
57 status_.rx_break = false;
58 status_.rx_busy = false;
59 status_.rx_framing_error = false;
60 status_.rx_overflow = false;
61 status_.rx_parity_error = false;
62 status_.tx_busy = false;
63 status_.tx_underflow = false;
64
65 modem_status_.cts = false;
66 modem_status_.dsr = false;
67 modem_status_.dcd = false;
68 modem_status_.ri = false;
69 }
70
71 // ------------------------------------------------------------------------
72
73 void
75 const void* cb_object) noexcept
76 {
77 cb_func_ = cb_func;
78 cb_object_ = cb_object;
79 }
80
82 Serial::send (const void* data, std::size_t num) noexcept
83 {
84 assert (data != nullptr);
85 if (num == 0)
86 {
87 return RETURN_OK;
88 }
89 return do_send (data, num);
90 }
91
93 Serial::receive (void* data, std::size_t num) noexcept
94 {
95 assert (data != nullptr);
96 if (num == 0)
97 {
98 return RETURN_OK;
99 }
100 return do_receive (data, num);
101 }
102
104 Serial::transfer (const void* data_out, void* data_in,
105 std::size_t num) noexcept
106 {
107 assert (data_out != nullptr);
108 assert (data_in != nullptr);
109 if (num == 0)
110 {
111 return RETURN_OK;
112 }
113 return do_transfer (data_out, data_in, num);
114 }
115
116 } /* namespace driver */
117} /* namespace os */
118
119// ----------------------------------------------------------------------------
Serial() noexcept
Definition serial.cpp:37
void clean(void) noexcept
Definition serial.cpp:55
const void * cb_object_
Pointer to object instance associated with this driver.
Definition serial.h:732
return_t receive(void *data, std::size_t num) noexcept
Start the serial receiver.
Definition serial.cpp:93
signal_event_t cb_func_
Pointer to static function that implements the callback.
Definition serial.h:729
virtual ~Serial() noexcept override
Definition serial.cpp:47
return_t send(const void *data, std::size_t num) noexcept
Start the serial transmitter.
Definition serial.cpp:82
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.
Definition serial.cpp:104
void register_callback(signal_event_t cb_func, const void *cb_object=nullptr) noexcept
Register event callback.
Definition serial.cpp:74
int printf(const char *format,...)
Write a formatted string to the trace device.
Definition trace.cpp:59
constexpr return_t RETURN_OK
Definition common.h:52
int32_t return_t
Definition common.h:46
void(* signal_event_t)(const void *object, event_t event)
Definition common.h:67
System namespace.