refact auth 2

This commit is contained in:
2025-06-08 10:11:09 +01:00
parent 214cf1ee04
commit 25744de46c
2 changed files with 90 additions and 13 deletions

View File

@@ -9,28 +9,61 @@
extern "C" { extern "C" {
#endif #endif
// Tamanho máximo da tag RFID (incluindo '\0')
#define AUTH_TAG_MAX_LEN 20 #define AUTH_TAG_MAX_LEN 20
// Evento enviado ao EVSE Manager após leitura de tag
typedef struct { typedef struct {
char tag[AUTH_TAG_MAX_LEN]; char tag[AUTH_TAG_MAX_LEN]; // Tag lida
bool authorized; bool authorized; // true se tag for válida
} auth_event_t; } auth_event_t;
// Inicializa autenticação (ex: tabela de tags) /**
* @brief Inicializa o sistema de autenticação.
* Carrega configuração e inicia o leitor Wiegand (wg26).
*/
void auth_init(void); void auth_init(void);
// Ativa ou desativa o sistema de autenticação /**
* @brief Define a fila de eventos que receberá auth_event_t.
*/
void auth_set_event_queue(QueueHandle_t queue);
/**
* @brief Ativa ou desativa o módulo de autenticação (RFID).
* Essa configuração é salva em NVS.
*/
void auth_set_enabled(bool value); void auth_set_enabled(bool value);
/**
* @brief Verifica se a autenticação está habilitada.
*/
bool auth_is_enabled(void); bool auth_is_enabled(void);
// Gerenciamento de tags /**
* @brief Adiciona uma nova tag válida.
*/
bool auth_add_tag(const char *tag); bool auth_add_tag(const char *tag);
/**
* @brief Remove uma tag previamente cadastrada.
*/
bool auth_remove_tag(const char *tag); bool auth_remove_tag(const char *tag);
/**
* @brief Verifica se uma tag está cadastrada.
*/
bool auth_tag_exists(const char *tag); bool auth_tag_exists(const char *tag);
/**
* @brief Lista as tags registradas (via ESP_LOG).
*/
void auth_list_tags(void); void auth_list_tags(void);
// Integração com fila de eventos /**
void auth_set_event_queue(QueueHandle_t queue); * @brief Processa uma tag lida (usado pelo leitor Wiegand).
*/
void auth_process_tag(const char *tag);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@@ -8,7 +8,10 @@
#include <freertos/queue.h> #include <freertos/queue.h>
#include <esp_log.h> #include <esp_log.h>
#include <string.h> #include <string.h>
#include "wiegand_reader.h" // necessário para initWiegand() #include "wiegand_reader.h"
#include "nvs_flash.h"
#include "nvs.h"
#define MAX_TAGS 50 #define MAX_TAGS 50
@@ -17,12 +20,43 @@ static bool enabled = true;
static char valid_tags[MAX_TAGS][AUTH_TAG_MAX_LEN]; static char valid_tags[MAX_TAGS][AUTH_TAG_MAX_LEN];
static int tag_count = 0; static int tag_count = 0;
// Fila para enviar eventos de autenticação // Fila de eventos enviada ao EVSE Manager
static QueueHandle_t event_queue = NULL; static QueueHandle_t event_queue = NULL;
void auth_set_event_queue(QueueHandle_t queue) { // ===========================
event_queue = queue; // Persistência em NVS
// ===========================
static void load_auth_config(void) {
nvs_handle_t handle;
esp_err_t err = nvs_open("auth", NVS_READONLY, &handle);
if (err == ESP_OK) {
uint8_t val;
if (nvs_get_u8(handle, "enabled", &val) == ESP_OK) {
enabled = val;
ESP_LOGI(TAG, "Loaded auth enabled = %d", enabled);
} }
nvs_close(handle);
} else {
ESP_LOGW(TAG, "No stored auth config found. Using default.");
}
}
static void save_auth_config(void) {
nvs_handle_t handle;
if (nvs_open("auth", NVS_READWRITE, &handle) == ESP_OK) {
nvs_set_u8(handle, "enabled", enabled);
nvs_commit(handle);
nvs_close(handle);
ESP_LOGI(TAG, "Auth config saved: enabled = %d", enabled);
} else {
ESP_LOGE(TAG, "Failed to save auth config.");
}
}
// ===========================
// Internos
// ===========================
static bool is_tag_valid(const char *tag) { static bool is_tag_valid(const char *tag) {
for (int i = 0; i < tag_count; i++) { for (int i = 0; i < tag_count; i++) {
@@ -33,8 +67,17 @@ static bool is_tag_valid(const char *tag) {
return false; return false;
} }
// ===========================
// API pública
// ===========================
void auth_set_event_queue(QueueHandle_t queue) {
event_queue = queue;
}
void auth_set_enabled(bool value) { void auth_set_enabled(bool value) {
enabled = value; enabled = value;
save_auth_config();
ESP_LOGI(TAG, "Auth %s", enabled ? "ENABLED" : "DISABLED"); ESP_LOGI(TAG, "Auth %s", enabled ? "ENABLED" : "DISABLED");
} }
@@ -80,10 +123,11 @@ void auth_list_tags(void) {
} }
void auth_init(void) { void auth_init(void) {
auth_set_enabled(true); // Default: enabled load_auth_config(); // carrega estado de ativação
initWiegand(); // Inicializa automaticamente o leitor Wiegand 26 initWiegand(); // inicia leitor RFID
} }
// Processa uma tag lida (chamada pelo leitor)
void auth_process_tag(const char *tag) { void auth_process_tag(const char *tag) {
if (!tag || !auth_is_enabled()) { if (!tag || !auth_is_enabled()) {
ESP_LOGW(TAG, "Auth disabled or NULL tag received."); ESP_LOGW(TAG, "Auth disabled or NULL tag received.");