mirror of
https://github.com/esphome/esphome.git
synced 2026-10-02 09:20:22 +00:00
remote_base changes (#5124)
This commit is contained in:
@@ -24,11 +24,105 @@ void RemoteRMTChannel::config_rmt(rmt_config_t &rmt) {
|
||||
}
|
||||
#endif
|
||||
|
||||
/* RemoteReceiveData */
|
||||
|
||||
bool RemoteReceiveData::peek_mark(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);
|
||||
const int32_t hi = this->upper_bound_(length);
|
||||
return value >= 0 && lo <= value && value <= hi;
|
||||
}
|
||||
|
||||
bool RemoteReceiveData::peek_space(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);
|
||||
const int32_t hi = this->upper_bound_(length);
|
||||
return value <= 0 && lo <= -value && -value <= hi;
|
||||
}
|
||||
|
||||
bool RemoteReceiveData::peek_space_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::expect_mark(uint32_t length) {
|
||||
if (!this->peek_mark(length))
|
||||
return false;
|
||||
this->advance();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool RemoteReceiveData::expect_space(uint32_t length) {
|
||||
if (!this->peek_space(length))
|
||||
return false;
|
||||
this->advance();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool RemoteReceiveData::expect_item(uint32_t mark, uint32_t space) {
|
||||
if (!this->peek_item(mark, space))
|
||||
return false;
|
||||
this->advance(2);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool RemoteReceiveData::expect_pulse_with_gap(uint32_t mark, uint32_t space) {
|
||||
if (!this->peek_space_at_least(space, 1) || !this->peek_mark(mark))
|
||||
return false;
|
||||
this->advance(2);
|
||||
return true;
|
||||
}
|
||||
|
||||
/* RemoteReceiverBinarySensorBase */
|
||||
|
||||
bool RemoteReceiverBinarySensorBase::on_receive(RemoteReceiveData src) {
|
||||
if (!this->matches(src))
|
||||
return false;
|
||||
this->publish_state(true);
|
||||
yield();
|
||||
this->publish_state(false);
|
||||
return true;
|
||||
}
|
||||
|
||||
/* RemoteReceiverBase */
|
||||
|
||||
void RemoteReceiverBase::register_dumper(RemoteReceiverDumperBase *dumper) {
|
||||
if (dumper->is_secondary()) {
|
||||
this->secondary_dumpers_.push_back(dumper);
|
||||
} else {
|
||||
this->dumpers_.push_back(dumper);
|
||||
}
|
||||
}
|
||||
|
||||
void RemoteReceiverBase::call_listeners_() {
|
||||
for (auto *listener : this->listeners_)
|
||||
listener->on_receive(RemoteReceiveData(this->temp_, this->tolerance_));
|
||||
}
|
||||
|
||||
void RemoteReceiverBase::call_dumpers_() {
|
||||
bool success = false;
|
||||
for (auto *dumper : this->dumpers_) {
|
||||
if (dumper->dump(RemoteReceiveData(this->temp_, this->tolerance_)))
|
||||
success = true;
|
||||
}
|
||||
if (!success) {
|
||||
for (auto *dumper : this->secondary_dumpers_)
|
||||
dumper->dump(RemoteReceiveData(this->temp_, this->tolerance_));
|
||||
}
|
||||
}
|
||||
|
||||
void RemoteReceiverBinarySensorBase::dump_config() { LOG_BINARY_SENSOR("", "Remote Receiver Binary Sensor", this); }
|
||||
|
||||
void RemoteTransmitterBase::send_(uint32_t send_times, uint32_t send_wait) {
|
||||
#ifdef ESPHOME_LOG_HAS_VERY_VERBOSE
|
||||
const std::vector<int32_t> &vec = this->temp_.get_data();
|
||||
const auto &vec = this->temp_.get_data();
|
||||
char buffer[256];
|
||||
uint32_t buffer_offset = 0;
|
||||
buffer_offset += sprintf(buffer, "Sending times=%u wait=%ums: ", send_times, send_wait);
|
||||
|
||||
Reference in New Issue
Block a user