[Taranis / sky9x] Bad wrap-around in files selection popups
This commit is contained in:
@@ -146,6 +146,10 @@ bool listSdFiles(const char *path, const char *extension, const uint8_t maxlen,
|
|||||||
s_last_menu_offset = 0;
|
s_last_menu_offset = 0;
|
||||||
memset(reusableBuffer.modelsel.menu_bss, 0, sizeof(reusableBuffer.modelsel.menu_bss));
|
memset(reusableBuffer.modelsel.menu_bss, 0, sizeof(reusableBuffer.modelsel.menu_bss));
|
||||||
}
|
}
|
||||||
|
else if (s_menu_offset == s_menu_count - MENU_MAX_LINES) {
|
||||||
|
s_last_menu_offset = 0xffff;
|
||||||
|
memset(reusableBuffer.modelsel.menu_bss, 0, sizeof(reusableBuffer.modelsel.menu_bss));
|
||||||
|
}
|
||||||
else if (s_menu_offset == s_last_menu_offset) {
|
else if (s_menu_offset == s_last_menu_offset) {
|
||||||
// should not happen, only there because of Murphy's law
|
// should not happen, only there because of Murphy's law
|
||||||
return true;
|
return true;
|
||||||
@@ -212,6 +216,19 @@ bool listSdFiles(const char *path, const char *extension, const uint8_t maxlen,
|
|||||||
for (uint8_t i=0; i<min(s_menu_count, (uint16_t)MENU_MAX_LINES); i++)
|
for (uint8_t i=0; i<min(s_menu_count, (uint16_t)MENU_MAX_LINES); i++)
|
||||||
s_menu[i] = reusableBuffer.modelsel.menu_bss[i];
|
s_menu[i] = reusableBuffer.modelsel.menu_bss[i];
|
||||||
}
|
}
|
||||||
|
else if (s_last_menu_offset == 0xffff) {
|
||||||
|
for (int i=MENU_MAX_LINES-1; i>=0; i--) {
|
||||||
|
char *line = reusableBuffer.modelsel.menu_bss[i];
|
||||||
|
if (line[0] == '\0' || strcmp(fn, line) > 0) {
|
||||||
|
if (i > 0) memmove(reusableBuffer.modelsel.menu_bss[0], reusableBuffer.modelsel.menu_bss[1], sizeof(reusableBuffer.modelsel.menu_bss[i]) * i);
|
||||||
|
memset(line, 0, MENU_LINE_LENGTH);
|
||||||
|
strcpy(line, fn);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (uint8_t i=0; i<min(s_menu_count, (uint16_t)MENU_MAX_LINES); i++)
|
||||||
|
s_menu[i] = reusableBuffer.modelsel.menu_bss[i];
|
||||||
|
}
|
||||||
else if (s_menu_offset > s_last_menu_offset) {
|
else if (s_menu_offset > s_last_menu_offset) {
|
||||||
if (strcmp(fn, reusableBuffer.modelsel.menu_bss[MENU_MAX_LINES-2]) > 0 && strcmp(fn, reusableBuffer.modelsel.menu_bss[MENU_MAX_LINES-1]) < 0) {
|
if (strcmp(fn, reusableBuffer.modelsel.menu_bss[MENU_MAX_LINES-2]) > 0 && strcmp(fn, reusableBuffer.modelsel.menu_bss[MENU_MAX_LINES-1]) < 0) {
|
||||||
memset(reusableBuffer.modelsel.menu_bss[MENU_MAX_LINES-1], 0, MENU_LINE_LENGTH);
|
memset(reusableBuffer.modelsel.menu_bss[MENU_MAX_LINES-1], 0, MENU_LINE_LENGTH);
|
||||||
|
|||||||
@@ -980,6 +980,12 @@ const char * displayMenu(uint8_t event)
|
|||||||
#endif
|
#endif
|
||||||
else {
|
else {
|
||||||
s_menu_item = display_count - 1;
|
s_menu_item = display_count - 1;
|
||||||
|
#if defined(SDCARD)
|
||||||
|
if (s_menu_count > MENU_MAX_LINES) {
|
||||||
|
s_menu_offset = s_menu_count - display_count;
|
||||||
|
result = STR_UPDATE_LIST;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -999,6 +1005,12 @@ const char * displayMenu(uint8_t event)
|
|||||||
#endif
|
#endif
|
||||||
else {
|
else {
|
||||||
s_menu_item = 0;
|
s_menu_item = 0;
|
||||||
|
#if defined(SDCARD)
|
||||||
|
if (s_menu_offset) {
|
||||||
|
s_menu_offset = 0;
|
||||||
|
result = STR_UPDATE_LIST;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
CASE_EVT_ROTARY_BREAK
|
CASE_EVT_ROTARY_BREAK
|
||||||
|
|||||||
+1
-1
@@ -1012,7 +1012,7 @@ bool __getSwitch(int8_t swtch)
|
|||||||
#if defined(FRSKY)
|
#if defined(FRSKY)
|
||||||
// Telemetry
|
// Telemetry
|
||||||
if (cs->v1 >= MIXSRC_FIRST_TELEM) {
|
if (cs->v1 >= MIXSRC_FIRST_TELEM) {
|
||||||
if (frskyStreaming <= 0 && cs->v1 > MIXSRC_FIRST_TELEM-1+TELEM_TM2)
|
if (frskyStreaming <= 0 && cs->v1 >= MIXSRC_FIRST_TELEM+TELEM_TM2)
|
||||||
return swtch > 0 ? false : true;
|
return swtch > 0 ? false : true;
|
||||||
|
|
||||||
y = convertCswTelemValue(cs);
|
y = convertCswTelemValue(cs);
|
||||||
|
|||||||
Reference in New Issue
Block a user