From edc12c28571d8bd70b929d4ce793b0537bd4eb99 Mon Sep 17 00:00:00 2001 From: Iampete1 Date: Fri, 15 Mar 2024 14:20:43 +0000 Subject: [PATCH] AP_HAL_ChibiOS: use new UART stats tracking helper moving history up to util --- libraries/AP_HAL_ChibiOS/UARTDriver.cpp | 17 ++++++++--------- libraries/AP_HAL_ChibiOS/UARTDriver.h | 3 +-- libraries/AP_HAL_ChibiOS/Util.cpp | 9 +++++++-- libraries/AP_HAL_ChibiOS/Util.h | 12 +++++++++++- 4 files changed, 27 insertions(+), 14 deletions(-) diff --git a/libraries/AP_HAL_ChibiOS/UARTDriver.cpp b/libraries/AP_HAL_ChibiOS/UARTDriver.cpp index a04537fdbd..069f64085f 100644 --- a/libraries/AP_HAL_ChibiOS/UARTDriver.cpp +++ b/libraries/AP_HAL_ChibiOS/UARTDriver.cpp @@ -1696,9 +1696,11 @@ uint16_t UARTDriver::get_options(void) const #if HAL_UART_STATS_ENABLED // request information on uart I/O for @SYS/uarts.txt for this uart -void UARTDriver::uart_info(ExpandingString &str) +void UARTDriver::uart_info(ExpandingString &str, StatsTracker &stats, const uint32_t dt_ms) { - uint32_t now_ms = AP_HAL::millis(); + const uint32_t tx_bytes = stats.tx.update(_tx_stats_bytes); + const uint32_t rx_bytes = stats.rx.update(_rx_stats_bytes); + if (sdef.is_usb) { str.printf("OTG%u ", unsigned(sdef.instance)); } else { @@ -1706,14 +1708,11 @@ void UARTDriver::uart_info(ExpandingString &str) } str.printf("TX%c=%8u RX%c=%8u TXBD=%6u RXBD=%6u\n", tx_dma_enabled ? '*' : ' ', - unsigned(_tx_stats_bytes), + unsigned(tx_bytes), rx_dma_enabled ? '*' : ' ', - unsigned(_rx_stats_bytes), - unsigned(_tx_stats_bytes * 10000 / (now_ms - _last_stats_ms)), - unsigned(_rx_stats_bytes * 10000 / (now_ms - _last_stats_ms))); - _tx_stats_bytes = 0; - _rx_stats_bytes = 0; - _last_stats_ms = now_ms; + unsigned(rx_bytes), + unsigned((tx_bytes * 10000) / dt_ms), + unsigned((rx_bytes * 10000) / dt_ms)); } #endif diff --git a/libraries/AP_HAL_ChibiOS/UARTDriver.h b/libraries/AP_HAL_ChibiOS/UARTDriver.h index 1a045fa9e7..3c49965a96 100644 --- a/libraries/AP_HAL_ChibiOS/UARTDriver.h +++ b/libraries/AP_HAL_ChibiOS/UARTDriver.h @@ -123,7 +123,7 @@ public: #if HAL_UART_STATS_ENABLED // request information on uart I/O for one uart - void uart_info(ExpandingString &str) override; + void uart_info(ExpandingString &str, StatsTracker &stats, const uint32_t dt_ms) override; #endif /* @@ -209,7 +209,6 @@ private: // statistics uint32_t _tx_stats_bytes; uint32_t _rx_stats_bytes; - uint32_t _last_stats_ms; // we remember config options from set_options to apply on sdStart() uint32_t _cr1_options; diff --git a/libraries/AP_HAL_ChibiOS/Util.cpp b/libraries/AP_HAL_ChibiOS/Util.cpp index e6a4af4110..8deec9fda1 100644 --- a/libraries/AP_HAL_ChibiOS/Util.cpp +++ b/libraries/AP_HAL_ChibiOS/Util.cpp @@ -682,18 +682,23 @@ extern ChibiOS::UARTDriver uart_io; // request information on uart I/O void Util::uart_info(ExpandingString &str) { + // Calculate time since last call + const uint32_t now_ms = AP_HAL::millis(); + const uint32_t dt_ms = now_ms - uart_stats.last_ms; + uart_stats.last_ms = now_ms; + // a header to allow for machine parsers to determine format str.printf("UARTV1\n"); for (uint8_t i = 0; i < HAL_UART_NUM_SERIAL_PORTS; i++) { auto *uart = hal.serial(i); if (uart) { str.printf("SERIAL%u ", i); - uart->uart_info(str); + uart->uart_info(str, uart_stats.serial[i], dt_ms); } } #if HAL_WITH_IO_MCU str.printf("IOMCU "); - uart_io.uart_info(str); + uart_io.uart_info(str, uart_stats.io, dt_ms); #endif } #endif diff --git a/libraries/AP_HAL_ChibiOS/Util.h b/libraries/AP_HAL_ChibiOS/Util.h index 5af64e1c77..7b927ca4fd 100644 --- a/libraries/AP_HAL_ChibiOS/Util.h +++ b/libraries/AP_HAL_ChibiOS/Util.h @@ -98,7 +98,7 @@ public: #endif #if HAL_UART_STATS_ENABLED // request information on uart I/O - virtual void uart_info(ExpandingString &str) override; + void uart_info(ExpandingString &str) override; #endif #if HAL_USE_PWM == TRUE void timer_info(ExpandingString &str) override; @@ -161,4 +161,14 @@ private: #if HAL_ENABLE_DFU_BOOT void boot_to_dfu() override; #endif + +#if HAL_UART_STATS_ENABLED + struct { + AP_HAL::UARTDriver::StatsTracker serial[HAL_UART_NUM_SERIAL_PORTS]; +#if HAL_WITH_IO_MCU + AP_HAL::UARTDriver::StatsTracker io; +#endif + uint32_t last_ms; + } uart_stats; +#endif };