37
37
38
38
rth_trackback_t rth_trackback ;
39
39
40
- bool rthTrackBackIsActive (void )
40
+ bool rthTrackBackCanBeActivated (void )
41
41
{
42
- return navConfig ()-> general .flags .rth_trackback_mode == RTH_TRACKBACK_ON || (navConfig ()-> general .flags .rth_trackback_mode == RTH_TRACKBACK_FS && posControl .flags .forcedRTHActivated );
42
+ return posControl .flags .estPosStatus >= EST_USABLE &&
43
+ (navConfig ()-> general .flags .rth_trackback_mode == RTH_TRACKBACK_ON || (navConfig ()-> general .flags .rth_trackback_mode == RTH_TRACKBACK_FS && posControl .flags .forcedRTHActivated ));
43
44
}
44
45
45
46
void rthTrackBackUpdate (bool forceSaveTrackPoint )
@@ -127,7 +128,7 @@ void rthTrackBackUpdate(bool forceSaveTrackPoint)
127
128
bool rthTrackBackSetNewPosition (void )
128
129
{
129
130
if (posControl .flags .estPosStatus == EST_NONE ) {
130
- return false;
131
+ return false; // will fall back to RTH initialize allowing full RTH to handle position loss correctly
131
132
}
132
133
133
134
const int32_t distFromStartTrackback = CENTIMETERS_TO_METERS (calculateDistanceToDestination (& rth_trackback .pointsList [rth_trackback .lastSavedIndex ]));
@@ -142,7 +143,7 @@ bool rthTrackBackSetNewPosition(void)
142
143
if (rth_trackback .activePointIndex < 0 || cancelTrackback ) {
143
144
rth_trackback .WrapAroundCounter = rth_trackback .activePointIndex = -1 ;
144
145
posControl .flags .rthTrackbackActive = false;
145
- return true ; // Procede to home after final trackback point
146
+ return false ; // No more trackback points to set, procede to home
146
147
}
147
148
148
149
if (isWaypointReached (& posControl .activeWaypoint .pos , & posControl .activeWaypoint .bearing )) {
@@ -161,7 +162,7 @@ bool rthTrackBackSetNewPosition(void)
161
162
setDesiredPosition (getRthTrackBackPosition (), 0 , NAV_POS_UPDATE_XY | NAV_POS_UPDATE_Z | NAV_POS_UPDATE_BEARING );
162
163
}
163
164
164
- return false ;
165
+ return true ;
165
166
}
166
167
167
168
fpVector3_t * getRthTrackBackPosition (void )
@@ -174,9 +175,9 @@ fpVector3_t *getRthTrackBackPosition(void)
174
175
return & rth_trackback .pointsList [rth_trackback .activePointIndex ];
175
176
}
176
177
177
- void resetRthTrackBack (void )
178
+ void resetRthTrackBack (void )
178
179
{
179
180
rth_trackback .activePointIndex = -1 ;
180
181
posControl .flags .rthTrackbackActive = false;
181
- rth_trackback .WrapAroundCounter = -1 ;
182
+ rth_trackback .WrapAroundCounter = -1 ;
182
183
}
0 commit comments