aboutsummaryrefslogtreecommitdiff
path: root/stm-uart.h
diff options
context:
space:
mode:
authorPaul Selkirk <paul@psgd.org>2017-10-17 00:27:11 -0400
committerPaul Selkirk <paul@psgd.org>2017-10-17 00:27:11 -0400
commit03b14b4cd4a214a92e3968ff33a13c2086896864 (patch)
tree4b391205211d55a0cba4750682784f5d1799fb44 /stm-uart.h
parent5af4a915edf3e77705fa2625081200b61f8dda26 (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.h57
1 files changed, 32 insertions, 25 deletions
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)