ibutton_mode_dallas_emulate.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #pragma once
  2. #include "ibutton.h"
  3. #include "one_wire_slave_gpio.h"
  4. class AppiButtonModeDallasEmulate : public AppTemplateMode<AppiButtonState, AppiButtonEvent> {
  5. public:
  6. const char* name = "dallas emulate";
  7. AppiButton* app;
  8. OneWireGpioSlave* onewire_slave;
  9. void event(AppiButtonEvent* event, AppiButtonState* state);
  10. void render(CanvasApi* canvas, AppiButtonState* state);
  11. void acquire();
  12. void release();
  13. AppiButtonModeDallasEmulate(AppiButton* parent_app) {
  14. app = parent_app;
  15. // TODO open record
  16. const GpioPin* one_wire_pin_record = &ibutton_gpio;
  17. onewire_slave = new OneWireGpioSlave(one_wire_pin_record);
  18. };
  19. };
  20. void AppiButtonModeDallasEmulate::event(AppiButtonEvent* event, AppiButtonState* state) {
  21. if(event->type == AppiButtonEvent::EventTypeTick) {
  22. app->blink_red();
  23. /*if(onewire_slave->emulate(state->dallas_address, 8)) {
  24. app->blink_green();
  25. } else {
  26. }*/
  27. }
  28. }
  29. void AppiButtonModeDallasEmulate::render(CanvasApi* canvas, AppiButtonState* state) {
  30. canvas->set_font(canvas, FontSecondary);
  31. canvas->draw_str(canvas, 2, 25, "< dallas emulate");
  32. canvas->draw_str(canvas, 2, 37, "unimplemented");
  33. {
  34. const uint8_t buffer_size = 32;
  35. char buf[buffer_size];
  36. snprintf(
  37. buf,
  38. buffer_size,
  39. "%x:%x:%x:%x:%x:%x:%x:%x",
  40. state->dallas_address[0],
  41. state->dallas_address[1],
  42. state->dallas_address[2],
  43. state->dallas_address[3],
  44. state->dallas_address[4],
  45. state->dallas_address[5],
  46. state->dallas_address[6],
  47. state->dallas_address[7]);
  48. canvas->draw_str(canvas, 2, 50, buf);
  49. }
  50. }
  51. void AppiButtonModeDallasEmulate::acquire() {
  52. onewire_slave->start();
  53. }
  54. void AppiButtonModeDallasEmulate::release() {
  55. onewire_slave->stop();
  56. }