ESPHome 2026.8.0b4
Loading...
Searching...
No Matches
ld6002b.h
Go to the documentation of this file.
1#pragma once
2
7#include "esphome/core/gpio.h"
9#ifdef USE_SENSOR
11#endif
12#ifdef USE_BINARY_SENSOR
14#endif
15#ifdef USE_TEXT_SENSOR
17#endif
18#ifdef USE_NUMBER
20#endif
21#ifdef USE_SELECT
23#endif
24#ifdef USE_SWITCH
26#endif
27
28#include <array>
29#include <cmath>
30
31namespace esphome::ld6002b {
32
33static constexpr uint8_t MAX_TARGETS = 3;
34static constexpr uint8_t AREA_COUNT = 4;
35// Interference areas own ids 0..AREA_COUNT-1 and detection areas the next four, so
36// this is the whole id space TYPE_SET_AREA accepts.
37static constexpr uint8_t AREA_ID_COUNT = AREA_COUNT * 2;
38static constexpr size_t DEFAULT_MAX_DATA_LEN = 1024;
39static constexpr size_t DEFAULT_MAX_DATA_LEN_POINT_CLOUD = 4096;
40// Largest protocol payload is TYPE_SET_AREA: int32 area id + 6 floats = 28 bytes.
41static constexpr size_t CMD_MAX_DATA_LEN = 28;
42
43enum class NumberType : uint8_t {
45 Z_MIN,
46 Z_MAX,
54};
55
56enum class SelectType : uint8_t {
60 AREA_ID,
61};
62
63enum class SwitchType : uint8_t {
67};
68
85
86#ifdef USE_SENSOR
94
103#endif
104
106 float x_min{NAN};
107 float x_max{NAN};
108 float y_min{NAN};
109 float y_max{NAN};
110 float z_min{NAN};
111 float z_max{NAN};
112};
113
115 char value[20];
116};
117
119 public:
120 void setup() override;
121 void loop() override;
122 void dump_config() override;
123 float get_setup_priority() const override { return setup_priority::DATA; }
124
125 void set_wakeup_pin(GPIOPin *pin) { this->wakeup_pin_ = pin; }
127 void set_auto_wake(bool enable) { this->auto_wake_ = enable; }
128
129#ifdef USE_SENSOR
132
133 void set_target_x_sensor(uint8_t target, sensor::Sensor *sensor) {
134 if (target >= MAX_TARGETS)
135 return;
136 this->targets_[target].x = sensor;
137 }
138 void set_target_y_sensor(uint8_t target, sensor::Sensor *sensor) {
139 if (target >= MAX_TARGETS)
140 return;
141 this->targets_[target].y = sensor;
142 }
143 void set_target_z_sensor(uint8_t target, sensor::Sensor *sensor) {
144 if (target >= MAX_TARGETS)
145 return;
146 this->targets_[target].z = sensor;
147 }
148 void set_target_dop_idx_sensor(uint8_t target, sensor::Sensor *sensor) {
149 if (target >= MAX_TARGETS)
150 return;
151 this->targets_[target].dop_idx = sensor;
152 }
153 void set_target_cluster_id_sensor(uint8_t target, sensor::Sensor *sensor) {
154 if (target >= MAX_TARGETS)
155 return;
156 this->targets_[target].cluster_id = sensor;
157 }
159 if (area >= AREA_COUNT)
160 return;
161 this->interference_areas_[area].x_min = sensor;
162 }
164 if (area >= AREA_COUNT)
165 return;
166 this->interference_areas_[area].x_max = sensor;
167 }
169 if (area >= AREA_COUNT)
170 return;
171 this->interference_areas_[area].y_min = sensor;
172 }
174 if (area >= AREA_COUNT)
175 return;
176 this->interference_areas_[area].y_max = sensor;
177 }
179 if (area >= AREA_COUNT)
180 return;
181 this->interference_areas_[area].z_min = sensor;
182 }
184 if (area >= AREA_COUNT)
185 return;
186 this->interference_areas_[area].z_max = sensor;
187 }
188
190 if (area >= AREA_COUNT)
191 return;
192 this->detection_areas_[area].x_min = sensor;
193 }
195 if (area >= AREA_COUNT)
196 return;
197 this->detection_areas_[area].x_max = sensor;
198 }
200 if (area >= AREA_COUNT)
201 return;
202 this->detection_areas_[area].y_min = sensor;
203 }
205 if (area >= AREA_COUNT)
206 return;
207 this->detection_areas_[area].y_max = sensor;
208 }
210 if (area >= AREA_COUNT)
211 return;
212 this->detection_areas_[area].z_min = sensor;
213 }
215 if (area >= AREA_COUNT)
216 return;
217 this->detection_areas_[area].z_max = sensor;
218 }
219#endif
220
221#ifdef USE_BINARY_SENSOR
224 if (target >= MAX_TARGETS)
225 return;
226 this->target_presence_[target] = sensor;
227 }
229 if (area >= AREA_COUNT)
230 return;
231 this->area_presence_[area] = sensor;
232 }
233#endif
234
235#ifdef USE_TEXT_SENSOR
238#endif
239
240#ifdef USE_NUMBER
242 void set_z_min_number(number::Number *number) { this->z_min_number_ = number; }
243 void set_z_max_number(number::Number *number) { this->z_max_number_ = number; }
245
252#endif
253
254#ifdef USE_SELECT
258 void set_area_id_select(select::Select *select) { this->area_id_select_ = select; }
259#endif
260
261#ifdef USE_SWITCH
265#endif
266
267 void set_number_value(NumberType type, float value);
268 void set_select_value(SelectType type, size_t index);
271
272 protected:
273 enum class ParseState : uint8_t { SOF, HEADER, HCK, DATA, DCK, DISCARD };
274
276 uint16_t type{0};
277 uint8_t len{0};
278 std::array<uint8_t, CMD_MAX_DATA_LEN> data{};
279 };
280
281 void parse_byte_(uint8_t byte);
282 void reset_parser_();
283 void handle_frame_(uint16_t type, const uint8_t *data, uint16_t len);
284 void handle_target_report_(const uint8_t *data, uint16_t len);
285 void handle_point_cloud_(const uint8_t *data, uint16_t len);
286 void handle_area_presence_(const uint8_t *data, uint16_t len);
287 void handle_area_report_(bool interference, const uint8_t *data, uint16_t len);
288 void handle_delay_report_(const uint8_t *data, uint16_t len);
289 void handle_sensitivity_report_(const uint8_t *data, uint16_t len);
290 void handle_trigger_speed_report_(const uint8_t *data, uint16_t len);
291 void handle_z_range_report_(const uint8_t *data, uint16_t len);
292 void handle_installation_report_(const uint8_t *data, uint16_t len);
293 void handle_low_power_report_(const uint8_t *data, uint16_t len);
294 void handle_low_power_sleep_report_(const uint8_t *data, uint16_t len);
295 void handle_work_mode_report_(const uint8_t *data, uint16_t len);
296 void handle_version_report_(const uint8_t *data, uint16_t len);
298 void publish_work_mode_(bool low_power);
299 // Drops every target-derived reading and the slot table they are indexed by.
300 void clear_target_state_();
304#ifdef USE_SENSOR
305 void clear_target_slot_(uint8_t index);
306#endif
307#ifdef USE_NUMBER
308 void publish_number_clamped_(number::Number *number, float value);
309#endif
310 void update_area_numbers_(const AreaConfig &area);
311 void update_area_numbers_for_id_(uint8_t area_id);
312 bool queue_area_config_(uint8_t area_id, const AreaConfig &desired);
313 void try_apply_pending_area_(bool reported_interference);
314 void init_area_id_pref_();
315 void save_area_id_pref_(uint8_t value);
316 void init_version_pref_();
317 void save_version_pref_(const char *value);
318
319 // Returns whether the command was queued: it is dropped, with a log line, when
320 // the payload is too long or the ring is full.
321 bool queue_command_(uint16_t type, const uint8_t *data, uint8_t len);
323 void send_command_(uint16_t type, const uint8_t *data, uint8_t len);
324 void send_command_internal_(uint16_t type, const uint8_t *data, uint8_t len, bool track);
325 void write_frame_(uint16_t type, const uint8_t *data, uint8_t len, bool track);
326 // Returns whether the command reached the queue; see queue_command_.
327 bool send_control_command_(uint32_t command);
328 void send_z_range_();
329 void apply_area_config_();
330 void wake_();
331
332 static uint16_t read_u16_be(const uint8_t *data);
333 static uint32_t read_u32_le(const uint8_t *data);
334 static int32_t read_int32_le(const uint8_t *data);
335 static float read_f32_le(const uint8_t *data);
336 static void write_u32_le(uint8_t *data, uint32_t value);
337 static void write_int32_le(uint8_t *data, int32_t value);
338 static void write_f32_le(uint8_t *data, float value);
339
340#ifdef USE_SENSOR
341 std::array<TargetSensors, MAX_TARGETS> targets_{};
344 std::array<AreaSensors, AREA_COUNT> interference_areas_{};
345 std::array<AreaSensors, AREA_COUNT> detection_areas_{};
346#endif
347#ifdef USE_BINARY_SENSOR
349 std::array<binary_sensor::BinarySensor *, MAX_TARGETS> target_presence_{};
350 std::array<binary_sensor::BinarySensor *, AREA_COUNT> area_presence_{};
351#endif
352#ifdef USE_TEXT_SENSOR
357#endif
358#ifdef USE_NUMBER
363
370#endif
371#ifdef USE_SELECT
378#endif
379#ifdef USE_SWITCH
383#endif
384
387 bool auto_wake_{true};
388
390 uint8_t header_pos_{0};
391 uint8_t header_xor_{0};
392 uint16_t data_len_{0};
393 uint16_t frame_type_{0};
394 uint16_t frame_id_{0};
395 uint16_t data_pos_{0};
396 uint8_t data_xor_{0};
398 bool frame_oversize_{false};
399 size_t max_data_len_{0};
400 uint8_t *data_buf_{nullptr};
401 uint16_t next_frame_id_{0};
402
403 // Sized for the two bursts that reach it, both counted as what is still queued
404 // once the first command is dequeued: boot leaves 11 with every platform
405 // configured, and pressing all fourteen buttons before an ack lands leaves 15.
406 // Neither overflowed 16, but one free slot is not headroom, and overflowing is a
407 // dropped command with only a log line to show for it. Costs 256 bytes more per
408 // configured instance, and this component is MULTI_CONF.
409 static constexpr uint8_t CMD_QUEUE_SIZE = 24;
410 static constexpr uint32_t CMD_ACK_TIMEOUT_MS = 300;
411 // A sleeping module consumes the first frame to wake and answers only the one after it.
412 static constexpr uint32_t CMD_FIRST_ACK_TIMEOUT_MS = 600;
413 // How long the module stays awake after any frame, and so still answers the next one.
414 static constexpr uint32_t MODULE_AWAKE_MS = 10000;
415 static constexpr uint8_t CMD_MAX_RETRIES = 3;
416 // Named so a repeated press replaces its own pending timeout instead of stacking
417 // another, and so the command path can cancel it when it takes the pin over.
418 static constexpr const char *WAKE_BUTTON_TIMEOUT = "wake_button";
419 // Named so a burst of writes collapses to one read once they settle, rather than
420 // one read per write.
421 static constexpr const char *AREA_REFRESH_TIMEOUT = "area_refresh";
422 // A reply cannot trail the frame that earned it for longer than this; the field worst case is ~726ms.
423 static constexpr uint32_t STALE_ACK_MAX_AGE_MS = 1000;
424
425 std::array<PendingCommand, CMD_QUEUE_SIZE> cmd_queue_{};
426 uint8_t cmd_head_{0};
427 uint8_t cmd_tail_{0};
428 uint8_t cmd_count_{0};
429 bool command_active_{false};
430 bool command_sent_{false};
432 // Frame a pending wake pulse will write, snapshotted because active_command_ may move on first.
433 std::array<uint8_t, CMD_MAX_DATA_LEN> wake_scratch_{};
435 uint8_t retries_left_{0};
437 // Last frame seen in either direction; any traffic keeps the module awake.
439 // Frames transmitted for the command in flight, including retries; drives the retry budget.
440 uint8_t attempts_sent_{0};
441 // Subset of those the module can actually answer: a frame that woke it is consumed, not replied to.
442 uint8_t acks_expected_{0};
443 // ACKs still owed for superseded attempts; they carry no id, only their arrival order.
444 uint16_t stale_ack_type_{0};
446 // When that debt was booked, so a debt no reply can still settle expires instead of eating a live ACK.
448 // Bumped whenever the active command changes, so a deferred send can tell it was retired.
450
451 float z_min_{NAN};
452 float z_max_{NAN};
453 float area_x_min_{NAN};
454 float area_x_max_{NAN};
455 float area_y_min_{NAN};
456 float area_y_max_{NAN};
457 float area_z_min_{NAN};
458 float area_z_max_{NAN};
459 // What the user has typed and not yet applied; NaN per axis means "nothing of
460 // mine here, take the module's value". Same sentinel shape as
461 // pending_area_updates_. Exactly two things empty it: the area_id select moving
462 // to another area, and an apply that was accepted. A write the bounds guard
463 // refused leaves it alone, and a deferred apply that had to be dropped hands its
464 // staged values back here -- but only while the user is still on the area they
465 // were staged for. Either way the values stay the user's to fix.
467 std::array<AreaConfig, AREA_COUNT> interference_area_values_{};
468 std::array<AreaConfig, AREA_COUNT> detection_area_values_{};
469 uint8_t area_id_{0xFF};
470 bool area_id_set_{false};
471
472 // Which person owns each target_N slot, so a slot survives the module re-sorting its array.
473 std::array<int32_t, MAX_TARGETS> slot_cluster_{};
474 std::array<bool, MAX_TARGETS> slot_occupied_{};
475
477 // What the switches and setup asked the module for, which is not the same as
478 // what it is doing yet: a stream keeps sending until it acts on the command.
479 // The report handlers read these and drop anything a stopped stream still emits.
488 uint8_t pending_area_id_{0xFF};
492
493#ifdef USE_SENSOR
494 std::array<bool, MAX_TARGETS> last_target_presence_{}; // one-shot NAN clear for target sensors
495 // A cluster id names a person, so like the counts it is published on change, not per frame.
496 std::array<int32_t, MAX_TARGETS> last_cluster_id_{};
497 std::array<bool, MAX_TARGETS> last_cluster_id_valid_{};
500#endif
501};
502
503} // namespace esphome::ld6002b
Base class for all binary_sensor-type classes.
void set_target_presence_binary_sensor(uint8_t target, binary_sensor::BinarySensor *sensor)
Definition ld6002b.h:223
text_sensor::TextSensor * work_mode_text_sensor_
Definition ld6002b.h:353
select::Select * area_id_select_
Definition ld6002b.h:375
bool queue_area_config_(uint8_t area_id, const AreaConfig &desired)
Definition ld6002b.cpp:1512
binary_sensor::BinarySensor * presence_binary_sensor_
Definition ld6002b.h:348
number::Number * area_z_min_number_
Definition ld6002b.h:368
void handle_target_report_(const uint8_t *data, uint16_t len)
Definition ld6002b.cpp:698
text_sensor::TextSensor * ota_version_text_sensor_
Definition ld6002b.h:354
void set_z_max_number(number::Number *number)
Definition ld6002b.h:243
void set_target_x_sensor(uint8_t target, sensor::Sensor *sensor)
Definition ld6002b.h:133
std::array< uint8_t, CMD_MAX_DATA_LEN > wake_scratch_
Definition ld6002b.h:433
static constexpr uint8_t CMD_QUEUE_SIZE
Definition ld6002b.h:409
static constexpr const char * WAKE_BUTTON_TIMEOUT
Definition ld6002b.h:418
void set_work_mode_text_sensor(text_sensor::TextSensor *sensor)
Definition ld6002b.h:236
number::Number * area_z_max_number_
Definition ld6002b.h:369
void set_area_y_max_number(number::Number *number)
Definition ld6002b.h:249
static void write_int32_le(uint8_t *data, int32_t value)
Definition ld6002b.cpp:234
void set_select_value(SelectType type, size_t index)
Definition ld6002b.cpp:1432
void save_area_id_pref_(uint8_t value)
Definition ld6002b.cpp:1623
void set_hold_delay_number(number::Number *number)
Definition ld6002b.h:241
static void write_u32_le(uint8_t *data, uint32_t value)
Definition ld6002b.cpp:227
std::array< PendingCommand, CMD_QUEUE_SIZE > cmd_queue_
Definition ld6002b.h:425
void set_target_dop_idx_sensor(uint8_t target, sensor::Sensor *sensor)
Definition ld6002b.h:148
void set_presence_binary_sensor(binary_sensor::BinarySensor *sensor)
Definition ld6002b.h:222
static float read_f32_le(const uint8_t *data)
Definition ld6002b.cpp:220
ESPPreferenceObject version_pref_
Definition ld6002b.h:355
void handle_installation_report_(const uint8_t *data, uint16_t len)
Definition ld6002b.cpp:964
void set_switch_state(SwitchType type, bool state)
Definition ld6002b.cpp:1794
std::array< bool, MAX_TARGETS > last_cluster_id_valid_
Definition ld6002b.h:497
void set_interference_area_x_max_sensor(uint8_t area, sensor::Sensor *sensor)
Definition ld6002b.h:163
std::array< int32_t, MAX_TARGETS > last_cluster_id_
Definition ld6002b.h:496
void set_number_value(NumberType type, float value)
Definition ld6002b.cpp:1381
void set_target_display_switch(switch_::Switch *sw)
Definition ld6002b.h:264
void handle_trigger_speed_report_(const uint8_t *data, uint16_t len)
Definition ld6002b.cpp:938
float get_setup_priority() const override
Definition ld6002b.h:123
void set_target_z_sensor(uint8_t target, sensor::Sensor *sensor)
Definition ld6002b.h:143
select::Select * installation_select_
Definition ld6002b.h:374
void set_interference_area_y_min_sensor(uint8_t area, sensor::Sensor *sensor)
Definition ld6002b.h:168
void set_detection_area_x_min_sensor(uint8_t area, sensor::Sensor *sensor)
Definition ld6002b.h:189
std::array< AreaSensors, AREA_COUNT > detection_areas_
Definition ld6002b.h:345
void set_area_presence_binary_sensor(uint8_t area, binary_sensor::BinarySensor *sensor)
Definition ld6002b.h:228
void set_area_z_max_number(number::Number *number)
Definition ld6002b.h:251
void set_detection_area_y_max_sensor(uint8_t area, sensor::Sensor *sensor)
Definition ld6002b.h:204
select::Select * trigger_speed_select_
Definition ld6002b.h:373
void set_area_x_min_number(number::Number *number)
Definition ld6002b.h:246
static uint32_t read_u32_le(const uint8_t *data)
Definition ld6002b.cpp:208
void set_interference_area_z_max_sensor(uint8_t area, sensor::Sensor *sensor)
Definition ld6002b.h:183
void save_version_pref_(const char *value)
Definition ld6002b.cpp:1648
number::Number * area_x_max_number_
Definition ld6002b.h:365
sensor::Sensor * point_count_sensor_
Definition ld6002b.h:343
static constexpr uint8_t CMD_MAX_RETRIES
Definition ld6002b.h:415
void update_area_numbers_for_id_(uint8_t area_id)
Definition ld6002b.cpp:1501
void update_area_numbers_(const AreaConfig &area)
Definition ld6002b.cpp:1468
void set_detection_area_x_max_sensor(uint8_t area, sensor::Sensor *sensor)
Definition ld6002b.h:194
std::array< AreaConfig, AREA_COUNT > interference_area_values_
Definition ld6002b.h:467
void handle_version_report_(const uint8_t *data, uint16_t len)
Definition ld6002b.cpp:1080
void set_wakeup_pin(GPIOPin *pin)
Definition ld6002b.h:125
number::Number * area_y_max_number_
Definition ld6002b.h:367
void set_detection_area_y_min_sensor(uint8_t area, sensor::Sensor *sensor)
Definition ld6002b.h:199
switch_::Switch * target_display_switch_
Definition ld6002b.h:382
void send_command_internal_(uint16_t type, const uint8_t *data, uint8_t len, bool track)
Definition ld6002b.cpp:1210
static uint16_t read_u16_be(const uint8_t *data)
Definition ld6002b.cpp:206
void set_low_power_switch(switch_::Switch *sw)
Definition ld6002b.h:262
static constexpr const char * AREA_REFRESH_TIMEOUT
Definition ld6002b.h:421
void handle_area_presence_(const uint8_t *data, uint16_t len)
Definition ld6002b.cpp:842
void publish_number_clamped_(number::Number *number, float value)
Definition ld6002b.cpp:1054
select::Select * sensitivity_select_
Definition ld6002b.h:372
number::Number * hold_delay_number_
Definition ld6002b.h:359
void set_interference_area_y_max_sensor(uint8_t area, sensor::Sensor *sensor)
Definition ld6002b.h:173
static constexpr uint32_t MODULE_AWAKE_MS
Definition ld6002b.h:414
static constexpr uint32_t CMD_FIRST_ACK_TIMEOUT_MS
Definition ld6002b.h:412
void set_ota_version_text_sensor(text_sensor::TextSensor *sensor)
Definition ld6002b.h:237
void set_trigger_speed_select(select::Select *select)
Definition ld6002b.h:256
void set_target_cluster_id_sensor(uint8_t target, sensor::Sensor *sensor)
Definition ld6002b.h:153
void set_low_power_sleep_number(number::Number *number)
Definition ld6002b.h:244
void set_area_y_min_number(number::Number *number)
Definition ld6002b.h:248
static int32_t read_int32_le(const uint8_t *data)
Definition ld6002b.cpp:213
void set_auto_wake(bool enable)
Definition ld6002b.h:127
void handle_area_report_(bool interference, const uint8_t *data, uint16_t len)
Definition ld6002b.cpp:868
void set_z_min_number(number::Number *number)
Definition ld6002b.h:242
std::array< bool, MAX_TARGETS > slot_occupied_
Definition ld6002b.h:474
void handle_low_power_report_(const uint8_t *data, uint16_t len)
Definition ld6002b.cpp:977
std::array< AreaConfig, AREA_COUNT > detection_area_values_
Definition ld6002b.h:468
static constexpr uint32_t CMD_ACK_TIMEOUT_MS
Definition ld6002b.h:410
std::array< int32_t, MAX_TARGETS > slot_cluster_
Definition ld6002b.h:473
std::array< binary_sensor::BinarySensor *, AREA_COUNT > area_presence_
Definition ld6002b.h:350
void handle_delay_report_(const uint8_t *data, uint16_t len)
Definition ld6002b.cpp:916
std::array< AreaSensors, AREA_COUNT > interference_areas_
Definition ld6002b.h:344
void set_area_id_select(select::Select *select)
Definition ld6002b.h:258
void handle_sensitivity_report_(const uint8_t *data, uint16_t len)
Definition ld6002b.cpp:925
void set_sensitivity_select(select::Select *select)
Definition ld6002b.h:255
void set_target_y_sensor(uint8_t target, sensor::Sensor *sensor)
Definition ld6002b.h:138
std::array< TargetSensors, MAX_TARGETS > targets_
Definition ld6002b.h:341
void handle_frame_(uint16_t type, const uint8_t *data, uint16_t len)
Definition ld6002b.cpp:608
void send_command_(uint16_t type, const uint8_t *data, uint8_t len)
Definition ld6002b.cpp:1206
switch_::Switch * low_power_switch_
Definition ld6002b.h:380
sensor::Sensor * target_count_sensor_
Definition ld6002b.h:342
switch_::Switch * point_cloud_switch_
Definition ld6002b.h:381
void set_point_cloud_switch(switch_::Switch *sw)
Definition ld6002b.h:263
std::array< bool, MAX_TARGETS > last_target_presence_
Definition ld6002b.h:494
number::Number * area_y_min_number_
Definition ld6002b.h:366
void publish_work_mode_(bool low_power)
Definition ld6002b.cpp:1039
void write_frame_(uint16_t type, const uint8_t *data, uint8_t len, bool track)
Definition ld6002b.cpp:1249
std::array< binary_sensor::BinarySensor *, MAX_TARGETS > target_presence_
Definition ld6002b.h:349
void set_interference_area_z_min_sensor(uint8_t area, sensor::Sensor *sensor)
Definition ld6002b.h:178
void handle_low_power_sleep_report_(const uint8_t *data, uint16_t len)
Definition ld6002b.cpp:991
void set_installation_select(select::Select *select)
Definition ld6002b.h:257
void set_point_count_sensor(sensor::Sensor *sensor)
Definition ld6002b.h:131
void handle_work_mode_report_(const uint8_t *data, uint16_t len)
Definition ld6002b.cpp:1000
void set_wakeup_pulse_ms(uint32_t ms)
Definition ld6002b.h:126
void set_interference_area_x_min_sensor(uint8_t area, sensor::Sensor *sensor)
Definition ld6002b.h:158
void press_button(ButtonType type)
Definition ld6002b.cpp:1826
number::Number * area_x_min_number_
Definition ld6002b.h:364
void set_detection_area_z_min_sensor(uint8_t area, sensor::Sensor *sensor)
Definition ld6002b.h:209
void try_apply_pending_area_(bool reported_interference)
Definition ld6002b.cpp:1553
void set_target_count_sensor(sensor::Sensor *sensor)
Definition ld6002b.h:130
bool queue_command_(uint16_t type, const uint8_t *data, uint8_t len)
Definition ld6002b.cpp:1101
void clear_target_slot_(uint8_t index)
Definition ld6002b.cpp:1661
void set_area_x_max_number(number::Number *number)
Definition ld6002b.h:247
void set_detection_area_z_max_sensor(uint8_t area, sensor::Sensor *sensor)
Definition ld6002b.h:214
number::Number * low_power_sleep_number_
Definition ld6002b.h:362
static constexpr uint32_t STALE_ACK_MAX_AGE_MS
Definition ld6002b.h:423
void set_area_z_min_number(number::Number *number)
Definition ld6002b.h:250
ESPPreferenceObject area_id_pref_
Definition ld6002b.h:376
bool send_control_command_(uint32_t command)
Definition ld6002b.cpp:1290
void handle_point_cloud_(const uint8_t *data, uint16_t len)
Definition ld6002b.cpp:818
void handle_z_range_report_(const uint8_t *data, uint16_t len)
Definition ld6002b.cpp:951
static void write_f32_le(uint8_t *data, float value)
Definition ld6002b.cpp:238
Base-class for all numbers.
Definition number.h:29
Base-class for all selects.
Definition select.h:29
Base-class for all sensors.
Definition sensor.h:47
Base class for all switches.
Definition switch.h:38
uint16_t type
bool state
Definition fan.h:2
constexpr float DATA
For components that import data from directly connected sensors like DHT.
Definition component.h:45
const void size_t len
Definition hal.h:64
static void uint32_t
sensor::Sensor * z_max
Definition ld6002b.h:101
sensor::Sensor * z_min
Definition ld6002b.h:100
sensor::Sensor * x_min
Definition ld6002b.h:96
sensor::Sensor * y_max
Definition ld6002b.h:99
sensor::Sensor * y_min
Definition ld6002b.h:98
sensor::Sensor * x_max
Definition ld6002b.h:97
std::array< uint8_t, CMD_MAX_DATA_LEN > data
Definition ld6002b.h:278
sensor::Sensor * cluster_id
Definition ld6002b.h:92
sensor::Sensor * dop_idx
Definition ld6002b.h:91