Skip to content

RFQ: make TimedRead and TimedPeek virtual #11236

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

imwhocodes
Copy link

This is a request for comment / proof of concept

Right now Stream::TimedRead() and Stream::TimedPeek() are concrete functions inside Stream

This mean that when a function that can wait up to a timeout (like Stream::readBytes, Stream::readBytesUntil, Stream::readStringUntil ecc) and there is nothing in the RX buffer the default implementation simply keep spinning in a tight/busy loop calling either ChildClass::read() or ChildClass::peek()

This PR keep the default implementation of the two function but add virtual to it so each concrete child class (like HardwareSerial, HWCDC) can implement an optimised version that relay on the FreeRTOS scheduler and not on busy-polling the interface

In this PR there is implementation for two interfaces

Copy link
Contributor

github-actions bot commented Apr 10, 2025

Warnings
⚠️

Some issues found for the commit messages in this PR:

  • the commit message "HWCDC: added optimized timedRead and timedPeek":
    • type/action should start with a lowercase letter
    • type/action should be one of [change, ci, docs, feat, fix, refactor, remove, revert, test]
  • the commit message "make TimedRead and TimedPeek virtual, added new Hardare Serial HAL abstractions":
    • summary looks empty
    • type/action looks empty

Please fix these commit messages - here are some basic tips:

  • follow Conventional Commits style
  • correct format of commit message should be: <type/action>(<scope/component>): <summary>, for example fix(esp32): Fixed startup timeout issue
  • allowed types are: change,ci,docs,feat,fix,refactor,remove,revert,test
  • sufficiently descriptive message summary should be between 10 to 72 characters and start with upper case letter
  • avoid Jira references in commit messages (unavailable/irrelevant for our customers)

TIP: Install pre-commit hooks and run this check when committing (uses the Conventional Precommit Linter).

👋 Hello imwhocodes, we appreciate your contribution to this project!


📘 Please review the project's Contributions Guide for key guidelines on code, documentation, testing, and more.

🖊️ Please also make sure you have read and signed the Contributor License Agreement for this project.

Click to see more instructions ...


This automated output is generated by the PR linter DangerJS, which checks if your Pull Request meets the project's requirements and helps you fix potential issues.

DangerJS is triggered with each push event to a Pull Request and modify the contents of this comment.

Please consider the following:
- Danger mainly focuses on the PR structure and formatting and can't understand the meaning behind your code or changes.
- Danger is not a substitute for human code reviews; it's still important to request a code review from your colleagues.
- Resolve all warnings (⚠️ ) before requesting a review from human reviewers - they will appreciate it.
- To manually retry these Danger checks, please navigate to the Actions tab and re-run last Danger workflow.

Review and merge process you can expect ...


We do welcome contributions in the form of bug reports, feature requests and pull requests.

1. An internal issue has been created for the PR, we assign it to the relevant engineer.
2. They review the PR and either approve it or ask you for changes or clarifications.
3. Once the GitHub PR is approved we do the final review, collect approvals from core owners and make sure all the automated tests are passing.
- At this point we may do some adjustments to the proposed change, or extend it by adding tests or documentation.
4. If the change is approved and passes the tests it is merged into the default branch.

Generated by 🚫 dangerJS against 9401f23

@SuGlider SuGlider self-assigned this Apr 11, 2025
@me-no-dev me-no-dev requested a review from Copilot April 14, 2025 09:09
Copy link
Contributor

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot reviewed 7 out of 7 changed files in this pull request and generated no comments.

@me-no-dev me-no-dev added Peripheral: UART Status: Review needed Issue or PR is awaiting review labels Apr 14, 2025
Copy link
Contributor

Test Results

 76 files   76 suites   12m 49s ⏱️
 38 tests  38 ✅ 0 💤 0 ❌
241 runs  241 ✅ 0 💤 0 ❌

Results for commit 9401f23.

Copy link
Contributor

Memory usage test (comparing PR against master branch)

The table below shows the summary of memory usage change (decrease - increase) in bytes and percentage for each target.

