multi_converter_definitions.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #pragma once
  2. #define MULTI_CONVERTER_NUMBER_DIGITS 9
  3. typedef enum {
  4. EventTypeKey,
  5. } EventType;
  6. typedef struct {
  7. InputEvent input;
  8. EventType type;
  9. } MultiConverterEvent;
  10. typedef enum {
  11. ModeDisplay,
  12. ModeSelector,
  13. } MultiConverterMode;
  14. typedef enum {
  15. None,
  16. Reset,
  17. Convert,
  18. } MultiConverterModeTrigger;
  19. // new units goes here, used as index to the main multi_converter_available_units array (multi_converter_units.h)
  20. typedef enum {
  21. UnitTypeDec,
  22. UnitTypeHex,
  23. UnitTypeBin,
  24. UnitTypeCelsius,
  25. UnitTypeFahernheit,
  26. UnitTypeKelvin,
  27. UnitTypeKilometers,
  28. UnitTypeMeters,
  29. UnitTypeCentimeters,
  30. UnitTypeMiles,
  31. UnitTypeFeet,
  32. UnitTypeInches,
  33. UnitTypeDegree,
  34. UnitTypeRadian,
  35. } MultiConverterUnitType;
  36. typedef struct {
  37. MultiConverterUnitType selected_unit_type_orig;
  38. MultiConverterUnitType selected_unit_type_dest;
  39. uint8_t select_orig;
  40. } MultiConverterModeSelect;
  41. typedef struct {
  42. uint8_t cursor; // cursor position when typing
  43. int8_t key; // hover key
  44. uint8_t comma; // comma already added? (only one comma allowed)
  45. uint8_t negative; // is negative?
  46. } MultiConverterModeDisplay;
  47. typedef struct MultiConverterUnit MultiConverterUnit;
  48. typedef struct MultiConverterState MultiConverterState;
  49. struct MultiConverterUnit {
  50. uint8_t allow_comma;
  51. uint8_t allow_negative;
  52. uint8_t max_number_keys;
  53. char mini_name[4];
  54. char name[12];
  55. void (*convert_function)(MultiConverterState* const);
  56. uint8_t (*allowed_function)(MultiConverterUnitType);
  57. };
  58. struct MultiConverterState {
  59. FuriMutex* mutex;
  60. char buffer_orig[MULTI_CONVERTER_NUMBER_DIGITS + 1];
  61. char buffer_dest[MULTI_CONVERTER_NUMBER_DIGITS + 1];
  62. MultiConverterUnitType unit_type_orig;
  63. MultiConverterUnitType unit_type_dest;
  64. MultiConverterMode mode;
  65. MultiConverterModeDisplay display;
  66. MultiConverterModeSelect select;
  67. uint8_t keyboard_lock; // used to create a small lock when switching from SELECT to DISPLAY modes
  68. // (debouncing, basically; otherwise it switch modes twice 'cause it's too fast!)
  69. };