barcode_generator.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #pragma once
  2. #include <furi.h>
  3. #include <gui/gui.h>
  4. #include <input/input.h>
  5. #include <stdlib.h>
  6. #include <storage/storage.h>
  7. #include <toolbox/saved_struct.h>
  8. #define BARCODE_SETTINGS_FILE_NAME "apps/Tools/barcodegen.save"
  9. #define BARCODE_SETTINGS_VER (1)
  10. #define BARCODE_SETTINGS_PATH EXT_PATH(BARCODE_SETTINGS_FILE_NAME)
  11. #define BARCODE_SETTINGS_MAGIC (0xC2)
  12. #define SAVE_BARCODE_SETTINGS(x) \
  13. saved_struct_save( \
  14. BARCODE_SETTINGS_PATH, \
  15. (x), \
  16. sizeof(BarcodeState), \
  17. BARCODE_SETTINGS_MAGIC, \
  18. BARCODE_SETTINGS_VER)
  19. #define LOAD_BARCODE_SETTINGS(x) \
  20. saved_struct_load( \
  21. BARCODE_SETTINGS_PATH, \
  22. (x), \
  23. sizeof(BarcodeState), \
  24. BARCODE_SETTINGS_MAGIC, \
  25. BARCODE_SETTINGS_VER)
  26. #define BARCODE_HEIGHT 50
  27. #define BARCODE_Y_START 3
  28. #define BARCODE_TEXT_OFFSET 9
  29. #define BARCODE_MAX_LENS 13
  30. #define NUMBER_OF_BARCODE_TYPES 3
  31. #define MENU_INDEX_VIEW 0
  32. #define MENU_INDEX_EDIT 1
  33. #define MENU_INDEX_PARITY 2
  34. #define MENU_INDEX_TYPE 3
  35. typedef enum
  36. {
  37. EventTypeTick,
  38. EventTypeKey,
  39. } EventType;
  40. typedef struct
  41. {
  42. EventType type;
  43. InputEvent input;
  44. } PluginEvent;
  45. typedef enum
  46. {
  47. ViewMode,
  48. EditMode,
  49. MenuMode,
  50. } Mode;
  51. typedef enum
  52. {
  53. BarEncodingTypeLeft,
  54. BarEncodingTypeRight,
  55. BarEncodingTypeG,
  56. } BarEncodingType;
  57. typedef enum
  58. {
  59. BarTypeEAN8,
  60. BarTypeUPCA,
  61. BarTypeEAN13,
  62. } BarType;
  63. typedef struct
  64. {
  65. char *name;
  66. int numberOfDigits;
  67. int startPos;
  68. BarType bartype;
  69. } BarcodeType;
  70. typedef struct
  71. {
  72. int barcodeNumeral[BARCODE_MAX_LENS]; // The current barcode number
  73. bool doParityCalculation; // Should do parity check?
  74. int barcodeTypeIndex;
  75. } BarcodeState;
  76. typedef struct
  77. {
  78. FuriMutex *mutex;
  79. BarcodeState barcode_state;
  80. int editingIndex; // The index of the editing symbol
  81. int menuIndex; // The index of the menu cursor
  82. Mode mode; // View, edit or menu
  83. } PluginState;
  84. static const int DIGITS[10][4] = {
  85. {3, 2, 1, 1},
  86. {2, 2, 2, 1},
  87. {2, 1, 2, 2},
  88. {1, 4, 1, 1},
  89. {1, 1, 3, 2},
  90. {1, 2, 3, 1},
  91. {1, 1, 1, 4},
  92. {1, 3, 1, 2},
  93. {1, 2, 1, 3},
  94. {3, 1, 1, 2},
  95. };
  96. static const uint8_t EAN13ENCODE[10] = {
  97. 0b000000,
  98. 0b110100,
  99. 0b101100,
  100. 0b011100,
  101. 0b110010,
  102. 0b100110,
  103. 0b001110,
  104. 0b101010,
  105. 0b011010,
  106. 0b010110,
  107. };