ESPHome 2025.9.0-dev
Loading...
Searching...
No Matches
ld2420.h
Go to the documentation of this file.
1#pragma once
2
7#ifdef USE_TEXT_SENSOR
9#endif
10#ifdef USE_SELECT
12#endif
13#ifdef USE_NUMBER
15#endif
16#ifdef USE_BUTTON
18#endif
19
20namespace esphome {
21namespace ld2420 {
22
23static const uint8_t CALIBRATE_SAMPLES = 64;
24static const uint8_t MAX_LINE_LENGTH = 46; // Max characters for serial buffer
25static const uint8_t TOTAL_GATES = 16;
26
32
34 public:
35 virtual void on_presence(bool presence){};
36 virtual void on_distance(uint16_t distance){};
37 virtual void on_energy(uint16_t *sensor_energy, size_t size){};
38 virtual void on_fw_version(std::string &fw){};
39};
40
42 public:
43 struct CmdFrameT {
44 uint32_t header{0};
45 uint32_t footer{0};
46 uint16_t length{0};
47 uint16_t command{0};
48 uint16_t data_length{0};
49 uint8_t data[18];
50 };
51
52 struct RegConfigT {
53 uint32_t move_thresh[TOTAL_GATES];
54 uint32_t still_thresh[TOTAL_GATES];
55 uint16_t min_gate{0};
56 uint16_t max_gate{0};
57 uint16_t timeout{0};
58 };
59
60 void setup() override;
61 void dump_config() override;
62 void loop() override;
63#ifdef USE_SELECT
64 void set_operating_mode_select(select::Select *selector) { this->operating_selector_ = selector; };
65#endif
66#ifdef USE_NUMBER
79 bool is_gate_select() { return gate_select_number_ != nullptr; };
80 uint8_t get_gate_select_value() { return static_cast<uint8_t>(this->gate_select_number_->state); };
83 void publish_gate_move_threshold(uint8_t gate) {
84 // With gate_select we only use 1 number pointer, thus we hard code [0]
85 this->gate_move_threshold_numbers_[0]->publish_state(this->new_config.move_thresh[gate]);
86 };
87 void publish_gate_still_threshold(uint8_t gate) {
88 this->gate_still_threshold_numbers_[0]->publish_state(this->new_config.still_thresh[gate]);
89 };
92#endif
93#ifdef USE_BUTTON
98#endif
99 void register_listener(LD2420Listener *listener) { this->listeners_.push_back(listener); }
100
101 void send_module_restart();
103 void apply_config_action();
106 float get_setup_priority() const override;
107 int send_cmd_from_array(CmdFrameT cmd_frame);
108 void report_gate_data();
109 void handle_cmd_error(uint8_t error);
110 void set_operating_mode(const std::string &state);
112 void update_radar_data(uint16_t const *gate_energy, uint8_t sample_number);
113 uint8_t set_config_mode(bool enable);
114 void set_min_max_distances_timeout(uint32_t max_gate_distance, uint32_t min_gate_distance, uint32_t timeout);
115 void set_gate_threshold(uint8_t gate);
116 void set_reg_value(uint16_t reg, uint16_t value);
117 void set_system_mode(uint16_t mode);
118 void ld2420_restart();
119
126 uint16_t radar_data[TOTAL_GATES][CALIBRATE_SAMPLES];
127 uint16_t gate_avg[TOTAL_GATES];
128 uint16_t gate_peak[TOTAL_GATES];
135#ifdef USE_SELECT
137#endif
138#ifdef USE_BUTTON
143#endif
144
145 protected:
146 struct CmdReplyT {
147 uint32_t data[4];
148 uint16_t error;
149 uint8_t command;
150 uint8_t status;
151 uint8_t length;
152 volatile bool ack;
153 };
154
156 int get_gate_threshold_(uint8_t gate);
157 void get_reg_value_(uint16_t reg);
159 uint16_t get_mode_() { return this->system_mode_; };
160 void set_mode_(uint16_t mode) { this->system_mode_ = mode; };
161 bool get_presence_() { return this->presence_; };
162 void set_presence_(bool presence) { this->presence_ = presence; };
163 uint16_t get_distance_() { return this->distance_; };
164 void set_distance_(uint16_t distance) { this->distance_ = distance; };
165 void handle_simple_mode_(const uint8_t *inbuf, int len);
166 void handle_energy_mode_(uint8_t *buffer, int len);
167 void handle_ack_data_(uint8_t *buffer, int len);
168 void readline_(int rx_data, uint8_t *buffer, int len);
169 void set_calibration_(bool state) { this->calibration_ = state; };
170 bool get_calibration_() { return this->calibration_; };
171
172#ifdef USE_NUMBER
179 std::vector<number::Number *> gate_still_threshold_numbers_ = std::vector<number::Number *>(16);
180 std::vector<number::Number *> gate_move_threshold_numbers_ = std::vector<number::Number *>(16);
181#endif
182
183 uint16_t distance_{0};
184 uint16_t system_mode_;
185 uint16_t gate_energy_[TOTAL_GATES];
186 uint8_t buffer_pos_{0}; // where to resume processing/populating buffer
187 uint8_t buffer_data_[MAX_LINE_LENGTH];
188 char firmware_ver_[8]{"v0.0.0"};
189 bool cmd_active_{false};
190 bool presence_{false};
191 bool calibration_{false};
193 std::vector<LD2420Listener *> listeners_{};
194};
195
196} // namespace ld2420
197} // namespace esphome
BedjetMode mode
BedJet operating mode.
Base class for all buttons.
Definition button.h:29
void readline_(int rx_data, uint8_t *buffer, int len)
Definition ld2420.cpp:411
void set_system_mode(uint16_t mode)
Definition ld2420.cpp:754
void handle_ack_data_(uint8_t *buffer, int len)
Definition ld2420.cpp:525
void set_gate_timeout_number(number::Number *number)
Definition ld2420.h:67
void set_gate_still_sensitivity_factor_number(number::Number *number)
Definition ld2420.h:74
std::vector< number::Number * > gate_still_threshold_numbers_
Definition ld2420.h:179
number::Number * gate_select_number_
Definition ld2420.h:174
uint8_t set_config_mode(bool enable)
Definition ld2420.cpp:653
void register_listener(LD2420Listener *listener)
Definition ld2420.h:99
button::Button * factory_reset_button_
Definition ld2420.h:142
void update_radar_data(uint16_t const *gate_energy, uint8_t sample_number)
Definition ld2420.cpp:334
float get_setup_priority() const override
Definition ld2420.cpp:184
void set_operating_mode_select(select::Select *selector)
Definition ld2420.h:64
void set_distance_(uint16_t distance)
Definition ld2420.h:164
void set_min_max_distances_timeout(uint32_t max_gate_distance, uint32_t min_gate_distance, uint32_t timeout)
Definition ld2420.cpp:784
void set_gate_threshold(uint8_t gate)
Definition ld2420.cpp:817
void set_factory_reset_button(button::Button *button)
Definition ld2420.h:97
void handle_energy_mode_(uint8_t *buffer, int len)
Definition ld2420.cpp:441
void set_gate_move_threshold_numbers(int gate, number::Number *n)
Definition ld2420.h:78
void publish_gate_still_threshold(uint8_t gate)
Definition ld2420.h:87
button::Button * revert_config_button_
Definition ld2420.h:140
void set_calibration_(bool state)
Definition ld2420.h:169
number::Number * min_gate_distance_number_
Definition ld2420.h:175
void set_restart_module_button(button::Button *button)
Definition ld2420.h:96
button::Button * apply_config_button_
Definition ld2420.h:139
uint16_t gate_peak[TOTAL_GATES]
Definition ld2420.h:128
std::vector< LD2420Listener * > listeners_
Definition ld2420.h:193
std::vector< number::Number * > gate_move_threshold_numbers_
Definition ld2420.h:180
void set_mode_(uint16_t mode)
Definition ld2420.h:160
uint16_t gate_avg[TOTAL_GATES]
Definition ld2420.h:127
void set_min_gate_distance_number(number::Number *number)
Definition ld2420.h:69
void set_gate_still_threshold_numbers(int gate, number::Number *n)
Definition ld2420.h:77
uint8_t buffer_data_[MAX_LINE_LENGTH]
Definition ld2420.h:187
int get_gate_threshold_(uint8_t gate)
Definition ld2420.cpp:708
number::Number * gate_still_sensitivity_factor_number_
Definition ld2420.h:178
void set_revert_config_button(button::Button *button)
Definition ld2420.h:95
void handle_cmd_error(uint8_t error)
Definition ld2420.cpp:706
int send_cmd_from_array(CmdFrameT cmd_frame)
Definition ld2420.cpp:593
void get_reg_value_(uint16_t reg)
Definition ld2420.cpp:680
uint16_t gate_energy_[TOTAL_GATES]
Definition ld2420.h:185
void publish_gate_move_threshold(uint8_t gate)
Definition ld2420.h:83
void handle_simple_mode_(const uint8_t *inbuf, int len)
Definition ld2420.cpp:481
number::Number * max_gate_distance_number_
Definition ld2420.h:176
void set_gate_select_number(number::Number *number)
Definition ld2420.h:68
select::Select * operating_selector_
Definition ld2420.h:136
button::Button * restart_module_button_
Definition ld2420.h:141
void set_operating_mode(const std::string &state)
Definition ld2420.cpp:382
number::Number * gate_timeout_number_
Definition ld2420.h:173
void set_apply_config_button(button::Button *button)
Definition ld2420.h:94
void set_max_gate_distance_number(number::Number *number)
Definition ld2420.h:70
uint16_t radar_data[TOTAL_GATES][CALIBRATE_SAMPLES]
Definition ld2420.h:126
void set_presence_(bool presence)
Definition ld2420.h:162
number::Number * gate_move_sensitivity_factor_number_
Definition ld2420.h:177
void set_reg_value(uint16_t reg, uint16_t value)
Definition ld2420.cpp:692
void set_gate_move_sensitivity_factor_number(number::Number *number)
Definition ld2420.h:71
virtual void on_fw_version(std::string &fw)
Definition ld2420.h:38
virtual void on_distance(uint16_t distance)
Definition ld2420.h:36
virtual void on_presence(bool presence)
Definition ld2420.h:35
virtual void on_energy(uint16_t *sensor_energy, size_t size)
Definition ld2420.h:37
Base-class for all numbers.
Definition number.h:39
Base-class for all selects.
Definition select.h:31
bool state
Definition fan.h:0
@ OP_CALIBRATE_MODE
Definition ld2420.h:29
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7
std::string size_t len
Definition helpers.h:279