forked from Archive/PX4-Autopilot
pwm:ensure that a rate of 0 will invoke the ioctl
Prior to onshot being added to the system. The -r of the "rate" command would not invoke the ioctl PWM_SERVO_SET_UPDATE_RATE when -r was not provided on the command line. This may have been a feature or a bug. When onshot was added to the pwm command a bug was intorduced that precluded the ioctl PWM_SERVO_SET_UPDATE_RATE from being called on -r 0. This commit fixes that issue, and preserves the "prio to oneshot" behavior of the "rate" command when -r is not specified.
This commit is contained in:
parent
44a507fcfe
commit
0a1fbef8c8
|
@ -92,7 +92,7 @@ usage(const char *reason)
|
|||
"\t[-g <channel group>]\t(e.g. 0,1,2)\n"
|
||||
"\t[-m <channel mask> ]\t(e.g. 0xF)\n"
|
||||
"\t[-a]\t\t\tConfigure all outputs\n"
|
||||
"\t-r <alt_rate>\t\tPWM rate (50 to 400 Hz)\n"
|
||||
"\t-r <alt_rate>\t\tPWM rate (0 - oneshot, 50 to 400 Hz)\n"
|
||||
"\n"
|
||||
"failsafe ...\t\t\tFailsafe PWM\n"
|
||||
"disarmed ...\t\t\tDisarmed PWM\n"
|
||||
|
@ -169,7 +169,7 @@ int
|
|||
pwm_main(int argc, char *argv[])
|
||||
{
|
||||
const char *dev = PWM_OUTPUT0_DEVICE_PATH;
|
||||
unsigned alt_rate = 0;
|
||||
int alt_rate = -1; // Default to indicate not set.
|
||||
uint32_t alt_channel_groups = 0;
|
||||
bool alt_channels_set = false;
|
||||
bool print_verbose = false;
|
||||
|
@ -262,7 +262,6 @@ pwm_main(int argc, char *argv[])
|
|||
|
||||
case 'r':
|
||||
alt_rate = get_parameter_value(myoptarg, "PWM Rate");
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -347,8 +346,14 @@ pwm_main(int argc, char *argv[])
|
|||
|
||||
} else if (oneshot || !strcmp(command, "rate")) {
|
||||
|
||||
/* change alternate PWM rate or set oneshot */
|
||||
if (oneshot || alt_rate > 0) {
|
||||
/* Change alternate PWM rate or set oneshot
|
||||
* Either the "oneshot" command was used
|
||||
* and/OR -r was provided on command line and has changed the alt_rate
|
||||
* to the non default of -1, so we will issue the PWM_SERVO_SET_UPDATE_RATE
|
||||
* ioctl
|
||||
*/
|
||||
|
||||
if (oneshot || alt_rate >= 0) {
|
||||
ret = px4_ioctl(fd, PWM_SERVO_SET_UPDATE_RATE, oneshot ? 0 : alt_rate);
|
||||
|
||||
if (ret != OK) {
|
||||
|
|
Loading…
Reference in New Issue