#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"); }