From 6b38d8f0eec9bda4f286f6f0f6be0365a12d4eb7 Mon Sep 17 00:00:00 2001 From: bsongis Date: Mon, 9 Jan 2012 20:56:38 +0000 Subject: [PATCH] TMR1 / TMR2 / ALT may now be used in custom switches! --- src/gruvin9x.cpp | 18 +++++++++++++++--- src/gruvin9x.h | 12 ++++++++---- src/lcd.cpp | 6 +++++- src/model_menus.cpp | 28 ++++++++++++++++++++-------- src/myeeprom.h | 1 + 5 files changed, 49 insertions(+), 16 deletions(-) diff --git a/src/gruvin9x.cpp b/src/gruvin9x.cpp index c02967784..c69916b62 100644 --- a/src/gruvin9x.cpp +++ b/src/gruvin9x.cpp @@ -297,8 +297,12 @@ FORCEINLINE int16_t getValue(uint8_t i) else if(i CHOUT_BASE+NUM_CHNOUT) - y = 125+cs.v2; +#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH) + if (cs.v1 > CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+2) + y = (128+cs.v2) * 4; else #endif + if (cs.v1 > CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS) + y = 128+cs.v2; + else +#endif + if (cs.v1 > CHOUT_BASE+NUM_CHNOUT) + y = 98+cs.v2; + else y = calc100toRESX(cs.v2); switch (cs.func) { diff --git a/src/gruvin9x.h b/src/gruvin9x.h index 948dac53a..dab479757 100644 --- a/src/gruvin9x.h +++ b/src/gruvin9x.h @@ -356,15 +356,19 @@ enum EnumKeys { #define NUM_PPM 8 #define CHOUT_BASE (PPM_BASE+NUM_PPM) -#ifdef FRSKY +#if defined(FRSKY) +#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH) +#define NUM_TELEMETRY 3 +#define TELEMETRY_CHANNELS "AD1AD2ALT" +#else #define NUM_TELEMETRY 2 #define TELEMETRY_CHANNELS "AD1AD2" -#define TELEMETRY_STRLEN 3 +#endif #else #define NUM_TELEMETRY 0 #define TELEMETRY_CHANNELS "" -#define TELEMETRY_STRLEN 0 #endif +#define TELEMETRY_STRLEN 3 #define DSW_THR 1 #define DSW_RUD 2 @@ -581,7 +585,7 @@ void eeLoadModel(uint8_t id); int8_t eeFindEmptyModel(uint8_t id, bool down); ///number of real input channels (1-9) plus virtual input channels X1-X4 -#define NUM_XCHNRAW (NUM_STICKS+NUM_POTS+2/*MAX/FULL*/+3/*CYC1-CYC3*/+NUM_PPM+NUM_CHNOUT+NUM_TELEMETRY) +#define NUM_XCHNRAW (NUM_STICKS+NUM_POTS+2/*MAX/FULL*/+3/*CYC1-CYC3*/+NUM_PPM+NUM_CHNOUT+MAX_TIMERS+NUM_TELEMETRY) ///number of real output channels (CH1-CH8) plus virtual output channels X1-X4 #define NUM_XCHNOUT (NUM_CHNOUT) //(NUM_CHNOUT)//+NUM_VIRT) diff --git a/src/lcd.cpp b/src/lcd.cpp index d1e864432..eab147215 100644 --- a/src/lcd.cpp +++ b/src/lcd.cpp @@ -414,8 +414,12 @@ void putsChnRaw(uint8_t x, uint8_t y, uint8_t idx, uint8_t att) putsStrIdx(x,y,PSTR("PPM"), idx - (NUM_STICKS+NUM_POTS+2+3), att); else if (idx<=NUM_STICKS+NUM_POTS+2+3+NUM_PPM+NUM_CHNOUT) putsStrIdx(x, y, PSTR("CH"), idx - (NUM_STICKS+NUM_POTS+2+3+NUM_PPM), att); + else if (idx<=NUM_STICKS+NUM_POTS+2+3+NUM_PPM+NUM_CHNOUT+MAX_TIMERS) + putsStrIdx(x, y, PSTR("TMR"), idx - (NUM_STICKS+NUM_POTS+2+3+NUM_PPM+NUM_CHNOUT), att); +#ifdef FRSKY else if (idx<=NUM_XCHNRAW) - lcd_putsnAtt(x, y, PSTR(TELEMETRY_CHANNELS)+TELEMETRY_STRLEN*(idx-1-(NUM_STICKS+NUM_POTS+2+3+NUM_PPM+NUM_CHNOUT)), TELEMETRY_STRLEN, att); + lcd_putsnAtt(x, y, PSTR(TELEMETRY_CHANNELS)+TELEMETRY_STRLEN*(idx-1-(NUM_STICKS+NUM_POTS+2+3+NUM_PPM+MAX_TIMERS+NUM_CHNOUT)), TELEMETRY_STRLEN, att); +#endif } void putsChn(uint8_t x, uint8_t y, uint8_t idx, uint8_t att) diff --git a/src/model_menus.cpp b/src/model_menus.cpp index 3e2bc8a15..7fdcc9063 100644 --- a/src/model_menus.cpp +++ b/src/model_menus.cpp @@ -1590,35 +1590,47 @@ void menuProcCustomSwitches(uint8_t event) if(cstate == CS_VOFS) { putsChnRaw(12*FW, y, cs.v1, m_posHorz==1 ? attr : 0); + #if defined(FRSKY) +#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH) + if (cs.v1 > NUM_XCHNRAW-1) { + lcd_outdezAtt(20*FW, y, (128+cs.v2) * 4, m_posHorz==2 ? attr : 0); + v2_min = -128; v2_max = 127; + } + else +#endif if (cs.v1 > NUM_XCHNRAW-NUM_TELEMETRY) { putsTelemetryChannel(20*FW, y, cs.v1+NUM_TELEMETRY-NUM_XCHNRAW-1, 128+cs.v2, m_posHorz==2 ? attr : 0); v2_min = -128; v2_max = 127; } else #endif - { - lcd_outdezAtt( 20*FW, y, cs.v2 ,m_posHorz==2 ? attr : 0); + if (cs.v1 > NUM_XCHNRAW-NUM_TELEMETRY-MAX_TIMERS) { + putsTime(17*FW, y, 98+cs.v2, m_posHorz==2 ? attr : 0, m_posHorz==2 ? attr : 0); // TODO optim + v2_min = -128; v2_max = 127; + } + else { + lcd_outdezAtt(20*FW, y, cs.v2, m_posHorz==2 ? attr : 0); v2_min = -125; v2_max = 125; } } else if(cstate == CS_VBOOL) { - putsSwitches(13*FW, y, cs.v1 ,m_posHorz==1 ? attr : 0); - putsSwitches(17*FW, y, cs.v2 ,m_posHorz==2 ? attr : 0); + putsSwitches(13*FW, y, cs.v1, m_posHorz==1 ? attr : 0); + putsSwitches(17*FW, y, cs.v2, m_posHorz==2 ? attr : 0); v1_min = -MAX_SWITCH; v1_max = MAX_SWITCH; v2_min = -MAX_SWITCH; v2_max = MAX_SWITCH; } else // cstate == CS_COMP { - putsChnRaw( 12*FW, y, cs.v1 ,m_posHorz==1 ? attr : 0); - putsChnRaw( 17*FW, y, cs.v2 ,m_posHorz==2 ? attr : 0); + putsChnRaw(12*FW, y, cs.v1, m_posHorz==1 ? attr : 0); + putsChnRaw(17*FW, y, cs.v2, m_posHorz==2 ? attr : 0); } if ((s_editMode>0 || p1valdiff) && attr) { switch (m_posHorz) { case 0: - CHECK_INCDEC_MODELVAR( event, cs.func, 0,CS_MAXF); + CHECK_INCDEC_MODELVAR(event, cs.func, 0,CS_MAXF); if (cstate != CS_STATE(cs.func)) { cs.v1 = 0; cs.v2 = 0; @@ -1628,7 +1640,7 @@ void menuProcCustomSwitches(uint8_t event) CHECK_INCDEC_MODELVAR(event, cs.v1, v1_min, v1_max); break; case 2: - CHECK_INCDEC_MODELVAR( event, cs.v2, v2_min, v2_max); + CHECK_INCDEC_MODELVAR(event, cs.v2, v2_min, v2_max); break; } } diff --git a/src/myeeprom.h b/src/myeeprom.h index cbf004f1b..e950df1b8 100644 --- a/src/myeeprom.h +++ b/src/myeeprom.h @@ -227,6 +227,7 @@ PACK(typedef struct t_PhaseData { }) PhaseData; #define MAX_MODELS 16 +#define MAX_TIMERS 2 #define MAX_PHASES 5 #define MAX_MIXERS 32 #define MAX_EXPOS 14