/** * @file display.hpp * @author Siwat Sirichai (siwat@siwatinc.com) * @brief Class for interfacing with the CU Demonstration Secondary School IoT 2024 Display HMIs * @version 0.1 * @date 2024-03-19 * * @copyright Copyright (c) SIWAT SYSTEM 2024 * */ #pragma once #include #include #include #include #include #include struct cud_display_conf_t { RemoteVariable *aqi; DigitalInputCard *inputCard; DigitalOutputCard *outputCard; ClimateCard *ac; HardwareSerial *uart; const int tx; const int rx; const uint32_t communication_baudrate; const uint32_t ota_baudrate; uint8_t light_pins[4]; uint8_t fan_pins[3]; uint8_t air_purifier_pin; uint8_t mosquito_zapper_pin; }; struct cud_display_light_group_t { uint8_t element_id[4]; const char *element_name[20]; uint8_t picture_on[4]; uint8_t picture_on_pressed[4]; uint8_t picture_off[4]; uint8_t picture_off_pressed[4]; }; struct cud_display_fan_group_t { uint8_t element_id[3]; const char *element_name[20]; uint8_t picture_on[3]; uint8_t picture_on_pressed[3]; uint8_t picture_off[3]; uint8_t picture_off_pressed[3]; }; class CUDDisplay : public ESPMegaDisplay { public: CUDDisplay(cud_display_conf_t *conf); void begin(); void display_init(); private: // States Calculation bool get_lights_state(); bool get_fans_state(); // Callbacks void handle_input_change(uint8_t pin, bool state); void handle_output_change(uint8_t pin, bool state); void handle_aqi_change(char *value); void handle_payload(uint8_t type, uint8_t* payload, uint8_t length); void handle_ac_change(uint8_t mode, uint8_t fan_speed, uint8_t temperature); void handle_ac_sensor(float temperature, float humidity); void handle_touch(uint8_t page_id, uint8_t element_id, uint8_t touch_type); // Change Display Elements void set_display_light_state(uint8_t row, bool state); void set_display_light_all_state(); void set_display_fan_state(uint8_t row, bool state); void set_display_fan_all_state(); void set_display_mosquito_zapper_state(bool state); void set_display_air_purifier_state(bool state); void refresh_display(); void refresh_display_ac(); // Helper Functions void system_toggle(); // AC Functions and Variables void set_ac_lock(bool state); bool get_ac_lock(); bool ac_locked; uint8_t previous_mode; // Used to store mode prior to turning off // Local Variables cud_display_conf_t *conf; cud_display_light_group_t light_group; cud_display_fan_group_t fan_group; };