From 816f9ce8a05dff46bf226f730dc6132bdbce92d2 Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Sun, 29 Jun 2014 13:54:50 +0200 Subject: [PATCH 1/3] Fixes #1388 -New Lua functions: model.getInfo() and model.setInfo() --- radio/src/lua.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/radio/src/lua.cpp b/radio/src/lua.cpp index c2d675030..f578640a8 100644 --- a/radio/src/lua.cpp +++ b/radio/src/lua.cpp @@ -407,6 +407,34 @@ static int luaLcdDrawCombobox(lua_State *L) return 0; } +static int luaModelGetInfo(lua_State *L) +{ + lua_newtable(L); + lua_pushtablezstring(L, "name", g_model.header.name); + lua_pushtablenumber(L, "id", g_model.header.modelId); + return 1; +} + +static int luaModelSetInfo(lua_State *L) +{ + luaL_checktype(L, -1, LUA_TTABLE); + for (lua_pushnil(L); lua_next(L, -2); lua_pop(L, 1)) { + luaL_checktype(L, -2, LUA_TSTRING); // key is string + const char * key = luaL_checkstring(L, -2); + if (!strcmp(key, "name")) { + const char * name = luaL_checkstring(L, -1); + str2zchar(g_model.header.name, name, sizeof(g_model.header.name)); + memcpy(modelHeaders[g_eeGeneral.currModel].name, g_model.header.name, sizeof(g_model.header.name)); + } + else if (!strcmp(key, "id")) { + g_model.header.modelId = luaL_checkinteger(L, -1); + modelHeaders[g_eeGeneral.currModel].modelId = g_model.header.modelId; + } + } + eeDirty(EE_MODEL); + return 0; +} + static int luaModelGetTimer(lua_State *L) { int idx = luaL_checkunsigned(L, 1); @@ -1032,6 +1060,8 @@ int luaGetOutputs(ScriptInputsOutputs & sid) } static const luaL_Reg modelLib[] = { + { "getInfo", luaModelGetInfo }, + { "setInfo", luaModelSetInfo }, { "getTimer", luaModelGetTimer }, { "setTimer", luaModelSetTimer }, { "getInputsCount", luaModelGetInputsCount }, From 17ab12f7bf0f61a79187e5c60cf76dda911a5221 Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Sun, 29 Jun 2014 14:26:39 +0200 Subject: [PATCH 2/3] Added missing eeDirty(EE_MODEL) --- radio/src/eeprom_rlc.cpp | 2 ++ radio/src/lua.cpp | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/radio/src/eeprom_rlc.cpp b/radio/src/eeprom_rlc.cpp index 5b7c09af8..fed16794a 100644 --- a/radio/src/eeprom_rlc.cpp +++ b/radio/src/eeprom_rlc.cpp @@ -1061,12 +1061,14 @@ void eeCheck(bool immediately) } if (s_eeDirtyMsk & EE_GENERAL) { + TRACE("eeprom write general"); s_eeDirtyMsk -= EE_GENERAL; theFile.writeRlc(FILE_GENERAL, FILE_TYP_GENERAL, (uint8_t*)&g_eeGeneral, sizeof(EEGeneral), immediately); if (!immediately) return; } if (s_eeDirtyMsk & EE_MODEL) { + TRACE("eeprom write model"); s_eeDirtyMsk = 0; theFile.writeRlc(FILE_MODEL(g_eeGeneral.currModel), FILE_TYP_MODEL, (uint8_t*)&g_model, sizeof(g_model), immediately); } diff --git a/radio/src/lua.cpp b/radio/src/lua.cpp index f578640a8..c64f292b0 100644 --- a/radio/src/lua.cpp +++ b/radio/src/lua.cpp @@ -788,6 +788,7 @@ static int luaModelSetLogicalSwitch(lua_State *L) sw->duration = luaL_checkinteger(L, -1); } } + eeDirty(EE_MODEL); } return 0; @@ -850,6 +851,7 @@ static int luaModelSetCustomFunction(lua_State *L) CFN_ACTIVE(cfn) = luaL_checkinteger(L, -1); } } + eeDirty(EE_MODEL); } return 0; @@ -917,6 +919,7 @@ static int luaModelSetOutput(lua_State *L) limit->curve = luaL_checkinteger(L, -1) + 1; } } + eeDirty(EE_MODEL); } return 0; @@ -940,6 +943,7 @@ static int luaModelSetGlobalVariable(lua_State *L) int value = luaL_checkinteger(L, 3); if (phase < MAX_FLIGHT_MODES && idx < MAX_GVARS && value >= -GVAR_LIMIT && value <= GVAR_LIMIT) { g_model.flightModeData[phase].gvars[idx] = value; + eeDirty(EE_MODEL); } return 0; } From b0869fccfcc4f4cc268a2f24a553514ac099f3b6 Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Sun, 29 Jun 2014 14:29:22 +0200 Subject: [PATCH 3/3] Re #1358 - defined PREC2 in Lua --- radio/src/lua.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/radio/src/lua.cpp b/radio/src/lua.cpp index c64f292b0..e58ce95c0 100644 --- a/radio/src/lua.cpp +++ b/radio/src/lua.cpp @@ -1142,6 +1142,7 @@ void luaInit() lua_registerint(L, "SMLSIZE", SMLSIZE); lua_registerint(L, "INVERS", INVERS); lua_registerint(L, "PREC1", PREC1); + lua_registerint(L, "PREC2", PREC2); lua_registerint(L, "BLINK", BLINK); lua_registerint(L, "VALUE", 0); lua_registerint(L, "SOURCE", 1);