ibutton.h 1.2 KB

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