diff --git a/companion/src/firmwares/generalsettings.h b/companion/src/firmwares/generalsettings.h
index 25e300628..2fb98e8e6 100644
--- a/companion/src/firmwares/generalsettings.h
+++ b/companion/src/firmwares/generalsettings.h
@@ -170,8 +170,8 @@ class GeneralSettings {
int gyroMax;
int gyroOffset;
- unsigned int pwrOnSpeed;
- unsigned int pwrOffSpeed;
+ int pwrOnSpeed;
+ int pwrOffSpeed;
bool switchPositionAllowedTaranis(int index) const;
bool switchSourceAllowedTaranis(int index) const;
diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp
index 8e54b853d..b4ec24d5b 100644
--- a/companion/src/firmwares/opentx/opentxeeprom.cpp
+++ b/companion/src/firmwares/opentx/opentxeeprom.cpp
@@ -2407,8 +2407,8 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, Board::Type
internalField.Append(new UnsignedField<2>(this, generalData.countryCode));
if (version >= 219 && IS_HORUS_OR_TARANIS(board)) {
- internalField.Append(new UnsignedField<2>(this, generalData.pwrOnSpeed, "Power On Speed"));
- internalField.Append(new UnsignedField<2>(this, generalData.pwrOffSpeed, "Power Off Speed"));
+ internalField.Append(new SignedField<2>(this, generalData.pwrOnSpeed, "Power On Speed"));
+ internalField.Append(new SignedField<2>(this, generalData.pwrOffSpeed, "Power Off Speed"));
internalField.Append(new SpareBitsField<2>(this));
}
else {
diff --git a/companion/src/generaledit/generalsetup.ui b/companion/src/generaledit/generalsetup.ui
index 9378b2dc0..5e2941508 100644
--- a/companion/src/generaledit/generalsetup.ui
+++ b/companion/src/generaledit/generalsetup.ui
@@ -2423,8 +2423,11 @@ p, li { white-space: pre-wrap; }
-
+
+ -1
+
- 3
+ 2
Qt::Horizontal
@@ -2433,8 +2436,11 @@ p, li { white-space: pre-wrap; }
-
+
+ -1
+
- 3
+ 2
Qt::Horizontal
diff --git a/radio/src/datastructs.h b/radio/src/datastructs.h
index 2b4c28f4c..dcc2fda60 100644
--- a/radio/src/datastructs.h
+++ b/radio/src/datastructs.h
@@ -772,8 +772,8 @@ PACK(struct RadioData {
NOBACKUP(uint8_t bluetoothBaudrate:4);
NOBACKUP(uint8_t bluetoothMode:4);
NOBACKUP(uint8_t countryCode:2);
- NOBACKUP(uint8_t pwrOnSpeed:2);
- NOBACKUP(uint8_t pwrOffSpeed:2);
+ NOBACKUP(int8_t pwrOnSpeed:2);
+ NOBACKUP(int8_t pwrOffSpeed:2);
NOBACKUP(uint8_t spare5:2);
NOBACKUP(uint8_t imperial:1);
NOBACKUP(uint8_t jitterFilter:1); /* 0 - active */
diff --git a/radio/src/gui/128x64/radio_setup.cpp b/radio/src/gui/128x64/radio_setup.cpp
index eef530c53..30b37b156 100644
--- a/radio/src/gui/128x64/radio_setup.cpp
+++ b/radio/src/gui/128x64/radio_setup.cpp
@@ -510,16 +510,16 @@ void menuRadioSetup(event_t event)
#endif
#if defined(PWR_BUTTON_PRESS)
- case ITEM_RADIO_SETUP_PWR_ON_SPEED:
+ case ITEM_RADIO_SETUP_PWR_ON_SPEED:
lcdDrawTextAlignedLeft(y, STR_PWR_ON_SPEED);
- lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.pwrOnSpeed, attr|LEFT);
- if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.pwrOnSpeed, 0, 3);
+ lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.pwrOnSpeed + 1, attr|LEFT);
+ if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.pwrOnSpeed, -1, 2);
break;
- case ITEM_RADIO_SETUP_PWR_OFF_SPEED:
+ case ITEM_RADIO_SETUP_PWR_OFF_SPEED:
lcdDrawTextAlignedLeft(y, STR_PWR_OFF_SPEED);
- lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.pwrOffSpeed, attr|LEFT);
- if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.pwrOffSpeed, 0, 3);
+ lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.pwrOffSpeed + 1, attr|LEFT);
+ if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.pwrOffSpeed, -1, 2);
break;
#endif
diff --git a/radio/src/gui/212x64/radio_setup.cpp b/radio/src/gui/212x64/radio_setup.cpp
index edf3459e1..2eedcc884 100644
--- a/radio/src/gui/212x64/radio_setup.cpp
+++ b/radio/src/gui/212x64/radio_setup.cpp
@@ -473,14 +473,14 @@ void menuRadioSetup(event_t event)
#if defined(PWR_BUTTON_PRESS)
case ITEM_RADIO_SETUP_PWR_ON_SPEED:
lcdDrawTextAlignedLeft(y, STR_PWR_ON_SPEED);
- lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.pwrOnSpeed, attr|LEFT);
- if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.pwrOnSpeed, 0, 3);
+ lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.pwrOnSpeed + 1, attr|LEFT);
+ if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.pwrOnSpeed, -1, 2);
break;
case ITEM_RADIO_SETUP_PWR_OFF_SPEED:
lcdDrawTextAlignedLeft(y, STR_PWR_OFF_SPEED);
- lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.pwrOffSpeed, attr|LEFT);
- if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.pwrOffSpeed, 0, 3);
+ lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.pwrOffSpeed + 1, attr|LEFT);
+ if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.pwrOffSpeed, -1, 2);
break;
#endif
diff --git a/radio/src/gui/480x272/radio_setup.cpp b/radio/src/gui/480x272/radio_setup.cpp
index 4e679c909..a26d2d08a 100644
--- a/radio/src/gui/480x272/radio_setup.cpp
+++ b/radio/src/gui/480x272/radio_setup.cpp
@@ -385,7 +385,7 @@ bool menuRadioSetup(event_t event)
#if defined(PWR_BUTTON_PRESS)
case ITEM_SETUP_PWR_OFF_SPEED:
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_PWR_OFF_SPEED);
- g_eeGeneral.pwrOffSpeed = editSlider(RADIO_SETUP_2ND_COLUMN, y, event, g_eeGeneral.pwrOffSpeed, 0, 3, attr);
+ g_eeGeneral.pwrOffSpeed = editSlider(RADIO_SETUP_2ND_COLUMN, y, event, g_eeGeneral.pwrOffSpeed, -1, 2, attr);
break;
#endif
diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp
index 92100ee6b..186bc43da 100644
--- a/radio/src/opentx.cpp
+++ b/radio/src/opentx.cpp
@@ -1729,17 +1729,10 @@ void copyTrimsToOffset(uint8_t ch)
}
-const uint8_t _pwrOnOffDuration_lookup[] = {
- 200, // 2s
- 100, // 1s
- 50, // 0.5s
- 0, // none
-};
-
#if defined(STARTUP_ANIMATION)
-#define PWR_PRESS_DURATION_MIN() (_pwrOnOffDuration_lookup[g_eeGeneral.pwrOnSpeed & 3])
-#define PWR_PRESS_DURATION_MAX 500 // 5s
+#define PWR_PRESS_DURATION_MIN() (2 - g_eeGeneral.pwrOnSpeed)
+#define PWR_PRESS_DURATION_MAX 500 // 5s
void runStartupAnimation()
{
@@ -2035,7 +2028,7 @@ int main()
#if !defined(SIMU)
#if defined(PWR_BUTTON_PRESS)
-#define PWR_PRESS_SHUTDOWN_DELAY() (_pwrOnOffDuration_lookup[g_eeGeneral.pwrOffSpeed & 3])
+#define PWR_PRESS_SHUTDOWN_DELAY() (2 - g_eeGeneral.pwrOffSpeed)
uint32_t pwr_press_time = 0;