key_copier.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #include "key_copier_icons.h"
  2. #include "key_formats.h"
  3. #include <applications/services/dialogs/dialogs.h>
  4. #include <applications/services/storage/storage.h>
  5. #include <flipper_format.h>
  6. #include <furi.h>
  7. #include <furi_hal.h>
  8. #include <gui/gui.h>
  9. #include <gui/modules/submenu.h>
  10. #include <gui/modules/text_input.h>
  11. #include <gui/modules/variable_item_list.h>
  12. #include <gui/modules/widget.h>
  13. #include <gui/view.h>
  14. #include <gui/view_dispatcher.h>
  15. #include <math.h>
  16. #include <notification/notification.h>
  17. #include <notification/notification_messages.h>
  18. #include <stdbool.h>
  19. #define TAG "KeyCopier"
  20. #define BACKLIGHT_ON 1
  21. #define KEY_COPIER_FILE_EXTENSION ".keycopy"
  22. #define INCHES_PER_PX 0.00978
  23. typedef enum {
  24. KeyCopierSubmenuIndexMeasure,
  25. KeyCopierSubmenuIndexConfigure,
  26. KeyCopierSubmenuIndexSave,
  27. KeyCopierSubmenuIndexLoad,
  28. KeyCopierSubmenuIndexAbout,
  29. KeyCopierSubmenuIndexQRCode,
  30. } KeyCopierSubmenuIndex;
  31. typedef enum {
  32. KeyCopierViewSubmenu,
  33. KeyCopierViewTextInput,
  34. KeyCopierViewConfigure_i,
  35. KeyCopierViewConfigure_e,
  36. KeyCopierViewSave,
  37. KeyCopierViewLoad,
  38. KeyCopierViewMeasure,
  39. KeyCopierViewAbout,
  40. KeyCopierViewQRCode,
  41. KeyCopierViewManufacturerList,
  42. KeyCopierViewFormatList,
  43. } KeyCopierView;
  44. typedef struct {
  45. ViewDispatcher* view_dispatcher;
  46. NotificationApp* notifications;
  47. Submenu* submenu;
  48. TextInput* text_input;
  49. VariableItemList* variable_item_list_config;
  50. View* view_measure;
  51. View* view_config_e;
  52. View* view_save;
  53. View* view_load;
  54. Widget* widget_about;
  55. Widget* widget_qr_code;
  56. VariableItem* key_name_item;
  57. VariableItem* format_item;
  58. VariableItem* format_name_item;
  59. char* temp_buffer;
  60. uint32_t temp_buffer_size;
  61. DialogsApp* dialogs;
  62. FuriString* file_path;
  63. Submenu* manufacturer_list;
  64. Submenu* format_list;
  65. char* selected_manufacturer;
  66. } KeyCopierApp;
  67. typedef struct {
  68. uint32_t format_index;
  69. FuriString* key_name_str;
  70. uint8_t pin_slc; // The pin that is being adjusted
  71. uint8_t* depth; // The cutting depth
  72. bool data_loaded;
  73. KeyFormat format;
  74. } KeyCopierModel;
  75. static inline int min(int a, int b) {
  76. return (a < b) ? a : b;
  77. }
  78. static inline int max(int a, int b) {
  79. return (a > b) ? a : b;
  80. }