From 290900747ca49c70b72446aa71837af911cce800 Mon Sep 17 00:00:00 2001 From: sqozz Date: Wed, 18 Sep 2024 02:00:41 +0200 Subject: [PATCH] Add all supported number components --- number/__init__.py | 54 ++++++++++++++++++------ number/tw7100_number.cpp | 9 +--- tw7100.cpp | 91 ++++++++++++++++++++++++++++++++++++++-- tw7100.h | 43 ++++++++++++++++++- 4 files changed, 173 insertions(+), 24 deletions(-) diff --git a/number/__init__.py b/number/__init__.py index aea2681..be387a7 100644 --- a/number/__init__.py +++ b/number/__init__.py @@ -10,21 +10,49 @@ CODEOWNERS = ["@sqozz"] tw7100Number = tw7100_ns.class_("tw7100Number", number.Number, cg.Component) -CONFIG_SCHEMA = cv.Schema( - { - cv.GenerateID(): cv.use_id(tw7100), - cv.Optional("VOL"): number.number_schema( - tw7100Number - ), - } -) +numbers = [ + ("VOL","mdi:volume-high"), + ("VKEYSTONE",""), + ("HKEYSTONE",""), + ("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): parent = await cg.get_variable(config[CONF_ID]) - 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_)) + for number_name,icon in numbers: + if number_name in config: + number_ = await number.new_number(config[number_name], min_value=0, max_value=255, step=1) + cg.add(number_.set_cmd(number_name)) + 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_)) diff --git a/number/tw7100_number.cpp b/number/tw7100_number.cpp index 9efc580..aa54584 100644 --- a/number/tw7100_number.cpp +++ b/number/tw7100_number.cpp @@ -9,9 +9,6 @@ namespace tw7100 { void tw7100Number::setup() { static const char *const TAG = "tw7100Number::setup()"; - if (cmd_ == "VOL") { - ESP_LOGV(TAG, "setup VOL"); - } ESP_LOGV(TAG, "setup done"); } @@ -25,10 +22,8 @@ void tw7100Number::control(float value) { static const char *const TAG = "tw7100Number::control()"; std::string param; - if (cmd_ == "VOL") { - param = std::to_string((int)value); - ESP_LOGV(TAG, "VOL: %s (from %i)", param, (int)value); - } + param = std::to_string((int)value); + ESP_LOGV(TAG, "%s: %s (from %i)", cmd_, param, (int)value); if (param.length() > 0 && state != value) { parent_->push_cmd(cmd_, param); diff --git a/tw7100.cpp b/tw7100.cpp index 3bf5c62..8695f9a 100644 --- a/tw7100.cpp +++ b/tw7100.cpp @@ -17,9 +17,9 @@ std::map sourcelist; std::vector pwr_off_query_cmds{ "PWR?", "LAMP?" }; std::vector pwr_on_query_cmds{ // Projection screen adjustment settings -/* "VKEYSTONE?", "HKEYSTONE?", +/* "QC?", "CORRECTMET?", "ASPECT?", @@ -32,14 +32,15 @@ std::vector pwr_on_query_cmds{ // Source/Input/Resolution settings "SOURCE?", // Image settings -/* "BRIGHT?", "CONTRAST?", "DENSITY?", "TINT?", "CTEMP?", "FCOLOR?", +/* "CMODE?", +*/ "NRS?", "MPEGNRS?", "OFFSETR?", @@ -48,13 +49,17 @@ std::vector pwr_on_query_cmds{ "GAINR?", "GAING?", "GAINB?", +/* "GAMMA?", "CSEL?", "4KENHANCE?", "IMGPRESET?", +*/ "SHRF?", "SHRS?", "DERANGE?", + "DESTRENGTH?", +/* "MCFI?", "CLRSPACE?", "DYNRANGE?", @@ -251,8 +256,88 @@ void tw7100Component::update_sensor(std::pair data) { mute_switch_->publish_state(value_string == "ON"); } else if (cmd == "VOL") { int value = std::stoi(value_string); - volume_number_->publish_state(value); 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 { ESP_LOGW(TAG, "Command %s unknown, skipping updating sensor with value", cmd.c_str()); } diff --git a/tw7100.h b/tw7100.h index aabdde1..9c5c201 100644 --- a/tw7100.h +++ b/tw7100.h @@ -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_source(tw7100::tw7100Select *source_) { this->source_select_ = source_; } 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: binary_sensor::BinarySensor *powered_{nullptr}; @@ -62,6 +83,26 @@ class tw7100Component : public PollingComponent, public uart::UARTDevice { tw7100::tw7100Select *source_select_{nullptr}; tw7100::tw7100Select *luminance_select_{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