seader_scene_start.c 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #include "../seader_i.h"
  2. enum SubmenuIndex {
  3. SubmenuIndexSamPresent,
  4. SubmenuIndexSamMissing,
  5. };
  6. static void detect_callback(void* context) {
  7. Seader* seader = context;
  8. view_dispatcher_send_custom_event(seader->view_dispatcher, SeaderWorkerEventSamMissing);
  9. }
  10. void seader_sam_check_worker_callback(SeaderWorkerEvent event, void* context) {
  11. Seader* seader = context;
  12. view_dispatcher_send_custom_event(seader->view_dispatcher, event);
  13. }
  14. void seader_scene_start_submenu_callback(void* context, uint32_t index) {
  15. Seader* seader = context;
  16. view_dispatcher_send_custom_event(seader->view_dispatcher, index);
  17. }
  18. void seader_scene_start_on_enter(void* context) {
  19. Seader* seader = context;
  20. Popup* popup = seader->popup;
  21. popup_set_context(seader->popup, seader);
  22. popup_set_callback(seader->popup, detect_callback);
  23. popup_set_header(popup, "Detecting SAM", 58, 48, AlignCenter, AlignCenter);
  24. popup_set_timeout(seader->popup, 2500);
  25. popup_enable_timeout(seader->popup);
  26. // Start worker
  27. seader_worker_start(
  28. seader->worker,
  29. SeaderWorkerStateCheckSam,
  30. seader->uart,
  31. seader->credential,
  32. seader_sam_check_worker_callback,
  33. seader);
  34. view_dispatcher_switch_to_view(seader->view_dispatcher, SeaderViewPopup);
  35. }
  36. bool seader_scene_start_on_event(void* context, SceneManagerEvent event) {
  37. Seader* seader = context;
  38. bool consumed = false;
  39. if(event.type == SceneManagerEventTypeCustom) {
  40. if(event.event == SeaderWorkerEventSamPresent) {
  41. scene_manager_next_scene(seader->scene_manager, SeaderSceneSamPresent);
  42. consumed = true;
  43. } else if(event.event == SeaderWorkerEventSamMissing) {
  44. scene_manager_next_scene(seader->scene_manager, SeaderSceneSamMissing);
  45. consumed = true;
  46. } else if(event.event == SeaderWorkerEventSamWrong) {
  47. scene_manager_next_scene(seader->scene_manager, SeaderSceneSamWrong);
  48. consumed = true;
  49. }
  50. scene_manager_set_scene_state(seader->scene_manager, SeaderSceneStart, event.event);
  51. }
  52. return consumed;
  53. }
  54. void seader_scene_start_on_exit(void* context) {
  55. Seader* seader = context;
  56. submenu_reset(seader->submenu);
  57. }