accessor_scene_start.cpp 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #include "../accessor_app.h"
  2. #include "../accessor_view_manager.h"
  3. #include "../accessor_event.h"
  4. #include <callback-connector.h>
  5. #include "accessor_scene_start.h"
  6. void AccessorSceneStart::on_enter(AccessorApp* app) {
  7. AccessorAppViewManager* view_manager = app->get_view_manager();
  8. Popup* popup = view_manager->get_popup();
  9. popup_set_header(popup, "Accessor App", 64, 16, AlignCenter, AlignBottom);
  10. app->set_text_store("[??????]");
  11. popup_set_text(popup, app->get_text_store(), 64, 22, AlignCenter, AlignTop);
  12. view_manager->switch_to(AccessorAppViewManager::ViewType::Popup);
  13. }
  14. bool AccessorSceneStart::on_event(AccessorApp* app, AccessorEvent* event) {
  15. bool consumed = false;
  16. if(event->type == AccessorEvent::Type::Tick) {
  17. WIEGAND* wiegand = app->get_wiegand();
  18. Popup* popup = app->get_view_manager()->get_popup();
  19. OneWireHost* onewire_host = app->get_one_wire();
  20. uint8_t data[8] = {0, 0, 0, 0, 0, 0, 0, 0};
  21. uint8_t type = 0;
  22. if(wiegand->available()) {
  23. type = wiegand->getWiegandType();
  24. for(uint8_t i = 0; i < 4; i++) {
  25. data[i] = wiegand->getCode() >> (i * 8);
  26. }
  27. for(uint8_t i = 4; i < 8; i++) {
  28. data[i] = wiegand->getCodeHigh() >> ((i - 4) * 8);
  29. }
  30. } else {
  31. FURI_CRITICAL_ENTER();
  32. if(onewire_host_reset(onewire_host)) {
  33. type = 255;
  34. onewire_host_write(onewire_host, 0x33);
  35. for(uint8_t i = 0; i < 8; i++) {
  36. data[i] = onewire_host_read(onewire_host);
  37. }
  38. for(uint8_t i = 0; i < 7; i++) {
  39. data[i] = data[i + 1];
  40. }
  41. }
  42. FURI_CRITICAL_EXIT();
  43. }
  44. if(type > 0) {
  45. if(type == 255) {
  46. app->set_text_store(
  47. "[%02X %02X %02X %02X %02X %02X DS]",
  48. data[5],
  49. data[4],
  50. data[3],
  51. data[2],
  52. data[1],
  53. data[0]);
  54. } else {
  55. app->set_text_store(
  56. "[%02X %02X %02X %02X %02X %02X W%u]",
  57. data[5],
  58. data[4],
  59. data[3],
  60. data[2],
  61. data[1],
  62. data[0],
  63. type);
  64. }
  65. popup_set_text(popup, app->get_text_store(), 64, 22, AlignCenter, AlignTop);
  66. app->notify_success();
  67. }
  68. }
  69. return consumed;
  70. }
  71. void AccessorSceneStart::on_exit(AccessorApp* app) {
  72. Popup* popup = app->get_view_manager()->get_popup();
  73. popup_set_header(popup, NULL, 0, 0, AlignCenter, AlignBottom);
  74. popup_set_text(popup, NULL, 0, 0, AlignCenter, AlignTop);
  75. }