MemoryFLASH [bytes]FLASH [%]RAM [bytes]RAM [%]
TargetDECINCDECINCDECINCDECINC
ESP32P40⚠️ +3620.00⚠️ +0.10000.000.00
ESP32S30⚠️ +5000.00⚠️ +0.15000.000.00
ESP32S20⚠️ +4320.00⚠️ +0.12000.000.00
ESP32C30⚠️ +3620.00⚠️ +0.11000.000.00
ESP32C60⚠️ +3620.00⚠️ +0.13000.000.00
ESP32H20⚠️ +3500.00⚠️ +0.11000.000.00
ESP320⚠️ +4280.00⚠️ +0.11000.000.00
Click to expand the detailed deltas report [usage change in BYTES]
TargetESP32P4ESP32S3ESP32S2ESP32C3ESP32C6ESP32H2ESP32
ExampleFLASHRAMFLASHRAMFLASHRAMFLASHRAMFLASHRAMFLASHRAMFLASHRAM
ArduinoOTA/examples/BasicOTA⚠️ +3440⚠️ +3920⚠️ +3840⚠️ +3440⚠️ +3440--⚠️ +3880
AsyncUDP/examples/AsyncUDPClient⚠️ +3320⚠️ +3520⚠️ +3440⚠️ +3320⚠️ +3320--⚠️ +3520
AsyncUDP/examples/AsyncUDPMulticastServer⚠️ +3320⚠️ +3520⚠️ +3480⚠️ +3320⚠️ +3320--⚠️ +3600
AsyncUDP/examples/AsyncUDPServer⚠️ +3320⚠️ +3520⚠️ +3440⚠️ +3320⚠️ +3320--⚠️ +3600
DNSServer/examples/CaptivePortal⚠️ +3280⚠️ +3760⚠️ +3720⚠️ +3280⚠️ +3280--⚠️ +3480
EEPROM/examples/eeprom_class⚠️ +1760⚠️ +2640⚠️ +2480⚠️ +1760⚠️ +1760⚠️ +1760⚠️ +2520
EEPROM/examples/eeprom_extra⚠️ +1760⚠️ +2640⚠️ +2480⚠️ +1760⚠️ +1760⚠️ +1760⚠️ +2360
EEPROM/examples/eeprom_write⚠️ +1740⚠️ +2640⚠️ +2480⚠️ +1740⚠️ +1760⚠️ +1760⚠️ +2360
ESP32/examples/AnalogOut/LEDCFade⚠️ +1700⚠️ +2640⚠️ +2480⚠️ +1720⚠️ +1740⚠️ +1740⚠️ +2520
ESP32/examples/AnalogOut/LEDCSingleChannel⚠️ +1400⚠️ +2400⚠️ +2520⚠️ +1720⚠️ +1720⚠️ +1720⚠️ +2320
ESP32/examples/AnalogOut/LEDCSoftwareFade⚠️ +1400⚠️ +2400⚠️ +2520⚠️ +1720⚠️ +1720⚠️ +1720⚠️ +2320
ESP32/examples/AnalogOut/SigmaDelta⚠️ +1400⚠️ +2240⚠️ +2520⚠️ +1760⚠️ +1760⚠️ +1740⚠️ +2320
ESP32/examples/AnalogOut/ledcFrequency⚠️ +1400⚠️ +2240⚠️ +2520⚠️ +1720⚠️ +1720⚠️ +1720⚠️ +2160
ESP32/examples/AnalogOut/ledcWrite_RGB⚠️ +1720⚠️ +2640⚠️ +2480⚠️ +1720⚠️ +1720⚠️ +1720⚠️ +2360
ESP32/examples/AnalogRead⚠️ +1740⚠️ +2640⚠️ +2480⚠️ +1740⚠️ +1760⚠️ +1740⚠️ +2520
ESP32/examples/AnalogReadContinuous⚠️ +1700⚠️ +2480⚠️ +2480⚠️ +1740⚠️ +1740⚠️ +1760⚠️ +2360
ESP32/examples/ArduinoStackSize⚠️ +1760⚠️ +2640⚠️ +2480⚠️ +1760⚠️ +1800⚠️ +1740⚠️ +2520
ESP32/examples/CI/CIBoardsTest⚠️ +3400⚠️ +3560⚠️ +3480⚠️ +3420⚠️ +3440⚠️ +3400⚠️ +3560
ESP32/examples/ChipID/GetChipID⚠️ +1760⚠️ +2480⚠️ +2480⚠️ +1760⚠️ +1740⚠️ +1760⚠️ +2520
ESP32/examples/DeepSleep/TimerWakeUp⚠️ +1760⚠️ +2480⚠️ +2480⚠️ +1740⚠️ +1760--⚠️ +2360
ESP32/examples/DeepSleep/TouchWakeUp⚠️ +1740⚠️ +2640⚠️ +2480------⚠️ +2520
ESP32/examples/FreeRTOS/BasicMultiThreading⚠️ +1720⚠️ +2480⚠️ +2480⚠️ +1720⚠️ +1720⚠️ +1720⚠️ +2520
ESP32/examples/FreeRTOS/Mutex⚠️ +1740⚠️ +2640⚠️ +2480⚠️ +1780⚠️ +1760⚠️ +1780⚠️ +2360
ESP32/examples/FreeRTOS/Queue⚠️ +1780⚠️ +2480⚠️ +2480⚠️ +1780⚠️ +1760⚠️ +1780⚠️ +2360
ESP32/examples/FreeRTOS/Semaphore⚠️ +1740⚠️ +2640⚠️ +2480⚠️ +1740⚠️ +1740⚠️ +1760⚠️ +2360
ESP32/examples/GPIO/BlinkRGB⚠️ +1400⚠️ +2240⚠️ +2520⚠️ +1720⚠️ +1720⚠️ +1720⚠️ +2320
ESP32/examples/GPIO/FunctionalInterrupt⚠️ +1740⚠️ +2640⚠️ +2480⚠️ +1760⚠️ +1740⚠️ +1760⚠️ +2360
ESP32/examples/GPIO/FunctionalInterruptStruct⚠️ +1760⚠️ +2480⚠️ +2480⚠️ +1760⚠️ +1760⚠️ +1760⚠️ +2520
ESP32/examples/GPIO/GPIOInterrupt⚠️ +1740⚠️ +2480⚠️ +2520⚠️ +1760⚠️ +1780⚠️ +1760⚠️ +2520
ESP32/examples/HWCDC_Events⚠️ +1400⚠️ +5000--⚠️ +3020⚠️ +3060⚠️ +3020--
ESP32/examples/MacAddress/GetMacAddress⚠️ +1760⚠️ +2640⚠️ +2480⚠️ +1800⚠️ +1800⚠️ +1780⚠️ +2520
ESP32/examples/RMT/Legacy_RMT_Driver_Compatible⚠️ +1760⚠️ +2480⚠️ +2480⚠️ +1760⚠️ +1740⚠️ +1740⚠️ +2520
ESP32/examples/RMT/RMTCallback⚠️ +1740⚠️ +2640⚠️ +2480⚠️ +1780⚠️ +1760⚠️ +1780⚠️ +2360
ESP32/examples/RMT/RMTLoopback⚠️ +1760⚠️ +2640⚠️ +2480⚠️ +1800⚠️ +1760⚠️ +1800⚠️ +2360
ESP32/examples/RMT/RMTReadXJT⚠️ +1740⚠️ +2640⚠️ +2480⚠️ +1780⚠️ +1780⚠️ +1780⚠️ +2360
ESP32/examples/RMT/RMTWrite_RGB_LED⚠️ +1760⚠️ +2480⚠️ +2480⚠️ +1760⚠️ +1740⚠️ +1760⚠️ +2520
ESP32/examples/RMT/RMT_CPUFreq_Test⚠️ +1740⚠️ +2480⚠️ +2480⚠️ +1780⚠️ +1760⚠️ +1780⚠️ +2520
ESP32/examples/RMT/RMT_EndOfTransmissionState⚠️ +1760⚠️ +2640⚠️ +2480⚠️ +1820⚠️ +1780⚠️ +1820⚠️ +2360
ESP32/examples/RMT/RMT_LED_Blink⚠️ +1760⚠️ +2640⚠️ +2480⚠️ +1740⚠️ +1760⚠️ +1760⚠️ +2360
ESP32/examples/ResetReason/ResetReason⚠️ +1760⚠️ +2480⚠️ +2480⚠️ +1760⚠️ +1740⚠️ +1760⚠️ +2360
ESP32/examples/ResetReason/ResetReason2⚠️ +1720⚠️ +2480⚠️ +2480⚠️ +1780⚠️ +1740⚠️ +1780⚠️ +2360
ESP32/examples/Serial/BaudRateDetect_Demo⚠️ +1760⚠️ +2480⚠️ +2480⚠️ +1740⚠️ +1780⚠️ +1760⚠️ +2520
ESP32/examples/Serial/OnReceiveError_BREAK_Demo⚠️ +1780⚠️ +2560⚠️ +2560⚠️ +1820⚠️ +1820⚠️ +1840⚠️ +2520
ESP32/examples/Serial/OnReceive_Demo⚠️ +1800⚠️ +2720⚠️ +2560⚠️ +1780⚠️ +1800⚠️ +1800⚠️ +2600
ESP32/examples/Serial/RS485_Echo_Demo⚠️ +1800⚠️ +2680⚠️ +2520⚠️ +1780⚠️ +1820⚠️ +1780⚠️ +2400
ESP32/examples/Serial/RxFIFOFull_Demo⚠️ +1740⚠️ +2480⚠️ +2480⚠️ +1760⚠️ +1760⚠️ +1760⚠️ +2520
ESP32/examples/Serial/RxTimeout_Demo⚠️ +1740⚠️ +2640⚠️ +2480⚠️ +1760⚠️ +1760⚠️ +1740⚠️ +2520
ESP32/examples/Serial/Serial_All_CPU_Freqs⚠️ +1740⚠️ +2480⚠️ +2480⚠️ +1800⚠️ +1760⚠️ +1800⚠️ +2520
ESP32/examples/Serial/Serial_STD_Func_OnReceive⚠️ +1760⚠️ +2640⚠️ +2480⚠️ +1760⚠️ +1760⚠️ +1760⚠️ +2360
ESP32/examples/Serial/onReceiveExample⚠️ +1780⚠️ +2680⚠️ +2520⚠️ +1780⚠️ +1780⚠️ +1780⚠️ +2560
ESP32/examples/TWAI/TWAIreceive⚠️ +1760⚠️ +2640⚠️ +2480⚠️ +1800⚠️ +1780⚠️ +1780⚠️ +2360
ESP32/examples/TWAI/TWAItransmit⚠️ +1760⚠️ +2640⚠️ +2480⚠️ +1780⚠️ +1760⚠️ +1760⚠️ +2520
ESP32/examples/Template/ExampleTemplate⚠️ +1400⚠️ +2240⚠️ +2600⚠️ +1720⚠️ +1720⚠️ +1720⚠️ +2320
ESP32/examples/Time/SimpleTime⚠️ +1720⚠️ +2520⚠️ +2480⚠️ +1740⚠️ +1740--⚠️ +2360
ESP32/examples/Timer/RepeatTimer⚠️ +1760⚠️ +2480⚠️ +2480⚠️ +1760⚠️ +1760⚠️ +1760⚠️ +2360
ESP32/examples/Timer/WatchdogTimer⚠️ +1760⚠️ +2640⚠️ +2480⚠️ +1820⚠️ +1740⚠️ +1820⚠️ +2520
ESP32/examples/Touch/TouchInterrupt⚠️ +1760⚠️ +2480⚠️ +2480------⚠️ +2520
ESP32/examples/Touch/TouchRead⚠️ +1760⚠️ +2640⚠️ +2480------⚠️ +2360
ESP32/examples/Utilities/HEXBuilder⚠️ +1760⚠️ +2640⚠️ +2480⚠️ +1760⚠️ +1760⚠️ +1760⚠️ +2520
ESP32/examples/Utilities/MD5Builder⚠️ +1740⚠️ +2480⚠️ +2480⚠️ +1740⚠️ +1760⚠️ +1760⚠️ +2520
ESP32/examples/Utilities/SHA1Builder⚠️ +1760⚠️ +2480⚠️ +2480⚠️ +1740⚠️ +1760⚠️ +1780⚠️ +2520
ESP_I2S/examples/ES8388_loopback⚠️ +3460⚠️ +3520⚠️ +3520⚠️ +3460⚠️ +3460⚠️ +3480⚠️ +3520
ESP_I2S/examples/Record_to_WAV⚠️ +3520⚠️ +3680--------⚠️ +3480
ESP_I2S/examples/Simple_tone⚠️ +3400⚠️ +3520⚠️ +3440⚠️ +3460⚠️ +3460⚠️ +3460⚠️ +3480
ESPmDNS/examples/mDNS-SD_Extended⚠️ +1760⚠️ +2720⚠️ +2480⚠️ +1780⚠️ +1760--⚠️ +2400
ESPmDNS/examples/mDNS_Web_Server⚠️ +3280⚠️ +3800⚠️ +3560⚠️ +3280⚠️ +3280--⚠️ +3600
Ethernet/examples/ETH_TLK110⚠️ +3360----------⚠️ +3720
Ethernet/examples/ETH_W5500_Arduino_SPI⚠️ +3400⚠️ +3640⚠️ +3680⚠️ +3400⚠️ +3400⚠️ +3400⚠️ +3640
Ethernet/examples/ETH_W5500_IDF_SPI⚠️ +3400⚠️ +3560⚠️ +3640⚠️ +3400⚠️ +3400⚠️ +3400⚠️ +3680
Ethernet/examples/ETH_WIFI_BRIDGE⚠️ +1760⚠️ +2640⚠️ +2520⚠️ +1760⚠️ +1760--⚠️ +2800
FFat/examples/FFat_Test⚠️ +3440⚠️ +3520⚠️ +3440⚠️ +3440⚠️ +3440⚠️ +3460⚠️ +3480
FFat/examples/FFat_time⚠️ +3440⚠️ +3600⚠️ +3560⚠️ +3440⚠️ +3440--⚠️ +3520
HTTPClient/examples/Authorization⚠️ +3460⚠️ +4080⚠️ +4320⚠️ +3460⚠️ +3460--⚠️ +4200
HTTPClient/examples/BasicHttpClient⚠️ +3460⚠️ +4080⚠️ +4320⚠️ +3460⚠️ +3460--⚠️ +4240
HTTPClient/examples/BasicHttpsClient⚠️ +3460⚠️ +3920⚠️ +4160⚠️ +3460⚠️ +3460--⚠️ +4080
HTTPClient/examples/ReuseConnection⚠️ +3460⚠️ +4120⚠️ +3960⚠️ +3460⚠️ +3460--⚠️ +4160
HTTPClient/examples/StreamHttpClient⚠️ +3460⚠️ +3640⚠️ +4040⚠️ +3460⚠️ +3460--⚠️ +3960
HTTPUpdate/examples/httpUpdate⚠️ +3360⚠️ +3800⚠️ +3720⚠️ +3360⚠️ +3360--⚠️ +3960
HTTPUpdate/examples/httpUpdateSPIFFS⚠️ +3360⚠️ +3840⚠️ +3800⚠️ +3360⚠️ +3360--⚠️ +3800
HTTPUpdate/examples/httpUpdateSecure⚠️ +3460⚠️ +4040⚠️ +4040⚠️ +3460⚠️ +3460--⚠️ +4200
HTTPUpdateServer/examples/WebUpdater⚠️ +3440⚠️ +3840⚠️ +3760⚠️ +3440⚠️ +3440--⚠️ +3840
LittleFS/examples/LITTLEFS_test⚠️ +3440⚠️ +3520⚠️ +3440⚠️ +3440⚠️ +3460⚠️ +3460⚠️ +3480
LittleFS/examples/LITTLEFS_time⚠️ +3440⚠️ +3600⚠️ +3480⚠️ +3440⚠️ +3440--⚠️ +3440
NetBIOS/examples/ESP_NBNST⚠️ +3320⚠️ +3520⚠️ +3120⚠️ +3320⚠️ +3320--⚠️ +3560
NetworkClientSecure/examples/WiFiClientInsecure⚠️ +3460⚠️ +4080⚠️ +4080⚠️ +3460⚠️ +3460--⚠️ +4080
NetworkClientSecure/examples/WiFiClientPSK⚠️ +3460⚠️ +3920⚠️ +4040⚠️ +3460⚠️ +3460--⚠️ +4120
NetworkClientSecure/examples/WiFiClientSecure⚠️ +3460⚠️ +3920⚠️ +4080⚠️ +3460⚠️ +3460--⚠️ +3960
NetworkClientSecure/examples/WiFiClientSecureProtocolUpgrade⚠️ +3620⚠️ +4160⚠️ +3640⚠️ +3620⚠️ +3620--⚠️ +4120
NetworkClientSecure/examples/WiFiClientShowPeerCredentials⚠️ +3460⚠️ +3920⚠️ +4080⚠️ +3460⚠️ +3460--⚠️ +4120
NetworkClientSecure/examples/WiFiClientTrustOnFirstUse⚠️ +3460⚠️ +4040⚠️ +4080⚠️ +3460⚠️ +3460--⚠️ +3960
PPP/examples/PPP_Basic⚠️ +3400⚠️ +3640⚠️ +3560⚠️ +3420⚠️ +3400⚠️ +3420⚠️ +3600
PPP/examples/PPP_WIFI_BRIDGE⚠️ +1760⚠️ +2720⚠️ +2400⚠️ +1760⚠️ +1760--⚠️ +2520
Preferences/examples/Prefs2Struct⚠️ +1760⚠️ +2640⚠️ +2480⚠️ +1760⚠️ +1760⚠️ +1740⚠️ +2360
Preferences/examples/StartCounter⚠️ +1760⚠️ +2640⚠️ +2480⚠️ +1760⚠️ +1760⚠️ +1740⚠️ +2520
SD/examples/SD_Test⚠️ +3440⚠️ +3520⚠️ +3520⚠️ +3440⚠️ +3440⚠️ +3440⚠️ +3520
SD/examples/SD_time⚠️ +3440⚠️ +3480⚠️ +3800⚠️ +3440⚠️ +3440--⚠️ +3440
SD_MMC/examples/SD2USBMSC⚠️ +1720⚠️ +3720----------
SD_MMC/examples/SDMMC_Test⚠️ +3480⚠️ +3520--------⚠️ +3480
SD_MMC/examples/SDMMC_time⚠️ +3440⚠️ +3600--------⚠️ +3520
SPI/examples/SPI_Multiple_Buses⚠️ +1400⚠️ +2400⚠️ +2520⚠️ +1720⚠️ +1720⚠️ +1700⚠️ +2320
SPIFFS/examples/SPIFFS_Test⚠️ +3460⚠️ +3520⚠️ +3440⚠️ +3460⚠️ +3460⚠️ +3460⚠️ +3480
SPIFFS/examples/SPIFFS_time⚠️ +3440⚠️ +3560⚠️ +3480⚠️ +3440⚠️ +3440--⚠️ +3400
TFLiteMicro/examples/hello_world⚠️ +1400⚠️ +2400⚠️ +2520⚠️ +1720⚠️ +1720⚠️ +1720⚠️ +2320
Ticker/examples/Blinker⚠️ +1400⚠️ +2240⚠️ +2520⚠️ +1720⚠️ +1720⚠️ +1720⚠️ +2160
Ticker/examples/TickerBasic⚠️ +1400⚠️ +2240⚠️ +2520⚠️ +1720⚠️ +1720⚠️ +1720⚠️ +2160
Ticker/examples/TickerParameter⚠️ +1400⚠️ +2240⚠️ +2520⚠️ +1720⚠️ +1720⚠️ +1720⚠️ +2160
USB/examples/CompositeDevice⚠️ +3460⚠️ +4000⚠️ +3680--------
USB/examples/ConsumerControl⚠️ +1400⚠️ +3520⚠️ +3560--------
USB/examples/CustomHIDDevice⚠️ +1720⚠️ +3520⚠️ +3520--------
USB/examples/FirmwareMSC⚠️ +1720⚠️ +3680⚠️ +3520--------
USB/examples/Gamepad⚠️ +1720⚠️ +3520⚠️ +3520--------
USB/examples/HIDVendor⚠️ +3380⚠️ +3680⚠️ +3600--------
USB/examples/Keyboard/KeyboardLogout⚠️ +1360⚠️ +3680⚠️ +3560--------
USB/examples/Keyboard/KeyboardMessage⚠️ +1400⚠️ +3680⚠️ +3560--------
USB/examples/Keyboard/KeyboardReprogram⚠️ +1400⚠️ +3520⚠️ +3560--------
USB/examples/Keyboard/KeyboardSerial⚠️ +1740⚠️ +3720⚠️ +3560--------
USB/examples/KeyboardAndMouseControl⚠️ +1740⚠️ +3760⚠️ +3600--------
USB/examples/MIDI/MidiController⚠️ +1720⚠️ +3680⚠️ +3520--------
USB/examples/MIDI/MidiInterface⚠️ +1760⚠️ +3560⚠️ +3560--------
USB/examples/MIDI/MidiMusicBox⚠️ +1720⚠️ +3520⚠️ +3520--------
USB/examples/MIDI/ReceiveMidi⚠️ +1720⚠️ +3520⚠️ +3520--------
USB/examples/Mouse/ButtonMouseControl⚠️ +1380⚠️ +3680⚠️ +3560--------
USB/examples/SystemControl⚠️ +1400⚠️ +3520⚠️ +3560--------
USB/examples/USBMSC⚠️ +1720⚠️ +3680⚠️ +3520--------
USB/examples/USBSerial⚠️ +3380⚠️ +3680⚠️ +3600--------
USB/examples/USBVendor⚠️ +3380⚠️ +3680⚠️ +3600--------
Update/examples/AWS_S3_OTA_Update⚠️ +3280⚠️ +3640⚠️ +3600⚠️ +3280⚠️ +3280--⚠️ +3560
Update/examples/HTTPS_OTA_Update⚠️ +1720⚠️ +2600⚠️ +2640⚠️ +1740⚠️ +1740--⚠️ +2400
Update/examples/HTTP_Client_AES_OTA_Update⚠️ +3360⚠️ +3640⚠️ +3680⚠️ +3360⚠️ +3360--⚠️ +3760
Update/examples/HTTP_Server_AES_OTA_Update⚠️ +3520⚠️ +4040⚠️ +3960⚠️ +3520⚠️ +3520--⚠️ +3960
Update/examples/OTAWebUpdater⚠️ +3360⚠️ +3800⚠️ +3600⚠️ +3360⚠️ +3360--⚠️ +3680
Update/examples/SD_Update⚠️ +3440⚠️ +3520⚠️ +3480⚠️ +3440⚠️ +3440⚠️ +3440⚠️ +3480
WebServer/examples/AdvancedWebServer⚠️ +3280⚠️ +3720⚠️ +3480⚠️ +3280⚠️ +3280--⚠️ +3560
WebServer/examples/FSBrowser⚠️ +3360⚠️ +3640⚠️ +3840⚠️ +3360⚠️ +3360--⚠️ +3880
WebServer/examples/Filters⚠️ +3280⚠️ +3600⚠️ +3560⚠️ +3280⚠️ +3280--⚠️ +3600
WebServer/examples/HelloServer⚠️ +3280⚠️ +3600⚠️ +3560⚠️ +3280⚠️ +3280--⚠️ +3600
WebServer/examples/HttpAdvancedAuth⚠️ +3280⚠️ +3720⚠️ +3760⚠️ +3280⚠️ +3280--⚠️ +3840
WebServer/examples/HttpAuthCallback⚠️ +3280⚠️ +3960⚠️ +3760⚠️ +3280⚠️ +3280--⚠️ +3920
WebServer/examples/HttpAuthCallbackInline⚠️ +3280⚠️ +3920⚠️ +3800⚠️ +3280⚠️ +3280--⚠️ +3920
WebServer/examples/HttpBasicAuth⚠️ +3280⚠️ +3920⚠️ +3760⚠️ +3280⚠️ +3280--⚠️ +3840
WebServer/examples/HttpBasicAuthSHA1⚠️ +3280⚠️ +3760⚠️ +3880⚠️ +3280⚠️ +3280--⚠️ +3800
WebServer/examples/HttpBasicAuthSHA1orBearerToken⚠️ +3280⚠️ +3640⚠️ +3840⚠️ +3280⚠️ +3280--⚠️ +3600
WebServer/examples/MultiHomedServers⚠️ +3280⚠️ +3680⚠️ +3640⚠️ +3280⚠️ +3280--⚠️ +3560
WebServer/examples/PathArgServer⚠️ +3280⚠️ +3520⚠️ +3600⚠️ +3280⚠️ +3280--⚠️ +3600
WebServer/examples/SDWebServer⚠️ +3360⚠️ +3640⚠️ +3680⚠️ +3360⚠️ +3360--⚠️ +3720
WebServer/examples/SimpleAuthentification⚠️ +3280⚠️ +3640⚠️ +3920⚠️ +3280⚠️ +3280--⚠️ +3360
WebServer/examples/UploadHugeFile⚠️ +3360⚠️ +3680⚠️ +3880⚠️ +3360⚠️ +3360--⚠️ +3600
WebServer/examples/WebServer⚠️ +3440⚠️ +3720⚠️ +3800⚠️ +3440⚠️ +3440--⚠️ +3840
WebServer/examples/WebUpdate⚠️ +3280⚠️ +3680⚠️ +3560⚠️ +3280⚠️ +3280--⚠️ +3600
WiFi/examples/FTM/FTM_Initiator⚠️ +1720⚠️ +2520⚠️ +2560⚠️ +1720⚠️ +1720--⚠️ +2360
WiFi/examples/FTM/FTM_Responder⚠️ +1740⚠️ +2720⚠️ +2520⚠️ +1740⚠️ +1760--⚠️ +2360
WiFi/examples/SimpleWiFiServer⚠️ +3400⚠️ +3640⚠️ +3640⚠️ +3400⚠️ +3400--⚠️ +3640
WiFi/examples/WiFiAccessPoint⚠️ +3400⚠️ +3640⚠️ +3600⚠️ +3400⚠️ +3400--⚠️ +3680
WiFi/examples/WiFiClient⚠️ +3240⚠️ +3640⚠️ +3600⚠️ +3240⚠️ +3240--⚠️ +3560
WiFi/examples/WiFiClientBasic⚠️ +3240⚠️ +3680⚠️ +3400⚠️ +3240⚠️ +3240--⚠️ +3640
WiFi/examples/WiFiClientConnect⚠️ +1740⚠️ +2480⚠️ +2480⚠️ +1720⚠️ +1720--⚠️ +2600
WiFi/examples/WiFiClientEvents⚠️ +1700⚠️ +2480⚠️ +2440⚠️ +1740⚠️ +1720--⚠️ +2560
WiFi/examples/WiFiClientStaticIP⚠️ +3240⚠️ +3680⚠️ +3560⚠️ +3240⚠️ +3240--⚠️ +3600
WiFi/examples/WiFiExtender⚠️ +1720⚠️ +2600⚠️ +2680⚠️ +1720⚠️ +1720--⚠️ +2600
WiFi/examples/WiFiIPv6⚠️ +3380⚠️ +3680⚠️ +3840⚠️ +3340⚠️ +3340--⚠️ +3520
WiFi/examples/WiFiMulti⚠️ +1760⚠️ +2640⚠️ +2680⚠️ +1760⚠️ +1760--⚠️ +2320
WiFi/examples/WiFiMultiAdvanced⚠️ +3460⚠️ +3920⚠️ +4080⚠️ +3460⚠️ +3460--⚠️ +4160
WiFi/examples/WiFiScan⚠️ +1720⚠️ +2640⚠️ +2640⚠️ +1740⚠️ +1720--⚠️ +2360
WiFi/examples/WiFiScanAsync⚠️ +1700⚠️ +2800⚠️ +2560⚠️ +1760⚠️ +1760--⚠️ +2520
WiFi/examples/WiFiScanDualAntenna⚠️ +1720⚠️ +2680⚠️ +2440⚠️ +1740⚠️ +1740--⚠️ +2520
WiFi/examples/WiFiScanTime⚠️ +1720⚠️ +2640⚠️ +2640⚠️ +1740⚠️ +1720--⚠️ +2360
WiFi/examples/WiFiTelnetToSerial⚠️ +3400⚠️ +3480⚠️ +3600⚠️ +3400⚠️ +3400--⚠️ +3560
WiFi/examples/WiFiUDPClient⚠️ +3360⚠️ +3680⚠️ +3640⚠️ +3360⚠️ +3360--⚠️ +3560
Wire/examples/WireMaster⚠️ +3380⚠️ +3520⚠️ +3440⚠️ +3400⚠️ +3380⚠️ +3380⚠️ +3520
Wire/examples/WireScan⚠️ +3380⚠️ +3520⚠️ +3440⚠️ +3400⚠️ +3380⚠️ +3380⚠️ +3520
Wire/examples/WireSlave⚠️ +3380⚠️ +3520⚠️ +3440⚠️ +3380⚠️ +3380⚠️ +3400⚠️ +3520
BLE/examples/BLE5_extended_scan--⚠️ +2800--⚠️ +1720⚠️ +1720⚠️ +1720--
BLE/examples/BLE5_multi_advertising--⚠️ +2480--⚠️ +1720⚠️ +1720⚠️ +1720--
BLE/examples/BLE5_periodic_advertising--⚠️ +2520--⚠️ +1720⚠️ +1720⚠️ +1720--
BLE/examples/BLE5_periodic_sync--⚠️ +2480--⚠️ +1720⚠️ +1720⚠️ +1720--
BLE/examples/Beacon_Scanner--⚠️ +2480--⚠️ +1720⚠️ +1720⚠️ +1720⚠️ +2520
BLE/examples/Client--⚠️ +2520--⚠️ +1720⚠️ +1720⚠️ +1720⚠️ +2560
BLE/examples/EddystoneTLM_Beacon--⚠️ +2520--⚠️ +1720⚠️ +1720⚠️ +1720⚠️ +2360
BLE/examples/EddystoneURL_Beacon--⚠️ +2680--⚠️ +1720⚠️ +1720⚠️ +1720⚠️ +2400
BLE/examples/Notify--⚠️ +2640--⚠️ +1720⚠️ +1720⚠️ +1720⚠️ +2040
BLE/examples/Scan--⚠️ +2680--⚠️ +1720⚠️ +1720⚠️ +1720⚠️ +2360
BLE/examples/Server--⚠️ +2560--⚠️ +1720⚠️ +1720⚠️ +1720⚠️ +2400
BLE/examples/Server_multiconnect--⚠️ +2520--⚠️ +1720⚠️ +1720⚠️ +1720⚠️ +2600
BLE/examples/UART--⚠️ +2640--⚠️ +1720⚠️ +1720⚠️ +1720⚠️ +2600
BLE/examples/Write--⚠️ +2520--⚠️ +1720⚠️ +1720⚠️ +1720⚠️ +2600
BLE/examples/iBeacon--⚠️ +2720--⚠️ +1720⚠️ +1720⚠️ +1720⚠️ +2560
ESP32/examples/Camera/CameraWebServer (1)--⚠️ +2520⚠️ +2480------⚠️ +2600
ESP32/examples/Camera/CameraWebServer (2)--⚠️ +2320⚠️ +2520------⚠️ +2600
ESP32/examples/Camera/CameraWebServer (3)--⚠️ +2320----------
ESP32/examples/DeepSleep/ExternalWakeUp--⚠️ +2480⚠️ +2480------⚠️ +2360
ESP_NOW/examples/ESP_NOW_Broadcast_Master--⚠️ +2440⚠️ +2520⚠️ +1740⚠️ +1740--⚠️ +2560
ESP_NOW/examples/ESP_NOW_Broadcast_Slave--⚠️ +2720⚠️ +2480⚠️ +1720⚠️ +1740--⚠️ +2360
ESP_NOW/examples/ESP_NOW_Network--⚠️ +2280⚠️ +2440⚠️ +1760⚠️ +1760--⚠️ +2560
ESP_NOW/examples/ESP_NOW_Serial--⚠️ +3720⚠️ +3720⚠️ +3420⚠️ +3420--⚠️ +3520
ESP_SR/examples/Basic--⚠️ +3600----------
HTTPClient/examples/HTTPClientEnterprise--⚠️ +4040⚠️ +4080⚠️ +3540⚠️ +3540--⚠️ +4280
Insights/examples/DiagnosticsSmokeTest--⚠️ +2400⚠️ +2480⚠️ +1720⚠️ +1740--⚠️ +2400
Insights/examples/MinimalDiagnostics--⚠️ +2560⚠️ +2600⚠️ +1760⚠️ +1760--⚠️ +2200
Matter/examples/MatterColorLight--⚠️ +2640⚠️ +2480⚠️ +1760⚠️ +1760--⚠️ +2360
Matter/examples/MatterCommissionTest--⚠️ +2000⚠️ +2600⚠️ +1800⚠️ +1740--⚠️ +2680
Matter/examples/MatterComposedLights--⚠️ +2640⚠️ +2560⚠️ +1760⚠️ +1760--⚠️ +2040
Matter/examples/MatterContactSensor--⚠️ +2440⚠️ +2440⚠️ +1760⚠️ +1740--⚠️ +2440
Matter/examples/MatterDimmableLight--⚠️ +2280⚠️ +2560⚠️ +1720⚠️ +1760--⚠️ +2400
Matter/examples/MatterEnhancedColorLight--⚠️ +2440⚠️ +2520⚠️ +1760⚠️ +1760--⚠️ +2600
Matter/examples/MatterFan--⚠️ +2680⚠️ +2240⚠️ +1680⚠️ +1700--⚠️ +2360
Matter/examples/MatterHumiditySensor--⚠️ +2680⚠️ +2640⚠️ +1760⚠️ +1800--⚠️ +2480
Matter/examples/MatterMinimum--⚠️ +2520⚠️ +2440⚠️ +1780⚠️ +1740--⚠️ +2600
Matter/examples/MatterOccupancySensor--⚠️ +2520⚠️ +2560⚠️ +1780⚠️ +1740--⚠️ +2440
Matter/examples/MatterOnIdentify--⚠️ +2520⚠️ +2560⚠️ +1720⚠️ +1760--⚠️ +2440
Matter/examples/MatterOnOffLight--⚠️ +2360⚠️ +2560⚠️ +1720⚠️ +1720--⚠️ +2560
Matter/examples/MatterOnOffPlugin--⚠️ +2440⚠️ +2560⚠️ +1720⚠️ +1720--⚠️ +2320
Matter/examples/MatterPressureSensor--⚠️ +2680⚠️ +2560⚠️ +1760⚠️ +1800--⚠️ +2480
Matter/examples/MatterSmartButon--⚠️ +2600⚠️ +2640⚠️ +1720⚠️ +1740--⚠️ +2600
Matter/examples/MatterTemperatureLight--⚠️ +2600⚠️ +2480⚠️ +1760⚠️ +1760--⚠️ +2400
Matter/examples/MatterTemperatureSensor--⚠️ +2520⚠️ +2560⚠️ +1780⚠️ +1780--⚠️ +2440
Matter/examples/MatterThermostat--⚠️ +2600⚠️ +2520⚠️ +1740⚠️ +1740--⚠️ +2360
Matter/examples/WiFiProvWithinMatter--⚠️ +2400⚠️ +2560⚠️ +1740⚠️ +1740--⚠️ +2360
NetworkClientSecure/examples/WiFiClientSecureEnterprise--⚠️ +4160⚠️ +4080⚠️ +3540⚠️ +3540--⚠️ +4080
RainMaker/examples/RMakerCustom--⚠️ +2480⚠️ +2440⚠️ +1720⚠️ +1740----
RainMaker/examples/RMakerCustomAirCooler--⚠️ +2240⚠️ +2480⚠️ +1720⚠️ +1720----
RainMaker/examples/RMakerSonoffDualR3--⚠️ +2720⚠️ +2560⚠️ +1740⚠️ +1740----
RainMaker/examples/RMakerSwitch--⚠️ +2640⚠️ +2560⚠️ +1720⚠️ +1720----
SimpleBLE/examples/SimpleBleDevice--⚠️ +2440--⚠️ +1740⚠️ +1760⚠️ +1740⚠️ +2560
WebServer/examples/Middleware--⚠️ +3840⚠️ +3720⚠️ +3360⚠️ +3360--⚠️ +3800
WiFi/examples/WPS--⚠️ +2640⚠️ +2560⚠️ +1760⚠️ +1740--⚠️ +2600
WiFi/examples/WiFiBlueToothSwitch--⚠️ +2560--⚠️ +1760⚠️ +1700--⚠️ +2400
WiFi/examples/WiFiClientEnterprise--⚠️ +3720⚠️ +3600⚠️ +3240⚠️ +3240--⚠️ +3560
WiFi/examples/WiFiSmartConfig--⚠️ +2480⚠️ +2480⚠️ +1760⚠️ +1780--⚠️ +2640
WiFiProv/examples/WiFiProv--⚠️ +2360⚠️ +2520⚠️ +1780⚠️ +1760--⚠️ +2480
Zigbee/examples/Zigbee_Color_Dimmer_Switch--⚠️ +2200⚠️ +2080⚠️ +900⚠️ +940⚠️ +920⚠️ +1880
Zigbee/examples/Zigbee_Gateway--⚠️ +2040⚠️ +2520⚠️ +1760----⚠️ +2280
Zigbee/examples/Zigbee_On_Off_Switch--⚠️ +2600⚠️ +2560⚠️ +1760⚠️ +1760⚠️ +1760⚠️ +2560
Zigbee/examples/Zigbee_Range_Extender--⚠️ +2600⚠️ +2560⚠️ +1760⚠️ +1760⚠️ +1760⚠️ +2640
Zigbee/examples/Zigbee_Thermostat--⚠️ +2480⚠️ +2520⚠️ +1760⚠️ +1760⚠️ +1740⚠️ +2640
OpenThread/examples/COAP/coap_lamp--------⚠️ +3280⚠️ +3280--
OpenThread/examples/COAP/coap_switch--------⚠️ +3240⚠️ +3260--
OpenThread/examples/SimpleCLI--------⚠️ +3340⚠️ +3340--
OpenThread/examples/SimpleNode--------⚠️ +3480⚠️ +3500--
OpenThread/examples/SimpleThreadNetwork/ExtendedRouterNode--------⚠️ +3480⚠️ +3500--
OpenThread/examples/SimpleThreadNetwork/LeaderNode--------⚠️ +3360⚠️ +3340--
OpenThread/examples/SimpleThreadNetwork/RouterNode--------⚠️ +3340⚠️ +3340--
OpenThread/examples/ThreadScan--------⚠️ +3300⚠️ +3280--
OpenThread/examples/onReceive--------⚠️ +3340⚠️ +3360--
Zigbee/examples/Zigbee_Analog_Input_Output--------⚠️ +1720⚠️ +1720--
Zigbee/examples/Zigbee_CarbonDioxide_Sensor--------⚠️ +1760⚠️ +1740--
Zigbee/examples/Zigbee_Color_Dimmable_Light--------⚠️ +1740⚠️ +1740--
Zigbee/examples/Zigbee_Contact_Switch--------⚠️ +1760⚠️ +1760--
Zigbee/examples/Zigbee_Dimmable_Light--------⚠️ +1760⚠️ +1740--
Zigbee/examples/Zigbee_Illuminance_Sensor--------⚠️ +1700⚠️ +1720--
Zigbee/examples/Zigbee_OTA_Client--------⚠️ +1760⚠️ +1760--
Zigbee/examples/Zigbee_Occupancy_Sensor--------⚠️ +1760⚠️ +1760--
Zigbee/examples/Zigbee_On_Off_Light--------⚠️ +1760⚠️ +1760--
Zigbee/examples/Zigbee_PM25_Sensor--------⚠️ +1760⚠️ +1760--
Zigbee/examples/Zigbee_Pressure_Flow_Sensor--------⚠️ +1760⚠️ +1760--
Zigbee/examples/Zigbee_Scan_Networks--------⚠️ +1760⚠️ +1760--
Zigbee/examples/Zigbee_Temp_Hum_Sensor_Sleepy--------⚠️ +1760⚠️ +1760--
Zigbee/examples/Zigbee_Temperature_Sensor--------⚠️ +1760⚠️ +1740--
Zigbee/examples/Zigbee_Vibration_Sensor--------⚠️ +1760⚠️ +1740--
Zigbee/examples/Zigbee_Wind_Speed_Sensor--------⚠️ +1760⚠️ +1720--
Zigbee/examples/Zigbee_Window_Covering--------⚠️ +1780⚠️ +1780--
BluetoothSerial/examples/DiscoverConnect------------⚠️ +3600
BluetoothSerial/examples/GetLocalMAC------------⚠️ +3600
BluetoothSerial/examples/SerialToSerialBT------------⚠️ +3440
BluetoothSerial/examples/SerialToSerialBTM------------⚠️ +3600
BluetoothSerial/examples/SerialToSerialBT_Legacy------------⚠️ +3600
BluetoothSerial/examples/SerialToSerialBT_SSP------------⚠️ +3720
BluetoothSerial/examples/bt_classic_device_discovery------------⚠️ +3600
BluetoothSerial/examples/bt_remove_paired_devices------------⚠️ +3520
ESP32/examples/DeepSleep/SmoothBlink_ULP_Code------------⚠️ +2520
Ethernet/examples/ETH_LAN8720------------⚠️ +3720

