mirror of
https://github.com/rstrouse/ESPSomfy-RTS.git
synced 2026-10-31 22:02:17 +01:00
fix: skip the room records too when a restore leaves the shades out
A restore without "shades" skipped the shade and group records but not the room records, which come first, so it read the repeaters and the settings from room data. The skip is now shadeModelBytes(), in a ConfigHeader.h the native tests can reach, which counts rooms, shades and groups. Found during LOOP_QUEUE_PLAN.md's review. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
bee6a6d60b
commit
50aa491437
4 changed files with 91 additions and 20 deletions
33
src/ConfigHeader.h
Normal file
33
src/ConfigHeader.h
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
#ifndef CONFIG_HEADER_H
|
||||
#define CONFIG_HEADER_H
|
||||
#include <stdint.h>
|
||||
|
||||
// The header of a shades.cfg file: its version and how many records of each
|
||||
// kind follow, and their sizes. Kept free of the file system so it can be
|
||||
// unit tested on the PC (pio test -e native).
|
||||
struct config_header_t {
|
||||
uint8_t version = 1;
|
||||
uint8_t repeaterRecords = 0;
|
||||
uint8_t repeaterRecordSize = 0;
|
||||
uint8_t roomRecords = 0;
|
||||
uint16_t roomRecordSize = 0;
|
||||
uint16_t shadeRecordSize = 0;
|
||||
uint8_t shadeRecords = 0;
|
||||
uint16_t groupRecordSize = 0;
|
||||
uint8_t groupRecords = 0;
|
||||
uint16_t settingsRecordSize = 0;
|
||||
uint16_t netRecordSize = 0;
|
||||
uint16_t transRecordSize = 0;
|
||||
char serverId[10] = ""; // This must match the server id size in the ConfigSettings.
|
||||
int8_t length = 0;
|
||||
};
|
||||
|
||||
// The bytes of the shade model's records, which follow the header in this
|
||||
// order: rooms, shades, groups. A restore that leaves the shades out skips
|
||||
// this many bytes.
|
||||
inline uint32_t shadeModelBytes(const config_header_t &header) {
|
||||
return static_cast<uint32_t>(header.roomRecords) * header.roomRecordSize
|
||||
+ static_cast<uint32_t>(header.shadeRecords) * header.shadeRecordSize
|
||||
+ static_cast<uint32_t>(header.groupRecords) * header.groupRecordSize;
|
||||
}
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue