/**
 * @file flash_store.h
 * @brief Flash IAP 读写接口：查找表持久化存储
 *
 * 存储地址：0x08007E00（32KB Flash 最后 512 字节）
 * 格式：LutTable_t 结构体（含 CRC32 尾部校验）
 */

#ifndef FLASH_STORE_H
#define FLASH_STORE_H

#include <stdint.h>
#include "lut.h"

/**
 * @brief CRC32 计算（标准以太网多项式 0xEDB88320）
 * @param data  数据指针
 * @param len   数据长度（字节）
 * @return CRC32 值
 */
uint32_t CRC32_Calc(const uint8_t *data, uint32_t len);

/**
 * @brief 从 Flash 读取查找表并校验 CRC
 * @param lut  目标查找表指针
 * @return 1 = 成功，0 = CRC 校验失败
 */
int FlashStore_Load(LutTable_t *lut);

/**
 * @brief 将查找表写入 Flash（先擦后写，计算并填充 CRC）
 * @param lut  源查找表指针
 * @return 1 = 成功，0 = 写入失败
 */
int FlashStore_Save(const LutTable_t *lut);

/**
 * @brief 将单层数据（140字节）更新到全局查找表并保存 Flash
 * @param layer_idx  层索引（0=100%组，1=70%组）
 * @param data       140字节数据（20点 × 7字节）
 * @return 1 = 成功，0 = 失败
 */
int FlashStore_UpdateLayer(uint8_t layer_idx, const uint8_t *data);

#endif /* FLASH_STORE_H */