@SuGlider
Copy link
Collaborator

@imwhocodes - I have a question:

Currently, ESP32 Stream Class has Stream::TimedRead() and Stream::TimedPeek().
https://github.com/espressif/arduino-esp32/blob/master/cores/esp32/Stream.h#L48-L53

Both are not virtual, but implemented in Stream.cpp
https://github.com/espressif/arduino-esp32/blob/master/cores/esp32/Stream.cpp#L31-L54

ESP32 HardwareSerial + CDC Classes has the Stream Class implementation by Inheritance.
https://github.com/espressif/arduino-esp32/blob/master/cores/esp32/HardwareSerial.h#L263
https://github.com/espressif/arduino-esp32/blob/master/cores/esp32/HWCDC.h#L46
https://github.com/espressif/arduino-esp32/blob/master/cores/esp32/USBCDC.h#L62

Therefore, with the current code, it is possible to execute Stream methods:

// It should be tested within an ESP32-S3 using UART, HW CDC and OTG CDC

char buffer[100];

void setup() {
  Serial.setTimeout(10000); // reading Stream methods timeout - 10 seconds
  Serial.begin(115200);
}

void loop() {
  Serial.println("===============================================================");
  size_t numBytesRead = 0;
  buffer[0] = '\0';
  Serial.println("Send some text with up to 10 bytes using  the Serial Monitor");
  numBytesRead  = Serial.readBytes(buffer, 10);
  buffer[numBytesRead] = '\0';
  Serial.printf("Got %d bytes [%s]\r\n", numBytesRead, buffer);

  buffer[0] = '\0';
  Serial.println("Send some text with a '#' that will terminate the Bytes reading");
  numBytesRead  = Serial.readBytesUntil('#', buffer, 10);
  buffer[numBytesRead] = '\0';
  Serial.printf("Got %d bytes [%s]\r\n", numBytesRead, buffer);
  
  Serial.println("Send some text with a '#' that will terminate the String reading");
  String Sbuffer  = Serial.readStringUntil('#');
  Serial.printf("Got %d bytes [%s]\r\n", Sbuffer.length() , Sbuffer.c_str());
}

