mirror of
https://github.com/opentx/opentx.git
synced 2025-07-24 16:55:20 +03:00
Trims displayed on main view - related to #1419
This commit is contained in:
parent
7302d1b9af
commit
22c2846992
7 changed files with 64 additions and 13 deletions
|
@ -124,16 +124,16 @@ void doMainScreenGraphics()
|
||||||
|
|
||||||
void displayTrims(uint8_t phase)
|
void displayTrims(uint8_t phase)
|
||||||
{
|
{
|
||||||
for (uint8_t i=0; i<4; i++) {
|
for (unsigned int i=0; i<NUM_STICKS; ++i) {
|
||||||
static coord_t x[4] = {TRIM_LH_X, TRIM_LV_X, TRIM_RV_X, TRIM_RH_X};
|
coord_t x[4] = { TRIM_LH_X, TRIM_LV_X, TRIM_RV_X, TRIM_RH_X };
|
||||||
static uint8_t vert[4] = {0,1,1,0};
|
uint8_t vert[4] = { 0, 1, 1, 0 };
|
||||||
coord_t xm, ym;
|
coord_t xm, ym;
|
||||||
xm = x[CONVERT_MODE(i)];
|
unsigned int stickIndex = CONVERT_MODE(i);
|
||||||
|
xm = x[stickIndex];
|
||||||
|
|
||||||
uint8_t att = ROUND;
|
uint32_t att = ROUND;
|
||||||
int16_t val = getTrimValue(phase, i);
|
int32_t val = getTrimValue(phase, i);
|
||||||
|
int32_t dir = val;
|
||||||
int16_t dir = val;
|
|
||||||
bool exttrim = false;
|
bool exttrim = false;
|
||||||
if (val < TRIM_MIN || val > TRIM_MAX) {
|
if (val < TRIM_MIN || val > TRIM_MAX) {
|
||||||
exttrim = true;
|
exttrim = true;
|
||||||
|
@ -166,6 +166,11 @@ void displayTrims(uint8_t phase)
|
||||||
if (exttrim) {
|
if (exttrim) {
|
||||||
lcd_hline(xm-1, ym, 3);
|
lcd_hline(xm-1, ym, 3);
|
||||||
}
|
}
|
||||||
|
if (g_model.displayTrims != DISPLAY_TRIMS_NEVER) {
|
||||||
|
if ((g_model.displayTrims == DISPLAY_TRIMS_ALWAYS && dir != 0) || (trimsDisplayTimer > 0 && (trimsDisplayMask & (1<<stickIndex)))) {
|
||||||
|
lcd_outdezAtt(dir>0 ? 25 : 57, xm-2, -abs(dir), TINSIZE|VERTICAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ym = 60;
|
ym = 60;
|
||||||
|
@ -183,6 +188,11 @@ void displayTrims(uint8_t phase)
|
||||||
if (exttrim) {
|
if (exttrim) {
|
||||||
lcd_vline(xm, ym-1, 3);
|
lcd_vline(xm, ym-1, 3);
|
||||||
}
|
}
|
||||||
|
if (g_model.displayTrims != DISPLAY_TRIMS_NEVER && dir != 0) {
|
||||||
|
if (g_model.displayTrims == DISPLAY_TRIMS_ALWAYS || (trimsDisplayTimer > 0 && (trimsDisplayMask & (1<<stickIndex)))) {
|
||||||
|
lcd_outdezAtt((stickIndex==0 ? TRIM_LH_X : TRIM_RH_X)+(dir>0 ? -9 : 22), ym-2, -abs(dir), TINSIZE);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
lcd_square(xm-3, ym-3, 7, att);
|
lcd_square(xm-3, ym-3, 7, att);
|
||||||
}
|
}
|
||||||
|
|
|
@ -896,6 +896,7 @@ enum menuModelSetupItems {
|
||||||
CASE_CPUARM(ITEM_MODEL_TIMER3_COUNTDOWN_BEEP)
|
CASE_CPUARM(ITEM_MODEL_TIMER3_COUNTDOWN_BEEP)
|
||||||
ITEM_MODEL_EXTENDED_LIMITS,
|
ITEM_MODEL_EXTENDED_LIMITS,
|
||||||
ITEM_MODEL_EXTENDED_TRIMS,
|
ITEM_MODEL_EXTENDED_TRIMS,
|
||||||
|
CASE_CPUARM(ITEM_MODEL_DISPLAY_TRIMS)
|
||||||
ITEM_MODEL_TRIM_INC,
|
ITEM_MODEL_TRIM_INC,
|
||||||
CASE_PCBTARANIS(ITEM_MODEL_THROTTLE_LABEL)
|
CASE_PCBTARANIS(ITEM_MODEL_THROTTLE_LABEL)
|
||||||
ITEM_MODEL_THROTTLE_REVERSED,
|
ITEM_MODEL_THROTTLE_REVERSED,
|
||||||
|
@ -1013,7 +1014,7 @@ void menuModelSetup(uint8_t event)
|
||||||
#define POT_WARN_ITEMS() ((g_model.nPotsToWarn >> 6) ? (uint8_t)NUM_POTS : (uint8_t)0)
|
#define POT_WARN_ITEMS() ((g_model.nPotsToWarn >> 6) ? (uint8_t)NUM_POTS : (uint8_t)0)
|
||||||
#define TIMER_ROWS 2, 0, CASE_PERSISTENT_TIMERS(0) 0, 0
|
#define TIMER_ROWS 2, 0, CASE_PERSISTENT_TIMERS(0) 0, 0
|
||||||
bool CURSOR_ON_CELL = (m_posHorz >= 0);
|
bool CURSOR_ON_CELL = (m_posHorz >= 0);
|
||||||
MENU_TAB({ 0, 0, CASE_PCBTARANIS(0) TIMER_ROWS, TIMER_ROWS, TIMER_ROWS, 0, 1, 0, CASE_PCBTARANIS(LABEL(Throttle)) 0, 0, 0, CASE_CPUARM(LABEL(PreflightCheck)) CASE_CPUARM(0) 0, uint8_t(NAVIGATION_LINE_BY_LINE|getSwitchWarningsAllowed()), ONE_2x2POS_DEFINED() ? TITLE_ROW : HIDDEN_ROW, POT_WARN_ITEMS(), NAVIGATION_LINE_BY_LINE|(NUM_STICKS+NUM_POTS+NUM_ROTARY_ENCODERS-1), 0, LABEL(InternalModule), 0, IF_INTERNAL_MODULE_ON(1), IF_INTERNAL_MODULE_ON(IS_D8_RX(0) ? (uint8_t)1 : (uint8_t)2), IF_INTERNAL_MODULE_ON(FAILSAFE_ROWS(INTERNAL_MODULE)), LABEL(ExternalModule), (IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0, EXTERNAL_MODULE_CHANNELS_ROWS(), (IS_MODULE_XJT(EXTERNAL_MODULE) && IS_D8_RX(EXTERNAL_MODULE)) ? (uint8_t)1 : (IS_MODULE_PPM(EXTERNAL_MODULE) || IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW, IF_EXTERNAL_MODULE_XJT(FAILSAFE_ROWS(EXTERNAL_MODULE)), LABEL(Trainer), 0, TRAINER_CHANNELS_ROWS(), IF_TRAINER_ON(2)});
|
MENU_TAB({ 0, 0, CASE_PCBTARANIS(0) TIMER_ROWS, TIMER_ROWS, TIMER_ROWS, 0, 1, 0, 0, CASE_PCBTARANIS(LABEL(Throttle)) 0, 0, 0, CASE_CPUARM(LABEL(PreflightCheck)) CASE_CPUARM(0) 0, uint8_t(NAVIGATION_LINE_BY_LINE|getSwitchWarningsAllowed()), ONE_2x2POS_DEFINED() ? TITLE_ROW : HIDDEN_ROW, POT_WARN_ITEMS(), NAVIGATION_LINE_BY_LINE|(NUM_STICKS+NUM_POTS+NUM_ROTARY_ENCODERS-1), 0, LABEL(InternalModule), 0, IF_INTERNAL_MODULE_ON(1), IF_INTERNAL_MODULE_ON(IS_D8_RX(0) ? (uint8_t)1 : (uint8_t)2), IF_INTERNAL_MODULE_ON(FAILSAFE_ROWS(INTERNAL_MODULE)), LABEL(ExternalModule), (IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0, EXTERNAL_MODULE_CHANNELS_ROWS(), (IS_MODULE_XJT(EXTERNAL_MODULE) && IS_D8_RX(EXTERNAL_MODULE)) ? (uint8_t)1 : (IS_MODULE_PPM(EXTERNAL_MODULE) || IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW, IF_EXTERNAL_MODULE_XJT(FAILSAFE_ROWS(EXTERNAL_MODULE)), LABEL(Trainer), 0, TRAINER_CHANNELS_ROWS(), IF_TRAINER_ON(2)});
|
||||||
#elif defined(CPUARM)
|
#elif defined(CPUARM)
|
||||||
#define IF_EXTERNAL_MODULE_XJT(x) (IS_MODULE_XJT(EXTERNAL_MODULE) ? (uint8_t)x : HIDDEN_ROW)
|
#define IF_EXTERNAL_MODULE_XJT(x) (IS_MODULE_XJT(EXTERNAL_MODULE) ? (uint8_t)x : HIDDEN_ROW)
|
||||||
#define IF_EXTERNAL_MODULE_ON(x) (g_model.externalModule == MODULE_TYPE_NONE ? HIDDEN_ROW : (uint8_t)(x))
|
#define IF_EXTERNAL_MODULE_ON(x) (g_model.externalModule == MODULE_TYPE_NONE ? HIDDEN_ROW : (uint8_t)(x))
|
||||||
|
@ -1032,7 +1033,7 @@ void menuModelSetup(uint8_t event)
|
||||||
#define EXTRA_MODULE_ROWS
|
#define EXTRA_MODULE_ROWS
|
||||||
#endif
|
#endif
|
||||||
#define TRAINER_MODULE_ROWS
|
#define TRAINER_MODULE_ROWS
|
||||||
MENU_TAB({ 0, 0, TIMER_ROWS, TIMER_ROWS, TIMER_ROWS, 0, 1, 0, CASE_PCBTARANIS(LABEL(Throttle)) 0, 0, 0, CASE_CPUARM(LABEL(PreflightCheck)) CASE_CPUARM(0) 0, 6, NUM_STICKS+NUM_POTS+NUM_ROTARY_ENCODERS-1, 0, LABEL(ExternalModule), (IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0, EXTERNAL_MODULE_CHANNELS_ROWS(), (IS_MODULE_XJT(EXTERNAL_MODULE) && IS_D8_RX(EXTERNAL_MODULE)) ? (uint8_t)1 : (IS_MODULE_PPM(EXTERNAL_MODULE) || IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW, IF_EXTERNAL_MODULE_XJT(FAILSAFE_ROWS(EXTERNAL_MODULE)), EXTRA_MODULE_ROWS TRAINER_MODULE_ROWS });
|
MENU_TAB({ 0, 0, TIMER_ROWS, TIMER_ROWS, TIMER_ROWS, 0, 1, 0, 0, CASE_PCBTARANIS(LABEL(Throttle)) 0, 0, 0, CASE_CPUARM(LABEL(PreflightCheck)) CASE_CPUARM(0) 0, 6, NUM_STICKS+NUM_POTS+NUM_ROTARY_ENCODERS-1, 0, LABEL(ExternalModule), (IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0, EXTERNAL_MODULE_CHANNELS_ROWS(), (IS_MODULE_XJT(EXTERNAL_MODULE) && IS_D8_RX(EXTERNAL_MODULE)) ? (uint8_t)1 : (IS_MODULE_PPM(EXTERNAL_MODULE) || IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW, IF_EXTERNAL_MODULE_XJT(FAILSAFE_ROWS(EXTERNAL_MODULE)), EXTRA_MODULE_ROWS TRAINER_MODULE_ROWS });
|
||||||
#elif defined(CPUM64)
|
#elif defined(CPUM64)
|
||||||
#define CURSOR_ON_CELL (true)
|
#define CURSOR_ON_CELL (true)
|
||||||
#define MODEL_SETUP_MAX_LINES ((IS_PPM_PROTOCOL(protocol)||IS_DSM2_PROTOCOL(protocol)||IS_PXX_PROTOCOL(protocol)) ? 1+ITEM_MODEL_SETUP_MAX : ITEM_MODEL_SETUP_MAX)
|
#define MODEL_SETUP_MAX_LINES ((IS_PPM_PROTOCOL(protocol)||IS_DSM2_PROTOCOL(protocol)||IS_PXX_PROTOCOL(protocol)) ? 1+ITEM_MODEL_SETUP_MAX : ITEM_MODEL_SETUP_MAX)
|
||||||
|
@ -1248,6 +1249,12 @@ void menuModelSetup(uint8_t event)
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#if defined(CPUARM)
|
||||||
|
case ITEM_MODEL_DISPLAY_TRIMS:
|
||||||
|
g_model.displayTrims = selectMenuItem(MODEL_SETUP_2ND_COLUMN, y, "Display Trims", "\006No\0 ChangeYes", g_model.displayTrims, 0, 2, attr, event);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
case ITEM_MODEL_TRIM_INC:
|
case ITEM_MODEL_TRIM_INC:
|
||||||
g_model.trimInc = selectMenuItem(MODEL_SETUP_2ND_COLUMN, y, STR_TRIMINC, STR_VTRIMINC, g_model.trimInc, -2, 2, attr, event);
|
g_model.trimInc = selectMenuItem(MODEL_SETUP_2ND_COLUMN, y, STR_TRIMINC, STR_VTRIMINC, g_model.trimInc, -2, 2, attr, event);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -115,13 +115,14 @@
|
||||||
#define NO_UNIT 0x40
|
#define NO_UNIT 0x40
|
||||||
|
|
||||||
#if defined(CPUARM)
|
#if defined(CPUARM)
|
||||||
#define FONTSIZE(x) ((x) & 0x0F00)
|
#define FONTSIZE(x) ((x) & 0x0700)
|
||||||
#define TINSIZE 0x0100
|
#define TINSIZE 0x0100
|
||||||
#define SMLSIZE 0x0200
|
#define SMLSIZE 0x0200
|
||||||
#define MIDSIZE 0x0300
|
#define MIDSIZE 0x0300
|
||||||
#define DBLSIZE 0x0400
|
#define DBLSIZE 0x0400
|
||||||
#define XXLSIZE 0x0500
|
#define XXLSIZE 0x0500
|
||||||
#define ERASEBG 0x8000
|
#define ERASEBG 0x8000
|
||||||
|
#define VERTICAL 0x0800
|
||||||
#else
|
#else
|
||||||
#define DBLSIZE 0x04
|
#define DBLSIZE 0x04
|
||||||
#define MIDSIZE DBLSIZE
|
#define MIDSIZE DBLSIZE
|
||||||
|
|
|
@ -119,7 +119,10 @@ void lcdPutPattern(coord_t x, coord_t y, const uint8_t * pattern, uint8_t width,
|
||||||
}
|
}
|
||||||
if (inv) plot = !plot;
|
if (inv) plot = !plot;
|
||||||
if (!blink) {
|
if (!blink) {
|
||||||
lcd_plot(x, y+j, plot ? FORCE : ERASE);
|
if (flags & VERTICAL)
|
||||||
|
lcd_plot(y+j, LCD_H-x, plot ? FORCE : ERASE);
|
||||||
|
else
|
||||||
|
lcd_plot(x, y+j, plot ? FORCE : ERASE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2034,6 +2034,13 @@ enum TelemetryType
|
||||||
PROTOCOL_FRSKY_D_SECONDARY
|
PROTOCOL_FRSKY_D_SECONDARY
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum DisplayTrims
|
||||||
|
{
|
||||||
|
DISPLAY_TRIMS_NEVER,
|
||||||
|
DISPLAY_TRIMS_CHANGE,
|
||||||
|
DISPLAY_TRIMS_ALWAYS
|
||||||
|
};
|
||||||
|
|
||||||
PACK(typedef struct {
|
PACK(typedef struct {
|
||||||
ModelHeader header;
|
ModelHeader header;
|
||||||
TimerData timers[MAX_TIMERS];
|
TimerData timers[MAX_TIMERS];
|
||||||
|
@ -2042,7 +2049,8 @@ PACK(typedef struct {
|
||||||
uint8_t thrTrim:1; // Enable Throttle Trim
|
uint8_t thrTrim:1; // Enable Throttle Trim
|
||||||
AVR_FIELD(int8_t ppmNCH:4)
|
AVR_FIELD(int8_t ppmNCH:4)
|
||||||
ARM_FIELD(uint8_t noGlobalFunctions:1)
|
ARM_FIELD(uint8_t noGlobalFunctions:1)
|
||||||
ARM_FIELD(int8_t spare2:3)
|
ARM_FIELD(uint8_t displayTrims:2)
|
||||||
|
ARM_FIELD(uint8_t spare2:1)
|
||||||
int8_t trimInc:3; // Trim Increments
|
int8_t trimInc:3; // Trim Increments
|
||||||
uint8_t disableThrottleWarning:1;
|
uint8_t disableThrottleWarning:1;
|
||||||
ARM_FIELD(uint8_t displayChecklist:1)
|
ARM_FIELD(uint8_t displayChecklist:1)
|
||||||
|
|
|
@ -218,6 +218,13 @@ void per10ms()
|
||||||
if (trimsCheckTimer) trimsCheckTimer--;
|
if (trimsCheckTimer) trimsCheckTimer--;
|
||||||
if (ppmInValid) ppmInValid--;
|
if (ppmInValid) ppmInValid--;
|
||||||
|
|
||||||
|
#if defined(CPUARM)
|
||||||
|
if (trimsDisplayTimer)
|
||||||
|
trimsDisplayTimer--;
|
||||||
|
else
|
||||||
|
trimsDisplayMask = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(RTCLOCK)
|
#if defined(RTCLOCK)
|
||||||
/* Update global Date/Time every 100 per10ms cycles */
|
/* Update global Date/Time every 100 per10ms cycles */
|
||||||
if (++g_ms100 == 100) {
|
if (++g_ms100 == 100) {
|
||||||
|
@ -1281,6 +1288,11 @@ uint8_t checkTrim(uint8_t event)
|
||||||
int before;
|
int before;
|
||||||
bool thro;
|
bool thro;
|
||||||
|
|
||||||
|
#if defined(CPUARM)
|
||||||
|
trimsDisplayTimer = 200; // 2 seconds
|
||||||
|
trimsDisplayMask |= (1<<idx);
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(GVARS)
|
#if defined(GVARS)
|
||||||
if (TRIM_REUSED(idx)) {
|
if (TRIM_REUSED(idx)) {
|
||||||
#if defined(PCBSTD)
|
#if defined(PCBSTD)
|
||||||
|
@ -1614,6 +1626,11 @@ uint16_t s_timeCum16ThrP; // THR% in 1/16 sec
|
||||||
|
|
||||||
uint8_t trimsCheckTimer = 0;
|
uint8_t trimsCheckTimer = 0;
|
||||||
|
|
||||||
|
#if defined(CPUARM)
|
||||||
|
uint8_t trimsDisplayTimer = 0;
|
||||||
|
uint8_t trimsDisplayMask = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
void timerReset(uint8_t idx)
|
void timerReset(uint8_t idx)
|
||||||
{
|
{
|
||||||
TimerState & timerState = timersStates[idx];
|
TimerState & timerState = timersStates[idx];
|
||||||
|
|
|
@ -895,6 +895,11 @@ extern safetych_t safetyCh[NUM_CHNOUT];
|
||||||
|
|
||||||
extern uint8_t trimsCheckTimer;
|
extern uint8_t trimsCheckTimer;
|
||||||
|
|
||||||
|
#if defined(CPUARM)
|
||||||
|
extern uint8_t trimsDisplayTimer;
|
||||||
|
extern uint8_t trimsDisplayMask;
|
||||||
|
#endif
|
||||||
|
|
||||||
#define TMR_OFF 0
|
#define TMR_OFF 0
|
||||||
#define TMR_RUNNING 1
|
#define TMR_RUNNING 1
|
||||||
#define TMR_NEGATIVE 2
|
#define TMR_NEGATIVE 2
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue