mirror of
https://github.com/eried/portapack-mayhem.git
synced 2025-01-11 07:19:34 -05:00
Signal SD card write thread from M4 event.
This commit is contained in:
parent
daa2f7aed0
commit
8e14d2f4e8
@ -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();
|
||||
|
@ -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,
|
||||
|
@ -73,6 +73,8 @@ public:
|
||||
return message_map_;
|
||||
}
|
||||
|
||||
static Thread* thread_record;
|
||||
|
||||
private:
|
||||
static MessageHandlerMap message_map_;
|
||||
static Thread* thread_event_loop;
|
||||
|
Loading…
Reference in New Issue
Block a user