Skip to content

Commit c4646cf

Browse files
authored
fix(bw): radio tools list may display incorrect/corrupted names (#5806)
1 parent 0317185 commit c4646cf

File tree

2 files changed

+39
-43
lines changed

2 files changed

+39
-43
lines changed

radio/src/edgetx.h

+4-2
Original file line numberDiff line numberDiff line change
@@ -698,12 +698,14 @@ union ReusableBuffer
698698
#endif
699699

700700
#if defined(NUM_BODY_LINES)
701+
#define TOOL_NAME_MAX_LEN (LCD_W / FW)
702+
#define TOOL_PATH_MAX_LEN (LEN_FILE_PATH_MAX + 10)
701703
struct scriptInfo{
702704
uint8_t index;
703-
char label[(LCD_W / FW) + 1];
705+
char label[TOOL_NAME_MAX_LEN + 1];
704706
uint8_t module;
705707
void (* tool)(event_t);
706-
char path[LEN_FILE_PATH_MAX+10+1];
708+
char path[TOOL_PATH_MAX_LEN + 1];
707709
};
708710
#endif
709711

radio/src/gui/common/stdlcd/radio_tools.cpp

+35-41
Original file line numberDiff line numberDiff line change
@@ -37,64 +37,53 @@ inline bool LuaScript_compare_nocase(LuaScript first, LuaScript second)
3737
return strcasecmp(first.label.c_str(), second.label.c_str()) < 0;
3838
}
3939

40-
static LcdFlags dispTool(uint8_t index, const char* label)
40+
static LcdFlags dispTool(uint8_t index)
4141
{
4242
int8_t sub = menuVerticalPosition - HEADER_LINE;
4343
LcdFlags attr = (sub == index ? INVERS : 0);
4444
coord_t y = MENU_HEADER_HEIGHT + (index - menuVerticalOffset) * FH;
4545
lcdDrawNumber(3, y, index + 1, LEADING0 | LEFT, 2);
46-
lcdDrawText(3 * FW, y, reusableBuffer.radioTools.script[index].label, attr);
46+
lcdDrawText(3 * FW, y, reusableBuffer.radioTools.script[index - menuVerticalOffset].label, attr);
4747
return attr;
4848
}
4949

