105 lines
3.1 KiB
C
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");
|