33 static void ThreadFun(Terminal* term)
35 Semaphore read_sem, write_sem;
42 term->request_read_size_ =
LibXR::min(term->read_port_->Size(), READ_BUFF_SIZE);
43 auto buffer = RawData(term->read_buff_, term->request_read_size_);
45 if ((*term->read_port_)(buffer, op) == ErrorCode::OK &&
46 term->request_read_size_ > 0)
48 term->write_mutex_->Lock();
50 term->write_stream_.Commit();
51 term->write_mutex_->Unlock();
76 static void TaskFun(Terminal* term)
80 auto start_read = [&]()
82 term->request_read_size_ =
84 auto buffer = RawData(term->read_buff_, term->request_read_size_);
85 (*term->read_port_)(buffer, op);
90 switch (term->read_status_)
92 case ReadOperation::OperationPollingStatus::READY:
94 term->request_read_size_ =
96 auto buffer = RawData(term->read_buff_, term->request_read_size_);
97 (*term->read_port_)(buffer, op);
100 case ReadOperation::OperationPollingStatus::RUNNING:
102 case ReadOperation::OperationPollingStatus::DONE:
104 term->write_mutex_->Lock();
105 auto buffer = RawData(term->read_buff_, term->request_read_size_);
107 term->write_stream_.Commit();
108 term->write_mutex_->Unlock();
112 case ReadOperation::OperationPollingStatus::ERROR:
Operation< ErrorCode > ReadOperation
Read operation type.
constexpr auto min(LeftType a, RightType b) -> std::common_type_t< LeftType, RightType >
计算两个数的最小值
Operation< ErrorCode > WriteOperation
Write operation type.
constexpr auto max(LeftType a, RightType b) -> std::common_type_t< LeftType, RightType >
计算两个数的最大值