forked from Archive/PX4-Autopilot
pwm: added -m option
this allows setting of the channel mask directly, which is useful for testing
This commit is contained in:
parent
fc572906b7
commit
ff7712ca3e
|
@ -71,13 +71,14 @@ usage(const char *reason)
|
||||||
warnx("%s", reason);
|
warnx("%s", reason);
|
||||||
errx(1,
|
errx(1,
|
||||||
"usage:\n"
|
"usage:\n"
|
||||||
"pwm [-v] [-d <device>] [-u <alt_rate>] [-c <channel group>] [arm|disarm] [<channel_value> ...]\n"
|
"pwm [-v] [-d <device>] [-u <alt_rate>] [-c <channel group>] [-m chanmask ] [arm|disarm] [<channel_value> ...]\n"
|
||||||
" -v Print information about the PWM device\n"
|
" -v Print information about the PWM device\n"
|
||||||
" <device> PWM output device (defaults to " PWM_OUTPUT_DEVICE_PATH ")\n"
|
" <device> PWM output device (defaults to " PWM_OUTPUT_DEVICE_PATH ")\n"
|
||||||
" <alt_rate> PWM update rate for channels in <alt_channel_mask>\n"
|
" <alt_rate> PWM update rate for channels in <alt_channel_mask>\n"
|
||||||
" <channel_group> Channel group that should update at the alternate rate (may be specified more than once)\n"
|
" <channel_group> Channel group that should update at the alternate rate (may be specified more than once)\n"
|
||||||
" arm | disarm Arm or disarm the ouptut\n"
|
" arm | disarm Arm or disarm the ouptut\n"
|
||||||
" <channel_value>... PWM output values in microseconds to assign to the PWM outputs\n"
|
" <channel_value>... PWM output values in microseconds to assign to the PWM outputs\n"
|
||||||
|
" <chanmask> Directly supply alt rate channel mask\n"
|
||||||
"\n"
|
"\n"
|
||||||
"When -c is specified, any channel groups not listed with -c will update at the default rate.\n"
|
"When -c is specified, any channel groups not listed with -c will update at the default rate.\n"
|
||||||
);
|
);
|
||||||
|
@ -96,11 +97,12 @@ pwm_main(int argc, char *argv[])
|
||||||
int ret;
|
int ret;
|
||||||
char *ep;
|
char *ep;
|
||||||
unsigned group;
|
unsigned group;
|
||||||
|
int32_t set_mask = -1;
|
||||||
|
|
||||||
if (argc < 2)
|
if (argc < 2)
|
||||||
usage(NULL);
|
usage(NULL);
|
||||||
|
|
||||||
while ((ch = getopt(argc, argv, "c:d:u:v")) != EOF) {
|
while ((ch = getopt(argc, argv, "c:d:u:vm:")) != EOF) {
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
case 'c':
|
case 'c':
|
||||||
group = strtoul(optarg, &ep, 0);
|
group = strtoul(optarg, &ep, 0);
|
||||||
|
@ -120,6 +122,12 @@ pwm_main(int argc, char *argv[])
|
||||||
usage("bad alt_rate value");
|
usage("bad alt_rate value");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'm':
|
||||||
|
set_mask = strtol(optarg, &ep, 0);
|
||||||
|
if (*ep != '\0')
|
||||||
|
usage("bad set_mask value");
|
||||||
|
break;
|
||||||
|
|
||||||
case 'v':
|
case 'v':
|
||||||
print_info = true;
|
print_info = true;
|
||||||
break;
|
break;
|
||||||
|
@ -143,6 +151,13 @@ pwm_main(int argc, char *argv[])
|
||||||
err(1, "PWM_SERVO_SET_UPDATE_RATE (check rate for sanity)");
|
err(1, "PWM_SERVO_SET_UPDATE_RATE (check rate for sanity)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* directly supplied channel mask */
|
||||||
|
if (set_mask != -1) {
|
||||||
|
ret = ioctl(fd, PWM_SERVO_SELECT_UPDATE_RATE, set_mask);
|
||||||
|
if (ret != OK)
|
||||||
|
err(1, "PWM_SERVO_SELECT_UPDATE_RATE");
|
||||||
|
}
|
||||||
|
|
||||||
/* assign alternate rate to channel groups */
|
/* assign alternate rate to channel groups */
|
||||||
if (alt_channels_set) {
|
if (alt_channels_set) {
|
||||||
uint32_t mask = 0;
|
uint32_t mask = 0;
|
||||||
|
|
Loading…
Reference in New Issue