From 3ebff87e8f5de95c04804eeaa563a632185c5e95 Mon Sep 17 00:00:00 2001 From: Robert <46420768+JimB40@users.noreply.github.com> Date: Thu, 15 Feb 2024 04:04:36 +0100 Subject: [PATCH] feat(lua): add support for CRSF 'direct command' packets (#4630) Co-authored-by: Raphael Coeffic --- radio/src/lua/api_general.cpp | 54 ++++++++++++++++++++++++++--------- 1 file changed, 40 insertions(+), 14 deletions(-) diff --git a/radio/src/lua/api_general.cpp b/radio/src/lua/api_general.cpp index fdb447370..dde247954 100644 --- a/radio/src/lua/api_general.cpp +++ b/radio/src/lua/api_general.cpp @@ -1173,10 +1173,12 @@ When called without parameters, it will only return the status of the output buf @status current Introduced in 2.2.0, retval nil added in 2.3.4 */ -static int luaCrossfireTelemetryPush(lua_State * L) +static int luaCrossfireTelemetryPush(lua_State* L) { - bool external = (moduleState[EXTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_CROSSFIRE); - bool internal = (moduleState[INTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_CROSSFIRE); + bool external = + (moduleState[EXTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_CROSSFIRE); + bool internal = + (moduleState[INTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_CROSSFIRE); if (!internal && !external) { lua_pushnil(L); @@ -1185,27 +1187,51 @@ static int luaCrossfireTelemetryPush(lua_State * L) if (lua_gettop(L) == 0) { lua_pushboolean(L, outputTelemetryBuffer.isAvailable()); - } - else if (lua_gettop(L) > TELEMETRY_OUTPUT_BUFFER_SIZE ) { + } else if (lua_gettop(L) > TELEMETRY_OUTPUT_BUFFER_SIZE) { lua_pushboolean(L, false); return 1; - } - else if (outputTelemetryBuffer.isAvailable()) { + } else if (outputTelemetryBuffer.isAvailable()) { uint8_t command = luaL_checkunsigned(L, 1); luaL_checktype(L, 2, LUA_TTABLE); uint8_t length = luaL_len(L, 2); + outputTelemetryBuffer.pushByte(MODULE_ADDRESS); - outputTelemetryBuffer.pushByte(2 + length); // 1(COMMAND) + data length + 1(CRC) - outputTelemetryBuffer.pushByte(command); // COMMAND - for (int i=0; i