From 0b9f60a0370be53d683352c63fd92db3d6586e18 Mon Sep 17 00:00:00 2001 From: Daniel Agar Date: Wed, 9 Feb 2022 13:39:02 -0500 Subject: [PATCH] drivers/rc_input: always provide RC_PORT_CONFIG parameter - RC_PORT_CONFIG is disabled by default if the board doesn't have CONFIG_BOARD_SERIAL_RC set - allows user facing custom RC configuration that overrides board defaults --- Tools/serial/generate_config.py | 6 ++++- src/drivers/rc_input/RCInput.cpp | 45 ++++++++++++++++++-------------- src/drivers/rc_input/module.yaml | 1 - 3 files changed, 31 insertions(+), 21 deletions(-) diff --git a/Tools/serial/generate_config.py b/Tools/serial/generate_config.py index 1dc70763cd..84a9c342aa 100755 --- a/Tools/serial/generate_config.py +++ b/Tools/serial/generate_config.py @@ -268,10 +268,14 @@ for serial_command in serial_commands: default_port_str = port_config['default'][i] else: default_port_str = port_config['default'] + if default_port_str != "": if default_port_str not in serial_ports: raise Exception("Default Port {:} not found for {:}".format(default_port_str, serial_command['label'])) - default_port = serial_ports[default_port_str]['index'] + + if default_port_str in dict(board_ports).keys(): + default_port = serial_ports[default_port_str]['index'] + commands.append({ 'command': serial_command['command'], diff --git a/src/drivers/rc_input/RCInput.cpp b/src/drivers/rc_input/RCInput.cpp index f31d850002..071a678d0d 100644 --- a/src/drivers/rc_input/RCInput.cpp +++ b/src/drivers/rc_input/RCInput.cpp @@ -123,15 +123,15 @@ RCInput::task_spawn(int argc, char *argv[]) int myoptind = 1; int ch; const char *myoptarg = nullptr; - const char *device = nullptr; + const char *device_name = nullptr; #if defined(RC_SERIAL_PORT) - device = RC_SERIAL_PORT; + device_name = RC_SERIAL_PORT; #endif // RC_SERIAL_PORT while ((ch = px4_getopt(argc, argv, "d:", &myoptind, &myoptarg)) != EOF) { switch (ch) { case 'd': - device = myoptarg; + device_name = myoptarg; break; case '?': @@ -149,24 +149,31 @@ RCInput::task_spawn(int argc, char *argv[]) return -1; } - if (device == nullptr) { - PX4_ERR("valid device required"); - return PX4_ERROR; + if (device_name && (access(device_name, R_OK | W_OK) == 0)) { + RCInput *instance = new RCInput(device_name); + + if (instance == nullptr) { + PX4_ERR("alloc failed"); + return PX4_ERROR; + } + + _object.store(instance); + _task_id = task_id_is_work_queue; + + instance->ScheduleOnInterval(_current_update_interval); + + return PX4_OK; + + } else { + if (device_name) { + PX4_ERR("invalid device (-d) %s", device_name); + + } else { + PX4_INFO("valid device required"); + } } - RCInput *instance = new RCInput(device); - - if (instance == nullptr) { - PX4_ERR("alloc failed"); - return PX4_ERROR; - } - - _object.store(instance); - _task_id = task_id_is_work_queue; - - instance->ScheduleOnInterval(_current_update_interval); - - return PX4_OK; + return PX4_ERROR; } void diff --git a/src/drivers/rc_input/module.yaml b/src/drivers/rc_input/module.yaml index ae3c04ad42..a8492ef8ce 100644 --- a/src/drivers/rc_input/module.yaml +++ b/src/drivers/rc_input/module.yaml @@ -5,7 +5,6 @@ serial_config: name: RC_PORT_CONFIG group: Serial default: RC - depends_on_port: RC description_extended: | Setting this to 'Disabled' will use a board-specific default port for RC input.