Move event.* code into event_m[04].*.

Slightly more duplication of code now. Need a base class...
This commit is contained in:
Jared Boone
2016-01-12 22:00:42 -08:00
parent e73a9f98a1
commit 731cea1b96
11 changed files with 42 additions and 30 deletions

View File

@@ -32,7 +32,7 @@ CH_IRQ_HANDLER(M4Core_IRQHandler) {
CH_IRQ_PROLOGUE();
chSysLockFromIsr();
events_flag_isr(EVT_MASK_APPLICATION);
EventDispatcher::events_flag_isr(EVT_MASK_APPLICATION);
chSysUnlockFromIsr();
creg::m4txevent::clear();
@@ -41,3 +41,5 @@ CH_IRQ_HANDLER(M4Core_IRQHandler) {
}
}
Thread* EventDispatcher::thread_event_loop = nullptr;

View File

@@ -66,6 +66,7 @@ public:
painter(painter),
context(context)
{
thread_event_loop = chThdSelf();
touch_manager.on_event = [this](const ui::TouchEvent event) {
this->on_touch_event(event);
};
@@ -86,7 +87,21 @@ public:
is_running = false;
}
static inline void events_flag(const eventmask_t events) {
if( thread_event_loop ) {
chEvtSignal(thread_event_loop, events);
}
}
static inline void events_flag_isr(const eventmask_t events) {
if( thread_event_loop ) {
chEvtSignalI(thread_event_loop, events);
}
}
private:
static Thread* thread_event_loop;
touch::Manager touch_manager;
ui::Widget* const top_widget;
ui::Painter& painter;

View File

@@ -165,7 +165,7 @@ void timer0_callback(GPTDriver* const) {
/* Signal event loop */
if( event_mask ) {
chSysLockFromIsr();
events_flag_isr(event_mask);
EventDispatcher::events_flag_isr(event_mask);
chSysUnlockFromIsr();
}

View File

@@ -54,7 +54,7 @@ CH_IRQ_HANDLER(PIN_INT4_IRQHandler) {
CH_IRQ_PROLOGUE();
chSysLockFromIsr();
events_flag_isr(EVT_MASK_LCD_FRAME_SYNC);
EventDispatcher::events_flag_isr(EVT_MASK_LCD_FRAME_SYNC);
chSysUnlockFromIsr();
LPC_GPIO_INT->IST = (1U << 4);

View File

@@ -39,7 +39,7 @@ CH_IRQ_HANDLER(RTC_IRQHandler) {
CH_IRQ_PROLOGUE();
chSysLockFromIsr();
events_flag_isr(EVT_MASK_RTC_TICK);
EventDispatcher::events_flag_isr(EVT_MASK_RTC_TICK);
chSysUnlockFromIsr();
rtc::interrupt::clear_all();

View File

@@ -66,7 +66,6 @@ int main(void) {
sdcStart(&SDCD1, nullptr);
events_initialize(chThdSelf());
init_message_queues();
ui::Context context;