Files
ESP32_Serial_Swiss_Army_Knife/src/serial_config.h
T
Commander1024 535c27350d Add Phase 1 UART service foundation
Add versioned NVS-backed configuration, buffered UART1 I/O, modem
monitoring, counters, and serial console controls. Coordinate UART1
ownership with Phase 0 diagnostics and document loopback verification.
2026-08-22 23:23:13 +02:00

77 lines
2.7 KiB
C

#pragma once
#include <stdbool.h>
#include <stdint.h>
#include "driver/uart.h"
#include "esp_err.h"
#define SERIAL_CONFIG_VERSION 1U
#define SERIAL_CONFIG_MIN_BAUD_RATE 110U
#define SERIAL_CONFIG_MAX_BAUD_RATE 1000000U
#define SERIAL_CONFIG_DEFAULT_RTS_THRESHOLD 96U
#define SERIAL_CONFIG_MAX_RTS_THRESHOLD 127U
#define SERIAL_CONFIG_NVS_NAMESPACE "serial"
#define SERIAL_CONFIG_NVS_BLOB_KEY "config"
typedef enum {
SERIAL_CONFIG_DATA_BITS_7,
SERIAL_CONFIG_DATA_BITS_8,
} serial_config_data_bits_t;
typedef enum {
SERIAL_CONFIG_PARITY_NONE,
SERIAL_CONFIG_PARITY_EVEN,
SERIAL_CONFIG_PARITY_ODD,
} serial_config_parity_t;
typedef enum {
SERIAL_CONFIG_STOP_BITS_1,
SERIAL_CONFIG_STOP_BITS_2,
} serial_config_stop_bits_t;
typedef enum {
SERIAL_CONFIG_FLOW_CONTROL_NONE,
SERIAL_CONFIG_FLOW_CONTROL_RTS_CTS,
} serial_config_flow_control_t;
typedef enum {
SERIAL_CONFIG_DTR_INACTIVE,
SERIAL_CONFIG_DTR_ACTIVE,
SERIAL_CONFIG_DTR_ON_CONNECT,
} serial_config_dtr_behavior_t;
/* Version and exact blob size make incompatible stored layouts fail safely. */
typedef struct {
uint32_t version;
uint32_t baud_rate;
serial_config_data_bits_t data_bits;
serial_config_parity_t parity;
serial_config_stop_bits_t stop_bits;
serial_config_flow_control_t flow_control;
serial_config_dtr_behavior_t dtr_behavior;
uint32_t rts_threshold;
} serial_config_t;
void serial_config_defaults(serial_config_t *config);
esp_err_t serial_config_validate(const serial_config_t *config);
esp_err_t serial_config_to_uart_config(const serial_config_t *config, uart_config_t *uart_config);
bool serial_config_parse_data_bits(const char *text, serial_config_data_bits_t *value);
const char *serial_config_data_bits_to_string(serial_config_data_bits_t value);
bool serial_config_parse_parity(const char *text, serial_config_parity_t *value);
const char *serial_config_parity_to_string(serial_config_parity_t value);
bool serial_config_parse_stop_bits(const char *text, serial_config_stop_bits_t *value);
const char *serial_config_stop_bits_to_string(serial_config_stop_bits_t value);
bool serial_config_parse_flow_control(const char *text, serial_config_flow_control_t *value);
const char *serial_config_flow_control_to_string(serial_config_flow_control_t value);
bool serial_config_parse_dtr_behavior(const char *text, serial_config_dtr_behavior_t *value);
const char *serial_config_dtr_behavior_to_string(serial_config_dtr_behavior_t value);
/* Storage operations initialize the default NVS partition before use. */
esp_err_t serial_config_storage_init(void);
esp_err_t serial_config_load(serial_config_t *config, bool *used_stored_config);
esp_err_t serial_config_save(const serial_config_t *config);
esp_err_t serial_config_reset_storage(void);