[X9D] More work on navigation
[RotEnc] Pressing [EXIT] inside a menu returns in page selection mode [stock] More flash saving
This commit is contained in:
+57
-15
@@ -191,17 +191,40 @@ int8_t checkIncDecGen(uint8_t event, int8_t i_val, int8_t i_min, int8_t i_max)
|
||||
return checkIncDec(event,i_val,i_min,i_max,EE_GENERAL);
|
||||
}
|
||||
|
||||
bool check_simple(uint8_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, maxrow_t maxrow)
|
||||
bool check_simple(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, maxrow_t maxrow)
|
||||
{
|
||||
return check(event, curr, menuTab, menuTabSize, 0, 0, maxrow);
|
||||
}
|
||||
|
||||
bool check_submenu_simple(uint8_t event, uint8_t maxrow)
|
||||
bool check_submenu_simple(check_event_t event, uint8_t maxrow)
|
||||
{
|
||||
return check_simple(event, 0, 0, 0, maxrow);
|
||||
}
|
||||
|
||||
#if defined(ROTARY_ENCODERS)
|
||||
#if defined(PCBX9D)
|
||||
void check_rotary_encoder(uint8_t & event)
|
||||
{
|
||||
if (event==EVT_KEY_REPT(KEY_LEFT) || event==EVT_KEY_BREAK(KEY_LEFT)) {
|
||||
scrollRE = -1;
|
||||
}
|
||||
else if (event==EVT_KEY_REPT(KEY_RIGHT) || event==EVT_KEY_FIRST(KEY_RIGHT)) {
|
||||
scrollRE = 1;
|
||||
}
|
||||
else {
|
||||
scrollRE = 0;
|
||||
}
|
||||
|
||||
if (s_editMode > 0) {
|
||||
p1valdiff = -scrollRE;
|
||||
scrollRE = 0;
|
||||
}
|
||||
|
||||
// TODO remove later...
|
||||
uint8_t key = event & EVT_KEY_MASK;
|
||||
if (key==KEY_LEFT || key==KEY_RIGHT)
|
||||
event = 0;
|
||||
}
|
||||
#elif defined(ROTARY_ENCODERS)
|
||||
void check_rotary_encoder()
|
||||
{
|
||||
// check rotary encoder 1 if changed -> cursor down/up
|
||||
@@ -245,24 +268,32 @@ void title(const pm_char * s)
|
||||
#define INC(val,max) if(val<max) {val++;} else {val=0;}
|
||||
#define DEC(val,max) if(val>0 ) {val--;} else {val=max;}
|
||||
|
||||
bool check(uint8_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, const pm_uint8_t *horTab, uint8_t horTabMax, maxrow_t maxrow)
|
||||
#if defined(PCBX9D)
|
||||
#define RE_NAV_ENTER (KEY_ENTER)
|
||||
#define RE_NAV_ENABLE true
|
||||
#else
|
||||
#define RE_NAV_ENTER (BTN_REa+g_eeGeneral.reNavigation-1)
|
||||
#define RE_NAV_ENABLE g_eeGeneral.reNavigation
|
||||
#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)
|
||||
{
|
||||
maxrow_t l_posVert = m_posVert;
|
||||
uint8_t l_posHorz = m_posHorz;
|
||||
|
||||
int8_t maxcol = MAXCOL(l_posVert);
|
||||
uint8_t maxcol = MAXCOL(l_posVert);
|
||||
|
||||
#if defined(ROTARY_ENCODERS)
|
||||
if (!(s_warning || s_menu_count))
|
||||
check_rotary_encoder();
|
||||
if (l_posVert < 0 && (event==EVT_KEY_FIRST(BTN_REa) || event==EVT_KEY_FIRST(BTN_REb) || event==EVT_KEY_FIRST(KEY_MENU))) {
|
||||
CHECK_ROTARY_ENCODER(event);
|
||||
if (l_posVert < 0 && (event==EVT_KEY_FIRST(RE_NAV_ENTER) || event==EVT_KEY_FIRST(KEY_MENU))) {
|
||||
popMenu();
|
||||
killEvents(event);
|
||||
return false;
|
||||
}
|
||||
if (g_eeGeneral.reNavigation && event == EVT_KEY_BREAK(BTN_REa+g_eeGeneral.reNavigation-1)) {
|
||||
if (RE_NAV_ENABLE && event==EVT_KEY_BREAK(RE_NAV_ENTER)) {
|
||||
if (s_editMode > 0 && (maxcol & ZCHAR)) {
|
||||
if (l_posHorz < (uint8_t)maxcol-ZCHAR) {
|
||||
if (l_posHorz < maxcol-ZCHAR) {
|
||||
l_posHorz++;
|
||||
}
|
||||
else {
|
||||
@@ -340,7 +371,7 @@ bool check(uint8_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTa
|
||||
}
|
||||
|
||||
#if defined(ROTARY_ENCODERS)
|
||||
if (g_eeGeneral.reNavigation && s_editMode < 0)
|
||||
if (RE_NAV_ENABLE && s_editMode < 0)
|
||||
attr = INVERS|BLINK;
|
||||
#endif
|
||||
}
|
||||
@@ -381,10 +412,11 @@ bool check(uint8_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTa
|
||||
if (maxcol & ZCHAR) maxcol = 0;
|
||||
if (++l_posHorz > maxcol) {
|
||||
if (l_posVert < maxrow) {
|
||||
++l_posVert;
|
||||
do {
|
||||
++l_posVert;
|
||||
} while(MAXCOL(l_posVert) == (uint8_t)-1);
|
||||
maxcol = MAXCOL(l_posVert);
|
||||
if (maxcol & ZCHAR) maxcol = 0;
|
||||
if (maxcol < 0) l_posVert++;
|
||||
l_posHorz = 0;
|
||||
}
|
||||
else {
|
||||
@@ -396,7 +428,10 @@ bool check(uint8_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTa
|
||||
else {
|
||||
++scrollRE;
|
||||
if (l_posHorz-- == 0) {
|
||||
if (l_posVert-- <= 0) {
|
||||
do {
|
||||
--l_posVert;
|
||||
} while(MAXCOL(l_posVert) == (uint8_t)-1);
|
||||
if (l_posVert <= (menuTab ? 0 : -1)) {
|
||||
l_posVert = menuTab ? 0 : -1;
|
||||
l_posHorz = 0;
|
||||
scrollRE = 0;
|
||||
@@ -404,7 +439,6 @@ bool check(uint8_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTa
|
||||
else {
|
||||
maxcol = MAXCOL(l_posVert);
|
||||
if (maxcol & ZCHAR) maxcol = 0;
|
||||
if (maxcol < 0) { --l_posVert; maxcol = MAXCOL(l_posVert); if (maxcol & ZCHAR) maxcol = 0; }
|
||||
l_posHorz = maxcol;
|
||||
}
|
||||
}
|
||||
@@ -443,6 +477,11 @@ bool check(uint8_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTa
|
||||
popMenu();
|
||||
break;
|
||||
case EVT_KEY_BREAK(KEY_EXIT):
|
||||
#if defined(ROTARY_ENCODERS)
|
||||
if (s_editMode==0)
|
||||
s_editMode = -1;
|
||||
else
|
||||
#endif
|
||||
if (s_editMode>0) {
|
||||
s_editMode = 0;
|
||||
break;
|
||||
@@ -539,6 +578,8 @@ void chainMenu(MenuFuncP newMenu)
|
||||
|
||||
void pushMenu(MenuFuncP newMenu)
|
||||
{
|
||||
killEvents(KEY_ENTER);
|
||||
|
||||
if (g_menuStackPtr == 0) {
|
||||
if (newMenu == menuGeneralSetup)
|
||||
g_menuPos[0] = 1;
|
||||
@@ -595,8 +636,9 @@ void displayWarning(uint8_t event)
|
||||
case EVT_KEY_FIRST(BTN_REb):
|
||||
if (!navigationRotaryEncoder(event))
|
||||
break;
|
||||
// no break
|
||||
#endif
|
||||
case EVT_KEY_FIRST(KEY_MENU):
|
||||
case EVT_KEY_FIRST(KEY_ENTER):
|
||||
if (s_warning_type == WARNING_TYPE_ASTERISK)
|
||||
break;
|
||||
s_warning_result = true;
|
||||
|
||||
+14
-4
@@ -136,8 +136,12 @@ 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(ROTARY_ENCODERS)
|
||||
#if defined(PCBX9D)
|
||||
void check_rotary_encoder(uint8_t & event);
|
||||
#define CHECK_ROTARY_ENCODER(event) check_rotary_encoder(event)
|
||||
#elif defined(ROTARY_ENCODERS)
|
||||
void check_rotary_encoder();
|
||||
#define CHECK_ROTARY_ENCODER(event) check_rotary_encoder()
|
||||
#endif
|
||||
|
||||
// Menus related stuff ...
|
||||
@@ -152,9 +156,15 @@ void check_rotary_encoder();
|
||||
extern maxrow_t m_posVert;
|
||||
extern uint8_t m_posHorz;
|
||||
|
||||
bool check(uint8_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, const pm_uint8_t *subTab, uint8_t subTabMax, maxrow_t maxrow);
|
||||
bool check_simple(uint8_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, maxrow_t maxrow);
|
||||
bool check_submenu_simple(uint8_t event, uint8_t maxrow);
|
||||
#if defined(PCBX9D)
|
||||
typedef uint8_t & check_event_t;
|
||||
#else
|
||||
typedef uint8_t check_event_t;
|
||||
#endif
|
||||
|
||||
bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, const pm_uint8_t *subTab, uint8_t subTabMax, maxrow_t maxrow);
|
||||
bool check_simple(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, maxrow_t maxrow);
|
||||
bool check_submenu_simple(check_event_t event, uint8_t maxrow);
|
||||
|
||||
typedef void (*MenuFuncP_PROGMEM)(uint8_t event);
|
||||
|
||||
|
||||
+29
-20
@@ -379,7 +379,6 @@ void menuModelSelect(uint8_t event)
|
||||
s_copySrcRow = -1;
|
||||
}
|
||||
break;
|
||||
#if !defined(PCBX9D)
|
||||
case EVT_KEY_FIRST(KEY_LEFT):
|
||||
case EVT_KEY_FIRST(KEY_RIGHT):
|
||||
if (sub == g_eeGeneral.currModel) {
|
||||
@@ -388,6 +387,7 @@ void menuModelSelect(uint8_t event)
|
||||
}
|
||||
AUDIO_WARNING2();
|
||||
break;
|
||||
#if !defined(PCBX9D)
|
||||
case EVT_KEY_FIRST(KEY_UP):
|
||||
case EVT_KEY_FIRST(KEY_DOWN):
|
||||
if (s_copyMode) {
|
||||
@@ -555,9 +555,13 @@ void editName(uint8_t x, uint8_t y, char *name, uint8_t size, uint8_t event, boo
|
||||
case EVT_KEY_LONG(BTN_REb):
|
||||
if (!navigationRotaryEncoder(event))
|
||||
break;
|
||||
// no break
|
||||
#if defined(PCBX9D)
|
||||
case EVT_KEY_LONG(KEY_ENTER):
|
||||
#endif
|
||||
if (v==0) {
|
||||
s_editMode = 0;
|
||||
killEvents(BTN_REa);
|
||||
killEvents(event);
|
||||
break;
|
||||
}
|
||||
// no break
|
||||
@@ -1103,13 +1107,15 @@ void menuModelPhasesAll(uint8_t event)
|
||||
break;
|
||||
// no break
|
||||
#endif
|
||||
case EVT_KEY_FIRST(KEY_MENU):
|
||||
case EVT_KEY_FIRST(KEY_ENTER):
|
||||
if (sub == MAX_PHASES) {
|
||||
s_editMode = 0;
|
||||
trimsCheckTimer = 200; // 2 seconds
|
||||
}
|
||||
// no break
|
||||
#if !defined(PCBX9D)
|
||||
case EVT_KEY_FIRST(KEY_RIGHT):
|
||||
#endif
|
||||
if (sub >= 0 && sub < MAX_PHASES) {
|
||||
s_currIdx = sub;
|
||||
pushMenu(menuModelPhaseOne);
|
||||
@@ -1313,7 +1319,6 @@ void menuModelCurveOne(uint8_t event)
|
||||
switch(event) {
|
||||
case EVT_ENTRY:
|
||||
s_editMode = 1;
|
||||
killEvents(KEY_MENU);
|
||||
break;
|
||||
#if defined(ROTARY_ENCODERS)
|
||||
case EVT_KEY_BREAK(BTN_REa):
|
||||
@@ -2184,7 +2189,11 @@ enum LimitsItems {
|
||||
|
||||
void menuModelLimits(uint8_t event)
|
||||
{
|
||||
#if defined(PCBSKY9X)
|
||||
MENU(STR_MENULIMITS, menuTabModel, e_Limits, 1+NUM_CHNOUT+1, {0, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, 0});
|
||||
#else
|
||||
MENU(STR_MENULIMITS, menuTabModel, e_Limits, 1+NUM_CHNOUT+1, {0, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, ITEM_LIMITS_MAXROW, 0});
|
||||
#endif
|
||||
|
||||
uint8_t sub = m_posVert - 1;
|
||||
|
||||
@@ -2365,8 +2374,10 @@ void menuModelCurvesAll(uint8_t event)
|
||||
break;
|
||||
// no break
|
||||
#endif
|
||||
#if !defined(PCBX9D)
|
||||
case EVT_KEY_FIRST(KEY_RIGHT):
|
||||
case EVT_KEY_FIRST(KEY_MENU):
|
||||
#endif
|
||||
case EVT_KEY_FIRST(KEY_ENTER):
|
||||
if (CURVE_SELECTED()) {
|
||||
s_curveChan = sub;
|
||||
pushMenu(menuModelCurveOne);
|
||||
@@ -2415,6 +2426,7 @@ enum CustomSwitchFields {
|
||||
void menuModelCustomSwitchOne(uint8_t event)
|
||||
{
|
||||
TITLE(STR_MENUCUSTOMSWITCH);
|
||||
|
||||
CustomSwData * cs = cswaddress(s_currIdx);
|
||||
uint8_t sw = DSW_SW1+s_currIdx;
|
||||
putsSwitches(14*FW, 0, sw, (getSwitch(sw, 0) ? BOLD : 0));
|
||||
@@ -2533,8 +2545,10 @@ void menuModelCustomSwitches(uint8_t event)
|
||||
break;
|
||||
// no break
|
||||
#endif
|
||||
#if !defined(PCBX9D)
|
||||
case EVT_KEY_FIRST(KEY_RIGHT):
|
||||
case EVT_KEY_FIRST(KEY_MENU):
|
||||
#endif
|
||||
case EVT_KEY_FIRST(KEY_ENTER):
|
||||
if (sub >= 0) {
|
||||
s_currIdx = sub;
|
||||
pushMenu(menuModelCustomSwitchOne);
|
||||
@@ -3230,23 +3244,18 @@ void menuModelTemplates(uint8_t event)
|
||||
|
||||
uint8_t sub = m_posVert - 1;
|
||||
|
||||
if (s_warning_result) {
|
||||
if (sub<TMPL_COUNT)
|
||||
if (sub < TMPL_COUNT) {
|
||||
if (s_warning_result) {
|
||||
s_warning_result = 0;
|
||||
applyTemplate(sub);
|
||||
s_warning_result = 0;
|
||||
AUDIO_WARNING2();
|
||||
}
|
||||
|
||||
switch(event)
|
||||
{
|
||||
case EVT_KEY_FIRST(KEY_MENU):
|
||||
if (sub!=255) {
|
||||
s_warning = STR_VTEMPLATES+1 + (sub * LEN2_VTEMPLATES);
|
||||
s_warning_type = WARNING_TYPE_CONFIRM;
|
||||
}
|
||||
AUDIO_WARNING2();
|
||||
}
|
||||
if (event==EVT_KEY_FIRST(KEY_ENTER)) {
|
||||
s_warning = STR_VTEMPLATES+1 + (sub * LEN2_VTEMPLATES);
|
||||
s_warning_type = WARNING_TYPE_CONFIRM;
|
||||
killEvents(event);
|
||||
s_editMode = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t y = 1*FH;
|
||||
|
||||
+11
-7
@@ -588,22 +588,26 @@ PACK(typedef struct t_SwashRingData { // Swash Ring data
|
||||
|
||||
#define ROTARY_ENCODER_MAX 1024
|
||||
|
||||
#if defined(PCBSKY9X)
|
||||
#if defined(PCBX9D)
|
||||
#define NUM_ROTARY_ENCODERS_EXTRA 0
|
||||
#define NUM_ROTARY_ENCODERS 1
|
||||
#define NUM_ROTARY_ENCODERS 0
|
||||
#define ROTARY_ENCODER_ARRAY_EXTRA
|
||||
#define ROTARY_ENCODER_ARRAY int16_t rotaryEncoders[1];
|
||||
#elif defined(PCBGRUVIN9X)
|
||||
#if defined(EXTRA_ROTARY_ENCODERS)
|
||||
#elif defined(PCBSKY9X)
|
||||
#define NUM_ROTARY_ENCODERS_EXTRA 0
|
||||
#define NUM_ROTARY_ENCODERS 1
|
||||
#define ROTARY_ENCODER_ARRAY int16_t rotaryEncoders[1];
|
||||
#define ROTARY_ENCODER_ARRAY_EXTRA
|
||||
#elif defined(PCBGRUVIN9X) && defined(EXTRA_ROTARY_ENCODERS)
|
||||
#define NUM_ROTARY_ENCODERS_EXTRA 2
|
||||
#define NUM_ROTARY_ENCODERS (2+NUM_ROTARY_ENCODERS_EXTRA)
|
||||
#define ROTARY_ENCODER_ARRAY int16_t rotaryEncoders[2];
|
||||
#define ROTARY_ENCODER_ARRAY_EXTRA int16_t rotaryEncodersExtra[MAX_PHASES][NUM_ROTARY_ENCODERS_EXTRA];
|
||||
#else //EXTRA_ROTARY_ENCODERS
|
||||
#elif defined(PCBGRUVIN9X) && !defined(EXTRA_ROTARY_ENCODERS)
|
||||
#define NUM_ROTARY_ENCODERS_EXTRA 0
|
||||
#define NUM_ROTARY_ENCODERS 2
|
||||
#define ROTARY_ENCODER_ARRAY_EXTRA
|
||||
#endif //EXTRA_ROTARY_ENCODERS
|
||||
#define ROTARY_ENCODER_ARRAY int16_t rotaryEncoders[2];
|
||||
#define ROTARY_ENCODER_ARRAY_EXTRA
|
||||
#else
|
||||
#define NUM_ROTARY_ENCODERS_EXTRA 0
|
||||
#define NUM_ROTARY_ENCODERS 0
|
||||
|
||||
Reference in New Issue
Block a user