mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-26 01:35:41 +03:00
4.4 work and minor bug fixes for afterburner
This commit is contained in:
parent
5b42e11157
commit
1ed1db4acc
9 changed files with 439 additions and 22 deletions
26
build.sh
Normal file
26
build.sh
Normal file
|
@ -0,0 +1,26 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Check if the input file was provided
|
||||
if [ -z dos2unix "$1" ]; then
|
||||
echo "Usage: $0 <input-file>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Convert line endings of the script file to LF
|
||||
dos2unix "$0" >/dev/null 2>&1
|
||||
|
||||
# Loop through each line in the input file
|
||||
while read -r line; do
|
||||
# Extract the device name from the current line
|
||||
device=$(echo "$line" | cut -d',' -f1)
|
||||
|
||||
# Skip the header row
|
||||
if [ "$device" == "DEVICE_NAME" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
# Run the make command for the current device
|
||||
echo "Building firmware for $device"
|
||||
make "$device" EXTRA_FLAGS="-D'RELEASE_NAME=4.4.1' -DCLOUD_BUILD -DUSE_DSHOT -DUSE_GPS -DUSE_GPS_PLUS_CODES -DUSE_LED_STRIP -DUSE_OSD -DUSE_OSD_HD -DUSE_OSD_SD -DUSE_PINIO -DUSE_SERIALRX -DUSE_SERIALRX_CRSF -DUSE_SERIALRX_DEFAULT -DUSE_SERIALRX_GHST -DUSE_SERIALRX_SBUS -DUSE_SERIALRX_SRXL2 -DUSE_SERIALRX_SPEKTRUM -DUSE_TELEMETRY -DUSE_TELEMETRY_CRSF -DUSE_TELEMETRY_GHST -DUSE_VTX"
|
||||
|
||||
done < "$1"
|
6
common-devices.csv
Normal file
6
common-devices.csv
Normal file
|
@ -0,0 +1,6 @@
|
|||
OMNIBUSF4SD
|
||||
AIKONF4
|
||||
AIKONF7
|
||||
HOBBYWING_XROTORF4G3
|
||||
HOBBYWING_XROTORF7CONV
|
||||
CRAZYBEEF4SX1280
|
|
365
devices.csv
Normal file
365
devices.csv
Normal file
|
@ -0,0 +1,365 @@
|
|||
ALIENFLIGHTF4
|
||||
ALIENFLIGHTNGF7
|
||||
ALIENFLIGHTNGF7_DUAL
|
||||
ALIENFLIGHTNGF7_ELRS
|
||||
ALIENFLIGHTNGF7_RX
|
||||
AIKONF4
|
||||
AIKONF7
|
||||
AG3XF4
|
||||
AG3XF7
|
||||
AIRBOTF4
|
||||
AIRBOTF4SD
|
||||
AIRBOTF4V2
|
||||
AIRBOTF7
|
||||
AIRBOTF7HDV
|
||||
HELSEL_STRIKERF7
|
||||
NOX
|
||||
OMNIBUSF4
|
||||
OMNIBUSF4FW
|
||||
OMNIBUSF4NANOV7
|
||||
OMNIBUSF4SD
|
||||
OMNIBUSF4V6
|
||||
OMNIBUSF7
|
||||
OMNIBUSF7NANOV7
|
||||
OMNIBUSF7V2
|
||||
AIRB-OMNINXT4
|
||||
AIRB-OMNINXT7
|
||||
ALIENWHOOPF4
|
||||
MERCURYG4
|
||||
APEXF7
|
||||
AXISFLYINGF7
|
||||
AXISFLYINGF7PRO
|
||||
BETAFPVF405
|
||||
BETAFPVF411
|
||||
BETAFPVF411RX
|
||||
BETAFPVF4SX1280
|
||||
BETAFPVF722
|
||||
BETAFPVH743
|
||||
BLUEJAYF4
|
||||
NERO
|
||||
MATEKF405STD_CLONE
|
||||
CLRACINGF4
|
||||
CLRACINGF7
|
||||
RUSRACE_F4
|
||||
RUSRACE_F7
|
||||
SIRMIXALOT
|
||||
CYCLONEF405_PRO
|
||||
CYCLONEF722_PRO
|
||||
DARWINF411
|
||||
DARWINF4SX1280HD
|
||||
DARWINF722HD
|
||||
DAKEFPVF405
|
||||
DAKEFPVF411
|
||||
DAKEFPVF722
|
||||
DALRCF405
|
||||
DALRCF722DUAL
|
||||
SOULF4
|
||||
DFR_F722_DUAL_HD
|
||||
FURYF4
|
||||
FURYF4OSD
|
||||
MAMBAF405US
|
||||
MAMBAF405US_I2C
|
||||
MAMBAF405_2022A
|
||||
MAMBAF405_2022B
|
||||
MAMBAF411
|
||||
MAMBAF722
|
||||
MAMBAF722_2022A
|
||||
MAMBAF722_2022B
|
||||
MAMBAF722_I2C
|
||||
MAMBAF722_X8
|
||||
MAMBAG4
|
||||
MAMBAH743
|
||||
MAMBAH743_2022B
|
||||
ELINF405
|
||||
ELINF722
|
||||
DYSF44530D
|
||||
DYSF4PRO
|
||||
EACHINEF411_AIO
|
||||
EACHINEF722
|
||||
EACHINEF722_AIO
|
||||
EMAX_BABYHAWK_II_HD
|
||||
EMAX_TINYHAWKF4SX1280
|
||||
EMAX_TINYHAWK_F411RX
|
||||
EXF722DUAL
|
||||
EXUAVF4PRO
|
||||
FF_FORTINIF4
|
||||
FF_FORTINIF4_REV03
|
||||
FF_PIKOF4
|
||||
FF_PIKOF4OSD
|
||||
FF_RACEPIT
|
||||
FF_RACEPITF7
|
||||
FF_RACEPITF7_MINI
|
||||
FF_RACEPIT_MINI
|
||||
FLYCOLORF7
|
||||
FLYCOLORF7_AIO
|
||||
KIWIF4
|
||||
KIWIF4V2
|
||||
PLUMF4
|
||||
GRAVITYF7
|
||||
REVOLT
|
||||
REVOLTOSD
|
||||
FLYWOOF405
|
||||
FLYWOOF405NANO
|
||||
FLYWOOF405PRO
|
||||
FLYWOOF405S_AIO
|
||||
FLYWOOF411
|
||||
FLYWOOF411EVO_HD
|
||||
FLYWOOF411HEX
|
||||
FLYWOOF411V2
|
||||
FLYWOOF411_5IN1_AIO
|
||||
FLYWOOF745
|
||||
FLYWOOF745NANO
|
||||
FLYWOOF7DUAL
|
||||
ANYFCF7
|
||||
ANYFCM7
|
||||
DRONIUSF7
|
||||
F4BY
|
||||
FENIX_F405
|
||||
SPARKY2
|
||||
WORMFC
|
||||
FOXEERF405
|
||||
FOXEERF722DUAL
|
||||
FOXEERF722V2
|
||||
FOXEERF722V3
|
||||
FOXEERF722V4
|
||||
FOXEERF745V2_AIO
|
||||
FOXEERF745V3_AIO
|
||||
FOXEERF745V4_AIO
|
||||
FOXEERF745_AIO
|
||||
FOXEERH743
|
||||
BETAFLIGHTF4
|
||||
FPVM_BETAFLIGHTF7
|
||||
XRACERF4
|
||||
FRSKYF4
|
||||
GEELANGF411
|
||||
XILOF4
|
||||
GEPRCF405
|
||||
GEPRCF411
|
||||
GEPRCF411SX1280
|
||||
GEPRCF411_AIO
|
||||
GEPRCF411_PRO
|
||||
GEPRCF722
|
||||
GEPRCF722BT
|
||||
GEPRCF722_BT_HD
|
||||
GEPRCF745_BT_HD
|
||||
GEPRCG4AIO
|
||||
GEPRC_F722_AIO
|
||||
GEP_F405_VTX_V3
|
||||
GEMEF411
|
||||
GEMEF722
|
||||
CRAZYBEEF4DX
|
||||
CRAZYBEEF4DXS
|
||||
CRAZYBEEF4FR
|
||||
CRAZYBEEF4FS
|
||||
CRAZYBEEF4SX1280
|
||||
HAKRCF405
|
||||
HAKRCF405D
|
||||
HAKRCF405V2
|
||||
HAKRCF411
|
||||
HAKRCF411D
|
||||
HAKRCF722
|
||||
HAKRCF722D
|
||||
HAKRCF722MINI
|
||||
HAKRCF722V2
|
||||
HAKRCF7230D
|
||||
KD722
|
||||
KAKUTEF4
|
||||
KAKUTEF4V2
|
||||
KAKUTEF7
|
||||
KAKUTEF7HDV
|
||||
KAKUTEF7MINI
|
||||
KAKUTEF7MINIV3
|
||||
KAKUTEF7V2
|
||||
KAKUTEH7
|
||||
KAKUTEH7MINI
|
||||
KAKUTEH7V2
|
||||
TALONF4V2
|
||||
TALONF7DJIHD
|
||||
TALONF7FUSION
|
||||
TALONF7V2
|
||||
HIFIONRCF7
|
||||
HGLRCF405
|
||||
HGLRCF405AS
|
||||
HGLRCF411
|
||||
HGLRCF411SX1280
|
||||
HGLRCF411SX1280_15A
|
||||
HGLRCF722
|
||||
HGLRCF722E
|
||||
HGLRCF745
|
||||
ZEUSF4EVO
|
||||
ZEUSF4FR
|
||||
ZEUSF722_AIO
|
||||
NIDICI_F4
|
||||
HOBBYWING_XROTORF4G3
|
||||
HOBBYWING_XROTORF7CONV
|
||||
IFLIGHT_BLITZ_F405
|
||||
IFLIGHT_BLITZ_F411RX
|
||||
IFLIGHT_BLITZ_F722
|
||||
IFLIGHT_BLITZ_F722_X1
|
||||
IFLIGHT_BLITZ_F7_AIO
|
||||
IFLIGHT_BLITZ_F7_PRO
|
||||
IFLIGHT_F405_AIO
|
||||
IFLIGHT_F405_TWING
|
||||
IFLIGHT_F411_AIO32
|
||||
IFLIGHT_F411_PRO
|
||||
IFLIGHT_F4SX1280
|
||||
IFLIGHT_F722_TWING
|
||||
IFLIGHT_F745_AIO
|
||||
IFLIGHT_F745_AIO_V2
|
||||
IFLIGHT_H743_AIO_V2
|
||||
IFLIGHT_H7_TWING
|
||||
IFLIGHT_SUCCEX_E_F4
|
||||
IFLIGHT_SUCCEX_E_F7
|
||||
JBF7
|
||||
JBF7_DJI
|
||||
JBF7_V2
|
||||
JHEF405
|
||||
JHEF405PRO
|
||||
JHEF411
|
||||
JHEF745
|
||||
JHEF7DUAL
|
||||
JHEH743_AIO
|
||||
SYNERGYF4
|
||||
LDARC_F411
|
||||
ELLE0
|
||||
FISHDRONEF4
|
||||
KROOZX
|
||||
PIRXF4
|
||||
PODIUMF4
|
||||
STACKX
|
||||
VRRACE
|
||||
LUXAIO
|
||||
LUXF4OSD
|
||||
LUXF7HDV
|
||||
LUXMINIF7
|
||||
MERAKRCF405
|
||||
MERAKRCF722
|
||||
MLTEMPF4
|
||||
MLTYPHF4
|
||||
MATEKF405AIO
|
||||
MATEKF405CTR
|
||||
MATEKF405MINI
|
||||
MATEKF405SE
|
||||
MATEKF405STD
|
||||
MATEKF405TE
|
||||
MATEKF405TE_SD
|
||||
MATEKF411
|
||||
MATEKF411RX
|
||||
MATEKF411SE
|
||||
MATEKF722
|
||||
MATEKF722HD
|
||||
MATEKF722MINI
|
||||
MATEKF722SE
|
||||
MATEKH743
|
||||
NBD_CRICKETF7
|
||||
NBD_CRICKETF7V2
|
||||
NBD_GALAXYAIO255
|
||||
NBD_INFINITY200RS
|
||||
NBD_INFINITYAIO
|
||||
NBD_INFINITYAIOV2
|
||||
NBD_INFINITYAIOV2PRO
|
||||
NBD_INFINITYF4
|
||||
FLOWBOX
|
||||
FLOWBOXV2
|
||||
HYBRIDG4
|
||||
NEUTRONRCF407
|
||||
NEUTRONRCF411AIO
|
||||
NEUTRONRCF411SX1280
|
||||
NEUTRONRCF722AIO
|
||||
NEUTRONRCF7AIO
|
||||
NEUTRONRCG4AIO
|
||||
NEUTRONRCH743AIO
|
||||
NEUTRONRCH7BT
|
||||
UAVPNG030MINI
|
||||
REVO
|
||||
REVONANO
|
||||
PYRODRONEF4
|
||||
PYRODRONEF4PDB
|
||||
PYRODRONEF7
|
||||
AIRF7
|
||||
MINI_H743_HD
|
||||
ARESF7
|
||||
BEEROTORF4
|
||||
BLADE_F7
|
||||
BLADE_F7_HD
|
||||
RUSHCORE7
|
||||
RUSHF7AIO
|
||||
AOCODAF405
|
||||
AOCODAF405V2MPU6000
|
||||
AOCODAF405V2MPU6500
|
||||
AOCODAF722BLE
|
||||
AOCODAF722MINI
|
||||
AOCODARCF411_AIO
|
||||
AOCODARCF722_AIO
|
||||
AOCODARCF7DUAL
|
||||
AOCODARCH7DUAL
|
||||
SKYSTARSF405
|
||||
SKYSTARSF405AIO
|
||||
SKYSTARSF411
|
||||
SKYSTARSF7HD
|
||||
SKYSTARSF7HDPRO
|
||||
SKYSTARSH7HD
|
||||
ATOMRCF405
|
||||
ATOMRCF411
|
||||
ATOMRCF722
|
||||
SKYZONEF405
|
||||
SPEEDYBEEF4
|
||||
SPEEDYBEEF405V3
|
||||
SPEEDYBEEF7
|
||||
SPEEDYBEEF7MINI
|
||||
SPEEDYBEEF7MINIV2
|
||||
SPEEDYBEEF7V2
|
||||
SPEEDYBEEF7V3
|
||||
SPEEDYBEE_F745_AIO
|
||||
SPCMAKERF411
|
||||
SPEDIXF4
|
||||
SPRACINGF4EVO
|
||||
SPRACINGF4NEO
|
||||
SPRACINGF7DUAL
|
||||
SPRACINGH7EXTREME
|
||||
SPRACINGH7NANO
|
||||
SPRACINGH7RF
|
||||
NUCLEOF722
|
||||
STM32F411DISCOVERY
|
||||
STM32F4DISCOVERY
|
||||
SUB250F411
|
||||
MODULARF4
|
||||
TCMMF411
|
||||
TCMMF7
|
||||
COLIBRI
|
||||
PODRACERAIO
|
||||
TMH7
|
||||
TMOTORF4
|
||||
TMOTORF411
|
||||
TMOTORF4SX1280
|
||||
TMOTORF7
|
||||
TMOTORF722SE
|
||||
TMOTORF7V2
|
||||
TMOTORF7_AIO
|
||||
TMOTORH743
|
||||
TMOTORVELOXF7V2
|
||||
TMPACERF7
|
||||
TMPACERF7MINI
|
||||
TMVELOXF411
|
||||
TMVELOXF7
|
||||
TRANSTECF405HD
|
||||
TRANSTECF411
|
||||
TRANSTECF411AIO
|
||||
TRANSTECF411HD
|
||||
TRANSTECF7
|
||||
TRANSTECF7HD
|
||||
FPVCYCLEF401
|
||||
TUNERCF405
|
||||
VGOODF722DUAL
|
||||
VGOODRCF4
|
||||
VGOODRCF405_DJI
|
||||
VGOODRCF411_DJI
|
||||
VGOODRCF722_DJI
|
||||
VIVAF4AIO
|
||||
WIZZF7HD
|
||||
YUPIF4
|
||||
YUPIF7
|
||||
ZEEZF7
|
||||
ZEEZF7V2
|
||||
ZEEZF7V3
|
||||
ZEEZWHOOP
|
|
|
@ -108,5 +108,6 @@ const char * const debugModeNames[DEBUG_COUNT] = {
|
|||
"VTX_MSP",
|
||||
"GPS_DOP",
|
||||
"FAILSAFE",
|
||||
"DSHOT_TELEMETRY_COUNTS"
|
||||
"DSHOT_TELEMETRY_COUNTS",
|
||||
"RPM_LIMITER"
|
||||
};
|
||||
|
|
|
@ -107,6 +107,7 @@ typedef enum {
|
|||
DEBUG_GPS_DOP,
|
||||
DEBUG_FAILSAFE,
|
||||
DEBUG_DSHOT_TELEMETRY_COUNTS,
|
||||
DEBUG_RPM_LIMITER,
|
||||
DEBUG_COUNT
|
||||
} debugType_e;
|
||||
|
||||
|
|
|
@ -361,7 +361,7 @@ static void applyRPMLimiter(void)
|
|||
//if drone is armed
|
||||
if (ARMING_FLAG(ARMED)) {
|
||||
//if the afterburner switch is enguaged
|
||||
if(IS_RC_MODE_ACTIVE(BOXUSER4)) {
|
||||
if(IS_RC_MODE_ACTIVE(BOXBEEPERON)) {
|
||||
//if the afterburner isn't initiated
|
||||
if(mixerRuntime.afterburnerInitiated == false) {
|
||||
//if there's charge in the tank
|
||||
|
@ -382,8 +382,10 @@ static void applyRPMLimiter(void)
|
|||
//if the tank is empty, reset
|
||||
if(mixerRuntime.afterburnerTankPercent<=0.0f) {
|
||||
mixerRuntime.afterburnerInitiated = false;
|
||||
mixerRuntime.afterburnerTankPercent = 100.0f;
|
||||
mixerRuntime.afterburnerTanksRemaining -= 1;
|
||||
if(mixerRuntime.afterburnerTanksRemaining>0) {
|
||||
mixerRuntime.afterburnerTankPercent = 100.0f;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -425,15 +427,15 @@ static void applyRPMLimiter(void)
|
|||
|
||||
//get the rpm averaged across the motors
|
||||
bool motorsSaturated = false;
|
||||
//bool motorsDesaturated = false;
|
||||
bool motorsDesaturated = false;
|
||||
for (int i = 0; i < getMotorCount(); i++) {
|
||||
averageRPM += getDshotTelemetry(i);
|
||||
if (motor[i] >= motorConfig()->maxthrottle) {
|
||||
motorsSaturated = true;
|
||||
}
|
||||
/*if (motor[i] <= motorConfig()->minthrottle) {
|
||||
motorsDesaturated = true;
|
||||
}*/
|
||||
if (motor[i] <= motorConfig()->minthrottle) {
|
||||
motorsDesaturated = false;
|
||||
}
|
||||
}
|
||||
averageRPM = 100 * averageRPM / (getMotorCount()*mixerRuntime.motorPoleCount/2.0f);
|
||||
|
||||
|
@ -459,13 +461,15 @@ static void applyRPMLimiter(void)
|
|||
|
||||
//don't let I term wind up if throttle is below the motor idle
|
||||
if (rcCommandThrottle < motorConfig()->digitalIdleOffsetValue / 10000.0f) {
|
||||
//mixerRuntime.govenorI *= 1.0f/(1.0f+(pidGetDT()*10.0f)); //slowly ramp down i term instead of resetting to avoid throttle pulsing cheats
|
||||
mixerRuntime.govenorI = 0.0f;
|
||||
mixerRuntime.govenorI *= 1.0f/(1.0f+(pidGetDT()*10.0f)); //slowly ramp down i term
|
||||
//mixerRuntime.govenorI = 0.0f;
|
||||
} else {
|
||||
//don't let I term wind up if motors are saturated. Otherwise, motors may stay at high throttle even after low throttle is commanded
|
||||
if(!motorsSaturated)
|
||||
if(!motorsSaturated && !motorsDesaturated)
|
||||
{
|
||||
mixerRuntime.govenorI += smoothedRPMError * mixerRuntime.govenorIGain; // + when overspeed
|
||||
}else{
|
||||
mixerRuntime.govenorI *= 1.0f/(1.0f+(pidGetDT()*10.0f)); //slowly ramp down i term
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -488,13 +492,18 @@ static void applyRPMLimiter(void)
|
|||
PIDOutput = MAX(PIDOutput,0.0f);
|
||||
|
||||
}
|
||||
if (mixerRuntime.govenor_init) {
|
||||
if (mixerRuntime.rpmLinearization) {
|
||||
throttle = constrainf(-PIDOutput, 0.0f, 1.0f);
|
||||
} else {
|
||||
throttle = constrainf(throttle-PIDOutput, 0.0f, 1.0f);
|
||||
if (motorConfig()->dev.useDshotTelemetry) {
|
||||
if (mixerRuntime.govenor_init) {
|
||||
if (mixerRuntime.rpmLinearization) {
|
||||
throttle = constrainf(-PIDOutput, 0.0f, 1.0f);
|
||||
} else {
|
||||
throttle = constrainf(throttle-PIDOutput, 0.0f, 1.0f);
|
||||
}
|
||||
}
|
||||
} else { //if dshot telemetry isn't enabled. Keep the throttle at zero
|
||||
throttle = 0.0f;
|
||||
}
|
||||
|
||||
mixerRuntime.govenor_init = true;
|
||||
|
||||
//update previous values for next loop
|
||||
|
|
|
@ -60,7 +60,7 @@ PG_RESET_TEMPLATE(mixerConfig_t, mixerConfig,
|
|||
.govenor_acceleration_limit = 60,
|
||||
.govenor_deceleration_limit = 60,
|
||||
.govenor_rpm_limit = 130,
|
||||
.govenor_rpm_afterburner = 20,
|
||||
.govenor_rpm_afterburner = 15,
|
||||
.govenor_rpm_afterburner_duration = 5,
|
||||
.govenor_rpm_afterburner_reset = true,
|
||||
.govenor_rpm_afterburner_hold_to_use = false,
|
||||
|
|
|
@ -100,7 +100,7 @@ static const box_t boxes[CHECKBOX_ITEM_COUNT] = {
|
|||
{ .boxId = BOXMSPOVERRIDE, .boxName = "MSP OVERRIDE", .permanentId = 50},
|
||||
{ .boxId = BOXSTICKCOMMANDDISABLE, .boxName = "STICK COMMANDS DISABLE", .permanentId = 51},
|
||||
{ .boxId = BOXBEEPERMUTE, .boxName = "BEEPER MUTE", .permanentId = 52},
|
||||
{ .boxId = BOXREADY, .boxName = "READY", .permanentId = 53}
|
||||
{ .boxId = BOXREADY, .boxName = "READY", .permanentId = 53},
|
||||
};
|
||||
|
||||
// mask of enabled IDs, calculated on startup based on enabled features. boxId_e is used as bit index
|
||||
|
|
|
@ -146,6 +146,7 @@
|
|||
#include "flight/position.h"
|
||||
#include "flight/imu.h"
|
||||
#include "flight/mixer.h"
|
||||
#include "flight/mixer_init.h"
|
||||
#include "flight/pid.h"
|
||||
|
||||
#include "io/gps.h"
|
||||
|
@ -1270,10 +1271,13 @@ static void osdElementMainBatteryUsage(osdElementParms_t *element)
|
|||
{
|
||||
uint8_t remainingCapacityBars = 0;
|
||||
|
||||
if (batteryConfig()->batteryCapacity) {
|
||||
const float batteryRemaining = constrain(batteryConfig()->batteryCapacity - displayBasis, 0, batteryConfig()->batteryCapacity);
|
||||
remainingCapacityBars = ceilf((batteryRemaining / (batteryConfig()->batteryCapacity / MAIN_BATT_USAGE_STEPS)));
|
||||
}
|
||||
//if (batteryConfig()->batteryCapacity) {
|
||||
//const float batteryRemaining = constrain(batteryConfig()->batteryCapacity - displayBasis, 0, batteryConfig()->batteryCapacity);
|
||||
//remainingCapacityBars = ceilf((batteryRemaining / (batteryConfig()->batteryCapacity / MAIN_BATT_USAGE_STEPS)));
|
||||
const float maxBoost = 100.0f;
|
||||
const float batteryRemaining = constrain(mixerRuntime.afterburnerTankPercent, 0, maxBoost);
|
||||
remainingCapacityBars = ceilf((batteryRemaining / (maxBoost / MAIN_BATT_USAGE_STEPS)));
|
||||
//}
|
||||
|
||||
// Create empty battery indicator bar
|
||||
element->buff[0] = SYM_PB_START;
|
||||
|
@ -1284,7 +1288,12 @@ static void osdElementMainBatteryUsage(osdElementParms_t *element)
|
|||
if (remainingCapacityBars > 0 && remainingCapacityBars < MAIN_BATT_USAGE_STEPS) {
|
||||
element->buff[1 + remainingCapacityBars] = SYM_PB_END;
|
||||
}
|
||||
element->buff[MAIN_BATT_USAGE_STEPS+2] = '\0';
|
||||
//tfp_sprintf(element->buff, element->buff+"%d", mixerRuntime.afterburnerTanksRemaining);
|
||||
char tanksRemainingStr[1];
|
||||
tfp_sprintf(tanksRemainingStr, "%d", mixerRuntime.afterburnerTanksRemaining);
|
||||
element->buff[MAIN_BATT_USAGE_STEPS+2] = tanksRemainingStr[0];
|
||||
element->buff[MAIN_BATT_USAGE_STEPS+3] = '\0';
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue