arduino / arduino/ArduinoCore-API
add isFlushed() to Stream/HardwareSerial
- Ngôn ngữ chính
- C++
- Star
- 306
- Fork
- 150
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Mô tả
Please add Serial.isFlushed() method for checking that all data in Tx buffer have been flushed. We need it for non-blocking Serial.write() to half duplex communication (such as RS485).
At the moment I use something like this in my non-blocking code:
```
while (Serial.availableForWrite() > 0 && ndx < sizeof(buffer)) {
Serial.write(buffer[ndx]);
ndx++;
}
if (Serial.availableForWrite() == SERIAL_TX_BUFFER_SIZE - 1 && ndx > sizeof(buffer)) {
ndx = 0;
// Disable RS485 transmit and start receiving
}
```
But Serial.availableForWrite() == SERIAL_TX_BUFFER_SIZE - 1 is not reliable for checking that Tx buffer has been flushed.
Here is an earlier PR which was never merged:
https://github.com/arduino/Arduino/pull/3737
and a similar PR for ArduinoCore-sam here:
https://github.com/arduino/ArduinoCore-sam/pull/7
I would help, but coding Arduino core is beyond my skills.
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Hướng nghiên cứu
Bắt đầu bằng cách xem xét Stream/HardwareSerial và các PRs Arduino trước đây được liên kết trong issue để hiểu API được đề xuất và các triển khai core bị ảnh hưởng. Xác minh cách trạng thái bộ đệm truyền hiện được cung cấp, sau đó xác định hoàn thành là khi Serial.isFlushed() báo cáo một cách đáng tin cậy rằng tất cả dữ liệu truyền đã rời khỏi bộ đệm để sử dụng half-duplex, với phần coverage tương ứng ở nơi các core liên quan kiểm thử hành vi serial.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- cpp
- Lĩnh vực
- api, embedded-iot
- Loại issue
- Tính năng
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100