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

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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. if(memcmp(last_data, data, data_size) == 0) {
  22. success_reads++;
  23. app->notify_green_blink();
  24. } else {
  25. success_reads = 1;
  26. memcpy(last_data, data, data_size);
  27. app->notify_success();
  28. }
  29. switch(type) {
  30. case LfrfidKeyType::KeyEM4100:
  31. app->set_text_store(
  32. "[EM] %02X %02X %02X %02X %02X\n"
  33. "count: %u",
  34. data[0],
  35. data[1],
  36. data[2],
  37. data[3],
  38. data[4],
  39. success_reads);
  40. break;
  41. case LfrfidKeyType::KeyH10301:
  42. app->set_text_store(
  43. "[HID26] %02X %02X %02X\n"
  44. "count: %u",
  45. data[0],
  46. data[1],
  47. data[2],
  48. success_reads);
  49. break;
  50. case LfrfidKeyType::KeyI40134:
  51. app->set_text_store(
  52. "[IND] %02X %02X %02X\n"
  53. "count: %u",
  54. data[0],
  55. data[1],
  56. data[2],
  57. success_reads);
  58. break;
  59. }
  60. popup_set_text(
  61. app->get_view_manager()->get_popup(),
  62. app->get_text_store(),
  63. 64,
  64. 22,
  65. AlignCenter,
  66. AlignTop);
  67. }
  68. }
  69. return consumed;
  70. }
  71. void LfrfidSceneReadNormal::on_exit(LfrfidApp* app) {
  72. LfrfidAppViewManager* view_manager = app->get_view_manager();
  73. Popup* popup = view_manager->get_popup();
  74. popup_set_header(popup, NULL, 0, 0, AlignCenter, AlignBottom);
  75. popup_set_text(popup, NULL, 0, 0, AlignCenter, AlignTop);
  76. app->get_reader()->stop();
  77. }