3#if defined(ARDUINO_ARCH_RP2040)
6#include "roo_threads.h"
7#include "roo_threads/atomic.h"
15class ReliableUartLinkTransport :
public LinkStreamTransport {
17 ReliableUartLinkTransport(SerialUART &serial, roo::string_view name,
18 LinkBufferSize sendbuf = kBufferSize4KB,
19 LinkBufferSize recvbuf = kBufferSize4KB)
20 : LinkStreamTransport(serial, sendbuf, recvbuf),
22 receiver_thread_name_(name) {}
24 ReliableUartLinkTransport(SerialUART &serial,
25 LinkBufferSize sendbuf = kBufferSize4KB,
26 LinkBufferSize recvbuf = kBufferSize4KB)
27 : ReliableUartLinkTransport(serial,
"serialRcv", sendbuf, recvbuf) {}
30 LinkStreamTransport::begin();
32 roo::thread::attributes attrs;
33 attrs.set_name(receiver_thread_name_.c_str());
35 attrs.set_priority(configMAX_PRIORITIES - 1);
36 receiver_thread_ = roo::thread(attrs, [
this]() {
38 int avail = serial_.available();
42 roo::this_thread::sleep_for(roo_time::Millis(1));
43 int avail = serial_.available();
56 receiver_thread_.join();
61 std::string receiver_thread_name_;
62 roo::thread receiver_thread_;
63 roo::atomic<bool> running_{
false};
75class ReliableSerial1 :
public ReliableUartLinkTransport {
77 ReliableSerial1(LinkBufferSize sendbuf = kBufferSize4KB,
78 LinkBufferSize recvbuf = kBufferSize4KB)
79 : ReliableSerial1(
"serial1", sendbuf, recvbuf) {}
81 ReliableSerial1(roo::string_view name,
82 LinkBufferSize sendbuf = kBufferSize4KB,
83 LinkBufferSize recvbuf = kBufferSize4KB)
84 : ReliableUartLinkTransport(Serial1, name, sendbuf, recvbuf) {}
87class ReliableSerial2 :
public ReliableUartLinkTransport {
89 ReliableSerial2(LinkBufferSize sendbuf = kBufferSize4KB,
90 LinkBufferSize recvbuf = kBufferSize4KB)
91 : ReliableSerial2(
"serial2", sendbuf, recvbuf) {}
93 ReliableSerial2(roo::string_view name,
94 LinkBufferSize sendbuf = kBufferSize4KB,
95 LinkBufferSize recvbuf = kBufferSize4KB)
96 : ReliableUartLinkTransport(Serial2, name, sendbuf, recvbuf) {}