2023-12-30 06:49:37 +00:00
|
|
|
#pragma once
|
2023-12-29 13:04:25 +00:00
|
|
|
#include <ESPMegaDisplay.hpp>
|
2023-12-29 16:43:12 +00:00
|
|
|
#include <TimeStructure.hpp>
|
|
|
|
#include <ESPMegaIoT.hpp>
|
2023-12-29 17:49:09 +00:00
|
|
|
#include <DigitalInputCard.hpp>
|
|
|
|
#include <DigitalOutputCard.hpp>
|
2023-12-30 15:50:19 +00:00
|
|
|
#include <ClimateCard.hpp>
|
2023-12-29 13:04:25 +00:00
|
|
|
|
2024-03-19 19:22:34 +00:00
|
|
|
// Password Obfuscation
|
|
|
|
#define PASSWORD_OBFUSCATION_STRING "********"
|
|
|
|
|
2023-12-29 17:49:09 +00:00
|
|
|
// Page IDs
|
2023-12-30 15:50:19 +00:00
|
|
|
#define INTERNAL_DISPLAY_BOOT_PAGE 0
|
|
|
|
#define INTERNAL_DISPLAY_DASHBOARD_PAGE 1
|
|
|
|
#define INTERNAL_DISPLAY_INPUT_PAGE 2
|
|
|
|
#define INTERNAL_DISPLAY_OUTPUT_PAGE 3
|
|
|
|
#define INTERNAL_DISPLAY_AC_PAGE 4
|
|
|
|
#define INTERNAL_DISPLAY_PWM_ADJUSTMENT_PAGE 5
|
|
|
|
#define INTERNAL_DISPLAY_NETWORK_CONFIG_PAGE 6
|
|
|
|
#define INTERNAL_DISPLAY_OTA_PAGE 9
|
|
|
|
#define INTERNAL_DISPLAY_CLIMATE_NULL_PTR_PAGE 10
|
|
|
|
#define INTERNAL_DISPLAY_MQTT_CONFIG_PAGE 11
|
|
|
|
#define INTERNAL_DISPLAY_INPUT_NULL_PTR_PAGE 12
|
|
|
|
#define INTERNAL_DISPLAY_OUTPUT_NULL_PTR_PAGE 13
|
2023-12-29 13:04:25 +00:00
|
|
|
|
2023-12-29 16:43:12 +00:00
|
|
|
// Picture IDs
|
|
|
|
#define PIC_LAN_DISCONNECTED 2
|
|
|
|
#define PIC_LAN_CONNECTED 3
|
|
|
|
#define PIC_MQTT_DISCONNECTED 4
|
|
|
|
#define PIC_MQTT_CONNECTED 5
|
2023-12-29 17:49:09 +00:00
|
|
|
#define PIC_PWM_BAR_ON 33
|
|
|
|
#define PIC_PWM_BAR_OFF 48
|
2023-12-30 17:25:07 +00:00
|
|
|
#define PIC_AC_MODE_OFF_ACTIVE 24
|
|
|
|
#define PIC_AC_MODE_OFF_INACTIVE 25
|
|
|
|
#define PIC_AC_MODE_FAN_ACTIVE 22
|
|
|
|
#define PIC_AC_MODE_FAN_INACTIVE 23
|
|
|
|
#define PIC_AC_MODE_COOL_ACTIVE 12
|
|
|
|
#define PIC_AC_MODE_COOL_INACTIVE 13
|
|
|
|
#define PIC_AC_FAN_SPEED_AUTO_ACTIVE 14
|
|
|
|
#define PIC_AC_FAN_SPEED_AUTO_INACTIVE 15
|
|
|
|
#define PIC_AC_FAN_SPEED_LOW_ACTIVE 18
|
|
|
|
#define PIC_AC_FAN_SPEED_LOW_INACTIVE 19
|
|
|
|
#define PIC_AC_FAN_SPEED_MEDIUM_ACTIVE 20
|
|
|
|
#define PIC_AC_FAN_SPEED_MEDIUM_INACTIVE 21
|
|
|
|
#define PIC_AC_FAN_SPEED_HIGH_ACTIVE 16
|
|
|
|
#define PIC_AC_FAN_SPEED_HIGH_INACTIVE 17
|
|
|
|
|
|
|
|
// AC Fan Speeds and Mode Position Assumptions
|
|
|
|
#define AC_FAN_SPEED_AUTO 0
|
|
|
|
#define AC_FAN_SPEED_LOW 1
|
|
|
|
#define AC_FAN_SPEED_MEDIUM 2
|
|
|
|
#define AC_FAN_SPEED_HIGH 3
|
|
|
|
#define AC_MODE_OFF 0
|
|
|
|
#define AC_MODE_FAN_ONLY 1
|
|
|
|
#define AC_MODE_COOL 2
|
2023-12-29 16:43:12 +00:00
|
|
|
|
2023-12-29 17:49:09 +00:00
|
|
|
// Messages
|
|
|
|
#define MSG_MQTT_CONNECTED "BMS Managed"
|
|
|
|
#define MSG_MQTT_DISCONNECTED "Standalone"
|
2023-12-30 15:50:19 +00:00
|
|
|
#define MSG_PWM_ADJUSTMENT_STATE_ON "ON"
|
|
|
|
#define MSG_PWM_ADJUSTMENT_STATE_OFF "OFF"
|
2023-12-29 17:49:09 +00:00
|
|
|
|
|
|
|
// Refresh Interval
|
|
|
|
#define INTERNAL_DISPLAY_CLOCK_REFRESH_INTERVAL 15000
|
|
|
|
#define INTERNAL_DISPLAY_TOP_BAR_REFRESH_INTERVAL 5000
|
2023-12-29 16:43:12 +00:00
|
|
|
|
2023-12-30 15:50:19 +00:00
|
|
|
// Touch Types
|
|
|
|
#define TOUCH_TYPE_PRESS 0x01
|
|
|
|
#define TOUCH_TYPE_RELEASE 0x0
|
|
|
|
|
2024-01-01 05:56:52 +00:00
|
|
|
/**
|
|
|
|
* @brief The internal display of the ESPMegaPRO
|
|
|
|
*
|
|
|
|
* This is the display that is installed on some ESPMegaPRO Chassis. It is a 3.5" TFT LCD with a resistive touch screen.
|
|
|
|
*
|
|
|
|
* You can use this display to monitor the status of the ESPMegaPRO and also to control the various components of the
|
|
|
|
* ESPMegaPRO.
|
|
|
|
*
|
|
|
|
* If you are using a custom display, you need to create a class that inherits from ESPMegaDisplay and implement the
|
|
|
|
* methods in that class, you may refer to this class for reference.
|
|
|
|
*
|
|
|
|
* @note This class is automatically instantiated by the ESPMegaPRO and can be accessed via the `display` variable.
|
|
|
|
*/
|
2023-12-29 13:04:25 +00:00
|
|
|
class InternalDisplay : public ESPMegaDisplay {
|
|
|
|
public:
|
2023-12-29 14:41:19 +00:00
|
|
|
InternalDisplay(HardwareSerial *displayAdapter);
|
2023-12-29 16:43:12 +00:00
|
|
|
void begin(ESPMegaIoT *iot, std::function<rtctime_t()> getRtcTime);
|
2023-12-29 13:04:25 +00:00
|
|
|
void loop();
|
2023-12-29 17:49:09 +00:00
|
|
|
void bindInputCard(DigitalInputCard *inputCard);
|
|
|
|
void bindOutputCard(DigitalOutputCard *outputCard);
|
2023-12-30 15:50:19 +00:00
|
|
|
void bindClimateCard(ClimateCard *climateCard);
|
2023-12-31 06:41:48 +00:00
|
|
|
void unbindInputCard();
|
|
|
|
void unbindOutputCard();
|
|
|
|
void unbindClimateCard();
|
2023-12-29 16:43:12 +00:00
|
|
|
|
2023-12-29 13:04:25 +00:00
|
|
|
private:
|
2023-12-31 06:41:48 +00:00
|
|
|
uint8_t bindedInputCardCallbackHandler;
|
|
|
|
uint8_t bindedOutputCardCallbackHandler;
|
|
|
|
uint8_t bindedClimateCardCallbackHandler;
|
|
|
|
uint8_t bindedClimateCardSensorCallbackHandler;
|
2023-12-29 17:49:09 +00:00
|
|
|
DigitalInputCard *inputCard;
|
|
|
|
DigitalOutputCard *outputCard;
|
2023-12-30 15:50:19 +00:00
|
|
|
ClimateCard *climateCard;
|
2023-12-29 13:04:25 +00:00
|
|
|
void handleInputStateChange(uint8_t pin, bool state);
|
2023-12-29 16:43:12 +00:00
|
|
|
void handlePwmStateChange(uint8_t pin, bool state, uint16_t value);
|
2023-12-29 13:04:25 +00:00
|
|
|
void handlePageChange(uint8_t page);
|
|
|
|
void setOutputBar(uint8_t pin, uint16_t value);
|
|
|
|
void setOutputStateColor(uint8_t pin, bool state);
|
|
|
|
void setInputMarker(uint8_t pin, bool state);
|
2023-12-30 19:18:57 +00:00
|
|
|
void handleACStateChange(uint8_t mode, uint8_t fan_speed, uint8_t temperature);
|
2023-12-29 13:04:25 +00:00
|
|
|
void saveNetworkConfig();
|
|
|
|
void saveMQTTConfig();
|
2023-12-29 16:43:12 +00:00
|
|
|
void updateStatusIcons(bool networkStatus, bool mqttStatus);
|
2023-12-29 13:04:25 +00:00
|
|
|
void updateClock();
|
|
|
|
void refreshPage();
|
|
|
|
void refreshPage(uint8_t page);
|
|
|
|
void refreshDashboard();
|
|
|
|
void refreshInput();
|
|
|
|
void refreshOutput();
|
|
|
|
void refreshAC();
|
2023-12-30 15:50:19 +00:00
|
|
|
void refreshPWMAdjustment();
|
|
|
|
void refreshPWMAdjustmentSlider();
|
|
|
|
void refreshPWMAdjustmentState();
|
|
|
|
void refreshPWMAdjustmentId();
|
2023-12-30 17:51:34 +00:00
|
|
|
void refreshNetworkConfig();
|
|
|
|
void refreshMQTTConfig();
|
2024-01-11 16:19:50 +00:00
|
|
|
void setBootStatus(const char* status);
|
2023-12-30 17:51:34 +00:00
|
|
|
void sendIpToDisplay(IPAddress ip);
|
2023-12-30 15:50:19 +00:00
|
|
|
uint8_t pmwAdjustmentPin;
|
|
|
|
// Touch handlers
|
|
|
|
void handleTouch(uint8_t page, uint8_t component, uint8_t type);
|
|
|
|
void handlePWMAdjustmentTouch(uint8_t component, uint8_t type);
|
|
|
|
void handleACTouch(uint8_t component, uint8_t type);
|
2023-12-29 17:49:09 +00:00
|
|
|
MqttConfig *mqttConfig;
|
|
|
|
NetworkConfig *networkConfig;
|
2023-12-29 16:43:12 +00:00
|
|
|
// Pointers to various data
|
|
|
|
ESPMegaIoT *iot;
|
|
|
|
std::function<rtctime_t()> getRtcTime;
|
2023-12-29 13:04:25 +00:00
|
|
|
};
|