OXape reports: http://www.rt-thread.org/phpBB3/topic3939.html
driver/ringbuffer: when data length is bigger than space length
for rb, the read_index in rb is not update.
When length > space, update the read_index, the bug can be fix, and
works fine.
This reverts commit 5aeedc4f3a3c3fcfffb0cd4a474f5faa75053839, reversing
changes made to 3d80e414ff6c03ff04fecb914e7aa9b3fb535e03.
This merge breaks every uart driver in all BSPs. @bright-pan , is there
any way to get this done without breaking existing code?
This reverts commit 07bd09fc0fc256e5c53ad3c6157802fd94c9910c.
The validation of the context is done with in `rt_set_errno`. So it's
safe to call it here.
When forwarding rx/tx callback from the underlaying device(pipe), the
"dev" argument should be the portal. So the portal callback could think
itself as called.
Portal is a device that connect devices. Currently, you can only connect
pipes in portal. Pipes are unidirectional. But with portal, you can
construct a bidirectional device with two pipes.
Some reader(FinSh again) would like to block on a semaphore which is
released in rx_indicate. So we should invoke rx_indicate in
_rt_pipe_resume_reader.
The previous implementation will always blocks the reader/writer.
However, at least FinSh would expect the device to be nonblocking ---
read should return 0 when there is no data in it.
RT_RINGBUFFER_SIZE could mean "the size of the whole buffer", "the size
of the empty space" or "the size of the data". Moreover, it's never a
micro anymore. Change it to rt_ringbuffer_data_len before it's too late.
Also, RT_RINGBUFFER_EMPTY is changed to rt_ringbuffer_space_len.
This provide the possibility that allocate the buffer of the ringbuffer
on a specific region, instead of always mallocing it. It also bring us
the benefit of using pipe device on the systems without heap.