Move EventDispatcher code into event_*.hpp.

More code redistribution coming shortly...
This commit is contained in:
Jared Boone 2016-01-12 21:49:29 -08:00
parent b993e3d73e
commit e73a9f98a1
8 changed files with 378 additions and 283 deletions

View file

@ -117,98 +117,6 @@ static void shutdown() {
halt();
}
extern "C" {
CH_IRQ_HANDLER(MAPP_IRQHandler) {
CH_IRQ_PROLOGUE();
chSysLockFromIsr();
events_flag_isr(EVT_MASK_BASEBAND);
chSysUnlockFromIsr();
creg::m0apptxevent::clear();
CH_IRQ_EPILOGUE();
}
}
class EventDispatcher {
public:
void run() {
events_initialize(chThdSelf());
lpc43xx::creg::m0apptxevent::enable();
baseband_thread.thread_main = chThdSelf();
baseband_thread.thread_rssi = rssi_thread.start(NORMALPRIO + 10);
baseband_thread.start(NORMALPRIO + 20);
while(is_running) {
const auto events = wait();
dispatch(events);
}
lpc43xx::creg::m0apptxevent::disable();
}
void request_stop() {
is_running = false;
}
private:
BasebandThread baseband_thread;
RSSIThread rssi_thread;
bool is_running = true;
eventmask_t wait() {
return chEvtWaitAny(ALL_EVENTS);
}
void dispatch(const eventmask_t events) {
if( events & EVT_MASK_BASEBAND ) {
handle_baseband_queue();
}
if( events & EVT_MASK_SPECTRUM ) {
handle_spectrum();
}
}
void handle_baseband_queue() {
std::array<uint8_t, Message::MAX_SIZE> message_buffer;
while(Message* const message = shared_memory.baseband_queue.peek(message_buffer)) {
on_message(message);
shared_memory.baseband_queue.skip();
}
}
void on_message(const Message* const message) {
switch(message->id) {
case Message::ID::Shutdown:
on_message_shutdown(*reinterpret_cast<const ShutdownMessage*>(message));
break;
default:
on_message_default(message);
break;
}
}
void on_message_shutdown(const ShutdownMessage&) {
request_stop();
}
void on_message_default(const Message* const message) {
baseband_thread.on_message(message);
}
void handle_spectrum() {
const UpdateSpectrumMessage message;
baseband_thread.on_message(&message);
}
};
int main(void) {
init();