mirror of
https://github.com/esphome/esphome.git
synced 2025-07-29 06:36:45 +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", automation.Trigger, RemoteReceiverListener
|
||||
)
|
||||
RemoteTransmitterDumper = ns.class_("RemoteTransmitterDumper")
|
||||
RemoteReceiverDumperBase = ns.class_("RemoteReceiverDumperBase")
|
||||
RemoteTransmittable = ns.class_("RemoteTransmittable")
|
||||
RemoteTransmitterActionBase = ns.class_(
|
||||
"RemoteTransmitterActionBase", RemoteTransmittable, automation.Action
|
||||
@ -126,8 +126,10 @@ def register_trigger(name, type, data_type):
|
||||
return decorator
|
||||
|
||||
|
||||
def register_dumper(name, type):
|
||||
registerer = DUMPER_REGISTRY.register(name, type, {})
|
||||
def register_dumper(name, type, schema=None):
|
||||
if schema is None:
|
||||
schema = {}
|
||||
registerer = DUMPER_REGISTRY.register(name, type, schema)
|
||||
|
||||
def decorator(func):
|
||||
async def new_func(config, dumper_id):
|
||||
@ -189,7 +191,7 @@ def declare_protocol(name):
|
||||
binary_sensor_ = ns.class_(f"{name}BinarySensor", RemoteReceiverBinarySensorBase)
|
||||
trigger = ns.class_(f"{name}Trigger", RemoteReceiverTrigger)
|
||||
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
|
||||
|
||||
|
||||
@ -1405,7 +1407,7 @@ rc_switch_protocols = ns.RC_SWITCH_PROTOCOLS
|
||||
RCSwitchData = ns.struct("RCSwitchData")
|
||||
RCSwitchBase = ns.class_("RCSwitchBase")
|
||||
RCSwitchTrigger = ns.class_("RCSwitchTrigger", RemoteReceiverTrigger)
|
||||
RCSwitchDumper = ns.class_("RCSwitchDumper", RemoteTransmitterDumper)
|
||||
RCSwitchDumper = ns.class_("RCSwitchDumper", RemoteReceiverDumperBase)
|
||||
RCSwitchRawAction = ns.class_("RCSwitchRawAction", RemoteTransmitterActionBase)
|
||||
RCSwitchTypeAAction = ns.class_("RCSwitchTypeAAction", 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;
|
||||
}
|
||||
|
||||
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 {
|
||||
if (!this->is_valid(offset))
|
||||
return false;
|
||||
@ -36,6 +52,14 @@ bool RemoteReceiveData::peek_space_at_least(uint32_t length, uint32_t offset) co
|
||||
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) {
|
||||
if (!this->peek_mark(length))
|
||||
return false;
|
||||
|
@ -53,8 +53,11 @@ class RemoteReceiveData {
|
||||
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]; }
|
||||
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_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 {
|
||||
return this->peek_space(space, offset + 1) && this->peek_mark(mark, offset);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user