From 0492d41d97c9309d2a542fca54c7b51c34707173 Mon Sep 17 00:00:00 2001 From: Fabrizio Monti <fabrizio.monti@skywarder.eu> Date: Fri, 14 Feb 2025 23:20:33 +0100 Subject: [PATCH] [DMA] Added simple scope guard class for DMAStream. --- src/shared/drivers/dma/DMA.h | 24 +++++++++++++++++++++++ src/tests/drivers/test-dma-mem-to-mem.cpp | 6 +++--- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/shared/drivers/dma/DMA.h b/src/shared/drivers/dma/DMA.h index 3bb976f0f..6fd45988b 100644 --- a/src/shared/drivers/dma/DMA.h +++ b/src/shared/drivers/dma/DMA.h @@ -416,4 +416,28 @@ public: DMAStream& operator=(const DMAStream&) = delete; }; +class DMAStreamGuard +{ +public: + DMAStreamGuard(DMAStream* ptr) : pStream(ptr) {} + + ~DMAStreamGuard() + { + if (pStream != nullptr) + { + DMADriver::instance().releaseStream(pStream->getStreamId()); + } + } + + DMAStreamGuard(const DMAStreamGuard&) = delete; + DMAStreamGuard& operator=(const DMAStreamGuard&) = delete; + + DMAStream* operator->() { return pStream; } + + inline DMAStream* get() { return pStream; } + +private: + DMAStream* pStream = nullptr; +}; + } // namespace Boardcore diff --git a/src/tests/drivers/test-dma-mem-to-mem.cpp b/src/tests/drivers/test-dma-mem-to-mem.cpp index d4970559d..fcfe2bfee 100644 --- a/src/tests/drivers/test-dma-mem-to-mem.cpp +++ b/src/tests/drivers/test-dma-mem-to-mem.cpp @@ -33,10 +33,10 @@ void printBuffer(uint8_t *buffer, size_t size); int main() { - DMAStream *stream = DMADriver::instance().automaticAcquireStreamBlocking( - DMADefs::Peripherals::PE_MEM_ONLY, std::chrono::seconds::zero()); + DMAStreamGuard stream(DMADriver::instance().automaticAcquireStreamBlocking( + DMADefs::Peripherals::PE_MEM_ONLY, std::chrono::seconds::zero())); - if (stream == nullptr) + if (stream.get() == nullptr) { printf("Error, cannot allocate dma stream\n"); return 0; -- GitLab