Files
99_7018_lmx/apps/earphone/xtell_remote_control/nvs/nvs.c

125 lines
3.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "system/includes.h"
#include "system/syscfg_id.h"
#include "nvs.h"
// 2. 定义唯一的配置项ID
#define CFG_FACTORY_INFO_ID 10 // 旧的、通用的出厂信息ID (已废弃)
#define CFG_RC_MAC_ADDR_ID 11 // 新的、专门用于存储遥控器配对MAC的ID
/**
* @brief 将主板MAC地址写入Flash
*/
int nvs_write_main_board_mac(const u8 *mac_addr)
{
if (!mac_addr) {
return -1;
}
rc_nvs_data_t nvs_data;
memcpy(nvs_data.main_board_mac, mac_addr, MAIN_BOARD_MAC_ADDR_LENGTH);
printf("--> Writing main board MAC to flash...\n");
int ret = syscfg_write(CFG_RC_MAC_ADDR_ID, &nvs_data, sizeof(rc_nvs_data_t));
if (ret != sizeof(rc_nvs_data_t)) {
printf("!!! syscfg_write main board MAC failed, ret = %d\n", ret);
} else {
printf("--> syscfg_write main board MAC success.\n");
}
return ret;
}
/**
* @brief 从Flash读取主板MAC地址
*/
int nvs_read_main_board_mac(u8 *mac_addr)
{
if (!mac_addr) {
return -1;
}
rc_nvs_data_t nvs_data;
printf("--> Reading main board MAC from flash...\n");
int ret = syscfg_read(CFG_RC_MAC_ADDR_ID, &nvs_data, sizeof(rc_nvs_data_t));
if (ret != sizeof(rc_nvs_data_t)) {
printf("!!! syscfg_read main board MAC failed, ret = %d. Maybe not set yet.\n", ret);
memset(mac_addr, 0, MAIN_BOARD_MAC_ADDR_LENGTH);
} else {
printf("--> syscfg_read main board MAC success.\n");
memcpy(mac_addr, nvs_data.main_board_mac, MAIN_BOARD_MAC_ADDR_LENGTH);
}
return ret;
}
// =================================================================================
// 以下为旧的通用出厂信息API已废弃
// =================================================================================
int nvs_write_factory_info(const factory_info_t *info)
{
printf("WARNING: nvs_write_factory_info is deprecated.\n");
return -1;
}
int nvs_read_factory_info(factory_info_t *info)
{
printf("WARNING: nvs_read_factory_info is deprecated.\n");
return -1;
}
/**
* @brief 清空Flash中的出厂信息
*
* @return 0: 成功, <0: 失败
*/
int nvs_clear_factory_info(void)
{
printf("--> Clearing factory info from flash...\n");
// 写入长度为0的数据即可实现删除效果
int ret = syscfg_write(CFG_FACTORY_INFO_ID, NULL, 0);
if (ret != 0) {
printf("!!! syscfg_write clear factory info failed, ret = %d\n", ret);
} else {
printf("--> syscfg_write clear factory info success.\n");
}
return ret;
}
// 可以在这里添加一个测试函数
void nvs_test_factory_info(void)
{
factory_info_t write_info = {
.product_id = "RC_V2",
.serial_number = "SN202511260002",
.hw_version = 0x0102, // v1.1
.cal_data = 1234,
.manufacture_date = 1764080400, // 2025-11-26
};
factory_info_t read_info;
printf("\n\n--- NVS WRITE TEST ---\n");
nvs_write_factory_info(&write_info);
os_time_dly(10);
printf("\n--- NVS READ TEST ---\n");
nvs_read_factory_info(&read_info);
// ASSERT(memcmp(&write_info, &read_info, sizeof(factory_info_t)) == 0, "NVS Read/Write Check Failed!");
// printf("\n--- NVS CLEAR TEST ---\n");
// nvs_clear_factory_info();
os_time_dly(10);
printf("\n--- NVS READ AFTER CLEAR TEST ---\n");
int ret = nvs_read_factory_info(&read_info);
if(ret < 0){
printf("--- nvs read error ---\n");
}
printf("\n\n--- NVS TEST COMPLETE ---\n\n");
}