#pragma once #include #include #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);