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