interface_task.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #pragma once
  2. #include <AceButton.h>
  3. #include <Arduino.h>
  4. #include "configuration.h"
  5. #include "display_task.h"
  6. #include "logger.h"
  7. #include "motor_task.h"
  8. #include "serial/serial_protocol_plaintext.h"
  9. #include "serial/serial_protocol_protobuf.h"
  10. #include "serial/uart_stream.h"
  11. #include "task.h"
  12. class InterfaceTask : public Task<InterfaceTask>, public Logger {
  13. friend class Task<InterfaceTask>; // Allow base Task to invoke protected run()
  14. public:
  15. InterfaceTask(const uint8_t task_core, MotorTask& motor_task, DisplayTask* display_task);
  16. virtual ~InterfaceTask();
  17. void log(const char* msg) override;
  18. void setConfiguration(Configuration* configuration);
  19. protected:
  20. void run();
  21. private:
  22. #ifdef CONFIG_IDF_TARGET_ESP32S3
  23. HWCDC stream_;
  24. #else
  25. UartStream stream_;
  26. #endif
  27. MotorTask& motor_task_;
  28. DisplayTask* display_task_;
  29. char buf_[128];
  30. SemaphoreHandle_t mutex_;
  31. Configuration* configuration_ = nullptr; // protected by mutex_
  32. PB_PersistentConfiguration configuration_value_;
  33. bool configuration_loaded_ = false;
  34. uint8_t strain_calibration_step_ = 0;
  35. int32_t strain_reading_ = 0;
  36. int current_config_ = 0;
  37. QueueHandle_t log_queue_;
  38. QueueHandle_t knob_state_queue_;
  39. SerialProtocolPlaintext plaintext_protocol_;
  40. SerialProtocolProtobuf proto_protocol_;
  41. void changeConfig(bool next);
  42. void updateHardware();
  43. };