From 9285a3a9a19849c9e72c772a62e1f177cbaf6dfb Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Sat, 26 Apr 2014 09:43:45 +0200 Subject: [PATCH 1/9] Lua print() function works by using TRACE macro --- radio/src/lua/src/luaconf.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/radio/src/lua/src/luaconf.h b/radio/src/lua/src/luaconf.h index 2459e6933..89524b1b8 100644 --- a/radio/src/lua/src/luaconf.h +++ b/radio/src/lua/src/luaconf.h @@ -11,6 +11,8 @@ #include #include +#include "debug.h" + #define USE_FATFS /* @@ -223,9 +225,9 @@ #define luai_writestringerror(s,p) \ (fprintf(stderr, (s), (p)), fflush(stderr)) #else -#define luai_writestring(s,l) -#define luai_writeline() -#define luai_writestringerror(s,p) +#define luai_writestring(s,l) TRACE_DEBUG_WP("%s", s); +#define luai_writeline() TRACE_DEBUG_WP("\n"); +#define luai_writestringerror(s,p) TRACE_DEBUG_WP(s, p); #endif From fc4cf73c897fb402147fb8a762aa0890b8ccacbc Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Sat, 26 Apr 2014 09:45:07 +0200 Subject: [PATCH 2/9] Registered OpenTX version as symbol OPENTX_VERSION in Lua Added PlayNumber() --- radio/src/lua.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/radio/src/lua.cpp b/radio/src/lua.cpp index 34b225650..0e36fe8e0 100644 --- a/radio/src/lua.cpp +++ b/radio/src/lua.cpp @@ -47,6 +47,7 @@ extern "C" { } #endif +#define lua_registernumber(L, n, i) (lua_pushnumber(L, (i)), lua_setglobal(L, (n))) #define lua_registerint(L, n, i) (lua_pushinteger(L, (i)), lua_setglobal(L, (n))) #define lua_pushtablenil(L, k) (lua_pushstring(L, (k)), lua_pushnil(L), lua_settable(L, -3)) #define lua_pushtableboolean(L, k, v) (lua_pushstring(L, (k)), lua_pushboolean(L, (v)), lua_settable(L, -3)) @@ -131,6 +132,16 @@ static int luaPlayFile(lua_State *L) return 0; } +static int luaPlayNumber(lua_State *L) +{ + int number = luaL_checkinteger(L, 1); + int unit = luaL_checkinteger(L, 2); + int att = luaL_checkinteger(L, 3); + playNumber(number, unit, att, 0); + return 0; +} + + static int luaLcdLock(lua_State *L) { lcd_locked = true; @@ -822,9 +833,11 @@ void luaInit() lua_register(L, "getVersion", luaGetVersion); lua_register(L, "getValue", luaGetValue); lua_register(L, "playFile", luaPlayFile); + lua_register(L, "playNumber", luaPlayNumber); lua_register(L, "popupInput", luaPopupInput); // Push OpenTX constants + lua_registernumber(L, "OPENTX_VERSION", VERS_NUM); lua_registerint(L, "DBLSIZE", DBLSIZE); lua_registerint(L, "MIDSIZE", MIDSIZE); lua_registerint(L, "SMLSIZE", SMLSIZE); From bd31c541f69f41a3a6e7ce167c954d0d803f65d5 Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Sat, 26 Apr 2014 18:48:30 +0200 Subject: [PATCH 3/9] Order of outputs was wrong --- radio/src/lua.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/lua.cpp b/radio/src/lua.cpp index 0e36fe8e0..e0663cd0e 100644 --- a/radio/src/lua.cpp +++ b/radio/src/lua.cpp @@ -1071,7 +1071,7 @@ void luaTask(uint8_t evt) lua_pushinteger(L, sd.inputs[j]); } if (lua_pcall(L, sid.inputsCount, sid.outputsCount, 0) == 0) { - for (int j=0; j=0; j--) { if (!lua_isnumber(L, -1)) { sid.state = (instructionsPercent > 100 ? SCRIPT_KILLED : SCRIPT_SYNTAX_ERROR); TRACE("Script %10s disabled", sd.file); From 06beced480805d6ac93b57d8eb8d6e1d097c3e29 Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Sat, 26 Apr 2014 18:50:43 +0200 Subject: [PATCH 4/9] Removed symbol OPENTX_VERSION --- radio/src/lua.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/radio/src/lua.cpp b/radio/src/lua.cpp index e0663cd0e..689641be7 100644 --- a/radio/src/lua.cpp +++ b/radio/src/lua.cpp @@ -837,7 +837,6 @@ void luaInit() lua_register(L, "popupInput", luaPopupInput); // Push OpenTX constants - lua_registernumber(L, "OPENTX_VERSION", VERS_NUM); lua_registerint(L, "DBLSIZE", DBLSIZE); lua_registerint(L, "MIDSIZE", MIDSIZE); lua_registerint(L, "SMLSIZE", SMLSIZE); From eac17bda082710fd8e9c9bb04178cedea51ec04c Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Sat, 26 Apr 2014 21:10:54 +0200 Subject: [PATCH 5/9] Telemetry values are now returned as proper values (i.e. A1 voltage 4.5V is returned as 4.5) for model script inputs and getValue() function. --- radio/src/lua.cpp | 62 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 2 deletions(-) diff --git a/radio/src/lua.cpp b/radio/src/lua.cpp index 689641be7..9970298c7 100644 --- a/radio/src/lua.cpp +++ b/radio/src/lua.cpp @@ -90,11 +90,68 @@ static int luaGetTime(lua_State *L) return 1; } +static void __luaGetValue(int src) +{ + /* + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_RPM) return frskyData.hub.rpm; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_FUEL) return frskyData.hub.fuelLevel; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_T1) return frskyData.hub.temperature1; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_T2) return frskyData.hub.temperature2; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_SPEED) return TELEMETRY_GPS_SPEED_BP; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_DIST) return frskyData.hub.gpsDistance; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_GPSALT) return TELEMETRY_RELATIVE_GPS_ALT_BP; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_CELL) return (int16_t)TELEMETRY_MIN_CELL_VOLTAGE; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_CELLS_SUM) return (int16_t)frskyData.hub.cellsSum; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_VFAS) return (int16_t)frskyData.hub.vfas; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_CURRENT) return (int16_t)frskyData.hub.current; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_CONSUMPTION) return frskyData.hub.currentConsumption; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_POWER) return frskyData.hub.power; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_ACCx) return frskyData.hub.accelX; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_ACCy) return frskyData.hub.accelY; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_ACCz) return frskyData.hub.accelZ; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_HDG) return frskyData.hub.gpsCourse_bp; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_VSPEED) return frskyData.hub.varioSpeed; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_ASPEED) return frskyData.hub.airSpeed; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_DTE) return frskyData.hub.dTE; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_MIN_A1) return frskyData.analog[0].min; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_MIN_A2) return frskyData.analog[1].min; + else if (i<=MIXSRC_FIRST_TELEM-1+TELEM_CSW_MAX) return *(((int16_t*)(&frskyData.hub.minAltitude))+i-(MIXSRC_FIRST_TELEM-1+TELEM_MIN_ALT)); + + */ + switch (src) { + case MIXSRC_FIRST_TELEM-1+TELEM_TX_VOLTAGE: + case MIXSRC_FIRST_TELEM-1+TELEM_VFAS: + case MIXSRC_FIRST_TELEM-1+TELEM_CELLS_SUM: + case MIXSRC_FIRST_TELEM-1+TELEM_CURRENT: + case MIXSRC_FIRST_TELEM-1+TELEM_VSPEED: + lua_pushnumber(L, getValue(src)/10.0); + break; + + case MIXSRC_FIRST_TELEM-1+TELEM_A1: + case MIXSRC_FIRST_TELEM-1+TELEM_A2: + lua_pushnumber(L, applyChannelRatio(src-(MIXSRC_FIRST_TELEM-1+TELEM_A1), getValue(src))/100.0); + break; + + case MIXSRC_FIRST_TELEM-1+TELEM_MIN_A1: + case MIXSRC_FIRST_TELEM-1+TELEM_MIN_A2: + lua_pushnumber(L, applyChannelRatio(src-(MIXSRC_FIRST_TELEM-1+TELEM_MIN_A1), getValue(src))/100.0); + break; + + case MIXSRC_FIRST_TELEM-1+TELEM_CELL: + case MIXSRC_FIRST_TELEM-1+TELEM_ALT: + lua_pushnumber(L, getValue(src)/100.0); + break; + + default: + lua_pushinteger(L, getValue(src)); + } +} + static int luaGetValue(lua_State *L) { if (lua_isnumber(L, 1)) { int src = luaL_checkinteger(L, 1); - lua_pushinteger(L, getValue(src)); + __luaGetValue(src); return 1; } else { @@ -1065,7 +1122,8 @@ void luaTask(uint8_t evt) lua_rawgeti(L, LUA_REGISTRYINDEX, sid.run); for (int j=0; j Date: Sun, 27 Apr 2014 11:24:08 +0200 Subject: [PATCH 6/9] bug: Default value was not added for input type VALUE --- radio/src/lua.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/lua.cpp b/radio/src/lua.cpp index 9970298c7..f6863ee6d 100644 --- a/radio/src/lua.cpp +++ b/radio/src/lua.cpp @@ -1125,7 +1125,7 @@ void luaTask(uint8_t evt) __luaGetValue((uint8_t)sd.inputs[j]); //lua_pushinteger(L, (uint8_t)sd.inputs[j]); else - lua_pushinteger(L, sd.inputs[j]); + lua_pushinteger(L, sd.inputs[j] + sid.inputs[j].def); } if (lua_pcall(L, sid.inputsCount, sid.outputsCount, 0) == 0) { for (int j=sid.outputsCount-1; j>=0; j--) { From 01391aa6aacf9e84a8f2f9fd49676e28a0d1bf53 Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Sun, 27 Apr 2014 18:12:06 +0200 Subject: [PATCH 7/9] Return 0 for all temeletry values, when telemetry not available. --- radio/src/lua.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/radio/src/lua.cpp b/radio/src/lua.cpp index f6863ee6d..d68d083c8 100644 --- a/radio/src/lua.cpp +++ b/radio/src/lua.cpp @@ -118,30 +118,41 @@ static void __luaGetValue(int src) else if (i<=MIXSRC_FIRST_TELEM-1+TELEM_CSW_MAX) return *(((int16_t*)(&frskyData.hub.minAltitude))+i-(MIXSRC_FIRST_TELEM-1+TELEM_MIN_ALT)); */ + if (!TELEMETRY_STREAMING() && src>=MIXSRC_FIRST_TELEM && src<=MIXSRC_LAST_TELEM) { + //telemetry not working, return zero + lua_pushinteger(L, (int)0); + return; + } switch (src) { case MIXSRC_FIRST_TELEM-1+TELEM_TX_VOLTAGE: case MIXSRC_FIRST_TELEM-1+TELEM_VFAS: case MIXSRC_FIRST_TELEM-1+TELEM_CELLS_SUM: case MIXSRC_FIRST_TELEM-1+TELEM_CURRENT: case MIXSRC_FIRST_TELEM-1+TELEM_VSPEED: + //theese need to be divided by 10 lua_pushnumber(L, getValue(src)/10.0); break; case MIXSRC_FIRST_TELEM-1+TELEM_A1: case MIXSRC_FIRST_TELEM-1+TELEM_A2: + //convert raw A1/2 values to calibrated values lua_pushnumber(L, applyChannelRatio(src-(MIXSRC_FIRST_TELEM-1+TELEM_A1), getValue(src))/100.0); break; case MIXSRC_FIRST_TELEM-1+TELEM_MIN_A1: case MIXSRC_FIRST_TELEM-1+TELEM_MIN_A2: + //convert raw A1/2 values to calibrated values lua_pushnumber(L, applyChannelRatio(src-(MIXSRC_FIRST_TELEM-1+TELEM_MIN_A1), getValue(src))/100.0); break; case MIXSRC_FIRST_TELEM-1+TELEM_CELL: case MIXSRC_FIRST_TELEM-1+TELEM_ALT: + //theese need to be divided by 100 lua_pushnumber(L, getValue(src)/100.0); break; + //TODO other values that neeed special treatment like maxAlititude,... + default: lua_pushinteger(L, getValue(src)); } From bff912aef60bccb2376446c2cee8f6ea8e45cbc5 Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Mon, 28 Apr 2014 17:23:58 +0200 Subject: [PATCH 8/9] Renamed __luaGetValue() to luaGetValueAndPush() --- radio/src/lua.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/radio/src/lua.cpp b/radio/src/lua.cpp index d68d083c8..f10a60e10 100644 --- a/radio/src/lua.cpp +++ b/radio/src/lua.cpp @@ -90,7 +90,7 @@ static int luaGetTime(lua_State *L) return 1; } -static void __luaGetValue(int src) +static void luaGetValueAndPush(int src) { /* else if (i==MIXSRC_FIRST_TELEM-1+TELEM_RPM) return frskyData.hub.rpm; @@ -162,7 +162,7 @@ static int luaGetValue(lua_State *L) { if (lua_isnumber(L, 1)) { int src = luaL_checkinteger(L, 1); - __luaGetValue(src); + luaGetValueAndPush(src); return 1; } else { @@ -1133,8 +1133,7 @@ void luaTask(uint8_t evt) lua_rawgeti(L, LUA_REGISTRYINDEX, sid.run); for (int j=0; j Date: Mon, 28 Apr 2014 17:39:43 +0200 Subject: [PATCH 9/9] Completed list of conversions in luaGetValueAndPush() --- radio/src/lua.cpp | 36 ++++++++++-------------------------- 1 file changed, 10 insertions(+), 26 deletions(-) diff --git a/radio/src/lua.cpp b/radio/src/lua.cpp index f10a60e10..2aacda979 100644 --- a/radio/src/lua.cpp +++ b/radio/src/lua.cpp @@ -93,41 +93,21 @@ static int luaGetTime(lua_State *L) static void luaGetValueAndPush(int src) { /* - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_RPM) return frskyData.hub.rpm; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_FUEL) return frskyData.hub.fuelLevel; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_T1) return frskyData.hub.temperature1; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_T2) return frskyData.hub.temperature2; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_SPEED) return TELEMETRY_GPS_SPEED_BP; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_DIST) return frskyData.hub.gpsDistance; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_GPSALT) return TELEMETRY_RELATIVE_GPS_ALT_BP; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_CELL) return (int16_t)TELEMETRY_MIN_CELL_VOLTAGE; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_CELLS_SUM) return (int16_t)frskyData.hub.cellsSum; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_VFAS) return (int16_t)frskyData.hub.vfas; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_CURRENT) return (int16_t)frskyData.hub.current; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_CONSUMPTION) return frskyData.hub.currentConsumption; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_POWER) return frskyData.hub.power; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_ACCx) return frskyData.hub.accelX; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_ACCy) return frskyData.hub.accelY; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_ACCz) return frskyData.hub.accelZ; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_HDG) return frskyData.hub.gpsCourse_bp; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_VSPEED) return frskyData.hub.varioSpeed; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_ASPEED) return frskyData.hub.airSpeed; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_DTE) return frskyData.hub.dTE; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_MIN_A1) return frskyData.analog[0].min; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_MIN_A2) return frskyData.analog[1].min; - else if (i<=MIXSRC_FIRST_TELEM-1+TELEM_CSW_MAX) return *(((int16_t*)(&frskyData.hub.minAltitude))+i-(MIXSRC_FIRST_TELEM-1+TELEM_MIN_ALT)); - + Hint about dividers are taken from putsTelemetryChannel() */ if (!TELEMETRY_STREAMING() && src>=MIXSRC_FIRST_TELEM && src<=MIXSRC_LAST_TELEM) { - //telemetry not working, return zero + //telemetry not working, return zero for telemetry sources lua_pushinteger(L, (int)0); return; } switch (src) { case MIXSRC_FIRST_TELEM-1+TELEM_TX_VOLTAGE: case MIXSRC_FIRST_TELEM-1+TELEM_VFAS: + case MIXSRC_FIRST_TELEM-1+TELEM_MIN_VFAS: case MIXSRC_FIRST_TELEM-1+TELEM_CELLS_SUM: + case MIXSRC_FIRST_TELEM-1+TELEM_MIN_CELLS_SUM: case MIXSRC_FIRST_TELEM-1+TELEM_CURRENT: + case MIXSRC_FIRST_TELEM-1+TELEM_MAX_CURRENT: case MIXSRC_FIRST_TELEM-1+TELEM_VSPEED: //theese need to be divided by 10 lua_pushnumber(L, getValue(src)/10.0); @@ -146,12 +126,16 @@ static void luaGetValueAndPush(int src) break; case MIXSRC_FIRST_TELEM-1+TELEM_CELL: + case MIXSRC_FIRST_TELEM-1+TELEM_MIN_CELL: case MIXSRC_FIRST_TELEM-1+TELEM_ALT: + case MIXSRC_FIRST_TELEM-1+TELEM_ACCx: + case MIXSRC_FIRST_TELEM-1+TELEM_ACCy: + case MIXSRC_FIRST_TELEM-1+TELEM_ACCz: //theese need to be divided by 100 lua_pushnumber(L, getValue(src)/100.0); break; - //TODO other values that neeed special treatment like maxAlititude,... + //TODO: add other values that need special treatment default: lua_pushinteger(L, getValue(src));