From 96da55d83aeadd92ac9e57dec9a38057b1b35f67 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Wed, 10 Aug 2016 10:34:14 -0700 Subject: [PATCH] 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. --- firmware/baseband/baseband_dma.cpp | 7 +++++-- firmware/baseband/baseband_dma.hpp | 2 +- firmware/baseband/baseband_thread.cpp | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/firmware/baseband/baseband_dma.cpp b/firmware/baseband/baseband_dma.cpp index d86bef72e..4fc1fdd8f 100644 --- a/firmware/baseband/baseband_dma.cpp +++ b/firmware/baseband/baseband_dma.cpp @@ -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(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(&LPC_SGPIO->REG_SS[0])) ? dst : src; + return { reinterpret_cast(p), transfer_samples }; } else { return { }; } diff --git a/firmware/baseband/baseband_dma.hpp b/firmware/baseband/baseband_dma.hpp index 94827d4bc..56752ddcc 100644 --- a/firmware/baseband/baseband_dma.hpp +++ b/firmware/baseband/baseband_dma.hpp @@ -42,7 +42,7 @@ bool is_enabled(); void disable(); -baseband::buffer_t wait_for_rx_buffer(); +baseband::buffer_t wait_for_buffer(); } /* namespace dma */ } /* namespace baseband */ diff --git a/firmware/baseband/baseband_thread.cpp b/firmware/baseband/baseband_thread.cpp index 0784d9bd6..926e4fb0f 100644 --- a/firmware/baseband/baseband_thread.cpp +++ b/firmware/baseband/baseband_thread.cpp @@ -77,7 +77,7 @@ void BasebandThread::run() { while( !chThdShouldTerminate() ) { // TODO: Place correct sampling rate into buffer returned here: - const auto buffer_tmp = baseband::dma::wait_for_rx_buffer(); + const auto buffer_tmp = baseband::dma::wait_for_buffer(); if( buffer_tmp ) { buffer_c8_t buffer { buffer_tmp.p, buffer_tmp.count, sampling_rate