[Rotary encoders] Navigation system reworked
This commit is contained in:
+21
-20
@@ -367,14 +367,11 @@ void menuGeneralSetup(uint8_t event)
|
||||
if(attr) g_eeGeneral.inactivityTimer = checkIncDec(event, g_eeGeneral.inactivityTimer, 0, 250, EE_GENERAL); //0..250minutes
|
||||
break;
|
||||
|
||||
#if defined(ROTARY_ENCODERS) && NUM_ROTARY_ENCODERS > 0
|
||||
#if ROTARY_ENCODERS > 0
|
||||
case ITEM_SETUP_RE_NAVIGATION:
|
||||
g_eeGeneral.reNavigation = selectMenuItem(RADIO_SETUP_2ND_COLUMN, y, STR_RENAVIG, STR_VRENAVIG, g_eeGeneral.reNavigation, 0, NUM_ROTARY_ENCODERS, attr, event);
|
||||
if (attr && checkIncDec_Ret) {
|
||||
for (uint8_t i=0; i<ROTARY_ENCODERS; i++)
|
||||
g_rotenc[i] = 0;
|
||||
p1valdiff = 0;
|
||||
scrollRE = 0;
|
||||
g_rotenc[NAVIGATION_RE_IDX()] = 0;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
@@ -474,6 +471,11 @@ void menuGeneralSetup(uint8_t event)
|
||||
resumePulses();
|
||||
clearKeyEvents();
|
||||
}
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
if (m_posHorz > 0) {
|
||||
REPEAT_LAST_CURSOR_MOVE();
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -538,14 +540,14 @@ void menuGeneralSdManager(uint8_t event)
|
||||
f_chdir(ROOT_PATH);
|
||||
reusableBuffer.sd.offset = 65535;
|
||||
break;
|
||||
#if defined(ROTARY_ENCODERS)
|
||||
case EVT_KEY_FIRST_ROTARY_ENCODERS:
|
||||
if (!IS_RE_NAVIGATION_EVT(event))
|
||||
break;
|
||||
// no break
|
||||
#endif
|
||||
|
||||
#if defined(PCBX9D)
|
||||
case EVT_KEY_BREAK(KEY_ENTER):
|
||||
#else
|
||||
CASE_EVT_ROTARY_BREAK
|
||||
case EVT_KEY_FIRST(KEY_RIGHT):
|
||||
case EVT_KEY_FIRST(KEY_ENTER):
|
||||
#endif
|
||||
{
|
||||
if (m_posVert > 0) {
|
||||
uint8_t index = m_posVert-1-s_pgOfs;
|
||||
@@ -554,18 +556,17 @@ void menuGeneralSdManager(uint8_t event)
|
||||
s_pgOfs = 0;
|
||||
m_posVert = 1;
|
||||
reusableBuffer.sd.offset = 65535;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
#if defined(ROTARY_ENCODERS)
|
||||
case EVT_KEY_LONG_ROTARY_ENCODERS:
|
||||
if (!IS_RE_NAVIGATION_EVT(event))
|
||||
if (!IS_ROTARY_BREAK(event) || m_posVert==0)
|
||||
break;
|
||||
// no break
|
||||
#endif
|
||||
// no break;
|
||||
}
|
||||
|
||||
case EVT_KEY_LONG(KEY_ENTER):
|
||||
killEvents(event);
|
||||
_event = 0;
|
||||
if (m_posVert == 0) {
|
||||
s_menu[s_menu_count++] = STR_SD_INFO;
|
||||
s_menu[s_menu_count++] = STR_SD_FORMAT;
|
||||
@@ -863,8 +864,8 @@ void menuGeneralDiagKeys(uint8_t event)
|
||||
}
|
||||
}
|
||||
|
||||
#if defined (ROTARY_ENCODERS)
|
||||
for(uint8_t i=0; i<ROTARY_ENCODERS; i++) {
|
||||
#if defined(ROTARY_ENCODERS) || defined(ROTARY_ENCODER_NAVIGATION)
|
||||
for(uint8_t i=0; i<DIM(g_rotenc); i++) {
|
||||
uint8_t y = i*FH + FH;
|
||||
lcd_putsiAtt(14*FW, y, STR_VRENCODERS, i, 0);
|
||||
lcd_outdezNAtt(18*FW, y, g_rotenc[i], LEFT|(switchState((EnumKeys)(BTN_REa+i)) ? INVERS : 0));
|
||||
|
||||
@@ -180,9 +180,15 @@ void pwrOff()
|
||||
#endif
|
||||
}
|
||||
|
||||
#if ROTARY_ENCODERS <= 2
|
||||
#define ROTENC_DOWN() ((~PIND & 0x20) || (~PIND & 0x10))
|
||||
#else
|
||||
#define ROTENC_DOWN() (0)
|
||||
#endif
|
||||
|
||||
FORCEINLINE uint8_t keyDown()
|
||||
{
|
||||
return (~PINL) & 0x3F;
|
||||
return ((~PINL) & 0x3F) || ROTENC_DOWN();
|
||||
}
|
||||
|
||||
bool switchState(EnumKeys enuk)
|
||||
|
||||
+11
-3
@@ -34,7 +34,7 @@
|
||||
|
||||
#include "open9x.h"
|
||||
|
||||
static uint8_t s_evt;
|
||||
uint8_t s_evt;
|
||||
void putEvent(uint8_t evt)
|
||||
{
|
||||
s_evt = evt;
|
||||
@@ -143,8 +143,16 @@ void pauseEvents(uint8_t event)
|
||||
|
||||
void killEvents(uint8_t event)
|
||||
{
|
||||
event = EVT_KEY_MASK(event);
|
||||
if (event < (int)DIM(keys)) keys[event].killEvents();
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
if (event == EVT_ROTARY_LONG) {
|
||||
killEvents(BTN_REa + NAVIGATION_RE_IDX());
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
event = EVT_KEY_MASK(event);
|
||||
if (event < (int)DIM(keys)) keys[event].killEvents();
|
||||
}
|
||||
}
|
||||
|
||||
void clearKeyEvents()
|
||||
|
||||
+2
-13
@@ -328,24 +328,13 @@ void menuMainView(uint8_t event)
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
case EVT_KEY_BREAK_ROTARY_ENCODERS:
|
||||
if (!IS_RE_NAVIGATION_EVT(event))
|
||||
break;
|
||||
// no break;
|
||||
#endif
|
||||
CASE_EVT_ROTARY_BREAK
|
||||
case EVT_KEY_MODEL_MENU:
|
||||
pushMenu(menuModelSelect);
|
||||
killEvents(event);
|
||||
break;
|
||||
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
case EVT_KEY_LONG_ROTARY_ENCODERS:
|
||||
if (!IS_RE_NAVIGATION_EVT(event))
|
||||
break;
|
||||
killEvents(event);
|
||||
// no break;
|
||||
#endif
|
||||
CASE_EVT_ROTARY_LONG
|
||||
case EVT_KEY_GENERAL_MENU:
|
||||
pushMenu(menuGeneralSetup);
|
||||
killEvents(event);
|
||||
|
||||
+163
-216
@@ -76,11 +76,7 @@ void displayScrollbar(xcoord_t x, uint8_t y, uint8_t h, uint16_t offset, uint16_
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(PCBX9D) || defined(ROTARY_ENCODER_NAVIGATION)
|
||||
int8_t scrollRE;
|
||||
int16_t p1valdiff;
|
||||
int8_t lastCursorMove;
|
||||
#elif defined(NAVIGATION_POT1)
|
||||
#if defined(NAVIGATION_POT1)
|
||||
int16_t p1valdiff;
|
||||
#endif
|
||||
|
||||
@@ -114,22 +110,30 @@ int16_t checkIncDec(uint8_t event, int16_t val, int16_t i_min, int16_t i_max, ui
|
||||
}
|
||||
#endif
|
||||
|
||||
if (event==EVT_KEY_FIRST(KEY_RIGHT) || event==EVT_KEY_REPT(KEY_RIGHT) || (s_editMode>0 && (event==EVT_KEY_FIRST(KEY_UP) || event==EVT_KEY_REPT(KEY_UP)))) {
|
||||
#if defined(PCBX9D)
|
||||
if (s_editMode>0 && (IS_ROTARY_RIGHT(event) || event==EVT_KEY_FIRST(KEY_UP) || event==EVT_KEY_REPT(KEY_UP))) {
|
||||
#else
|
||||
if (event==EVT_KEY_FIRST(KEY_RIGHT) || event==EVT_KEY_REPT(KEY_RIGHT) || (s_editMode>0 && (IS_ROTARY_RIGHT(event) || event==EVT_KEY_FIRST(KEY_UP) || event==EVT_KEY_REPT(KEY_UP)))) {
|
||||
#endif
|
||||
newval++;
|
||||
AUDIO_KEYPAD_UP();
|
||||
}
|
||||
else if (event==EVT_KEY_FIRST(KEY_LEFT) || event==EVT_KEY_REPT(KEY_LEFT) || (s_editMode>0 && (event==EVT_KEY_FIRST(KEY_DOWN) || event==EVT_KEY_REPT(KEY_DOWN)))) {
|
||||
#if defined(PCBX9D)
|
||||
else if (s_editMode>0 && (IS_ROTARY_LEFT(event) || event==EVT_KEY_FIRST(KEY_DOWN) || event==EVT_KEY_REPT(KEY_DOWN))) {
|
||||
#else
|
||||
else if (event==EVT_KEY_FIRST(KEY_LEFT) || event==EVT_KEY_REPT(KEY_LEFT) || (s_editMode>0 && (IS_ROTARY_LEFT(event) || event==EVT_KEY_FIRST(KEY_DOWN) || event==EVT_KEY_REPT(KEY_DOWN)))) {
|
||||
#endif
|
||||
newval--;
|
||||
AUDIO_KEYPAD_DOWN();
|
||||
}
|
||||
|
||||
if (i_min==0 && i_max==1 && event==EVT_KEY_BREAK(KEY_ENTER)) {
|
||||
if (i_min==0 && i_max==1 && (event==EVT_KEY_BREAK(KEY_ENTER) || IS_ROTARY_BREAK(event))) {
|
||||
s_editMode = 0;
|
||||
newval = !val;
|
||||
}
|
||||
|
||||
#if defined(PCBX9D) || defined(ROTARY_ENCODER_NAVIGATION) || defined(NAVIGATION_POT1)
|
||||
//change values based on P1
|
||||
#if defined(NAVIGATION_POT1)
|
||||
// change values based on P1
|
||||
newval -= p1valdiff;
|
||||
p1valdiff = 0;
|
||||
#endif
|
||||
@@ -167,7 +171,7 @@ int16_t checkIncDec(uint8_t event, int16_t val, int16_t i_min, int16_t i_max, ui
|
||||
}
|
||||
|
||||
if (newval != val) {
|
||||
if (!(i_flags & NO_INCDEC_MARKS) && (newval != i_max) && (newval != i_min) && (newval==0 || newval==-100 || newval==+100)) {
|
||||
if (!(i_flags & NO_INCDEC_MARKS) && (newval != i_max) && (newval != i_min) && (newval==0 || newval==-100 || newval==+100) && !IS_ROTARY_EVENT(event)) {
|
||||
pauseEvents(event); // delay before auto-repeat continues
|
||||
if (newval>val) // without AUDIO it's optimized, because the 2 sounds are the same
|
||||
AUDIO_KEYPAD_UP();
|
||||
@@ -205,56 +209,6 @@ bool check_submenu_simple(check_event_t event, uint8_t maxrow)
|
||||
return check_simple(event, 0, 0, 0, maxrow);
|
||||
}
|
||||
|
||||
#if defined(PCBX9D)
|
||||
void check_rotary_encoder(uint8_t & event)
|
||||
{
|
||||
if (lastCursorMove < -1 || event==EVT_KEY_REPT(KEY_MOVE_UP) || event==EVT_KEY_FIRST(KEY_MOVE_UP)) {
|
||||
scrollRE = -1;
|
||||
}
|
||||
else if (lastCursorMove > 1 || event==EVT_KEY_REPT(KEY_MOVE_DOWN) || event==EVT_KEY_FIRST(KEY_MOVE_DOWN)) {
|
||||
scrollRE = 1;
|
||||
}
|
||||
else {
|
||||
scrollRE = 0;
|
||||
}
|
||||
|
||||
if (s_editMode > 0) {
|
||||
p1valdiff = scrollRE;
|
||||
scrollRE = 0;
|
||||
}
|
||||
|
||||
// TODO remove later...
|
||||
uint8_t key = EVT_KEY_MASK(event);
|
||||
if (key==KEY_MOVE_UP || key==KEY_MOVE_DOWN)
|
||||
event = 0;
|
||||
}
|
||||
#elif defined(ROTARY_ENCODER_NAVIGATION)
|
||||
void check_rotary_encoder()
|
||||
{
|
||||
// check rotary encoder 1 if changed -> cursor down/up
|
||||
static int16_t rePreviousValue;
|
||||
|
||||
if (IS_RE_NAVIGATION_ENABLE()) {
|
||||
uint8_t re = NAVIGATION_RE_IDX();
|
||||
p1valdiff = 0;
|
||||
int16_t reNewValue = (g_rotenc[re] / ROTARY_ENCODER_GRANULARITY);
|
||||
scrollRE = rePreviousValue - reNewValue;
|
||||
if (scrollRE) {
|
||||
rePreviousValue = reNewValue;
|
||||
if (s_editMode > 0) {
|
||||
p1valdiff = -scrollRE;
|
||||
scrollRE = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
rePreviousValue = 0;
|
||||
p1valdiff = 0;
|
||||
scrollRE = 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void title(const pm_char * s)
|
||||
{
|
||||
lcd_putsAtt(0, 0, s, INVERS);
|
||||
@@ -263,27 +217,16 @@ void title(const pm_char * s)
|
||||
#define SCROLL_TH 64
|
||||
#define SCROLL_POT1_TH 32
|
||||
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
#define MAXCOL(row) ((horTab && row >= 0) ? pgm_read_byte(horTab+min(row, (maxrow_t)horTabMax)) : (const uint8_t)0)
|
||||
#else
|
||||
#define MAXCOL(row) (horTab ? pgm_read_byte(horTab+min(row, (maxrow_t)horTabMax)) : (const uint8_t)0)
|
||||
#endif
|
||||
|
||||
#define INC(val,max) if(val<max) {val++;} else {val=0;}
|
||||
#define DEC(val,max) if(val>0 ) {val--;} else {val=max;}
|
||||
|
||||
#if defined(PCBX9D) || defined(PCBACT)
|
||||
#define RE_NAV_ENTER (KEY_ENTER)
|
||||
#define SCROLL(min, val, max) ((val) > (max) ? ((min) + (val) - (max) - 1) : ((val) < (min) ? ((max) - (min) + (val) + 1) : (val)))
|
||||
#else
|
||||
#define RE_NAV_ENTER (BTN_REa+g_eeGeneral.reNavigation-1)
|
||||
#define SCROLL(min, val, max) limit(min, val, max)
|
||||
#endif
|
||||
#define INC(val, min, max) if (val<max) {val++;} else {val=min;}
|
||||
#define DEC(val, min, max) if (val>min) {val--;} else {val=max;}
|
||||
|
||||
#if defined(PCBX9D)
|
||||
#define POS_VERT_INIT (menuTab ? (MAXCOL((int16_t)1) == 255 ? 2 : 1) : 0)
|
||||
#define IS_ROTARY_SHORT(evt) (evt==EVT_KEY_BREAK(KEY_ENTER))
|
||||
#define SCROLL(min, val, max) ((val) > (max) ? ((min) + (val) - (max) - 1) : ((val) < (min) ? ((max) - (min) + (val) + 1) : (val)))
|
||||
#else
|
||||
#define POS_VERT_INIT 0
|
||||
#define IS_ROTARY_SHORT(evt) (evt==EVT_ROTARY_BREAK)
|
||||
#define SCROLL(min, val, max) limit(min, val, max)
|
||||
#endif
|
||||
|
||||
bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, const pm_uint8_t *horTab, uint8_t horTabMax, maxrow_t maxrow)
|
||||
@@ -293,29 +236,6 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t
|
||||
|
||||
uint8_t maxcol = MAXCOL(l_posVert);
|
||||
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION) || defined(PCBX9D)
|
||||
if (!(s_warning || s_menu_count))
|
||||
CHECK_ROTARY_ENCODER(event);
|
||||
#endif
|
||||
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
if (l_posVert < 0 && (event==EVT_KEY_BREAK(RE_NAV_ENTER) || event==EVT_KEY_BREAK(KEY_MENU))) {
|
||||
popMenu();
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION) || defined(PCBX9D)
|
||||
if (IS_RE_NAVIGATION_ENABLE() && event==EVT_KEY_BREAK(RE_NAV_ENTER) && s_editMode != EDIT_MODIFY_STRING) {
|
||||
scrollRE = 0;
|
||||
if (s_editMode++ > 0) s_editMode = 0;
|
||||
if (s_editMode > 0 && l_posVert == 0 && menuTab) s_editMode = -1;
|
||||
if (maxrow == 0) s_editMode = -1;
|
||||
}
|
||||
#else
|
||||
#define scrollRE 0
|
||||
#endif
|
||||
|
||||
#ifdef NAVIGATION_POT1
|
||||
// check pot 1 - if changed -> scroll values
|
||||
static int16_t p1valprev;
|
||||
@@ -341,7 +261,7 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t
|
||||
#define scrollUD 0
|
||||
#endif
|
||||
|
||||
if (scrollRE || scrollLR || scrollUD || p1valdiff) backlightOn(); // on keypress turn the light on
|
||||
if (scrollLR || scrollUD || p1valdiff) backlightOn(); // on keypress turn the light on
|
||||
|
||||
if (menuTab) {
|
||||
uint8_t attr = 0;
|
||||
@@ -369,17 +289,37 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t
|
||||
return false;
|
||||
}
|
||||
#else
|
||||
|
||||
if (l_posVert==0 && !s_noScroll) {
|
||||
attr = INVERS;
|
||||
|
||||
int8_t cc = curr;
|
||||
|
||||
if (scrollLR || (scrollRE && s_editMode < 0)) {
|
||||
cc = SCROLL((int8_t)0, (int8_t)(cc - scrollLR + scrollRE), (int8_t)(menuTabSize-1));
|
||||
if (scrollLR) {
|
||||
cc = SCROLL((int8_t)0, (int8_t)(cc - scrollLR), (int8_t)(menuTabSize-1));
|
||||
}
|
||||
|
||||
switch(event) {
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
case EVT_ROTARY_BREAK:
|
||||
if (s_editMode < 0 && maxrow > 0) {
|
||||
s_editMode = 0;
|
||||
// TODO ? l_posVert = (horTab && horTab[1]==0xff) ? 2 : 1;
|
||||
l_posHorz = 0;
|
||||
}
|
||||
else {
|
||||
s_editMode = -1;
|
||||
}
|
||||
event = 0;
|
||||
break;
|
||||
#endif
|
||||
|
||||
case EVT_KEY_FIRST(KEY_LEFT):
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
case EVT_ROTARY_LEFT:
|
||||
if (s_editMode >= 0)
|
||||
break;
|
||||
#endif
|
||||
if (curr > 0)
|
||||
cc = curr - 1;
|
||||
else
|
||||
@@ -387,6 +327,11 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t
|
||||
break;
|
||||
|
||||
case EVT_KEY_FIRST(KEY_RIGHT):
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
case EVT_ROTARY_RIGHT:
|
||||
if (s_editMode >= 0)
|
||||
break;
|
||||
#endif
|
||||
if (curr < (menuTabSize-1))
|
||||
cc = curr + 1;
|
||||
else
|
||||
@@ -414,11 +359,6 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t
|
||||
displayScrollbar(LCD_W-1, FH, LCD_H-FH, s_pgOfs, maxrow, LCD_LINES-1);
|
||||
#endif
|
||||
}
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
else if (l_posVert < 0) {
|
||||
lcd_putsAtt(LCD_W-LEN_BACK*FW, 0, STR_BACK, INVERS);
|
||||
}
|
||||
#endif
|
||||
|
||||
DISPLAY_PROGRESS_BAR(menuTab ? lcdLastPos-2*FW-((curr+1)/10*FWNUM)-2 : 20*FW+1);
|
||||
|
||||
@@ -431,70 +371,6 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t
|
||||
if (scrollLR && l_posVert>0) {
|
||||
l_posHorz = limit((int8_t)0, (int8_t)(l_posHorz - scrollLR), (int8_t)maxcol);
|
||||
}
|
||||
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION) || defined(PCBX9D)
|
||||
lastCursorMove = 0;
|
||||
#if defined(PCBX9D)
|
||||
// TODO remove that
|
||||
while (s_editMode<=0 && scrollRE) {
|
||||
#else
|
||||
while (s_editMode==0 && scrollRE) {
|
||||
#endif
|
||||
if (scrollRE > 0) {
|
||||
--scrollRE;
|
||||
maxcol = MAXCOL(l_posVert);
|
||||
lastCursorMove = +1;
|
||||
if (++l_posHorz > maxcol) {
|
||||
if (l_posVert < maxrow) {
|
||||
do {
|
||||
++l_posVert;
|
||||
} while(MAXCOL(l_posVert) == (uint8_t)-1);
|
||||
maxcol = MAXCOL(l_posVert);
|
||||
l_posHorz = 0;
|
||||
}
|
||||
else {
|
||||
#if defined(PCBX9D)
|
||||
l_posVert = POS_VERT_INIT;
|
||||
l_posHorz = 0;
|
||||
s_pgOfs = 0;
|
||||
#else
|
||||
--l_posHorz;
|
||||
scrollRE = 0;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
++scrollRE;
|
||||
lastCursorMove = -1;
|
||||
if (l_posHorz-- == 0) {
|
||||
do {
|
||||
--l_posVert;
|
||||
} while(MAXCOL(l_posVert) == (uint8_t)-1);
|
||||
#if defined(PCBX9D)
|
||||
if (l_posVert < (menuTab ? 1 : 0)) {
|
||||
l_posVert = maxrow;
|
||||
l_posHorz = MAXCOL(l_posVert);
|
||||
}
|
||||
else if (l_posVert == (menuTab ? 0 : -1)) {
|
||||
l_posHorz = 0;
|
||||
}
|
||||
#else
|
||||
if (l_posVert <= (menuTab ? 0 : -1)) {
|
||||
l_posVert = menuTab ? 0 : -1;
|
||||
l_posHorz = 0;
|
||||
scrollRE = 0;
|
||||
}
|
||||
#endif
|
||||
else {
|
||||
maxcol = MAXCOL(l_posVert);
|
||||
l_posHorz = maxcol;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
switch(event)
|
||||
@@ -504,41 +380,53 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t
|
||||
l_posHorz = 0;
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
if (menuTab) {
|
||||
s_editMode = -1;
|
||||
s_editMode = EDIT_MODE_INIT;
|
||||
break;
|
||||
}
|
||||
// no break
|
||||
#else
|
||||
s_editMode = -1; // TODO why not 0?
|
||||
s_editMode = EDIT_MODE_INIT;
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
case EVT_ENTRY_UP:
|
||||
s_editMode = 0;
|
||||
break;
|
||||
#endif
|
||||
case EVT_KEY_FIRST(KEY_MENU):
|
||||
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION) || defined(PCBX9D)
|
||||
case EVT_ROTARY_BREAK:
|
||||
if (s_editMode > 1) break;
|
||||
#endif
|
||||
|
||||
#if !defined(PCBX9D)
|
||||
case EVT_KEY_FIRST(KEY_ENTER):
|
||||
#endif
|
||||
if (!menuTab || l_posVert>0)
|
||||
s_editMode = (s_editMode<=0);
|
||||
break;
|
||||
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
case EVT_KEY_LONG_ROTARY_ENCODERS:
|
||||
if (l_posVert!=0 || !IS_RE_NAVIGATION_EVT(event))
|
||||
break;
|
||||
case EVT_ROTARY_LONG:
|
||||
if (s_editMode > 1) break;
|
||||
killEvents(event);
|
||||
if (l_posVert != POS_VERT_INIT) {
|
||||
l_posVert = POS_VERT_INIT;
|
||||
s_editMode = EDIT_MODE_INIT;
|
||||
break;
|
||||
}
|
||||
// no break
|
||||
#endif
|
||||
|
||||
case EVT_KEY_LONG(KEY_EXIT):
|
||||
s_editMode = 0;
|
||||
s_editMode = 0; // TODO needed? we call ENTRY_UP after which does the same
|
||||
popMenu();
|
||||
break;
|
||||
return false;
|
||||
|
||||
case EVT_KEY_BREAK(KEY_EXIT):
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
if (s_editMode==0)
|
||||
s_editMode = -1;
|
||||
if (s_editMode == 0)
|
||||
s_editMode = EDIT_MODE_INIT;
|
||||
else
|
||||
#endif
|
||||
if (s_editMode>0) {
|
||||
@@ -546,15 +434,17 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t
|
||||
break;
|
||||
}
|
||||
#if defined(PCBX9D)
|
||||
uint8_t posVertInit = POS_VERT_INIT;
|
||||
if (s_pgOfs != 0 || l_posHorz != 0 || l_posVert != posVertInit) {
|
||||
s_pgOfs = 0;
|
||||
l_posVert = posVertInit;
|
||||
l_posHorz = 0;
|
||||
}
|
||||
else {
|
||||
popMenu();
|
||||
return false;
|
||||
{
|
||||
uint8_t posVertInit = POS_VERT_INIT;
|
||||
if (s_pgOfs != 0 || l_posHorz != 0 || l_posVert != posVertInit) {
|
||||
s_pgOfs = 0;
|
||||
l_posVert = posVertInit;
|
||||
l_posHorz = 0;
|
||||
}
|
||||
else {
|
||||
popMenu();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
#else
|
||||
if (l_posVert==0 || !menuTab) {
|
||||
@@ -569,45 +459,95 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t
|
||||
#endif
|
||||
break;
|
||||
|
||||
#if !defined(PCBX9D) && !defined(PCBACT)
|
||||
#if !defined(PCBX9D)
|
||||
case EVT_KEY_REPT(KEY_RIGHT): //inc
|
||||
if (l_posHorz==maxcol) break;
|
||||
// no break
|
||||
|
||||
case EVT_KEY_FIRST(KEY_RIGHT)://inc
|
||||
if (!horTab || s_editMode>0) break;
|
||||
INC(l_posHorz, maxcol);
|
||||
#endif
|
||||
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION) || defined(PCBX9D)
|
||||
CASE_EVT_ROTARY_MOVE_RIGHT
|
||||
if (s_editMode != 0) break;
|
||||
// TODO s_editMode test is duplicated
|
||||
// TODO could be written in a smarter way!
|
||||
if (l_posHorz < maxcol) {
|
||||
l_posHorz++;
|
||||
break;
|
||||
}
|
||||
else {
|
||||
l_posHorz = 0;
|
||||
if (!IS_ROTARY_MOVE_RIGHT(event))
|
||||
break;
|
||||
}
|
||||
#else
|
||||
INC(l_posHorz, 0, maxcol);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if !defined(PCBX9D)
|
||||
case EVT_KEY_REPT(KEY_DOWN): //inc
|
||||
if (!IS_ROTARY_RIGHT(event) && l_posVert==maxrow) break;
|
||||
// no break
|
||||
|
||||
case EVT_KEY_FIRST(KEY_DOWN): //inc
|
||||
if (s_editMode>0) break;
|
||||
#endif
|
||||
do {
|
||||
INC(l_posVert, POS_VERT_INIT, maxrow);
|
||||
} while (MAXCOL(l_posVert) == (uint8_t)-1);
|
||||
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION) || defined(PCBX9D)
|
||||
s_editMode = 0; // TODO why?
|
||||
#endif
|
||||
l_posHorz = min(l_posHorz, MAXCOL(l_posVert));
|
||||
break;
|
||||
|
||||
#if !defined(PCBX9D)
|
||||
case EVT_KEY_REPT(KEY_LEFT): //dec
|
||||
if (l_posHorz==0) break;
|
||||
// no break
|
||||
|
||||
case EVT_KEY_FIRST(KEY_LEFT)://dec
|
||||
if (!horTab || s_editMode>0) break;
|
||||
DEC(l_posHorz, maxcol);
|
||||
break;
|
||||
case EVT_KEY_REPT(KEY_DOWN): //inc
|
||||
if (l_posVert==maxrow) break;
|
||||
// no break
|
||||
case EVT_KEY_FIRST(KEY_DOWN): //inc
|
||||
if (s_editMode>0) break;
|
||||
do {
|
||||
INC(l_posVert, maxrow);
|
||||
} while (MAXCOL(l_posVert) == (uint8_t)-1);
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
s_editMode = 0;
|
||||
#endif
|
||||
l_posHorz = min(l_posHorz, MAXCOL(l_posVert));
|
||||
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION) || defined(PCBX9D)
|
||||
CASE_EVT_ROTARY_MOVE_LEFT
|
||||
// TODO could be written in a smarter way!
|
||||
if (s_editMode != 0) break;
|
||||
if (l_posHorz > 0) {
|
||||
l_posHorz--;
|
||||
break;
|
||||
}
|
||||
else if (IS_ROTARY_MOVE_LEFT(event) && s_editMode == 0) {
|
||||
l_posHorz = 0xff;
|
||||
}
|
||||
else {
|
||||
l_posHorz = maxcol;
|
||||
break;
|
||||
}
|
||||
#else
|
||||
DEC(l_posHorz, 0, maxcol);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if !defined(PCBX9D)
|
||||
case EVT_KEY_REPT(KEY_UP): //dec
|
||||
if (l_posVert==0) break;
|
||||
if (!IS_ROTARY_LEFT(event) && l_posVert==0) break;
|
||||
// no break
|
||||
case EVT_KEY_FIRST(KEY_UP): //dec
|
||||
if (s_editMode>0)break;
|
||||
if (s_editMode>0) break;
|
||||
#endif
|
||||
|
||||
do {
|
||||
DEC(l_posVert, maxrow);
|
||||
DEC(l_posVert, POS_VERT_INIT, maxrow);
|
||||
} while(MAXCOL(l_posVert) == (uint8_t)-1);
|
||||
l_posHorz = min(l_posHorz, MAXCOL(l_posVert));
|
||||
break;
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
uint8_t max = menuTab ? LCD_LINES-1 : LCD_LINES-2;
|
||||
@@ -699,10 +639,7 @@ void displayWarning(uint8_t event)
|
||||
lcd_puts(16, 5*FH, s_warning_type == WARNING_TYPE_CONFIRM ? STR_POPUPS : STR_EXIT);
|
||||
switch(event) {
|
||||
#if defined(ROTARY_ENCODERS)
|
||||
case EVT_KEY_BREAK_ROTARY_ENCODERS:
|
||||
if (!IS_RE_NAVIGATION_EVT(event))
|
||||
break;
|
||||
// no break
|
||||
case EVT_ROTARY_BREAK:
|
||||
#endif
|
||||
case EVT_KEY_BREAK(KEY_ENTER):
|
||||
if (s_warning_type == WARNING_TYPE_ASTERISK)
|
||||
@@ -813,6 +750,7 @@ const char * displayMenu(uint8_t event)
|
||||
}
|
||||
|
||||
switch(event) {
|
||||
CASE_EVT_ROTARY_RIGHT
|
||||
case EVT_KEY_BREAK(KEY_MOVE_UP):
|
||||
if (s_menu_item > 0)
|
||||
s_menu_item--;
|
||||
@@ -821,6 +759,10 @@ const char * displayMenu(uint8_t event)
|
||||
result = STR_UPDATE_LIST;
|
||||
}
|
||||
break;
|
||||
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
CASE_EVT_ROTARY_LEFT
|
||||
#endif
|
||||
case EVT_KEY_BREAK(KEY_MOVE_DOWN):
|
||||
if (s_menu_item < display_count - 1 && s_menu_offset + s_menu_item + 1 < s_menu_count)
|
||||
s_menu_item++;
|
||||
@@ -829,9 +771,14 @@ const char * displayMenu(uint8_t event)
|
||||
result = STR_UPDATE_LIST;
|
||||
}
|
||||
break;
|
||||
CASE_EVT_ROTARY_BREAK
|
||||
case EVT_KEY_BREAK(KEY_ENTER):
|
||||
result = s_menu[s_menu_item];
|
||||
// no break
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
CASE_EVT_ROTARY_LONG
|
||||
killEvents(event);
|
||||
#endif
|
||||
case EVT_KEY_BREAK(KEY_EXIT):
|
||||
s_menu_count = 0;
|
||||
s_menu_item = 0;
|
||||
|
||||
+27
-52
@@ -102,46 +102,12 @@ void menuModelCustomFunctions(uint8_t event);
|
||||
void menuStatisticsView(uint8_t event);
|
||||
void menuStatisticsDebug(uint8_t event);
|
||||
|
||||
#if defined(PCBX9D) || defined(ROTARY_ENCODER_NAVIGATION)
|
||||
extern int8_t scrollRE;
|
||||
extern int16_t p1valdiff; // TODO 0 in case of PCBX9D?
|
||||
extern int8_t lastCursorMove;
|
||||
#elif defined(NAVIGATION_POT1)
|
||||
#if defined(NAVIGATION_POT1)
|
||||
extern int16_t p1valdiff;
|
||||
#else
|
||||
#define p1valdiff 0
|
||||
#endif
|
||||
|
||||
#if defined(PCBX9D) || defined(PCBACT)
|
||||
#define IS_RE_NAVIGATION_ENABLE() true
|
||||
#define NAVIGATION_RE_IDX() 0
|
||||
#define IS_RE_NAVIGATION_EVT_TYPE(event, type) (event==type(KEY_ENTER))
|
||||
#define IS_RE_NAVIGATION_EVT(event) (EVT_KEY_MASK(event)==KEY_ENTER)
|
||||
#elif defined(ROTARY_ENCODERS)
|
||||
#define NAVIGATION_RE_IDX() (g_eeGeneral.reNavigation - 1)
|
||||
#define IS_RE_NAVIGATION_ENABLE() g_eeGeneral.reNavigation
|
||||
#define IS_RE_NAVIGATION_EVT_TYPE(event, type) (g_eeGeneral.reNavigation && event==type(BTN_REa + g_eeGeneral.reNavigation - 1))
|
||||
#define IS_RE_NAVIGATION_EVT(event) (g_eeGeneral.reNavigation && EVT_KEY_MASK(event)==(BTN_REa + g_eeGeneral.reNavigation - 1))
|
||||
#elif defined(ROTARY_ENCODER_NAVIGATION)
|
||||
#define IS_RE_NAVIGATION_ENABLE() true
|
||||
#define NAVIGATION_RE_IDX() 0
|
||||
#define IS_RE_NAVIGATION_EVT_TYPE(event, type) (event==type(BTN_REa))
|
||||
#define IS_RE_NAVIGATION_EVT(event) (EVT_KEY_MASK(event)==BTN_REa)
|
||||
#else
|
||||
#define IS_RE_NAVIGATION_EVT_TYPE(event, type) (0)
|
||||
#define IS_RE_NAVIGATION_EVT(event) (0)
|
||||
#endif
|
||||
|
||||
#if ROTARY_ENCODERS > 1
|
||||
#define EVT_KEY_FIRST_ROTARY_ENCODERS EVT_KEY_FIRST(BTN_REa): case EVT_KEY_FIRST(BTN_REb)
|
||||
#define EVT_KEY_BREAK_ROTARY_ENCODERS EVT_KEY_BREAK(BTN_REa): case EVT_KEY_BREAK(BTN_REb)
|
||||
#define EVT_KEY_LONG_ROTARY_ENCODERS EVT_KEY_LONG(BTN_REa): case EVT_KEY_LONG(BTN_REb)
|
||||
#else
|
||||
#define EVT_KEY_FIRST_ROTARY_ENCODERS EVT_KEY_FIRST(BTN_REa)
|
||||
#define EVT_KEY_BREAK_ROTARY_ENCODERS EVT_KEY_BREAK(BTN_REa)
|
||||
#define EVT_KEY_LONG_ROTARY_ENCODERS EVT_KEY_LONG(BTN_REa)
|
||||
#endif
|
||||
|
||||
extern int8_t checkIncDec_Ret; // global helper vars
|
||||
|
||||
#define EDIT_SELECT_MENU -1
|
||||
@@ -180,19 +146,9 @@ int8_t checkIncDecGen(uint8_t event, int8_t i_val, int8_t i_min, int8_t i_max);
|
||||
#define CHECK_INCDEC_GENVAR(event, var, min, max) \
|
||||
var = checkIncDecGen(event,var,min,max)
|
||||
|
||||
#if defined(PCBX9D)
|
||||
void check_rotary_encoder(uint8_t & event);
|
||||
#define CHECK_ROTARY_ENCODER(event) check_rotary_encoder(event)
|
||||
#elif defined(ROTARY_ENCODER_NAVIGATION)
|
||||
void check_rotary_encoder();
|
||||
#define CHECK_ROTARY_ENCODER(event) check_rotary_encoder()
|
||||
#endif
|
||||
|
||||
// Menus related stuff ...
|
||||
#if defined(SDCARD)
|
||||
#define maxrow_t int16_t
|
||||
#elif defined(ROTARY_ENCODER_NAVIGATION)
|
||||
#define maxrow_t int8_t
|
||||
#define maxrow_t uint16_t
|
||||
#else
|
||||
#define maxrow_t uint8_t
|
||||
#endif
|
||||
@@ -300,14 +256,33 @@ void menuChannelsMonitor(uint8_t event);
|
||||
#define KEY_MOVE_DOWN KEY_DOWN
|
||||
#endif
|
||||
|
||||
#if defined(ROTARY_ENCODERS) || defined(PCBX9D)
|
||||
#define CURSOR_MOVED_LEFT(event) (EVT_KEY_MASK(event) == KEY_LEFT || lastCursorMove < 0)
|
||||
#define CURSOR_MOVED_RIGHT(event) (EVT_KEY_MASK(event) == KEY_RIGHT || lastCursorMove > 0)
|
||||
#define REPEAT_LAST_CURSOR_MOVE() if (lastCursorMove) lastCursorMove *= 2; else m_posHorz = 0
|
||||
#define CURSOR_MOVED_LEFT(event) (IS_ROTARY_LEFT(event) || EVT_KEY_MASK(event) == KEY_LEFT)
|
||||
#define CURSOR_MOVED_RIGHT(event) (IS_ROTARY_RIGHT(event) || EVT_KEY_MASK(event) == KEY_RIGHT)
|
||||
|
||||
#if defined(PCBX9D)
|
||||
#define CASE_EVT_ROTARY_MOVE_RIGHT CASE_EVT_ROTARY_LEFT
|
||||
#define CASE_EVT_ROTARY_MOVE_LEFT CASE_EVT_ROTARY_RIGHT
|
||||
#define IS_ROTARY_MOVE_RIGHT IS_ROTARY_LEFT
|
||||
#define IS_ROTARY_MOVE_LEFT IS_ROTARY_RIGHT
|
||||
#else
|
||||
#define CASE_EVT_ROTARY_MOVE_RIGHT CASE_EVT_ROTARY_RIGHT
|
||||
#define CASE_EVT_ROTARY_MOVE_LEFT CASE_EVT_ROTARY_LEFT
|
||||
#define IS_ROTARY_MOVE_RIGHT IS_ROTARY_RIGHT
|
||||
#define IS_ROTARY_MOVE_LEFT IS_ROTARY_LEFT
|
||||
#endif
|
||||
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION) || defined(PCBX9D)
|
||||
#define REPEAT_LAST_CURSOR_MOVE() putEvent(event)
|
||||
#else
|
||||
#define CURSOR_MOVED_LEFT(event) (EVT_KEY_MASK(event) == KEY_LEFT)
|
||||
#define CURSOR_MOVED_RIGHT(event) (EVT_KEY_MASK(event) == KEY_RIGHT)
|
||||
#define REPEAT_LAST_CURSOR_MOVE() m_posHorz = 0;
|
||||
#endif
|
||||
|
||||
#if defined(PCBX9D)
|
||||
#define POS_VERT_INIT (menuTab ? (MAXCOL((uint16_t)1) == 255 ? 2 : 1) : 0)
|
||||
#define EDIT_MODE_INIT 0 // TODO enum
|
||||
#else
|
||||
#define POS_VERT_INIT 0
|
||||
#define EDIT_MODE_INIT -1
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
+47
-75
@@ -239,18 +239,15 @@ void menuModelSelect(uint8_t event)
|
||||
event = 0;
|
||||
}
|
||||
#endif
|
||||
uint8_t _event_ = (IS_RE_NAVIGATION_EVT(event) ? 0 : event);
|
||||
|
||||
uint8_t _event_ = (IS_ROTARY_BREAK(event) || IS_ROTARY_LONG(event) ? 0 : event);
|
||||
|
||||
if (s_copyMode && (event & 0x1f) == KEY_EXIT)
|
||||
_event_ -= KEY_EXIT;
|
||||
|
||||
int8_t oldSub = m_posVert;
|
||||
if (!check_submenu_simple(_event_, MAX_MODELS-1)) return;
|
||||
#if defined(PCBX9D) || defined(PCBACT)
|
||||
if (m_posVert < 0) m_posVert = MAX_MODELS-1;
|
||||
#elif defined(ROTARY_ENCODER_NAVIGATION)
|
||||
if (m_posVert < 0) m_posVert = 0;
|
||||
#endif
|
||||
|
||||
if (s_editMode > 0) s_editMode = 0;
|
||||
|
||||
#if !defined(CPUARM)
|
||||
@@ -268,19 +265,12 @@ void menuModelSelect(uint8_t event)
|
||||
|
||||
int8_t sub = m_posVert;
|
||||
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
if (scrollRE > 0 && s_editMode < 0) {
|
||||
chainMenu(menuModelSetup);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
switch(event)
|
||||
switch (event)
|
||||
{
|
||||
case EVT_ENTRY:
|
||||
m_posVert = sub = g_eeGeneral.currModel;
|
||||
s_copyMode = 0;
|
||||
s_editMode = -1;
|
||||
s_editMode = EDIT_MODE_INIT;
|
||||
eeCheck(true);
|
||||
break;
|
||||
case EVT_KEY_LONG(KEY_EXIT):
|
||||
@@ -298,14 +288,17 @@ void menuModelSelect(uint8_t event)
|
||||
}
|
||||
break;
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
case EVT_KEY_BREAK_ROTARY_ENCODERS:
|
||||
if (IS_RE_NAVIGATION_EVT(event))
|
||||
s_editMode = (s_editMode == 0 && sub == g_eeGeneral.currModel) ? -1 : 0;
|
||||
case EVT_ROTARY_BREAK:
|
||||
s_editMode = (s_editMode == 0 && sub == g_eeGeneral.currModel) ? -1 : 0;
|
||||
break;
|
||||
case EVT_KEY_LONG_ROTARY_ENCODERS:
|
||||
if (!IS_RE_NAVIGATION_EVT(event))
|
||||
break;
|
||||
// no break
|
||||
|
||||
case EVT_ROTARY_LONG:
|
||||
if (s_editMode < 0) {
|
||||
killEvents(event);
|
||||
popMenu();
|
||||
return;
|
||||
}
|
||||
// no break;
|
||||
#endif
|
||||
case EVT_KEY_LONG(KEY_ENTER):
|
||||
case EVT_KEY_BREAK(KEY_ENTER):
|
||||
@@ -340,7 +333,7 @@ void menuModelSelect(uint8_t event)
|
||||
s_copyMode = 0;
|
||||
event = EVT_ENTRY_UP;
|
||||
}
|
||||
else if (event == EVT_KEY_LONG(KEY_MENU) || IS_RE_NAVIGATION_EVT_TYPE(event, EVT_KEY_LONG)) {
|
||||
else if (event == EVT_KEY_LONG(KEY_MENU) || IS_ROTARY_LONG(event)) {
|
||||
s_copyMode = 0;
|
||||
killEvents(event);
|
||||
#if defined(SDCARD)
|
||||
@@ -386,10 +379,15 @@ void menuModelSelect(uint8_t event)
|
||||
killEvents(event);
|
||||
return;
|
||||
#else
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
case EVT_ROTARY_LEFT:
|
||||
case EVT_ROTARY_RIGHT:
|
||||
if (s_editMode >= 0) break;
|
||||
#endif
|
||||
case EVT_KEY_FIRST(KEY_LEFT):
|
||||
case EVT_KEY_FIRST(KEY_RIGHT):
|
||||
if (sub == g_eeGeneral.currModel) {
|
||||
chainMenu(event == EVT_KEY_FIRST(KEY_RIGHT) ? menuModelSetup : menuTabModel[DIM(menuTabModel)-1]);
|
||||
chainMenu((IS_ROTARY_RIGHT(event) || event == EVT_KEY_FIRST(KEY_RIGHT)) ? menuModelSetup : menuTabModel[DIM(menuTabModel)-1]);
|
||||
return;
|
||||
}
|
||||
AUDIO_WARNING2();
|
||||
@@ -560,7 +558,8 @@ void editName(uint8_t x, uint8_t y, char *name, uint8_t size, uint8_t event, uin
|
||||
char c = name[cur];
|
||||
int8_t v = c;
|
||||
|
||||
if (p1valdiff || event==EVT_KEY_FIRST(KEY_DOWN) || event==EVT_KEY_FIRST(KEY_UP)
|
||||
/* TODO work with masks */
|
||||
if (p1valdiff || IS_ROTARY_RIGHT(event) || IS_ROTARY_LEFT(event) || event==EVT_KEY_FIRST(KEY_DOWN) || event==EVT_KEY_FIRST(KEY_UP)
|
||||
|| event==EVT_KEY_REPT(KEY_DOWN) || event==EVT_KEY_REPT(KEY_UP)) {
|
||||
v = checkIncDec(event, abs(v), 0, ZCHAR_MAX, 0);
|
||||
if (c < 0) v = -v;
|
||||
@@ -568,13 +567,7 @@ void editName(uint8_t x, uint8_t y, char *name, uint8_t size, uint8_t event, uin
|
||||
|
||||
switch (event) {
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION) || defined(PCBX9D)
|
||||
#if defined(PCBX9D) || defined(PCBACT)
|
||||
case EVT_KEY_BREAK(KEY_ENTER):
|
||||
#else
|
||||
case EVT_KEY_BREAK_ROTARY_ENCODERS:
|
||||
if (!IS_RE_NAVIGATION_EVT(event))
|
||||
break;
|
||||
#endif
|
||||
case EVT_ROTARY_BREAK:
|
||||
if (s_editMode == EDIT_MODIFY_FIELD) {
|
||||
s_editMode = EDIT_MODIFY_STRING;
|
||||
cur = 0;
|
||||
@@ -585,23 +578,18 @@ void editName(uint8_t x, uint8_t y, char *name, uint8_t size, uint8_t event, uin
|
||||
s_editMode = 0;
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if !defined(PCBX9D)
|
||||
case EVT_KEY_BREAK(KEY_LEFT):
|
||||
if (cur>0) cur--;
|
||||
break;
|
||||
case EVT_KEY_BREAK(KEY_RIGHT):
|
||||
if (cur<size-1) cur++;
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION) || defined(PCBX9D)
|
||||
#if defined(ROTARY_ENCODERS)
|
||||
case EVT_KEY_LONG_ROTARY_ENCODERS:
|
||||
if (!IS_RE_NAVIGATION_EVT(event))
|
||||
break;
|
||||
// no break
|
||||
#endif
|
||||
#if defined(PCBX9D) || defined(PCBACT)
|
||||
case EVT_KEY_LONG(KEY_ENTER):
|
||||
#endif
|
||||
case EVT_ROTARY_LONG:
|
||||
if (v==0) {
|
||||
s_editMode = 0;
|
||||
killEvents(event);
|
||||
@@ -609,8 +597,11 @@ void editName(uint8_t x, uint8_t y, char *name, uint8_t size, uint8_t event, uin
|
||||
}
|
||||
// no break
|
||||
#endif
|
||||
|
||||
#if !defined(PCBX9D)
|
||||
case EVT_KEY_LONG(KEY_LEFT):
|
||||
case EVT_KEY_LONG(KEY_RIGHT):
|
||||
#endif
|
||||
if (v>=-26 && v<=26) {
|
||||
v = -v; // toggle case
|
||||
if (event==EVT_KEY_LONG(KEY_LEFT))
|
||||
@@ -824,8 +815,10 @@ void menuModelSetup(uint8_t event)
|
||||
g_model.switchWarningStates = 0x01 + (switches_states << 1);
|
||||
// no break
|
||||
case EVT_KEY_BREAK(KEY_ENTER):
|
||||
#if !defined(PCBX9D)
|
||||
case EVT_KEY_BREAK(KEY_LEFT):
|
||||
case EVT_KEY_BREAK(KEY_RIGHT):
|
||||
#endif
|
||||
g_model.switchWarningStates ^= 0x01;
|
||||
STORE_MODELVARS;
|
||||
break;
|
||||
@@ -1264,12 +1257,7 @@ void menuModelPhasesAll(uint8_t event)
|
||||
int8_t sub = m_posVert - 1;
|
||||
|
||||
switch (event) {
|
||||
#if defined(ROTARY_ENCODERS)
|
||||
case EVT_KEY_BREAK_ROTARY_ENCODERS:
|
||||
if (!IS_RE_NAVIGATION_EVT(event))
|
||||
break;
|
||||
// no break
|
||||
#endif
|
||||
CASE_EVT_ROTARY_BREAK
|
||||
case EVT_KEY_FIRST(KEY_ENTER):
|
||||
if (sub == MAX_PHASES) {
|
||||
s_editMode = 0;
|
||||
@@ -1491,12 +1479,7 @@ void menuModelCurveOne(uint8_t event)
|
||||
case EVT_ENTRY:
|
||||
s_editMode = 1;
|
||||
break;
|
||||
#if defined(ROTARY_ENCODERS)
|
||||
case EVT_KEY_BREAK_ROTARY_ENCODERS:
|
||||
if (!IS_RE_NAVIGATION_EVT(event))
|
||||
break;
|
||||
// no break
|
||||
#endif
|
||||
CASE_EVT_ROTARY_BREAK
|
||||
case EVT_KEY_BREAK(KEY_ENTER):
|
||||
#if defined(PCBX9D) || defined(PCBACT)
|
||||
if (s_editMode <= 0) {
|
||||
@@ -1539,6 +1522,8 @@ void menuModelCurveOne(uint8_t event)
|
||||
popMenu();
|
||||
}
|
||||
break;
|
||||
|
||||
/* CASE_EVT_ROTARY_LEFT */
|
||||
case EVT_KEY_REPT(KEY_LEFT):
|
||||
case EVT_KEY_FIRST(KEY_LEFT):
|
||||
if (s_editMode==1 && m_posHorz>0) m_posHorz--;
|
||||
@@ -1555,6 +1540,8 @@ void menuModelCurveOne(uint8_t event)
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
||||
/* CASE_EVT_ROTARY_RIGHT */
|
||||
case EVT_KEY_REPT(KEY_RIGHT):
|
||||
case EVT_KEY_FIRST(KEY_RIGHT):
|
||||
if (s_editMode==1 && m_posHorz<(crv.points-1)) m_posHorz++;
|
||||
@@ -2056,7 +2043,7 @@ void menuModelMixOne(uint8_t event)
|
||||
CHECK_INCDEC_MODELVAR(event, md2->curveParam, -MAX_CURVES, CURVE_BASE+MAX_CURVES-1);
|
||||
if (md2->curveParam == 0)
|
||||
md2->curveMode = MODE_DIFFERENTIAL;
|
||||
#if defined(ROTARY_ENCODERS) || defined(PCBX9D)
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION) || defined(PCBX9D)
|
||||
if (m_posHorz != 0) {
|
||||
REPEAT_LAST_CURSOR_MOVE();
|
||||
}
|
||||
@@ -2139,11 +2126,7 @@ static uint8_t s_copySrcCh;
|
||||
|
||||
void menuModelExpoMix(uint8_t expo, uint8_t event)
|
||||
{
|
||||
#if defined(ROTARY_ENCODERS)
|
||||
int8_t sub = m_posVert;
|
||||
#else
|
||||
uint8_t sub = m_posVert;
|
||||
#endif
|
||||
|
||||
if (s_editMode > 0)
|
||||
s_editMode = 0;
|
||||
@@ -2194,12 +2177,8 @@ void menuModelExpoMix(uint8_t expo, uint8_t event)
|
||||
break;
|
||||
}
|
||||
// no break
|
||||
#if defined(ROTARY_ENCODERS)
|
||||
case EVT_KEY_BREAK_ROTARY_ENCODERS:
|
||||
if (event!=EVT_KEY_BREAK(KEY_ENTER) && !IS_RE_NAVIGATION_EVT(event))
|
||||
break;
|
||||
// no break
|
||||
#endif
|
||||
|
||||
CASE_EVT_ROTARY_BREAK
|
||||
case EVT_KEY_LONG(KEY_ENTER):
|
||||
killEvents(event);
|
||||
if (s_copyTgtOfs) {
|
||||
@@ -2659,11 +2638,8 @@ void menuModelCurvesAll(uint8_t event)
|
||||
int8_t sub = m_posVert - 1;
|
||||
|
||||
switch (event) {
|
||||
#if defined(ROTARY_ENCODERS)
|
||||
case EVT_KEY_BREAK_ROTARY_ENCODERS:
|
||||
if (!IS_RE_NAVIGATION_EVT(event))
|
||||
break;
|
||||
// no break
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
case EVT_ROTARY_BREAK:
|
||||
#endif
|
||||
#if !defined(PCBX9D)
|
||||
case EVT_KEY_FIRST(KEY_RIGHT):
|
||||
@@ -2882,11 +2858,8 @@ void menuModelCustomSwitches(uint8_t event)
|
||||
int8_t sub = m_posVert - 1;
|
||||
|
||||
switch (event) {
|
||||
#if defined(ROTARY_ENCODERS)
|
||||
case EVT_KEY_BREAK_ROTARY_ENCODERS:
|
||||
if (!IS_RE_NAVIGATION_EVT(event))
|
||||
break;
|
||||
// no break
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
case EVT_ROTARY_BREAK:
|
||||
#endif
|
||||
#if !defined(PCBX9D)
|
||||
case EVT_KEY_FIRST(KEY_RIGHT):
|
||||
@@ -3069,7 +3042,6 @@ void menuModelCustomFunctions(uint8_t event)
|
||||
if (sd->swtch > MAX_SWITCH+1) sd->swtch -= (MAX_SWITCH+1);
|
||||
if (sd->swtch < -MAX_SWITCH-1) sd->swtch += (MAX_SWITCH+1);
|
||||
}
|
||||
// printf("ICI switch=%d [%d:%d]\n", sd->swtch, SWITCH_OFF-MAX_SWITCH, SWITCH_ON+MAX_SWITCH+1+2*MAX_PSWITCH); fflush(stdout);
|
||||
putsSwitches(3, y, sd->swtch, SWONOFF | attr | ((abs(sd->swtch) <= (MAX_SWITCH+1) && getSwitch(sd->swtch, 0) && (sd->func > FUNC_INSTANT_TRIM || sd->active)) ? BOLD : 0));
|
||||
if (active || AUTOSWITCH_ENTER_LONG()) {
|
||||
#if defined(PCBX9D)
|
||||
|
||||
+27
-4
@@ -262,6 +262,28 @@ void per10ms()
|
||||
|
||||
readKeysAndTrims();
|
||||
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
if (IS_RE_NAVIGATION_ENABLE()) {
|
||||
static int16_t rePreviousValue;
|
||||
int16_t reNewValue = (g_rotenc[NAVIGATION_RE_IDX()] / ROTARY_ENCODER_GRANULARITY);
|
||||
int8_t scrollRE = reNewValue - rePreviousValue;
|
||||
if (scrollRE) {
|
||||
rePreviousValue = reNewValue;
|
||||
putEvent(scrollRE < 0 ? EVT_ROTARY_LEFT : EVT_ROTARY_RIGHT);
|
||||
}
|
||||
extern uint8_t s_evt;
|
||||
uint8_t evt = s_evt;
|
||||
if (EVT_KEY_MASK(evt) == BTN_REa + NAVIGATION_RE_IDX()) {
|
||||
if (IS_KEY_BREAK(evt)) {
|
||||
putEvent(EVT_ROTARY_BREAK);
|
||||
}
|
||||
else if (IS_KEY_LONG(evt)) {
|
||||
putEvent(EVT_ROTARY_LONG);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(MAVLINK) && !defined(CPUARM)
|
||||
check_mavlink();
|
||||
#endif
|
||||
@@ -1204,6 +1226,10 @@ void checkBacklight()
|
||||
Voice.voice_process() ;
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(PCBSTD) && defined(ROTARY_ENCODER_NAVIGATION)
|
||||
rotencPoll();
|
||||
#endif
|
||||
}
|
||||
|
||||
void backlightOn()
|
||||
@@ -3235,6 +3261,7 @@ ISR(TIMER3_CAPT_vect) // G: High frequency noise can cause stack overflo with IS
|
||||
// TODO serial_arm and serial_avr
|
||||
|
||||
#if defined(FRSKY) && !defined(CPUARM)
|
||||
// TODO in frsky.cpp?
|
||||
FORCEINLINE void FRSKY_USART0_vect()
|
||||
{
|
||||
if (frskyTxBufferCount > 0) {
|
||||
@@ -3736,10 +3763,6 @@ int main(void)
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(PCBSTD) && defined(ROTARY_ENCODER_NAVIGATION)
|
||||
rotencPoll();
|
||||
#endif
|
||||
|
||||
perMain();
|
||||
|
||||
if (heartbeat == HEART_TIMER_PULSES+HEART_TIMER10ms) {
|
||||
|
||||
+61
-11
@@ -156,7 +156,7 @@
|
||||
#define IF_GVARS(x)
|
||||
#endif
|
||||
|
||||
#if defined(PCBACT) || ROTARY_ENCODERS > 0
|
||||
#if ROTARY_ENCODERS > 0
|
||||
#define ROTARY_ENCODER_NAVIGATION
|
||||
#endif
|
||||
|
||||
@@ -624,15 +624,66 @@ enum CswFunctions {
|
||||
#define EVT_KEY_REPT(key) ((key)|_MSK_KEY_REPT)
|
||||
#define EVT_KEY_LONG(key) ((key)|_MSK_KEY_LONG)
|
||||
|
||||
#define IS_KEY_BREAK(key) (((key)&0xf0) == _MSK_KEY_BREAK)
|
||||
#define IS_KEY_FIRST(key) (((key)&0xf0) == _MSK_KEY_FIRST)
|
||||
#define IS_KEY_BREAK(evt) (((evt)&0xf0) == _MSK_KEY_BREAK)
|
||||
#define IS_KEY_FIRST(evt) (((evt)&0xf0) == _MSK_KEY_FIRST)
|
||||
#define IS_KEY_LONG(evt) (((evt)&0xf0) == _MSK_KEY_LONG)
|
||||
|
||||
#define EVT_ENTRY 0xbf
|
||||
#define EVT_ENTRY_UP 0xbe
|
||||
|
||||
#if defined(PCBX9D)
|
||||
#define EVT_ROTARY_BREAK EVT_KEY_BREAK(KEY_ENTER)
|
||||
#define EVT_ROTARY_LONG EVT_KEY_LONG(KEY_ENTER)
|
||||
#else
|
||||
#define EVT_ROTARY_BREAK 0xcf
|
||||
#define EVT_ROTARY_LONG 0xce
|
||||
#define EVT_ROTARY_LEFT 0xdf
|
||||
#define EVT_ROTARY_RIGHT 0xde
|
||||
#endif
|
||||
|
||||
#if defined(PCBX9D)
|
||||
#define IS_ROTARY_LEFT(evt) (evt==EVT_KEY_FIRST(KEY_MOVE_DOWN) || evt==EVT_KEY_REPT(KEY_MOVE_DOWN))
|
||||
#define IS_ROTARY_RIGHT(evt) (evt==EVT_KEY_FIRST(KEY_MOVE_UP) || evt==EVT_KEY_REPT(KEY_MOVE_UP))
|
||||
#define IS_ROTARY_BREAK(evt) (evt==EVT_KEY_BREAK(KEY_ENTER))
|
||||
#define IS_ROTARY_LONG(evt) (evt==EVT_KEY_LONG(KEY_ENTER))
|
||||
#define IS_ROTARY_EVENT(evt) (0)
|
||||
#define CASE_EVT_ROTARY_BREAK /*case EVT_KEY_BREAK(KEY_ENTER):*/
|
||||
#define CASE_EVT_ROTARY_LONG /*case EVT_KEY_LONG(KEY_ENTER):*/
|
||||
#define CASE_EVT_ROTARY_LEFT case EVT_KEY_FIRST(KEY_MOVE_DOWN): case EVT_KEY_REPT(KEY_MOVE_DOWN):
|
||||
#define CASE_EVT_ROTARY_RIGHT case EVT_KEY_FIRST(KEY_MOVE_UP): case EVT_KEY_REPT(KEY_MOVE_UP):
|
||||
#elif defined(ROTARY_ENCODER_NAVIGATION)
|
||||
#define IS_ROTARY_LEFT(evt) (evt == EVT_ROTARY_LEFT)
|
||||
#define IS_ROTARY_RIGHT(evt) (evt == EVT_ROTARY_RIGHT)
|
||||
#define IS_ROTARY_BREAK(evt) (evt == EVT_ROTARY_BREAK)
|
||||
#define IS_ROTARY_LONG(evt) (evt == EVT_ROTARY_LONG)
|
||||
#define IS_ROTARY_EVENT(evt) (EVT_KEY_MASK(evt) >= 0x0e)
|
||||
#define CASE_EVT_ROTARY_BREAK case EVT_ROTARY_BREAK:
|
||||
#define CASE_EVT_ROTARY_LONG case EVT_ROTARY_LONG:
|
||||
#define CASE_EVT_ROTARY_LEFT case EVT_ROTARY_LEFT:
|
||||
#define CASE_EVT_ROTARY_RIGHT case EVT_ROTARY_RIGHT:
|
||||
#else
|
||||
#define IS_ROTARY_LEFT(evt) (0)
|
||||
#define IS_ROTARY_RIGHT(evt) (0)
|
||||
#define IS_ROTARY_BREAK(evt) (0)
|
||||
#define IS_ROTARY_LONG(evt) (0)
|
||||
#define IS_ROTARY_EVENT(evt) (0)
|
||||
#define CASE_EVT_ROTARY_BREAK
|
||||
#define CASE_EVT_ROTARY_LONG
|
||||
#define CASE_EVT_ROTARY_LEFT
|
||||
#define CASE_EVT_ROTARY_RIGHT
|
||||
#endif
|
||||
|
||||
#if defined(PCBX9D)
|
||||
#define IS_RE_NAVIGATION_ENABLE() true
|
||||
#define NAVIGATION_RE_IDX() 0
|
||||
#elif defined(ROTARY_ENCODERS)
|
||||
#define NAVIGATION_RE_IDX() (g_eeGeneral.reNavigation - 1)
|
||||
#define IS_RE_NAVIGATION_ENABLE() g_eeGeneral.reNavigation
|
||||
#elif defined(ROTARY_ENCODER_NAVIGATION)
|
||||
#define IS_RE_NAVIGATION_ENABLE() true
|
||||
#define NAVIGATION_RE_IDX() 0
|
||||
#endif
|
||||
|
||||
#define EVT_ENTRY (0xff - _MSK_KEY_REPT)
|
||||
#define EVT_ENTRY_UP (0xfe - _MSK_KEY_REPT)
|
||||
#define EVT_ROTARY_SHORT (0xfd - _MSK_KEY_REPT)
|
||||
#define EVT_ROTARY_LONG (0xfc - _MSK_KEY_REPT)
|
||||
#define EVT_ROTARY_LEFT (0xfb - _MSK_KEY_REPT)
|
||||
#define EVT_ROTARY_RIGHT (0xfa - _MSK_KEY_REPT)
|
||||
|
||||
#define HEART_TIMER_PULSES 1
|
||||
#define HEART_TIMER10ms 2
|
||||
@@ -748,7 +799,7 @@ void incRotaryEncoder(uint8_t idx, int8_t inc);
|
||||
#endif
|
||||
|
||||
#if defined(PCBSKY9X)
|
||||
#define ROTARY_ENCODER_GRANULARITY 4
|
||||
#define ROTARY_ENCODER_GRANULARITY 2
|
||||
#else
|
||||
#define ROTARY_ENCODER_GRANULARITY 1
|
||||
#endif
|
||||
@@ -1089,7 +1140,6 @@ extern volatile rotenc_t g_rotenc[1];
|
||||
|
||||
#ifdef JETI
|
||||
// Jeti-DUPLEX Telemetry
|
||||
extern uint16_t jeti_keys;
|
||||
#include "jeti.h"
|
||||
#endif
|
||||
|
||||
|
||||
+9
-7
@@ -38,7 +38,7 @@
|
||||
#include <stdarg.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
volatile uint8_t pinb=0xff, pinc=0xff, pind, pine=0xff, ping=0xff, pinh=0xff, pinj=0xff, pinl=0;
|
||||
volatile uint8_t pina=0xff, pinb=0xff, pinc=0xff, pind, pine=0xff, ping=0xff, pinh=0xff, pinj=0xff, pinl=0;
|
||||
uint8_t portb, portc, porth=0, dummyport;
|
||||
uint16_t dummyport16;
|
||||
const char *eepromFile = NULL;
|
||||
@@ -127,6 +127,13 @@ void simuSetKey(uint8_t key, bool state)
|
||||
KEY_CASE(KEY_LEFT, GPIO_BUTTON_LEFT, PIN_BUTTON_LEFT)
|
||||
KEY_CASE(KEY_UP, GPIO_BUTTON_UP, PIN_BUTTON_UP)
|
||||
KEY_CASE(KEY_DOWN, GPIO_BUTTON_DOWN, PIN_BUTTON_DOWN)
|
||||
#endif
|
||||
#if defined(PCBSKY9X)
|
||||
KEY_CASE(BTN_REa, PIOB->PIO_PDSR, 0x40)
|
||||
#elif defined(PCBGRUVIN9X)
|
||||
KEY_CASE(BTN_REa, pind, 0x20)
|
||||
#elif defined(ROTARY_ENCODER_NAVIGATION)
|
||||
KEY_CASE(BTN_REa, RotEncoder, 0x20)
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -274,17 +281,12 @@ void *main_thread(void *)
|
||||
doSplash();
|
||||
#endif
|
||||
|
||||
#if !defined(CPUARM)
|
||||
checkLowEEPROM();
|
||||
#endif
|
||||
|
||||
#if defined(CPUARM)
|
||||
eeLoadModel(g_eeGeneral.currModel);
|
||||
#endif
|
||||
|
||||
checkTHR();
|
||||
checkSwitches();
|
||||
checkAlarm();
|
||||
checkAll();
|
||||
}
|
||||
|
||||
s_current_protocol = 0;
|
||||
|
||||
+3
-1
@@ -191,6 +191,7 @@ extern void rxPdcUsart( void (*pChProcess)(uint8_t x) );
|
||||
#define DDRE dummyport
|
||||
#define DDRF dummyport
|
||||
#define DDRG dummyport
|
||||
#define PINA ~pina
|
||||
#define PINB ~pinb
|
||||
#define PINC ~pinc
|
||||
#define PIND ~pind
|
||||
@@ -292,6 +293,7 @@ extern void rxPdcUsart( void (*pChProcess)(uint8_t x) );
|
||||
#define FE0 0
|
||||
|
||||
#define ISR(x, ...) void x()
|
||||
#define asm(x)
|
||||
|
||||
#if defined(CPUARM)
|
||||
extern volatile uint32_t Tenms;
|
||||
@@ -302,7 +304,7 @@ extern uint32_t Master_frequency;
|
||||
#define __enable_irq()
|
||||
#endif
|
||||
|
||||
extern volatile unsigned char pinb,pinc,pind,pine,ping,pinh,pinj,pinl;
|
||||
extern volatile unsigned char pina, pinb, pinc, pind, pine, ping, pinh, pinj, pinl;
|
||||
extern uint8_t portb, portc, porth, dummyport;
|
||||
extern uint16_t dummyport16;
|
||||
extern uint8_t main_thread_running;
|
||||
|
||||
@@ -254,6 +254,9 @@ long Open9xSim::onTimeout(FXObject*,FXSelector,void*)
|
||||
KEY_Left, KEY_LEFT,
|
||||
KEY_Up, KEY_UP,
|
||||
KEY_Down, KEY_DOWN,
|
||||
#endif
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
KEY_F, BTN_REa,
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -300,6 +303,21 @@ long Open9xSim::onTimeout(FXObject*,FXSelector,void*)
|
||||
simuSetTrim(i, getApp()->getKeyState(trimKeys[i]));
|
||||
}
|
||||
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
static bool rotencAction = false;
|
||||
if (getApp()->getKeyState(KEY_G)) {
|
||||
if (!rotencAction) g_rotenc[0] += ROTARY_ENCODER_GRANULARITY;
|
||||
rotencAction = true;
|
||||
}
|
||||
else if (getApp()->getKeyState(KEY_D)) {
|
||||
if (!rotencAction) g_rotenc[0] -= ROTARY_ENCODER_GRANULARITY;
|
||||
rotencAction = true;
|
||||
}
|
||||
else {
|
||||
rotencAction = false;
|
||||
}
|
||||
#endif
|
||||
|
||||
#define SWITCH_KEY(key, swtch, states) \
|
||||
static bool state##key = 0; \
|
||||
static int8_t state_##swtch = 2; \
|
||||
|
||||
+11
-11
@@ -49,16 +49,21 @@ int8_t Rotary_diff ;
|
||||
int8_t RotaryControl ;
|
||||
#endif
|
||||
|
||||
#define ROTENC_DOWN() (RotEncoder & 0x20)
|
||||
|
||||
void rotencPoll()
|
||||
{
|
||||
#if defined(TELEMETREZ)
|
||||
if (TrotCount != LastTrotCount ) {
|
||||
g_rotenc[0] = LastTrotCount = TrotCount ;
|
||||
}
|
||||
if( TezRotary != 0)
|
||||
RotEncoder = 0x20; // switch is on
|
||||
#else
|
||||
// Rotary Encoder polling
|
||||
PORTA = 0 ; // No pullups
|
||||
DDRA = 0x1F ; // Top 3 bits input
|
||||
|
||||
asm(" rjmp 1f") ;
|
||||
asm("1:") ;
|
||||
// asm(" nop") ;
|
||||
@@ -67,14 +72,8 @@ void rotencPoll()
|
||||
rotary = PINA ;
|
||||
DDRA = 0xFF ; // Back to all outputs
|
||||
rotary &= 0xE0 ;
|
||||
// RotEncoder = rotary ;
|
||||
|
||||
#if defined(TELEMETREZ)
|
||||
if( TezRotary != 0)
|
||||
RotEncoder = 0x20; // switch is on
|
||||
#else
|
||||
RotEncoder = rotary ; // just read the lcd pin
|
||||
#endif
|
||||
RotEncoder = rotary ; // just read the lcd pin
|
||||
|
||||
rotary &= 0xDF ;
|
||||
if ( rotary != RotPosition ) {
|
||||
@@ -90,9 +89,11 @@ void rotencPoll()
|
||||
}
|
||||
RotPosition = rotary ;
|
||||
}
|
||||
#endif
|
||||
#endif // TELEMETREZ
|
||||
}
|
||||
#endif
|
||||
#else
|
||||
#define ROTENC_DOWN() (0)
|
||||
#endif // ROTARY_ENCODER_NAVIGATION
|
||||
|
||||
#ifndef SIMU
|
||||
inline void boardInit()
|
||||
@@ -143,8 +144,7 @@ FORCEINLINE
|
||||
#endif
|
||||
uint8_t keyDown()
|
||||
{
|
||||
// printf("PINB=%x\n", PINB & 0x7E); fflush(stdout);
|
||||
return (~PINB) & 0x7E;
|
||||
return ((~PINB) & 0x7E) || ROTENC_DOWN();
|
||||
}
|
||||
|
||||
bool switchState(EnumKeys enuk)
|
||||
|
||||
@@ -198,6 +198,7 @@ void fadeBacklight();
|
||||
#define OUT_C_LCD_CS1 1
|
||||
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
extern uint8_t RotEncoder ;
|
||||
void rotencPoll();
|
||||
#endif
|
||||
|
||||
|
||||
@@ -47,6 +47,8 @@ const pm_char STR_OPEN9X[] PROGMEM =
|
||||
ISTR(VBEEPMODE)
|
||||
#if defined(ROTARY_ENCODERS)
|
||||
ISTR(VRENAVIG)
|
||||
#endif
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
ISTR(VRENCODERS)
|
||||
#endif
|
||||
ISTR(TRNMODE)
|
||||
@@ -289,10 +291,6 @@ const pm_char STR_SYNCMENU[] PROGMEM = TR_SYNCMENU;
|
||||
|
||||
const pm_char STR_INVERT_THR[] PROGMEM = TR_INVERT_THR;
|
||||
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
const pm_char STR_BACK[] PROGMEM = TR_BACK;
|
||||
#endif
|
||||
|
||||
#if defined(FRSKY_HUB)
|
||||
const pm_char STR_MINRSSI[] PROGMEM = TR_MINRSSI;
|
||||
const pm_char STR_LATITUDE[] PROGMEM = TR_LATITUDE;
|
||||
|
||||
+7
-6
@@ -87,6 +87,9 @@ extern const pm_char STR_OPEN9X[];
|
||||
#define OFS_VRENAVIG (OFS_VBEEPMODE + sizeof(TR_VBEEPMODE))
|
||||
#define OFS_VRENCODERS (OFS_VRENAVIG + sizeof(TR_VRENAVIG))
|
||||
#define OFS_TRNMODE (OFS_VRENCODERS + sizeof(TR_VRENCODERS))
|
||||
#elif defined(ROTARY_ENCODER_NAVIGATION)
|
||||
#define OFS_VRENCODERS (OFS_VBEEPMODE + sizeof(TR_VBEEPMODE))
|
||||
#define OFS_TRNMODE (OFS_VRENCODERS + sizeof(TR_VRENCODERS))
|
||||
#else
|
||||
#define OFS_TRNMODE (OFS_VBEEPMODE + sizeof(TR_VBEEPMODE))
|
||||
#endif
|
||||
@@ -194,7 +197,10 @@ extern const pm_char STR_OPEN9X[];
|
||||
|
||||
#if defined(ROTARY_ENCODERS)
|
||||
#define STR_VRENAVIG (STR_OPEN9X + OFS_VRENAVIG)
|
||||
#define STR_VRENCODERS (STR_OPEN9X + OFS_VRENCODERS)
|
||||
#endif
|
||||
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
#define STR_VRENCODERS (STR_OPEN9X + OFS_VRENCODERS)
|
||||
#endif
|
||||
|
||||
#if defined(PCBGRUVIN9X) || defined(CPUARM)
|
||||
@@ -372,11 +378,6 @@ extern const pm_char STR_RXNUM[];
|
||||
extern const pm_char STR_SYNCMENU[];
|
||||
extern const pm_char STR_INVERT_THR[];
|
||||
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
extern const pm_char STR_BACK[];
|
||||
#define LEN_BACK PSIZE(TR_BACK)
|
||||
#endif
|
||||
|
||||
#if defined(FRSKY)
|
||||
extern const pm_char STR_LIMIT[];
|
||||
#endif
|
||||
|
||||
@@ -455,7 +455,6 @@
|
||||
#define TR_MENUDEBUG "DIAG"
|
||||
#define TR_RXNUM "RxNum"
|
||||
#define TR_SYNCMENU "Sync [MENU]"
|
||||
#define TR_BACK "Back"
|
||||
#define TR_LIMIT INDENT"Limit"
|
||||
#define TR_MINRSSI "Min Rssi"
|
||||
#define TR_LATITUDE "Latitude"
|
||||
|
||||
@@ -414,7 +414,6 @@
|
||||
#define TR_MENUDEBUG "DEBUG"
|
||||
#define TR_RXNUM "RxNum"
|
||||
#define TR_SYNCMENU "Sync [MENU]"
|
||||
#define TR_BACK "Zur\205ck"
|
||||
#define TR_LIMIT INDENT"Limite"
|
||||
#define TR_MINRSSI "Min. RSSI"
|
||||
#define TR_LATITUDE "Latitude"
|
||||
|
||||
@@ -468,7 +468,6 @@
|
||||
#define TR_MENUDEBUG "DEBUG"
|
||||
#define TR_RXNUM TR("RxNum","Receiver Number")
|
||||
#define TR_SYNCMENU "Sync [MENU]"
|
||||
#define TR_BACK "Back"
|
||||
#define TR_LIMIT INDENT"Limit"
|
||||
#define TR_MINRSSI "Min Rssi"
|
||||
#define TR_LATITUDE "Latitude"
|
||||
|
||||
@@ -469,7 +469,6 @@
|
||||
#define TR_MENUDEBUG "DEBUG"
|
||||
#define TR_RXNUM TR("RxNum","Numero Receptor")
|
||||
#define TR_SYNCMENU "Sync [MENU]"
|
||||
#define TR_BACK "Atras"
|
||||
#define TR_LIMIT INDENT"Limite"
|
||||
#define TR_MINRSSI "Min Rssi"
|
||||
#define TR_LATITUDE "Latitud"
|
||||
|
||||
@@ -415,7 +415,6 @@
|
||||
#define TR_MENUDEBUG "DEBUG"
|
||||
#define TR_RXNUM "NumRx"
|
||||
#define TR_SYNCMENU "Sync [MENU]"
|
||||
#define TR_BACK "Ret."
|
||||
#define TR_LIMIT INDENT"Limit"
|
||||
#define TR_MINRSSI "RSSI Min."
|
||||
#define TR_LATITUDE "Latitude"
|
||||
|
||||
@@ -414,7 +414,6 @@
|
||||
#define TR_MENUDEBUG "DEBUG"
|
||||
#define TR_RXNUM "RxNum"
|
||||
#define TR_SYNCMENU "Sinc.[Men\200]"
|
||||
#define TR_BACK "Prec"
|
||||
#define TR_LIMIT "Limit"
|
||||
#define TR_MINRSSI "Min Rssi"
|
||||
#define TR_LATITUDE "Latitud."
|
||||
|
||||
@@ -415,7 +415,6 @@
|
||||
#define TR_MENUDEBUG "DEPURAR"
|
||||
#define TR_RXNUM "RxNum"
|
||||
#define TR_SYNCMENU "Sync [MENU]"
|
||||
#define TR_BACK "Atras"
|
||||
#define TR_LIMIT INDENT"Limite"
|
||||
#define TR_MINRSSI "Min Rssi"
|
||||
#define TR_LATITUDE "Latitude"
|
||||
|
||||
@@ -468,7 +468,6 @@
|
||||
#define TR_MENUDEBUG "Debug"
|
||||
#define TR_RXNUM "RxNum"
|
||||
#define TR_SYNCMENU "Synk [MENU]"
|
||||
#define TR_BACK "EXIT"
|
||||
#define TR_LIMIT INDENT"Niv\200"
|
||||
#define TR_MINRSSI "Min Rssi"
|
||||
#define TR_LATITUDE "Breddgrad"
|
||||
|
||||
Reference in New Issue
Block a user