Skip to content

Commit fb2188c

Browse files
authored
fix(lua): getFieldInfo() not returning switch info (#5108)
1 parent e9465dd commit fb2188c

File tree

2 files changed

+35
-14
lines changed

2 files changed

+35
-14
lines changed

radio/src/lua/api_general.cpp

+28-14
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,7 @@ const LuaMultipleField luaMultipleFields[] = {
413413
{MIXSRC_FIRST_HELI, "cyc", "Cyclic %d", 3},
414414
};
415415

416-
static bool _searchSingleFields(const char* name, LuaField& field,
416+
static bool _searchSingleFieldsByName(const char* name, LuaField& field,
417417
unsigned int flags,
418418
const LuaSingleField* fields, size_t n_fields)
419419
{
@@ -443,11 +443,11 @@ bool luaFindFieldByName(const char * name, LuaField & field, unsigned int flags)
443443
field.name[sizeof(field.name) - 1] = '\0';
444444

445445
// hardware specific inputs
446-
if (_searchSingleFields(name, field, flags, _lua_inputs, DIM(_lua_inputs)))
446+
if (_searchSingleFieldsByName(name, field, flags, _lua_inputs, DIM(_lua_inputs)))
447447
return true;
448448

449449
// well known single fields
450-
if (_searchSingleFields(name, field, flags, luaSingleFields, DIM(luaSingleFields)))
450+
if (_searchSingleFieldsByName(name, field, flags, luaSingleFields, DIM(luaSingleFields)))
451451
return true;
452452

453453
// check switches from 'sa' to 'sz'
@@ -531,25 +531,39 @@ bool luaFindFieldByName(const char * name, LuaField & field, unsigned int flags)
531531
return false; // not found
532532
}
533533

534-
// Return field data for a given field id
535-
bool luaFindFieldById(int id, LuaField & field, unsigned int flags)
534+
static bool _searchSingleFieldsById(int id, LuaField& field,
535+
unsigned int flags,
536+
const LuaSingleField* fields, size_t n_fields)
536537
{
537-
field.id = id;
538-
field.name[sizeof(field.name) - 1] = '\0';
539-
field.desc[0] = '\0';
540-
541-
// TODO better search method (binary lookup)
542-
for (unsigned int n = 0; n < DIM(luaSingleFields); ++n) {
543-
if (id == luaSingleFields[n].id) {
544-
strncpy(field.name, luaSingleFields[n].name, sizeof(field.name) - 1);
538+
for (unsigned int n = 0; n < n_fields; ++n) {
539+
if (id == fields[n].id) {
540+
strncpy(field.name, fields[n].name, sizeof(field.name) - 1);
545541
if (flags & FIND_FIELD_DESC) {
546-
strncpy(field.desc, luaSingleFields[n].desc, sizeof(field.desc) - 1);
542+
strncpy(field.desc, fields[n].desc, sizeof(field.desc) - 1);
547543
field.desc[sizeof(field.desc) - 1] = '\0';
548544
}
549545
return true;
550546
}
551547
}
552548

549+
return false;
550+
}
551+
552+
// Return field data for a given field id
553+
bool luaFindFieldById(int id, LuaField & field, unsigned int flags)
554+
{
555+
field.id = id;
556+
field.name[sizeof(field.name) - 1] = '\0';
557+
field.desc[0] = '\0';
558+
559+
// hardware specific inputs
560+
if (_searchSingleFieldsById(id, field, flags, _lua_inputs, DIM(_lua_inputs)))
561+
return true;
562+
563+
// well known single fields
564+
if (_searchSingleFieldsById(id, field, flags, luaSingleFields, DIM(luaSingleFields)))
565+
return true;
566+
553567
// search in multiples
554568
for (unsigned int n = 0; n < DIM(luaMultipleFields); ++n) {
555569
int index = id - luaMultipleFields[n].id;

radio/util/hw_defs/lua_inputs.jinja

+7
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,13 @@ static const LuaSingleField _lua_inputs[] = {
2121
// flex inputs
2222
{% set inputs = adc_inputs.inputs | selectattr('type', '==', 'FLEX') | list %}
2323
{{ lua_inputs('MIXSRC_FIRST_POT', inputs) }}
24+
// switches
25+
{% set inputs = switches | selectattr('type','!=','FSWITCH') | list %}
26+
{% set sw_count = inputs | count %}
27+
{% for n in range(sw_count) %}
28+
{% set sw = switches[loop.index0] %}
29+
{ MIXSRC_FIRST_SWITCH + {{ loop.index0 }}, "{{ sw.name }}", "{{ sw.name }}" },
30+
{% endfor %}
2431
// trims
2532
{% set trims_count = trims | count %}
2633
{% for n in range(trims_count) %}

0 commit comments

Comments
 (0)