ibutton.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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. uint8_t dallas_address[8] = {0x01, 0xFD, 0x0E, 0x84, 0x01, 0x00, 0x00, 0xDB};
  10. uint8_t mode_index;
  11. // state initializer
  12. AppiButtonState() {
  13. mode_index = 0;
  14. }
  15. };
  16. // events class
  17. class AppiButtonEvent {
  18. public:
  19. // events enum
  20. static const event_t EventTypeTick = 0;
  21. static const event_t EventTypeKey = 1;
  22. // payload
  23. union {
  24. InputEvent input;
  25. } value;
  26. // event type
  27. event_t type;
  28. };
  29. // our app derived from base AppTemplate class
  30. // with template variables <state, events>
  31. class AppiButton : public AppTemplate<AppiButtonState, AppiButtonEvent> {
  32. public:
  33. GpioPin* red_led_record;
  34. GpioPin* green_led_record;
  35. static const uint8_t modes_count = 2;
  36. AppTemplateMode<AppiButtonState, AppiButtonEvent>* mode[modes_count];
  37. void run();
  38. void render(CanvasApi* canvas);
  39. void blink_red();
  40. void blink_green();
  41. void increase_mode();
  42. void decrease_mode();
  43. };