Skip to content

Commit

Permalink
AP_Scripting: update CRSF lua APIs
Browse files Browse the repository at this point in the history
  • Loading branch information
andyp1per committed Feb 20, 2025
1 parent 76f641a commit f352fe4
Show file tree
Hide file tree
Showing 5 changed files with 93 additions and 61 deletions.
16 changes: 7 additions & 9 deletions libraries/AP_Scripting/AP_Scripting_helpers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -195,19 +195,17 @@ bool Parameter::set_default(float value)
return false;
}

int lua_new_ScriptedMenu(lua_State *L)
int lua_new_Menu(lua_State *L)
{
const int args = lua_gettop(L);
if (args > 1) {
return luaL_argerror(L, args, "too many arguments");
}
uint8_t menu_size = 0;
if (args == 1) {
menu_size = get_uint8_t(L, 1);
if (args != 2) {
return luaL_argerror(L, args, "wrong number of arguments");
}
uint8_t menu_size = get_uint8_t(L, 1);
const char * name = luaL_checkstring(L, 2);

void *ud = lua_newuserdata(L, sizeof(AP_CRSF_Telem::ScriptedMenu));
new (ud) AP_CRSF_Telem::ScriptedMenu(menu_size);
void *ud = lua_newuserdata(L, sizeof(AP_CRSF_Telem::ScriptedMenuEntry));
new (ud) AP_CRSF_Telem::ScriptedMenuEntry(name, menu_size);
luaL_getmetatable(L, "CRSFMenu");
lua_setmetatable(L, -2);

Expand Down
3 changes: 1 addition & 2 deletions libraries/AP_Scripting/AP_Scripting_helpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
#include "lua/src/lua.hpp"

int lua_new_Parameter(lua_State *L);
int lua_new_ScriptedMenu(lua_State *L);
int lua_new_Menu(lua_State *L);

/// Fast param access via pointer helper
class Parameter
Expand All @@ -29,4 +29,3 @@ class Parameter
enum ap_var_type vtype;
AP_Param *vp;
};

28 changes: 7 additions & 21 deletions libraries/AP_Scripting/docs/docs.lua
Original file line number Diff line number Diff line change
Expand Up @@ -4112,26 +4112,14 @@ function CRSFParameter() end
---@return integer
function CRSFParameter_ud:id() end

-- set field
---@param value integer
function CRSFParameter_ud:id(value) end

-- get field
---@return integer
function CRSFParameter_ud:length() end

-- set field
---@param value integer
function CRSFParameter_ud:length(value) end

-- get field
---@return string
function CRSFParameter_ud:data(index) end

-- set field
---@param value string
function CRSFParameter_ud:data(value) end

-- desc
---@class (exact) CRSFMenu_ud
local CRSFMenu_ud = {}
Expand All @@ -4156,19 +4144,16 @@ function CRSFMenu_ud:name(value) end
---@return integer
function CRSFMenu_ud:num_params() end

-- set field
---@param value integer
function CRSFMenu_ud:num_params(value) end

-- get array field
---@param index integer
---@return CRSFParameter_ud
function CRSFMenu_ud:params(index) end

-- set array field
---@param index integer
---@param value CRSFParameter_ud
function CRSFMenu_ud:params(index, value) end
---@param length integer
---@param data string
---@return CRSFParameter_ud|nil
function CRSFMenu_ud:add_parameter(length, data) end

-- desc
---@class (exact) CRSFPayload_ud
Expand All @@ -4189,8 +4174,9 @@ function CRSFPayload_ud:data(value) end
crsf = {}

-- add CRSF menu
---@param menu CRSFMenu_ud -- menu
function crsf:add_menu(menu) end
---@param name string
---@return CRSFMenu_ud|nil
function crsf:add_menu(name) end

-- get pending CRSF menu event and associated data
---@param events integer -- events
Expand Down
92 changes: 70 additions & 22 deletions libraries/AP_Scripting/examples/crsf-menu.lua
Original file line number Diff line number Diff line change
Expand Up @@ -5,32 +5,80 @@ SCRIPT_NAME = "CRSF Menu"
SCRIPT_NAME_SHORT = "CRSFMenu"
SCRIPT_VERSION = "0.1"


MAV_SEVERITY = {EMERGENCY=0, ALERT=1, CRITICAL=2, ERROR=3, WARNING=4, NOTICE=5, INFO=6, DEBUG=7}
CRSF_EVENT = {PARAMETER_READ=1, PARAMETER_WRITE=2}
CRSF_PARAM_TYPE = {
UINT8 = 0, INT8 = 1,
UINT16 = 2,
INT16 = 3,
FLOAT = 8,
TEXT_SELECTION = 9,
STRING = 10,
FOLDER = 11,
INFO = 12,
COMMAND = 13,
}

CRSF_COMMAND_STATUS = {
READY = 0, -- --> feedback
START = 1, -- <-- input
PROGRESS = 2, -- --> feedback
CONFIRMATION_NEEDED = 3, -- --> feedback
CONFIRM = 4, -- <-- input
CANCEL = 5, -- <-- input
POLL = 6 -- <-- input
}

-- create a CRSF menu float item
function create_float_entry(name, value, min, max, default, dpoint, step, unit)
local param CRSFParameter()

Check failure on line 34 in libraries/AP_Scripting/examples/crsf-menu.lua

View workflow job for this annotation

GitHub Actions / test-scripting

variable param is never set
param:data(string.pack(">BzllllBlz", CRSF_PARAM_TYPE.FLOAT, name, value, min, max, default, dpoint, step, unit))
param:length(#name + #unit + 24)
return param
end

-- create a CRSF menu text selection item
function create_text_entry(name, options, value, min, max, default, unit)
local param CRSFParameter()

Check failure on line 42 in libraries/AP_Scripting/examples/crsf-menu.lua

View workflow job for this annotation

GitHub Actions / test-scripting

variable param is never set
param:data(string.pack(">BzzBBBBz", CRSF_PARAM_TYPE.TEXT_SELECTION, name, options, value, min, max, default, unit))
param:length(#name + #options + #unit + 8)
return param
end

-- create a CRSF menu string item
function create_string_entry(name, value, max)
local param CRSFParameter()

Check failure on line 50 in libraries/AP_Scripting/examples/crsf-menu.lua

View workflow job for this annotation

GitHub Actions / test-scripting

variable param is never set
param:data(string.pack(">BzzB", CRSF_PARAM_TYPE.STRING, name, value, max))
param:length(#name + #value + 4)
return param
end

-- create a CRSF menu info item
function create_info_entry(name, info)
return string.pack(">Bzz", CRSF_PARAM_TYPE.INFO, name, info)
end

-- create a CRSF command entry
function create_command_entry(name, status, timeout, info)
timeout = timeout or 5000
local param CRSFParameter()

Check failure on line 64 in libraries/AP_Scripting/examples/crsf-menu.lua

View workflow job for this annotation

GitHub Actions / test-scripting

variable param is never set
param:data(string.pack(">BzBBz", CRSF_PARAM_TYPE.COMMAND, name, status, timeout, info))
param:length(#name + #info + 5)
return param
end

local params = {}

Check failure on line 70 in libraries/AP_Scripting/examples/crsf-menu.lua

View workflow job for this annotation

GitHub Actions / test-scripting

unused variable params
local param = CRSFParameter()
param:id(3)
-- pack a string big endian followed by 12 (info type), a name and a value
param:data(string.pack(">Bzz", 12, "Menu Item 1", "It goes here"))
gcs:send_text(MAV_SEVERITY.INFO, "wrote string of length " .. string.len(param:data()))
param:length(26)
params[0] = param

params[1] = CRSFParameter()
params[1]:id(4)
params[1]:data(string.pack(">Bzz", 12, "Menu Item 2", "Another one"))
params[1]:length(25)

local menu = CRSFMenu(2)
menu:name('Example Menu')
menu:params(0, params[0])
menu:params(1, params[1])

crsf:add_menu(menu)

gcs:send_text(MAV_SEVERITY.INFO, string.format("Loaded CRSF menu"))
local param1 = create_info_entry("Menu Item 1", "It goes here")
local param2 = create_info_entry("Menu Item 2", "Another one")
-- local param3 = create_command_entry("Menu Item 3", CRSF_COMMAND_STATUS.START, 5000, "Command")

local menu = crsf:add_menu('Example Menu')

if menu ~= nil then
menu:add_parameter(#param1, param1)
menu:add_parameter(#param2, param2)
gcs:send_text(MAV_SEVERITY.INFO, string.format("Loaded CRSF menu"))
end

function update()
local param, payload, events = crsf:get_menu_event(CRSF_EVENT.PARAMETER_WRITE)

Check failure on line 84 in libraries/AP_Scripting/examples/crsf-menu.lua

View workflow job for this annotation

GitHub Actions / test-scripting

unused variable payload
Expand Down
15 changes: 8 additions & 7 deletions libraries/AP_Scripting/generator/description/bindings.desc
Original file line number Diff line number Diff line change
Expand Up @@ -714,17 +714,18 @@ ap_object ScriptingCANBuffer method add_filter boolean uint32_t'skip_check uint3
include AP_RCTelemetry/AP_CRSF_Telem.h
userdata AP_CRSF_Telem::ScriptedParameter depends OSD_PARAM_ENABLED
userdata AP_CRSF_Telem::ScriptedParameter rename CRSFParameter
userdata AP_CRSF_Telem::ScriptedParameter field id uint8_t'skip_check read write
userdata AP_CRSF_Telem::ScriptedParameter field length uint16_t'skip_check read write
userdata AP_CRSF_Telem::ScriptedParameter field data string read write
userdata AP_CRSF_Telem::ScriptedParameter field id uint8_t'skip_check read
userdata AP_CRSF_Telem::ScriptedParameter field length uint16_t'skip_check read
userdata AP_CRSF_Telem::ScriptedParameter field data string read

userdata AP_CRSF_Telem::ScriptedMenu depends OSD_PARAM_ENABLED
userdata AP_CRSF_Telem::ScriptedMenu rename CRSFMenu
userdata AP_CRSF_Telem::ScriptedMenu creation lua_new_ScriptedMenu 1
userdata AP_CRSF_Telem::ScriptedMenu creation lua_new_Menu 2
userdata AP_CRSF_Telem::ScriptedMenu field id uint8_t'skip_check read
userdata AP_CRSF_Telem::ScriptedMenu field name string read write
userdata AP_CRSF_Telem::ScriptedMenu field name string read
userdata AP_CRSF_Telem::ScriptedMenu field num_params uint8_t'skip_check read
userdata AP_CRSF_Telem::ScriptedMenu field params'array AP_CRSF_Telem::MAX_SCRIPTED_PARAMETERS AP_CRSF_Telem::ScriptedParameter read write
userdata AP_CRSF_Telem::ScriptedMenu field params'array AP_CRSF_Telem::MAX_SCRIPTED_PARAMETERS AP_CRSF_Telem::ScriptedParameter read
userdata AP_CRSF_Telem::ScriptedMenu method add_parameter boolean uint8_t'skip_check string AP_CRSF_Telem::ScriptedParameter'Null

userdata AP_CRSF_Telem::ScriptedPayload depends OSD_PARAM_ENABLED
userdata AP_CRSF_Telem::ScriptedPayload rename CRSFPayload
Expand All @@ -733,7 +734,7 @@ userdata AP_CRSF_Telem::ScriptedPayload field data'array int(ARRAY_SIZE(ud->data
singleton AP::crsf_telem() depends HAL_CRSF_TELEM_ENABLED
singleton AP::crsf_telem() literal
singleton AP::crsf_telem() rename crsf
singleton AP::crsf_telem() method add_menu void AP_CRSF_Telem::ScriptedMenu
singleton AP::crsf_telem() method add_menu boolean string AP_CRSF_Telem::ScriptedMenu'Null
singleton AP::crsf_telem() method get_menu_event uint8_t uint8_t'skip_check AP_CRSF_Telem::ScriptedParameter'Ref AP_CRSF_Telem::ScriptedPayload'Ref

include AP_DroneCAN/AP_DroneCAN.h
Expand Down

0 comments on commit f352fe4

Please sign in to comment.