ibutton.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #pragma once
  2. #include "app-template.h"
  3. #include "ibutton_mode_template.h"
  4. // event enumeration type
  5. typedef uint8_t event_t;
  6. class AppiButtonState {
  7. public:
  8. // state data
  9. static const uint8_t dallas_address_count = 3;
  10. uint8_t dallas_address[dallas_address_count][8] = {
  11. {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
  12. {0x01, 0x41, 0xCE, 0x67, 0x0F, 0x00, 0x00, 0xB6},
  13. {0x01, 0xFD, 0x0E, 0x84, 0x01, 0x00, 0x00, 0xDB}};
  14. uint8_t dallas_address_index;
  15. static const uint8_t cyfral_address_count = 3;
  16. uint8_t cyfral_address[cyfral_address_count][4] = {
  17. {0x00, 0x00, 0x00, 0x00},
  18. {0xBB, 0xBB, 0x7B, 0xBD},
  19. {0x7B, 0xDE, 0x7B, 0xDE}};
  20. uint8_t cyfral_address_index;
  21. uint8_t mode_index;
  22. // state initializer
  23. AppiButtonState() {
  24. mode_index = 0;
  25. dallas_address_index = 0;
  26. cyfral_address_index = 0;
  27. }
  28. };
  29. // events class
  30. class AppiButtonEvent {
  31. public:
  32. // events enum
  33. static const event_t EventTypeTick = 0;
  34. static const event_t EventTypeKey = 1;
  35. // payload
  36. union {
  37. InputEvent input;
  38. } value;
  39. // event type
  40. event_t type;
  41. };
  42. // our app derived from base AppTemplate class
  43. // with template variables <state, events>
  44. class AppiButton : public AppTemplate<AppiButtonState, AppiButtonEvent> {
  45. public:
  46. const GpioPin* red_led_record;
  47. const GpioPin* green_led_record;
  48. static const uint8_t modes_count = 4;
  49. AppTemplateMode<AppiButtonState, AppiButtonEvent>* mode[modes_count];
  50. void run();
  51. void render(Canvas* canvas);
  52. void render_dallas_list(Canvas* canvas, AppiButtonState* state);
  53. void render_cyfral_list(Canvas* canvas, AppiButtonState* state);
  54. void blink_red();
  55. void blink_green();
  56. void increase_mode();
  57. void decrease_mode();
  58. void increase_dallas_address();
  59. void decrease_dallas_address();
  60. void increase_cyfral_address();
  61. void decrease_cyfral_address();
  62. void switch_to_mode(uint8_t mode_index);
  63. };