pre-lcd
This commit is contained in:
parent
202e49f6cf
commit
baf808bf26
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"editor.tokenColorCustomizations": {
|
||||||
|
"comments": "",
|
||||||
|
"textMateRules": []
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,142 @@
|
||||||
|
#include "cud_display.hpp"
|
||||||
|
|
||||||
|
CUDDisplay::CUDDisplay(cud_display_conf_t *conf) : ESPMegaDisplay(conf->uart, conf->communication_baudrate, conf->ota_baudrate, conf->tx, conf->rx)
|
||||||
|
{
|
||||||
|
this->conf = conf;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CUDDisplay::begin()
|
||||||
|
{
|
||||||
|
// Register callbacks
|
||||||
|
auto binded_input_callback = std::bind(&CUDDisplay::handle_input_change, this, std::placeholders::_1, std::placeholders::_2);
|
||||||
|
auto binded_output_callback = std::bind(&CUDDisplay::handle_output_change, this, std::placeholders::_1, std::placeholders::_2);
|
||||||
|
auto binded_aqi_callback = std::bind(&CUDDisplay::handle_aqi_change, this, std::placeholders::_1);
|
||||||
|
auto binded_payload_callback = std::bind(&CUDDisplay::handle_payload, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
|
||||||
|
this->conf->inputCard->registerCallback(binded_input_callback);
|
||||||
|
this->conf->outputCard->registerChangeCallback(binded_output_callback);
|
||||||
|
this->conf->aqi->registerCallback(binded_aqi_callback);
|
||||||
|
this->registerPayloadCallback(binded_payload_callback);
|
||||||
|
// Initialize the display
|
||||||
|
this->display_init();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CUDDisplay::display_init() {
|
||||||
|
// Perform a reset on the display
|
||||||
|
this->reset();
|
||||||
|
// Set the display to the main screen
|
||||||
|
this->jumpToPage(LCD_PAGE_ID_DASHBOARD);
|
||||||
|
// Send the initial states to the display
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CUDDisplay::get_lights_state()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
if (this->conf->outputCard->getState(this->conf->light_pins[i]))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CUDDisplay::get_fans_state()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 3; i++)
|
||||||
|
{
|
||||||
|
if (this->conf->outputCard->getState(this->conf->fan_pins[i]))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CUDDisplay::handle_input_change(uint8_t pin, bool state)
|
||||||
|
{
|
||||||
|
// This is not needed for now. We are only handling outputs
|
||||||
|
// Putting this here in case we need to handle inputs in the future
|
||||||
|
}
|
||||||
|
|
||||||
|
void CUDDisplay::handle_output_change(uint8_t pin, bool state)
|
||||||
|
{
|
||||||
|
// Check if it is a light or fan
|
||||||
|
// If it's a light, call set_display_light_state
|
||||||
|
// If it's a fan, call set_display_fan_state
|
||||||
|
// If it's the air purifier, call set_display_air_purifier_state
|
||||||
|
// If it's the mosquito zapper, call set_display_mosquito_zapper_state
|
||||||
|
|
||||||
|
// Check if it's the air purifier
|
||||||
|
if (pin == this->conf->air_purifier_pin)
|
||||||
|
{
|
||||||
|
this->set_display_air_purifier_state(state);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if it's the mosquito zapper
|
||||||
|
if (pin == this->conf->mosquito_zapper_pin)
|
||||||
|
{
|
||||||
|
this->set_display_mosquito_zapper_state(state);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Loop through each to check if the pin is a light
|
||||||
|
for (int i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
if (pin == this->conf->light_pins[i])
|
||||||
|
{
|
||||||
|
this->set_display_light_state(i, state);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Loop through each to check if the pin is a fan
|
||||||
|
for (int i = 0; i < 3; i++)
|
||||||
|
{
|
||||||
|
if (pin == this->conf->fan_pins[i])
|
||||||
|
{
|
||||||
|
this->set_display_fan_state(i, state);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// The pin is not the one that our display is handling, so we can ignore it
|
||||||
|
}
|
||||||
|
|
||||||
|
void CUDDisplay::handle_aqi_change(char *value)
|
||||||
|
{
|
||||||
|
// Update the AQI value on the display
|
||||||
|
float aqi = atof(value);
|
||||||
|
// TODO - Update the AQI value on the display
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Handle the payload from the display that is not handled by the parent class
|
||||||
|
*
|
||||||
|
* @param type Payload type
|
||||||
|
* @param payload The payload itself
|
||||||
|
* @param length The length of the payload excluding the type
|
||||||
|
*/
|
||||||
|
void CUDDisplay::handle_payload(uint8_t type, uint8_t *payload, uint8_t length)
|
||||||
|
{
|
||||||
|
// If payload of type 0x92 is received
|
||||||
|
// Reset the display and reinitialize it
|
||||||
|
if (type == 0x92)
|
||||||
|
{
|
||||||
|
this->display_init();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CUDDisplay::set_display_light_state(uint8_t row, bool state)
|
||||||
|
{
|
||||||
|
// set_display_light_state implementation
|
||||||
|
}
|
||||||
|
|
||||||
|
void CUDDisplay::set_display_fan_state(uint8_t row, bool state)
|
||||||
|
{
|
||||||
|
// set_display_fan_state implementation
|
||||||
|
}
|
||||||
|
|
||||||
|
void CUDDisplay::set_display_mosquito_zapper_state(bool state)
|
||||||
|
{
|
||||||
|
// set_display_mosquito_zapper_state implementation
|
||||||
|
}
|
||||||
|
|
||||||
|
void CUDDisplay::set_display_air_purifier_state(bool state)
|
||||||
|
{
|
||||||
|
// set_display_air_purifier_state implementation
|
||||||
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
#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;
|
||||||
|
};
|
||||||
|
|
||||||
|
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);
|
||||||
|
// Change Display Elements
|
||||||
|
void set_display_light_state(uint8_t row, bool state);
|
||||||
|
void set_display_fan_state(uint8_t row, bool state);
|
||||||
|
void set_display_mosquito_zapper_state(bool state);
|
||||||
|
void set_display_air_purifier_state(bool state);
|
||||||
|
// Local Variables
|
||||||
|
cud_display_conf_t *conf;
|
||||||
|
};
|
|
@ -1,4 +1,4 @@
|
||||||
#include <ir_codes.hpp>
|
#include "ir_codes.hpp"
|
||||||
|
|
||||||
const uint16_t ir_code_cool[4][17][407] = {
|
const uint16_t ir_code_cool[4][17][407] = {
|
||||||
// Fan Speed Auto
|
// Fan Speed Auto
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
#define LCD_PAGE_ID_BOOT 0
|
||||||
|
#define LCD_PAGE_ID_DASHBOARD 1
|
|
@ -1,9 +1,9 @@
|
||||||
#include <ESPMegaProOS.hpp>
|
#include <ESPMegaProOS.hpp>
|
||||||
#include <lcd_elements.hpp>
|
|
||||||
#include <ir_codes.hpp>
|
|
||||||
#include <ClimateCard.hpp>
|
#include <ClimateCard.hpp>
|
||||||
#include <ETH.h>
|
#include <ETH.h>
|
||||||
#include <RemoteVariable.hpp>
|
#include <RemoteVariable.hpp>
|
||||||
|
#include "lcd_elements.hpp"
|
||||||
|
#include "ir_codes.hpp"
|
||||||
|
|
||||||
/***********************************************
|
/***********************************************
|
||||||
* Pin Definitions *
|
* Pin Definitions *
|
||||||
|
|
Loading…
Reference in New Issue