diff --git a/firmware/common/message_queue.hpp b/firmware/common/message_queue.hpp index f8920e1b4..2fe12f0a1 100644 --- a/firmware/common/message_queue.hpp +++ b/firmware/common/message_queue.hpp @@ -60,6 +60,19 @@ public: return result; } + template + void handle(HandlerFn handler) { + std::array message_buffer; + while(Message* const message = peek(message_buffer)) { + handler(message); + skip(); + } + } + +private: + FIFO fifo; + Mutex mutex_write; + Message* peek(std::array& buf) { Message* const p = reinterpret_cast(buf.data()); return fifo.peek_r(buf.data(), buf.size()) ? p : nullptr; @@ -82,19 +95,6 @@ public: return fifo.is_empty(); } - template - void handle(HandlerFn handler) { - std::array message_buffer; - while(Message* const message = peek(message_buffer)) { - handler(message); - skip(); - } - } - -private: - FIFO fifo; - Mutex mutex_write; - bool push(const void* const buf, const size_t len) { chMtxLock(&mutex_write); const auto result = fifo.in_r(buf, len);