Skip to content

Commit

Permalink
addition of altitude buffer var
Browse files Browse the repository at this point in the history
added a user configurable altitude buffer option for MAX_ALT and CURRENT_ALT rescue mode options.
  • Loading branch information
EggsBenedict committed Jun 8, 2020
1 parent 658656f commit e2b3cb0
Show file tree
Hide file tree
Showing 5 changed files with 12 additions and 4 deletions.
3 changes: 2 additions & 1 deletion src/main/cli/settings.c
Expand Up @@ -941,7 +941,7 @@ const clivalue_t valueTable[] = {
#ifdef USE_GPS
{ "gps_provider", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_GPS_PROVIDER }, PG_GPS_CONFIG, offsetof(gpsConfig_t, provider) },
{ "gps_sbas_mode", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_GPS_SBAS_MODE }, PG_GPS_CONFIG, offsetof(gpsConfig_t, sbasMode) },
{ "gps_sbas_integrity", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_GPS_CONFIG, offsetof(gpsConfig_t, sbas_integrity) },
{ "gps_sbas_integrity", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_GPS_CONFIG, offsetof(gpsConfig_t, sbas_integrity) },
{ "gps_auto_config", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_GPS_CONFIG, offsetof(gpsConfig_t, autoConfig) },
{ "gps_auto_baud", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_GPS_CONFIG, offsetof(gpsConfig_t, autoBaud) },
{ "gps_ublox_use_galileo", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_GPS_CONFIG, offsetof(gpsConfig_t, gps_ublox_use_galileo) },
Expand All @@ -952,6 +952,7 @@ const clivalue_t valueTable[] = {
#ifdef USE_GPS_RESCUE
// PG_GPS_RESCUE
{ "gps_rescue_angle", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, 200 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, angle) },
{ "gps_rescue_alt_buffer", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, 100 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, rescueAltitudeBufferM) },
{ "gps_rescue_initial_alt", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 20, 100 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, initialAltitudeM) },
{ "gps_rescue_descent_dist", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 30, 500 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, descentDistanceM) },
{ "gps_rescue_landing_alt", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 3, 10 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, targetLandingAltitudeM) },
Expand Down
4 changes: 4 additions & 0 deletions src/main/cms/cms_menu_gps_rescue.c
Expand Up @@ -41,6 +41,7 @@


static uint16_t gpsRescueConfig_angle; //degrees
static uint16_t gpsRescueConfig_rescueAltitudeBufferM; //meters
static uint16_t gpsRescueConfig_initialAltitudeM; //meters
static uint16_t gpsRescueConfig_descentDistanceM; //meters
static uint16_t gpsRescueConfig_rescueGroundspeed; // centimeters per second
Expand Down Expand Up @@ -128,6 +129,7 @@ static const void *cmsx_menuGpsRescueOnEnter(displayPort_t *pDisp)
UNUSED(pDisp);

