Skip to content

Commit

Permalink
fix(lua): getFieldInfo() not returning switch info (#5108)
Browse files Browse the repository at this point in the history
  • Loading branch information
philmoz authored Jun 5, 2024
1 parent e9465dd commit fb2188c
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 14 deletions.
42 changes: 28 additions & 14 deletions radio/src/lua/api_general.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -413,7 +413,7 @@ const LuaMultipleField luaMultipleFields[] = {
{MIXSRC_FIRST_HELI, "cyc", "Cyclic %d", 3},
};

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

// hardware specific inputs
if (_searchSingleFields(name, field, flags, _lua_inputs, DIM(_lua_inputs)))
if (_searchSingleFieldsByName(name, field, flags, _lua_inputs, DIM(_lua_inputs)))
return true;

// well known single fields
if (_searchSingleFields(name, field, flags, luaSingleFields, DIM(luaSingleFields)))
if (_searchSingleFieldsByName(name, field, flags, luaSingleFields, DIM(luaSingleFields)))
return true;

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

// Return field data for a given field id
bool luaFindFieldById(int id, LuaField & field, unsigned int flags)
static bool _searchSingleFieldsById(int id, LuaField& field,
unsigned int flags,
const LuaSingleField* fields, size_t n_fields)
{
field.id = id;
field.name[sizeof(field.name) - 1] = '\0';
field.desc[0] = '\0';

// TODO better search method (binary lookup)
for (unsigned int n = 0; n < DIM(luaSingleFields); ++n) {
if (id == luaSingleFields[n].id) {
strncpy(field.name, luaSingleFields[n].name, sizeof(field.name) - 1);
for (unsigned int n = 0; n < n_fields; ++n) {
if (id == fields[n].id) {
strncpy(field.name, fields[n].name, sizeof(field.name) - 1);
if (flags & FIND_FIELD_DESC) {
strncpy(field.desc, luaSingleFields[n].desc, sizeof(field.desc) - 1);
strncpy(field.desc, fields[n].desc, sizeof(field.desc) - 1);
field.desc[sizeof(field.desc) - 1] = '\0';
}
return true;
}
}

return false;
}

// Return field data for a given field id
bool luaFindFieldById(int id, LuaField & field, unsigned int flags)
{
field.id = id;
field.name[sizeof(field.name) - 1] = '\0';
field.desc[0] = '\0';

// hardware specific inputs
if (_searchSingleFieldsById(id, field, flags, _lua_inputs, DIM(_lua_inputs)))
return true;

// well known single fields
if (_searchSingleFieldsById(id, field, flags, luaSingleFields, DIM(luaSingleFields)))
return true;

// search in multiples
for (unsigned int n = 0; n < DIM(luaMultipleFields); ++n) {
int index = id - luaMultipleFields[n].id;
Expand Down
7 changes: 7 additions & 0 deletions radio/util/hw_defs/lua_inputs.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,13 @@ static const LuaSingleField _lua_inputs[] = {
// flex inputs
{% set inputs = adc_inputs.inputs | selectattr('type', '==', 'FLEX') | list %}
{{ lua_inputs('MIXSRC_FIRST_POT', inputs) }}
// switches
{% set inputs = switches | selectattr('type','!=','FSWITCH') | list %}
{% set sw_count = inputs | count %}
{% for n in range(sw_count) %}
{% set sw = switches[loop.index0] %}
{ MIXSRC_FIRST_SWITCH + {{ loop.index0 }}, "{{ sw.name }}", "{{ sw.name }}" },
{% endfor %}
// trims
{% set trims_count = trims | count %}
{% for n in range(trims_count) %}
Expand Down

0 comments on commit fb2188c

Please sign in to comment.