diff options
author | Paul Selkirk <paul@psgd.org> | 2017-10-17 00:27:11 -0400 |
---|---|---|
committer | Paul Selkirk <paul@psgd.org> | 2017-10-17 00:27:11 -0400 |
commit | 03b14b4cd4a214a92e3968ff33a13c2086896864 (patch) | |
tree | 4b391205211d55a0cba4750682784f5d1799fb44 /stm-uart.h | |
parent | 5af4a915edf3e77705fa2625081200b61f8dda26 (diff) |
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.
Diffstat (limited to 'stm-uart.h')
-rw-r--r-- | stm-uart.h | 57 |
1 files changed, 32 insertions, 25 deletions
@@ -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) |