From b7ed4fd3e05b94275c9b541179587b390fbbb3c9 Mon Sep 17 00:00:00 2001 From: Daniel Agar Date: Mon, 3 Jan 2022 17:40:33 -0500 Subject: [PATCH] delete PWM_SERVO_SET_DISARMED_PWM --- src/drivers/drv_pwm_output.h | 3 - src/drivers/pwm_out/PWMOut.cpp | 44 ----- src/drivers/px4io/px4io.cpp | 20 --- src/systemcmds/pwm/pwm.cpp | 58 +------ src/systemcmds/tests/CMakeLists.txt | 1 - src/systemcmds/tests/test_ppm_loopback.cpp | 183 --------------------- src/systemcmds/tests/tests_main.c | 1 - src/systemcmds/tests/tests_main.h | 1 - 8 files changed, 2 insertions(+), 309 deletions(-) delete mode 100644 src/systemcmds/tests/test_ppm_loopback.cpp diff --git a/src/drivers/drv_pwm_output.h b/src/drivers/drv_pwm_output.h index 8b46e9ccc8..e6b255ad1e 100644 --- a/src/drivers/drv_pwm_output.h +++ b/src/drivers/drv_pwm_output.h @@ -173,9 +173,6 @@ typedef uint16_t servo_position_t; /** get the PWM value for failsafe */ #define PWM_SERVO_GET_FAILSAFE_PWM _PX4_IOC(_PWM_SERVO_BASE, 13) -/** set the PWM value when disarmed - should be no PWM (zero) by default */ -#define PWM_SERVO_SET_DISARMED_PWM _PX4_IOC(_PWM_SERVO_BASE, 14) - /** get the PWM value when disarmed */ #define PWM_SERVO_GET_DISARMED_PWM _PX4_IOC(_PWM_SERVO_BASE, 15) diff --git a/src/drivers/pwm_out/PWMOut.cpp b/src/drivers/pwm_out/PWMOut.cpp index dde11c17f0..c73c62fa94 100644 --- a/src/drivers/pwm_out/PWMOut.cpp +++ b/src/drivers/pwm_out/PWMOut.cpp @@ -761,50 +761,6 @@ int PWMOut::pwm_ioctl(device::file_t *filp, int cmd, unsigned long arg) break; } - case PWM_SERVO_SET_DISARMED_PWM: { - struct pwm_output_values *pwm = (struct pwm_output_values *)arg; - - /* discard if too many values are sent */ - if (pwm->channel_count > FMU_MAX_ACTUATORS || _mixing_output.useDynamicMixing()) { - ret = -EINVAL; - break; - } - - for (unsigned i = 0; i < pwm->channel_count; i++) { - if (pwm->values[i] == 0) { - /* ignore 0 */ - } else if (pwm->values[i] > PWM_HIGHEST_MAX) { - _mixing_output.disarmedValue(i) = PWM_HIGHEST_MAX; - } - -#if PWM_LOWEST_MIN > 0 - - else if (pwm->values[i] < PWM_LOWEST_MIN) { - _mixing_output.disarmedValue(i) = PWM_LOWEST_MIN; - } - -#endif - - else { - _mixing_output.disarmedValue(i) = pwm->values[i]; - } - } - - /* - * update the counter - * this is needed to decide if disarmed PWM output should be turned on or not - */ - _num_disarmed_set = 0; - - for (unsigned i = 0; i < FMU_MAX_ACTUATORS; i++) { - if (_mixing_output.disarmedValue(i) > 0) { - _num_disarmed_set++; - } - } - - break; - } - case PWM_SERVO_GET_DISARMED_PWM: { struct pwm_output_values *pwm = (struct pwm_output_values *)arg; diff --git a/src/drivers/px4io/px4io.cpp b/src/drivers/px4io/px4io.cpp index 57d3247e5c..70224bcf95 100644 --- a/src/drivers/px4io/px4io.cpp +++ b/src/drivers/px4io/px4io.cpp @@ -1666,26 +1666,6 @@ int PX4IO::ioctl(file *filep, int cmd, unsigned long arg) break; } - case PWM_SERVO_SET_DISARMED_PWM: { - PX4_DEBUG("PWM_SERVO_SET_DISARMED_PWM"); - struct pwm_output_values *pwm = (struct pwm_output_values *)arg; - - if (pwm->channel_count > _max_actuators) { - /* fail with error */ - return -E2BIG; - } - - for (unsigned i = 0; i < pwm->channel_count; i++) { - if (pwm->values[i] != 0 && !_mixing_output.useDynamicMixing()) { - _mixing_output.disarmedValue(i) = math::constrain(pwm->values[i], (uint16_t)PWM_LOWEST_MIN, (uint16_t)PWM_HIGHEST_MAX); - } - } - - updateDisarmed(); - - break; - } - case PWM_SERVO_GET_DISARMED_PWM: { PX4_DEBUG("PWM_SERVO_GET_DISARMED_PWM"); struct pwm_output_values *pwm = (struct pwm_output_values *)arg; diff --git a/src/systemcmds/pwm/pwm.cpp b/src/systemcmds/pwm/pwm.cpp index 32e01700de..54f6f9cdaa 100644 --- a/src/systemcmds/pwm/pwm.cpp +++ b/src/systemcmds/pwm/pwm.cpp @@ -128,7 +128,6 @@ $ pwm test -c 13 -p 1200 PRINT_MODULE_USAGE_COMMAND_DESCR("oneshot", "Configure Oneshot125 (rate is set to 0)"); - PRINT_MODULE_USAGE_COMMAND_DESCR("disarmed", "Set Disarmed PWM value"); PRINT_MODULE_USAGE_COMMAND_DESCR("min", "Set Minimum PWM value"); PRINT_MODULE_USAGE_COMMAND_DESCR("max", "Set Maximum PWM value"); PRINT_MODULE_USAGE_COMMAND_DESCR("test", "Set Output to a specific value until 'q' or 'c' or 'ctrl-c' pressed"); @@ -136,10 +135,10 @@ $ pwm test -c 13 -p 1200 PRINT_MODULE_USAGE_COMMAND_DESCR("steps", "Run 5 steps from 0 to 100%"); - PRINT_MODULE_USAGE_PARAM_COMMENT("The commands 'disarmed', 'min', 'max' and 'test' require a PWM value:"); + PRINT_MODULE_USAGE_PARAM_COMMENT("The commands 'min', 'max' and 'test' require a PWM value:"); PRINT_MODULE_USAGE_PARAM_INT('p', -1, 0, 4000, "PWM value (eg. 1100)", false); - PRINT_MODULE_USAGE_PARAM_COMMENT("The commands 'rate', 'oneshot', 'disarmed', 'min', 'max', 'test' and 'steps' " + PRINT_MODULE_USAGE_PARAM_COMMENT("The commands 'rate', 'oneshot', 'min', 'max', 'test' and 'steps' " "additionally require to specify the channels with one of the following commands:"); PRINT_MODULE_USAGE_PARAM_STRING('c', nullptr, nullptr, "select channels in the form: 1234 (1 digit per channel, 1=first)", true); @@ -505,59 +504,6 @@ pwm_main(int argc, char *argv[]) return 0; - } else if (!strcmp(command, "disarmed")) { - - if (set_mask == 0) { - usage("no channels set"); - return 1; - } - - if (pwm_value < 0) { - return 0; - } - - if (pwm_value == 0) { - PX4_WARN("reading disarmed value of zero, disabling disarmed PWM"); - } - - struct pwm_output_values pwm_values {}; - - pwm_values.channel_count = servo_count; - - /* first get current state before modifying it */ - ret = px4_ioctl(fd, PWM_SERVO_GET_DISARMED_PWM, (long unsigned int)&pwm_values); - - if (ret != OK) { - PX4_ERR("failed get disarmed values"); - return ret; - } - - for (unsigned i = 0; i < servo_count; i++) { - if (set_mask & 1 << i) { - pwm_values.values[i] = pwm_value; - - if (print_verbose) { - PX4_INFO("chan %d: disarmed PWM: %d", i + 1, pwm_value); - } - } - } - - if (pwm_values.channel_count == 0) { - usage("disarmed: no PWM channels"); - return 1; - - } else { - - ret = px4_ioctl(fd, PWM_SERVO_SET_DISARMED_PWM, (long unsigned int)&pwm_values); - - if (ret != OK) { - PX4_ERR("failed setting disarmed values (%d)", ret); - return error_on_warn; - } - } - - return 0; - } else if (!strcmp(command, "test")) { if (set_mask == 0) { diff --git a/src/systemcmds/tests/CMakeLists.txt b/src/systemcmds/tests/CMakeLists.txt index 9f07fb9a26..4201964f96 100644 --- a/src/systemcmds/tests/CMakeLists.txt +++ b/src/systemcmds/tests/CMakeLists.txt @@ -55,7 +55,6 @@ set(srcs test_parameters.cpp test_perf.c test_ppm.cpp - test_ppm_loopback.cpp test_rc.cpp test_search_min.cpp test_sleep.c diff --git a/src/systemcmds/tests/test_ppm_loopback.cpp b/src/systemcmds/tests/test_ppm_loopback.cpp deleted file mode 100644 index b257fb580a..0000000000 --- a/src/systemcmds/tests/test_ppm_loopback.cpp +++ /dev/null @@ -1,183 +0,0 @@ -/**************************************************************************** - * - * Copyright (C) 2012-2019 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file test_ppm_loopback.cpp - * Tests the PWM outputs and PPM input - */ - -#include -#include - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "tests_main.h" - -#include -#include - -int test_ppm_loopback(int argc, char *argv[]) -{ - - int _rc_sub = orb_subscribe(ORB_ID(input_rc)); - - int servo_fd, result; - servo_position_t pos; - - servo_fd = open(PWM_OUTPUT0_DEVICE_PATH, O_RDWR); - - if (servo_fd < 0) { - printf("failed opening /dev/pwm_servo\n"); - } - - printf("Servo readback, pairs of values should match defaults\n"); - - unsigned servo_count; - result = ioctl(servo_fd, PWM_SERVO_GET_COUNT, (unsigned long)&servo_count); - - if (result != OK) { - warnx("PWM_SERVO_GET_COUNT"); - - (void)close(servo_fd); - return ERROR; - } - - for (unsigned i = 0; i < servo_count; i++) { - result = ioctl(servo_fd, PWM_SERVO_GET(i), (unsigned long)&pos); - - if (result < 0) { - printf("failed reading channel %u\n", i); - } - - //printf("%u: %u %u\n", i, pos, data[i]); - - } - - // /* tell safety that its ok to disable it with the switch */ - // result = ioctl(servo_fd, PWM_SERVO_SET_ARM_OK, 0); - // if (result != OK) - // warnx("FAIL: PWM_SERVO_SET_ARM_OK"); - // tell output device that the system is armed (it will output values if safety is off) - // result = ioctl(servo_fd, PWM_SERVO_ARM, 0); - // if (result != OK) - // warnx("FAIL: PWM_SERVO_ARM"); - - int pwm_values[] = {1200, 1300, 1900, 1700, 1500, 1250, 1800, 1400}; - - - for (unsigned i = 0; (i < servo_count) && (i < sizeof(pwm_values) / sizeof(pwm_values[0])); i++) { - result = ioctl(servo_fd, PWM_SERVO_SET(i), pwm_values[i]); - - if (result) { - (void)close(servo_fd); - return ERROR; - - } else { - warnx("channel %d set to %d", i, pwm_values[i]); - } - } - - warnx("servo count: %d", servo_count); - - pwm_output_values pwm_out{}; - - for (unsigned i = 0; (i < servo_count) && (i < sizeof(pwm_values) / sizeof(pwm_values[0])); i++) { - pwm_out.values[i] = pwm_values[i]; - //warnx("channel %d: disarmed PWM: %d", i+1, pwm_values[i]); - pwm_out.channel_count++; - } - - result = ioctl(servo_fd, PWM_SERVO_SET_DISARMED_PWM, (long unsigned int)&pwm_out); - - /* give driver 10 ms to propagate */ - - /* read low-level values from FMU or IO RC inputs (PPM, Spektrum, S.Bus) */ - struct input_rc_s rc_input; - orb_copy(ORB_ID(input_rc), _rc_sub, &rc_input); - px4_usleep(100000); - - /* open PPM input and expect values close to the output values */ - - bool rc_updated; - orb_check(_rc_sub, &rc_updated); - - if (rc_updated) { - - orb_copy(ORB_ID(input_rc), _rc_sub, &rc_input); - - // int ppm_fd = open(RC_INPUT_DEVICE_PATH, O_RDONLY); - - - - // struct input_rc_s rc; - // result = read(ppm_fd, &rc, sizeof(rc)); - - // if (result != sizeof(rc)) { - // warnx("Error reading RC output"); - // (void)close(servo_fd); - // (void)close(ppm_fd); - // return ERROR; - // } - - /* go and check values */ - for (unsigned i = 0; (i < servo_count) && (i < sizeof(pwm_values) / sizeof(pwm_values[0])); i++) { - if (abs(rc_input.values[i] - pwm_values[i]) > 10) { - warnx("comparison fail: RC: %d, expected: %d", rc_input.values[i], pwm_values[i]); - (void)close(servo_fd); - return ERROR; - } - } - - } else { - warnx("failed reading RC input data"); - (void)close(servo_fd); - return ERROR; - } - - close(servo_fd); - - warnx("PPM LOOPBACK TEST PASSED SUCCESSFULLY!"); - - return 0; -} diff --git a/src/systemcmds/tests/tests_main.c b/src/systemcmds/tests/tests_main.c index 4d5655229c..56044d9d87 100644 --- a/src/systemcmds/tests/tests_main.c +++ b/src/systemcmds/tests/tests_main.c @@ -98,7 +98,6 @@ const struct { {"parameters", test_parameters, 0}, {"perf", test_perf, OPT_NOJIGTEST}, {"ppm", test_ppm, OPT_NOJIGTEST | OPT_NOALLTEST}, - {"ppm_loopback", test_ppm_loopback, OPT_NOALLTEST}, {"rc", test_rc, OPT_NOJIGTEST | OPT_NOALLTEST}, {"search_min", test_search_min, 0}, {"sleep", test_sleep, OPT_NOJIGTEST}, diff --git a/src/systemcmds/tests/tests_main.h b/src/systemcmds/tests/tests_main.h index 3b28c11b53..ed0b5179ca 100644 --- a/src/systemcmds/tests/tests_main.h +++ b/src/systemcmds/tests/tests_main.h @@ -67,7 +67,6 @@ extern int test_param(int argc, char *argv[]); extern int test_parameters(int argc, char *argv[]); extern int test_perf(int argc, char *argv[]); extern int test_ppm(int argc, char *argv[]); -extern int test_ppm_loopback(int argc, char *argv[]); extern int test_rc(int argc, char *argv[]); extern int test_search_min(int argc, char *argv[]); extern int test_sleep(int argc, char *argv[]);