ibutton_mode_cyfral_read.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #pragma once
  2. #include "ibutton.h"
  3. #include "cyfral_reader.h"
  4. class AppiButtonModeCyfralRead : public AppTemplateMode<AppiButtonState, AppiButtonEvent> {
  5. public:
  6. const char* name = "cyfral read";
  7. AppiButton* app;
  8. CyfralReader* reader;
  9. void event(AppiButtonEvent* event, AppiButtonState* state);
  10. void render(Canvas* canvas, AppiButtonState* state);
  11. void acquire();
  12. void release();
  13. AppiButtonModeCyfralRead(AppiButton* parent_app) {
  14. app = parent_app;
  15. reader = new CyfralReader(ADC1, ADC_CHANNEL_14);
  16. };
  17. };
  18. void AppiButtonModeCyfralRead::event(AppiButtonEvent* event, AppiButtonState* state) {
  19. if(event->type == AppiButtonEvent::EventTypeTick) {
  20. uint8_t data[8];
  21. if(reader->read(data, 4)) {
  22. memcpy(app->state.cyfral_address[app->state.cyfral_address_index], data, 4);
  23. app->blink_green();
  24. }
  25. } else if(event->type == AppiButtonEvent::EventTypeKey) {
  26. if(event->value.input.state && event->value.input.input == InputUp) {
  27. app->decrease_cyfral_address();
  28. }
  29. if(event->value.input.state && event->value.input.input == InputDown) {
  30. app->increase_cyfral_address();
  31. }
  32. }
  33. }
  34. void AppiButtonModeCyfralRead::render(Canvas* canvas, AppiButtonState* state) {
  35. canvas_set_font(canvas, FontSecondary);
  36. canvas_draw_str(canvas, 2, 25, "< Cyfral read >");
  37. app->render_cyfral_list(canvas, state);
  38. }
  39. void AppiButtonModeCyfralRead::acquire() {
  40. reader->start();
  41. }
  42. void AppiButtonModeCyfralRead::release() {
  43. reader->stop();
  44. }