Hi @blippy, sorry for the late answer. Your question is quite broad, but I’ll try to answer as best as I can:
I can’t print to serial, but I can’t figure out how to read a char. getc() and stdio_read() doesn’t seem to work.
RIOT is a very very modular system you only pull in what you need/want to use. But that means you actually to pull it in, so depending on what application you are testing or running that might or not be the case. Here you seem to be using the stdio
library. This is not really related to RIOT, stdin
has standard functions to print to stdout
and read from stdin
, so exactly the ones you mention.
But by default as you found out stdio
is included but stdio_uart
is a special case where stdin
has tobe pulled in (pulling stdio_uart_rx
also works but stdin
is actually the one that selects stdio_uart_rx
. But other stdio
modules do not need to do this. This I agree could use some more love with documentation.
The closest I can seem to get is to call uart_init(). It takes an argument rx_cb that is called for every byte received. It states that the RX buffer is filled, but the docs don’t tell me how to access the buffer.
What do I need to do? A complete example would be useful.
You can also choose not to include stdio
and tap into the uart peripheral directly. iotlab-training has an uart example you could get inspired by. There are also examples in the RIOT tree.
Ah, OK, it appears that if I want non-blocking, I can use use uart_init() with a callback, which takes a void *arg (not sure what practical use that would be), as well as the byte received.
Well the [stdio uart implemntation](Ah, OK, it appears that if I want non-blocking, I can use use uart_init() with a callback, which takes a void *arg (not sure what practical use that would be), as well as the byte received.) uses this to pass the descriptor to the pipe.
I haven’t tried the non-blocking out, though.
stdin
function you are using are blocking, you can either put those into a thread, or you can use uart
directly and read from that buffer at your own speed. tsrb and ringbuffer could be of use here.