static int luaModelGetModule(lua_State *L) { unsigned int idx = luaL_checkunsigned(L, 1); if (idx < NUM_MODULES) { ModuleData & module = g_model.moduleData[idx]; lua_newtable(L); lua_pushtableinteger(L, "rfProtocol", module.rfProtocol); lua_pushtableinteger(L, "modelId", g_model.header.modelId[idx]); lua_pushtableinteger(L, "firstChannel", module.channelsStart); lua_pushtableinteger(L, "channelsCount", module.channelsCount + 8); } else { lua_pushnil(L); } return 1; }
/*luadoc @function getGeneralSettings() Returns (some of) the general radio settings @retval table with elements: * `battMin` (number) radio battery range - minimum value * `battMax` (number) radio battery range - maximum value * `imperial` (number) set to a value different from 0 if the radio is set to the IMPERIAL units @status current Introduced in 2.0.6, `imperial` added in TODO */ static int luaGetGeneralSettings(lua_State *L) { lua_newtable(L); lua_pushtablenumber(L, "battMin", double(90+g_eeGeneral.vBatMin)/10); lua_pushtablenumber(L, "battMax", double(120+g_eeGeneral.vBatMax)/10); lua_pushtableinteger(L, "imperial", g_eeGeneral.imperial); return 1; }
static int luaModelGetTimer(lua_State *L) { unsigned int idx = luaL_checkunsigned(L, 1); if (idx < MAX_TIMERS) { TimerData & timer = g_model.timers[idx]; lua_newtable(L); lua_pushtableinteger(L, "mode", timer.mode); lua_pushtableinteger(L, "start", timer.start); lua_pushtableinteger(L, "value", timersStates[idx].val); lua_pushtableinteger(L, "countdownBeep", timer.countdownBeep); lua_pushtableboolean(L, "minuteBeep", timer.minuteBeep); lua_pushtableinteger(L, "persistent", timer.persistent); } else { lua_pushnil(L); } return 1; }
/*luadoc @function model.getInput(input, line) Returns input data for given input and line number @param input (unsigned number) input number (use 0 for Input1) @param line (unsigned number) input line (use 0 for first line) @retval nil requested input or line does not exist @retval table input data: * `name` (string) input line name * `source` (number) input source index * `weight` (number) input weight * `offset` (number) input offset * `switch` (number) input switch index @status current Introduced in 2.0.0, `switch` added in TODO */ static int luaModelGetInput(lua_State *L) { unsigned int chn = luaL_checkunsigned(L, 1); unsigned int idx = luaL_checkunsigned(L, 2); unsigned int first = getFirstInput(chn); unsigned int count = getInputsCountFromFirst(chn, first); if (idx < count) { ExpoData * expo = expoAddress(first+idx); lua_newtable(L); lua_pushtablezstring(L, "name", expo->name); lua_pushtableinteger(L, "source", expo->srcRaw); lua_pushtableinteger(L, "weight", expo->weight); lua_pushtableinteger(L, "offset", expo->offset); lua_pushtableinteger(L, "switch", expo->swtch); } else { lua_pushnil(L); } return 1; }
static int luaModelGetCurve(lua_State *L) { unsigned int idx = luaL_checkunsigned(L, 1); if (idx < MAX_CURVES) { CurveInfo & curveInfo = g_model.curves[idx]; lua_newtable(L); lua_pushtablezstring(L, "name", g_model.curveNames[idx]); lua_pushtableinteger(L, "type", curveInfo.type); lua_pushtableboolean(L, "smooth", curveInfo.smooth); lua_pushtableinteger(L, "points", curveInfo.points+5); lua_pushstring(L, "y"); lua_newtable(L); int8_t * point = curveAddress(idx); for (int i=0; i<curveInfo.points+5; i++) { lua_pushinteger(L, i); lua_pushinteger(L, *point++); lua_settable(L, -3); } lua_settable(L, -3); if (curveInfo.type == CURVE_TYPE_CUSTOM) { lua_pushstring(L, "x"); lua_newtable(L); lua_pushinteger(L, 0); lua_pushinteger(L, 0); lua_settable(L, -3); for (int i=0; i<curveInfo.points+3; i++) { lua_pushinteger(L, i+1); lua_pushinteger(L, *point++); lua_settable(L, -3); } lua_pushinteger(L, curveInfo.points+4); lua_pushinteger(L, 100); lua_settable(L, -3); lua_settable(L, -3); } } else { lua_pushnil(L); } return 1; }
/*luadoc @function getFieldInfo(name) Return detailed information about field (source) The list of valid sources is available: * for OpenTX 2.0.x at http://downloads-20.open-tx.org/firmware/lua_fields.txt * for OpenTX 2.1.x at http://downloads-21.open-tx.org/firmware/lua_fields.txt (depreciated) * for OpenTX 2.1.x Taranis and Taranis Plus at http://downloads-21.open-tx.org/firmware/lua_fields_taranis.txt * for OpenTX 2.1.x Taranis X9E at http://downloads-21.open-tx.org/firmware/lua_fields_taranis_x9e.txt In OpenTX 2.1.x the telemetry sources no longer have a predefined name. To get a telemetry value simply use it's sensor name. For example: * Altitude sensor has a name "Alt" * to get the current altitude use the source "Alt" * to get the minimum altitude use the source "Alt-", to get the maximum use "Alt+" @param name (string) name of the field @retval table information about requested field, table elements: * `id` (number) field identifier * `name` (string) field name * `desc` (string) field description @retval nil the requested field was not found @status current Introduced in 2.0.8 */ static int luaGetFieldInfo(lua_State *L) { const char * what = luaL_checkstring(L, 1); LuaField field; bool found = luaFindFieldByName(what, field, FIND_FIELD_DESC); if (found) { lua_newtable(L); lua_pushtableinteger(L, "id", field.id); lua_pushtablestring(L, "name", what); lua_pushtablestring(L, "desc", field.desc); return 1; } return 0; }
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_createtable(L, 0, 6); 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 luaModelGetLogicalSwitch(lua_State *L) { unsigned int idx = luaL_checkunsigned(L, 1); if (idx < NUM_LOGICAL_SWITCH) { LogicalSwitchData * sw = lswAddress(idx); lua_newtable(L); lua_pushtableinteger(L, "func", sw->func); lua_pushtableinteger(L, "v1", sw->v1); lua_pushtableinteger(L, "v2", sw->v2); lua_pushtableinteger(L, "v3", sw->v3); lua_pushtableinteger(L, "and", sw->andsw); lua_pushtableinteger(L, "delay", sw->delay); lua_pushtableinteger(L, "duration", sw->duration); } else { lua_pushnil(L); } return 1; }
static int luaModelGetOutput(lua_State *L) { unsigned int idx = luaL_checkunsigned(L, 1); if (idx < NUM_CHNOUT) { LimitData * limit = limitAddress(idx); lua_newtable(L); lua_pushtablezstring(L, "name", limit->name); lua_pushtableinteger(L, "min", limit->min-1000); lua_pushtableinteger(L, "max", limit->max+1000); lua_pushtableinteger(L, "offset", limit->offset); lua_pushtableinteger(L, "ppmCenter", limit->ppmCenter); lua_pushtableinteger(L, "symetrical", limit->symetrical); lua_pushtableinteger(L, "revert", limit->revert); if (limit->curve) lua_pushtableinteger(L, "curve", limit->curve-1); else lua_pushtablenil(L, "curve"); } else { lua_pushnil(L); } return 1; }
static int luaModelGetCustomFunction(lua_State *L) { unsigned int idx = luaL_checkunsigned(L, 1); if (idx < NUM_CFN) { CustomFunctionData * cfn = &g_model.customFn[idx]; lua_newtable(L); lua_pushtableinteger(L, "switch", CFN_SWITCH(cfn)); lua_pushtableinteger(L, "func", CFN_FUNC(cfn)); if (CFN_FUNC(cfn) == FUNC_PLAY_TRACK || CFN_FUNC(cfn) == FUNC_BACKGND_MUSIC || CFN_FUNC(cfn) == FUNC_PLAY_SCRIPT) { lua_pushtablenzstring(L, "name", cfn->play.name); } else { lua_pushtableinteger(L, "value", cfn->all.val); lua_pushtableinteger(L, "mode", cfn->all.mode); lua_pushtableinteger(L, "param", cfn->all.param); } lua_pushtableinteger(L, "active", CFN_ACTIVE(cfn)); } else { lua_pushnil(L); } return 1; }
static int luaModelGetMix(lua_State *L) { unsigned int chn = luaL_checkunsigned(L, 1); unsigned int idx = luaL_checkunsigned(L, 2); unsigned int first = getFirstMix(chn); unsigned int count = getMixesCountFromFirst(chn, first); if (idx < count) { MixData * mix = mixAddress(first+idx); lua_newtable(L); lua_pushtablezstring(L, "name", mix->name); lua_pushtableinteger(L, "source", mix->srcRaw); lua_pushtableinteger(L, "weight", mix->weight); lua_pushtableinteger(L, "offset", mix->offset); lua_pushtableinteger(L, "switch", mix->swtch); lua_pushtableinteger(L, "curveType", mix->curve.type); lua_pushtableinteger(L, "curveValue", mix->curve.value); lua_pushtableinteger(L, "multiplex", mix->mltpx); lua_pushtableinteger(L, "flightModes", mix->flightModes); lua_pushtableboolean(L, "carryTrim", mix->carryTrim); lua_pushtableinteger(L, "mixWarn", mix->mixWarn); lua_pushtableinteger(L, "delayUp", mix->delayUp); lua_pushtableinteger(L, "delayDown", mix->delayDown); lua_pushtableinteger(L, "speedUp", mix->speedUp); lua_pushtableinteger(L, "speedDown", mix->speedDown); } else { lua_pushnil(L); } return 1; }