|
|
@ -379,6 +379,11 @@ int PWMOut::set_pwm_rate(uint32_t rate_map, unsigned default_rate, unsigned alt_ |
|
|
|
return OK; |
|
|
|
return OK; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int PWMOut::set_i2c_bus_clock(unsigned bus, unsigned clock_hz) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
return device::I2C::set_bus_clock(bus, clock_hz); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void PWMOut::update_current_rate() |
|
|
|
void PWMOut::update_current_rate() |
|
|
|
{ |
|
|
|
{ |
|
|
|
/*
|
|
|
|
/*
|
|
|
@ -500,7 +505,6 @@ int PWMOut::task_spawn(int argc, char *argv[]) |
|
|
|
return PX4_ERROR; |
|
|
|
return PX4_ERROR; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#if defined(BOARD_HAS_CAPTURE) |
|
|
|
|
|
|
|
void PWMOut::capture_trampoline(void *context, uint32_t chan_index, |
|
|
|
void PWMOut::capture_trampoline(void *context, uint32_t chan_index, |
|
|
|
hrt_abstime edge_time, uint32_t edge_state, uint32_t overflow) |
|
|
|
hrt_abstime edge_time, uint32_t edge_state, uint32_t overflow) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -511,10 +515,8 @@ void PWMOut::capture_trampoline(void *context, uint32_t chan_index, |
|
|
|
void PWMOut::capture_callback(uint32_t chan_index, |
|
|
|
void PWMOut::capture_callback(uint32_t chan_index, |
|
|
|
hrt_abstime edge_time, uint32_t edge_state, uint32_t overflow) |
|
|
|
hrt_abstime edge_time, uint32_t edge_state, uint32_t overflow) |
|
|
|
{ |
|
|
|
{ |
|
|
|
fprintf(stdout, "PWMOut: Capture chan:%d time:%lld state:%d overflow:%d\n", chan_index, edge_time, edge_state, |
|
|
|
fprintf(stdout, "FMU: Capture chan:%d time:%lld state:%d overflow:%d\n", chan_index, edge_time, edge_state, overflow); |
|
|
|
overflow); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
#endif // BOARD_HAS_CAPTURE
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void PWMOut::update_pwm_out_state(bool on) |
|
|
|
void PWMOut::update_pwm_out_state(bool on) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -601,11 +603,10 @@ void PWMOut::update_params() |
|
|
|
updateParams(); |
|
|
|
updateParams(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
int PWMOut::ioctl(cdev::file_t *filp, int cmd, unsigned long arg) |
|
|
|
int PWMOut::ioctl(file *filp, int cmd, unsigned long arg) |
|
|
|
{ |
|
|
|
{ |
|
|
|
int ret = -ENOTTY; |
|
|
|
int ret; |
|
|
|
|
|
|
|
|
|
|
|
#if defined(BOARD_HAS_CAPTURE) |
|
|
|
|
|
|
|
/* try it as a Capture ioctl next */ |
|
|
|
/* try it as a Capture ioctl next */ |
|
|
|
ret = capture_ioctl(filp, cmd, arg); |
|
|
|
ret = capture_ioctl(filp, cmd, arg); |
|
|
|
|
|
|
|
|
|
|
@ -613,8 +614,6 @@ int PWMOut::ioctl(cdev::file_t *filp, int cmd, unsigned long arg) |
|
|
|
return ret; |
|
|
|
return ret; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#endif // BOARD_HAS_CAPTURE
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* if we are in valid PWM mode, try it as a PWM ioctl as well */ |
|
|
|
/* if we are in valid PWM mode, try it as a PWM ioctl as well */ |
|
|
|
switch (_mode) { |
|
|
|
switch (_mode) { |
|
|
|
case MODE_1PWM: |
|
|
|
case MODE_1PWM: |
|
|
@ -622,14 +621,11 @@ int PWMOut::ioctl(cdev::file_t *filp, int cmd, unsigned long arg) |
|
|
|
case MODE_3PWM: |
|
|
|
case MODE_3PWM: |
|
|
|
case MODE_4PWM: |
|
|
|
case MODE_4PWM: |
|
|
|
case MODE_5PWM: |
|
|
|
case MODE_5PWM: |
|
|
|
#if defined(BOARD_HAS_CAPTURE) |
|
|
|
|
|
|
|
case MODE_2PWM2CAP: |
|
|
|
case MODE_2PWM2CAP: |
|
|
|
case MODE_3PWM1CAP: |
|
|
|
case MODE_3PWM1CAP: |
|
|
|
case MODE_4PWM1CAP: |
|
|
|
case MODE_4PWM1CAP: |
|
|
|
case MODE_4PWM2CAP: |
|
|
|
case MODE_4PWM2CAP: |
|
|
|
case MODE_5PWM1CAP: |
|
|
|
case MODE_5PWM1CAP: |
|
|
|
#endif // BOARD_HAS_CAPTURE
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(BOARD_HAS_PWM) && BOARD_HAS_PWM >= 6 |
|
|
|
#if defined(BOARD_HAS_PWM) && BOARD_HAS_PWM >= 6 |
|
|
|
case MODE_6PWM: |
|
|
|
case MODE_6PWM: |
|
|
|
#endif |
|
|
|
#endif |
|
|
@ -655,7 +651,7 @@ int PWMOut::ioctl(cdev::file_t *filp, int cmd, unsigned long arg) |
|
|
|
return ret; |
|
|
|
return ret; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
int PWMOut::pwm_ioctl(cdev::file_t *filp, int cmd, unsigned long arg) |
|
|
|
int PWMOut::pwm_ioctl(file *filp, int cmd, unsigned long arg) |
|
|
|
{ |
|
|
|
{ |
|
|
|
int ret = OK; |
|
|
|
int ret = OK; |
|
|
|
|
|
|
|
|
|
|
@ -931,8 +927,6 @@ int PWMOut::pwm_ioctl(cdev::file_t *filp, int cmd, unsigned long arg) |
|
|
|
case PWM_SERVO_SET(11): |
|
|
|
case PWM_SERVO_SET(11): |
|
|
|
case PWM_SERVO_SET(10): |
|
|
|
case PWM_SERVO_SET(10): |
|
|
|
case PWM_SERVO_SET(9): |
|
|
|
case PWM_SERVO_SET(9): |
|
|
|
|
|
|
|
|
|
|
|
// FALLTHROUGH
|
|
|
|
|
|
|
|
case PWM_SERVO_SET(8): |
|
|
|
case PWM_SERVO_SET(8): |
|
|
|
if (_mode < MODE_14PWM) { |
|
|
|
if (_mode < MODE_14PWM) { |
|
|
|
ret = -EINVAL; |
|
|
|
ret = -EINVAL; |
|
|
@ -942,10 +936,9 @@ int PWMOut::pwm_ioctl(cdev::file_t *filp, int cmd, unsigned long arg) |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
#if defined(BOARD_HAS_PWM) && BOARD_HAS_PWM >= 8 |
|
|
|
#if defined(BOARD_HAS_PWM) && BOARD_HAS_PWM >= 8 |
|
|
|
|
|
|
|
|
|
|
|
// FALLTHROUGH
|
|
|
|
|
|
|
|
case PWM_SERVO_SET(7): |
|
|
|
case PWM_SERVO_SET(7): |
|
|
|
|
|
|
|
|
|
|
|
// FALLTHROUGH
|
|
|
|
/* FALLTHROUGH */ |
|
|
|
case PWM_SERVO_SET(6): |
|
|
|
case PWM_SERVO_SET(6): |
|
|
|
if (_mode < MODE_8PWM) { |
|
|
|
if (_mode < MODE_8PWM) { |
|
|
|
ret = -EINVAL; |
|
|
|
ret = -EINVAL; |
|
|
@ -956,7 +949,7 @@ int PWMOut::pwm_ioctl(cdev::file_t *filp, int cmd, unsigned long arg) |
|
|
|
|
|
|
|
|
|
|
|
#if defined(BOARD_HAS_PWM) && BOARD_HAS_PWM >= 6 |
|
|
|
#if defined(BOARD_HAS_PWM) && BOARD_HAS_PWM >= 6 |
|
|
|
|
|
|
|
|
|
|
|
// FALLTHROUGH
|
|
|
|
/* FALLTHROUGH */ |
|
|
|
case PWM_SERVO_SET(5): |
|
|
|
case PWM_SERVO_SET(5): |
|
|
|
if (_mode < MODE_6PWM) { |
|
|
|
if (_mode < MODE_6PWM) { |
|
|
|
ret = -EINVAL; |
|
|
|
ret = -EINVAL; |
|
|
@ -966,7 +959,7 @@ int PWMOut::pwm_ioctl(cdev::file_t *filp, int cmd, unsigned long arg) |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
#if defined(BOARD_HAS_PWM) && BOARD_HAS_PWM >= 5 |
|
|
|
#if defined(BOARD_HAS_PWM) && BOARD_HAS_PWM >= 5 |
|
|
|
|
|
|
|
|
|
|
|
// FALLTHROUGH
|
|
|
|
/* FALLTHROUGH */ |
|
|
|
case PWM_SERVO_SET(4): |
|
|
|
case PWM_SERVO_SET(4): |
|
|
|
if (_mode < MODE_5PWM) { |
|
|
|
if (_mode < MODE_5PWM) { |
|
|
|
ret = -EINVAL; |
|
|
|
ret = -EINVAL; |
|
|
@ -975,21 +968,21 @@ int PWMOut::pwm_ioctl(cdev::file_t *filp, int cmd, unsigned long arg) |
|
|
|
|
|
|
|
|
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
// FALLTHROUGH
|
|
|
|
/* FALLTHROUGH */ |
|
|
|
case PWM_SERVO_SET(3): |
|
|
|
case PWM_SERVO_SET(3): |
|
|
|
if (_mode < MODE_4PWM) { |
|
|
|
if (_mode < MODE_4PWM) { |
|
|
|
ret = -EINVAL; |
|
|
|
ret = -EINVAL; |
|
|
|
break; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// FALLTHROUGH
|
|
|
|
/* FALLTHROUGH */ |
|
|
|
case PWM_SERVO_SET(2): |
|
|
|
case PWM_SERVO_SET(2): |
|
|
|
if (_mode < MODE_3PWM) { |
|
|
|
if (_mode < MODE_3PWM) { |
|
|
|
ret = -EINVAL; |
|
|
|
ret = -EINVAL; |
|
|
|
break; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// FALLTHROUGH
|
|
|
|
/* FALLTHROUGH */ |
|
|
|
case PWM_SERVO_SET(1): |
|
|
|
case PWM_SERVO_SET(1): |
|
|
|
case PWM_SERVO_SET(0): |
|
|
|
case PWM_SERVO_SET(0): |
|
|
|
if (arg <= 2100) { |
|
|
|
if (arg <= 2100) { |
|
|
@ -1015,10 +1008,9 @@ int PWMOut::pwm_ioctl(cdev::file_t *filp, int cmd, unsigned long arg) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
#if defined(BOARD_HAS_PWM) && BOARD_HAS_PWM >= 8 |
|
|
|
#if defined(BOARD_HAS_PWM) && BOARD_HAS_PWM >= 8 |
|
|
|
|
|
|
|
|
|
|
|
// FALLTHROUGH
|
|
|
|
/* FALLTHROUGH */ |
|
|
|
case PWM_SERVO_GET(7): |
|
|
|
case PWM_SERVO_GET(7): |
|
|
|
case PWM_SERVO_GET(6): |
|
|
|
case PWM_SERVO_GET(6): |
|
|
|
if (_mode < MODE_8PWM) { |
|
|
|
if (_mode < MODE_8PWM) { |
|
|
@ -1030,7 +1022,7 @@ int PWMOut::pwm_ioctl(cdev::file_t *filp, int cmd, unsigned long arg) |
|
|
|
|
|
|
|
|
|
|
|
#if defined(BOARD_HAS_PWM) && BOARD_HAS_PWM >= 6 |
|
|
|
#if defined(BOARD_HAS_PWM) && BOARD_HAS_PWM >= 6 |
|
|
|
|
|
|
|
|
|
|
|
// FALLTHROUGH
|
|
|
|
/* FALLTHROUGH */ |
|
|
|
case PWM_SERVO_GET(5): |
|
|
|
case PWM_SERVO_GET(5): |
|
|
|
if (_mode < MODE_6PWM) { |
|
|
|
if (_mode < MODE_6PWM) { |
|
|
|
ret = -EINVAL; |
|
|
|
ret = -EINVAL; |
|
|
@ -1038,10 +1030,9 @@ int PWMOut::pwm_ioctl(cdev::file_t *filp, int cmd, unsigned long arg) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
#if defined(BOARD_HAS_PWM) && BOARD_HAS_PWM >= 5 |
|
|
|
#if defined(BOARD_HAS_PWM) && BOARD_HAS_PWM >= 5 |
|
|
|
|
|
|
|
|
|
|
|
// FALLTHROUGH
|
|
|
|
/* FALLTHROUGH */ |
|
|
|
case PWM_SERVO_GET(4): |
|
|
|
case PWM_SERVO_GET(4): |
|
|
|
if (_mode < MODE_5PWM) { |
|
|
|
if (_mode < MODE_5PWM) { |
|
|
|
ret = -EINVAL; |
|
|
|
ret = -EINVAL; |
|
|
@ -1050,21 +1041,21 @@ int PWMOut::pwm_ioctl(cdev::file_t *filp, int cmd, unsigned long arg) |
|
|
|
|
|
|
|
|
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
// FALLTHROUGH
|
|
|
|
/* FALLTHROUGH */ |
|
|
|
case PWM_SERVO_GET(3): |
|
|
|
case PWM_SERVO_GET(3): |
|
|
|
if (_mode < MODE_4PWM) { |
|
|
|
if (_mode < MODE_4PWM) { |
|
|
|
ret = -EINVAL; |
|
|
|
ret = -EINVAL; |
|
|
|
break; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// FALLTHROUGH
|
|
|
|
/* FALLTHROUGH */ |
|
|
|
case PWM_SERVO_GET(2): |
|
|
|
case PWM_SERVO_GET(2): |
|
|
|
if (_mode < MODE_3PWM) { |
|
|
|
if (_mode < MODE_3PWM) { |
|
|
|
ret = -EINVAL; |
|
|
|
ret = -EINVAL; |
|
|
|
break; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// FALLTHROUGH
|
|
|
|
/* FALLTHROUGH */ |
|
|
|
case PWM_SERVO_GET(1): |
|
|
|
case PWM_SERVO_GET(1): |
|
|
|
case PWM_SERVO_GET(0): |
|
|
|
case PWM_SERVO_GET(0): |
|
|
|
*(servo_position_t *)arg = up_pwm_servo_get(cmd - PWM_SERVO_GET(0)); |
|
|
|
*(servo_position_t *)arg = up_pwm_servo_get(cmd - PWM_SERVO_GET(0)); |
|
|
@ -1309,10 +1300,29 @@ int PWMOut::pwm_ioctl(cdev::file_t *filp, int cmd, unsigned long arg) |
|
|
|
return ret; |
|
|
|
return ret; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#if defined(BOARD_HAS_CAPTURE) |
|
|
|
void PWMOut::sensor_reset(int ms) |
|
|
|
int PWMOut::capture_ioctl(cdev::file_t *filp, int cmd, unsigned long arg) |
|
|
|
{ |
|
|
|
|
|
|
|
if (ms < 1) { |
|
|
|
|
|
|
|
ms = 1; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
board_spi_reset(ms, 0xffff); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void PWMOut::peripheral_reset(int ms) |
|
|
|
{ |
|
|
|
{ |
|
|
|
int ret = -EINVAL; |
|
|
|
if (ms < 1) { |
|
|
|
|
|
|
|
ms = 10; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
board_peripheral_reset(ms); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int PWMOut::capture_ioctl(struct file *filp, int cmd, unsigned long arg) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
int ret = -EINVAL; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(BOARD_HAS_CAPTURE) |
|
|
|
|
|
|
|
|
|
|
|
lock(); |
|
|
|
lock(); |
|
|
|
|
|
|
|
|
|
|
@ -1453,9 +1463,11 @@ int PWMOut::capture_ioctl(cdev::file_t *filp, int cmd, unsigned long arg) |
|
|
|
|
|
|
|
|
|
|
|
unlock(); |
|
|
|
unlock(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#else |
|
|
|
|
|
|
|
ret = -ENOTTY; |
|
|
|
|
|
|
|
#endif |
|
|
|
return ret; |
|
|
|
return ret; |
|
|
|
} |
|
|
|
} |
|
|
|
#endif // BOARD_HAS_CAPTURE
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int PWMOut::fmu_new_mode(PortMode new_mode) |
|
|
|
int PWMOut::fmu_new_mode(PortMode new_mode) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -1463,7 +1475,9 @@ int PWMOut::fmu_new_mode(PortMode new_mode) |
|
|
|
return -1; |
|
|
|
return -1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
PWMOut::Mode servo_mode = PWMOut::MODE_NONE; |
|
|
|
PWMOut::Mode servo_mode; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
servo_mode = PWMOut::MODE_NONE; |
|
|
|
|
|
|
|
|
|
|
|
switch (new_mode) { |
|
|
|
switch (new_mode) { |
|
|
|
case PORT_FULL_GPIO: |
|
|
|
case PORT_FULL_GPIO: |
|
|
@ -1586,7 +1600,17 @@ int PWMOut::fmu_new_mode(PortMode new_mode) |
|
|
|
return OK; |
|
|
|
return OK; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#if defined(BOARD_HAS_CAPTURE) |
|
|
|
|
|
|
|
|
|
|
|
namespace |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int fmu_new_i2c_speed(unsigned bus, unsigned clock_hz) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
return PWMOut::set_i2c_bus_clock(bus, clock_hz); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} // namespace
|
|
|
|
|
|
|
|
|
|
|
|
int PWMOut::test() |
|
|
|
int PWMOut::test() |
|
|
|
{ |
|
|
|
{ |
|
|
|
int fd; |
|
|
|
int fd; |
|
|
@ -1777,22 +1801,18 @@ err_out_no_test: |
|
|
|
::close(fd); |
|
|
|
::close(fd); |
|
|
|
return rv; |
|
|
|
return rv; |
|
|
|
} |
|
|
|
} |
|
|
|
#endif // BOARD_HAS_CAPTURE
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int PWMOut::custom_command(int argc, char *argv[]) |
|
|
|
int PWMOut::custom_command(int argc, char *argv[]) |
|
|
|
{ |
|
|
|
{ |
|
|
|
PortMode new_mode = PORT_MODE_UNSET; |
|
|
|
PortMode new_mode = PORT_MODE_UNSET; |
|
|
|
const char *verb = argv[0]; |
|
|
|
const char *verb = argv[0]; |
|
|
|
|
|
|
|
|
|
|
|
#if defined(__PX4_NUTTX) |
|
|
|
/* does not operate on a FMU instance */ |
|
|
|
|
|
|
|
|
|
|
|
/* does not operate on a PWMOut instance */ |
|
|
|
|
|
|
|
if (!strcmp(verb, "i2c")) { |
|
|
|
if (!strcmp(verb, "i2c")) { |
|
|
|
// TODO: remove sensor reset from drivers/pwm_out
|
|
|
|
|
|
|
|
if (argc > 2) { |
|
|
|
if (argc > 2) { |
|
|
|
int bus = strtol(argv[1], 0, 0); |
|
|
|
int bus = strtol(argv[1], 0, 0); |
|
|
|
int clock_hz = strtol(argv[2], 0, 0); |
|
|
|
int clock_hz = strtol(argv[2], 0, 0); |
|
|
|
int ret = device::I2C::set_bus_clock(bus, clock_hz); |
|
|
|
int ret = fmu_new_i2c_speed(bus, clock_hz); |
|
|
|
|
|
|
|
|
|
|
|
if (ret) { |
|
|
|
if (ret) { |
|
|
|
PX4_ERR("setting I2C clock failed"); |
|
|
|
PX4_ERR("setting I2C clock failed"); |
|
|
@ -1805,34 +1825,31 @@ int PWMOut::custom_command(int argc, char *argv[]) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (!strcmp(verb, "sensor_reset")) { |
|
|
|
if (!strcmp(verb, "sensor_reset")) { |
|
|
|
// TODO: remove sensor reset from drivers/pwm_out
|
|
|
|
|
|
|
|
if (argc > 1) { |
|
|
|
if (argc > 1) { |
|
|
|
int reset_time = strtol(argv[1], nullptr, 0); |
|
|
|
int reset_time = strtol(argv[1], nullptr, 0); |
|
|
|
board_spi_reset(math::max(reset_time, 1), 0xffff); |
|
|
|
sensor_reset(reset_time); |
|
|
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
} else { |
|
|
|
|
|
|
|
sensor_reset(0); |
|
|
|
PX4_INFO("reset default time"); |
|
|
|
PX4_INFO("reset default time"); |
|
|
|
// 1 millisecond
|
|
|
|
|
|
|
|
board_spi_reset(1, 0xffff); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (!strcmp(verb, "peripheral_reset")) { |
|
|
|
if (!strcmp(verb, "peripheral_reset")) { |
|
|
|
// TODO: remove peripheral reset from drivers/pwm_out
|
|
|
|
|
|
|
|
if (argc > 2) { |
|
|
|
if (argc > 2) { |
|
|
|
int reset_time = strtol(argv[2], 0, 0); |
|
|
|
int reset_time = strtol(argv[2], 0, 0); |
|
|
|
// minimum 10 millisecond
|
|
|
|
peripheral_reset(reset_time); |
|
|
|
board_peripheral_reset(math::max(10, reset_time)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
} else { |
|
|
|
|
|
|
|
peripheral_reset(0); |
|
|
|
PX4_INFO("reset default time"); |
|
|
|
PX4_INFO("reset default time"); |
|
|
|
board_peripheral_reset(10); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#endif // __PX4_NUTTX
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* start the FMU if not running */ |
|
|
|
/* start the FMU if not running */ |
|
|
|
if (!is_running()) { |
|
|
|
if (!is_running()) { |
|
|
@ -1920,14 +1937,10 @@ int PWMOut::custom_command(int argc, char *argv[]) |
|
|
|
return PWMOut::fmu_new_mode(new_mode); |
|
|
|
return PWMOut::fmu_new_mode(new_mode); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#if defined(BOARD_HAS_CAPTURE) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!strcmp(verb, "test")) { |
|
|
|
if (!strcmp(verb, "test")) { |
|
|
|
return test(); |
|
|
|
return test(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#endif // BOARD_HAS_CAPTURE
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return print_usage("unknown command"); |
|
|
|
return print_usage("unknown command"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -1944,33 +1957,31 @@ int PWMOut::print_status() |
|
|
|
|
|
|
|
|
|
|
|
case MODE_2PWM: mode_str = "pwm2"; break; |
|
|
|
case MODE_2PWM: mode_str = "pwm2"; break; |
|
|
|
|
|
|
|
|
|
|
|
case MODE_3PWM: mode_str = "pwm3"; break; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case MODE_4PWM: mode_str = "pwm4"; break; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case MODE_5PWM: mode_str = "pwm5"; break; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case MODE_6PWM: mode_str = "pwm6"; break; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case MODE_8PWM: mode_str = "pwm8"; break; |
|
|
|
|
|
|
|
#if defined(BOARD_HAS_CAPTURE) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case MODE_2PWM2CAP: mode_str = "pwm2cap2"; break; |
|
|
|
case MODE_2PWM2CAP: mode_str = "pwm2cap2"; break; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case MODE_3PWM: mode_str = "pwm3"; break; |
|
|
|
|
|
|
|
|
|
|
|
case MODE_3PWM1CAP: mode_str = "pwm3cap1"; break; |
|
|
|
case MODE_3PWM1CAP: mode_str = "pwm3cap1"; break; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case MODE_4PWM: mode_str = "pwm4"; break; |
|
|
|
|
|
|
|
|
|
|
|
case MODE_4PWM1CAP: mode_str = "pwm4cap1"; break; |
|
|
|
case MODE_4PWM1CAP: mode_str = "pwm4cap1"; break; |
|
|
|
|
|
|
|
|
|
|
|
case MODE_4PWM2CAP: mode_str = "pwm4cap2"; break; |
|
|
|
case MODE_4PWM2CAP: mode_str = "pwm4cap2"; break; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case MODE_5PWM: mode_str = "pwm5"; break; |
|
|
|
|
|
|
|
|
|
|
|
case MODE_5PWM1CAP: mode_str = "pwm5cap1"; break; |
|
|
|
case MODE_5PWM1CAP: mode_str = "pwm5cap1"; break; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case MODE_6PWM: mode_str = "pwm6"; break; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case MODE_8PWM: mode_str = "pwm8"; break; |
|
|
|
|
|
|
|
|
|
|
|
case MODE_4CAP: mode_str = "cap4"; break; |
|
|
|
case MODE_4CAP: mode_str = "cap4"; break; |
|
|
|
|
|
|
|
|
|
|
|
case MODE_5CAP: mode_str = "cap5"; break; |
|
|
|
case MODE_5CAP: mode_str = "cap5"; break; |
|
|
|
|
|
|
|
|
|
|
|
case MODE_6CAP: mode_str = "cap6"; break; |
|
|
|
case MODE_6CAP: mode_str = "cap6"; break; |
|
|
|
#endif // BOARD_HAS_CAPTURE
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
default: |
|
|
|
default: |
|
|
|
break; |
|
|
|
break; |
|
|
@ -2031,27 +2042,24 @@ mixer files. |
|
|
|
PRINT_MODULE_USAGE_COMMAND("mode_gpio"); |
|
|
|
PRINT_MODULE_USAGE_COMMAND("mode_gpio"); |
|
|
|
PRINT_MODULE_USAGE_COMMAND_DESCR("mode_pwm", "Select all available pins as PWM"); |
|
|
|
PRINT_MODULE_USAGE_COMMAND_DESCR("mode_pwm", "Select all available pins as PWM"); |
|
|
|
#if defined(BOARD_HAS_PWM) && BOARD_HAS_PWM >= 8 |
|
|
|
#if defined(BOARD_HAS_PWM) && BOARD_HAS_PWM >= 8 |
|
|
|
PRINT_MODULE_USAGE_COMMAND("mode_pwm8"); |
|
|
|
PRINT_MODULE_USAGE_COMMAND("mode_pwm8"); |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
#if defined(BOARD_HAS_PWM) && BOARD_HAS_PWM >= 6 |
|
|
|
#if defined(BOARD_HAS_PWM) && BOARD_HAS_PWM >= 6 |
|
|
|
PRINT_MODULE_USAGE_COMMAND("mode_pwm6"); |
|
|
|
PRINT_MODULE_USAGE_COMMAND("mode_pwm6"); |
|
|
|
PRINT_MODULE_USAGE_COMMAND("mode_pwm5"); |
|
|
|
PRINT_MODULE_USAGE_COMMAND("mode_pwm5"); |
|
|
|
|
|
|
|
PRINT_MODULE_USAGE_COMMAND("mode_pwm5cap1"); |
|
|
|
PRINT_MODULE_USAGE_COMMAND("mode_pwm4"); |
|
|
|
PRINT_MODULE_USAGE_COMMAND("mode_pwm4"); |
|
|
|
PRINT_MODULE_USAGE_COMMAND("mode_pwm3"); |
|
|
|
PRINT_MODULE_USAGE_COMMAND("mode_pwm4cap1"); |
|
|
|
|
|
|
|
PRINT_MODULE_USAGE_COMMAND("mode_pwm4cap2"); |
|
|
|
|
|
|
|
PRINT_MODULE_USAGE_COMMAND("mode_pwm3"); |
|
|
|
|
|
|
|
PRINT_MODULE_USAGE_COMMAND("mode_pwm3cap1"); |
|
|
|
PRINT_MODULE_USAGE_COMMAND("mode_pwm2"); |
|
|
|
PRINT_MODULE_USAGE_COMMAND("mode_pwm2"); |
|
|
|
#if defined(BOARD_HAS_CAPTURE) |
|
|
|
PRINT_MODULE_USAGE_COMMAND("mode_pwm2cap2"); |
|
|
|
PRINT_MODULE_USAGE_COMMAND("mode_pwm5cap1"); |
|
|
|
|
|
|
|
PRINT_MODULE_USAGE_COMMAND("mode_pwm4cap1"); |
|
|
|
|
|
|
|
PRINT_MODULE_USAGE_COMMAND("mode_pwm4cap2"); |
|
|
|
|
|
|
|
PRINT_MODULE_USAGE_COMMAND("mode_pwm3cap1"); |
|
|
|
|
|
|
|
PRINT_MODULE_USAGE_COMMAND("mode_pwm2cap2"); |
|
|
|
|
|
|
|
#endif // BOARD_HAS_CAPTURE
|
|
|
|
|
|
|
|
#endif |
|
|
|
#endif |
|
|
|
#if defined(BOARD_HAS_PWM) |
|
|
|
#if defined(BOARD_HAS_PWM) |
|
|
|
PRINT_MODULE_USAGE_COMMAND("mode_pwm1"); |
|
|
|
PRINT_MODULE_USAGE_COMMAND("mode_pwm1"); |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
#if defined(__PX4_NUTTX) |
|
|
|
|
|
|
|
PRINT_MODULE_USAGE_COMMAND_DESCR("sensor_reset", "Do a sensor reset (SPI bus)"); |
|
|
|
PRINT_MODULE_USAGE_COMMAND_DESCR("sensor_reset", "Do a sensor reset (SPI bus)"); |
|
|
|
PRINT_MODULE_USAGE_ARG("<ms>", "Delay time in ms between reset and re-enabling", true); |
|
|
|
PRINT_MODULE_USAGE_ARG("<ms>", "Delay time in ms between reset and re-enabling", true); |
|
|
|
PRINT_MODULE_USAGE_COMMAND_DESCR("peripheral_reset", "Reset board peripherals"); |
|
|
|
PRINT_MODULE_USAGE_COMMAND_DESCR("peripheral_reset", "Reset board peripherals"); |
|
|
@ -2059,7 +2067,6 @@ mixer files. |
|
|
|
|
|
|
|
|
|
|
|
PRINT_MODULE_USAGE_COMMAND_DESCR("i2c", "Configure I2C clock rate"); |
|
|
|
PRINT_MODULE_USAGE_COMMAND_DESCR("i2c", "Configure I2C clock rate"); |
|
|
|
PRINT_MODULE_USAGE_ARG("<bus_id> <rate>", "Specify the bus id (>=0) and rate in Hz", false); |
|
|
|
PRINT_MODULE_USAGE_ARG("<bus_id> <rate>", "Specify the bus id (>=0) and rate in Hz", false); |
|
|
|
#endif // __PX4_NUTTX
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PRINT_MODULE_USAGE_COMMAND_DESCR("test", "Test inputs and outputs"); |
|
|
|
PRINT_MODULE_USAGE_COMMAND_DESCR("test", "Test inputs and outputs"); |
|
|
|
PRINT_MODULE_USAGE_DEFAULT_COMMANDS(); |
|
|
|
PRINT_MODULE_USAGE_DEFAULT_COMMANDS(); |
|
|
|