1
0
Fork 0
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:
bsongis 2014-12-02 07:26:12 +01:00
parent 7302d1b9af
commit 22c2846992
7 changed files with 64 additions and 13 deletions

View file

@ -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);
} }

View file

@ -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;

View file

@ -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

View file

@ -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);
} }
} }
} }

View file

@ -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)

View file

@ -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];

View file

@ -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