mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-06-02 03:36:48 +08:00
px4fmu: added PWM_SERVO_SET_COUNT API
this allows the balance between PWM channels and GPIOs to be changed after the main flight code has started, which makes it possible to change the balance with a parameter in APM
This commit is contained in:
committed by
Lorenz Meier
parent
dda50c62bf
commit
4524fe3e48
@@ -189,6 +189,10 @@ ORB_DECLARE(output_pwm);
|
|||||||
/** get the maximum PWM value the output will send */
|
/** get the maximum PWM value the output will send */
|
||||||
#define PWM_SERVO_GET_MAX_PWM _IOC(_PWM_SERVO_BASE, 19)
|
#define PWM_SERVO_GET_MAX_PWM _IOC(_PWM_SERVO_BASE, 19)
|
||||||
|
|
||||||
|
/** set the number of servos in (unsigned)arg - allows change of
|
||||||
|
* split between servos and GPIO */
|
||||||
|
#define PWM_SERVO_SET_COUNT _IOC(_PWM_SERVO_BASE, 20)
|
||||||
|
|
||||||
/** set a single servo to a specific value */
|
/** set a single servo to a specific value */
|
||||||
#define PWM_SERVO_SET(_servo) _IOC(_PWM_SERVO_BASE, 0x20 + _servo)
|
#define PWM_SERVO_SET(_servo) _IOC(_PWM_SERVO_BASE, 0x20 + _servo)
|
||||||
|
|
||||||
|
|||||||
@@ -1006,6 +1006,40 @@ PX4FMU::pwm_ioctl(file *filp, int cmd, unsigned long arg)
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PWM_SERVO_SET_COUNT: {
|
||||||
|
/* change the number of outputs that are enabled for
|
||||||
|
* PWM. This is used to change the split between GPIO
|
||||||
|
* and PWM under control of the flight config
|
||||||
|
* parameters. Note that this does not allow for
|
||||||
|
* changing a set of pins to be used for serial on
|
||||||
|
* FMUv1
|
||||||
|
*/
|
||||||
|
switch (arg) {
|
||||||
|
case 0:
|
||||||
|
set_mode(MODE_NONE);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
set_mode(MODE_2PWM);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
set_mode(MODE_4PWM);
|
||||||
|
break;
|
||||||
|
|
||||||
|
#if defined(CONFIG_ARCH_BOARD_PX4FMU_V2)
|
||||||
|
case 6:
|
||||||
|
set_mode(MODE_6PWM);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
default:
|
||||||
|
ret = -EINVAL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case MIXERIOCRESET:
|
case MIXERIOCRESET:
|
||||||
if (_mixers != nullptr) {
|
if (_mixers != nullptr) {
|
||||||
delete _mixers;
|
delete _mixers;
|
||||||
@@ -1443,7 +1477,6 @@ void
|
|||||||
sensor_reset(int ms)
|
sensor_reset(int ms)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
int ret;
|
|
||||||
|
|
||||||
fd = open(PX4FMU_DEVICE_PATH, O_RDWR);
|
fd = open(PX4FMU_DEVICE_PATH, O_RDWR);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user