From 4381c17cb2f08f9e06fe777cee4f598c5536f1a2 Mon Sep 17 00:00:00 2001 From: Michael du Breuil Date: Tue, 26 Sep 2023 17:04:23 -0700 Subject: [PATCH] AP_Periph: Fix bad conversion of APD ESC telemetry le16toh() returns an unsigned type, which keeps the number as positive when cast to float. It needs to be explictly converted to a signed number first. Tested with real hardware. --- Tools/AP_Periph/esc_apd_telem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tools/AP_Periph/esc_apd_telem.cpp b/Tools/AP_Periph/esc_apd_telem.cpp index fccc266331..ed438d60f3 100644 --- a/Tools/AP_Periph/esc_apd_telem.cpp +++ b/Tools/AP_Periph/esc_apd_telem.cpp @@ -48,7 +48,7 @@ bool ESC_APD_Telem::update() { // valid packet, copy the data we need and reset length decoded.voltage = le16toh(received.packet.voltage) * 1e-2f; decoded.temperature = convert_temperature(le16toh(received.packet.temperature)); - decoded.current = le16toh(received.packet.bus_current) * (1 / 12.5f); + decoded.current = ((int16_t)le16toh(received.packet.bus_current)) * (1 / 12.5f); decoded.rpm = le32toh(received.packet.erpm) / pole_count; decoded.power_rating_pct = le16toh(received.packet.motor_duty) * 1e-2f; ret = true;