diff --git a/radio/src/lua/api_general.cpp b/radio/src/lua/api_general.cpp index 8b30412b4..2c51d928e 100644 --- a/radio/src/lua/api_general.cpp +++ b/radio/src/lua/api_general.cpp @@ -328,15 +328,15 @@ bool luaFindFieldByName(const char * name, LuaField & field, unsigned int flags) static int luaTelemetryPop(lua_State *L) { - if (!luaTelemetryFifo) { - luaTelemetryFifo = new Fifo(); - if (!luaTelemetryFifo) { + if (!luaInputTelemetryFifo) { + luaInputTelemetryFifo = new Fifo(); + if (!luaInputTelemetryFifo) { return 0; } } LuaTelemetryValue value; - if (luaTelemetryFifo->pop(value)) { + if (luaInputTelemetryFifo->pop(value)) { lua_pushnumber(L, value.id); lua_pushunsigned(L, value.value); return 2; @@ -345,6 +345,22 @@ static int luaTelemetryPop(lua_State *L) return 0; } +static int luaTelemetryPush(lua_State *L) +{ + if (!luaOutputTelemetryFifo) { + luaOutputTelemetryFifo = new Fifo(); + if (!luaOutputTelemetryFifo) { + return 0; + } + } + + unsigned int id = luaL_checkunsigned(L, 1); + unsigned int value = luaL_checkunsigned(L, 2); + + luaOutputTelemetryFifo->push((LuaTelemetryValue){ id, value }); + return 0; +} + /*luadoc @function getFieldInfo(name) @@ -814,6 +830,7 @@ const luaL_Reg opentxLib[] = { { "GREY", luaGrey }, #endif { "telemetryPop", luaTelemetryPop }, + { "telemetryPush", luaTelemetryPush }, { NULL, NULL } /* sentinel */ }; diff --git a/radio/src/telemetry/frsky.cpp b/radio/src/telemetry/frsky.cpp index f6cbfcf40..96c9b5593 100644 --- a/radio/src/telemetry/frsky.cpp +++ b/radio/src/telemetry/frsky.cpp @@ -667,5 +667,6 @@ NOINLINE uint8_t getRssiAlarmValue(uint8_t alarm) } #if defined(LUA) -Fifo * luaTelemetryFifo = NULL; +Fifo * luaInputTelemetryFifo = NULL; +Fifo * luaOutputTelemetryFifo = NULL; #endif diff --git a/radio/src/telemetry/frsky.h b/radio/src/telemetry/frsky.h index 972729267..6b941e532 100644 --- a/radio/src/telemetry/frsky.h +++ b/radio/src/telemetry/frsky.h @@ -561,7 +561,8 @@ struct LuaTelemetryValue uint32_t value; }; -extern Fifo * luaTelemetryFifo; +extern Fifo * luaInputTelemetryFifo; +extern Fifo * luaOutputTelemetryFifo; #endif #endif // _FRSKY_H_ diff --git a/radio/src/telemetry/frsky_sport.cpp b/radio/src/telemetry/frsky_sport.cpp index e367b9307..dfe6440f2 100644 --- a/radio/src/telemetry/frsky_sport.cpp +++ b/radio/src/telemetry/frsky_sport.cpp @@ -271,8 +271,8 @@ void processSportPacket(uint8_t * packet) } else if (id >= DIY_FIRST_ID && id <= DIY_LAST_ID) { #if defined(LUA) - if (luaTelemetryFifo) { - luaTelemetryFifo->push((LuaTelemetryValue){(uint8_t)id, data}); + if (luaInputTelemetryFifo) { + luaInputTelemetryFifo->push((LuaTelemetryValue){(uint8_t)id, data}); } #endif }