lf-rfid-scene-start.cpp 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include "lf-rfid-scene-start.h"
  2. #include "../lf-rfid-app.h"
  3. #include "../lf-rfid-view-manager.h"
  4. #include "../lf-rfid-event.h"
  5. #include <callback-connector.h>
  6. typedef enum {
  7. SubmenuIndexReadNormal,
  8. SubmenuIndexReadIndala,
  9. SubmenuIndexEmulateEM,
  10. SubmenuIndexEmulateHID,
  11. SubmenuIndexEmulateIndala,
  12. SubmenuIndexTune
  13. } SubmenuIndex;
  14. void LfrfidSceneStart::on_enter(LfrfidApp* app) {
  15. LfrfidAppViewManager* view_manager = app->get_view_manager();
  16. Submenu* submenu = view_manager->get_submenu();
  17. auto callback = cbc::obtain_connector(this, &LfrfidSceneStart::submenu_callback);
  18. submenu_add_item(submenu, "Read Normal", SubmenuIndexReadNormal, callback, app);
  19. submenu_add_item(submenu, "Read Indala", SubmenuIndexReadIndala, callback, app);
  20. submenu_add_item(submenu, "Emulate EM", SubmenuIndexEmulateEM, callback, app);
  21. submenu_add_item(submenu, "Emulate HID", SubmenuIndexEmulateHID, callback, app);
  22. submenu_add_item(submenu, "Emulate Indala", SubmenuIndexEmulateIndala, callback, app);
  23. submenu_add_item(submenu, "Tune", SubmenuIndexTune, callback, app);
  24. view_manager->switch_to(LfrfidAppViewManager::ViewType::Submenu);
  25. }
  26. bool LfrfidSceneStart::on_event(LfrfidApp* app, LfrfidEvent* event) {
  27. bool consumed = false;
  28. if(event->type == LfrfidEvent::Type::MenuSelected) {
  29. switch(event->payload.menu_index) {
  30. case SubmenuIndexReadNormal:
  31. app->switch_to_next_scene(LfrfidApp::Scene::ReadNormal);
  32. break;
  33. case SubmenuIndexReadIndala:
  34. app->switch_to_next_scene(LfrfidApp::Scene::ReadIndala);
  35. break;
  36. case SubmenuIndexEmulateEM:
  37. app->switch_to_next_scene(LfrfidApp::Scene::EmulateEM);
  38. break;
  39. break;
  40. case SubmenuIndexEmulateHID:
  41. app->switch_to_next_scene(LfrfidApp::Scene::EmulateHID);
  42. break;
  43. case SubmenuIndexEmulateIndala:
  44. app->switch_to_next_scene(LfrfidApp::Scene::EmulateIndala);
  45. break;
  46. case SubmenuIndexTune:
  47. app->switch_to_next_scene(LfrfidApp::Scene::Tune);
  48. break;
  49. }
  50. consumed = true;
  51. }
  52. return consumed;
  53. }
  54. void LfrfidSceneStart::on_exit(LfrfidApp* app) {
  55. LfrfidAppViewManager* view_manager = app->get_view_manager();
  56. Submenu* submenu = view_manager->get_submenu();
  57. submenu_clean(submenu);
  58. }
  59. void LfrfidSceneStart::submenu_callback(void* context, uint32_t index) {
  60. LfrfidApp* app = static_cast<LfrfidApp*>(context);
  61. LfrfidEvent event;
  62. event.type = LfrfidEvent::Type::MenuSelected;
  63. event.payload.menu_index = index;
  64. app->get_view_manager()->send_event(&event);
  65. }