lfrfid_app.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. #pragma once
  2. #include "m-string.h"
  3. #include <furi.h>
  4. #include <furi_hal.h>
  5. #include <generic_scene.hpp>
  6. #include <scene_controller.hpp>
  7. #include <view_controller.hpp>
  8. #include <record_controller.hpp>
  9. #include <text_store.h>
  10. #include <view_modules/submenu_vm.h>
  11. #include <view_modules/popup_vm.h>
  12. #include <view_modules/dialog_ex_vm.h>
  13. #include <view_modules/text_input_vm.h>
  14. #include <view_modules/byte_input_vm.h>
  15. #include "view/container_vm.h"
  16. #include <notification/notification_messages.h>
  17. #include <storage/storage.h>
  18. #include <dialogs/dialogs.h>
  19. #include "rpc/rpc_app.h"
  20. #include <toolbox/protocols/protocol_dict.h>
  21. #include <lfrfid/lfrfid_dict_file.h>
  22. #include <lfrfid/protocols/lfrfid_protocols.h>
  23. #include <lfrfid/lfrfid_worker.h>
  24. #define LFRFID_KEY_NAME_SIZE 22
  25. class LfRfidApp {
  26. public:
  27. enum class EventType : uint8_t {
  28. GENERIC_EVENT_ENUM_VALUES,
  29. Next,
  30. MenuSelected,
  31. Stay,
  32. Retry,
  33. Exit,
  34. ReadEventSenseStart,
  35. ReadEventSenseEnd,
  36. ReadEventSenseCardStart,
  37. ReadEventSenseCardEnd,
  38. ReadEventStartASK,
  39. ReadEventStartPSK,
  40. ReadEventDone,
  41. ReadEventOverrun,
  42. ReadEventError,
  43. WriteEventOK,
  44. WriteEventProtocolCannotBeWritten,
  45. WriteEventFobCannotBeWritten,
  46. WriteEventTooLongToWrite,
  47. RpcLoadFile,
  48. RpcSessionClose,
  49. };
  50. enum class SceneType : uint8_t {
  51. GENERIC_SCENE_ENUM_VALUES,
  52. Read,
  53. ReadSuccess,
  54. RetryConfirm,
  55. ExitConfirm,
  56. ReadKeyMenu,
  57. Write,
  58. WriteSuccess,
  59. Emulate,
  60. SaveName,
  61. SaveSuccess,
  62. SelectKey,
  63. SavedKeyMenu,
  64. SaveData,
  65. SaveType,
  66. SavedInfo,
  67. DeleteConfirm,
  68. DeleteSuccess,
  69. Rpc,
  70. ExtraActions,
  71. RawInfo,
  72. RawName,
  73. RawRead,
  74. RawSuccess,
  75. };
  76. class Event {
  77. public:
  78. union {
  79. int32_t signed_int;
  80. } payload;
  81. EventType type;
  82. };
  83. SceneController<GenericScene<LfRfidApp>, LfRfidApp> scene_controller;
  84. ViewController<LfRfidApp, SubmenuVM, PopupVM, DialogExVM, TextInputVM, ByteInputVM, ContainerVM>
  85. view_controller;
  86. ~LfRfidApp();
  87. LfRfidApp();
  88. RecordController<NotificationApp> notification;
  89. RecordController<Storage> storage;
  90. RecordController<DialogsApp> dialogs;
  91. TextStore text_store;
  92. string_t file_path;
  93. RpcAppSystem* rpc_ctx;
  94. void run(void* args);
  95. static const char* app_folder;
  96. static const char* app_sd_folder;
  97. static const char* app_extension;
  98. static const char* app_filetype;
  99. bool save_key();
  100. bool load_key_from_file_select(bool need_restore);
  101. bool delete_key();
  102. bool load_key_data(string_t path, bool show_dialog);
  103. bool save_key_data(string_t path);
  104. void make_app_folder();
  105. ProtocolDict* dict;
  106. LFRFIDWorker* lfworker;
  107. string_t file_name;
  108. ProtocolId protocol_id;
  109. LFRFIDWorkerReadType read_type;
  110. uint8_t* old_key_data;
  111. uint8_t* new_key_data;
  112. string_t raw_file_name;
  113. };