ESPHome 2026.11.0-dev
Loading...
Searching...
No Matches
sx127x.h
Go to the documentation of this file.
1#pragma once
2
3#include "sx127x_reg.h"
7#include "esphome/core/hal.h"
8#include <vector>
9
10namespace esphome::sx127x {
11
12static constexpr size_t SX127X_MAX_PACKET_SIZE = 255; // the payload length register is 8 bits
13
38
40
42 public:
43 virtual void on_packet(const std::vector<uint8_t> &packet, float rssi, float snr) = 0;
44};
45
46class SX127x final : public Component,
47 public spi::SPIDevice<spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW, spi::CLOCK_PHASE_LEADING,
48 spi::DATA_RATE_8MHZ> {
49 public:
50 size_t get_max_packet_size();
51 float get_setup_priority() const override { return setup_priority::PROCESSOR; }
52 void setup() override;
53 void loop() override;
54 void dump_config() override;
55 void set_auto_cal(bool auto_cal) { this->auto_cal_ = auto_cal; }
56 void set_bandwidth(SX127xBw bandwidth) { this->bandwidth_ = bandwidth; }
57 void set_bitrate(uint32_t bitrate) { this->bitrate_ = bitrate; }
58 void set_bitsync(bool bitsync) { this->bitsync_ = bitsync; }
59 void set_coding_rate(uint8_t coding_rate) { this->coding_rate_ = coding_rate; }
60 void set_crc_enable(bool crc_enable) { this->crc_enable_ = crc_enable; }
61 void set_deviation(uint32_t deviation) { this->deviation_ = deviation; }
62 void set_dio0_pin(InternalGPIOPin *dio0_pin) { this->dio0_pin_ = dio0_pin; }
64 void set_mode_rx();
65 void set_mode_tx();
66 void set_mode_standby();
67 void set_mode_sleep();
68 void set_modulation(uint8_t modulation) { this->modulation_ = modulation; }
69 void set_pa_pin(uint8_t pin) { this->pa_pin_ = pin; }
70 void set_pa_power(uint8_t power) { this->pa_power_ = power; }
71 void set_pa_ramp(uint8_t ramp) { this->pa_ramp_ = ramp; }
72 void set_packet_mode(bool packet_mode) { this->packet_mode_ = packet_mode; }
73 void set_payload_length(uint8_t payload_length) { this->payload_length_ = payload_length; }
74 void set_preamble_errors(uint8_t preamble_errors) { this->preamble_errors_ = preamble_errors; }
75 void set_preamble_polarity(uint8_t preamble_polarity) { this->preamble_polarity_ = preamble_polarity; }
77 void set_preamble_detect(uint8_t preamble_detect) { this->preamble_detect_ = preamble_detect; }
78 void set_rst_pin(InternalGPIOPin *rst_pin) { this->rst_pin_ = rst_pin; }
79 void set_rx_floor(float floor) { this->rx_floor_ = floor; }
80 void set_rx_start(bool start) { this->rx_start_ = start; }
81 void set_shaping(uint8_t shaping) { this->shaping_ = shaping; }
82 void set_spreading_factor(uint8_t spreading_factor) { this->spreading_factor_ = spreading_factor; }
83 void set_sync_value(const std::vector<uint8_t> &sync_value) { this->sync_value_ = sync_value; }
84 void run_image_cal();
85 void configure();
86 SX127xError transmit_packet(const uint8_t *data, size_t len);
87 SX127xError transmit_packet(const std::vector<uint8_t> &packet) {
88 return this->transmit_packet(packet.data(), packet.size());
89 }
90 void register_listener(SX127xListener *listener) { this->listeners_.push_back(listener); }
92
93 protected:
94 static void gpio_intr(SX127x *arg);
95 void configure_fsk_ook_();
96 void configure_lora_();
97 void set_mode_(uint8_t modulation, uint8_t mode);
98 void write_fifo_(const uint8_t *data, size_t len);
99 void read_fifo_(std::vector<uint8_t> &packet);
100 void write_register_(uint8_t reg, uint8_t value);
101 void call_listeners_(const std::vector<uint8_t> &packet, float rssi, float snr);
102 uint8_t read_register_(uint8_t reg);
104 std::vector<SX127xListener *> listeners_;
105 std::vector<uint8_t> packet_;
106 std::vector<uint8_t> sync_value_;
116 uint8_t modulation_;
117 uint8_t pa_pin_;
118 uint8_t pa_power_;
119 uint8_t pa_ramp_;
123 uint8_t shaping_;
126 bool auto_cal_{false};
127 bool bitsync_{false};
128 bool crc_enable_{false};
129 bool packet_mode_{false};
130 bool rx_start_{false};
131};
132
133} // namespace esphome::sx127x
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
InternalGPIOPin * rst_pin_
Definition sx127x.h:108
uint8_t preamble_polarity_
Definition sx127x.h:122
InternalGPIOPin * dio0_pin_
Definition sx127x.h:107
void set_preamble_detect(uint8_t preamble_detect)
Definition sx127x.h:77
void set_deviation(uint32_t deviation)
Definition sx127x.h:61
Trigger< std::vector< uint8_t >, float, float > packet_trigger_
Definition sx127x.h:103
std::vector< SX127xListener * > listeners_
Definition sx127x.h:104
void set_dio0_pin(InternalGPIOPin *dio0_pin)
Definition sx127x.h:62
void write_fifo_(const uint8_t *data, size_t len)
Definition sx127x.cpp:47
SX127xError transmit_packet(const std::vector< uint8_t > &packet)
Definition sx127x.h:87
std::vector< uint8_t > sync_value_
Definition sx127x.h:106
void set_frequency(uint32_t frequency)
Definition sx127x.h:63
void set_preamble_size(uint16_t preamble_size)
Definition sx127x.h:76
void set_spreading_factor(uint8_t spreading_factor)
Definition sx127x.h:82
void set_bandwidth(SX127xBw bandwidth)
Definition sx127x.h:56
void set_sync_value(const std::vector< uint8_t > &sync_value)
Definition sx127x.h:83
uint32_t payload_length_
Definition sx127x.h:113
void dump_config() override
Definition sx127x.cpp:418
uint8_t read_register_(uint8_t reg)
Definition sx127x.cpp:23
static void gpio_intr(SX127x *arg)
Definition sx127x.cpp:56
void set_preamble_errors(uint8_t preamble_errors)
Definition sx127x.h:74
void set_coding_rate(uint8_t coding_rate)
Definition sx127x.h:59
void loop() override
Definition sx127x.cpp:323
float get_setup_priority() const override
Definition sx127x.h:51
void set_mode_(uint8_t modulation, uint8_t mode)
Definition sx127x.cpp:380
void read_fifo_(std::vector< uint8_t > &packet)
Definition sx127x.cpp:38
uint16_t preamble_size_
Definition sx127x.h:114
void set_payload_length(uint8_t payload_length)
Definition sx127x.h:73
void set_rst_pin(InternalGPIOPin *rst_pin)
Definition sx127x.h:78
std::vector< uint8_t > packet_
Definition sx127x.h:105
void set_bitsync(bool bitsync)
Definition sx127x.h:58
void set_pa_power(uint8_t power)
Definition sx127x.h:70
size_t get_max_packet_size()
Definition sx127x.cpp:249
void write_register_(uint8_t reg, uint8_t value)
Definition sx127x.cpp:31
void call_listeners_(const std::vector< uint8_t > &packet, float rssi, float snr)
Definition sx127x.cpp:316
void set_auto_cal(bool auto_cal)
Definition sx127x.h:55
Trigger< std::vector< uint8_t >, float, float > * get_packet_trigger()
Definition sx127x.h:91
void set_rx_start(bool start)
Definition sx127x.h:80
void set_rx_floor(float floor)
Definition sx127x.h:79
void setup() override
Definition sx127x.cpp:58
void set_pa_pin(uint8_t pin)
Definition sx127x.h:69
void set_pa_ramp(uint8_t ramp)
Definition sx127x.h:71
uint8_t spreading_factor_
Definition sx127x.h:124
void register_listener(SX127xListener *listener)
Definition sx127x.h:90
void set_crc_enable(bool crc_enable)
Definition sx127x.h:60
void set_preamble_polarity(uint8_t preamble_polarity)
Definition sx127x.h:75
void set_bitrate(uint32_t bitrate)
Definition sx127x.h:57
void set_modulation(uint8_t modulation)
Definition sx127x.h:68
SX127xError transmit_packet(const uint8_t *data, size_t len)
Definition sx127x.cpp:259
void set_packet_mode(bool packet_mode)
Definition sx127x.h:72
void set_shaping(uint8_t shaping)
Definition sx127x.h:81
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
static void uint32_t