gui_event.c 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #include "gui_event.h"
  2. #include <flipper_v2.h>
  3. #include <assert.h>
  4. #define GUI_EVENT_MQUEUE_SIZE 8
  5. struct GuiEvent {
  6. PubSub* input_event_record;
  7. osMessageQueueId_t mqueue;
  8. };
  9. void gui_event_input_events_callback(const void* value, void* ctx) {
  10. assert(ctx);
  11. GuiEvent* gui_event = ctx;
  12. GuiMessage message;
  13. message.type = GuiMessageTypeInput;
  14. message.input = *(InputEvent*)value;
  15. osMessageQueuePut(gui_event->mqueue, &message, 0, osWaitForever);
  16. }
  17. GuiEvent* gui_event_alloc() {
  18. GuiEvent* gui_event = furi_alloc(sizeof(GuiEvent));
  19. // Allocate message que
  20. gui_event->mqueue = osMessageQueueNew(GUI_EVENT_MQUEUE_SIZE, sizeof(GuiMessage), NULL);
  21. assert(gui_event->mqueue);
  22. // Input
  23. gui_event->input_event_record = furi_open("input_events");
  24. assert(gui_event->input_event_record != NULL);
  25. subscribe_pubsub(gui_event->input_event_record, gui_event_input_events_callback, gui_event);
  26. return gui_event;
  27. }
  28. void gui_event_free(GuiEvent* gui_event) {
  29. assert(gui_event);
  30. assert(osMessageQueueDelete(gui_event->mqueue) == osOK);
  31. free(gui_event);
  32. }
  33. void gui_event_messsage_send(GuiEvent* gui_event, GuiMessage* message) {
  34. assert(gui_event);
  35. assert(message);
  36. osMessageQueuePut(gui_event->mqueue, message, 0, 0);
  37. }
  38. GuiMessage gui_event_message_next(GuiEvent* gui_event) {
  39. assert(gui_event);
  40. GuiMessage message;
  41. assert(osMessageQueueGet(gui_event->mqueue, &message, NULL, osWaitForever) == osOK);
  42. return message;
  43. }