lfrfid_app_scene_extra_actions.cpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include "lfrfid_app_scene_extra_actions.h"
  2. typedef enum {
  3. SubmenuASK,
  4. SubmenuPSK,
  5. SubmenuRAW,
  6. } SubmenuIndex;
  7. void LfRfidAppSceneExtraActions::on_enter(LfRfidApp* app, bool need_restore) {
  8. auto submenu = app->view_controller.get<SubmenuVM>();
  9. submenu->add_item("Read ASK (Animal, Ordinary Card)", SubmenuASK, submenu_callback, app);
  10. submenu->add_item("Read PSK (Indala)", SubmenuPSK, submenu_callback, app);
  11. if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) {
  12. submenu->add_item("Read RAW RFID data", SubmenuRAW, submenu_callback, app);
  13. }
  14. if(need_restore) {
  15. submenu->set_selected_item(submenu_item_selected);
  16. }
  17. app->view_controller.switch_to<SubmenuVM>();
  18. }
  19. bool LfRfidAppSceneExtraActions::on_event(LfRfidApp* app, LfRfidApp::Event* event) {
  20. bool consumed = false;
  21. if(event->type == LfRfidApp::EventType::MenuSelected) {
  22. submenu_item_selected = event->payload.signed_int;
  23. switch(event->payload.signed_int) {
  24. case SubmenuASK:
  25. app->read_type = LFRFIDWorkerReadTypeASKOnly;
  26. app->scene_controller.switch_to_next_scene(LfRfidApp::SceneType::Read);
  27. break;
  28. case SubmenuPSK:
  29. app->read_type = LFRFIDWorkerReadTypePSKOnly;
  30. app->scene_controller.switch_to_next_scene(LfRfidApp::SceneType::Read);
  31. break;
  32. case SubmenuRAW:
  33. app->scene_controller.switch_to_next_scene(LfRfidApp::SceneType::RawName);
  34. break;
  35. }
  36. consumed = true;
  37. }
  38. return consumed;
  39. }
  40. void LfRfidAppSceneExtraActions::on_exit(LfRfidApp* app) {
  41. app->view_controller.get<SubmenuVM>()->clean();
  42. }
  43. void LfRfidAppSceneExtraActions::submenu_callback(void* context, uint32_t index) {
  44. LfRfidApp* app = static_cast<LfRfidApp*>(context);
  45. LfRfidApp::Event event;
  46. event.type = LfRfidApp::EventType::MenuSelected;
  47. event.payload.signed_int = index;
  48. app->view_controller.send_event(&event);
  49. }