Signal SD card write thread from M4 event.

This commit is contained in:
Jared Boone 2016-03-27 22:49:30 -07:00
parent daa2f7aed0
commit 8e14d2f4e8
3 changed files with 19 additions and 3 deletions

View File

@ -67,11 +67,23 @@ public:
~AudioThread() {
chThdTerminate(thread);
chEvtSignal(thread, EVT_FIFO_HIGHWATER);
chThdWait(thread);
}
static void check_fifo_isr() {
if( (shared_memory.FIFO_HACK != nullptr) && (thread != nullptr) ) {
auto fifo = reinterpret_cast<FIFO<uint8_t>*>(shared_memory.FIFO_HACK);
if( fifo->len() >= write_size ) {
chEvtSignalI(thread, EVT_FIFO_HIGHWATER);
}
}
}
private:
static constexpr size_t write_size = 4096;
static constexpr eventmask_t EVT_FIFO_HIGHWATER = 1;
const std::string file_path;
File file;
@ -95,7 +107,7 @@ private:
}
while( !chThdShouldTerminate() ) {
// SUCH A HACK!!!
chEvtWaitAny(EVT_FIFO_HIGHWATER);
auto fifo = reinterpret_cast<FIFO<uint8_t>*>(shared_memory.FIFO_HACK);
if( !fifo ) {
@ -117,8 +129,6 @@ private:
}
led_usb.off();
}
chThdSleepMilliseconds(25);
}
file.close();

View File

@ -31,6 +31,8 @@
#include "irq_controls.hpp"
#include "audio_thread.hpp"
#include "ch.h"
#include "lpc43xx_cpp.hpp"
@ -44,6 +46,7 @@ CH_IRQ_HANDLER(M4Core_IRQHandler) {
CH_IRQ_PROLOGUE();
chSysLockFromIsr();
AudioThread::check_fifo_isr();
EventDispatcher::events_flag_isr(EVT_MASK_APPLICATION);
chSysUnlockFromIsr();
@ -56,6 +59,7 @@ CH_IRQ_HANDLER(M4Core_IRQHandler) {
MessageHandlerMap EventDispatcher::message_map_;
Thread* EventDispatcher::thread_event_loop = nullptr;
Thread* EventDispatcher::thread_record = nullptr;
EventDispatcher::EventDispatcher(
ui::Widget* const top_widget,

View File

@ -73,6 +73,8 @@ public:
return message_map_;
}
static Thread* thread_record;
private:
static MessageHandlerMap message_map_;
static Thread* thread_event_loop;