diff --git a/.gitignore b/.gitignore index 6d7138e6bd5..c1015dd5c68 100644 --- a/.gitignore +++ b/.gitignore @@ -47,6 +47,10 @@ launch.json tokens.yaml *.ubx +# Build output directories (catch-all for ad-hoc build dirs) +/build_*/ +/build_hw/ + # Local development files .semgrepignore build_sitl/ diff --git a/lib/main/pico-sdk/lib/tinyusb/.idea/.gitignore b/lib/main/pico-sdk/lib/tinyusb/.idea/.gitignore new file mode 100644 index 00000000000..b0811f16305 --- /dev/null +++ b/lib/main/pico-sdk/lib/tinyusb/.idea/.gitignore @@ -0,0 +1,10 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ +# GitHub Copilot persisted chat sessions +/copilot/chatSessions diff --git a/lib/main/pico-sdk/lib/tinyusb/.idea/cmake.xml b/lib/main/pico-sdk/lib/tinyusb/.idea/cmake.xml new file mode 100644 index 00000000000..96ff19c89d4 --- /dev/null +++ b/lib/main/pico-sdk/lib/tinyusb/.idea/cmake.xml @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/kl25.xml b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/kl25.xml new file mode 100644 index 00000000000..96c208dde10 --- /dev/null +++ b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/kl25.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/lpc1857.xml b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/lpc1857.xml new file mode 100644 index 00000000000..a4764b9d62c --- /dev/null +++ b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/lpc1857.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/lpc4088.xml b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/lpc4088.xml new file mode 100644 index 00000000000..9da975ef309 --- /dev/null +++ b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/lpc4088.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/lpc54628.xml b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/lpc54628.xml new file mode 100644 index 00000000000..0c3877e9448 --- /dev/null +++ b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/lpc54628.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/lpc55s69.xml b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/lpc55s69.xml new file mode 100644 index 00000000000..2fa127d33dc --- /dev/null +++ b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/lpc55s69.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/mcx947.xml b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/mcx947.xml new file mode 100644 index 00000000000..12180a996c7 --- /dev/null +++ b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/mcx947.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/nrf52840.xml b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/nrf52840.xml new file mode 100644 index 00000000000..8e48a2b978a --- /dev/null +++ b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/nrf52840.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/nrf5340.xml b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/nrf5340.xml new file mode 100644 index 00000000000..646f2d38c36 --- /dev/null +++ b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/nrf5340.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/ra4m1.xml b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/ra4m1.xml new file mode 100644 index 00000000000..72bc63d9b2f --- /dev/null +++ b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/ra4m1.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/ra6m1.xml b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/ra6m1.xml new file mode 100644 index 00000000000..ca8c7245a5e --- /dev/null +++ b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/ra6m1.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/ra6m5.xml b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/ra6m5.xml new file mode 100644 index 00000000000..ecbdb21b74c --- /dev/null +++ b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/ra6m5.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/rp2040.xml b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/rp2040.xml new file mode 100644 index 00000000000..da5a8f1ee8c --- /dev/null +++ b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/rp2040.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/rt1010.xml b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/rt1010.xml new file mode 100644 index 00000000000..f415c067661 --- /dev/null +++ b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/rt1010.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/rt1060.xml b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/rt1060.xml new file mode 100644 index 00000000000..cc75aa62cec --- /dev/null +++ b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/rt1060.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/samd21g18.xml b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/samd21g18.xml new file mode 100644 index 00000000000..f8aa6009d07 --- /dev/null +++ b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/samd21g18.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/samd51j19.xml b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/samd51j19.xml new file mode 100644 index 00000000000..694ea7dfdcf --- /dev/null +++ b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/samd51j19.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/stlink.xml b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/stlink.xml new file mode 100644 index 00000000000..628f7910de0 --- /dev/null +++ b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/stlink.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/stm32g474.xml b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/stm32g474.xml new file mode 100644 index 00000000000..6d65e83c78e --- /dev/null +++ b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/stm32g474.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/stm32h743.xml b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/stm32h743.xml new file mode 100644 index 00000000000..aeaf9fb533b --- /dev/null +++ b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/stm32h743.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/uno_r4.xml b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/uno_r4.xml new file mode 100644 index 00000000000..98bf918120a --- /dev/null +++ b/lib/main/pico-sdk/lib/tinyusb/.idea/runConfigurations/uno_r4.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/lib/main/pico-sdk/lib/tinyusb/.idea/vcs.xml b/lib/main/pico-sdk/lib/tinyusb/.idea/vcs.xml new file mode 100644 index 00000000000..94a25f7f4cb --- /dev/null +++ b/lib/main/pico-sdk/lib/tinyusb/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/io/osd.c b/src/main/io/osd.c index 0bdb9e3375f..9b56008cef8 100644 --- a/src/main/io/osd.c +++ b/src/main/io/osd.c @@ -2056,7 +2056,7 @@ static bool osdDrawSingleElement(uint8_t item) break; case OSD_3D_SPEED: - osdFormatVelocityStr(buff, osdGet3DSpeed(), OSD_SPEED_TYPE_3D, false); + osdFormatVelocityStr(buff, posControl.actualState.vel3D, OSD_SPEED_TYPE_3D, false); break; case OSD_3D_MAX_SPEED: @@ -4928,7 +4928,7 @@ static void osdUpdateStats(void) int32_t value; if (feature(FEATURE_GPS)) { - value = osdGet3DSpeed(); + value = posControl.actualState.vel3D; const float airspeed_estimate = getAirspeedEstimate(); if (stats.max_3D_speed < value) stats.max_3D_speed = value; diff --git a/src/main/io/osd_common.c b/src/main/io/osd_common.c index 38563ed5d88..6b2e59706be 100644 --- a/src/main/io/osd_common.c +++ b/src/main/io/osd_common.c @@ -42,6 +42,8 @@ #include "io/osd_grid.h" #include "navigation/navigation.h" +#include "navigation/navigation_private.h" + #include "sensors/pitotmeter.h" #if defined(USE_OSD) || defined(USE_DJI_HD_OSD) @@ -59,7 +61,7 @@ int16_t osdGetSpeedFromSelectedSource(void) { speed = gpsSol.groundSpeed; break; case OSD_SPEED_SOURCE_3D: - speed = osdGet3DSpeed(); + speed = posControl.actualState.vel3D; break; case OSD_SPEED_SOURCE_AIR: #ifdef USE_PITOT @@ -164,7 +166,7 @@ void osdDrawArtificialHorizon(displayPort_t *display, displayCanvas_t *canvas, c { uint8_t gx; uint8_t gy; - + #if defined(USE_CANVAS) if (canvas) { osdCanvasDrawArtificialHorizon(display, canvas, p, pitchAngle, rollAngle); @@ -211,15 +213,3 @@ void osdDrawSidebars(displayPort_t *display, displayCanvas_t *canvas) } #endif - -#ifdef USE_GPS -/* - * 3D speed in cm/s - */ -int16_t osdGet3DSpeed(void) -{ - float vert_speed = getEstimatedActualVelocity(Z); - float hor_speed = (float)gpsSol.groundSpeed; - return (int16_t)calc_length_pythagorean_2D(hor_speed, vert_speed); -} -#endif diff --git a/src/main/io/osd_common.h b/src/main/io/osd_common.h index a032747effc..0831a36e678 100644 --- a/src/main/io/osd_common.h +++ b/src/main/io/osd_common.h @@ -105,7 +105,3 @@ void osdDrawArtificialHorizon(displayPort_t *display, displayCanvas_t *canvas, c // grid slots. void osdDrawHeadingGraph(displayPort_t *display, displayCanvas_t *canvas, const osdDrawPoint_t *p, int heading); void osdDrawSidebars(displayPort_t *display, displayCanvas_t *canvas); - -#ifdef USE_GPS -int16_t osdGet3DSpeed(void); -#endif diff --git a/src/main/io/osd_dji_hd.c b/src/main/io/osd_dji_hd.c index a8adf663d57..a2a4ecbfaa5 100644 --- a/src/main/io/osd_dji_hd.c +++ b/src/main/io/osd_dji_hd.c @@ -681,7 +681,7 @@ void osdDJIFormatVelocityStr(char* buff) break; case OSD_SPEED_SOURCE_3D: strcpy(sourceBuf, "3D"); - vel = osdGet3DSpeed(); + vel = posControl.actualState.vel3D; break; case OSD_SPEED_SOURCE_AIR: strcpy(sourceBuf, "AIR"); diff --git a/src/main/navigation/navigation.c b/src/main/navigation/navigation.c index 03d4a3da36b..611d25864cc 100644 --- a/src/main/navigation/navigation.c +++ b/src/main/navigation/navigation.c @@ -2852,6 +2852,8 @@ void updateActualAltitudeAndClimbRate(bool estimateValid, float newAltitude, flo posControl.actualState.agl.pos.z = surfaceDistance; posControl.actualState.agl.vel.z = surfaceVelocity; + posControl.actualState.vel3D = calc_length_pythagorean_2D(posControl.actualState.velXY, posControl.actualState.abs.vel.z); + // Update altitude that would be used when executing RTH if (estimateValid) { updateDesiredRTHAltitude(); @@ -3874,10 +3876,10 @@ void getWaypoint(uint8_t wpNumber, navWaypoint_t * wpData) int isGCSValid(void) { - return (ARMING_FLAG(ARMED) && - (posControl.flags.estPosStatus >= EST_TRUSTED) && - posControl.gpsOrigin.valid && - posControl.flags.isGCSAssistedNavigationEnabled && + return (ARMING_FLAG(ARMED) && + (posControl.flags.estPosStatus >= EST_TRUSTED) && + posControl.gpsOrigin.valid && + posControl.flags.isGCSAssistedNavigationEnabled && (posControl.navState == NAV_STATE_POSHOLD_3D_IN_PROGRESS)); } diff --git a/src/main/navigation/navigation_private.h b/src/main/navigation/navigation_private.h index a1f07e470c0..4ae10b0be7c 100644 --- a/src/main/navigation/navigation_private.h +++ b/src/main/navigation/navigation_private.h @@ -137,6 +137,7 @@ typedef struct { float cosYaw; float surfaceMin; float velXY; + float vel3D; } navigationEstimatedState_t; typedef struct { diff --git a/src/main/programming/logic_condition.c b/src/main/programming/logic_condition.c index edba68b8e94..9fcf42495a6 100644 --- a/src/main/programming/logic_condition.c +++ b/src/main/programming/logic_condition.c @@ -733,9 +733,8 @@ static int logicConditionGetFlightOperandValue(int operand) { return getMinGroundSpeed(navConfig()->general.min_ground_speed); break; - //FIXME align with osdGet3DSpeed case LOGIC_CONDITION_OPERAND_FLIGHT_3D_SPEED: // cm/s - return osdGet3DSpeed(); + return posControl.actualState.vel3D; break; case LOGIC_CONDITION_OPERAND_FLIGHT_AIR_SPEED: // cm/s @@ -767,7 +766,7 @@ static int logicConditionGetFlightOperandValue(int operand) { uint16_t windAngle; getEstimatedHorizontalWindSpeed(&windAngle); int32_t windHeading = (int32_t)windAngle + 18000; // Correct heading to display correctly. - + while (windHeading < 0) windHeading += 36000; while (windHeading >= 36000) windHeading -= 36000; @@ -787,10 +786,10 @@ static int logicConditionGetFlightOperandValue(int operand) { uint16_t windAngle; getEstimatedHorizontalWindSpeed(&windAngle); int32_t relativeWindHeading = (int32_t)windAngle + 18000 - DECIDEGREES_TO_CENTIDEGREES(attitude.values.yaw); - + while (relativeWindHeading < 0) relativeWindHeading += 36000; while (relativeWindHeading >= 36000) relativeWindHeading -= 36000; - + relativeWindHeading = -relativeWindHeading; if (relativeWindHeading <= -18000) relativeWindHeading = 18000 + (relativeWindHeading + 18000); @@ -802,7 +801,7 @@ static int logicConditionGetFlightOperandValue(int operand) { #else return 0; #endif - break; + break; case LOGIC_CONDITION_OPERAND_FLIGHT_ALTITUDE: // cm return constrain(getEstimatedActualPosition(Z), INT32_MIN, INT32_MAX); @@ -894,7 +893,7 @@ static int logicConditionGetFlightOperandValue(int operand) { return rxLinkStatistics.uplinkRSSI; #else return 0; -#endif +#endif break; case LOGIC_CONDITION_OPERAND_FLIGHT_LQ_DOWNLINK: