Reduce LD2410 Hardware Watchdogs

This commit is contained in:
Theo Arends 2022-11-29 10:51:56 +01:00
parent 47ee69137b
commit 143373b0d3

View File

@ -27,6 +27,7 @@
#define XSNS_102 102
#define LD2410_BUFFER_SIZE TM_SERIAL_BUFFER_SIZE // 64
#define LD2410_MAX_GATES 8 // 0 to 8 (= 9) - DO NOT CHANGE
#define LD2410_CMND_START_CONFIGURATION 0xFF
@ -65,7 +66,6 @@ struct {
uint8_t static_energy;
uint8_t step;
uint8_t retry;
uint8_t byte_counter;
uint8_t settings;
bool valid_response;
} LD2410;
@ -153,52 +153,27 @@ bool Ld2410Match(const uint8_t *header, uint32_t offset) {
}
void Ld2410Input(void) {
uint32_t size = LD2410Serial->read(LD2410.buffer, LD2410_BUFFER_SIZE);
if (size) {
AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("LD2: Rcvd %*_H"), size, LD2410.buffer);
if (LD2410Serial->overflow()) {
AddLog(LOG_LEVEL_DEBUG, PSTR("LD2: Serial buffer overrun"));
}
while (LD2410Serial->available()) {
yield(); // Fix watchdogs
LD2410.buffer[LD2410.byte_counter++] = LD2410Serial->read();
if (LD2410.byte_counter < 4) { continue; } // Need first four header bytes
uint32_t header_start = LD2410.byte_counter -4; // Fix interrupted header transmits
bool target_header = (Ld2410Match(LD2410_target_header, header_start)); // F4F3F2F1
bool config_header = (Ld2410Match(LD2410_config_header, header_start)); // FDFCFBFA
if ((target_header || config_header) && (header_start != 0)) {
memmove(LD2410.buffer, LD2410.buffer + header_start, 4); // Sync buffer with header
LD2410.byte_counter = 4;
}
if (LD2410.byte_counter < 6) { continue; } // Need packet size bytes
target_header = (Ld2410Match(LD2410_target_header, 0)); // F4F3F2F1
config_header = (Ld2410Match(LD2410_config_header, 0)); // FDFCFBFA
bool target_header = (Ld2410Match(LD2410_target_header, 0)); // F4F3F2F1
bool config_header = (Ld2410Match(LD2410_config_header, 0)); // FDFCFBFA
if (target_header || config_header) {
uint32_t len = LD2410.buffer[4] +10; // Total packet size
if (len > TM_SERIAL_BUFFER_SIZE) { len = TM_SERIAL_BUFFER_SIZE; }
if (LD2410.byte_counter < len) { continue; } // Need complete packet
AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("LD2: Rcvd %*_H"), len, LD2410.buffer);
if (target_header) { // F4F3F2F1
if (Ld2410Match(LD2410_target_footer, len -4)) { // F8F7F6F5
Ld1410HandleTargetData();
// Break to test Hardware Watchdog due to buffer overrun
LD2410.byte_counter = 0;
break;
uint32_t len = LD2410.buffer[4] +10; // Total packet size
if (size >= len) { // Handle only the first entry (if there are more)
if (target_header) { // F4F3F2F1
if (Ld2410Match(LD2410_target_footer, len -4)) { // F8F7F6F5
Ld1410HandleTargetData();
}
}
}
else if (config_header) { // FDFCFBFA
if (Ld2410Match(LD2410_config_footer, len -4)) { // 04030201
Ld1410HandleConfigData();
else if (config_header) { // FDFCFBFA
if (Ld2410Match(LD2410_config_footer, len -4)) { // 04030201
Ld1410HandleConfigData();
}
}
}
}
LD2410.byte_counter = 0;
}
}
@ -370,7 +345,7 @@ void Ld2410EverySecond(void) {
void Ld2410Detect(void) {
if (PinUsed(GPIO_LD2410_RX) && PinUsed(GPIO_LD2410_TX)) {
LD2410.buffer = (uint8_t*)malloc(TM_SERIAL_BUFFER_SIZE); // Default TM_SERIAL_BUFFER_SIZE (=64) size
LD2410.buffer = (uint8_t*)malloc(LD2410_BUFFER_SIZE); // Default 64
if (!LD2410.buffer) { return; }
LD2410Serial = new TasmotaSerial(Pin(GPIO_LD2410_RX), Pin(GPIO_LD2410_TX), 2);
if (LD2410Serial->begin(256000)) {