lf-rfid-scene-read-normal.cpp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #include "lf-rfid-scene-read-normal.h"
  2. #include "../lf-rfid-app.h"
  3. #include "../lf-rfid-view-manager.h"
  4. #include "../lf-rfid-event.h"
  5. #include "../helpers/key-info.h"
  6. void LfrfidSceneReadNormal::on_enter(LfrfidApp* app) {
  7. LfrfidAppViewManager* view_manager = app->get_view_manager();
  8. Popup* popup = view_manager->get_popup();
  9. popup_set_header(popup, "LF-RFID read EM & HID", 64, 16, AlignCenter, AlignBottom);
  10. app->set_text_store("waiting...");
  11. popup_set_text(popup, app->get_text_store(), 64, 22, AlignCenter, AlignTop);
  12. view_manager->switch_to(LfrfidAppViewManager::ViewType::Popup);
  13. app->get_reader()->start(RfidReader::Type::Normal);
  14. }
  15. bool LfrfidSceneReadNormal::on_event(LfrfidApp* app, LfrfidEvent* event) {
  16. bool consumed = false;
  17. if(event->type == LfrfidEvent::Type::Tick) {
  18. uint8_t data[data_size];
  19. LfrfidKeyType type;
  20. if(app->get_reader()->read(&type, data, data_size)) {
  21. app->notify_green_blink();
  22. if(memcmp(last_data, data, data_size) == 0) {
  23. success_reads++;
  24. } else {
  25. success_reads = 1;
  26. memcpy(last_data, data, data_size);
  27. }
  28. switch(type) {
  29. case LfrfidKeyType::KeyEmarine:
  30. app->set_text_store(
  31. "[EM] %02X %02X %02X %02X %02X\n"
  32. "count: %u",
  33. data[0],
  34. data[1],
  35. data[2],
  36. data[3],
  37. data[4],
  38. success_reads);
  39. break;
  40. case LfrfidKeyType::KeyHID:
  41. app->set_text_store(
  42. "[HID26] %02X %02X %02X\n"
  43. "count: %u",
  44. data[0],
  45. data[1],
  46. data[2],
  47. success_reads);
  48. break;
  49. }
  50. popup_set_text(
  51. app->get_view_manager()->get_popup(),
  52. app->get_text_store(),
  53. 64,
  54. 22,
  55. AlignCenter,
  56. AlignTop);
  57. }
  58. }
  59. return consumed;
  60. }
  61. void LfrfidSceneReadNormal::on_exit(LfrfidApp* app) {
  62. LfrfidAppViewManager* view_manager = app->get_view_manager();
  63. Popup* popup = view_manager->get_popup();
  64. popup_set_header(popup, NULL, 0, 0, AlignCenter, AlignBottom);
  65. popup_set_text(popup, NULL, 0, 0, AlignCenter, AlignTop);
  66. app->get_reader()->stop();
  67. }