diff --git a/libraries/AP_Scripting/lua_bindings.cpp b/libraries/AP_Scripting/lua_bindings.cpp index 8a8f3cab5b..c9129ca5a2 100644 --- a/libraries/AP_Scripting/lua_bindings.cpp +++ b/libraries/AP_Scripting/lua_bindings.cpp @@ -1,5 +1,6 @@ #include #include +#include #include "lua_bindings.h" @@ -15,9 +16,37 @@ static const luaL_Reg gcs_functions[] = {NULL, NULL} }; +int lua_servo_set_output_pwm(lua_State *state) { + int servo_function = luaL_checkinteger(state, 1); + int output_value = luaL_checknumber(state, 2); + + // range check the output function + if ((servo_function < SRV_Channel::Aux_servo_function_t::k_scripting1) || + (servo_function > SRV_Channel::Aux_servo_function_t::k_scripting16)) { + return luaL_error(state, "Servo function (%d) is not a scriptable output", servo_function); + } + + if (output_value > UINT16_MAX) { + return luaL_error(state, "Servo range (%d) is out of range", output_value); + } + + SRV_Channels::set_output_pwm((SRV_Channel::Aux_servo_function_t)servo_function, output_value); + + gcs().send_text(MAV_SEVERITY_INFO, "Set to %d", output_value); + return 0; +} + +static const luaL_Reg servo_functions[] = +{ + {"set_output_pwm", lua_servo_set_output_pwm}, + {NULL, NULL} +}; + void load_lua_bindings(lua_State *state) { luaL_newlib(state, gcs_functions); lua_setglobal(state, "gcs"); + luaL_newlib(state, servo_functions); + lua_setglobal(state, "servo"); } void hook(lua_State *L, lua_Debug *ar) { diff --git a/libraries/AP_Scripting/scripts/sandbox.lua b/libraries/AP_Scripting/scripts/sandbox.lua index 22a777cbb2..4124a124c3 100644 --- a/libraries/AP_Scripting/scripts/sandbox.lua +++ b/libraries/AP_Scripting/scripts/sandbox.lua @@ -27,6 +27,9 @@ function get_sandbox_env () utf8 = { char = utf8.char, charpattern = utf8.charpattern, codes = utf8.codes, codepoint = utf8.codepoint, len = utf8.len, offsets = utf8.offsets}, os = { clock = os.clock, difftime = os.difftime, time = os.time }, + + -- ArduPilot specific gcs = { send_text = gcs.send_text}, + servo = { set_output_pwm = servo.set_output_pwm}, } end