From 83c150eb5442225a79fd8e9530a73770beeb4119 Mon Sep 17 00:00:00 2001 From: James O'Shannessy <12959316+joshanne@users.noreply.github.com> Date: Thu, 11 Dec 2025 08:52:03 +1100 Subject: [PATCH] driver: Allow mavcan driver to set an AutoPilot Parameter Allows the driver to send a param set request to the autopilot, meaning we can programatically set parameters from dronecan_gui_tool if necessary --- dronecan/driver/common.py | 4 ++++ dronecan/driver/mavcan.py | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/dronecan/driver/common.py b/dronecan/driver/common.py index 171f019..184f6f0 100644 --- a/dronecan/driver/common.py +++ b/dronecan/driver/common.py @@ -158,6 +158,10 @@ def set_signing_passphrase(self, passphrase): '''set MAVLink2 signing passphrase''' pass + def set_parameter(self, name, value): + '''set parameter on the remote device''' + pass + def stream_progress(self): '''stream progress of the current stream''' pass diff --git a/dronecan/driver/mavcan.py b/dronecan/driver/mavcan.py index 4f0b9bf..a52eeec 100644 --- a/dronecan/driver/mavcan.py +++ b/dronecan/driver/mavcan.py @@ -119,6 +119,8 @@ def handle_control_message(m): nonlocal signing_key signing_key = m.data conn.setup_signing(signing_key, sign_outgoing=True) + elif m.command == "SetParam": + conn.param_set_send(m.data[0], m.data[1]) connect() enable_can_forward() @@ -282,6 +284,13 @@ def get_filter_list(self): '''get the current filter list''' return self.filter_list + def set_parameter(self, name, value): + '''set parameter in the remote air vehicle''' + if len(name) > 16: + raise DriverError('Parameter name %s too long' % name) + + self.tx_queue.put_nowait(ControlMessage('SetParam', (name, value))) + def passphrase_to_key(self, passphrase): '''convert a passphrase to a 32 byte key''' import hashlib