ESPHome 2025.5.0
Loading...
Searching...
No Matches
raw_protocol.h
Go to the documentation of this file.
1#pragma once
2
4#include "remote_base.h"
5
6#include <cinttypes>
7#include <vector>
8
9namespace esphome {
10namespace remote_base {
11
13 public:
14 bool matches(RemoteReceiveData src) override {
15 for (size_t i = 0; i < this->len_; i++) {
16 auto val = this->data_[i];
17 if (val < 0) {
18 if (!src.expect_space(static_cast<uint32_t>(-val)))
19 return false;
20 } else {
21 if (!src.expect_mark(static_cast<uint32_t>(val)))
22 return false;
23 }
24 }
25 return true;
26 }
27 void set_data(const int32_t *data) { data_ = data; }
28 void set_len(size_t len) { len_ = len; }
29
30 protected:
31 const int32_t *data_;
32 size_t len_;
33};
34
35class RawTrigger : public Trigger<RawTimings>, public Component, public RemoteReceiverListener {
36 protected:
37 bool on_receive(RemoteReceiveData src) override {
38 this->trigger(src.get_raw_data());
39 return false;
40 }
41};
42
43template<typename... Ts> class RawAction : public RemoteTransmitterActionBase<Ts...> {
44 public:
45 void set_code_template(std::function<RawTimings(Ts...)> func) { this->code_func_ = func; }
46 void set_code_static(const int32_t *code, size_t len) {
47 this->code_static_ = code;
48 this->code_static_len_ = len;
49 }
50 TEMPLATABLE_VALUE(uint32_t, carrier_frequency);
51
52 void encode(RemoteTransmitData *dst, Ts... x) override {
53 if (this->code_static_ != nullptr) {
54 for (size_t i = 0; i < this->code_static_len_; i++) {
55 auto val = this->code_static_[i];
56 if (val < 0) {
57 dst->space(static_cast<uint32_t>(-val));
58 } else {
59 dst->mark(static_cast<uint32_t>(val));
60 }
61 }
62 } else {
63 dst->set_data(this->code_func_(x...));
64 }
65 dst->set_carrier_frequency(this->carrier_frequency_.value(x...));
66 }
67
68 protected:
69 std::function<RawTimings(Ts...)> code_func_{nullptr};
70 const int32_t *code_static_{nullptr};
71 int32_t code_static_len_{0};
72};
73
75 public:
76 bool dump(RemoteReceiveData src) override;
77 bool is_secondary() override { return true; }
78};
79
80} // namespace remote_base
81} // namespace esphome
TEMPLATABLE_VALUE(uint32_t, carrier_frequency)
void set_code_static(const int32_t *code, size_t len)
void set_code_template(std::function< RawTimings(Ts...)> func)
void encode(RemoteTransmitData *dst, Ts... x) override
std::function< RawTimings(Ts...)> code_func_
void set_data(const int32_t *data)
bool matches(RemoteReceiveData src) override
bool dump(RemoteReceiveData src) override
bool on_receive(RemoteReceiveData src) override
const RawTimings & get_raw_data() const
Definition remote_base.h:53
void set_carrier_frequency(uint32_t carrier_frequency)
Definition remote_base.h:34
void set_data(const RawTimings &data)
Definition remote_base.h:37
mopeka_std_values val[4]
std::vector< int32_t > RawTimings
Definition remote_base.h:23
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7
std::string size_t len
Definition helpers.h:301
uint16_t x
Definition tt21100.cpp:5