You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Linux UART does not time out while receiving (Raspberry PI) #288
I successfully built and used the library on my Raspberry PI.
But one thing I noticed is that read() in hal_uart_receive() (hal_linux_uart_userspace.c) did not time out when nothing is received. So it just blocked my application.
In hal_uart_open_file() the read timeout is set to 500ms. // hal_linux_uart_userspace.c line 146 tty.c_cc[VTIME] = 5;
But read() still does not time out, so I did some digging and found a solution by setting VMIN in the termios struct to zero. tty.c_cc[VMIN] = 0;
It would have to be tested - there are a couple of usecases for the uart usage. Kit protocol (which is basic ascii frames) and SWI which is more complicated (oversampling). In the later case the rx & tx lines are tied together.
Were you using kit protocol to communicate with a development board (i.e. with the kit_host from the app folder on the other side) or were you trying to work with a SWI device?
Sorry, I forgot to mention. I was communicating with a SWI device (ATSHA204A) and had RX & TX tied together.
The communication worked fine, but one time I forgot to power the device and I noticed that the program got stuck due to the blocking read() call.
Activity
bryan-hunt commentedon Mar 23, 2022
It would have to be tested - there are a couple of usecases for the uart usage. Kit protocol (which is basic ascii frames) and SWI which is more complicated (oversampling). In the later case the rx & tx lines are tied together.
Were you using kit protocol to communicate with a development board (i.e. with the kit_host from the app folder on the other side) or were you trying to work with a SWI device?
StWandl commentedon Mar 25, 2022
Sorry, I forgot to mention. I was communicating with a SWI device (ATSHA204A) and had RX & TX tied together.
The communication worked fine, but one time I forgot to power the device and I noticed that the program got stuck due to the blocking read() call.
bryan-hunt commentedon Mar 25, 2022
Thanks for the additional details. This does make sense to modify given the SWI usecase generally revolves around removable components.