lf-rfid-scene-start.cpp 2.9 KB

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