feat: Allow the timer count direction to be selected (#2038)
* timer direction: ellapsed or left * Add AUDIO announcement support * Storage for showElapsed * Translations * Fix storage * BW implementation * Different BW implementation * Companion support * Color LCD implementation and rebase to lvgl * Fix problems found by raphaelcoeffic * chore: Regenerate the YAML files properly * fix: Remove unused `TR_SHOW` remnant * chore: Formatting and cleanup * fix: Timer dir choice was shown in wrong place Wrong newline used in ce23b50 * Fix cpn ui triggers, remove unnecessary code and some formatting * fix(colorlcd): Hide timer dir opt if zero value Co-authored-by: Peter Feerick <peter.feerick@gmail.com> Co-authored-by: elecpower <neilh713@tpg.com.au>
This commit is contained in:
co-authored by
Peter Feerick
elecpower
parent
415b566a79
commit
be7a6a51ab
@@ -283,6 +283,7 @@ Node convert<TimerData>::encode(const TimerData& rhs)
|
||||
node["persistent"] = rhs.persistent;
|
||||
node["countdownStart"] = rhs.countdownStart;
|
||||
node["value"] = rhs.pvalue;
|
||||
node["showElapsed"] = rhs.showElapsed;
|
||||
return node;
|
||||
}
|
||||
|
||||
@@ -297,6 +298,7 @@ bool convert<TimerData>::decode(const Node& node, TimerData& rhs)
|
||||
node["persistent"] >> rhs.persistent;
|
||||
node["countdownStart"] >> rhs.countdownStart;
|
||||
node["value"] >> rhs.pvalue;
|
||||
node["showElapsed"] >> rhs.showElapsed;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -180,6 +180,16 @@ QString TimerData::modeToString(const int value)
|
||||
}
|
||||
}
|
||||
|
||||
QString TimerData::showElapsedToString(const unsigned int value)
|
||||
{
|
||||
return (value) ? tr("Show Elapsed") : tr("Show Remaining");
|
||||
}
|
||||
|
||||
QString TimerData::showElapsedToString() const
|
||||
{
|
||||
return showElapsedToString(showElapsed);
|
||||
}
|
||||
|
||||
// static
|
||||
AbstractStaticItemModel * TimerData::countdownBeepItemModel()
|
||||
{
|
||||
@@ -235,3 +245,16 @@ AbstractStaticItemModel * TimerData::modeItemModel()
|
||||
mdl->loadItemList();
|
||||
return mdl;
|
||||
}
|
||||
|
||||
AbstractStaticItemModel * TimerData::showElapsedItemModel()
|
||||
{
|
||||
AbstractStaticItemModel *mdl = new AbstractStaticItemModel();
|
||||
mdl->setName(AIM_TIMER_SHOWELAPSED);
|
||||
|
||||
for (unsigned int i = 0; i < TIMER_SHOW_COUNT; i++) {
|
||||
mdl->appendToItemList(showElapsedToString(i), i);
|
||||
}
|
||||
|
||||
mdl->loadItemList();
|
||||
return mdl;
|
||||
}
|
||||
|
||||
@@ -32,6 +32,7 @@ constexpr char AIM_TIMER_COUNTDOWNBEEP[] {"timerdata.countdownBeep"};
|
||||
constexpr char AIM_TIMER_COUNTDOWNSTART[] {"timerdata.countdownStart"};
|
||||
constexpr char AIM_TIMER_PERSISTENT[] {"timerdata.persistent"};
|
||||
constexpr char AIM_TIMER_MODE[] {"timerdata.mode"};
|
||||
constexpr char AIM_TIMER_SHOWELAPSED[] {"timerdata.showElapsed"};
|
||||
|
||||
constexpr int TIMER_NAME_LEN {8};
|
||||
|
||||
@@ -74,6 +75,12 @@ class TimerData {
|
||||
TIMERMODE_MAX = TIMERMODE_COUNT - 1
|
||||
};
|
||||
|
||||
enum TimerShowDirection {
|
||||
TIMER_SHOW_REMAINING,
|
||||
TIMER_SHOW_ELAPSED,
|
||||
TIMER_SHOW_COUNT
|
||||
};
|
||||
|
||||
TimerData() { clear(); }
|
||||
|
||||
RawSwitch swtch;
|
||||
@@ -85,6 +92,7 @@ class TimerData {
|
||||
unsigned int persistent;
|
||||
int countdownStart;
|
||||
int pvalue;
|
||||
unsigned int showElapsed;
|
||||
|
||||
void convert(RadioDataConversionState & cstate);
|
||||
void clear();
|
||||
@@ -97,6 +105,8 @@ class TimerData {
|
||||
QString pvalueToString() const;
|
||||
QString valToString() const;
|
||||
QString modeToString() const;
|
||||
QString showElapsedToString() const;
|
||||
|
||||
void countdownBeepChanged();
|
||||
void modeChanged();
|
||||
|
||||
@@ -106,9 +116,10 @@ class TimerData {
|
||||
static QString pvalueToString(const int value);
|
||||
static QString valToString(const int value);
|
||||
static QString modeToString(const int value);
|
||||
static QString showElapsedToString(const unsigned int value);
|
||||
static AbstractStaticItemModel * countdownBeepItemModel();
|
||||
static AbstractStaticItemModel * countdownStartItemModel();
|
||||
static AbstractStaticItemModel * persistentItemModel();
|
||||
static AbstractStaticItemModel * modeItemModel();
|
||||
|
||||
static AbstractStaticItemModel * showElapsedItemModel();
|
||||
};
|
||||
|
||||
@@ -59,6 +59,9 @@ TimerPanel::TimerPanel(QWidget * parent, ModelData & model, TimerData & timer, G
|
||||
|
||||
ui->value->setField(timer.val, this);
|
||||
ui->value->setMaximumTime(firmware->getMaxTimerStart());
|
||||
connect(ui->value, &AutoTimeEdit::currentDataChanged, [=](const int val) {
|
||||
update();
|
||||
});
|
||||
|
||||
ui->mode->setModel(panelItemModels->getItemModel(AIM_TIMER_MODE));
|
||||
ui->mode->setField(timer.mode, this);
|
||||
@@ -85,6 +88,10 @@ TimerPanel::TimerPanel(QWidget * parent, ModelData & model, TimerData & timer, G
|
||||
ui->countdownStart->setModel(panelItemModels->getItemModel(AIM_TIMER_COUNTDOWNSTART));
|
||||
ui->countdownStart->setField(timer.countdownStart, this);
|
||||
|
||||
|
||||
ui->showElapsed->setModel(panelItemModels->getItemModel(AIM_TIMER_SHOWELAPSED));
|
||||
ui->showElapsed->setField(timer.showElapsed, this);
|
||||
|
||||
disableMouseScrolling();
|
||||
QWidget::setTabOrder(prevFocus, ui->name);
|
||||
QWidget::setTabOrder(ui->name, ui->value);
|
||||
@@ -93,6 +100,7 @@ TimerPanel::TimerPanel(QWidget * parent, ModelData & model, TimerData & timer, G
|
||||
QWidget::setTabOrder(ui->countdownBeep, ui->countdownStart);
|
||||
QWidget::setTabOrder(ui->countdownStart, ui->minuteBeep);
|
||||
QWidget::setTabOrder(ui->minuteBeep, ui->persistent);
|
||||
QWidget::setTabOrder(ui->persistent, ui->showElapsed);
|
||||
|
||||
update();
|
||||
lock = false;
|
||||
@@ -114,6 +122,7 @@ void TimerPanel::update()
|
||||
ui->countdownBeep->updateValue();
|
||||
ui->minuteBeep->updateValue();
|
||||
ui->countdownStart->updateValue();
|
||||
ui->showElapsed->updateValue();
|
||||
|
||||
if (timer.mode != TimerData::TIMERMODE_OFF)
|
||||
ui->swtch->setEnabled(true);
|
||||
@@ -134,6 +143,13 @@ void TimerPanel::update()
|
||||
ui->persistentValue->setText(timer.pvalueToString());
|
||||
}
|
||||
|
||||
if (timer.val) {
|
||||
ui->showElapsed->setEnabled(true);
|
||||
}
|
||||
else {
|
||||
ui->showElapsed->setEnabled(false);
|
||||
}
|
||||
|
||||
lock = false;
|
||||
}
|
||||
|
||||
@@ -1276,7 +1292,7 @@ SetupPanel::SetupPanel(QWidget * parent, ModelData & model, GeneralSettings & ge
|
||||
panelItemModels->registerItemModel(TimerData::persistentItemModel());
|
||||
panelItemModels->registerItemModel(TimerData::modeItemModel());
|
||||
panelFilteredModels->registerItemModel(new FilteredItemModel(ModelData::trainerModeItemModel(generalSettings, firmware)), FIM_TRAINERMODE);
|
||||
|
||||
panelItemModels->registerItemModel(TimerData::showElapsedItemModel());
|
||||
Board::Type board = firmware->getBoard();
|
||||
|
||||
memset(modules, 0, sizeof(modules));
|
||||
|
||||
@@ -223,7 +223,7 @@ class SetupPanel : public ModelPanel
|
||||
ModulePanel * modules[CPN_MAX_MODULES + 1];
|
||||
TimerPanel * timers[CPN_MAX_TIMERS];
|
||||
FunctionSwitchesPanel * funcswitches;
|
||||
|
||||
|
||||
void updateStartupSwitches();
|
||||
void updatePotWarnings();
|
||||
void updateBeepCenter();
|
||||
|
||||
@@ -91,6 +91,9 @@
|
||||
<item>
|
||||
<widget class="AutoComboBox" name="persistent"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="AutoComboBox" name="showElapsed"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="persistentValue">
|
||||
<property name="text">
|
||||
|
||||
@@ -352,6 +352,7 @@ QString MultiModelPrinter::printTimers()
|
||||
COMPARECELLWIDTH(model->timers[i].countdownStartToString(), 10);
|
||||
COMPARECELLWIDTH(DataHelpers::boolToString(model->timers[i].minuteBeep, DataHelpers::BOOL_FMT_YESNO), 10);
|
||||
COMPARECELLWIDTH(model->timers[i].persistentToString(false), 10);
|
||||
COMPARECELLWIDTH(model->timers[i].showElapsedToString(), 12);
|
||||
columns.appendRowEnd();
|
||||
}
|
||||
columns.appendTableEnd();
|
||||
|
||||
+12
-12
@@ -54,7 +54,7 @@ static inline void check_struct()
|
||||
CHKSIZE(LogicalSwitchData, 9);
|
||||
CHKSIZE(CustomFunctionData, 11);
|
||||
CHKSIZE(FlightModeData, 28 + 2*NUM_TRIMS);
|
||||
CHKSIZE(TimerData, 11);
|
||||
CHKSIZE(TimerData, 12);
|
||||
CHKSIZE(SwashRingData, 8);
|
||||
CHKSIZE(FrSkyBarData, 6);
|
||||
CHKSIZE(FrSkyLineData, 4);
|
||||
@@ -68,7 +68,7 @@ static inline void check_struct()
|
||||
CHKSIZE(LogicalSwitchData, 9);
|
||||
CHKSIZE(CustomFunctionData, 11);
|
||||
CHKSIZE(FlightModeData, 40);
|
||||
CHKSIZE(TimerData, 16);
|
||||
CHKSIZE(TimerData, 17);
|
||||
CHKSIZE(SwashRingData, 8);
|
||||
CHKSIZE(FrSkyBarData, 6);
|
||||
CHKSIZE(FrSkyLineData, 6);
|
||||
@@ -81,7 +81,7 @@ static inline void check_struct()
|
||||
CHKSIZE(LimitData, 13);
|
||||
CHKSIZE(CustomFunctionData, 9);
|
||||
CHKSIZE(FlightModeData, 44);
|
||||
CHKSIZE(TimerData, 16);
|
||||
CHKSIZE(TimerData, 17);
|
||||
CHKSIZE(SwashRingData, 8);
|
||||
CHKSIZE(ModelHeader, 31);
|
||||
CHKSIZE(CurveHeader, 4);
|
||||
@@ -118,33 +118,33 @@ static inline void check_struct()
|
||||
|
||||
#if defined(PCBXLITES)
|
||||
CHKSIZE(RadioData, 861);
|
||||
CHKSIZE(ModelData, 6161);
|
||||
CHKSIZE(ModelData, 6164);
|
||||
#elif defined(PCBXLITE)
|
||||
CHKSIZE(RadioData, 859);
|
||||
CHKSIZE(ModelData, 6161);
|
||||
CHKSIZE(ModelData, 6164);
|
||||
#elif defined(RADIO_TPRO)
|
||||
CHKSIZE(RadioData, 842);
|
||||
CHKSIZE(ModelData, 6186);
|
||||
CHKSIZE(ModelData, 6189);
|
||||
#elif defined(PCBX7)
|
||||
CHKSIZE(RadioData, 865);
|
||||
CHKSIZE(ModelData, 6161);
|
||||
CHKSIZE(ModelData, 6164);
|
||||
#elif defined(PCBX9E)
|
||||
CHKSIZE(RadioData, 955);
|
||||
CHKSIZE(ModelData, 6613);
|
||||
CHKSIZE(ModelData, 6616);
|
||||
#elif defined(PCBX9D) || defined(PCBX9DP)
|
||||
CHKSIZE(RadioData, 897);
|
||||
CHKSIZE(ModelData, 6605);
|
||||
CHKSIZE(ModelData, 6608);
|
||||
#elif defined(PCBHORUS)
|
||||
#if defined(PCBX10)
|
||||
CHKSIZE(RadioData, 923);
|
||||
CHKSIZE(ModelData, 11025);
|
||||
CHKSIZE(ModelData, 11028);
|
||||
#else
|
||||
CHKSIZE(RadioData, 905);
|
||||
CHKSIZE(ModelData, 11023);
|
||||
CHKSIZE(ModelData, 11026);
|
||||
#endif
|
||||
#elif defined(PCBNV14)
|
||||
CHKSIZE(RadioData, 851);
|
||||
CHKSIZE(ModelData, 10839);
|
||||
CHKSIZE(ModelData, 10842);
|
||||
#endif
|
||||
|
||||
#undef CHKSIZE
|
||||
|
||||
@@ -237,6 +237,8 @@ PACK(struct TimerData {
|
||||
uint32_t minuteBeep:1;
|
||||
uint32_t persistent:2;
|
||||
int32_t countdownStart:2;
|
||||
uint8_t showElapsed:1;
|
||||
uint8_t spare:7 SKIP;
|
||||
NOBACKUP(char name[LEN_TIMER_NAME]);
|
||||
});
|
||||
|
||||
|
||||
@@ -925,18 +925,23 @@ void drawTimerWithMode(coord_t x, coord_t y, uint8_t index, LcdFlags att)
|
||||
const TimerData &timer = g_model.timers[index];
|
||||
|
||||
if (timer.mode) {
|
||||
const TimerData &timerData = g_model.timers[index];
|
||||
const TimerState &timerState = timersStates[index];
|
||||
const uint8_t negative = (timerState.val < 0 ? BLINK | INVERS : 0);
|
||||
if (timerState.val < 60 * 60) { // display MM:SS
|
||||
div_t qr = div((int) abs(timerState.val), 60);
|
||||
int val = timerState.val;
|
||||
if (timerData.start && timerData.showElapsed &&
|
||||
timerData.start != timerState.val)
|
||||
val = (int)timerData.start - (int)timerState.val;
|
||||
if (val < 60 * 60) { // display MM:SS
|
||||
div_t qr = div((int) abs(val), 60);
|
||||
lcdDrawNumber(x - 5, y, qr.rem, att | LEADING0 | negative, 2);
|
||||
lcdDrawText(lcdLastLeftPos, y, ":", att | BLINK | negative);
|
||||
lcdDrawNumber(lcdLastLeftPos, y, qr.quot, att | negative);
|
||||
if (negative)
|
||||
lcdDrawText(lcdLastLeftPos, y, "-", att | negative);
|
||||
}
|
||||
else if (timerState.val < (99 * 60 * 60) + (59 * 60)) { // display HHhMM
|
||||
div_t qr = div((int) (abs(timerState.val) / 60), 60);
|
||||
else if (val < (99 * 60 * 60) + (59 * 60)) { // display HHhMM
|
||||
div_t qr = div((int) (abs(val) / 60), 60);
|
||||
lcdDrawNumber(x - 5, y, qr.rem, att | LEADING0, 2);
|
||||
lcdDrawText(lcdLastLeftPos, y, "h", att);
|
||||
lcdDrawNumber(lcdLastLeftPos, y, qr.quot, att);
|
||||
@@ -945,7 +950,7 @@ void drawTimerWithMode(coord_t x, coord_t y, uint8_t index, LcdFlags att)
|
||||
}
|
||||
else { //display HHHH for crazy large persistent timers
|
||||
lcdDrawText(x - 5, y, "h", att);
|
||||
lcdDrawNumber(lcdLastLeftPos, y, timerState.val / 3600, att);
|
||||
lcdDrawNumber(lcdLastLeftPos, y, val / 3600, att);
|
||||
}
|
||||
uint8_t xLabel = (negative ? x - 56 : x - 49);
|
||||
uint8_t len = zlen(timer.name, LEN_TIMER_NAME);
|
||||
|
||||
@@ -155,7 +155,7 @@ void menuModelLimitsOne(event_t event)
|
||||
|
||||
case ITEM_OUTPUTONE_DIR:
|
||||
{
|
||||
lcdDrawTextAlignedLeft(y, TR_LIMITS_HEADERS_DIRECTION);
|
||||
lcdDrawTextAlignedLeft(y, STR_LIMITS_HEADERS_DIRECTION);
|
||||
lcdDrawTextAtIndex(LIMITS_ONE_2ND_COLUMN, y, STR_MMMINV, ld->revert, attr);
|
||||
if (active) {
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, ld->revert, 1);
|
||||
|
||||
@@ -188,7 +188,7 @@ enum MenuModelSetupItems {
|
||||
ITEM_MODEL_SETUP_TRAINER_LABEL,
|
||||
ITEM_MODEL_SETUP_TRAINER_MODE,
|
||||
#if defined(BLUETOOTH)
|
||||
ITEM_MODEL_SETUP_TRAINER_BLUETOOTH,
|
||||
ITEM_MODEL_SETUP_TRAINER_BLUETOOTH,
|
||||
#endif
|
||||
ITEM_MODEL_SETUP_TRAINER_CHANNELS,
|
||||
ITEM_MODEL_SETUP_TRAINER_PPM_PARAMS,
|
||||
@@ -261,11 +261,13 @@ inline uint8_t MODULE_SUBTYPE_ROWS(int moduleIdx)
|
||||
|
||||
#define POT_WARN_ROWS ((g_model.potsWarnMode) ? (uint8_t)(NUM_POTS+NUM_SLIDERS) : (uint8_t)0)
|
||||
#define TIMER_ROWS(x) \
|
||||
1, 0, 1, 0, 0, \
|
||||
1, 0, \
|
||||
(uint8_t)((g_model.timers[x].start) ? 2 : 1), \
|
||||
0, 0, \
|
||||
g_model.timers[x].countdownBeep != COUNTDOWN_SILENT ? (uint8_t)1 \
|
||||
: (uint8_t)0
|
||||
|
||||
#define EXTRA_MODULE_ROWS
|
||||
#define EXTRA_MODULE_ROWS
|
||||
|
||||
#if defined(FUNCTION_SWITCHES)
|
||||
#define FUNCTION_SWITCHES_ROWS READONLY_ROW, NAVIGATION_LINE_BY_LINE|3, NAVIGATION_LINE_BY_LINE|3, NAVIGATION_LINE_BY_LINE|3, NAVIGATION_LINE_BY_LINE|3, NAVIGATION_LINE_BY_LINE|3, NAVIGATION_LINE_BY_LINE|3, NAVIGATION_LINE_BY_LINE|(NUM_FUNCTIONS_SWITCHES-1),
|
||||
@@ -571,6 +573,12 @@ void menuModelSetup(event_t event)
|
||||
menuHorizontalPosition == 0 ? attr : 0,
|
||||
menuHorizontalPosition == 1 ? attr : 0);
|
||||
|
||||
if (timer->start) {
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN + 5 * FW, y, STR_TIMER_DIR,
|
||||
timer->showElapsed,
|
||||
menuHorizontalPosition == 2 ? attr : 0);
|
||||
}
|
||||
|
||||
if (attr && s_editMode > 0) {
|
||||
div_t qr = div(timer->start, 60);
|
||||
switch (menuHorizontalPosition) {
|
||||
@@ -586,6 +594,12 @@ void menuModelSetup(event_t event)
|
||||
if ((int16_t) timer->start > 5999)
|
||||
timer->start = 32399; // 8:59:59
|
||||
break;
|
||||
case 2:
|
||||
if (timer->start) {
|
||||
timer->showElapsed =
|
||||
checkIncDecModel(event, timer->showElapsed, 0, 1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -225,6 +225,12 @@ void editTimerStart(int timerIdx, coord_t y, LcdFlags attr, event_t event)
|
||||
menuHorizontalPosition == 0 ? attr : 0,
|
||||
menuHorizontalPosition == 1 ? attr : 0);
|
||||
|
||||
if (g_model.timers[timerIdx].start) {
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_TIMER_DIR,
|
||||
g_model.timers[timerIdx].showElapsed,
|
||||
menuHorizontalPosition == 2 ? attr : 0);
|
||||
}
|
||||
|
||||
if (attr && menuHorizontalPosition < 0) {
|
||||
lcdDrawFilledRect(MODEL_SETUP_2ND_COLUMN - 1, y - 1, 4 * FW, FH + 1);
|
||||
}
|
||||
@@ -242,6 +248,12 @@ void editTimerStart(int timerIdx, coord_t y, LcdFlags attr, event_t event)
|
||||
if ((int16_t)timer->start < 0) timer->start = 0;
|
||||
if ((int16_t)timer->start > 5999) timer->start = 32399; // 8:59:59
|
||||
break;
|
||||
case 2:
|
||||
if (g_model.timers[timerIdx].start) {
|
||||
g_model.timers[timerIdx].showElapsed = checkIncDecModel(
|
||||
event, g_model.timers[timerIdx].showElapsed, 0, 1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -289,7 +301,10 @@ void editTimerCountdown(int timerIdx, coord_t y, LcdFlags attr, event_t event)
|
||||
#endif
|
||||
|
||||
#define TIMER_ROWS(x) \
|
||||
1 | NAVIGATION_LINE_BY_LINE, 0, 1 | NAVIGATION_LINE_BY_LINE, 0, 0, \
|
||||
1 | NAVIGATION_LINE_BY_LINE, 0, \
|
||||
(uint8_t)(((g_model.timers[x].start) ? 2 : 1) | \
|
||||
NAVIGATION_LINE_BY_LINE), \
|
||||
0, 0, \
|
||||
g_model.timers[x].countdownBeep != COUNTDOWN_SILENT ? (uint8_t)1 \
|
||||
: (uint8_t)0
|
||||
|
||||
@@ -520,17 +535,22 @@ void menuModelSetup(event_t event)
|
||||
editTimerStart(0, y, attr, event);
|
||||
break;
|
||||
|
||||
case ITEM_MODEL_SETUP_TIMER1_MINUTE_BEEP:
|
||||
g_model.timers[0].minuteBeep = editCheckBox(g_model.timers[0].minuteBeep, MODEL_SETUP_2ND_COLUMN, y, INDENT TR_MINUTEBEEP, attr, event);
|
||||
break;
|
||||
case ITEM_MODEL_SETUP_TIMER1_MINUTE_BEEP:
|
||||
g_model.timers[0].minuteBeep = editCheckBox(
|
||||
g_model.timers[0].minuteBeep, MODEL_SETUP_2ND_COLUMN, y,
|
||||
INDENT TR_MINUTEBEEP, attr, event);
|
||||
break;
|
||||
|
||||
case ITEM_MODEL_SETUP_TIMER1_COUNTDOWN_BEEP:
|
||||
editTimerCountdown(0, y, attr, event);
|
||||
break;
|
||||
case ITEM_MODEL_SETUP_TIMER1_COUNTDOWN_BEEP:
|
||||
editTimerCountdown(0, y, attr, event);
|
||||
break;
|
||||
|
||||
case ITEM_MODEL_SETUP_TIMER1_PERSISTENT:
|
||||
g_model.timers[0].persistent = editChoice(
|
||||
MODEL_SETUP_2ND_COLUMN, y, STR_PERSISTENT, STR_VPERSISTENT,
|
||||
g_model.timers[0].persistent, 0, 2, attr, event);
|
||||
break;
|
||||
|
||||
case ITEM_MODEL_SETUP_TIMER1_PERSISTENT:
|
||||
g_model.timers[0].persistent = editChoice(MODEL_SETUP_2ND_COLUMN, y, STR_PERSISTENT, STR_VPERSISTENT, g_model.timers[0].persistent, 0, 2, attr, event);
|
||||
break;
|
||||
|
||||
#if TIMERS > 1
|
||||
case ITEM_MODEL_SETUP_TIMER2:
|
||||
@@ -576,7 +596,9 @@ void menuModelSetup(event_t event)
|
||||
break;
|
||||
|
||||
case ITEM_MODEL_SETUP_TIMER3_MINUTE_BEEP:
|
||||
g_model.timers[2].minuteBeep = editCheckBox(g_model.timers[2].minuteBeep, MODEL_SETUP_2ND_COLUMN, y, INDENT TR_MINUTEBEEP, attr, event);
|
||||
g_model.timers[2].minuteBeep =
|
||||
editCheckBox(g_model.timers[2].minuteBeep, MODEL_SETUP_2ND_COLUMN,
|
||||
y, INDENT TR_MINUTEBEEP, attr, event);
|
||||
break;
|
||||
|
||||
case ITEM_MODEL_SETUP_TIMER3_COUNTDOWN_BEEP:
|
||||
@@ -584,7 +606,9 @@ void menuModelSetup(event_t event)
|
||||
break;
|
||||
|
||||
case ITEM_MODEL_SETUP_TIMER3_PERSISTENT:
|
||||
g_model.timers[2].persistent = editChoice(MODEL_SETUP_2ND_COLUMN, y, STR_PERSISTENT, STR_VPERSISTENT, g_model.timers[2].persistent, 0, 2, attr, event);
|
||||
g_model.timers[2].persistent = editChoice(
|
||||
MODEL_SETUP_2ND_COLUMN, y, STR_PERSISTENT, STR_VPERSISTENT,
|
||||
g_model.timers[2].persistent, 0, 2, attr, event);
|
||||
break;
|
||||
#endif
|
||||
|
||||
|
||||
@@ -318,7 +318,11 @@ void displayTimers()
|
||||
else {
|
||||
lcdDrawTextAtIndex(TIMERS_X, y-7, STR_VTMRMODES, timerData.mode, SMLSIZE);
|
||||
}
|
||||
drawTimer(TIMERS_X, y, timerState.val, TIMEHOUR|MIDSIZE|LEFT, TIMEHOUR|MIDSIZE|LEFT);
|
||||
int val = timerState.val;
|
||||
if (timerData.start && timerData.showElapsed &&
|
||||
timerData.start != timerState.val)
|
||||
val = (int)timerData.start - (int)timerState.val;
|
||||
drawTimer(TIMERS_X, y, val, TIMEHOUR|MIDSIZE|LEFT, TIMEHOUR|MIDSIZE|LEFT);
|
||||
if (timerData.persistent) {
|
||||
lcdDrawChar(TIMERS_R, y+1, 'P', SMLSIZE);
|
||||
}
|
||||
|
||||
@@ -43,6 +43,21 @@ static std::function<void(uint32_t)> timerValueUpdater(uint8_t timer)
|
||||
};
|
||||
}
|
||||
|
||||
static void timer_start_changed(lv_event_t* e)
|
||||
{
|
||||
lv_obj_t* target = lv_event_get_target(e);
|
||||
auto obj = (lv_obj_t*)lv_event_get_user_data(e);
|
||||
auto val = (TimeEdit*)lv_obj_get_user_data(target);
|
||||
|
||||
if (!obj || !val) return;
|
||||
|
||||
if (val->getValue() > 0) {
|
||||
lv_obj_clear_flag(obj, LV_OBJ_FLAG_HIDDEN);
|
||||
} else {
|
||||
lv_obj_add_flag(obj, LV_OBJ_FLAG_HIDDEN);
|
||||
}
|
||||
}
|
||||
|
||||
TimerWindow::TimerWindow(uint8_t timer) : Page(ICON_STATS_TIMERS)
|
||||
{
|
||||
std::string title = std::string(STR_TIMER) + std::to_string(timer + 1);
|
||||
@@ -74,8 +89,21 @@ TimerWindow::TimerWindow(uint8_t timer) : Page(ICON_STATS_TIMERS)
|
||||
// Timer start value
|
||||
line = form->newLine(&grid);
|
||||
new StaticText(line, rect_t{}, STR_START, 0, COLOR_THEME_PRIMARY1);
|
||||
new TimeEdit(line, rect_t{}, 0, TIMER_MAX, GET_DEFAULT(p_timer->start),
|
||||
timerValueUpdater(timer));
|
||||
auto timerValue =
|
||||
new TimeEdit(line, rect_t{}, 0, TIMER_MAX, GET_DEFAULT(p_timer->start),
|
||||
timerValueUpdater(timer));
|
||||
|
||||
// Timer direction
|
||||
auto timerDirLine = form->newLine(&grid);
|
||||
new StaticText(timerDirLine, rect_t{}, STR_LIMITS_HEADERS_DIRECTION, 0,
|
||||
COLOR_THEME_PRIMARY1);
|
||||
new Choice(timerDirLine, rect_t{}, STR_TIMER_DIR, 0, 1,
|
||||
GET_SET_DEFAULT(p_timer->showElapsed));
|
||||
|
||||
if (timerValue->getValue() == 0) {
|
||||
auto obj = timerDirLine->getLvObj();
|
||||
lv_obj_add_flag(obj, LV_OBJ_FLAG_HIDDEN);
|
||||
}
|
||||
|
||||
// Timer minute beep
|
||||
line = form->newLine(&grid);
|
||||
@@ -88,7 +116,7 @@ TimerWindow::TimerWindow(uint8_t timer) : Page(ICON_STATS_TIMERS)
|
||||
|
||||
auto box = new FormGroup(line, rect_t{});
|
||||
box->setFlexLayout(LV_FLEX_FLOW_ROW);
|
||||
|
||||
|
||||
new Choice(box, rect_t{}, STR_VBEEPCOUNTDOWN, COUNTDOWN_SILENT,
|
||||
COUNTDOWN_COUNT - 1, GET_SET_DEFAULT(p_timer->countdownBeep));
|
||||
new Choice(box, rect_t{}, STR_COUNTDOWNVALUES, 0, 3,
|
||||
@@ -100,4 +128,7 @@ TimerWindow::TimerWindow(uint8_t timer) : Page(ICON_STATS_TIMERS)
|
||||
|
||||
new Choice(line, rect_t{}, STR_VPERSISTENT, 0, 2,
|
||||
GET_SET_DEFAULT(p_timer->persistent));
|
||||
|
||||
lv_obj_add_event_cb(timerValue->getLvObj(), timer_start_changed,
|
||||
LV_EVENT_VALUE_CHANGED, timerDirLine->getLvObj());
|
||||
}
|
||||
|
||||
@@ -41,8 +41,8 @@ STATIC_LZ4_BITMAP(LBM_TIMER_BACKGROUND);
|
||||
class TimerWidget : public Widget
|
||||
{
|
||||
public:
|
||||
TimerWidget(const WidgetFactory* factory, Window* parent,
|
||||
const rect_t& rect, Widget::PersistentData* persistentData) :
|
||||
TimerWidget(const WidgetFactory* factory, Window* parent, const rect_t& rect,
|
||||
Widget::PersistentData* persistentData) :
|
||||
Widget(factory, parent, rect, persistentData)
|
||||
{
|
||||
}
|
||||
@@ -81,8 +81,11 @@ class TimerWidget : public Widget
|
||||
dc->drawBitmapPattern(3, 4, LBM_TIMER, colorFore);
|
||||
}
|
||||
// value
|
||||
splitTimer(sDigitGroup0, sDigitGroup1, sUnit0, sUnit1,
|
||||
abs(timerState.val), false);
|
||||
int val = timerState.val;
|
||||
if (timerData.start && timerData.showElapsed &&
|
||||
timerData.start != timerState.val)
|
||||
val = (int)timerData.start - (int)timerState.val;
|
||||
splitTimer(sDigitGroup0, sDigitGroup1, sUnit0, sUnit1, abs(val), false);
|
||||
|
||||
dc->drawSizedText(76, 31, sDigitGroup0, ZLEN(sDigitGroup0),
|
||||
FONT(XL) | colorFore);
|
||||
@@ -115,12 +118,16 @@ class TimerWidget : public Widget
|
||||
FONT(XS) | COLOR_THEME_PRIMARY2);
|
||||
}
|
||||
// value
|
||||
int val = timerState.val;
|
||||
if (timerData.start && timerData.showElapsed &&
|
||||
timerData.start != timerState.val)
|
||||
val = (int)timerData.start - (int)timerState.val;
|
||||
if (width() > 100 && height() > 40) {
|
||||
if (abs(timerState.val) >= 3600) {
|
||||
drawTimer(dc, 3, 20, abs(timerState.val),
|
||||
if (abs(val) >= 3600) {
|
||||
drawTimer(dc, 3, 20, abs(val),
|
||||
COLOR_THEME_PRIMARY2 | LEFT | TIMEHOUR);
|
||||
} else {
|
||||
drawTimer(dc, 3, 18, abs(timerState.val),
|
||||
drawTimer(dc, 3, 18, abs(val),
|
||||
COLOR_THEME_PRIMARY2 | LEFT | FONT(STD));
|
||||
}
|
||||
}
|
||||
@@ -130,8 +137,12 @@ class TimerWidget : public Widget
|
||||
drawTimer(dc, 3, 20, abs(timerState.val),
|
||||
COLOR_THEME_PRIMARY2 | LEFT | FONT(XS) | TIMEHOUR);
|
||||
} else {
|
||||
drawTimer(dc, 3, 18, abs(timerState.val),
|
||||
COLOR_THEME_PRIMARY2 | LEFT);
|
||||
// value
|
||||
int val = timerState.val;
|
||||
if (timerData.start && timerData.showElapsed &&
|
||||
timerData.start != timerState.val)
|
||||
val = (int)timerData.start - (int)timerState.val;
|
||||
drawTimer(dc, 3, 18, abs(val), COLOR_THEME_PRIMARY2 | LEFT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -463,6 +463,8 @@ static const struct YamlNode struct_TimerData[] = {
|
||||
YAML_UNSIGNED( "minuteBeep", 1 ),
|
||||
YAML_UNSIGNED( "persistent", 2 ),
|
||||
YAML_SIGNED( "countdownStart", 2 ),
|
||||
YAML_UNSIGNED( "showElapsed", 1 ),
|
||||
YAML_PADDING( 7 ),
|
||||
YAML_STRING("name", 8),
|
||||
YAML_END
|
||||
};
|
||||
@@ -836,7 +838,7 @@ static const struct YamlNode struct_TopBarPersistentData[] = {
|
||||
static const struct YamlNode struct_ModelData[] = {
|
||||
YAML_CUSTOM("semver",nullptr,w_semver),
|
||||
YAML_STRUCT("header", 248, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 128, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 136, 3, struct_TimerData, NULL),
|
||||
YAML_UNSIGNED( "telemetryProtocol", 3 ),
|
||||
YAML_UNSIGNED( "thrTrim", 1 ),
|
||||
YAML_UNSIGNED( "noGlobalFunctions", 1 ),
|
||||
@@ -888,7 +890,7 @@ static const struct YamlNode struct_ModelData[] = {
|
||||
};
|
||||
static const struct YamlNode struct_PartialModel[] = {
|
||||
YAML_STRUCT("header", 248, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 128, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 136, 3, struct_TimerData, NULL),
|
||||
YAML_END
|
||||
};
|
||||
|
||||
|
||||
@@ -430,6 +430,8 @@ static const struct YamlNode struct_TimerData[] = {
|
||||
YAML_UNSIGNED( "minuteBeep", 1 ),
|
||||
YAML_UNSIGNED( "persistent", 2 ),
|
||||
YAML_SIGNED( "countdownStart", 2 ),
|
||||
YAML_UNSIGNED( "showElapsed", 1 ),
|
||||
YAML_PADDING( 7 ),
|
||||
YAML_STRING("name", 3),
|
||||
YAML_END
|
||||
};
|
||||
@@ -806,7 +808,7 @@ static const struct YamlNode struct_TelemetryScreenData[] = {
|
||||
static const struct YamlNode struct_ModelData[] = {
|
||||
YAML_CUSTOM("semver",nullptr,w_semver),
|
||||
YAML_STRUCT("header", 96, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 88, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 96, 3, struct_TimerData, NULL),
|
||||
YAML_UNSIGNED( "telemetryProtocol", 3 ),
|
||||
YAML_UNSIGNED( "thrTrim", 1 ),
|
||||
YAML_UNSIGNED( "noGlobalFunctions", 1 ),
|
||||
@@ -858,7 +860,7 @@ static const struct YamlNode struct_ModelData[] = {
|
||||
};
|
||||
static const struct YamlNode struct_PartialModel[] = {
|
||||
YAML_STRUCT("header", 96, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 88, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 96, 3, struct_TimerData, NULL),
|
||||
YAML_END
|
||||
};
|
||||
|
||||
|
||||
@@ -430,6 +430,8 @@ static const struct YamlNode struct_TimerData[] = {
|
||||
YAML_UNSIGNED( "minuteBeep", 1 ),
|
||||
YAML_UNSIGNED( "persistent", 2 ),
|
||||
YAML_SIGNED( "countdownStart", 2 ),
|
||||
YAML_UNSIGNED( "showElapsed", 1 ),
|
||||
YAML_PADDING( 7 ),
|
||||
YAML_STRING("name", 3),
|
||||
YAML_END
|
||||
};
|
||||
@@ -806,7 +808,7 @@ static const struct YamlNode struct_TelemetryScreenData[] = {
|
||||
static const struct YamlNode struct_ModelData[] = {
|
||||
YAML_CUSTOM("semver",nullptr,w_semver),
|
||||
YAML_STRUCT("header", 96, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 88, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 96, 3, struct_TimerData, NULL),
|
||||
YAML_UNSIGNED( "telemetryProtocol", 3 ),
|
||||
YAML_UNSIGNED( "thrTrim", 1 ),
|
||||
YAML_UNSIGNED( "noGlobalFunctions", 1 ),
|
||||
@@ -858,7 +860,7 @@ static const struct YamlNode struct_ModelData[] = {
|
||||
};
|
||||
static const struct YamlNode struct_PartialModel[] = {
|
||||
YAML_STRUCT("header", 96, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 88, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 96, 3, struct_TimerData, NULL),
|
||||
YAML_END
|
||||
};
|
||||
|
||||
|
||||
@@ -430,6 +430,8 @@ static const struct YamlNode struct_TimerData[] = {
|
||||
YAML_UNSIGNED( "minuteBeep", 1 ),
|
||||
YAML_UNSIGNED( "persistent", 2 ),
|
||||
YAML_SIGNED( "countdownStart", 2 ),
|
||||
YAML_UNSIGNED( "showElapsed", 1 ),
|
||||
YAML_PADDING( 7 ),
|
||||
YAML_STRING("name", 3),
|
||||
YAML_END
|
||||
};
|
||||
@@ -806,7 +808,7 @@ static const struct YamlNode struct_TelemetryScreenData[] = {
|
||||
static const struct YamlNode struct_ModelData[] = {
|
||||
YAML_CUSTOM("semver",nullptr,w_semver),
|
||||
YAML_STRUCT("header", 96, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 88, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 96, 3, struct_TimerData, NULL),
|
||||
YAML_UNSIGNED( "telemetryProtocol", 3 ),
|
||||
YAML_UNSIGNED( "thrTrim", 1 ),
|
||||
YAML_UNSIGNED( "noGlobalFunctions", 1 ),
|
||||
@@ -858,7 +860,7 @@ static const struct YamlNode struct_ModelData[] = {
|
||||
};
|
||||
static const struct YamlNode struct_PartialModel[] = {
|
||||
YAML_STRUCT("header", 96, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 88, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 96, 3, struct_TimerData, NULL),
|
||||
YAML_END
|
||||
};
|
||||
|
||||
|
||||
@@ -436,6 +436,8 @@ static const struct YamlNode struct_TimerData[] = {
|
||||
YAML_UNSIGNED( "minuteBeep", 1 ),
|
||||
YAML_UNSIGNED( "persistent", 2 ),
|
||||
YAML_SIGNED( "countdownStart", 2 ),
|
||||
YAML_UNSIGNED( "showElapsed", 1 ),
|
||||
YAML_PADDING( 7 ),
|
||||
YAML_STRING("name", 3),
|
||||
YAML_END
|
||||
};
|
||||
@@ -812,7 +814,7 @@ static const struct YamlNode struct_TelemetryScreenData[] = {
|
||||
static const struct YamlNode struct_ModelData[] = {
|
||||
YAML_CUSTOM("semver",nullptr,w_semver),
|
||||
YAML_STRUCT("header", 96, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 88, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 96, 3, struct_TimerData, NULL),
|
||||
YAML_UNSIGNED( "telemetryProtocol", 3 ),
|
||||
YAML_UNSIGNED( "thrTrim", 1 ),
|
||||
YAML_UNSIGNED( "noGlobalFunctions", 1 ),
|
||||
@@ -869,7 +871,7 @@ static const struct YamlNode struct_ModelData[] = {
|
||||
};
|
||||
static const struct YamlNode struct_PartialModel[] = {
|
||||
YAML_STRUCT("header", 96, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 88, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 96, 3, struct_TimerData, NULL),
|
||||
YAML_END
|
||||
};
|
||||
|
||||
|
||||
@@ -430,6 +430,8 @@ static const struct YamlNode struct_TimerData[] = {
|
||||
YAML_UNSIGNED( "minuteBeep", 1 ),
|
||||
YAML_UNSIGNED( "persistent", 2 ),
|
||||
YAML_SIGNED( "countdownStart", 2 ),
|
||||
YAML_UNSIGNED( "showElapsed", 1 ),
|
||||
YAML_PADDING( 7 ),
|
||||
YAML_STRING("name", 3),
|
||||
YAML_END
|
||||
};
|
||||
@@ -806,7 +808,7 @@ static const struct YamlNode struct_TelemetryScreenData[] = {
|
||||
static const struct YamlNode struct_ModelData[] = {
|
||||
YAML_CUSTOM("semver",nullptr,w_semver),
|
||||
YAML_STRUCT("header", 96, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 88, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 96, 3, struct_TimerData, NULL),
|
||||
YAML_UNSIGNED( "telemetryProtocol", 3 ),
|
||||
YAML_UNSIGNED( "thrTrim", 1 ),
|
||||
YAML_UNSIGNED( "noGlobalFunctions", 1 ),
|
||||
@@ -858,7 +860,7 @@ static const struct YamlNode struct_ModelData[] = {
|
||||
};
|
||||
static const struct YamlNode struct_PartialModel[] = {
|
||||
YAML_STRUCT("header", 96, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 88, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 96, 3, struct_TimerData, NULL),
|
||||
YAML_END
|
||||
};
|
||||
|
||||
|
||||
@@ -430,6 +430,8 @@ static const struct YamlNode struct_TimerData[] = {
|
||||
YAML_UNSIGNED( "minuteBeep", 1 ),
|
||||
YAML_UNSIGNED( "persistent", 2 ),
|
||||
YAML_SIGNED( "countdownStart", 2 ),
|
||||
YAML_UNSIGNED( "showElapsed", 1 ),
|
||||
YAML_PADDING( 7 ),
|
||||
YAML_STRING("name", 3),
|
||||
YAML_END
|
||||
};
|
||||
@@ -806,7 +808,7 @@ static const struct YamlNode struct_TelemetryScreenData[] = {
|
||||
static const struct YamlNode struct_ModelData[] = {
|
||||
YAML_CUSTOM("semver",nullptr,w_semver),
|
||||
YAML_STRUCT("header", 96, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 88, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 96, 3, struct_TimerData, NULL),
|
||||
YAML_UNSIGNED( "telemetryProtocol", 3 ),
|
||||
YAML_UNSIGNED( "thrTrim", 1 ),
|
||||
YAML_UNSIGNED( "noGlobalFunctions", 1 ),
|
||||
@@ -858,7 +860,7 @@ static const struct YamlNode struct_ModelData[] = {
|
||||
};
|
||||
static const struct YamlNode struct_PartialModel[] = {
|
||||
YAML_STRUCT("header", 96, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 88, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 96, 3, struct_TimerData, NULL),
|
||||
YAML_END
|
||||
};
|
||||
|
||||
|
||||
@@ -487,6 +487,8 @@ static const struct YamlNode struct_TimerData[] = {
|
||||
YAML_UNSIGNED( "minuteBeep", 1 ),
|
||||
YAML_UNSIGNED( "persistent", 2 ),
|
||||
YAML_SIGNED( "countdownStart", 2 ),
|
||||
YAML_UNSIGNED( "showElapsed", 1 ),
|
||||
YAML_PADDING( 7 ),
|
||||
YAML_STRING("name", 8),
|
||||
YAML_END
|
||||
};
|
||||
@@ -860,7 +862,7 @@ static const struct YamlNode struct_TopBarPersistentData[] = {
|
||||
static const struct YamlNode struct_ModelData[] = {
|
||||
YAML_CUSTOM("semver",nullptr,w_semver),
|
||||
YAML_STRUCT("header", 248, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 128, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 136, 3, struct_TimerData, NULL),
|
||||
YAML_UNSIGNED( "telemetryProtocol", 3 ),
|
||||
YAML_UNSIGNED( "thrTrim", 1 ),
|
||||
YAML_UNSIGNED( "noGlobalFunctions", 1 ),
|
||||
@@ -912,7 +914,7 @@ static const struct YamlNode struct_ModelData[] = {
|
||||
};
|
||||
static const struct YamlNode struct_PartialModel[] = {
|
||||
YAML_STRUCT("header", 248, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 128, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 136, 3, struct_TimerData, NULL),
|
||||
YAML_END
|
||||
};
|
||||
|
||||
|
||||
@@ -485,6 +485,8 @@ static const struct YamlNode struct_TimerData[] = {
|
||||
YAML_UNSIGNED( "minuteBeep", 1 ),
|
||||
YAML_UNSIGNED( "persistent", 2 ),
|
||||
YAML_SIGNED( "countdownStart", 2 ),
|
||||
YAML_UNSIGNED( "showElapsed", 1 ),
|
||||
YAML_PADDING( 7 ),
|
||||
YAML_STRING("name", 8),
|
||||
YAML_END
|
||||
};
|
||||
@@ -858,7 +860,7 @@ static const struct YamlNode struct_TopBarPersistentData[] = {
|
||||
static const struct YamlNode struct_ModelData[] = {
|
||||
YAML_CUSTOM("semver",nullptr,w_semver),
|
||||
YAML_STRUCT("header", 248, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 128, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 136, 3, struct_TimerData, NULL),
|
||||
YAML_UNSIGNED( "telemetryProtocol", 3 ),
|
||||
YAML_UNSIGNED( "thrTrim", 1 ),
|
||||
YAML_UNSIGNED( "noGlobalFunctions", 1 ),
|
||||
@@ -910,7 +912,7 @@ static const struct YamlNode struct_ModelData[] = {
|
||||
};
|
||||
static const struct YamlNode struct_PartialModel[] = {
|
||||
YAML_STRUCT("header", 248, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 128, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 136, 3, struct_TimerData, NULL),
|
||||
YAML_END
|
||||
};
|
||||
|
||||
|
||||
@@ -430,6 +430,8 @@ static const struct YamlNode struct_TimerData[] = {
|
||||
YAML_UNSIGNED( "minuteBeep", 1 ),
|
||||
YAML_UNSIGNED( "persistent", 2 ),
|
||||
YAML_SIGNED( "countdownStart", 2 ),
|
||||
YAML_UNSIGNED( "showElapsed", 1 ),
|
||||
YAML_PADDING( 7 ),
|
||||
YAML_STRING("name", 3),
|
||||
YAML_END
|
||||
};
|
||||
@@ -806,7 +808,7 @@ static const struct YamlNode struct_TelemetryScreenData[] = {
|
||||
static const struct YamlNode struct_ModelData[] = {
|
||||
YAML_CUSTOM("semver",nullptr,w_semver),
|
||||
YAML_STRUCT("header", 96, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 88, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 96, 3, struct_TimerData, NULL),
|
||||
YAML_UNSIGNED( "telemetryProtocol", 3 ),
|
||||
YAML_UNSIGNED( "thrTrim", 1 ),
|
||||
YAML_UNSIGNED( "noGlobalFunctions", 1 ),
|
||||
@@ -858,7 +860,7 @@ static const struct YamlNode struct_ModelData[] = {
|
||||
};
|
||||
static const struct YamlNode struct_PartialModel[] = {
|
||||
YAML_STRUCT("header", 96, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 88, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 96, 3, struct_TimerData, NULL),
|
||||
YAML_END
|
||||
};
|
||||
|
||||
|
||||
@@ -438,6 +438,8 @@ static const struct YamlNode struct_TimerData[] = {
|
||||
YAML_UNSIGNED( "minuteBeep", 1 ),
|
||||
YAML_UNSIGNED( "persistent", 2 ),
|
||||
YAML_SIGNED( "countdownStart", 2 ),
|
||||
YAML_UNSIGNED( "showElapsed", 1 ),
|
||||
YAML_PADDING( 7 ),
|
||||
YAML_STRING("name", 8),
|
||||
YAML_END
|
||||
};
|
||||
@@ -819,7 +821,7 @@ static const struct YamlNode struct_TelemetryScreenData[] = {
|
||||
static const struct YamlNode struct_ModelData[] = {
|
||||
YAML_CUSTOM("semver",nullptr,w_semver),
|
||||
YAML_STRUCT("header", 192, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 128, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 136, 3, struct_TimerData, NULL),
|
||||
YAML_UNSIGNED( "telemetryProtocol", 3 ),
|
||||
YAML_UNSIGNED( "thrTrim", 1 ),
|
||||
YAML_UNSIGNED( "noGlobalFunctions", 1 ),
|
||||
@@ -873,7 +875,7 @@ static const struct YamlNode struct_ModelData[] = {
|
||||
};
|
||||
static const struct YamlNode struct_PartialModel[] = {
|
||||
YAML_STRUCT("header", 192, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 128, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 136, 3, struct_TimerData, NULL),
|
||||
YAML_END
|
||||
};
|
||||
|
||||
|
||||
@@ -477,6 +477,8 @@ static const struct YamlNode struct_TimerData[] = {
|
||||
YAML_UNSIGNED( "minuteBeep", 1 ),
|
||||
YAML_UNSIGNED( "persistent", 2 ),
|
||||
YAML_SIGNED( "countdownStart", 2 ),
|
||||
YAML_UNSIGNED( "showElapsed", 1 ),
|
||||
YAML_PADDING( 7 ),
|
||||
YAML_STRING("name", 8),
|
||||
YAML_END
|
||||
};
|
||||
@@ -858,7 +860,7 @@ static const struct YamlNode struct_TelemetryScreenData[] = {
|
||||
static const struct YamlNode struct_ModelData[] = {
|
||||
YAML_CUSTOM("semver",nullptr,w_semver),
|
||||
YAML_STRUCT("header", 192, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 128, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 136, 3, struct_TimerData, NULL),
|
||||
YAML_UNSIGNED( "telemetryProtocol", 3 ),
|
||||
YAML_UNSIGNED( "thrTrim", 1 ),
|
||||
YAML_UNSIGNED( "noGlobalFunctions", 1 ),
|
||||
@@ -913,7 +915,7 @@ static const struct YamlNode struct_ModelData[] = {
|
||||
};
|
||||
static const struct YamlNode struct_PartialModel[] = {
|
||||
YAML_STRUCT("header", 192, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 128, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 136, 3, struct_TimerData, NULL),
|
||||
YAML_END
|
||||
};
|
||||
|
||||
|
||||
@@ -415,6 +415,8 @@ static const struct YamlNode struct_TimerData[] = {
|
||||
YAML_UNSIGNED( "minuteBeep", 1 ),
|
||||
YAML_UNSIGNED( "persistent", 2 ),
|
||||
YAML_SIGNED( "countdownStart", 2 ),
|
||||
YAML_UNSIGNED( "showElapsed", 1 ),
|
||||
YAML_PADDING( 7 ),
|
||||
YAML_STRING("name", 3),
|
||||
YAML_END
|
||||
};
|
||||
@@ -791,7 +793,7 @@ static const struct YamlNode struct_TelemetryScreenData[] = {
|
||||
static const struct YamlNode struct_ModelData[] = {
|
||||
YAML_CUSTOM("semver",nullptr,w_semver),
|
||||
YAML_STRUCT("header", 96, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 88, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 96, 3, struct_TimerData, NULL),
|
||||
YAML_UNSIGNED( "telemetryProtocol", 3 ),
|
||||
YAML_UNSIGNED( "thrTrim", 1 ),
|
||||
YAML_UNSIGNED( "noGlobalFunctions", 1 ),
|
||||
@@ -843,7 +845,7 @@ static const struct YamlNode struct_ModelData[] = {
|
||||
};
|
||||
static const struct YamlNode struct_PartialModel[] = {
|
||||
YAML_STRUCT("header", 96, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 88, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 96, 3, struct_TimerData, NULL),
|
||||
YAML_END
|
||||
};
|
||||
|
||||
|
||||
@@ -425,6 +425,8 @@ static const struct YamlNode struct_TimerData[] = {
|
||||
YAML_UNSIGNED( "minuteBeep", 1 ),
|
||||
YAML_UNSIGNED( "persistent", 2 ),
|
||||
YAML_SIGNED( "countdownStart", 2 ),
|
||||
YAML_UNSIGNED( "showElapsed", 1 ),
|
||||
YAML_PADDING( 7 ),
|
||||
YAML_STRING("name", 3),
|
||||
YAML_END
|
||||
};
|
||||
@@ -801,7 +803,7 @@ static const struct YamlNode struct_TelemetryScreenData[] = {
|
||||
static const struct YamlNode struct_ModelData[] = {
|
||||
YAML_CUSTOM("semver",nullptr,w_semver),
|
||||
YAML_STRUCT("header", 96, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 88, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 96, 3, struct_TimerData, NULL),
|
||||
YAML_UNSIGNED( "telemetryProtocol", 3 ),
|
||||
YAML_UNSIGNED( "thrTrim", 1 ),
|
||||
YAML_UNSIGNED( "noGlobalFunctions", 1 ),
|
||||
@@ -853,7 +855,7 @@ static const struct YamlNode struct_ModelData[] = {
|
||||
};
|
||||
static const struct YamlNode struct_PartialModel[] = {
|
||||
YAML_STRUCT("header", 96, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 88, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 96, 3, struct_TimerData, NULL),
|
||||
YAML_END
|
||||
};
|
||||
|
||||
|
||||
@@ -422,6 +422,8 @@ static const struct YamlNode struct_TimerData[] = {
|
||||
YAML_UNSIGNED( "minuteBeep", 1 ),
|
||||
YAML_UNSIGNED( "persistent", 2 ),
|
||||
YAML_SIGNED( "countdownStart", 2 ),
|
||||
YAML_UNSIGNED( "showElapsed", 1 ),
|
||||
YAML_PADDING( 7 ),
|
||||
YAML_STRING("name", 3),
|
||||
YAML_END
|
||||
};
|
||||
@@ -798,7 +800,7 @@ static const struct YamlNode struct_TelemetryScreenData[] = {
|
||||
static const struct YamlNode struct_ModelData[] = {
|
||||
YAML_CUSTOM("semver",nullptr,w_semver),
|
||||
YAML_STRUCT("header", 96, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 88, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 96, 3, struct_TimerData, NULL),
|
||||
YAML_UNSIGNED( "telemetryProtocol", 3 ),
|
||||
YAML_UNSIGNED( "thrTrim", 1 ),
|
||||
YAML_UNSIGNED( "noGlobalFunctions", 1 ),
|
||||
@@ -850,7 +852,7 @@ static const struct YamlNode struct_ModelData[] = {
|
||||
};
|
||||
static const struct YamlNode struct_PartialModel[] = {
|
||||
YAML_STRUCT("header", 96, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 88, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 96, 3, struct_TimerData, NULL),
|
||||
YAML_END
|
||||
};
|
||||
|
||||
|
||||
@@ -426,6 +426,8 @@ static const struct YamlNode struct_TimerData[] = {
|
||||
YAML_UNSIGNED( "minuteBeep", 1 ),
|
||||
YAML_UNSIGNED( "persistent", 2 ),
|
||||
YAML_SIGNED( "countdownStart", 2 ),
|
||||
YAML_UNSIGNED( "showElapsed", 1 ),
|
||||
YAML_PADDING( 7 ),
|
||||
YAML_STRING("name", 3),
|
||||
YAML_END
|
||||
};
|
||||
@@ -802,7 +804,7 @@ static const struct YamlNode struct_TelemetryScreenData[] = {
|
||||
static const struct YamlNode struct_ModelData[] = {
|
||||
YAML_CUSTOM("semver",nullptr,w_semver),
|
||||
YAML_STRUCT("header", 96, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 88, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 96, 3, struct_TimerData, NULL),
|
||||
YAML_UNSIGNED( "telemetryProtocol", 3 ),
|
||||
YAML_UNSIGNED( "thrTrim", 1 ),
|
||||
YAML_UNSIGNED( "noGlobalFunctions", 1 ),
|
||||
@@ -854,7 +856,7 @@ static const struct YamlNode struct_ModelData[] = {
|
||||
};
|
||||
static const struct YamlNode struct_PartialModel[] = {
|
||||
YAML_STRUCT("header", 96, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 88, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 96, 3, struct_TimerData, NULL),
|
||||
YAML_END
|
||||
};
|
||||
|
||||
|
||||
@@ -430,6 +430,8 @@ static const struct YamlNode struct_TimerData[] = {
|
||||
YAML_UNSIGNED( "minuteBeep", 1 ),
|
||||
YAML_UNSIGNED( "persistent", 2 ),
|
||||
YAML_SIGNED( "countdownStart", 2 ),
|
||||
YAML_UNSIGNED( "showElapsed", 1 ),
|
||||
YAML_PADDING( 7 ),
|
||||
YAML_STRING("name", 3),
|
||||
YAML_END
|
||||
};
|
||||
@@ -806,7 +808,7 @@ static const struct YamlNode struct_TelemetryScreenData[] = {
|
||||
static const struct YamlNode struct_ModelData[] = {
|
||||
YAML_CUSTOM("semver",nullptr,w_semver),
|
||||
YAML_STRUCT("header", 96, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 88, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 96, 3, struct_TimerData, NULL),
|
||||
YAML_UNSIGNED( "telemetryProtocol", 3 ),
|
||||
YAML_UNSIGNED( "thrTrim", 1 ),
|
||||
YAML_UNSIGNED( "noGlobalFunctions", 1 ),
|
||||
@@ -858,7 +860,7 @@ static const struct YamlNode struct_ModelData[] = {
|
||||
};
|
||||
static const struct YamlNode struct_PartialModel[] = {
|
||||
YAML_STRUCT("header", 96, struct_ModelHeader, NULL),
|
||||
YAML_ARRAY("timers", 88, 3, struct_TimerData, NULL),
|
||||
YAML_ARRAY("timers", 96, 3, struct_TimerData, NULL),
|
||||
YAML_END
|
||||
};
|
||||
|
||||
|
||||
@@ -77,6 +77,7 @@ void evalTimers(int16_t throttle, uint8_t tick10ms)
|
||||
tmrstart_t timerStart = g_model.timers[i].start;
|
||||
int16_t timerSwtch = g_model.timers[i].swtch;
|
||||
TimerState * timerState = &timersStates[i];
|
||||
uint32_t showElapsed = g_model.timers[i].showElapsed;
|
||||
|
||||
if (timerMode) {
|
||||
if ((timerState->state == TMR_OFF)
|
||||
@@ -166,7 +167,9 @@ void evalTimers(int16_t throttle, uint8_t tick10ms)
|
||||
AUDIO_TIMER_COUNTDOWN(i, newTimerVal);
|
||||
}
|
||||
if (g_model.timers[i].minuteBeep && (newTimerVal % 60) == 0) {
|
||||
AUDIO_TIMER_MINUTE(newTimerVal);
|
||||
tmrval_t announceVal = newTimerVal;
|
||||
if (showElapsed) announceVal = timerStart - newTimerVal;
|
||||
AUDIO_TIMER_MINUTE(announceVal);
|
||||
// TRACE("Timer[%d] %d minute announcement", i, newTimerVal/60);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,7 +99,7 @@ ISTR(SBUS_INVERSION_VALUES);
|
||||
ISTR(SPORT_MODES);
|
||||
ISTR(FSGROUPS);
|
||||
ISTR(ADCFILTERVALUES);
|
||||
|
||||
ISTR(TIMER_DIR);
|
||||
|
||||
#if defined(HELI)
|
||||
ISTR(VSWASHTYPE);
|
||||
@@ -778,6 +778,7 @@ const char STR_SPORT_UPDATE_POWER_MODE[] = TR_SPORT_UPDATE_POWER_MODE;
|
||||
const char STR_TOUCH_PANEL[] = TR_TOUCH_PANEL;
|
||||
const char STR_FILE_SIZE[] = TR_FILE_SIZE;
|
||||
const char STR_FILE_OPEN[] = TR_FILE_OPEN;
|
||||
const char STR_LIMITS_HEADERS_DIRECTION[] = TR_LIMITS_HEADERS_DIRECTION;
|
||||
|
||||
#if defined(COLORLCD)
|
||||
const char STR_ASSIGN_SPLASH[] = TR_ASSIGN_SPLASH;
|
||||
|
||||
@@ -118,6 +118,7 @@ extern const char* STR_VTRIMINC[];
|
||||
extern const char* STR_VDISPLAYTRIMS[];
|
||||
extern const char* STR_RETA123[];
|
||||
|
||||
extern const char* STR_TIMER_DIR[];
|
||||
|
||||
extern const char* STR_VBLMODE[];
|
||||
extern const char* STR_VCURVEFUNC[];
|
||||
@@ -675,6 +676,7 @@ extern const char STR_SCRIPT_KILLED[];
|
||||
extern const char STR_SCRIPT_ERROR[];
|
||||
extern const char STR_PLAY_FILE[];
|
||||
extern const char STR_ASSIGN_BITMAP[];
|
||||
extern const char STR_LIMITS_HEADERS_DIRECTION[];
|
||||
#if defined(COLORLCD)
|
||||
extern const char STR_ASSIGN_SPLASH[];
|
||||
extern const char STR_FIRST_CHANNEL[];
|
||||
|
||||
@@ -250,6 +250,7 @@
|
||||
#define TR_VCELLINDEX "最低值","1","2","3","4","5","6","最高值","差值"
|
||||
#define TR_TEXT_SIZE "标准","小","较小","中等","双倍"
|
||||
#define TR_SUBTRIMMODES STR_CHAR_DELTA "(中点)", "=(整体)"
|
||||
#define TR_TIMER_DIR TR("Remain", "Show Remain"), TR("Elaps.", "Show Elapsed")
|
||||
|
||||
#if defined(COLORLCD)
|
||||
#define INDENT
|
||||
|
||||
@@ -266,6 +266,7 @@
|
||||
#define TR_VPREC "X","X.X","X.XX"
|
||||
#define TR_VCELLINDEX "Nízký","1","2","3","4","5","6","Nejvíce","Delta"
|
||||
#define TR_SUBTRIMMODES STR_CHAR_DELTA"(pouze středy)","= (symetrický)"
|
||||
#define TR_TIMER_DIR TR("Remain", "Show Remain"), TR("Elaps.", "Show Elapsed")
|
||||
|
||||
// ZERO TERMINATED STRINGS
|
||||
#if defined(COLORLCD)
|
||||
|
||||
@@ -252,6 +252,7 @@
|
||||
#define TR_VCELLINDEX "Lavest","1","2","3","4","5","6","Højst","Delta"
|
||||
#define TR_TEXT_SIZE "Standard","Tynd","Lille","Medium","Dobbelt"
|
||||
#define TR_SUBTRIMMODES STR_CHAR_DELTA " (center kun)","= (symmetrisk)"
|
||||
#define TR_TIMER_DIR TR("Remain", "Show Remain"), TR("Elaps.", "Show Elapsed")
|
||||
|
||||
#if defined(COLORLCD)
|
||||
#define INDENT
|
||||
|
||||
@@ -252,6 +252,7 @@
|
||||
#define TR_VCELLINDEX "Niedrigst","1. Zelle","2. Zelle","3. Zelle","4. Zelle","5. Zelle","6. Zelle","Höchster","Differenz"
|
||||
#define TR_TEXT_SIZE "Standard","Tiny","Small","Mid","Double"
|
||||
#define TR_SUBTRIMMODES STR_CHAR_DELTA" (center only)","= (symetrical)"
|
||||
#define TR_TIMER_DIR TR("Remain", "Show Remain"), TR("Elaps.", "Show Elapsed")
|
||||
|
||||
// ZERO TERMINATED STRINGS
|
||||
#if defined(COLORLCD)
|
||||
|
||||
@@ -250,6 +250,7 @@
|
||||
#define TR_VCELLINDEX "Lowest","1","2","3","4","5","6","Highest","Delta"
|
||||
#define TR_TEXT_SIZE "Standard","Tiny","Small","Mid","Double"
|
||||
#define TR_SUBTRIMMODES STR_CHAR_DELTA " (center only)","= (symmetrical)"
|
||||
#define TR_TIMER_DIR TR("Remain", "Show Remain"), TR("Elaps.", "Show Elapsed")
|
||||
|
||||
#if defined(COLORLCD)
|
||||
#define INDENT
|
||||
|
||||
@@ -249,6 +249,7 @@
|
||||
#define TR_VCELLINDEX "Menor","1","2","3","4","5","6","Mayor","Delta"
|
||||
#define TR_TEXT_SIZE "Normal","Muy pequeño","Pequeño","Medio","Doble"
|
||||
#define TR_SUBTRIMMODES STR_CHAR_DELTA " (center only)","= (symetrical)"
|
||||
#define TR_TIMER_DIR TR("Remain", "Show Remain"), TR("Elaps.", "Show Elapsed")
|
||||
|
||||
#if defined(COLORLCD)
|
||||
#define INDENT
|
||||
|
||||
@@ -265,6 +265,7 @@
|
||||
#define TR_VPREC "0.--","0.0","0.00"
|
||||
#define TR_VCELLINDEX "Alin","1","2","3","4","5","6","Korkein","Ero"
|
||||
#define TR_SUBTRIMMODES STR_CHAR_DELTA" (center only)","= (symetrical)"
|
||||
#define TR_TIMER_DIR TR("Remain", "Show Remain"), TR("Elaps.", "Show Elapsed")
|
||||
|
||||
// ZERO TERMINATED STRINGS
|
||||
#define INDENT "\001"
|
||||
|
||||
@@ -269,6 +269,7 @@
|
||||
#define TR_VPREC "0.--","0.0","0.00"
|
||||
#define TR_VCELLINDEX "Mini.","1","2","3","4","5","6","Maxi.","Diff."
|
||||
#define TR_SUBTRIMMODES STR_CHAR_DELTA " (center only)","= (symetrical)"
|
||||
#define TR_TIMER_DIR TR("Remain", "Show Remain"), TR("Elaps.", "Show Elapsed")
|
||||
|
||||
// ZERO TERMINATED STRINGS
|
||||
#if defined(COLORLCD)
|
||||
|
||||
@@ -254,6 +254,7 @@
|
||||
#define TR_VCELLINDEX "Minore","1","2","3","4","5","6","Maggiore","Delta"
|
||||
#define TR_TEXT_SIZE "Standard","Tiny","Small","Mid","Double"
|
||||
#define TR_SUBTRIMMODES STR_CHAR_DELTA" (center only)","= (symetrical)"
|
||||
#define TR_TIMER_DIR TR("Remain", "Show Remain"), TR("Elaps.", "Show Elapsed")
|
||||
|
||||
#if defined(COLORLCD)
|
||||
#define INDENT "\007"
|
||||
|
||||
@@ -255,6 +255,7 @@
|
||||
#define TR_GYROS "GyrX","GyrY"
|
||||
#define TR_TEXT_SIZE "Standard","Tiny","Small","Mid","Double"
|
||||
#define TR_SUBTRIMMODES STR_CHAR_DELTA " (center only)","= (symetrical)"
|
||||
#define TR_TIMER_DIR TR("Remain", "Show Remain"), TR("Elaps.", "Show Elapsed")
|
||||
|
||||
#if defined(COLORLCD)
|
||||
#define INDENT
|
||||
|
||||
@@ -249,6 +249,7 @@
|
||||
#define TR_VCELLINDEX "Niskie","1","2","3","4","5","6","Wysokie","Delta"
|
||||
#define TR_TEXT_SIZE "Standard","Tiny","Small","Mid","Double"
|
||||
#define TR_SUBTRIMMODES STR_CHAR_DELTA" (center only)","= (symetrical)"
|
||||
#define TR_TIMER_DIR TR("Remain", "Show Remain"), TR("Elaps.", "Show Elapsed")
|
||||
|
||||
#if defined(COLORLCD)
|
||||
#define INDENT "\007"
|
||||
|
||||
@@ -246,6 +246,7 @@
|
||||
#define TR_VCELLINDEX "Lowest","1","2","3","4","5","6","Highest","Delta"
|
||||
#define TR_TEXT_SIZE "Standard","Tiny","Small","Mid","Double"
|
||||
#define TR_SUBTRIMMODES STR_CHAR_DELTA " (center only)","= (symetrical)"
|
||||
#define TR_TIMER_DIR TR("Remain", "Show Remain"), TR("Elaps.", "Show Elapsed")
|
||||
|
||||
#if defined(COLORLCD)
|
||||
#define INDENT
|
||||
|
||||
@@ -271,6 +271,7 @@
|
||||
#define TR_VCELLINDEX "Lägsta","1","2","3","4","5","6","Högsta","Skillnad"
|
||||
#define TR_GYROS "GyrX","GyrY"
|
||||
#define TR_SUBTRIMMODES STR_CHAR_DELTA " (center only)","= (symetrical)"
|
||||
#define TR_TIMER_DIR TR("Remain", "Show Remain"), TR("Elaps.", "Show Elapsed")
|
||||
|
||||
// ZERO TERMINATED STRINGS
|
||||
#if defined(COLORLCD)
|
||||
|
||||
@@ -250,6 +250,7 @@
|
||||
#define TR_VCELLINDEX "最低值","1","2","3","4","5","6","最高值","差值"
|
||||
#define TR_TEXT_SIZE "標準","小","較小","中等","雙倍"
|
||||
#define TR_SUBTRIMMODES STR_CHAR_DELTA "(中点)","=(整體)"
|
||||
#define TR_TIMER_DIR TR("Remain", "Show Remain"), TR("Elaps.", "Show Elapsed")
|
||||
|
||||
#if defined(COLORLCD)
|
||||
#define INDENT
|
||||
|
||||
Reference in New Issue
Block a user