ESPHome 2026.11.0-dev
Loading...
Searching...
No Matches
sx126x.h
Go to the documentation of this file.
1#pragma once
2
6#include "esphome/core/hal.h"
7#include "sx126x_reg.h"
8#include <utility>
9#include <vector>
10
11namespace esphome::sx126x {
12
13static constexpr size_t SX126X_MAX_PACKET_SIZE = 255;
14
50
52
54 public:
55 virtual void on_packet(const std::vector<uint8_t> &packet, float rssi, float snr) = 0;
56};
57
58class SX126x final : public Component,
59 public spi::SPIDevice<spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW, spi::CLOCK_PHASE_LEADING,
60 spi::DATA_RATE_8MHZ> {
61 public:
62 size_t get_max_packet_size();
63 float get_setup_priority() const override { return setup_priority::PROCESSOR; }
64 void setup() override;
65 void loop() override;
66 void dump_config() override;
67 void set_bandwidth(SX126xBw bandwidth) { this->bandwidth_ = bandwidth; }
68 void set_bitrate(uint32_t bitrate) { this->bitrate_ = bitrate; }
69 void set_busy_pin(GPIOPin *busy_pin) { this->busy_pin_ = busy_pin; }
70 void set_coding_rate(uint8_t coding_rate) { this->coding_rate_ = coding_rate; }
71 void set_crc_enable(bool crc_enable) { this->crc_enable_ = crc_enable; }
72 void set_crc_inverted(bool crc_inverted) { this->crc_inverted_ = crc_inverted; }
73 void set_crc_size(uint8_t crc_size) { this->crc_size_ = crc_size; }
74 void set_crc_polynomial(uint16_t crc_polynomial) { this->crc_polynomial_ = crc_polynomial; }
75 void set_crc_initial(uint16_t crc_initial) { this->crc_initial_ = crc_initial; }
76 void set_whitening_enable(bool whitening_enable) { this->whitening_enable_ = whitening_enable; }
77 void set_whitening_initial(uint16_t whitening_initial) { this->whitening_initial_ = whitening_initial; }
78 void set_deviation(uint32_t deviation) { this->deviation_ = deviation; }
79 void set_dio1_pin(GPIOPin *dio1_pin) { this->dio1_pin_ = dio1_pin; }
81 void set_sx1261(bool sx1261) { this->sx1261_ = sx1261; }
82 void set_mode_rx();
83 void set_mode_tx();
85 void set_mode_sleep(bool cold = false);
86 void set_modulation(uint8_t modulation) { this->modulation_ = modulation; }
87 void set_pa_power(int8_t power) { this->pa_power_ = power; }
88 void set_pa_ramp(uint8_t ramp) { this->pa_ramp_ = ramp; }
89 void set_payload_length(uint8_t payload_length) { this->payload_length_ = payload_length; }
90 void set_preamble_detect(uint16_t preamble_detect) { this->preamble_detect_ = preamble_detect; }
92 void set_rst_pin(GPIOPin *rst_pin) { this->rst_pin_ = rst_pin; }
93 void set_rx_start(bool rx_start) { this->rx_start_ = rx_start; }
94 void set_rf_switch(bool rf_switch) { this->rf_switch_ = rf_switch; }
95 void set_shaping(uint8_t shaping) { this->shaping_ = shaping; }
96 void set_spreading_factor(uint8_t spreading_factor) { this->spreading_factor_ = spreading_factor; }
97 void set_sync_value(const std::vector<uint8_t> &sync_value) { this->sync_value_ = sync_value; }
98 void set_tcxo_voltage(uint8_t tcxo_voltage) { this->tcxo_voltage_ = tcxo_voltage; }
99 void set_tcxo_delay(uint32_t tcxo_delay) { this->tcxo_delay_ = tcxo_delay; }
100 void run_image_cal();
101 void configure();
102 SX126xError transmit_packet(const uint8_t *data, size_t len);
103 SX126xError transmit_packet(const std::vector<uint8_t> &packet) {
104 return this->transmit_packet(packet.data(), packet.size());
105 }
106 void register_listener(SX126xListener *listener) { this->listeners_.push_back(listener); }
108
109 protected:
110 static void gpio_intr(SX126x *arg);
113 void set_packet_params_(uint8_t payload_length);
114 uint8_t read_fifo_(uint8_t offset, std::vector<uint8_t> &packet);
115 void write_fifo_(uint8_t offset, const uint8_t *data, size_t len);
116 void write_opcode_(uint8_t opcode, uint8_t *data, uint8_t size);
117 uint8_t read_opcode_(uint8_t opcode, uint8_t *data, uint8_t size);
118 void write_register_(uint16_t reg, uint8_t *data, uint8_t size);
119 void read_register_(uint16_t reg, uint8_t *data, uint8_t size);
120 void call_listeners_(const std::vector<uint8_t> &packet, float rssi, float snr);
121 void wait_busy_();
123 std::vector<SX126xListener *> listeners_;
124 std::vector<uint8_t> packet_;
125 std::vector<uint8_t> sync_value_;
128 GPIOPin *rst_pin_{nullptr};
134 uint16_t crc_polynomial_{0};
135 uint16_t crc_initial_{0};
137 uint16_t preamble_detect_{0};
138 uint16_t preamble_size_{0};
139 char version_[16];
141 uint8_t crc_size_{0};
142 uint8_t tcxo_voltage_{0};
143 uint8_t coding_rate_{0};
145 uint8_t pa_ramp_{0};
146 uint8_t shaping_{0};
148 int8_t pa_power_{0};
149 bool sx1261_{false};
150 bool crc_enable_{false};
151 bool crc_inverted_{false};
152 bool whitening_enable_{false};
153 bool rx_start_{false};
154 bool rf_switch_{false};
155};
156
157} // namespace esphome::sx126x
BedjetMode mode
BedJet operating mode.
uint16_le_t frequency
Definition bl0942.h:6
The SPIDevice is what components using the SPI will create.
Definition spi.h:456
void set_rx_start(bool rx_start)
Definition sx126x.h:93
void set_deviation(uint32_t deviation)
Definition sx126x.h:78
float get_setup_priority() const override
Definition sx126x.h:63
void set_spreading_factor(uint8_t spreading_factor)
Definition sx126x.h:96
void set_pa_ramp(uint8_t ramp)
Definition sx126x.h:88
void set_rf_switch(bool rf_switch)
Definition sx126x.h:94
uint8_t read_fifo_(uint8_t offset, std::vector< uint8_t > &packet)
Definition sx126x.cpp:33
void write_opcode_(uint8_t opcode, uint8_t *data, uint8_t size)
Definition sx126x.cpp:70
void set_sync_value(const std::vector< uint8_t > &sync_value)
Definition sx126x.h:97
void set_dio1_pin(GPIOPin *dio1_pin)
Definition sx126x.h:79
std::vector< uint8_t > sync_value_
Definition sx126x.h:125
std::vector< SX126xListener * > listeners_
Definition sx126x.h:123
size_t get_max_packet_size()
Definition sx126x.cpp:280
void set_mode_standby(SX126xStandbyMode mode)
Definition sx126x.cpp:485
void set_crc_initial(uint16_t crc_initial)
Definition sx126x.h:75
SX126xError transmit_packet(const uint8_t *data, size_t len)
Definition sx126x.cpp:316
void set_payload_length(uint8_t payload_length)
Definition sx126x.h:89
static void gpio_intr(SX126x *arg)
Definition sx126x.cpp:107
Trigger< std::vector< uint8_t >, float, float > packet_trigger_
Definition sx126x.h:122
uint8_t read_opcode_(uint8_t opcode, uint8_t *data, uint8_t size)
Definition sx126x.cpp:58
void dump_config() override
Definition sx126x.cpp:503
void set_modulation(uint8_t modulation)
Definition sx126x.h:86
void set_rst_pin(GPIOPin *rst_pin)
Definition sx126x.h:92
void set_frequency(uint32_t frequency)
Definition sx126x.h:80
void set_tcxo_delay(uint32_t tcxo_delay)
Definition sx126x.h:99
void write_fifo_(uint8_t offset, const uint8_t *data, size_t len)
Definition sx126x.cpp:46
void read_register_(uint16_t reg, uint8_t *data, uint8_t size)
Definition sx126x.cpp:81
void set_bandwidth(SX126xBw bandwidth)
Definition sx126x.h:67
void write_register_(uint16_t reg, uint8_t *data, uint8_t size)
Definition sx126x.cpp:94
uint16_t crc_polynomial_
Definition sx126x.h:134
Trigger< std::vector< uint8_t >, float, float > * get_packet_trigger()
Definition sx126x.h:107
uint16_t preamble_size_
Definition sx126x.h:138
void set_preamble_detect(uint16_t preamble_detect)
Definition sx126x.h:90
void set_shaping(uint8_t shaping)
Definition sx126x.h:95
void set_crc_inverted(bool crc_inverted)
Definition sx126x.h:72
void loop() override
Definition sx126x.cpp:372
void set_whitening_enable(bool whitening_enable)
Definition sx126x.h:76
void set_crc_enable(bool crc_enable)
Definition sx126x.h:71
void set_packet_params_(uint8_t payload_length)
Definition sx126x.cpp:287
void set_busy_pin(GPIOPin *busy_pin)
Definition sx126x.h:69
void call_listeners_(const std::vector< uint8_t > &packet, float rssi, float snr)
Definition sx126x.cpp:365
std::vector< uint8_t > packet_
Definition sx126x.h:124
void set_coding_rate(uint8_t coding_rate)
Definition sx126x.h:70
uint16_t preamble_detect_
Definition sx126x.h:137
void set_pa_power(int8_t power)
Definition sx126x.h:87
void set_preamble_size(uint16_t preamble_size)
Definition sx126x.h:91
void setup() override
Definition sx126x.cpp:109
uint16_t whitening_initial_
Definition sx126x.h:136
void register_listener(SX126xListener *listener)
Definition sx126x.h:106
uint32_t payload_length_
Definition sx126x.h:132
void set_bitrate(uint32_t bitrate)
Definition sx126x.h:68
SX126xError transmit_packet(const std::vector< uint8_t > &packet)
Definition sx126x.h:103
void set_whitening_initial(uint16_t whitening_initial)
Definition sx126x.h:77
uint8_t spreading_factor_
Definition sx126x.h:147
void set_tcxo_voltage(uint8_t tcxo_voltage)
Definition sx126x.h:98
void set_crc_size(uint8_t crc_size)
Definition sx126x.h:73
void set_crc_polynomial(uint16_t crc_polynomial)
Definition sx126x.h:74
void set_sx1261(bool sx1261)
Definition sx126x.h:81
void set_mode_sleep(bool cold=false)
Definition sx126x.cpp:478
virtual void on_packet(const std::vector< uint8_t > &packet, float rssi, float snr)=0
uint16_t preamble_size
constexpr float PROCESSOR
For components that use data from sensors like displays.
Definition component.h:47
const void size_t len
Definition hal.h:68
uint16_t size
Definition helpers.cpp:34
static void uint32_t