Files

107 lines
2.6 KiB
C

#ifndef CONFIG_H
#define CONFIG_H
#include <stdbool.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
#define CONFIG_MAGIC 0x54435055u
#define CONFIG_VERSION 0x0003u
#define CONFIG_UART_COUNT 2u
#define CONFIG_LINK_COUNT 4u
#define CONFIG_LINK_S1 0u
#define CONFIG_LINK_S2 1u
#define CONFIG_LINK_C1 2u
#define CONFIG_LINK_C2 3u
#define ENDPOINT_C1 0x01u
#define ENDPOINT_C2 0x02u
#define ENDPOINT_UART2 0x04u
#define ENDPOINT_UART3 0x08u
#define ENDPOINT_S1 0x10u
#define ENDPOINT_S2 0x20u
#define LINK_UART_U0 0u
#define LINK_UART_U1 1u
typedef enum {
MUX_MODE_RAW = 0,
MUX_MODE_FRAME = 1
} mux_mode_t;
typedef struct {
uint8_t ip[4];
uint8_t mask[4];
uint8_t gw[4];
uint8_t mac[6];
uint8_t reserved[2];
} net_config_t;
typedef struct {
uint8_t enabled;
uint8_t uart;
uint16_t local_port;
uint8_t remote_ip[4];
uint16_t remote_port;
uint16_t reserved;
} link_config_t;
typedef struct {
uint32_t magic;
uint16_t version;
uint8_t mux_mode;
uint8_t reserved0;
net_config_t net;
link_config_t links[CONFIG_LINK_COUNT];
uint32_t uart_baudrate[CONFIG_UART_COUNT];
uint32_t reconnect_interval_ms;
uint32_t crc;
} device_config_t;
#define DEFAULT_NET_IP {192, 168, 31, 100}
#define DEFAULT_NET_MASK {255, 255, 255, 0}
#define DEFAULT_NET_GW {192, 168, 31, 1}
#define DEFAULT_NET_MAC {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
#define DEFAULT_UART_BAUDRATE 115200u
#define DIAG_CH390_RAW_POLL 0
typedef enum {
AT_OK = 0,
AT_ERROR,
AT_INVALID_PARAM,
AT_UNKNOWN_CMD,
AT_SAVE_FAILED,
AT_NEED_REBOOT
} at_result_t;
int config_init(void);
int config_load(void);
int config_save(void);
void config_set_defaults(void);
const device_config_t *config_get(void);
device_config_t *config_get_mutable(void);
uint32_t config_get_uart_baudrate(uint8_t uart_index);
at_result_t config_process_at_cmd(const char *cmd, char *response, uint16_t max_len);
void ConfigTask(void *argument);
void config_uart_idle_handler(void);
void config_start_reception(void);
void config_ip_to_str(const uint8_t *ip, char *str);
int config_str_to_ip(const char *str, uint8_t *ip);
void config_mac_to_str(const uint8_t *mac, char *str);
int config_str_to_mac(const char *str, uint8_t *mac);
uint8_t config_link_index_to_endpoint(uint8_t index);
uint8_t config_uart_index_to_endpoint(uint8_t uart_index);
bool config_endpoint_is_single(uint8_t endpoint);
#ifdef __cplusplus
}
#endif
#endif