Add all supported number components

This commit is contained in:
sqozz 2024-09-18 02:00:41 +02:00
parent 274ff30d9c
commit 290900747c
4 changed files with 173 additions and 24 deletions

View file

@ -10,21 +10,49 @@ CODEOWNERS = ["@sqozz"]
tw7100Number = tw7100_ns.class_("tw7100Number", number.Number, cg.Component) tw7100Number = tw7100_ns.class_("tw7100Number", number.Number, cg.Component)
CONFIG_SCHEMA = cv.Schema( numbers = [
{ ("VOL","mdi:volume-high"),
cv.GenerateID(): cv.use_id(tw7100), ("VKEYSTONE",""),
cv.Optional("VOL"): number.number_schema( ("HKEYSTONE",""),
tw7100Number ("BRIGHT","mdi:brightness-7"),
), ("CONTRAST","mdi:contrast"),
} ("DENSITY",""),
) ("TINT",""),
("CTEMP","mdi:format-color-fill"),
("FCOLOR","mdi:account"),
("NRS",""),
("MPEGNRS",""),
("OFFSETR","mdi:alpha-r-box-outline"),
("OFFSETG","mdi:alpha-g-box-outline"),
("OFFSETB","mdi:alpha-b-box-outline"),
("GAINR","mdi:alpha-r-circle-outline"),
("GAING","mdi:alpha-g-circle-outline"),
("GAINB","mdi:alpha-b-circle-outline"),
("SHRF","mdi:format-line-weight"),
("SHRS","mdi:image-filter-center-focus"),
("DERANGE","mdi:magnify-expand"),
("DESTRENGTH","mdi:magnify-plus-outline")
]
schema={cv.GenerateID(): cv.use_id(tw7100)}
for number_name,icon in numbers:
schema.update({cv.Optional(number_name): number.number_schema(tw7100Number, icon=icon)})
CONFIG_SCHEMA = cv.Schema(schema)
async def to_code(config): async def to_code(config):
parent = await cg.get_variable(config[CONF_ID]) parent = await cg.get_variable(config[CONF_ID])
if "VOL" in config: for number_name,icon in numbers:
number_ = await number.new_number(config["VOL"], min_value=0, max_value=255, step=1) if number_name in config:
cg.add(number_.set_cmd("VOL")) number_ = await number.new_number(config[number_name], min_value=0, max_value=255, step=1)
cg.add(number_.set_tw7100_parent(parent)) cg.add(number_.set_cmd(number_name))
cg.add(parent.set_set_volume(number_)) cg.add(number_.set_tw7100_parent(parent))
cg.add(getattr(parent, "set_set_{}".format(number_name.lower()))(number_))
#if "VOL" in config:
# number_ = await number.new_number(config["VOL"], min_value=0, max_value=255, step=1)
# cg.add(number_.set_cmd("VOL"))
# cg.add(number_.set_tw7100_parent(parent))
# cg.add(parent.set_set_volume(number_))

View file

