mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-05-31 10:26:52 +08:00
delete PWM_SERVO_SET_FAILSAFE_PWM
This commit is contained in:
@@ -170,9 +170,6 @@ typedef uint16_t servo_position_t;
|
|||||||
/** start DSM bind */
|
/** start DSM bind */
|
||||||
#define DSM_BIND_START _PX4_IOC(_PWM_SERVO_BASE, 10)
|
#define DSM_BIND_START _PX4_IOC(_PWM_SERVO_BASE, 10)
|
||||||
|
|
||||||
/** set the PWM value for failsafe */
|
|
||||||
#define PWM_SERVO_SET_FAILSAFE_PWM _PX4_IOC(_PWM_SERVO_BASE, 12)
|
|
||||||
|
|
||||||
/** get the PWM value for failsafe */
|
/** get the PWM value for failsafe */
|
||||||
#define PWM_SERVO_GET_FAILSAFE_PWM _PX4_IOC(_PWM_SERVO_BASE, 13)
|
#define PWM_SERVO_GET_FAILSAFE_PWM _PX4_IOC(_PWM_SERVO_BASE, 13)
|
||||||
|
|
||||||
|
|||||||
@@ -750,40 +750,6 @@ int PWMOut::pwm_ioctl(device::file_t *filp, int cmd, unsigned long arg)
|
|||||||
*(uint32_t *)arg = _pwm_alt_rate_channels;
|
*(uint32_t *)arg = _pwm_alt_rate_channels;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PWM_SERVO_SET_FAILSAFE_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.failsafeValue(i) = PWM_HIGHEST_MAX;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#if PWM_LOWEST_MIN > 0
|
|
||||||
|
|
||||||
else if (pwm->values[i] < PWM_LOWEST_MIN) {
|
|
||||||
_mixing_output.failsafeValue(i) = PWM_LOWEST_MIN;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
else {
|
|
||||||
_mixing_output.failsafeValue(i) = pwm->values[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case PWM_SERVO_GET_FAILSAFE_PWM: {
|
case PWM_SERVO_GET_FAILSAFE_PWM: {
|
||||||
struct pwm_output_values *pwm = (struct pwm_output_values *)arg;
|
struct pwm_output_values *pwm = (struct pwm_output_values *)arg;
|
||||||
|
|
||||||
|
|||||||
@@ -1652,27 +1652,6 @@ int PX4IO::ioctl(file *filep, int cmd, unsigned long arg)
|
|||||||
*(unsigned *)arg = io_reg_get(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_PWM_RATES);
|
*(unsigned *)arg = io_reg_get(PX4IO_PAGE_SETUP, PX4IO_P_SETUP_PWM_RATES);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PWM_SERVO_SET_FAILSAFE_PWM: {
|
|
||||||
PX4_DEBUG("PWM_SERVO_SET_FAILSAFE_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.failsafeValue(i) = math::constrain(pwm->values[i], (uint16_t)PWM_LOWEST_MIN, (uint16_t)PWM_HIGHEST_MAX);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
updateFailsafe();
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case PWM_SERVO_GET_FAILSAFE_PWM: {
|
case PWM_SERVO_GET_FAILSAFE_PWM: {
|
||||||
PX4_DEBUG("PWM_SERVO_GET_FAILSAFE_PWM");
|
PX4_DEBUG("PWM_SERVO_GET_FAILSAFE_PWM");
|
||||||
struct pwm_output_values *pwm = (struct pwm_output_values *)arg;
|
struct pwm_output_values *pwm = (struct pwm_output_values *)arg;
|
||||||
|
|||||||
@@ -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("oneshot", "Configure Oneshot125 (rate is set to 0)");
|
||||||
|
|
||||||
PRINT_MODULE_USAGE_COMMAND_DESCR("failsafe", "Set Failsafe PWM value");
|
|
||||||
PRINT_MODULE_USAGE_COMMAND_DESCR("disarmed", "Set Disarmed PWM value");
|
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("min", "Set Minimum PWM value");
|
||||||
PRINT_MODULE_USAGE_COMMAND_DESCR("max", "Set Maximum PWM value");
|
PRINT_MODULE_USAGE_COMMAND_DESCR("max", "Set Maximum PWM value");
|
||||||
@@ -137,10 +136,10 @@ $ pwm test -c 13 -p 1200
|
|||||||
PRINT_MODULE_USAGE_COMMAND_DESCR("steps", "Run 5 steps from 0 to 100%");
|
PRINT_MODULE_USAGE_COMMAND_DESCR("steps", "Run 5 steps from 0 to 100%");
|
||||||
|
|
||||||
|
|
||||||
PRINT_MODULE_USAGE_PARAM_COMMENT("The commands 'failsafe', 'disarmed', 'min', 'max' and 'test' require a PWM value:");
|
PRINT_MODULE_USAGE_PARAM_COMMENT("The commands 'disarmed', '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_INT('p', -1, 0, 4000, "PWM value (eg. 1100)", false);
|
||||||
|
|
||||||
PRINT_MODULE_USAGE_PARAM_COMMENT("The commands 'rate', 'oneshot', 'failsafe', 'disarmed', 'min', 'max', 'test' and 'steps' "
|
PRINT_MODULE_USAGE_PARAM_COMMENT("The commands 'rate', 'oneshot', 'disarmed', 'min', 'max', 'test' and 'steps' "
|
||||||
"additionally require to specify the channels with one of the following commands:");
|
"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)",
|
PRINT_MODULE_USAGE_PARAM_STRING('c', nullptr, nullptr, "select channels in the form: 1234 (1 digit per channel, 1=first)",
|
||||||
true);
|
true);
|
||||||
@@ -559,60 +558,6 @@ pwm_main(int argc, char *argv[])
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
} else if (!strcmp(command, "failsafe")) {
|
|
||||||
|
|
||||||
if (set_mask == 0) {
|
|
||||||
usage("no channels set");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pwm_value < 0) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pwm_value == 0) {
|
|
||||||
usage("failsafe: no PWM provided");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
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_FAILSAFE_PWM, (long unsigned int)&pwm_values);
|
|
||||||
|
|
||||||
if (ret != OK) {
|
|
||||||
PX4_ERR("failed get failsafe values");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (unsigned i = 0; i < servo_count; i++) {
|
|
||||||
if (set_mask & 1 << i) {
|
|
||||||
pwm_values.values[i] = pwm_value;
|
|
||||||
|
|
||||||
if (print_verbose) {
|
|
||||||
PX4_INFO("Channel %d: failsafe PWM: %d", i + 1, pwm_value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pwm_values.channel_count == 0) {
|
|
||||||
usage("failsafe: no PWM channels");
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
ret = px4_ioctl(fd, PWM_SERVO_SET_FAILSAFE_PWM, (long unsigned int)&pwm_values);
|
|
||||||
|
|
||||||
if (ret != OK) {
|
|
||||||
PX4_ERR("BAD input VAL");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
} else if (!strcmp(command, "test")) {
|
} else if (!strcmp(command, "test")) {
|
||||||
|
|
||||||
if (set_mask == 0) {
|
if (set_mask == 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user