OUTPUT - respects the timeout correctly

16:10:09.727 -> ets Jul 29 2019 12:21:46
16:10:09.727 -> 
16:10:09.727 -> rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
16:10:09.727 -> configsip: 0, SPIWP:0xee
16:10:09.727 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
16:10:09.727 -> mode:DIO, clock div:1
16:10:09.775 -> load:0x3fff0030,len:4888
16:10:09.775 -> load:0x40078000,len:16516
16:10:09.775 -> load:0x40080400,len:4
16:10:09.775 -> load:0x40080404,len:3476
16:10:09.775 -> entry 0x400805b4
16:10:09.871 -> ===============================================================
16:10:09.871 -> Send some text with up to 10 bytes using  the Serial Monitor
16:10:19.868 -> Got 0 bytes []
16:10:19.868 -> Send some text with a '#' that will terminate the Bytes reading
16:10:29.856 -> Got 0 bytes []
16:10:29.856 -> Send some text with a '#' that will terminate the String reading
16:10:39.898 -> Got 0 bytes []
16:10:39.898 -> ===============================================================
16:10:39.898 -> Send some text with up to 10 bytes using  the Serial Monitor
16:10:41.869 -> Got 10 bytes [012345678#]
16:10:41.869 -> Send some text with a '#' that will terminate the Bytes reading
16:10:43.547 -> Got 9 bytes [012345678]
16:10:43.547 -> Send some text with a '#' that will terminate the String reading
16:10:44.649 -> Got 9 bytes [012345678]
16:10:44.649 -> ===============================================================

@imwhocodes - Have you found an example that does work correctly?

@SuGlider SuGlider added Status: Awaiting Response awaiting a response from the author and removed Status: Review needed Issue or PR is awaiting review labels Apr 14, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Peripheral: UART Status: Awaiting Response awaiting a response from the author
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants