-
Notifications
You must be signed in to change notification settings - Fork 6.8k
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
uart_native_tty: Emulate an interrupt driven uart #68857
uart_native_tty: Emulate an interrupt driven uart #68857
Conversation
4ccdbdd
to
052072e
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A few nits, and a more significant comment.
Emulate SERIAL_SUPPORT_INTERRUPT for UART_NATIVE_TTY, using a thread that polls the tty and invokes the callback. This allows interrupt-driven subsystems such as modbus to use a native tty, which is useful for testing purposes. Signed-off-by: Björn Stenberg <[email protected]>
052072e
to
64ea668
Compare
Rebased and updated this thread-based patch. My schedule filled up faster than I hoped. I propose merging this as a first step and come back at a later time with an event-based version. |
Thanks @zagor
That is fair, the other proposal is certainly much more work. I will do another review pass to this one. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
+1 for native side integration. I defer to @dcpleung for the UART API integration
This driver only supports poll mode and interrupt mode. Async mode is not | ||
supported. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think the first paragraph of this section now also requires updating. It currently says "With this driver an application can use the polling UART API (uart_poll_out, uart_poll_in) to write and read characters to and from a connected serial port device."
cc @aescolar
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
BTW, would it make sense / be possible to have the same approach for the uart_native_pty driver?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@kartben Sure, I guess nobody though it worthwhile so far
} else { | ||
k_sleep(K_MSEC(1)); | ||
} | ||
} else if (data->tx_irq_enabled) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is it possible that this should be an 'if' instead of an 'else if'? rx_irq_enabled is only set false while reading the receive buffer, so data could never be transmitted in my case.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It seems like a bug. @ct-fk Would you like to send a PR with the fix?
Emulate SERIAL_SUPPORT_INTERRUPT for UART_NATIVE_TTY, using a thread that
polls the tty and invokes the callback.
This allows interrupt-driven subsystems such as modbus to use a native tty,
which is useful for testing purposes.