mirror of
https://github.com/opentx/opentx.git
synced 2025-07-18 05:45:21 +03:00
Added getValue() support for UNIT_DATETIME and UNIT_CELLS
This commit is contained in:
parent
771206e1b2
commit
8b83911017
1 changed files with 55 additions and 23 deletions
|
@ -116,22 +116,28 @@ static int luaGetTime(lua_State *L)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static void luaPushDateTime(lua_State *L, uint32_t year, uint32_t mon, uint32_t day,
|
||||
uint32_t hour, uint32_t min, uint32_t sec)
|
||||
{
|
||||
lua_newtable(L);
|
||||
lua_pushtableinteger(L, "year", year);
|
||||
lua_pushtableinteger(L, "mon", mon);
|
||||
lua_pushtableinteger(L, "day", day);
|
||||
lua_pushtableinteger(L, "hour", hour);
|
||||
lua_pushtableinteger(L, "min", min);
|
||||
lua_pushtableinteger(L, "sec", sec);
|
||||
}
|
||||
|
||||
static int luaGetDateTime(lua_State *L)
|
||||
{
|
||||
struct gtm utm;
|
||||
gettime(&utm);
|
||||
lua_newtable(L);
|
||||
lua_pushtableinteger(L, "year", utm.tm_year+1900);
|
||||
lua_pushtableinteger(L, "mon", utm.tm_mon+1);
|
||||
lua_pushtableinteger(L, "day", utm.tm_mday);
|
||||
lua_pushtableinteger(L, "hour", utm.tm_hour);
|
||||
lua_pushtableinteger(L, "min", utm.tm_min);
|
||||
lua_pushtableinteger(L, "sec", utm.tm_sec);
|
||||
luaPushDateTime(L, utm.tm_year + 1900, utm.tm_mon + 1, utm.tm_mday, utm.tm_hour, utm.tm_min, utm.tm_sec);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void luaPushLatLon(TelemetrySensor & telemetrySensor, TelemetryItem & telemetryItem)
|
||||
/* result is lua table containing members ["Lat"] and ["Lon"] as lua_Number (doubles) in decimal degrees */
|
||||
/* result is lua table containing members ["lat"] and ["lon"] as lua_Number (doubles) in decimal degrees */
|
||||
{
|
||||
lua_Number lat = 0.0;
|
||||
lua_Number lon = 0.0;
|
||||
|
@ -144,31 +150,57 @@ static void luaPushLatLon(TelemetrySensor & telemetrySensor, TelemetryItem & tel
|
|||
lon = gpsLon / 1000000.0;
|
||||
if (telemetryItem.gps.longitudeEW == 'W') lon = -lon;
|
||||
|
||||
lua_createtable(L, 0, 2); /* push the result table */
|
||||
lua_pushstring(L, "Lat");
|
||||
lua_pushnumber(L, lat);
|
||||
lua_settable(L, -3);
|
||||
lua_pushstring(L, "Lon");
|
||||
lua_pushnumber(L, lon);
|
||||
lua_settable(L, -3);
|
||||
lua_newtable(L);
|
||||
lua_pushtablenumber(L, "lat", lat);
|
||||
lua_pushtablenumber(L, "lon", lon);
|
||||
}
|
||||
|
||||
static void luaPushTelemetryDateTime(TelemetrySensor & telemetrySensor, TelemetryItem & telemetryItem)
|
||||
{
|
||||
luaPushDateTime(L, telemetryItem.datetime.year + 2000, telemetryItem.datetime.month, telemetryItem.datetime.day,
|
||||
telemetryItem.datetime.hour, telemetryItem.datetime.min, telemetryItem.datetime.sec);
|
||||
}
|
||||
|
||||
static void luaPushCells(TelemetrySensor & telemetrySensor, TelemetryItem & telemetryItem)
|
||||
{
|
||||
if (telemetryItem.cells.count == 0)
|
||||
lua_pushinteger(L, (int)0); // returns zero if no cells
|
||||
else {
|
||||
lua_createtable(L, 0 /*telemetryItem.cells.count*/, 0);
|
||||
for (int i = 0; i < telemetryItem.cells.count; i++) {
|
||||
lua_pushnumber(L, i + 1);
|
||||
lua_pushnumber(L, telemetryItem.cells.values[i].value / 100.0);
|
||||
lua_settable(L, -3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void luaGetValueAndPush(int src)
|
||||
{
|
||||
getvalue_t value = getValue(src);
|
||||
getvalue_t value = getValue(src); // ignored for GPS, DATETIME, and CELLS
|
||||
|
||||
if (src >= MIXSRC_FIRST_TELEM && src <= MIXSRC_LAST_TELEM) {
|
||||
src = (src-MIXSRC_FIRST_TELEM) / 3;
|
||||
// telemetry values
|
||||
if (TELEMETRY_STREAMING() && telemetryItems[src].isAvailable()) {
|
||||
if (TELEMETRY_STREAMING() /* && telemetryItems[src].isAvailable() */) {
|
||||
TelemetrySensor & telemetrySensor = g_model.telemetrySensors[src];
|
||||
if (telemetrySensor.unit == UNIT_GPS)
|
||||
luaPushLatLon(telemetrySensor, telemetryItems[src]);
|
||||
else if (telemetrySensor.prec > 0)
|
||||
lua_pushnumber(L, float(value)/(telemetrySensor.prec == 2 ? 100.0 : 10.0));
|
||||
else
|
||||
lua_pushinteger(L, value);
|
||||
switch (telemetrySensor.unit) {
|
||||
case UNIT_GPS:
|
||||
luaPushLatLon(telemetrySensor, telemetryItems[src]);
|
||||
break;
|
||||
case UNIT_DATETIME:
|
||||
luaPushTelemetryDateTime(telemetrySensor, telemetryItems[src]);
|
||||
break;
|
||||
case UNIT_CELLS:
|
||||
luaPushCells(telemetrySensor, telemetryItems[src]);
|
||||
break;
|
||||
default:
|
||||
if (telemetrySensor.prec > 0)
|
||||
lua_pushnumber(L, float(value)/(telemetrySensor.prec == 2 ? 100.0 : 10.0));
|
||||
else
|
||||
lua_pushinteger(L, value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
// telemetry not working, return zero for telemetry sources
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue