ESPHome 2025.12.5
Loading...
Searching...
No Matches
cc1101.h
Go to the documentation of this file.
1#pragma once
2
4#include "esphome/core/hal.h"
7#include "cc1101defs.h"
8#include <vector>
9
10namespace esphome::cc1101 {
11
13
15 public spi::SPIDevice<spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW,
16 spi::CLOCK_PHASE_LEADING, spi::DATA_RATE_1MHZ> {
17 public:
19
20 void setup() override;
21 void loop() override;
22 void dump_config() override;
23
24 // Actions
25 void begin_tx();
26 void begin_rx();
27 void reset();
28 void set_idle();
29
30 // GDO Pin Configuration
31 void set_gdo0_pin(InternalGPIOPin *pin) { this->gdo0_pin_ = pin; }
32
33 // Configuration Setters
34 void set_output_power(float value);
36 void set_dc_blocking_filter(bool value);
37
38 // Tuner settings
39 void set_frequency(float value);
40 void set_if_frequency(float value);
41 void set_filter_bandwidth(float value);
42 void set_channel(uint8_t value);
43 void set_channel_spacing(float value);
44 void set_fsk_deviation(float value);
45 void set_msk_deviation(uint8_t value);
46 void set_symbol_rate(float value);
47 void set_sync_mode(SyncMode value);
48 void set_carrier_sense_above_threshold(bool value);
50 void set_manchester(bool value);
51 void set_num_preamble(uint8_t value);
52 void set_sync1(uint8_t value);
53 void set_sync0(uint8_t value);
54
55 // AGC settings
56 void set_magn_target(MagnTarget value);
57 void set_max_lna_gain(MaxLnaGain value);
59 void set_carrier_sense_abs_thr(int8_t value);
61 void set_lna_priority(bool value);
64 void set_freeze(Freeze value);
65 void set_wait_time(WaitTime value);
66 void set_hyst_level(HystLevel value);
67
68 // Packet mode settings
69 void set_packet_mode(bool value);
70 void set_packet_length(uint8_t value);
71 void set_crc_enable(bool value);
72 void set_whitening(bool value);
73
74 // Packet mode operations
75 CC1101Error transmit_packet(const std::vector<uint8_t> &packet);
76 Trigger<std::vector<uint8_t>, float, uint8_t> *get_packet_trigger() const { return this->packet_trigger_; }
77
78 protected:
79 uint16_t chip_id_{0};
80 bool initialized_{false};
81
84 uint8_t pa_table_[PA_TABLE_SIZE]{};
85
86 CC1101State state_;
87
88 // GDO pin for packet reception
90
91 // Packet handling
93 std::vector<uint8_t> packet_;
94
95 // Low-level Helpers
96 uint8_t strobe_(Command cmd);
97 void write_(Register reg);
98 void write_(Register reg, uint8_t value);
99 void write_(Register reg, const uint8_t *buffer, size_t length);
100 void read_(Register reg);
101 void read_(Register reg, uint8_t *buffer, size_t length);
102
103 // State Management
104 bool wait_for_state_(State target_state, uint32_t timeout_ms = 100);
105 bool enter_calibrated_(State target_state, Command cmd);
106 void enter_idle_();
107 bool enter_rx_();
108 bool enter_tx_();
109};
110
111// Action Wrappers
112template<typename... Ts> class BeginTxAction : public Action<Ts...>, public Parented<CC1101Component> {
113 public:
114 void play(const Ts &...x) override { this->parent_->begin_tx(); }
115};
116
117template<typename... Ts> class BeginRxAction : public Action<Ts...>, public Parented<CC1101Component> {
118 public:
119 void play(const Ts &...x) override { this->parent_->begin_rx(); }
120};
121
122template<typename... Ts> class ResetAction : public Action<Ts...>, public Parented<CC1101Component> {
123 public:
124 void play(const Ts &...x) override { this->parent_->reset(); }
125};
126
127template<typename... Ts> class SetIdleAction : public Action<Ts...>, public Parented<CC1101Component> {
128 public:
129 void play(const Ts &...x) override { this->parent_->set_idle(); }
130};
131
132template<typename... Ts> class SendPacketAction : public Action<Ts...>, public Parented<CC1101Component> {
133 public:
134 void set_data_template(std::function<std::vector<uint8_t>(Ts...)> func) { this->data_func_ = func; }
135 void set_data_static(const uint8_t *data, size_t len) {
136 this->data_static_ = data;
137 this->data_static_len_ = len;
138 }
139
140 void play(const Ts &...x) override {
141 if (this->data_func_) {
142 auto data = this->data_func_(x...);
143 this->parent_->transmit_packet(data);
144 } else if (this->data_static_ != nullptr) {
145 std::vector<uint8_t> data(this->data_static_, this->data_static_ + this->data_static_len_);
146 this->parent_->transmit_packet(data);
147 }
148 }
149
150 protected:
151 std::function<std::vector<uint8_t>(Ts...)> data_func_{};
152 const uint8_t *data_static_{nullptr};
154};
155
156} // namespace esphome::cc1101
Helper class to easily give an object a parent of type T.
Definition helpers.h:932
void play(const Ts &...x) override
Definition cc1101.h:119
void play(const Ts &...x) override
Definition cc1101.h:114
void set_packet_mode(bool value)
Definition cc1101.cpp:643
void set_max_dvga_gain(MaxDvgaGain value)
Definition cc1101.cpp:580
void set_whitening(bool value)
Definition cc1101.cpp:685
void set_carrier_sense_above_threshold(bool value)
Definition cc1101.cpp:519
void write_(Register reg)
Definition cc1101.cpp:312
void set_sync0(uint8_t value)
Definition cc1101.cpp:559
void set_freeze(Freeze value)
Definition cc1101.cpp:622
void set_rx_attenuation(RxAttenuation value)
Definition cc1101.cpp:414
InternalGPIOPin * gdo0_pin_
Definition cc1101.h:89
void set_symbol_rate(float value)
Definition cc1101.cpp:500
uint8_t strobe_(Command cmd)
Definition cc1101.cpp:301
void set_sync_mode(SyncMode value)
Definition cc1101.cpp:512
void set_fsk_deviation(float value)
Definition cc1101.cpp:481
void set_msk_deviation(uint8_t value)
Definition cc1101.cpp:492
void set_carrier_sense_rel_thr(CarrierSenseRelThr value)
Definition cc1101.cpp:594
uint8_t pa_table_[PA_TABLE_SIZE]
Definition cc1101.h:84
void set_lna_priority(bool value)
Definition cc1101.cpp:601
void set_output_power(float value)
Definition cc1101.cpp:386
void set_modulation_type(Modulation value)
Definition cc1101.cpp:526
void set_if_frequency(float value)
Definition cc1101.cpp:442
void set_frequency(float value)
Definition cc1101.cpp:428
void set_num_preamble(uint8_t value)
Definition cc1101.cpp:545
void set_hyst_level(HystLevel value)
Definition cc1101.cpp:636
void set_filter_bandwidth(float value)
Definition cc1101.cpp:449
void set_filter_length_fsk_msk(FilterLengthFskMsk value)
Definition cc1101.cpp:608
void set_crc_enable(bool value)
Definition cc1101.cpp:678
void set_carrier_sense_abs_thr(int8_t value)
Definition cc1101.cpp:587
bool enter_calibrated_(State target_state, Command cmd)
Definition cc1101.cpp:274
void set_magn_target(MagnTarget value)
Definition cc1101.cpp:566
void set_channel_spacing(float value)
Definition cc1101.cpp:469
CC1101Error transmit_packet(const std::vector< uint8_t > &packet)
Definition cc1101.cpp:350
void set_gdo0_pin(InternalGPIOPin *pin)
Definition cc1101.h:31
void set_wait_time(WaitTime value)
Definition cc1101.cpp:629
void set_dc_blocking_filter(bool value)
Definition cc1101.cpp:421
void set_packet_length(uint8_t value)
Definition cc1101.cpp:665
void set_manchester(bool value)
Definition cc1101.cpp:538
std::vector< uint8_t > packet_
Definition cc1101.h:93
void set_channel(uint8_t value)
Definition cc1101.cpp:460
void set_filter_length_ask_ook(FilterLengthAskOok value)
Definition cc1101.cpp:615
void set_max_lna_gain(MaxLnaGain value)
Definition cc1101.cpp:573
Trigger< std::vector< uint8_t >, float, uint8_t > * packet_trigger_
Definition cc1101.h:92
void set_sync1(uint8_t value)
Definition cc1101.cpp:552
bool wait_for_state_(State target_state, uint32_t timeout_ms=100)
Definition cc1101.cpp:261
Trigger< std::vector< uint8_t >, float, uint8_t > * get_packet_trigger() const
Definition cc1101.h:76
void play(const Ts &...x) override
Definition cc1101.h:124
std::function< std::vector< uint8_t >(Ts...)> data_func_
Definition cc1101.h:151
void set_data_static(const uint8_t *data, size_t len)
Definition cc1101.h:135
void play(const Ts &...x) override
Definition cc1101.h:140
void set_data_template(std::function< std::vector< uint8_t >(Ts...)> func)
Definition cc1101.h:134
void play(const Ts &...x) override
Definition cc1101.h:129
The SPIDevice is what components using the SPI will create.
Definition spi.h:427
std::string size_t len
Definition helpers.h:503
uint16_t length
Definition tt21100.cpp:0
uint16_t x
Definition tt21100.cpp:5