C/C++ API Reference
Loading...
Searching...
No Matches
uart_non_blocking.h
1// Copyright 2024 The Pigweed Authors
2//
3// Licensed under the Apache License, Version 2.0 (the "License"); you may not
4// use this file except in compliance with the License. You may obtain a copy of
5// the License at
6//
7// https://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12// License for the specific language governing permissions and limitations under
13// the License.
14
15#pragma once
16
17#include <cstdint>
18
19#include "pw_bytes/span.h"
20#include "pw_function/function.h"
21#include "pw_status/status.h"
22#include "pw_status/status_with_size.h"
23#include "pw_uart/uart_base.h"
24
25namespace pw::uart {
26
28
33
34class UartNonBlocking : public UartBase {
35 public:
36 ~UartNonBlocking() override = default;
37
64 ByteSpan rx_buffer,
65 Function<void(Status status, ConstByteSpan buffer)>&& callback) {
66 return DoRead(rx_buffer, rx_buffer.size(), std::move(callback));
67 }
68
94 ByteSpan rx_buffer,
95 size_t min_bytes,
96 Function<void(Status status, ConstByteSpan buffer)>&& callback) {
97 return DoRead(rx_buffer, min_bytes, std::move(callback));
98 }
99
109 bool CancelRead() { return DoCancelRead(); }
110
133 Function<void(StatusWithSize status)>&& callback) {
134 return DoWrite(tx_buffer, std::move(callback));
135 }
136
146 bool CancelWrite() { return DoCancelWrite(); }
147
168 Status FlushOutput(Function<void(Status status)>&& callback) {
169 return DoFlushOutput(std::move(callback));
170 }
171
183
184 private:
212 virtual Status DoRead(
213 ByteSpan rx_buffer,
214 size_t min_bytes,
215 Function<void(Status status, ConstByteSpan buffer)>&& callback) = 0;
216
228 virtual bool DoCancelRead() = 0;
229
253 virtual Status DoWrite(ConstByteSpan tx_buffer,
254 Function<void(StatusWithSize status)>&& callback) = 0;
255
267 virtual bool DoCancelWrite() = 0;
268
289 virtual Status DoFlushOutput(Function<void(Status status)>&& /*callback*/) {
290 return Status::Unimplemented();
291 }
292
303 virtual bool DoCancelFlushOutput() { return false; }
304};
305
306} // namespace pw::uart
Definition: status.h:120
static constexpr Status Unimplemented()
Definition: status.h:280
Definition: status_with_size.h:51
Definition: uart_base.h:32
Definition: uart_non_blocking.h:34
fit::function_impl< function_internal::config::kInlineCallableSize, !function_internal::config::kEnableDynamicAllocation, FunctionType, PW_FUNCTION_DEFAULT_ALLOCATOR_TYPE > Function
Definition: function.h:73
Status FlushOutput(Function< void(Status status)> &&callback)
Definition: uart_non_blocking.h:168
Status ReadExactly(ByteSpan rx_buffer, Function< void(Status status, ConstByteSpan buffer)> &&callback)
Definition: uart_non_blocking.h:63
bool CancelRead()
Definition: uart_non_blocking.h:109
virtual bool DoCancelFlushOutput()
Definition: uart_non_blocking.h:303
Status ReadAtLeast(ByteSpan rx_buffer, size_t min_bytes, Function< void(Status status, ConstByteSpan buffer)> &&callback)
Definition: uart_non_blocking.h:93
bool CancelFlushOutput()
Definition: uart_non_blocking.h:182
virtual bool DoCancelRead()=0
bool CancelWrite()
Definition: uart_non_blocking.h:146
virtual bool DoCancelWrite()=0
virtual Status DoWrite(ConstByteSpan tx_buffer, Function< void(StatusWithSize status)> &&callback)=0
virtual Status DoRead(ByteSpan rx_buffer, size_t min_bytes, Function< void(Status status, ConstByteSpan buffer)> &&callback)=0
Status Write(ConstByteSpan tx_buffer, Function< void(StatusWithSize status)> &&callback)
Definition: uart_non_blocking.h:132
virtual Status DoFlushOutput(Function< void(Status status)> &&)
Definition: uart_non_blocking.h:289
Core UART interfaces.
Definition: blocking_adapter.h:21