ESPHome 2025.12.0-dev
Loading...
Searching...
No Matches
automation.h
Go to the documentation of this file.
1#pragma once
2
6
7namespace esphome {
8namespace sx126x {
9
10template<typename... Ts> class RunImageCalAction : public Action<Ts...>, public Parented<SX126x> {
11 public:
12 void play(const Ts &...x) override { this->parent_->run_image_cal(); }
13};
14
15template<typename... Ts> class SendPacketAction : public Action<Ts...>, public Parented<SX126x> {
16 public:
17 void set_data_template(std::vector<uint8_t> (*func)(Ts...)) {
18 this->data_.func = func;
19 this->len_ = -1; // Sentinel value indicates template mode
20 }
21
22 void set_data_static(const uint8_t *data, size_t len) {
23 this->data_.data = data;
24 this->len_ = len; // Length >= 0 indicates static mode
25 }
26
27 void play(const Ts &...x) override {
28 std::vector<uint8_t> data;
29 if (this->len_ >= 0) {
30 // Static mode: copy from flash to vector
31 data.assign(this->data_.data, this->data_.data + this->len_);
32 } else {
33 // Template mode: call function
34 data = this->data_.func(x...);
35 }
36 this->parent_->transmit_packet(data);
37 }
38
39 protected:
40 ssize_t len_{-1}; // -1 = template mode, >=0 = static mode with length
41 union Data {
42 std::vector<uint8_t> (*func)(Ts...); // Function pointer (stateless lambdas)
43 const uint8_t *data; // Pointer to static data in flash
45};
46
47template<typename... Ts> class SetModeTxAction : public Action<Ts...>, public Parented<SX126x> {
48 public:
49 void play(const Ts &...x) override { this->parent_->set_mode_tx(); }
50};
51
52template<typename... Ts> class SetModeRxAction : public Action<Ts...>, public Parented<SX126x> {
53 public:
54 void play(const Ts &...x) override { this->parent_->set_mode_rx(); }
55};
56
57template<typename... Ts> class SetModeSleepAction : public Action<Ts...>, public Parented<SX126x> {
58 public:
59 void play(const Ts &...x) override { this->parent_->set_mode_sleep(); }
60};
61
62template<typename... Ts> class SetModeStandbyAction : public Action<Ts...>, public Parented<SX126x> {
63 public:
64 void play(const Ts &...x) override { this->parent_->set_mode_standby(STDBY_XOSC); }
65};
66
67} // namespace sx126x
68} // namespace esphome
Helper class to easily give an object a parent of type T.
Definition helpers.h:918
void play(const Ts &...x) override
Definition automation.h:12
union esphome::sx126x::SendPacketAction::Data data_
void set_data_template(std::vector< uint8_t >(*func)(Ts...))
Definition automation.h:17
void play(const Ts &...x) override
Definition automation.h:27
void set_data_static(const uint8_t *data, size_t len)
Definition automation.h:22
void play(const Ts &...x) override
Definition automation.h:54
void play(const Ts &...x) override
Definition automation.h:59
void play(const Ts &...x) override
Definition automation.h:64
void play(const Ts &...x) override
Definition automation.h:49
__int64 ssize_t
Definition httplib.h:178
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7
std::string size_t len
Definition helpers.h:500
uint16_t x
Definition tt21100.cpp:5
std::vector< uint8_t >(* func)(Ts...)
Definition automation.h:42