From 03b14b4cd4a214a92e3968ff33a13c2086896864 Mon Sep 17 00:00:00 2001 From: Paul Selkirk Date: Tue, 17 Oct 2017 00:27:11 -0400 Subject: Overhaul UART API MGMT is the default UART, and no one should have to explicitly refer to the UART unless they need USER (hsm.c:hal_serial_send_char). The default UART is now exposed in the header file, so that the default-using functions can be macros, which saves a few bytes in code space, and a few microseconds in function call overhead. --- stm-uart.h | 57 ++++++++++++++++++++++++++++++++------------------------- 1 file changed, 32 insertions(+), 25 deletions(-) (limited to 'stm-uart.h') diff --git a/stm-uart.h b/stm-uart.h index 4d008c7..8ea13d8 100644 --- a/stm-uart.h +++ b/stm-uart.h @@ -37,41 +37,48 @@ #include "stm32f4xx_hal.h" -#define USART_MGMT_BAUD_RATE 921600 -#define USART_USER_BAUD_RATE 921600 - -typedef enum { - STM_UART_USER, - STM_UART_MGMT -} stm_uart_port_t; +#define USART_MGMT_BAUD_RATE 921600 +#define USART_USER_BAUD_RATE 921600 extern UART_HandleTypeDef huart_mgmt; extern UART_HandleTypeDef huart_user; +#define STM_UART_USER &huart_user +#define STM_UART_MGMT &huart_mgmt + +/* These are only exposed because they're used in the DMA IRQ handler code. + * Pretend you never saw them. + */ extern DMA_HandleTypeDef hdma_usart_mgmt_rx; extern DMA_HandleTypeDef hdma_usart_user_rx; extern void uart_init(void); -extern void uart_set_default(stm_uart_port_t port); - -extern HAL_StatusTypeDef uart_send_char(uint8_t ch); -extern HAL_StatusTypeDef uart_recv_char(uint8_t *cp); - -extern HAL_StatusTypeDef uart_send_string(char *s); -extern HAL_StatusTypeDef uart_send_number(uint32_t num, uint8_t digits, uint8_t radix); - -extern HAL_StatusTypeDef uart_send_char2(stm_uart_port_t port, uint8_t ch); -extern HAL_StatusTypeDef uart_recv_char2(stm_uart_port_t port, uint8_t *cp, uint32_t timeout); - -extern HAL_StatusTypeDef uart_send_string2(stm_uart_port_t port, const char *s); -extern HAL_StatusTypeDef uart_send_number2(stm_uart_port_t port, uint32_t num, uint8_t digits, uint8_t radix); - -extern HAL_StatusTypeDef uart_send_bytes(stm_uart_port_t port, uint8_t *buf, size_t len); -extern HAL_StatusTypeDef uart_receive_bytes(stm_uart_port_t port, uint8_t *buf, size_t len, uint32_t timeout); +/* Default UART is MGMT; don't change it unless you need to. + */ +extern UART_HandleTypeDef* default_uart; +extern void uart_set_default(UART_HandleTypeDef *uart); -extern HAL_StatusTypeDef uart_send_hexdump(stm_uart_port_t port, const uint8_t *buf, - const uint8_t start_offset, const uint8_t end_offset); +/* Send and receive to/from an explicit UART. For the most part, you + * shouldn't need to call these directly, but can use the default_uart + * macros below. + */ +extern HAL_StatusTypeDef uart_send_char2(UART_HandleTypeDef *uart, uint8_t ch); +extern HAL_StatusTypeDef uart_recv_char2(UART_HandleTypeDef *uart, uint8_t *cp, uint32_t timeout); +extern HAL_StatusTypeDef uart_send_string2(UART_HandleTypeDef *uart, const char *s); +extern HAL_StatusTypeDef uart_send_number2(UART_HandleTypeDef *uart, uint32_t num, uint8_t digits, uint8_t radix); +extern HAL_StatusTypeDef uart_send_bytes2(UART_HandleTypeDef *uart, uint8_t *buf, size_t len); +extern HAL_StatusTypeDef uart_receive_bytes2(UART_HandleTypeDef *uart, uint8_t *buf, size_t len, uint32_t timeout); +extern HAL_StatusTypeDef uart_send_hexdump2(UART_HandleTypeDef *uart, const uint8_t *buf, + const uint8_t start_offset, const uint8_t end_offset); + +#define uart_send_char(c) uart_send_char2(default_uart, c) +#define uart_recv_char(cp, t) uart_recv_char2(default_uart, cp, t) +#define uart_send_string(s) uart_send_string2(default_uart, s) +#define uart_send_bytes(b, l) uart_send_bytes2(default_uart, b, l) +#define uart_receive_bytes(b, l, t) uart_receive_bytes2(default_uart, b, l, t) +#define uart_send_number(n, d, r) uart_send_number2(default_uart, n, d, r) +#define uart_send_hexdump(b, s, e) uart_send_hexdump2(default_uart, b, s, e) #define uart_send_binary(num, bits) uart_send_number(num, bits, 2) #define uart_send_integer(num, digits) uart_send_number(num, digits, 10) -- cgit v1.2.3