2024-09-15 16:43:29 +02:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "esphome/core/component.h"
|
2024-09-20 20:45:18 +02:00
|
|
|
#include "esphome/core/entity_base.h"
|
2024-09-15 16:43:29 +02:00
|
|
|
#include "esphome/core/log.h"
|
2024-09-20 00:29:52 +02:00
|
|
|
#include "esphome/components/uart/uart.h"
|
2024-09-20 20:45:18 +02:00
|
|
|
#include <map>
|
2024-09-20 00:29:52 +02:00
|
|
|
|
|
|
|
#ifdef USE_SENSOR
|
2024-09-15 16:43:29 +02:00
|
|
|
#include "esphome/components/sensor/sensor.h"
|
2024-09-20 00:29:52 +02:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef USE_BINARY_SENSOR
|
2024-09-15 16:43:29 +02:00
|
|
|
#include "esphome/components/binary_sensor/binary_sensor.h"
|
2024-09-20 00:29:52 +02:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef USE_TEXT_SENSOR
|
2024-09-15 16:43:29 +02:00
|
|
|
#include "esphome/components/text_sensor/text_sensor.h"
|
2024-09-20 00:29:52 +02:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef USE_SWITCH
|
2024-09-16 02:25:05 +02:00
|
|
|
#include "esphome/components/switch/switch.h"
|
2024-09-20 20:45:18 +02:00
|
|
|
#include "switch/tw7100_switch.h"
|
2024-09-20 00:29:52 +02:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef USE_SELECT
|
2024-09-16 22:38:48 +02:00
|
|
|
#include "esphome/components/select/select.h"
|
|
|
|
#include "select/tw7100_select.h"
|
2024-09-20 00:29:52 +02:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef USE_NUMBER
|
|
|
|
#include "esphome/components/number/number.h"
|
2024-09-17 23:06:18 +02:00
|
|
|
#include "number/tw7100_number.h"
|
2024-09-20 00:29:52 +02:00
|
|
|
#endif
|
2024-09-15 16:43:29 +02:00
|
|
|
|
|
|
|
namespace esphome {
|
|
|
|
namespace tw7100 {
|
|
|
|
|
|
|
|
class tw7100Component : public PollingComponent, public uart::UARTDevice {
|
|
|
|
private:
|
|
|
|
unsigned long _max_loop_time = 30;
|
|
|
|
unsigned long _readStringUntil_timeout = _max_loop_time/5; // number of milliseconds to wait for the next char before aborting timed read
|
2024-09-16 02:25:05 +02:00
|
|
|
unsigned long _timeout_after_cmd = 1000;
|
2024-09-19 00:43:28 +02:00
|
|
|
unsigned long _specialTimeoutMillis = 0;
|
2024-09-15 16:43:29 +02:00
|
|
|
|
|
|
|
public:
|
|
|
|
tw7100Component() = default;
|
|
|
|
|
|
|
|
std::string readStringUntil(char terminator);
|
2024-09-16 02:25:05 +02:00
|
|
|
void push_cmd(std::string cmd, std::string param);
|
2024-09-15 16:43:29 +02:00
|
|
|
void update_sensor(std::pair<std::string, std::string> data);
|
|
|
|
std::pair<std::string, std::string> parse_response(std::string data);
|
|
|
|
int timedRead(void);
|
|
|
|
void setup() override;
|
|
|
|
void update() override;
|
|
|
|
void loop() override;
|
|
|
|
void dump_config() override;
|
2024-09-20 00:29:52 +02:00
|
|
|
#ifdef USE_BINARY_SENSOR
|
2024-09-15 16:43:29 +02:00
|
|
|
void set_powered(binary_sensor::BinarySensor *powered) { this->powered_ = powered; }
|
|
|
|
void set_has_signal(binary_sensor::BinarySensor *has_signal) { this->has_signal_ = has_signal; }
|
2024-09-20 00:29:52 +02:00
|
|
|
#endif
|
|
|
|
#ifdef USE_SENSOR
|
2024-09-15 16:43:29 +02:00
|
|
|
void set_lamp_hours(sensor::Sensor *lamp_hours) { this->lamp_hours_ = lamp_hours; }
|
|
|
|
void set_power_status(sensor::Sensor *power_status) { this->power_status_ = power_status; }
|
|
|
|
void set_signal_status(sensor::Sensor *signal_status) { this->signal_status_ = signal_status; }
|
|
|
|
void set_luminance_level(sensor::Sensor *luminance_level) { this->luminance_level_ = luminance_level; }
|
2024-09-20 00:29:52 +02:00
|
|
|
#endif
|
|
|
|
#ifdef USE_TEXT_SENSOR
|
2024-09-15 16:43:29 +02:00
|
|
|
void set_serial(text_sensor::TextSensor *serial) { this->serial_ = serial; }
|
2024-09-20 00:29:52 +02:00
|
|
|
#endif
|
|
|
|
#ifdef USE_SWITCH
|
2024-09-20 20:45:18 +02:00
|
|
|
void set_set_pwr(tw7100::tw7100Switch *switch_) { this->power_switch_ = switch_; }
|
|
|
|
void set_set_btaudio(tw7100::tw7100Switch *switch_) { this->btaudio_switch_ = switch_; }
|
|
|
|
void set_set_mute(tw7100::tw7100Switch *switch_) { this->mute_switch_ = switch_; }
|
|
|
|
void set_set_wlpwr(tw7100::tw7100Switch *switch_) { this->wlan_power_switch_ = switch_; }
|
|
|
|
void set_set_autohome(tw7100::tw7100Switch *switch_) { this->autohome_switch_ = switch_; }
|
|
|
|
void set_set_product(tw7100::tw7100Switch *switch_) { this->product_switch_ = switch_; }
|
|
|
|
void set_set_standbyconf(tw7100::tw7100Switch *switch_) { this->standbyconf_switch_ = switch_; }
|
|
|
|
void set_set_illum(tw7100::tw7100Switch *switch_) { this->illumination_switch_ = switch_; }
|
|
|
|
void set_set_vreverse(tw7100::tw7100Switch *switch_) { this->vflip_switch_ = switch_; }
|
|
|
|
void set_set_hreverse(tw7100::tw7100Switch *switch_) { this->hflip_switch_ = switch_; }
|
|
|
|
void set_set_audioout(tw7100::tw7100Switch *switch_) { this->audioout_switch_ = switch_; }
|
|
|
|
void set_set_imgproc(tw7100::tw7100Switch *switch_) { this->img_processing_switch_ = switch_; }
|
|
|
|
void set_set_4kenhance(tw7100::tw7100Switch *switch_) { this->_4kenhance_switch_ = switch_; }
|
|
|
|
void set_set_logto(tw7100::tw7100Switch *switch_) { this->logto_switch_ = switch_; }
|
2024-09-20 00:29:52 +02:00
|
|
|
#endif
|
|
|
|
#ifdef USE_SELECT
|
2024-09-19 22:44:44 +02:00
|
|
|
void set_set_source(tw7100::tw7100Select *select_) { this->source_select_ = select_; }
|
|
|
|
void set_set_luminance(tw7100::tw7100Select *select_) { this->luminance_select_ = select_; }
|
|
|
|
void set_set_aspect(tw7100::tw7100Select *select_) { this->aspect_select_ = select_; }
|
|
|
|
void set_set_ovscan(tw7100::tw7100Select *select_) { this->ovscan_select_ = select_; }
|
|
|
|
void set_set_cmode(tw7100::tw7100Select *select_) { this->cmode_select_ = select_; }
|
|
|
|
void set_set_gamma(tw7100::tw7100Select *select_) { this->gamma_select_ = select_; }
|
|
|
|
void set_set_imgpreset(tw7100::tw7100Select *select_) { this->imgpreset_select_ = select_; }
|
|
|
|
void set_set_mcfi(tw7100::tw7100Select *select_) { this->mcfi_select_ = select_; }
|
|
|
|
void set_set_clrspace(tw7100::tw7100Select *select_) { this->clrspace_select_ = select_; }
|
|
|
|
void set_set_dynrange(tw7100::tw7100Select *select_) { this->dynrange_select_ = select_; }
|
|
|
|
void set_set_msel(tw7100::tw7100Select *select_) { this->msel_select_ = select_; }
|
|
|
|
void set_set_speed(tw7100::tw7100Select *select_) { this->speed_select_ = select_; }
|
2024-09-20 00:29:52 +02:00
|
|
|
#endif
|
|
|
|
#ifdef USE_NUMBER
|
2024-09-18 02:00:41 +02:00
|
|
|
void set_set_vol(tw7100::tw7100Number *number_) { this->volume_number_ = number_; }
|
|
|
|
void set_set_vkeystone(tw7100::tw7100Number *number_) { this->vkeystone_number_ = number_; }
|
|
|
|
void set_set_hkeystone(tw7100::tw7100Number *number_) { this->hkeystone_number_ = number_; }
|
|
|
|
void set_set_bright(tw7100::tw7100Number *number_) { this->brightness_number_ = number_; }
|
|
|
|
void set_set_contrast(tw7100::tw7100Number *number_) { this->contrast_number_ = number_; }
|
|
|
|
void set_set_density(tw7100::tw7100Number *number_) { this->density_number_ = number_; }
|
|
|
|
void set_set_tint(tw7100::tw7100Number *number_) { this->tint_number_ = number_; }
|
|
|
|
void set_set_ctemp(tw7100::tw7100Number *number_) { this->ctemp_number_ = number_; }
|
|
|
|
void set_set_fcolor(tw7100::tw7100Number *number_) { this->fcolor_number_ = number_; }
|
|
|
|
void set_set_nrs(tw7100::tw7100Number *number_) { this->nrs_number_ = number_; }
|
|
|
|
void set_set_mpegnrs(tw7100::tw7100Number *number_) { this->mpegnrs_number_ = number_; }
|
|
|
|
void set_set_offsetr(tw7100::tw7100Number *number_) { this->offsetr_number_ = number_; }
|
|
|
|
void set_set_offsetg(tw7100::tw7100Number *number_) { this->offsetg_number_ = number_; }
|
2024-09-20 14:49:38 +02:00
|
|
|
void set_set_offsetb(tw7100::tw7100Number *number_) { this->offsetb_number_ = number_; }
|
2024-09-18 02:00:41 +02:00
|
|
|
void set_set_gainr(tw7100::tw7100Number *number_) { this->gainr_number_ = number_; }
|
|
|
|
void set_set_gaing(tw7100::tw7100Number *number_) { this->gaing_number_ = number_; }
|
|
|
|
void set_set_gainb(tw7100::tw7100Number *number_) { this->gainb_number_ = number_; }
|
|
|
|
void set_set_shrf(tw7100::tw7100Number *number_) { this->shrf_number_ = number_; }
|
|
|
|
void set_set_shrs(tw7100::tw7100Number *number_) { this->shrs_number_ = number_; }
|
|
|
|
void set_set_derange(tw7100::tw7100Number *number_) { this->derange_number_ = number_; }
|
|
|
|
void set_set_destrength(tw7100::tw7100Number *number_) { this->destrength_number_ = number_; }
|
2024-09-20 00:29:52 +02:00
|
|
|
#endif
|
2024-09-18 02:00:41 +02:00
|
|
|
|
2024-09-20 20:45:18 +02:00
|
|
|
private:
|
|
|
|
#ifdef USE_BINARY_SENSOR
|
|
|
|
binary_sensor::BinarySensor *dummy_binary_sensor = new binary_sensor::BinarySensor();
|
|
|
|
#endif
|
|
|
|
#ifdef USE_SENSOR
|
|
|
|
sensor::Sensor *dummy_sensor = new sensor::Sensor();
|
|
|
|
#endif
|
|
|
|
#ifdef USE_TEXT_SENSOR
|
|
|
|
text_sensor::TextSensor *dummy_text_sensor = new text_sensor::TextSensor();
|
|
|
|
#endif
|
|
|
|
#ifdef USE_SWITCH
|
|
|
|
tw7100::tw7100Switch *dummy_switch = new tw7100::tw7100Switch();
|
|
|
|
#endif
|
|
|
|
#ifdef USE_SELECT
|
|
|
|
tw7100::tw7100Select *dummy_select = new tw7100::tw7100Select();
|
|
|
|
#endif
|
|
|
|
#ifdef USE_NUMBER
|
|
|
|
tw7100::tw7100Number *dummy_number = new tw7100::tw7100Number();
|
|
|
|
#endif
|
2024-09-15 16:43:29 +02:00
|
|
|
|
|
|
|
protected:
|
2024-09-20 00:29:52 +02:00
|
|
|
#ifdef USE_BINARY_SENSOR
|
2024-09-20 20:45:18 +02:00
|
|
|
binary_sensor::BinarySensor *powered_ = dummy_binary_sensor;
|
|
|
|
binary_sensor::BinarySensor *has_signal_ = dummy_binary_sensor;
|
2024-09-20 00:29:52 +02:00
|
|
|
#endif
|
|
|
|
#ifdef USE_SENSOR
|
2024-09-20 20:45:18 +02:00
|
|
|
sensor::Sensor *lamp_hours_ = dummy_sensor;
|
|
|
|
sensor::Sensor *power_status_ = dummy_sensor;
|
|
|
|
sensor::Sensor *signal_status_ = dummy_sensor;
|
|
|
|
sensor::Sensor *luminance_level_ = dummy_sensor;
|
2024-09-20 00:29:52 +02:00
|
|
|
#endif
|
|
|
|
#ifdef USE_TEXT_SENSOR
|
2024-09-20 20:45:18 +02:00
|
|
|
text_sensor::TextSensor *serial_ = dummy_text_sensor;
|
2024-09-20 00:29:52 +02:00
|
|
|
#endif
|
|
|
|
#ifdef USE_SWITCH
|
2024-09-20 20:45:18 +02:00
|
|
|
tw7100::tw7100Switch *power_switch_ = dummy_switch;
|
|
|
|
tw7100::tw7100Switch *btaudio_switch_ = dummy_switch;
|
|
|
|
tw7100::tw7100Switch *mute_switch_ = dummy_switch;
|
|
|
|
tw7100::tw7100Switch *wlan_power_switch_ = dummy_switch;
|
|
|
|
tw7100::tw7100Switch *autohome_switch_ = dummy_switch;
|
|
|
|
tw7100::tw7100Switch *product_switch_ = dummy_switch;
|
|
|
|
tw7100::tw7100Switch *standbyconf_switch_ = dummy_switch;
|
|
|
|
tw7100::tw7100Switch *illumination_switch_ = dummy_switch;
|
|
|
|
tw7100::tw7100Switch *vflip_switch_ = dummy_switch;
|
|
|
|
tw7100::tw7100Switch *hflip_switch_ = dummy_switch;
|
|
|
|
tw7100::tw7100Switch *audioout_switch_ = dummy_switch;
|
|
|
|
tw7100::tw7100Switch *img_processing_switch_ = dummy_switch;
|
|
|
|
tw7100::tw7100Switch *_4kenhance_switch_ = dummy_switch;
|
|
|
|
tw7100::tw7100Switch *logto_switch_ = dummy_switch;
|
2024-09-20 00:29:52 +02:00
|
|
|
#endif
|
|
|
|
#ifdef USE_SELECT
|
2024-09-20 20:45:18 +02:00
|
|
|
tw7100::tw7100Select *source_select_ = dummy_select;;
|
|
|
|
tw7100::tw7100Select *luminance_select_ = dummy_select;
|
|
|
|
tw7100::tw7100Select *aspect_select_ = dummy_select;
|
|
|
|
tw7100::tw7100Select *ovscan_select_ = dummy_select;
|
|
|
|
tw7100::tw7100Select *cmode_select_ = dummy_select;
|
|
|
|
tw7100::tw7100Select *gamma_select_ = dummy_select;
|
|
|
|
tw7100::tw7100Select *imgpreset_select_ = dummy_select;
|
|
|
|
tw7100::tw7100Select *mcfi_select_ = dummy_select;
|
|
|
|
tw7100::tw7100Select *clrspace_select_ = dummy_select;
|
|
|
|
tw7100::tw7100Select *dynrange_select_ = dummy_select;
|
|
|
|
tw7100::tw7100Select *msel_select_ = dummy_select;
|
|
|
|
tw7100::tw7100Select *speed_select_ = dummy_select;
|
2024-09-20 00:29:52 +02:00
|
|
|
#endif
|
|
|
|
#ifdef USE_NUMBER
|
2024-09-20 20:45:18 +02:00
|
|
|
tw7100::tw7100Number *volume_number_ = dummy_number;
|
|
|
|
tw7100::tw7100Number *vkeystone_number_ = dummy_number;
|
|
|
|
tw7100::tw7100Number *hkeystone_number_ = dummy_number;
|
|
|
|
tw7100::tw7100Number *brightness_number_ = dummy_number;
|
|
|
|
tw7100::tw7100Number *contrast_number_ = dummy_number;
|
|
|
|
tw7100::tw7100Number *density_number_ = dummy_number;
|
|
|
|
tw7100::tw7100Number *tint_number_ = dummy_number;
|
|
|
|
tw7100::tw7100Number *ctemp_number_ = dummy_number;
|
|
|
|
tw7100::tw7100Number *fcolor_number_ = dummy_number;
|
|
|
|
tw7100::tw7100Number *nrs_number_ = dummy_number;
|
|
|
|
tw7100::tw7100Number *mpegnrs_number_ = dummy_number;
|
|
|
|
tw7100::tw7100Number *offsetr_number_ = dummy_number;
|
|
|
|
tw7100::tw7100Number *offsetg_number_ = dummy_number;
|
|
|
|
tw7100::tw7100Number *offsetb_number_ = dummy_number;
|
|
|
|
tw7100::tw7100Number *gainr_number_ = dummy_number;
|
|
|
|
tw7100::tw7100Number *gaing_number_ = dummy_number;
|
|
|
|
tw7100::tw7100Number *gainb_number_ = dummy_number;
|
|
|
|
tw7100::tw7100Number *shrf_number_ = dummy_number;
|
|
|
|
tw7100::tw7100Number *shrs_number_ = dummy_number;
|
|
|
|
tw7100::tw7100Number *derange_number_ = dummy_number;
|
|
|
|
tw7100::tw7100Number *destrength_number_ = dummy_number;
|
2024-09-20 00:29:52 +02:00
|
|
|
#endif
|
2024-09-15 16:43:29 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace tw7100
|
|
|
|
} // namespace esphome
|