diff --git a/radio/sdcard/FrSky-utilities/FrSky SBEC.lua b/radio/sdcard/FrSky-utilities/FrSky SBEC.lua index 15bd76bf0..e09e97e69 100644 --- a/radio/sdcard/FrSky-utilities/FrSky SBEC.lua +++ b/radio/sdcard/FrSky-utilities/FrSky SBEC.lua @@ -20,25 +20,19 @@ local version = "v1.2" local VALUE = 0 local COMBO = 1 -local FLPOI = 2 - local edit = false local page = 1 local current = 1 --row local refreshState = 0 local refreshIndex = 0 -local refreshIndex3 = 0 local pageOffset = 0 local pages = {} local fields = {} local modifications = {} -local thistime = getTime() -local lastTime = thistime local margin = 1 local spacing = 8 -local configFields = {} -local counter = 0 +local appId = 0 local function drawScreenTitle(title,page, pages) if math.fmod(math.floor(getTime()/100),10) == 0 then @@ -156,19 +150,19 @@ local function redrawFieldsPage() end local function telemetryRead(fieldx) - return sportTelemetryPush(0x17, 0x30, 0x0e50, fieldx) + return sportTelemetryPush(0x17, 0x30, appId, fieldx) end local function telemetryIdle(field) - return sportTelemetryPush(0x17, 0x21, 0x0e50, field) + return sportTelemetryPush(0x17, 0x21, appId, field) end local function telemetryUnIdle(field) - return sportTelemetryPush(0x17, 0x20, 0x0e50, field) + return sportTelemetryPush(0x17, 0x20, appId, field) end local function telemetryWrite(fieldx, valuex) - return sportTelemetryPush(0x17, 0x31, 0x0e50, fieldx + valuex*256) + return sportTelemetryPush(0x17, 0x31, appId, fieldx + valuex*256) end local telemetryPopTimeout = 0 @@ -188,7 +182,7 @@ local function refreshNext() end elseif refreshState == 1 then local physicalId, primId, dataId, value = sportTelemetryPop() - if primId == 0x32 and dataId >= 0x0e50 and dataId <= 0x0e5f then + if primId == 0x32 and dataId == appId then local fieldId = value % 256 local field = fields[refreshIndex + 1] if fieldId == field[3] then @@ -261,6 +255,18 @@ local function init() runSettingsPage, } + for index = 1, 40, 1 do + local sensor = model.getSensor(index) + if sensor ~= nil and sensor.id >= 0x0e50 and sensor.id <= 0x0e5f then + appId = sensor.id + break + end + end + + if appId == 0 then + error("No SBEC sensor in this model!") + end + telemetryIdle(0x80) end diff --git a/radio/src/lua/api_general.cpp b/radio/src/lua/api_general.cpp index 1e321cc77..e4ce57edf 100644 --- a/radio/src/lua/api_general.cpp +++ b/radio/src/lua/api_general.cpp @@ -1096,7 +1096,8 @@ static int luaSetTelemetryValue(lua_State * L) const char* name = luaL_optstring(L, 7, NULL); if (name != NULL && strlen(name) > 0) { str2zchar(zname, name, 4); - } else { + } + else { zname[0] = hex2zchar((id & 0xf000) >> 12); zname[1] = hex2zchar((id & 0x0f00) >> 8); zname[2] = hex2zchar((id & 0x00f0) >> 4); @@ -1111,7 +1112,8 @@ static int luaSetTelemetryValue(lua_State * L) telemetrySensor.instance = instance; telemetrySensor.init(zname, unit, prec); lua_pushboolean(L, true); - } else { + } + else { lua_pushboolean(L, false); } return 1; diff --git a/radio/src/lua/api_model.cpp b/radio/src/lua/api_model.cpp index 52833e22e..481bbf4b8 100644 --- a/radio/src/lua/api_model.cpp +++ b/radio/src/lua/api_model.cpp @@ -1314,6 +1314,50 @@ static int luaModelSetGlobalVariable(lua_State *L) return 0; } +/*luadoc +@function model.getSensor(sensor) + +Get Telemetry Sensor parameters + +@param sensor (unsigned number) sensor number (use 0 for sensor 1) + +@retval nil requested logical switch does not exist + +@retval table logical switch data: + * `func` (number) function index + * `v1` (number) V1 value (index) + * `v2` (number) V2 value (index or value) + * `v3` (number) V3 value (index or value) + * `and` (number) AND switch index + * `delay` (number) delay (time in 1/10 s) + * `duration` (number) duration (time in 1/10 s) + +@status current Introduced in 2.3.0 +*/ +static int luaModelGetSensor(lua_State *L) +{ + unsigned int idx = luaL_checkunsigned(L, 1); + if (idx < MAX_TELEMETRY_SENSORS) { + TelemetrySensor & sensor = g_model.telemetrySensors[idx]; + lua_newtable(L); + lua_pushtableinteger(L, "type", sensor.type); + lua_pushtablezstring(L, "name", sensor.label); + lua_pushtableinteger(L, "unit", sensor.unit); + lua_pushtableinteger(L, "prec", sensor.prec); + if (sensor.type == TELEM_TYPE_CUSTOM) { + lua_pushtableinteger(L, "id", sensor.id); + lua_pushtableinteger(L, "instance", sensor.instance); + } + else { + lua_pushtableinteger(L, "formula", sensor.formula); + } + } + else { + lua_pushnil(L); + } + return 1; +} + const luaL_Reg modelLib[] = { { "getInfo", luaModelGetInfo }, { "setInfo", luaModelSetInfo }, @@ -1343,5 +1387,6 @@ const luaL_Reg modelLib[] = { { "setOutput", luaModelSetOutput }, { "getGlobalVariable", luaModelGetGlobalVariable }, { "setGlobalVariable", luaModelSetGlobalVariable }, + { "getSensor", luaModelGetSensor }, { NULL, NULL } /* sentinel */ };