diff --git a/libraries/AP_Scripting/AP_Scripting_CRSFMenu.cpp b/libraries/AP_Scripting/AP_Scripting_CRSFMenu.cpp index c4f861bf5f..afac86e429 100644 --- a/libraries/AP_Scripting/AP_Scripting_CRSFMenu.cpp +++ b/libraries/AP_Scripting/AP_Scripting_CRSFMenu.cpp @@ -66,6 +66,26 @@ int lua_CRSF_get_menu_event(lua_State *L) return 3; } +int lua_CRSF_peek_menu_event(lua_State *L) +{ + binding_argcheck(L, 1); + + uint8_t param = 0; + uint8_t events = 0; + AP_CRSF_Telem::ScriptedPayload payload {}; + const uint8_t count = AP::crsf_telem()->peek_menu_event(param, payload, events); + +#if 4 > LUA_MINSTACK + luaL_checkstack(L, 4, nullptr); +#endif + + lua_pushinteger(L, count); + lua_pushinteger(L, param); + lua_pushlstring(L, (const char*)payload.payload, payload.payload_length); + lua_pushinteger(L, events); + return 4; +} + int lua_CRSF_send_response(lua_State *L) { binding_argcheck(L, 2); diff --git a/libraries/AP_Scripting/AP_Scripting_CRSFMenu.h b/libraries/AP_Scripting/AP_Scripting_CRSFMenu.h index d313915148..ad9cfbcf35 100644 --- a/libraries/AP_Scripting/AP_Scripting_CRSFMenu.h +++ b/libraries/AP_Scripting/AP_Scripting_CRSFMenu.h @@ -7,6 +7,7 @@ int lua_CRSF_new_menu(lua_State *L); int lua_CRSF_get_menu_event(lua_State *L); +int lua_CRSF_peek_menu_event(lua_State *L); int lua_CRSF_send_response(lua_State *L); int lua_CRSF_add_parameter(lua_State *L); int lua_CRSF_add_menu(lua_State *L); diff --git a/libraries/AP_Scripting/docs/docs.lua b/libraries/AP_Scripting/docs/docs.lua index 7dae085e96..a190f92548 100644 --- a/libraries/AP_Scripting/docs/docs.lua +++ b/libraries/AP_Scripting/docs/docs.lua @@ -4311,11 +4311,27 @@ function crsf:add_menu(name) end ---| '2' # PARAMETER WRITE function crsf:get_menu_event(events) end +-- peek pending CRSF menu event and associated data +---@return integer -- number of pending events in the queue +---@return integer -- parameter id of the event +---@return string -- binary encoded response payload +---@return integer -- bitmask of triggered events +---| '1' # PARAMETER READ +---| '2' # PARAMETER WRITE +function crsf:peek_menu_event() end + +-- pop a pending event from the queue and add it to the queue of responses that need sending +function crsf:pop_menu_event() end + -- send a CRSF parameter request response ---@param data string -- binary encoded response payload ---@return boolean -- true if the repsonse was successfully sent, false otherwise function crsf:send_write_response(data) end +-- send a generic CRSF parameter request response +---@return boolean -- true if the repsonse was successfully sent, false otherwise +function crsf:send_response() end + -- handle for DroneCAN message operations ---@class DroneCAN_Handle_ud local DroneCAN_Handle_ud = {} diff --git a/libraries/AP_Scripting/generator/description/bindings.desc b/libraries/AP_Scripting/generator/description/bindings.desc index edd066291d..de88e0d523 100644 --- a/libraries/AP_Scripting/generator/description/bindings.desc +++ b/libraries/AP_Scripting/generator/description/bindings.desc @@ -759,6 +759,9 @@ singleton AP::crsf_telem() literal singleton AP::crsf_telem() rename crsf singleton AP::crsf_telem() manual add_menu lua_CRSF_add_root_menu 1 1 singleton AP::crsf_telem() manual get_menu_event lua_CRSF_get_menu_event 1 3 +singleton AP::crsf_telem() manual peek_menu_event lua_CRSF_peek_menu_event 0 4 +singleton AP::crsf_telem() method pop_menu_event void +singleton AP::crsf_telem() method send_response boolean singleton AP::crsf_telem() manual send_write_response lua_CRSF_send_response 1 1 include AP_DroneCAN/AP_DroneCAN.h