diff --git a/companion/src/eeprominterface.h b/companion/src/eeprominterface.h index 7d56bbc51..da8862c87 100644 --- a/companion/src/eeprominterface.h +++ b/companion/src/eeprominterface.h @@ -1626,7 +1626,9 @@ class Firmware { } virtual int getCapability(const Capability) = 0; - + + virtual QTime getMaxTimerStart() = 0; + virtual bool isTelemetrySourceAvailable(int source) = 0; virtual int isAvailable(PulsesProtocol proto, int port=0) = 0; diff --git a/companion/src/firmwares/opentx/opentxinterface.cpp b/companion/src/firmwares/opentx/opentxinterface.cpp index f583dab63..21d77fcd4 100644 --- a/companion/src/firmwares/opentx/opentxinterface.cpp +++ b/companion/src/firmwares/opentx/opentxinterface.cpp @@ -813,6 +813,16 @@ int OpenTxFirmware::getCapability(const Capability capability) } } +QTime OpenTxFirmware::getMaxTimerStart() +{ + if (IS_TARANIS(board)) + return QTime(23, 59, 59); + else if (IS_ARM(board)) + return QTime(8, 59, 59); + else + return QTime(0, 59, 59); +} + bool OpenTxFirmware::isTelemetrySourceAvailable(int source) { if (IS_TARANIS(board) && (source == TELEMETRY_SOURCE_RSSI_TX)) diff --git a/companion/src/firmwares/opentx/opentxinterface.h b/companion/src/firmwares/opentx/opentxinterface.h index 41c1bf6a2..32a28e722 100644 --- a/companion/src/firmwares/opentx/opentxinterface.h +++ b/companion/src/firmwares/opentx/opentxinterface.h @@ -118,6 +118,8 @@ class OpenTxFirmware: public Firmware { virtual QString getFirmwareUrl(); virtual int getCapability(const Capability); + + virtual QTime getMaxTimerStart(); virtual bool isTelemetrySourceAvailable(int source); diff --git a/companion/src/modeledit/customfunctions.cpp b/companion/src/modeledit/customfunctions.cpp index aa9c8073f..cdcadfe3f 100644 --- a/companion/src/modeledit/customfunctions.cpp +++ b/companion/src/modeledit/customfunctions.cpp @@ -397,7 +397,7 @@ void CustomFunctionsPanel::refreshCustomFunction(int i, bool modified) else if (func>=FuncSetTimer1 && func<=FuncSetTimer3) { if (modified) cfn.param = QTimeS(fswtchParamTime[i]->time()).seconds(); fswtchParamTime[i]->setMinimumTime(QTime(0, 0, 0)); - fswtchParamTime[i]->setMaximumTime(QTime(0, 59, 59)); + fswtchParamTime[i]->setMaximumTime(firmware->getMaxTimerStart()); fswtchParamTime[i]->setTime(QTimeS(cfn.param)); widgetsMask |= CUSTOM_FUNCTION_TIME_PARAM + CUSTOM_FUNCTION_ENABLE; } diff --git a/companion/src/modeledit/setup.cpp b/companion/src/modeledit/setup.cpp index bf3ffff4e..351500a85 100644 --- a/companion/src/modeledit/setup.cpp +++ b/companion/src/modeledit/setup.cpp @@ -42,6 +42,8 @@ TimerPanel::TimerPanel(QWidget *parent, ModelData & model, TimerData & timer, Ge ui->countdownBeep->addItem(tr("Voice"), TimerData::COUNTDOWN_VOICE); ui->countdownBeep->addItem(tr("Haptic"), TimerData::COUNTDOWN_HAPTIC); } + + ui->value->setMaximumTime(firmware->getMaxTimerStart()); ui->persistent->setField(timer.persistent, this); ui->persistent->addItem(tr("Not persistent"), 0); @@ -66,9 +68,11 @@ TimerPanel::~TimerPanel() void TimerPanel::update() { - int min = timer.val / 60; - int sec = timer.val % 60; - ui->value->setTime(QTime(0, min, sec)); + int hour = timer.val / 3600; + int min = (timer.val - (hour * 3600)) / 60; + int sec = (timer.val - (hour * 3600)) % 60; + + ui->value->setTime(QTime(hour, min, sec)); if (firmware->getCapability(PermTimers)) { int sign = 1; @@ -94,7 +98,7 @@ QWidget * TimerPanel::getLastFocus() void TimerPanel::on_value_editingFinished() { - timer.val = ui->value->time().minute()*60 + ui->value->time().second(); + timer.val = ui->value->time().hour()*3600 + ui->value->time().minute()*60 + ui->value->time().second(); emit modified(); } diff --git a/companion/src/modeledit/setup_timer.ui b/companion/src/modeledit/setup_timer.ui index b7066d0d9..137428c4a 100644 --- a/companion/src/modeledit/setup_timer.ui +++ b/companion/src/modeledit/setup_timer.ui @@ -18,7 +18,7 @@ - -1 + 6 0 @@ -39,10 +39,10 @@ true - QDateTimeEdit::MinuteSection + QDateTimeEdit::HourSection - mm:ss + hh:mm:ss diff --git a/radio/src/gui/9x/lcd.cpp b/radio/src/gui/9x/lcd.cpp index ec0d97b75..c20d4ae4b 100644 --- a/radio/src/gui/9x/lcd.cpp +++ b/radio/src/gui/9x/lcd.cpp @@ -609,7 +609,7 @@ void putsTimer(coord_t x, coord_t y, putstime_t tme, LcdFlags att, LcdFlags att2 #if defined(CPUARM) char separator = ':'; - if (tme >= 3600 && (~att & DBLSIZE)) { + if (tme >= 3600) { qr = div(qr.quot, 60); separator = CHR_HOUR; } @@ -617,6 +617,10 @@ void putsTimer(coord_t x, coord_t y, putstime_t tme, LcdFlags att, LcdFlags att2 #define separator ':' #endif lcdDrawNumber(x, y, qr.quot, att|LEADING0|LEFT, 2); +#if defined(CPUARM) + if (separator == CHR_HOUR) + att &= ~DBLSIZE; +#endif #if defined(CPUARM) && defined(RTCLOCK) if (att&TIMEBLINK) lcdDrawChar(lcdLastPos, y, separator, BLINK); diff --git a/radio/src/gui/9x/menu_model_custom_functions.cpp b/radio/src/gui/9x/menu_model_custom_functions.cpp index efe7194eb..a298cc2be 100644 --- a/radio/src/gui/9x/menu_model_custom_functions.cpp +++ b/radio/src/gui/9x/menu_model_custom_functions.cpp @@ -196,7 +196,7 @@ void menuCustomFunctions(uint8_t event, CustomFunctionData * functions, CustomFu #endif #if defined(CPUARM) else if (func == FUNC_SET_TIMER) { - val_max = 59*60+59; + val_max = 539*60+59; putsTimer(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT, attr); } #endif diff --git a/radio/src/gui/9x/menu_model_setup.cpp b/radio/src/gui/9x/menu_model_setup.cpp index da2c2852c..c25f4eaa0 100644 --- a/radio/src/gui/9x/menu_model_setup.cpp +++ b/radio/src/gui/9x/menu_model_setup.cpp @@ -205,13 +205,14 @@ void menuModelSetup(uint8_t event) break; } case 1: - CHECK_INCDEC_MODELVAR_ZERO(event, qr.quot, 59); + CHECK_INCDEC_MODELVAR_ZERO(event, qr.quot, 539); // 8:59 timer->start = qr.rem + qr.quot*60; break; case 2: qr.rem -= checkIncDecModel(event, qr.rem+2, 1, 62)-2; timer->start -= qr.rem ; if ((int16_t)timer->start < 0) timer->start=0; + if ((int16_t)timer->start > 5999) timer->start=32399; // 8:59:59 break; } } @@ -285,6 +286,8 @@ void menuModelSetup(uint8_t event) case 2: qr.rem -= checkIncDecModel(event, qr.rem+2, 1, 62)-2; timer->start -= qr.rem ; + if ((int16_t)timer->start < 0) timer->start=0; + if ((int32_t)timer->start > 3599) timer->start=3599; // 59:59 break; } } diff --git a/radio/src/gui/taranis/menu_model_custom_functions.cpp b/radio/src/gui/taranis/menu_model_custom_functions.cpp index f2d41fb4b..d0fdd2ae5 100644 --- a/radio/src/gui/taranis/menu_model_custom_functions.cpp +++ b/radio/src/gui/taranis/menu_model_custom_functions.cpp @@ -267,8 +267,8 @@ void menuCustomFunctions(uint8_t event, CustomFunctionData * functions, CustomFu lcdDrawTextAtIndex(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, "\004Int.Ext.", CFN_PARAM(cfn), attr); } else if (func == FUNC_SET_TIMER) { - val_max = 59*60+59; - putsTimer(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT, attr); + val_max = 539*60+59; //8:59:59 + putsTimer(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT|TIMEHOUR, attr); } else if (func == FUNC_PLAY_SOUND) { val_max = AU_SPECIAL_SOUND_LAST-AU_SPECIAL_SOUND_FIRST-1; diff --git a/radio/src/gui/taranis/menu_model_setup.cpp b/radio/src/gui/taranis/menu_model_setup.cpp index b62e980f3..7f8bf1e46 100644 --- a/radio/src/gui/taranis/menu_model_setup.cpp +++ b/radio/src/gui/taranis/menu_model_setup.cpp @@ -122,9 +122,8 @@ void editTimerMode(int timerIdx, coord_t y, LcdFlags attr, uint8_t event) TimerData * timer = &g_model.timers[timerIdx]; drawStringWithIndex(0*FW, y, STR_TIMER, timerIdx+1); putsTimerMode(MODEL_SETUP_2ND_COLUMN, y, timer->mode, menuHorizontalPosition==0 ? attr : 0); - - putsTimer(MODEL_SETUP_2ND_COLUMN+5*FW-2+5*FWNUM+1, y, timer->start, menuHorizontalPosition==1 ? attr : 0, menuHorizontalPosition==2 ? attr : 0); - if (attr && menuHorizontalPosition < 0) lcdDrawFilledRect(MODEL_SETUP_2ND_COLUMN-1, y-1, LCD_W-MODEL_SETUP_2ND_COLUMN-MENUS_SCROLLBAR_WIDTH+1, FH+1); + putsTimer(MODEL_SETUP_2ND_COLUMN+5*FW-2+5*FWNUM+1, y, timer->start, menuHorizontalPosition==1 ? attr|TIMEHOUR : TIMEHOUR, menuHorizontalPosition==2 ? attr|TIMEHOUR : TIMEHOUR); + if (attr && menuHorizontalPosition < 0) drawFilledRect(MODEL_SETUP_2ND_COLUMN-1, y-1, 11*FW, FH+1); if (attr && s_editMode>0) { div_t qr = div(timer->start, 60); switch (menuHorizontalPosition) { @@ -148,13 +147,14 @@ void editTimerMode(int timerIdx, coord_t y, LcdFlags attr, uint8_t event) break; } case 1: - CHECK_INCDEC_MODELVAR_ZERO(event, qr.quot, 59); + qr.quot = checkIncDec(event, qr.quot, 0, 1439, EE_MODEL | NO_INCDEC_MARKS); // 23h59 timer->start = qr.rem + qr.quot*60; break; case 2: qr.rem -= checkIncDecModel(event, qr.rem+2, 1, 62)-2; timer->start -= qr.rem ; if ((int16_t)timer->start < 0) timer->start=0; + if ((int32_t)timer->start > 86399) timer->start=86399; // 23h59:59 break; } }