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.
77 lines
2.7 KiB
C
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);
|