#ifndef UART_DRIVER_H #define UART_DRIVER_H #include #include #include /** * @brief UART configuration structure */ typedef struct { int tx_pin; int rx_pin; int baud_rate; int data_bits; int parity; // 0 = none, 1 = odd, 2 = even int stop_bits; } uart_config_t; /** * @brief UART driver handle */ typedef struct { int uart_num; bool initialized; } uart_driver_t; /** * @brief Initialize UART driver * * @param driver Pointer to UART driver structure * @param config UART configuration * @return true if successful, false otherwise */ bool uart_driver_init(uart_driver_t *driver, const uart_config_t *config); /** * @brief Deinitialize UART driver * * @param driver Pointer to UART driver structure */ void uart_driver_deinit(uart_driver_t *driver); /** * @brief Send data via UART * * @param driver Pointer to UART driver structure * @param data Pointer to data to send * @param length Length of data to send * @param timeout_ms Timeout in milliseconds * @return true if successful, false otherwise */ bool uart_driver_send(uart_driver_t *driver, const uint8_t *data, size_t length, uint32_t timeout_ms); /** * @brief Receive data via UART * * @param driver Pointer to UART driver structure * @param data Buffer to store received data * @param max_length Maximum length of data to receive * @param timeout_ms Timeout in milliseconds * @return Number of bytes received, or -1 on error */ int uart_driver_receive(uart_driver_t *driver, uint8_t *data, size_t max_length, uint32_t timeout_ms); /** * @brief Check if UART driver is initialized * * @param driver Pointer to UART driver structure * @return true if initialized, false otherwise */ bool uart_driver_is_initialized(const uart_driver_t *driver); #endif // UART_DRIVER_H