From 86baf80ac2600fc7fbbd2a99faac91105eecb85e Mon Sep 17 00:00:00 2001 From: "bsongis@gmail.com" Date: Tue, 7 May 2013 09:35:19 +0000 Subject: [PATCH] [Taranis / sky9x] Bad wrap-around in files selection popups --- src/gui/menu_model.cpp | 17 +++++++++++++++++ src/gui/menus.cpp | 12 ++++++++++++ src/opentx.cpp | 2 +- 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/gui/menu_model.cpp b/src/gui/menu_model.cpp index a7b418074..9339f312d 100644 --- a/src/gui/menu_model.cpp +++ b/src/gui/menu_model.cpp @@ -146,6 +146,10 @@ bool listSdFiles(const char *path, const char *extension, const uint8_t maxlen, s_last_menu_offset = 0; 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) { // should not happen, only there because of Murphy's law return true; @@ -212,6 +216,19 @@ bool listSdFiles(const char *path, const char *extension, const uint8_t maxlen, for (uint8_t i=0; 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 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) { memset(reusableBuffer.modelsel.menu_bss[MENU_MAX_LINES-1], 0, MENU_LINE_LENGTH); diff --git a/src/gui/menus.cpp b/src/gui/menus.cpp index ee58de4b1..b5d0bf476 100644 --- a/src/gui/menus.cpp +++ b/src/gui/menus.cpp @@ -980,6 +980,12 @@ const char * displayMenu(uint8_t event) #endif else { 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; @@ -999,6 +1005,12 @@ const char * displayMenu(uint8_t event) #endif else { s_menu_item = 0; +#if defined(SDCARD) + if (s_menu_offset) { + s_menu_offset = 0; + result = STR_UPDATE_LIST; + } +#endif } break; CASE_EVT_ROTARY_BREAK diff --git a/src/opentx.cpp b/src/opentx.cpp index e7fc0d766..596d2186f 100644 --- a/src/opentx.cpp +++ b/src/opentx.cpp @@ -1012,7 +1012,7 @@ bool __getSwitch(int8_t swtch) #if defined(FRSKY) // Telemetry 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; y = convertCswTelemValue(cs);