mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-22 00:43:35 +08:00
tap: add landing gear capability
This configures the PWM output for the landing gear.
This commit is contained in:
@@ -116,6 +116,7 @@ class PX4FMU : public device::CDev
|
||||
public:
|
||||
enum Mode {
|
||||
MODE_NONE,
|
||||
MODE_1PWM,
|
||||
MODE_2PWM,
|
||||
MODE_2PWM2CAP,
|
||||
MODE_3PWM,
|
||||
@@ -529,6 +530,15 @@ PX4FMU::set_mode(Mode mode)
|
||||
* are presented on the output pins.
|
||||
*/
|
||||
switch (mode) {
|
||||
case MODE_1PWM:
|
||||
/* default output rates */
|
||||
_pwm_default_rate = 50;
|
||||
_pwm_alt_rate = 50;
|
||||
_pwm_alt_rate_channels = 0;
|
||||
_pwm_mask = 0x1;
|
||||
_pwm_initialized = false;
|
||||
break;
|
||||
|
||||
case MODE_2PWM2CAP: // v1 multi-port with flow control lines as PWM
|
||||
up_input_capture_set(2, Rising, 0, NULL, NULL);
|
||||
up_input_capture_set(3, Rising, 0, NULL, NULL);
|
||||
@@ -1041,6 +1051,10 @@ PX4FMU::cycle()
|
||||
size_t num_outputs;
|
||||
|
||||
switch (_mode) {
|
||||
case MODE_1PWM:
|
||||
num_outputs = 1;
|
||||
break;
|
||||
|
||||
case MODE_2PWM:
|
||||
case MODE_2PWM2CAP:
|
||||
num_outputs = 2;
|
||||
@@ -1588,6 +1602,7 @@ PX4FMU::ioctl(file *filp, int cmd, unsigned long arg)
|
||||
|
||||
/* if we are in valid PWM mode, try it as a PWM ioctl as well */
|
||||
switch (_mode) {
|
||||
case MODE_1PWM:
|
||||
case MODE_2PWM:
|
||||
case MODE_3PWM:
|
||||
case MODE_4PWM:
|
||||
@@ -2002,6 +2017,10 @@ PX4FMU::pwm_ioctl(file *filp, int cmd, unsigned long arg)
|
||||
*(unsigned *)arg = 2;
|
||||
break;
|
||||
|
||||
case MODE_1PWM:
|
||||
*(unsigned *)arg = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
ret = -EINVAL;
|
||||
break;
|
||||
@@ -2022,6 +2041,10 @@ PX4FMU::pwm_ioctl(file *filp, int cmd, unsigned long arg)
|
||||
set_mode(MODE_NONE);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
set_mode(MODE_1PWM);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
set_mode(MODE_2PWM);
|
||||
break;
|
||||
@@ -2062,6 +2085,10 @@ PX4FMU::pwm_ioctl(file *filp, int cmd, unsigned long arg)
|
||||
ret = set_mode(MODE_NONE);
|
||||
break;
|
||||
|
||||
case PWM_SERVO_MODE_1PWM:
|
||||
ret = set_mode(MODE_1PWM);
|
||||
break;
|
||||
|
||||
case PWM_SERVO_MODE_2PWM:
|
||||
ret = set_mode(MODE_2PWM);
|
||||
break;
|
||||
@@ -2616,6 +2643,7 @@ enum PortMode {
|
||||
PORT_PWM4,
|
||||
PORT_PWM3,
|
||||
PORT_PWM2,
|
||||
PORT_PWM1,
|
||||
PORT_PWM3CAP1,
|
||||
PORT_PWM2CAP2,
|
||||
PORT_CAPTURE,
|
||||
@@ -2639,6 +2667,12 @@ fmu_new_mode(PortMode new_mode)
|
||||
break;
|
||||
|
||||
case PORT_FULL_PWM:
|
||||
|
||||
case PORT_PWM1:
|
||||
/* select 2-pin PWM mode */
|
||||
servo_mode = PX4FMU::MODE_1PWM;
|
||||
break;
|
||||
|
||||
#if defined(BOARD_HAS_PWM) && BOARD_HAS_PWM == 4
|
||||
/* select 4-pin PWM mode */
|
||||
servo_mode = PX4FMU::MODE_4PWM;
|
||||
@@ -3092,7 +3126,14 @@ fmu_main(int argc, char *argv[])
|
||||
} else if (!strcmp(verb, "mode_pwm")) {
|
||||
new_mode = PORT_FULL_PWM;
|
||||
|
||||
#if defined(BOARD_HAS_PWM) && BOARD_HAS_PWM >= 6
|
||||
#if defined(BOARD_HAS_PWM)
|
||||
|
||||
} else if (!strcmp(verb, "mode_pwm1")) {
|
||||
new_mode = PORT_PWM1;
|
||||
|
||||
|
||||
#elif defined(BOARD_HAS_PWM) && BOARD_HAS_PWM >= 6
|
||||
|
||||
|
||||
} else if (!strcmp(verb, "mode_pwm4")) {
|
||||
new_mode = PORT_PWM4;
|
||||
|
||||
Reference in New Issue
Block a user