mirror of
https://github.com/eried/portapack-mayhem.git
synced 2025-01-11 15:29:28 -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() {
|
~AudioThread() {
|
||||||
chThdTerminate(thread);
|
chThdTerminate(thread);
|
||||||
|
chEvtSignal(thread, EVT_FIFO_HIGHWATER);
|
||||||
chThdWait(thread);
|
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:
|
private:
|
||||||
static constexpr size_t write_size = 4096;
|
static constexpr size_t write_size = 4096;
|
||||||
|
static constexpr eventmask_t EVT_FIFO_HIGHWATER = 1;
|
||||||
|
|
||||||
const std::string file_path;
|
const std::string file_path;
|
||||||
|
|
||||||
File file;
|
File file;
|
||||||
@ -95,7 +107,7 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
while( !chThdShouldTerminate() ) {
|
while( !chThdShouldTerminate() ) {
|
||||||
// SUCH A HACK!!!
|
chEvtWaitAny(EVT_FIFO_HIGHWATER);
|
||||||
|
|
||||||
auto fifo = reinterpret_cast<FIFO<uint8_t>*>(shared_memory.FIFO_HACK);
|
auto fifo = reinterpret_cast<FIFO<uint8_t>*>(shared_memory.FIFO_HACK);
|
||||||
if( !fifo ) {
|
if( !fifo ) {
|
||||||
@ -117,8 +129,6 @@ private:
|
|||||||
}
|
}
|
||||||
led_usb.off();
|
led_usb.off();
|
||||||
}
|
}
|
||||||
|
|
||||||
chThdSleepMilliseconds(25);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
file.close();
|
file.close();
|
||||||
|
@ -31,6 +31,8 @@
|
|||||||
|
|
||||||
#include "irq_controls.hpp"
|
#include "irq_controls.hpp"
|
||||||
|
|
||||||
|
#include "audio_thread.hpp"
|
||||||
|
|
||||||
#include "ch.h"
|
#include "ch.h"
|
||||||
|
|
||||||
#include "lpc43xx_cpp.hpp"
|
#include "lpc43xx_cpp.hpp"
|
||||||
@ -44,6 +46,7 @@ CH_IRQ_HANDLER(M4Core_IRQHandler) {
|
|||||||
CH_IRQ_PROLOGUE();
|
CH_IRQ_PROLOGUE();
|
||||||
|
|
||||||
chSysLockFromIsr();
|
chSysLockFromIsr();
|
||||||
|
AudioThread::check_fifo_isr();
|
||||||
EventDispatcher::events_flag_isr(EVT_MASK_APPLICATION);
|
EventDispatcher::events_flag_isr(EVT_MASK_APPLICATION);
|
||||||
chSysUnlockFromIsr();
|
chSysUnlockFromIsr();
|
||||||
|
|
||||||
@ -56,6 +59,7 @@ CH_IRQ_HANDLER(M4Core_IRQHandler) {
|
|||||||
|
|
||||||
MessageHandlerMap EventDispatcher::message_map_;
|
MessageHandlerMap EventDispatcher::message_map_;
|
||||||
Thread* EventDispatcher::thread_event_loop = nullptr;
|
Thread* EventDispatcher::thread_event_loop = nullptr;
|
||||||
|
Thread* EventDispatcher::thread_record = nullptr;
|
||||||
|
|
||||||
EventDispatcher::EventDispatcher(
|
EventDispatcher::EventDispatcher(
|
||||||
ui::Widget* const top_widget,
|
ui::Widget* const top_widget,
|
||||||
|
@ -73,6 +73,8 @@ public:
|
|||||||
return message_map_;
|
return message_map_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Thread* thread_record;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static MessageHandlerMap message_map_;
|
static MessageHandlerMap message_map_;
|
||||||
static Thread* thread_event_loop;
|
static Thread* thread_event_loop;
|
||||||
|
Loading…
Reference in New Issue
Block a user