wait_for_buffer() now handles TX buffers.

Feels a bit awkward to read LLI src/dest to determine if RX or TX. But it works.
This commit is contained in:
Jared Boone 2016-08-10 10:34:14 -07:00
parent c8af6dcd70
commit 96da55d83a
3 changed files with 7 additions and 4 deletions

View file

@ -156,12 +156,15 @@ void disable() {
gpdma_channel_sgpio.disable();
}
baseband::buffer_t wait_for_rx_buffer() {
baseband::buffer_t wait_for_buffer() {
const auto next_index = thread_wait.sleep();
if( next_index >= 0 ) {
const size_t free_index = (next_index + transfers_per_buffer - 2) & transfers_mask;
return { reinterpret_cast<sample_t*>(lli_loop[free_index].destaddr), transfer_samples };
const auto src = lli_loop[free_index].srcaddr;
const auto dst = lli_loop[free_index].destaddr;
const auto p = (src == reinterpret_cast<uint32_t>(&LPC_SGPIO->REG_SS[0])) ? dst : src;
return { reinterpret_cast<sample_t*>(p), transfer_samples };
} else {
return { };
}