gpsRescueConfig_angle = gpsRescueConfig()->angle;
gpsRescueConfig_rescueAltitudeBufferM = gpsRescueConfig()->rescueAltitudeBufferM;
gpsRescueConfig_initialAltitudeM = gpsRescueConfig()->initialAltitudeM;
gpsRescueConfig_descentDistanceM = gpsRescueConfig()->descentDistanceM;
gpsRescueConfig_rescueGroundspeed = gpsRescueConfig()->rescueGroundspeed;
Expand All @@ -152,6 +154,7 @@ static const void *cmsx_menuGpsRescueOnExit(displayPort_t *pDisp, const OSD_Entr
UNUSED(self);

gpsRescueConfigMutable()->angle = gpsRescueConfig_angle;
gpsRescueConfigMutable()->rescueAltitudeBufferM = gpsRescueConfig_rescueAltitudeBufferM;
gpsRescueConfigMutable()->initialAltitudeM = gpsRescueConfig_initialAltitudeM;
gpsRescueConfigMutable()->descentDistanceM = gpsRescueConfig_descentDistanceM;
gpsRescueConfigMutable()->rescueGroundspeed = gpsRescueConfig_rescueGroundspeed;
Expand All @@ -178,6 +181,7 @@ const OSD_Entry cmsx_menuGpsRescueEntries[] =
{ "MIN DIST HOME M", OME_UINT16, NULL, &(OSD_UINT16_t){ &gpsRescueConfig_minRescueDth, 50, 1000 ,1 }, REBOOT_REQUIRED },
{ "INITAL ALT M", OME_UINT16, NULL, &(OSD_UINT16_t){ &gpsRescueConfig_initialAltitudeM, 20, 100, 1 }, REBOOT_REQUIRED },
{ "ALTITUDE MODE" , OME_TAB, NULL, &(OSD_TAB_t) { &gpsRescueConfig_altitudeMode, 2, lookupTableRescueAltitudeMode}, REBOOT_REQUIRED },
{ "ALT BUFFER M", OME_UINT16, NULL, &(OSD_UINT16_t){ &gpsRescueConfig_rescueAltitudeBufferM, 0, 100, 1 }, REBOOT_REQUIRED },
{ "DESCENT DIST M", OME_UINT16, NULL, &(OSD_UINT16_t){ &gpsRescueConfig_descentDistanceM, 30, 500, 1 }, REBOOT_REQUIRED },
{ "LANDING ALT M", OME_UINT16, NULL, &(OSD_UINT16_t){ &gpsRescueConfig_targetLandingAltitudeM, 3, 10, 1 }, REBOOT_REQUIRED },
{ "LANDING DIST M", OME_UINT16, NULL, &(OSD_UINT16_t){ &gpsRescueConfig_targetLandingDistanceM, 5, 15, 1 }, REBOOT_REQUIRED },
Expand Down
6 changes: 3 additions & 3 deletions src/main/flight/gps_rescue.c
Expand Up @@ -155,6 +155,7 @@ PG_REGISTER_WITH_RESET_TEMPLATE(gpsRescueConfig_t, gpsRescueConfig, PG_GPS_RESCU
PG_RESET_TEMPLATE(gpsRescueConfig_t, gpsRescueConfig,
.angle = 32,
.initialAltitudeM = 50,
.rescueAltitudeBufferM = 15,
.descentDistanceM = 200,
.rescueGroundspeed = 2000,
.throttleP = 150,
Expand Down Expand Up @@ -606,11 +607,11 @@ void updateGPSRescueState(void)
newAltitude = gpsRescueConfig()->initialAltitudeM * 100;
break;
case CURRENT_ALT:
newAltitude = rescueState.sensor.currentAltitudeCm;
newAltitude = rescueState.sensor.currentAltitudeCm + gpsRescueConfig()->rescueAltitudeBufferM * 100;
break;
case MAX_ALT:
default:
newAltitude = MAX(gpsRescueConfig()->initialAltitudeM * 100, rescueState.sensor.maxAltitudeCm + 1500);
newAltitude = MAX(gpsRescueConfig()->initialAltitudeM * 100, rescueState.sensor.maxAltitudeCm + gpsRescueConfig()->rescueAltitudeBufferM * 100);
break;
}

Expand Down Expand Up @@ -746,4 +747,3 @@ bool gpsRescueDisableMag(void)
}
#endif
#endif

1 change: 1 addition & 0 deletions src/main/flight/gps_rescue.h
Expand Up @@ -24,6 +24,7 @@
typedef struct gpsRescue_s {
uint16_t angle; //degrees
uint16_t initialAltitudeM; //meters
uint16_t rescueAltitudeBufferM; //meters
uint16_t descentDistanceM; //meters
uint16_t rescueGroundspeed; //centimeters per second
uint16_t throttleP, throttleI, throttleD;
Expand Down
2 changes: 2 additions & 0 deletions src/main/msp/msp.c
Expand Up @@ -1384,6 +1384,7 @@ static bool mspProcessOutCommand(int16_t cmdMSP, sbuf_t *dst)
#ifdef USE_GPS_RESCUE
case MSP_GPS_RESCUE:
sbufWriteU16(dst, gpsRescueConfig()->angle);
sbufWriteU16(dst, gpsRescueConfig()->rescueAltitudeBufferM);
sbufWriteU16(dst, gpsRescueConfig()->initialAltitudeM);
sbufWriteU16(dst, gpsRescueConfig()->descentDistanceM);
sbufWriteU16(dst, gpsRescueConfig()->rescueGroundspeed);
Expand Down Expand Up @@ -2324,6 +2325,7 @@ static mspResult_e mspProcessInCommand(mspDescriptor_t srcDesc, int16_t cmdMSP,
case MSP_SET_GPS_RESCUE:
gpsRescueConfigMutable()->angle = sbufReadU16(src);
gpsRescueConfigMutable()->initialAltitudeM = sbufReadU16(src);
gpsRescueConfigMutable()->rescueAltitudeBufferM = sbufReadU16(src);
gpsRescueConfigMutable()->descentDistanceM = sbufReadU16(src);
gpsRescueConfigMutable()->rescueGroundspeed = sbufReadU16(src);
gpsRescueConfigMutable()->throttleMin = sbufReadU16(src);
Expand Down

0 comments on commit e2b3cb0

Please sign in to comment.