10#include "libxr_cb.hpp"
11#include "libxr_def.hpp"
12#include "libxr_type.hpp"
13#include "lockfree_queue.hpp"
15#include "semaphore.hpp"
27template <
typename... Args>
64 data.sem_info.sem = &sem;
65 data.sem_info.timeout = timeout;
75 data.callback = &callback;
85 data.status = &status;
101 case OperationType::CALLBACK:
104 case OperationType::BLOCK:
105 data.sem_info.sem = op.
data.sem_info.sem;
106 data.sem_info.timeout = op.
data.sem_info.timeout;
108 case OperationType::POLLING:
111 case OperationType::NONE:
131 case OperationType::CALLBACK:
132 data.callback = op.data.callback;
134 case OperationType::BLOCK:
135 data.sem_info.sem = op.data.sem_info.sem;
136 data.sem_info.timeout = op.data.sem_info.timeout;
138 case OperationType::POLLING:
139 data.status = op.data.status;
141 case OperationType::NONE:
157 typename InitOperation,
158 typename = std::enable_if_t<std::is_same_v<std::decay_t<InitOperation>,
Operation>>>
161 *
this = std::forward<InitOperation>(op);
170 template <
typename... Status>
175 case OperationType::CALLBACK:
176 data.callback->Run(in_isr, std::forward<Args>(status)...);
178 case OperationType::BLOCK:
179 data.sem_info.sem->PostFromCallback(in_isr);
181 case OperationType::POLLING:
182 *
data.status = OperationPollingStatus::DONE;
184 case OperationType::NONE:
204 if (
type == OperationType::POLLING)
206 *
data.status = OperationPollingStatus::RUNNING;
270 enum class BusyState : uint32_t
279 size_t read_size_ = 0;
281 std::atomic<BusyState> busy_{BusyState::IDLE};
313 virtual size_t Size();
394 virtual void Reset();
404 enum class LockState : uint32_t
407 UNLOCKED = UINT32_MAX
413 std::atomic<LockState> lock_{LockState::UNLOCKED};
414 size_t write_size_ = 0;
489 WritePort(
size_t queue_size = 3,
size_t buffer_size = 128);
507 virtual size_t Size();
584 virtual void Reset();
603#if LIBXR_PRINTF_BUFFER_SIZE > 0
605 printf_buff_[LIBXR_PRINTF_BUFFER_SIZE];
618 static int Printf(
const char *fmt, ...);
提供一个通用的回调包装,支持动态参数传递。 Provides a generic callback wrapper, supporting dynamic argument passing.
常量原始数据封装类。 A class for encapsulating constant raw data.
无锁队列实现 / Lock-free queue implementation
互斥锁类,提供线程同步机制 (Mutex class providing thread synchronization mechanisms).
Defines an operation with different execution modes.
Operation & operator=(const Operation &op)
Copy assignment operator.
Operation(Semaphore &sem, uint32_t timeout=UINT32_MAX)
Constructs a blocking operation with a semaphore and timeout.
Operation & operator=(Operation &&op) noexcept
Move assignment operator.
Operation(Callback &callback)
Constructs a callback-based operation.
Operation()
Default constructor, initializes with NONE type.
void MarkAsRunning()
标记操作为运行状态。 Marks the operation as running.
void UpdateStatus(bool in_isr, Status &&...status)
Updates operation status based on type.
union LibXR::Operation::@4 data
Operation(OperationPollingStatus &status)
Constructs a polling operation.
Operation(InitOperation &&op)
构造一个新的 Operation 对象(初始化操作)。 Constructs a new Operation object (initialization operation).
原始数据封装类。 A class for encapsulating raw data.
ReadPort class for handling read operations.
bool Readable()
Checks if read operations are supported.
ReadPort(size_t buffer_size=128)
Constructs a ReadPort with queue sizes.
void Finish(bool in_isr, ErrorCode ans, ReadInfoBlock &info, uint32_t size)
更新读取操作的状态。 Updates the status of the read operation.
virtual void Reset()
Resets the ReadPort.
virtual size_t EmptySize()
获取队列的剩余可用空间。 Gets the remaining available space in the queue.
ErrorCode operator()(RawData data, ReadOperation &op)
读取操作符重载,用于执行读取操作。 Overloaded function call operator to perform a read operation.
virtual void ProcessPendingReads(bool in_isr)
Processes pending reads.
ReadPort & operator=(ReadFun fun)
赋值运算符重载,用于设置读取函数。 Overloaded assignment operator to set the read function.
virtual size_t Size()
获取当前队列的已使用大小。 Gets the currently used size of the queue.
void MarkAsRunning(ReadInfoBlock &info)
标记读取操作为运行中。 Marks the read operation as running.
STDIO interface for read/write ports.
static int Printf(const char *fmt,...)
Prints a formatted string to the write port (like printf).
static LibXR::Mutex * write_mutex_
Write port mutex. 写入端口互斥锁。
static ReadPort * read_
Read port instance. 读取端口。
static WritePort * write_
Write port instance. 写入端口。
信号量类,实现线程同步机制 Semaphore class implementing thread synchronization
WritePort 的流式写入操作器,支持链式 << 操作和批量提交。
bool locked_
是否持有写锁 Whether write lock is held
size_t size_
当前已写入但未提交的字节数 Bytes written but not yet committed
ErrorCode Commit()
手动提交已写入的数据到队列,并尝试续锁。
bool fallback_to_normal_write_
size_t cap_
当前队列容量 Current queue capacity
LibXR::WritePort * port_
写端口指针 Pointer to the WritePort
LibXR::WriteOperation op_
写操作对象 Write operation object
~Stream()
析构时自动提交已累积的数据并释放锁。
Stream(LibXR::WritePort *port, LibXR::WriteOperation op)
构造流写入对象,并尝试锁定端口。
Stream & operator<<(const ConstRawData &data)
追加写入数据,支持链式调用。
WritePort class for handling write operations.
virtual size_t EmptySize()
获取数据队列的剩余可用空间。 Gets the remaining available space in the data queue.
virtual size_t Size()
获取当前数据队列的已使用大小。 Gets the used size of the current data queue.
ErrorCode operator()(ConstRawData data, WriteOperation &op)
执行写入操作。 Performs a write operation.
WritePort(size_t queue_size=3, size_t buffer_size=128)
构造一个新的 WritePort 对象。 Constructs a new WritePort object.
WritePort & operator=(WriteFun fun)
赋值运算符重载,用于设置写入函数。 Overloaded assignment operator to set the write function.
bool Writable()
判断端口是否可写。 Checks whether the port is writable.
void MarkAsRunning(WriteOperation &op)
标记写入操作为运行中。 Marks the write operation as running.
virtual void Reset()
Resets the WritePort.
void Finish(bool in_isr, ErrorCode ans, WriteInfoBlock &info, uint32_t size)
更新写入操作的状态。 Updates the status of the write operation.
ErrorCode(* ReadFun)(ReadPort &port)
Function pointer type for read operations.
Operation< ErrorCode > ReadOperation
Read operation type.
ErrorCode(* WriteFun)(WritePort &port)
Function pointer type for write operations.
Operation< ErrorCode > WriteOperation
Write operation type.
Read information block structure.
RawData data
Data buffer. 数据缓冲区。
ReadOperation op
Read operation instance. 读取操作实例。