mirror of
https://github.com/opentx/opentx.git
synced 2025-07-16 12:55:12 +03:00
The script for SBEC now searches for a SBEC sensor
This commit is contained in:
parent
3bc75c1d55
commit
d5ce54047c
3 changed files with 67 additions and 14 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 */
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue