summaryrefslogtreecommitdiff
path: root/supervisor
diff options
context:
space:
mode:
authorMark Olsson <post@markolsson.se>2020-05-18 14:04:55 +0200
committerMark Olsson <post@markolsson.se>2020-05-19 02:02:52 +0200
commit007c92ee6ab8da342dacb8967ef999b6d83596ec (patch)
tree564c9542b91c80f9986d8e7bc05e41f561f0da3c /supervisor
parent6a5ab57c18b5a4ba1c80a951ec0ee655677f7d83 (diff)
Enable showing the console on a debug uart
Diffstat (limited to 'supervisor')
-rw-r--r--supervisor/serial.h1
-rw-r--r--supervisor/shared/serial.c52
-rw-r--r--supervisor/stub/serial.c4
3 files changed, 57 insertions, 0 deletions
diff --git a/supervisor/serial.h b/supervisor/serial.h
index 84b3062a3..ef88ad346 100644
--- a/supervisor/serial.h
+++ b/supervisor/serial.h
@@ -38,6 +38,7 @@
FIL* boot_output_file;
#endif
+void serial_early_init(void);
void serial_init(void);
void serial_write(const char* text);
// Only writes up to given length. Does not check for null termination at all.
diff --git a/supervisor/shared/serial.c b/supervisor/shared/serial.c
index a61899576..513022667 100644
--- a/supervisor/shared/serial.c
+++ b/supervisor/shared/serial.c
@@ -32,26 +32,73 @@
#include "shared-bindings/terminalio/Terminal.h"
#include "supervisor/serial.h"
#include "supervisor/usb.h"
+#include "shared-bindings/microcontroller/Pin.h"
#include "tusb.h"
+/*
+ * Note: DEBUG_UART currently only works on STM32,
+ * enabling on another platform will cause a crash.
+ */
+
+#if defined(DEBUG_UART_TX) && defined(DEBUG_UART_RX)
+#include "shared-bindings/busio/UART.h"
+busio_uart_obj_t debug_uart;
+byte buf_array[64];
+#endif
+
+void serial_early_init(void) {
+#if defined(DEBUG_UART_TX) && defined(DEBUG_UART_RX)
+ debug_uart.base.type = &busio_uart_type;
+
+ const mcu_pin_obj_t* rx = MP_OBJ_TO_PTR(DEBUG_UART_RX);
+ const mcu_pin_obj_t* tx = MP_OBJ_TO_PTR(DEBUG_UART_TX);
+
+ common_hal_busio_uart_construct(&debug_uart, tx, rx, NULL, NULL, NULL,
+ false, 115200, 8, PARITY_NONE, 1, 1.0f, 64,
+ buf_array, true);
+ common_hal_busio_uart_never_reset(&debug_uart);
+#endif
+}
+
void serial_init(void) {
usb_init();
}
bool serial_connected(void) {
+#if defined(DEBUG_UART_TX) && defined(DEBUG_UART_RX)
+ return true;
+#else
return tud_cdc_connected();
+#endif
}
char serial_read(void) {
+#if defined(DEBUG_UART_TX) && defined(DEBUG_UART_RX)
+ if (tud_cdc_connected() && tud_cdc_available() > 0) {
+ return (char) tud_cdc_read_char();
+ }
+ int uart_errcode;
+ char text;
+ common_hal_busio_uart_read(&debug_uart, (uint8_t*) &text, 1, &uart_errcode);
+ return text;
+#else
return (char) tud_cdc_read_char();
+#endif
}
bool serial_bytes_available(void) {
+#if defined(DEBUG_UART_TX) && defined(DEBUG_UART_RX)
+ return common_hal_busio_uart_rx_characters_available(&debug_uart) || (tud_cdc_available() > 0);
+#else
return tud_cdc_available() > 0;
+#endif
}
void serial_write_substring(const char* text, uint32_t length) {
+ if (length == 0) {
+ return;
+ }
#if CIRCUITPY_DISPLAYIO
int errcode;
common_hal_terminalio_terminal_write(&supervisor_terminal, (const uint8_t*) text, length, &errcode);
@@ -62,6 +109,11 @@ void serial_write_substring(const char* text, uint32_t length) {
count += tud_cdc_write(text + count, length - count);
usb_background();
}
+
+#if defined(DEBUG_UART_TX) && defined(DEBUG_UART_RX)
+ int uart_errcode;
+ common_hal_busio_uart_write(&debug_uart, (const uint8_t*) text, length, &uart_errcode);
+#endif
}
void serial_write(const char* text) {
diff --git a/supervisor/stub/serial.c b/supervisor/stub/serial.c
index 956551914..34b433e53 100644
--- a/supervisor/stub/serial.c
+++ b/supervisor/stub/serial.c
@@ -26,6 +26,10 @@
#include "supervisor/serial.h"
+void serial_early_init(void) {
+
+}
+
void serial_init(void) {
}