@ -9,9 +9,6 @@ namespace tw7100 {
void tw7100Number::setup() { void tw7100Number::setup() {
static const char *const TAG = "tw7100Number::setup()"; static const char *const TAG = "tw7100Number::setup()";
if (cmd_ == "VOL") {
ESP_LOGV(TAG, "setup VOL");
}
ESP_LOGV(TAG, "setup done"); ESP_LOGV(TAG, "setup done");
} }
@ -25,10 +22,8 @@ void tw7100Number::control(float value) {
static const char *const TAG = "tw7100Number::control()"; static const char *const TAG = "tw7100Number::control()";
std::string param; std::string param;
if (cmd_ == "VOL") { param = std::to_string((int)value);
param = std::to_string((int)value); ESP_LOGV(TAG, "%s: %s (from %i)", cmd_, param, (int)value);
ESP_LOGV(TAG, "VOL: %s (from %i)", param, (int)value);
}
if (param.length() > 0 && state != value) { if (param.length() > 0 && state != value) {
parent_->push_cmd(cmd_, param); parent_->push_cmd(cmd_, param);

View file

@ -17,9 +17,9 @@ std::map<int, std::string> sourcelist;
std::vector<std::string> pwr_off_query_cmds{ "PWR?", "LAMP?" }; std::vector<std::string> pwr_off_query_cmds{ "PWR?", "LAMP?" };
std::vector<std::string> pwr_on_query_cmds{ std::vector<std::string> pwr_on_query_cmds{
// Projection screen adjustment settings // Projection screen adjustment settings
/*
"VKEYSTONE?", "VKEYSTONE?",
"HKEYSTONE?", "HKEYSTONE?",
/*
"QC?", "QC?",
"CORRECTMET?", "CORRECTMET?",
"ASPECT?", "ASPECT?",
@ -32,14 +32,15 @@ std::vector<std::string> pwr_on_query_cmds{
// Source/Input/Resolution settings // Source/Input/Resolution settings
"SOURCE?", "SOURCE?",
// Image settings // Image settings
/*
"BRIGHT?", "BRIGHT?",
"CONTRAST?", "CONTRAST?",
"DENSITY?", "DENSITY?",
"TINT?", "TINT?",
"CTEMP?", "CTEMP?",
"FCOLOR?", "FCOLOR?",
/*
"CMODE?", "CMODE?",
*/
"NRS?", "NRS?",
"MPEGNRS?", "MPEGNRS?",
"OFFSETR?", "OFFSETR?",
@ -48,13 +49,17 @@ std::vector<std::string> pwr_on_query_cmds{
"GAINR?", "GAINR?",
"GAING?", "GAING?",
"GAINB?", "GAINB?",
/*
"GAMMA?", "GAMMA?",
"CSEL?", "CSEL?",
"4KENHANCE?", "4KENHANCE?",
"IMGPRESET?", "IMGPRESET?",
*/
"SHRF?", "SHRF?",
"SHRS?", "SHRS?",
"DERANGE?", "DERANGE?",
"DESTRENGTH?",
/*
"MCFI?", "MCFI?",
"CLRSPACE?", "CLRSPACE?",
"DYNRANGE?", "DYNRANGE?",
@ -251,8 +256,88 @@ void tw7100Component::update_sensor(std::pair<std::string, std::string> data) {
mute_switch_->publish_state(value_string == "ON"); mute_switch_->publish_state(value_string == "ON");
} else if (cmd == "VOL") { } else if (cmd == "VOL") {
int value = std::stoi(value_string); int value = std::stoi(value_string);
volume_number_->publish_state(value);
ESP_LOGV(TAG, "updating volume number with value %s", value_string.c_str()); ESP_LOGV(TAG, "updating volume number with value %s", value_string.c_str());
volume_number_->publish_state(value);
} else if (cmd == "VKEYSTONE") {
int value = std::stoi(value_string);
ESP_LOGV(TAG, "updating vkeystone number with value %s", value_string.c_str());
vkeystone_number_->publish_state(value);
} else if (cmd == "HKEYSTONE") {
int value = std::stoi(value_string);
ESP_LOGV(TAG, "updating hkeystone number with value %s", value_string.c_str());
hkeystone_number_->publish_state(value);
} else if (cmd == "BRIGHT") {
int value = std::stoi(value_string);
ESP_LOGV(TAG, "updating brightness number with value %s", value_string.c_str());
brightness_number_->publish_state(value);
} else if (cmd == "CONTRAST") {
int value = std::stoi(value_string);
ESP_LOGV(TAG, "updating contrast number with value %s", value_string.c_str());
contrast_number_->publish_state(value);
} else if (cmd == "DENSITY") {
int value = std::stoi(value_string);
ESP_LOGV(TAG, "updating density number with value %s", value_string.c_str());
density_number_->publish_state(value);
} else if (cmd == "TINT") {
int value = std::stoi(value_string);
ESP_LOGV(TAG, "updating tint number with value %s", value_string.c_str());
tint_number_->publish_state(value);
} else if (cmd == "CTEMP") {
int value = std::stoi(value_string);
ESP_LOGV(TAG, "updating ctemp number with value %s", value_string.c_str());
ctemp_number_->publish_state(value);
} else if (cmd == "FCOLOR") {
int value = std::stoi(value_string);
ESP_LOGV(TAG, "updating fcolor number with value %s", value_string.c_str());
fcolor_number_->publish_state(value);
} else if (cmd == "NRS") {
int value = std::stoi(value_string);
ESP_LOGV(TAG, "updating nrs number with value %s", value_string.c_str());
nrs_number_->publish_state(value);
} else if (cmd == "MPRGNRS") {
int value = std::stoi(value_string);
ESP_LOGV(TAG, "updating mprgngs number with value %s", value_string.c_str());
mpegnrs_number_->publish_state(value);
} else if (cmd == "OFFSETR") {
int value = std::stoi(value_string);
ESP_LOGV(TAG, "updating offsetr number with value %s", value_string.c_str());
offsetr_number_->publish_state(value);
} else if (cmd == "OFFSETG") {
int value = std::stoi(value_string);
ESP_LOGV(TAG, "updating offsetg number with value %s", value_string.c_str());
offsetg_number_->publish_state(value);
} else if (cmd == "OFFSETB") {
int value = std::stoi(value_string);
ESP_LOGV(TAG, "updating offsetb number with value %s", value_string.c_str());
oggsetb_number_->publish_state(value);
} else if (cmd == "GAINR") {
int value = std::stoi(value_string);
ESP_LOGV(TAG, "updating gainr number with value %s", value_string.c_str());
gainr_number_->publish_state(value);
} else if (cmd == "GAING") {
int value = std::stoi(value_string);
ESP_LOGV(TAG, "updating gaing number with value %s", value_string.c_str());
gaing_number_->publish_state(value);
} else if (cmd == "GAINB") {
int value = std::stoi(value_string);
ESP_LOGV(TAG, "updating gainb number with value %s", value_string.c_str());
gainb_number_->publish_state(value);
} else if (cmd == "SHRF") {
int value = std::stoi(value_string);
ESP_LOGV(TAG, "updating shrf number with value %s", value_string.c_str());
shrf_number_->publish_state(value);
} else if (cmd == "SHRS") {
int value = std::stoi(value_string);
ESP_LOGV(TAG, "updating shrs number with value %s", value_string.c_str());
shrs_number_->publish_state(value);
} else if (cmd == "DERANGE") {
int value = std::stoi(value_string);
ESP_LOGV(TAG, "updating derange number with value %s", value_string.c_str());
derange_number_->publish_state(value);
} else if (cmd == "DESTRENGTH") {
int value = std::stoi(value_string);
ESP_LOGV(TAG, "updating destrength number with value %s", value_string.c_str());
destrength_number_->publish_state(value);
} else { } else {
ESP_LOGW(TAG, "Command %s unknown, skipping updating sensor with value", cmd.c_str()); ESP_LOGW(TAG, "Command %s unknown, skipping updating sensor with value", cmd.c_str());
} }

View file

@ -46,7 +46,28 @@ class tw7100Component : public PollingComponent, public uart::UARTDevice {
void set_set_mute(switch_::Switch *switch_) { this->mute_switch_ = switch_; } void set_set_mute(switch_::Switch *switch_) { this->mute_switch_ = switch_; }
void set_set_source(tw7100::tw7100Select *source_) { this->source_select_ = source_; } void set_set_source(tw7100::tw7100Select *source_) { this->source_select_ = source_; }
void set_set_luminance(tw7100::tw7100Select *luminance_) { this->luminance_select_ = luminance_; } void set_set_luminance(tw7100::tw7100Select *luminance_) { this->luminance_select_ = luminance_; }
void set_set_volume(tw7100::tw7100Number *number_) { this->volume_number_ = number_; } 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_; }
void set_set_offsetb(tw7100::tw7100Number *number_) { this->oggsetb_number_ = number_; }
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_; }
protected: protected:
binary_sensor::BinarySensor *powered_{nullptr}; binary_sensor::BinarySensor *powered_{nullptr};
@ -62,6 +83,26 @@ class tw7100Component : public PollingComponent, public uart::UARTDevice {
tw7100::tw7100Select *source_select_{nullptr}; tw7100::tw7100Select *source_select_{nullptr};
tw7100::tw7100Select *luminance_select_{nullptr}; tw7100::tw7100Select *luminance_select_{nullptr};
tw7100::tw7100Number *volume_number_{nullptr}; tw7100::tw7100Number *volume_number_{nullptr};
tw7100::tw7100Number *vkeystone_number_{nullptr};
tw7100::tw7100Number *hkeystone_number_{nullptr};
tw7100::tw7100Number *brightness_number_{nullptr};
tw7100::tw7100Number *contrast_number_{nullptr};
tw7100::tw7100Number *density_number_{nullptr};
tw7100::tw7100Number *tint_number_{nullptr};
tw7100::tw7100Number *ctemp_number_{nullptr};
tw7100::tw7100Number *fcolor_number_{nullptr};
tw7100::tw7100Number *nrs_number_{nullptr};
tw7100::tw7100Number *mpegnrs_number_{nullptr};
tw7100::tw7100Number *offsetr_number_{nullptr};
tw7100::tw7100Number *offsetg_number_{nullptr};
tw7100::tw7100Number *oggsetb_number_{nullptr};
tw7100::tw7100Number *gainr_number_{nullptr};
tw7100::tw7100Number *gaing_number_{nullptr};
tw7100::tw7100Number *gainb_number_{nullptr};
tw7100::tw7100Number *shrf_number_{nullptr};
tw7100::tw7100Number *shrs_number_{nullptr};
tw7100::tw7100Number *derange_number_{nullptr};
tw7100::tw7100Number *destrength_number_{nullptr};
}; };
} // namespace tw7100 } // namespace tw7100