5050
void displayRadioTool(uint8_t index)
5151
{
52-
if (index >= menuVerticalOffset) {
53-
if ((index - menuVerticalOffset) < NUM_BODY_LINES) {
54-
auto attr = dispTool(index, reusableBuffer.radioTools.script[index].label);
55-
if (attr && s_editMode > 0) {
56-
s_editMode = 0;
57-
killAllEvents();
58-
if (reusableBuffer.radioTools.script[index].tool != nullptr) {
59-
g_moduleIdx = reusableBuffer.radioTools.script[index].module;
60-
pushMenu(reusableBuffer.radioTools.script[index].tool);
61-
}
62-
else if (reusableBuffer.radioTools.script[index].path[0]) {
63-
char toolPath[FF_MAX_LFN];
64-
strcpy(toolPath, reusableBuffer.radioTools.script[index].path);
65-
*((char *)getBasename(toolPath)-1) = '\0';
66-
f_chdir(toolPath);
67-
luaExec(reusableBuffer.radioTools.script[index].path);
68-
}
69-
}
52+
auto attr = dispTool(index);
53+
if (attr && s_editMode > 0) {
54+
s_editMode = 0;
55+
killAllEvents();
56+
if (reusableBuffer.radioTools.script[index - menuVerticalOffset].tool != nullptr) {
57+
g_moduleIdx = reusableBuffer.radioTools.script[index - menuVerticalOffset].module;
58+
pushMenu(reusableBuffer.radioTools.script[index - menuVerticalOffset].tool);
59+
}
60+
else if (reusableBuffer.radioTools.script[index - menuVerticalOffset].path[0]) {
61+
char toolPath[FF_MAX_LFN];
62+
strcpy(toolPath, reusableBuffer.radioTools.script[index - menuVerticalOffset].path);
63+
*((char *)getBasename(toolPath)-1) = '\0';
64+
f_chdir(toolPath);
65+
luaExec(reusableBuffer.radioTools.script[index - menuVerticalOffset].path);
7066
}
7167
}
7268
}
7369

7470
void addRadioTool(uint8_t index, const char * label)
7571
{
76-
if (index >= menuVerticalOffset) {
77-
if ((index - menuVerticalOffset) < NUM_BODY_LINES) {
78-
strncpy(reusableBuffer.radioTools.script[index].label, label, sizeof(reusableBuffer.radioTools.script[0].label));
79-
auto attr = dispTool(index, label);
80-
if (attr && s_editMode > 0) {
81-
s_editMode = 0;
82-
killAllEvents();
83-
}
84-
}
72+
strAppend(reusableBuffer.radioTools.script[index - menuVerticalOffset].label, label, TOOL_NAME_MAX_LEN);
73+
auto attr = dispTool(index);
74+
if (attr && s_editMode > 0) {
75+
s_editMode = 0;
76+
killAllEvents();
8577
}
8678
}
8779

8880
void addRadioModuleToolHandler(uint8_t index, const char * label, void (* tool)(event_t), uint8_t module)
8981
{
90-
if (index >= menuVerticalOffset) {
91-
uint8_t lineIndex = index - menuVerticalOffset;
92-
if (lineIndex < NUM_BODY_LINES) {
93-
memclear(&reusableBuffer.radioTools.script[index], sizeof(reusableBuffer.radioTools.script[0]));
94-
reusableBuffer.radioTools.script[index].tool = tool;
95-
reusableBuffer.radioTools.script[index].module = module;
96-
addRadioTool(index, label);
97-
}
82+
if (index >= menuVerticalOffset && index < menuVerticalOffset + NUM_BODY_LINES) {
83+
memclear(&reusableBuffer.radioTools.script[index - menuVerticalOffset], sizeof(reusableBuffer.radioTools.script[0]));
84+
reusableBuffer.radioTools.script[index - menuVerticalOffset].tool = tool;
85+
reusableBuffer.radioTools.script[index - menuVerticalOffset].module = module;
86+
addRadioTool(index, label);
9887
}
9988
}
10089

@@ -103,9 +92,12 @@ void addRadioScriptToolHandler(std::vector<LuaScript> luaScripts)
10392
{
10493
uint8_t index = 0;
10594
for (auto luaScript : luaScripts) {
106-
memclear(&reusableBuffer.radioTools.script[index], sizeof(reusableBuffer.radioTools.script[0]));
107-
strncpy(reusableBuffer.radioTools.script[index].path, luaScript.path.c_str(), sizeof(reusableBuffer.radioTools.script[0].path));
108-
addRadioTool(index++, luaScript.label.c_str());
95+
if (index >= menuVerticalOffset && index < menuVerticalOffset + NUM_BODY_LINES) {
96+
memclear(&reusableBuffer.radioTools.script[index - menuVerticalOffset], sizeof(reusableBuffer.radioTools.script[0]));
97+
strAppend(reusableBuffer.radioTools.script[index - menuVerticalOffset].path, luaScript.path.c_str(), TOOL_PATH_MAX_LEN);
98+
addRadioTool(index, luaScript.label.c_str());
99+
}
100+
index += 1;
109101
}
110102
}
111103
#endif
@@ -130,7 +122,9 @@ void menuRadioTools(event_t event)
130122

131123
if (reusableBuffer.radioTools.oldOffset == menuVerticalOffset) {
132124
for(uint8_t line = 0; line < reusableBuffer.radioTools.linesCount; line++) {
133-
displayRadioTool(line);
125+
if (line >= menuVerticalOffset && line < menuVerticalOffset + NUM_BODY_LINES) {
126+
displayRadioTool(line);
127+
}
134128
}
135129
return;
136130
}

0 commit comments

Comments
 (0)