Skip to content

core: Improve Serial implements#206

Open
soburi wants to merge 1 commit into
zephyrproject-rtos:nextfrom
soburi:improve_serial
Open

core: Improve Serial implements#206
soburi wants to merge 1 commit into
zephyrproject-rtos:nextfrom
soburi:improve_serial

Conversation

@soburi

@soburi soburi commented Jul 5, 2026

Copy link
Copy Markdown
Member
  • Refactored ZephyrSerial's send/receive logic and protected the RX/TX ring buffers with semaphores.
  • Modified write() to write the entire payload by calling yield() if the data exceeds buffer capacity.
  • Added support for availableForWrite(), flush(), and the Print::write overload to align with the Arduino Core implementation.
  • UART re-initialization logic move to _reinit_if_needed().
  • Added a mechanism to shift the standard UART to Serial1 (or higher) if Serial is occupied by cdc_acm_serial or arduino_router_serial.
  • Added macros (such as ARDUINO_CONSOLE_SERIAL and ARDUINO_HARDWARE_SERIAL) to reference Serial objects based on their specific use cases.

Copilot AI review requested due to automatic review settings July 5, 2026 05:00

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

This PR refactors the Arduino Zephyr serial implementation to better align with Arduino Core semantics (buffering, Print overloads, availableForWrite(), and flush()), and adds Devicetree-driven macros to select the appropriate Serial* object for console/hardware/USB/router use cases.

Changes:

  • Refactors TX/RX buffering and introduces semaphore-protected access patterns, plus UART re-init via _reinit_if_needed().
  • Updates write() behavior to push the full payload (yielding when buffers are full), and adds availableForWrite()/flush()/Print::write overload visibility.
  • Adds macro infrastructure to map/alias Serial objects based on Devicetree (console serial, hardware serial, USB CDC ACM serial, and router serial).

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 5 comments.

File Description
cores/arduino/zephyrSerial.h Adds new serial selection/indexing macros and updates the ZephyrSerial interface (flush(), availableForWrite(), Print::write overloads).
cores/arduino/zephyrSerial.cpp Refactors IRQ handling and TX/RX operations, implements flush() and availableForWrite(), and updates serial object instantiation/event hooks.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread cores/arduino/zephyrSerial.cpp
Comment thread cores/arduino/zephyrSerial.cpp
Comment thread cores/arduino/zephyrSerial.cpp
Comment thread cores/arduino/zephyrSerial.cpp
Comment thread cores/arduino/zephyrSerial.h
- Refactored ZephyrSerial's send/receive logic and protected the RX/TX
  ring buffers with semaphores.
- Modified `write()` to write the entire payload by calling `yield()`
  if the data exceeds buffer capacity.
- Added support for `availableForWrite()`, `flush()`, and the `Print::write`
  overload to align with the Arduino Core implementation.
- UART re-initialization logic move to `_reinit_if_needed()`.
- Added a mechanism to shift the standard UART to `Serial1` (or higher)
  if `Serial` is occupied by `cdc_acm_serial` or `arduino_router_serial`.
- Added macros (such as `ARDUINO_CONSOLE_SERIAL` and `ARDUINO_HARDWARE_SERIAL`)
  to reference `Serial` objects based on their specific use cases.

Co-authored-by: Kurt Eckhardt <kurte@rockisland.com>
Co-authored-by: Luca Burelli <l.burelli@arduino.cc>
Co-authored-by: Martino Facchin <m.facchin@arduino.cc>
Co-authored-by: Mattia Pennasilico <m.pennasilico@arduino.cc>
Co-authored-by: Tamas Jozsi <tamas.jozsi@silabs.com>
Co-authored-by: iabdalkader <i.abdalkader@gmail.com>
Co-authored-by: kurte <kurte@rockisland.com>
Co-authored-by: pennam <m.pennasilico@arduino.cc>
Signed-off-by: TOKITA Hiroshi <tokita.hiroshi@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants