/* * Developed by TComLab * Version: v0.1 * Date: 2025-12-15 */ #pragma once #include #include #include "freertos/FreeRTOS.h" #include "esp_err.h" typedef struct { uint32_t missed_heartbeats; uint32_t restart_count; } uart_mux_channel_stats_t; // Ініціалізує апаратний мультиплексор UART: GPIO, UART драйвер та watchdog. esp_err_t uart_mux_init(void); // Повертає true, якщо драйвер готовий приймати виклики. bool uart_mux_ready(void); // Кількість доступних каналів мультиплексора. size_t uart_mux_channel_count(void); // Відправляє буфер даних на вказаний канал з тайм-аутом очікування мьютекса. esp_err_t uart_mux_write(size_t channel, const uint8_t *data, size_t length, TickType_t timeout); // Зчитує дані з каналу, повертаючи кількість байтів через out_length. esp_err_t uart_mux_read(size_t channel, uint8_t *buffer, size_t buffer_size, size_t *out_length, TickType_t timeout); // Повідомляє драйверу про дані, зчитані поза watchdog-ом (для оновлення станів). void uart_mux_process_rx(size_t channel, const uint8_t *data, size_t length); // Повідомляє про пропущений heartbeat (використовується основним циклом). void uart_mux_report_miss(size_t channel); // Повертає статистику по каналу (кількість пропущених відповідей та рестартів). void uart_mux_get_channel_stats(size_t channel, uart_mux_channel_stats_t *out_stats);