为了让智能家居系统在断电或重启后能恢复到之前的状态,项目设计了一个数据持久化模块,源码位于 obj/data/state_store.c

1. 功能与职责

  • 该模块的核心职责是将应用的关键状态(如灯的开关/亮度、安防模式、警报状态)以文件的形式保存在本地文件系统上。

2. 实现机制

  • 文件存储: 每一种需要持久化的状态都对应一个独立的文本文件,如 lighting_state.txt, security_state.txt。所有文件都存放在程序运行目录下的 data/ 文件夹中。
  • 自动目录创建: 在进行任何文件操作前,ensure_data_dir() 函数会检查 data/ 目录是否存在,如果不存在则会自动创建,增强了程序的健壮性。
  • 简洁的API: 模块提供了成对的 ss_xxx_load()ss_xxx_save() 函数接口。
    • save 函数负责将内存中的数据结构(如灯光状态数组)格式化为文本并写入文件。
    • load 函数在程序启动时被调用,负责读取文件内容,解析后填充到内存的数据结构中。
  • 默认值处理: 如果在 load 时发现状态文件不存在(通常是第一次运行时),函数不会报错,而是会返回一个预设的默认值,并立即调用 save 函数将这个默认值写入文件。这简化了首次运行的初始化流程。

3. 数据格式

  • 数据以易于读写的纯文本格式存储。例如,lighting_state.txt 的每一行代表一个灯,内容是 [是否开启] [亮度] [色温],由空格分隔的三个整数。这种格式不仅实现简单,也方便开发者直接打开文件查看和调试。