feat: add precision setting for mix delay up & down (#5314)

This commit is contained in:
philmoz
2024-07-29 20:07:58 +10:00
committed by GitHub
parent e323bd6821
commit bdfb94ae83
42 changed files with 242 additions and 129 deletions
+2 -1
View File
@@ -93,9 +93,10 @@ PACK(struct MixData {
uint16_t carryTrim:1;
uint16_t mixWarn:2; // mixer warning
uint16_t mltpx:2 ENUM(MixerMultiplex);
uint16_t delayPrec:1;
uint16_t speedPrec:1;
uint16_t flightModes:9 CUST(r_flightModes, w_flightModes);
uint16_t spare:2 SKIP;
uint16_t spare:1 SKIP;
uint32_t weight:11 CUST(r_sourceNumVal,w_sourceNumVal);
uint32_t offset:11 CUST(r_sourceNumVal,w_sourceNumVal);
int32_t swtch:10 CUST(r_swtchSrc,w_swtchSrc);
+7 -2
View File
@@ -33,6 +33,7 @@ enum MixFields {
MIX_FIELD_SWITCH,
MIX_FIELD_WARNING,
MIX_FIELD_MLTPX,
MIX_FIELD_DELAY_PREC,
MIX_FIELD_DELAY_UP,
MIX_FIELD_DELAY_DOWN,
MIX_FIELD_SLOW_PREC,
@@ -185,12 +186,16 @@ void menuModelMixOne(event_t event)
md2->mltpx = editChoice(MIXES_2ND_COLUMN, y, STR_MULTPX, STR_VMLTPX, md2->mltpx, 0, 2, attr, event);
break;
case MIX_FIELD_DELAY_PREC:
md2->delayPrec = editChoice(MIXES_2ND_COLUMN, y, STR_MIX_DELAY_PREC, &STR_VPREC[1], md2->delayPrec, 0, 1, attr, event);
break;
case MIX_FIELD_DELAY_UP:
md2->delayUp = EDIT_DELAY(0, y, event, attr, STR_DELAYUP, md2->delayUp, PREC1);
md2->delayUp = EDIT_DELAY(0, y, event, attr, STR_DELAYUP, md2->delayUp, (md2->delayPrec ? PREC2 : PREC1));
break;
case MIX_FIELD_DELAY_DOWN:
md2->delayDown = EDIT_DELAY(0, y, event, attr, STR_DELAYDOWN, md2->delayDown, PREC1);
md2->delayDown = EDIT_DELAY(0, y, event, attr, STR_DELAYDOWN, md2->delayDown, (md2->delayPrec ? PREC2 : PREC1));
break;
case MIX_FIELD_SLOW_PREC:
+7 -2
View File
@@ -33,6 +33,7 @@ enum MixFields {
MIX_FIELD_SWITCH,
MIX_FIELD_WARNING,
MIX_FIELD_MLTPX,
MIX_FIELD_DELAY_PREC,
MIX_FIELD_DELAY_UP,
MIX_FIELD_DELAY_DOWN,
MIX_FIELD_SLOW_PREC,
@@ -181,12 +182,16 @@ void menuModelMixOne(event_t event)
md2->mltpx = editChoice(MIXES_2ND_COLUMN, y, STR_MULTPX, STR_VMLTPX, md2->mltpx, 0, 2, attr, event);
break;
case MIX_FIELD_DELAY_PREC:
md2->delayPrec = editChoice(MIXES_2ND_COLUMN, y, STR_MIX_DELAY_PREC, &STR_VPREC[1], md2->delayPrec, 0, 1, attr, event);
break;
case MIX_FIELD_DELAY_UP:
md2->delayUp = EDIT_DELAY(y, event, attr, STR_DELAYUP, md2->delayUp, PREC1);
md2->delayUp = EDIT_DELAY(y, event, attr, STR_DELAYUP, md2->delayUp, (md2->delayPrec ? PREC2 : PREC1));
break;
case MIX_FIELD_DELAY_DOWN:
md2->delayDown = EDIT_DELAY(y, event, attr, STR_DELAYDOWN, md2->delayDown, PREC1);
md2->delayDown = EDIT_DELAY(y, event, attr, STR_DELAYDOWN, md2->delayDown, (md2->delayPrec ? PREC2 : PREC1));
break;
case MIX_FIELD_SLOW_PREC:
+30 -8
View File
@@ -84,20 +84,42 @@ void MixEditAdvanced::buildBody(Window* form)
GET_SET_DEFAULT(mix->mixWarn));
edit->setZeroText(STR_OFF);
// Delay up/down precision
#if !PORTRAIT_LCD
grid.setColSpan(2);
#endif
line = form->newLine(grid);
new StaticText(line, rect_t{}, STR_MIX_DELAY_PREC);
new Choice(line, rect_t{}, &STR_VPREC[1], 0, 1,
GET_DEFAULT(mix->delayPrec),
[=](int newValue) {
mix->delayPrec = newValue;
delayUp->clearTextFlag(PREC2);
delayUp->setTextFlag(mix->delayPrec ? PREC2 : PREC1);
delayUp->update();
delayDn->clearTextFlag(PREC2);
delayDn->setTextFlag(mix->delayPrec ? PREC2 : PREC1);
delayDn->update();
SET_DIRTY();
});
#if !PORTRAIT_LCD
grid.setColSpan(1);
#endif
// Delay up
line = form->newLine(grid);
new StaticText(line, rect_t{}, STR_DELAYUP);
edit = new NumberEdit(line, rect_t{0, 0, NUM_EDIT_W, 0}, 0, DELAY_MAX,
GET_DEFAULT(mix->delayUp),
SET_VALUE(mix->delayUp, newValue), PREC1);
edit->setSuffix("s");
delayUp = new NumberEdit(line, rect_t{0, 0, NUM_EDIT_W, 0}, 0, DELAY_MAX,
GET_DEFAULT(mix->delayUp),
SET_VALUE(mix->delayUp, newValue), mix->delayPrec ? PREC2 : PREC1);
delayUp->setSuffix("s");
// Delay down
new StaticText(line, rect_t{}, STR_DELAYDOWN);
edit = new NumberEdit(line, rect_t{0, 0, NUM_EDIT_W, 0}, 0, DELAY_MAX,
GET_DEFAULT(mix->delayDown),
SET_VALUE(mix->delayDown, newValue), PREC1);
edit->setSuffix("s");
delayDn = new NumberEdit(line, rect_t{0, 0, NUM_EDIT_W, 0}, 0, DELAY_MAX,
GET_DEFAULT(mix->delayDown),
SET_VALUE(mix->delayDown, newValue), mix->delayPrec ? PREC2 : PREC1);
delayDn->setSuffix("s");
// Slow up/down precision
#if !PORTRAIT_LCD
+2
View File
@@ -38,6 +38,8 @@ class MixEditAdvanced : public Page
protected:
uint8_t channel;
uint8_t index;
NumberEdit* delayUp;
NumberEdit* delayDn;
NumberEdit* slowUp;
NumberEdit* slowDn;
+2 -1
View File
@@ -924,7 +924,8 @@ void evalFlightModeMixes(uint8_t mode, uint8_t tick10ms)
if (mode == e_perout_mode_normal && swTog) {
if (!mixState[i].delay)
_swPrev = _swOn;
mixState[i].delay = (mixEnabled > _swOn ? md->delayUp : md->delayDown) * 10;
int32_t precMult = md->delayPrec ? 1 : 10;
mixState[i].delay = (mixEnabled > _swOn ? md->delayUp : md->delayDown) * precMult;
mixState[i].now = mixEnabled;
mixState[i].prev = _swPrev;
}
@@ -401,9 +401,10 @@ static const struct YamlNode struct_MixData[] = {
YAML_UNSIGNED( "carryTrim", 1 ),
YAML_UNSIGNED( "mixWarn", 2 ),
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
YAML_UNSIGNED( "delayPrec", 1 ),
YAML_UNSIGNED( "speedPrec", 1 ),
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
YAML_PADDING( 2 ),
YAML_PADDING( 1 ),
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
@@ -427,9 +427,10 @@ static const struct YamlNode struct_MixData[] = {
YAML_UNSIGNED( "carryTrim", 1 ),
YAML_UNSIGNED( "mixWarn", 2 ),
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
YAML_UNSIGNED( "delayPrec", 1 ),
YAML_UNSIGNED( "speedPrec", 1 ),
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
YAML_PADDING( 2 ),
YAML_PADDING( 1 ),
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
@@ -427,9 +427,10 @@ static const struct YamlNode struct_MixData[] = {
YAML_UNSIGNED( "carryTrim", 1 ),
YAML_UNSIGNED( "mixWarn", 2 ),
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
YAML_UNSIGNED( "delayPrec", 1 ),
YAML_UNSIGNED( "speedPrec", 1 ),
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
YAML_PADDING( 2 ),
YAML_PADDING( 1 ),
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
@@ -429,9 +429,10 @@ static const struct YamlNode struct_MixData[] = {
YAML_UNSIGNED( "carryTrim", 1 ),
YAML_UNSIGNED( "mixWarn", 2 ),
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
YAML_UNSIGNED( "delayPrec", 1 ),
YAML_UNSIGNED( "speedPrec", 1 ),
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
YAML_PADDING( 2 ),
YAML_PADDING( 1 ),
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
@@ -401,9 +401,10 @@ static const struct YamlNode struct_MixData[] = {
YAML_UNSIGNED( "carryTrim", 1 ),
YAML_UNSIGNED( "mixWarn", 2 ),
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
YAML_UNSIGNED( "delayPrec", 1 ),
YAML_UNSIGNED( "speedPrec", 1 ),
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
YAML_PADDING( 2 ),
YAML_PADDING( 1 ),
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
@@ -401,9 +401,10 @@ static const struct YamlNode struct_MixData[] = {
YAML_UNSIGNED( "carryTrim", 1 ),
YAML_UNSIGNED( "mixWarn", 2 ),
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
YAML_UNSIGNED( "delayPrec", 1 ),
YAML_UNSIGNED( "speedPrec", 1 ),
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
YAML_PADDING( 2 ),
YAML_PADDING( 1 ),
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
@@ -429,9 +429,10 @@ static const struct YamlNode struct_MixData[] = {
YAML_UNSIGNED( "carryTrim", 1 ),
YAML_UNSIGNED( "mixWarn", 2 ),
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
YAML_UNSIGNED( "delayPrec", 1 ),
YAML_UNSIGNED( "speedPrec", 1 ),
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
YAML_PADDING( 2 ),
YAML_PADDING( 1 ),
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
@@ -429,9 +429,10 @@ static const struct YamlNode struct_MixData[] = {
YAML_UNSIGNED( "carryTrim", 1 ),
YAML_UNSIGNED( "mixWarn", 2 ),
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
YAML_UNSIGNED( "delayPrec", 1 ),
YAML_UNSIGNED( "speedPrec", 1 ),
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
YAML_PADDING( 2 ),
YAML_PADDING( 1 ),
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
@@ -400,9 +400,10 @@ static const struct YamlNode struct_MixData[] = {
YAML_UNSIGNED( "carryTrim", 1 ),
YAML_UNSIGNED( "mixWarn", 2 ),
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
YAML_UNSIGNED( "delayPrec", 1 ),
YAML_UNSIGNED( "speedPrec", 1 ),
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
YAML_PADDING( 2 ),
YAML_PADDING( 1 ),
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
@@ -401,9 +401,10 @@ static const struct YamlNode struct_MixData[] = {
YAML_UNSIGNED( "carryTrim", 1 ),
YAML_UNSIGNED( "mixWarn", 2 ),
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
YAML_UNSIGNED( "delayPrec", 1 ),
YAML_UNSIGNED( "speedPrec", 1 ),
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
YAML_PADDING( 2 ),
YAML_PADDING( 1 ),
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
@@ -404,9 +404,10 @@ static const struct YamlNode struct_MixData[] = {
YAML_UNSIGNED( "carryTrim", 1 ),
YAML_UNSIGNED( "mixWarn", 2 ),
YAML_ENUM("mltpx", 2, enum_MixerMultiplex),
YAML_UNSIGNED( "delayPrec", 1 ),
YAML_UNSIGNED( "speedPrec", 1 ),
YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ),
YAML_PADDING( 2 ),
YAML_PADDING( 1 ),
YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ),
YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ),
+1
View File
@@ -1111,3 +1111,4 @@ const char STR_WIDGET_SIZE[] = TR_WIDGET_SIZE;
#endif
const char STR_MIX_SLOW_PREC[] = TR_MIX_SLOW_PREC;
const char STR_MIX_DELAY_PREC[] = TR_MIX_DELAY_PREC;
+1
View File
@@ -1276,3 +1276,4 @@ extern const char STR_WIDGET_SIZE[];
#endif
extern const char STR_MIX_SLOW_PREC[];
extern const char STR_MIX_DELAY_PREC[];
+1
View File
@@ -1294,6 +1294,7 @@
#define TR_CREATE_NEW "新建"
#define TR_MIX_SLOW_PREC TR("慢放精度", "慢放精度 上行/下行")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "已存在同名主题目录 !"
+1
View File
@@ -1309,6 +1309,7 @@
#define TR_CREATE_NEW "Vytvořit"
#define TR_MIX_SLOW_PREC TR("Přesnost zpomal", "Přesnost zpomalení")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "Adresář vzhledu s tímto názvem již existuje."
+1
View File
@@ -1308,6 +1308,7 @@
#define TR_CREATE_NEW "Opret"
#define TR_MIX_SLOW_PREC TR("Træg præc", "Træg op/ned præcision")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "Der findes allerede et katalog med samme navn."
+1
View File
@@ -1299,6 +1299,7 @@
#define TR_CREATE_NEW "Erstelle"
#define TR_MIX_SLOW_PREC TR("Langs. Vorlauf", "Langs. Vor-/Rücklauf")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "Ein Theme-Verzeichnis mit demselben Namen existiert bereits"
+1
View File
@@ -1294,6 +1294,7 @@
#define TR_CREATE_NEW "Create"
#define TR_MIX_SLOW_PREC TR("Slow prec", "Slow up/dn prec")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "A theme directory with the same name already exists."
+1
View File
@@ -1296,6 +1296,7 @@
#define TR_CREATE_NEW "Create"
#define TR_MIX_SLOW_PREC TR("Slow prec", "Slow up/dn prec")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "A theme directory with the same name already exists."
+1
View File
@@ -1312,6 +1312,7 @@
#define TR_CREATE_NEW "Create"
#define TR_MIX_SLOW_PREC TR("Slow prec", "Slow up/dn prec")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "A theme directory with the same name already exists."
+1
View File
@@ -1311,6 +1311,7 @@
#define TR_CREATE_NEW "Créer"
#define TR_MIX_SLOW_PREC TR("Slow prec", "Slow up/dn prec")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "Un thème avec le même nom existe déjà."
+1
View File
@@ -1295,6 +1295,7 @@
#define TR_CREATE_NEW "יצירה חדשה"
#define TR_MIX_SLOW_PREC TR("Slow prec", "Slow up/dn prec")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "כבר קיימת ערכת נושא עם אותו שם"
+1
View File
@@ -1290,6 +1290,7 @@
#define TR_CREATE_NEW "Crea"
#define TR_MIX_SLOW_PREC TR("Prec. lenta", "Prec. su/giù lenta")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "Esiste già una cartella di temi con lo stesso nome."
+1
View File
@@ -1295,6 +1295,7 @@
#define TR_CREATE_NEW "作成"
#define TR_MIX_SLOW_PREC TR("Slow prec", "Slow up/dn prec")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "同じ名前のテーマディレクトリが既に存在します。"
+1
View File
@@ -1302,6 +1302,7 @@
#define TR_CREATE_NEW "Create"
#define TR_MIX_SLOW_PREC TR("Slow prec", "Slow up/dn prec")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "A theme directory with the same name already exists."
+1
View File
@@ -1295,6 +1295,7 @@
#define TR_CREATE_NEW "Utwórz"
#define TR_MIX_SLOW_PREC TR("Wolna prec.", "Wolna prec. góra/dół")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "Folder szablonów o takiej samej nazwie już istnieje."
+1
View File
@@ -1299,6 +1299,7 @@
#define TR_CREATE_NEW "Criar"
#define TR_MIX_SLOW_PREC TR("Prec. Lento", "Prec. mais/menos lento")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "Já existe um diretório de tema com o mesmo nome."
+1
View File
@@ -1298,6 +1298,7 @@
#define TR_CREATE_NEW "Создать"
#define TR_MIX_SLOW_PREC TR("Точн замедл", "Точность замедления")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "Уже есть каталог с таким названием"
+1
View File
@@ -1330,6 +1330,7 @@
#define TR_CREATE_NEW "Skapa"
#define TR_MIX_SLOW_PREC TR("Dröj preci.", "Fördröj upp/ner precision")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "Det finns redan ett tema med samma namn"
+1
View File
@@ -1299,6 +1299,7 @@
#define TR_CREATE_NEW "新建"
#define TR_MIX_SLOW_PREC TR("慢放精度", "慢放精度 上行/下行")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "已存在同名主題目錄 !"
+1
View File
@@ -1294,6 +1294,7 @@
#define TR_CREATE_NEW "Створити"
#define TR_MIX_SLOW_PREC TR("Точн. уповільн.", "Точність уповільнення")
#define TR_MIX_DELAY_PREC TR("Delay prec", "Delay up/dn prec")
#define TR_THEME_EXISTS "A theme directory with the same name already exists."