mirror of
https://github.com/esphome/esphome.git
synced 2025-07-29 22:56:37 +00:00
[remote_base] Fix dumper base class and enable schema extension (#9218)
This commit is contained in:
parent
af0bb634c6
commit
3e553f517b
@ -57,7 +57,7 @@ RemoteReceiverBinarySensorBase = ns.class_(
|
|||||||
RemoteReceiverTrigger = ns.class_(
|
RemoteReceiverTrigger = ns.class_(
|
||||||
"RemoteReceiverTrigger", automation.Trigger, RemoteReceiverListener
|
"RemoteReceiverTrigger", automation.Trigger, RemoteReceiverListener
|
||||||
)
|
)
|
||||||
RemoteTransmitterDumper = ns.class_("RemoteTransmitterDumper")
|
RemoteReceiverDumperBase = ns.class_("RemoteReceiverDumperBase")
|
||||||
RemoteTransmittable = ns.class_("RemoteTransmittable")
|
RemoteTransmittable = ns.class_("RemoteTransmittable")
|
||||||
RemoteTransmitterActionBase = ns.class_(
|
RemoteTransmitterActionBase = ns.class_(
|
||||||
"RemoteTransmitterActionBase", RemoteTransmittable, automation.Action
|
"RemoteTransmitterActionBase", RemoteTransmittable, automation.Action
|
||||||
@ -126,8 +126,10 @@ def register_trigger(name, type, data_type):
|
|||||||
return decorator
|
return decorator
|
||||||
|
|
||||||
|
|
||||||
def register_dumper(name, type):
|
def register_dumper(name, type, schema=None):
|
||||||
registerer = DUMPER_REGISTRY.register(name, type, {})
|
if schema is None:
|
||||||
|
schema = {}
|
||||||
|
registerer = DUMPER_REGISTRY.register(name, type, schema)
|
||||||
|
|
||||||
def decorator(func):
|
def decorator(func):
|
||||||
async def new_func(config, dumper_id):
|
async def new_func(config, dumper_id):
|
||||||
@ -189,7 +191,7 @@ def declare_protocol(name):
|
|||||||
binary_sensor_ = ns.class_(f"{name}BinarySensor", RemoteReceiverBinarySensorBase)
|
binary_sensor_ = ns.class_(f"{name}BinarySensor", RemoteReceiverBinarySensorBase)
|
||||||
trigger = ns.class_(f"{name}Trigger", RemoteReceiverTrigger)
|
trigger = ns.class_(f"{name}Trigger", RemoteReceiverTrigger)
|
||||||
action = ns.class_(f"{name}Action", RemoteTransmitterActionBase)
|
action = ns.class_(f"{name}Action", RemoteTransmitterActionBase)
|
||||||
dumper = ns.class_(f"{name}Dumper", RemoteTransmitterDumper)
|
dumper = ns.class_(f"{name}Dumper", RemoteReceiverDumperBase)
|
||||||
return data, binary_sensor_, trigger, action, dumper
|
return data, binary_sensor_, trigger, action, dumper
|
||||||
|
|
||||||
|
|
||||||
@ -1405,7 +1407,7 @@ rc_switch_protocols = ns.RC_SWITCH_PROTOCOLS
|
|||||||
RCSwitchData = ns.struct("RCSwitchData")
|
RCSwitchData = ns.struct("RCSwitchData")
|
||||||
RCSwitchBase = ns.class_("RCSwitchBase")
|
RCSwitchBase = ns.class_("RCSwitchBase")
|
||||||
RCSwitchTrigger = ns.class_("RCSwitchTrigger", RemoteReceiverTrigger)
|
RCSwitchTrigger = ns.class_("RCSwitchTrigger", RemoteReceiverTrigger)
|
||||||
RCSwitchDumper = ns.class_("RCSwitchDumper", RemoteTransmitterDumper)
|
RCSwitchDumper = ns.class_("RCSwitchDumper", RemoteReceiverDumperBase)
|
||||||
RCSwitchRawAction = ns.class_("RCSwitchRawAction", RemoteTransmitterActionBase)
|
RCSwitchRawAction = ns.class_("RCSwitchRawAction", RemoteTransmitterActionBase)
|
||||||
RCSwitchTypeAAction = ns.class_("RCSwitchTypeAAction", RemoteTransmitterActionBase)
|
RCSwitchTypeAAction = ns.class_("RCSwitchTypeAAction", RemoteTransmitterActionBase)
|
||||||
RCSwitchTypeBAction = ns.class_("RCSwitchTypeBAction", RemoteTransmitterActionBase)
|
RCSwitchTypeBAction = ns.class_("RCSwitchTypeBAction", RemoteTransmitterActionBase)
|
||||||
|
@ -19,6 +19,22 @@ bool RemoteReceiveData::peek_mark(uint32_t length, uint32_t offset) const {
|
|||||||
return value >= 0 && lo <= value && value <= hi;
|
return value >= 0 && lo <= value && value <= hi;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool RemoteReceiveData::peek_mark_at_least(uint32_t length, uint32_t offset) const {
|
||||||
|
if (!this->is_valid(offset))
|
||||||
|
return false;
|
||||||
|
const int32_t value = this->peek(offset);
|
||||||
|
const int32_t lo = this->lower_bound_(length);
|
||||||
|
return value >= 0 && lo <= value;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RemoteReceiveData::peek_mark_at_most(uint32_t length, uint32_t offset) const {
|
||||||
|
if (!this->is_valid(offset))
|
||||||
|
return false;
|
||||||
|
const int32_t value = this->peek(offset);
|
||||||
|
const int32_t hi = this->upper_bound_(length);
|
||||||
|
return value >= 0 && value <= hi;
|
||||||
|
}
|
||||||
|
|
||||||
bool RemoteReceiveData::peek_space(uint32_t length, uint32_t offset) const {
|
bool RemoteReceiveData::peek_space(uint32_t length, uint32_t offset) const {
|
||||||
if (!this->is_valid(offset))
|
if (!this->is_valid(offset))
|
||||||
return false;
|
return false;
|
||||||
@ -36,6 +52,14 @@ bool RemoteReceiveData::peek_space_at_least(uint32_t length, uint32_t offset) co
|
|||||||
return value <= 0 && lo <= -value;
|
return value <= 0 && lo <= -value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool RemoteReceiveData::peek_space_at_most(uint32_t length, uint32_t offset) const {
|
||||||
|
if (!this->is_valid(offset))
|
||||||
|
return false;
|
||||||
|
const int32_t value = this->peek(offset);
|
||||||
|
const int32_t hi = this->upper_bound_(length);
|
||||||
|
return value <= 0 && -value <= hi;
|
||||||
|
}
|
||||||
|
|
||||||
bool RemoteReceiveData::expect_mark(uint32_t length) {
|
bool RemoteReceiveData::expect_mark(uint32_t length) {
|
||||||
if (!this->peek_mark(length))
|
if (!this->peek_mark(length))
|
||||||
return false;
|
return false;
|
||||||
|
@ -53,8 +53,11 @@ class RemoteReceiveData {
|
|||||||
bool is_valid(uint32_t offset = 0) const { return this->index_ + offset < this->data_.size(); }
|
bool is_valid(uint32_t offset = 0) const { return this->index_ + offset < this->data_.size(); }
|
||||||
int32_t peek(uint32_t offset = 0) const { return this->data_[this->index_ + offset]; }
|
int32_t peek(uint32_t offset = 0) const { return this->data_[this->index_ + offset]; }
|
||||||
bool peek_mark(uint32_t length, uint32_t offset = 0) const;
|
bool peek_mark(uint32_t length, uint32_t offset = 0) const;
|
||||||
|
bool peek_mark_at_least(uint32_t length, uint32_t offset = 0) const;
|
||||||
|
bool peek_mark_at_most(uint32_t length, uint32_t offset = 0) const;
|
||||||
bool peek_space(uint32_t length, uint32_t offset = 0) const;
|
bool peek_space(uint32_t length, uint32_t offset = 0) const;
|
||||||
bool peek_space_at_least(uint32_t length, uint32_t offset = 0) const;
|
bool peek_space_at_least(uint32_t length, uint32_t offset = 0) const;
|
||||||
|
bool peek_space_at_most(uint32_t length, uint32_t offset = 0) const;
|
||||||
bool peek_item(uint32_t mark, uint32_t space, uint32_t offset = 0) const {
|
bool peek_item(uint32_t mark, uint32_t space, uint32_t offset = 0) const {
|
||||||
return this->peek_space(space, offset + 1) && this->peek_mark(mark, offset);
|
return this->peek_space(space, offset + 1) && this->peek_mark(mark, offset);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user