CotroCar/main/nvsSave.c
2025-01-03 18:11:14 +08:00

105 lines
3.1 KiB
C

#include <stdio.h>
#include <string.h>
#include "nvs_flash.h"
#include "nvs.h"
#include "esp_system.h"
#include "esp_log.h"
#define TAG "NVS_MAC"
extern uint8_t dst_mac[6];
extern bool is_broadcast;
extern void PeerAdd(uint8_t *dstMac);
bool unicast = false;
void save_mac_to_nvs(const char *namespace, const char *key, const uint8_t *mac_addr) {
nvs_handle_t nvs_handle;
esp_err_t err;
// 打开 NVS 命名空间
err = nvs_open(namespace, NVS_READWRITE, &nvs_handle);
if (err != ESP_OK) {
ESP_LOGE(TAG, "Failed to open NVS: %s", esp_err_to_name(err));
return;
}
// 存储 MAC 地址
err = nvs_set_blob(nvs_handle, key, mac_addr, 6); // MAC 地址是 6 字节
if (err != ESP_OK) {
ESP_LOGE(TAG, "Failed to set MAC address: %s", esp_err_to_name(err));
} else {
ESP_LOGI(TAG, "MAC address saved successfully.");
nvs_commit(nvs_handle); // 提交更改
}
nvs_close(nvs_handle); // 关闭 NVS
}
void read_mac_from_nvs(const char *namespace, const char *key) {
nvs_handle_t nvs_handle;
esp_err_t err;
uint8_t mac_addr[6];
size_t mac_len = sizeof(mac_addr);
// 打开 NVS 命名空间
err = nvs_open(namespace, NVS_READWRITE, &nvs_handle);
if (err != ESP_OK) {
ESP_LOGE(TAG, "Failed to open NVS: %s", esp_err_to_name(err));
return;
}
// 读取 MAC 地址
err = nvs_get_blob(nvs_handle, key, mac_addr, &mac_len);
if (err == ESP_OK) {
is_broadcast=false;
memcpy(dst_mac,mac_addr,6);
ESP_LOGI(TAG, "MAC address read successfully: %02X:%02X:%02X:%02X:%02X:%02X",
mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
ESP_LOGI(TAG, "MAC address read successfully: %02X:%02X:%02X:%02X:%02X:%02X",
dst_mac[0], dst_mac[1], dst_mac[2], dst_mac[3], dst_mac[4], dst_mac[5]);
PeerAdd(dst_mac);
unicast = true;
} else if (err == ESP_ERR_NVS_NOT_FOUND) {
ESP_LOGW(TAG, "MAC address not found in NVS.");
} else {
ESP_LOGE(TAG, "Failed to get MAC address: %s", esp_err_to_name(err));
}
nvs_close(nvs_handle); // 关闭 NVS
}
void delete_mac_from_nvs(const char *namespace, const char *key) {
nvs_handle_t nvs_handle;
esp_err_t err;
// 打开 NVS 命名空间
err = nvs_open(namespace, NVS_READWRITE, &nvs_handle);
if (err != ESP_OK) {
ESP_LOGE(TAG, "Failed to open NVS: %s", esp_err_to_name(err));
return;
}
// 删除指定键
err = nvs_erase_key(nvs_handle, key);
if (err == ESP_OK) {
ESP_LOGI(TAG, "Key '%s' deleted successfully.", key);
unicast = false;
is_broadcast=true;
nvs_commit(nvs_handle); // 提交更改
} else if (err == ESP_ERR_NVS_NOT_FOUND) {
ESP_LOGW(TAG, "Key '%s' not found in NVS.", key);
} else {
ESP_LOGE(TAG, "Failed to delete key '%s': %s", key, esp_err_to_name(err));
}
nvs_close(nvs_handle); // 关闭 NVS
}
// // 保存 MAC 地址到 NVS
// save_mac_to_nvs("storage", "mac_address", mac_addr);
// // 从 NVS 读取 MAC 地址
// read_mac_from_nvs("storage", "mac_address");