cud-iot-v3/src/display.hpp

94 lines
2.8 KiB
C++

/**
* @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 <InternalDisplay.hpp>
#include <lcd_elements.hpp>
#include <ClimateCard.hpp>
#include <DigitalInputCard.hpp>
#include <DigitalOutputCard.hpp>
#include <RemoteVariable.hpp>
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;
};