Revert "drivers/pwm_out: cleanup for multi-platform use" (#14812)

This reverts commit 0c8dcf94bc.
This commit is contained in:
Daniel Agar 2020-05-02 23:42:51 -04:00 committed by GitHub
parent cd59f95565
commit 6dfe12d122
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 124 additions and 122 deletions

View File

@ -34,7 +34,6 @@ px4_add_module(
MODULE drivers__pwm_out MODULE drivers__pwm_out
MAIN pwm_out MAIN pwm_out
COMPILE_FLAGS COMPILE_FLAGS
-Wno-error=unused-variable
SRCS SRCS
PWMOut.cpp PWMOut.cpp
PWMOut.hpp PWMOut.hpp

View File

@ -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)
{ {
int ret = -EINVAL; if (ms < 1) {
ms = 1;
}
board_spi_reset(ms, 0xffff);
}
void PWMOut::peripheral_reset(int ms)
{
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");
}
return 0;
}
if (!strcmp(verb, "peripheral_reset")) {
if (argc > 2) {
int reset_time = strtol(argv[2], 0, 0);
peripheral_reset(reset_time);
} else {
peripheral_reset(0);
PX4_INFO("reset default time"); PX4_INFO("reset default time");
// 1 millisecond
board_spi_reset(1, 0xffff);
}
}
if (!strcmp(verb, "peripheral_reset")) {
// TODO: remove peripheral reset from drivers/pwm_out
if (argc > 2) {
int reset_time = strtol(argv[2], 0, 0);
// minimum 10 millisecond
board_peripheral_reset(math::max(10, reset_time));
} else {
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();

View File

@ -36,12 +36,11 @@
#include <float.h> #include <float.h>
#include <math.h> #include <math.h>
#include <px4_platform_common/px4_config.h> #include <board_config.h>
#include <px4_platform_common/getopt.h> #include <drivers/device/device.h>
#include <px4_platform_common/log.h> #include <drivers/device/i2c.h>
#include <px4_platform_common/module.h>
#include <drivers/drv_hrt.h> #include <drivers/drv_hrt.h>
#include <drivers/drv_input_capture.h>
#include <drivers/drv_mixer.h> #include <drivers/drv_mixer.h>
#include <drivers/drv_pwm_output.h> #include <drivers/drv_pwm_output.h>
#include <lib/cdev/CDev.hpp> #include <lib/cdev/CDev.hpp>
@ -49,6 +48,10 @@
#include <lib/mixer_module/mixer_module.hpp> #include <lib/mixer_module/mixer_module.hpp>
#include <lib/parameters/param.h> #include <lib/parameters/param.h>
#include <lib/perf/perf_counter.h> #include <lib/perf/perf_counter.h>
#include <px4_platform_common/px4_config.h>
#include <px4_platform_common/getopt.h>
#include <px4_platform_common/log.h>
#include <px4_platform_common/module.h>
#include <uORB/Publication.hpp> #include <uORB/Publication.hpp>
#include <uORB/PublicationMulti.hpp> #include <uORB/PublicationMulti.hpp>
#include <uORB/Subscription.hpp> #include <uORB/Subscription.hpp>
@ -59,14 +62,6 @@
#include <uORB/topics/multirotor_motor_limits.h> #include <uORB/topics/multirotor_motor_limits.h>
#include <uORB/topics/parameter_update.h> #include <uORB/topics/parameter_update.h>
#if defined(__PX4_NUTTX)
#include <drivers/device/i2c.h>
#endif // __PX4_NUTTX
#if defined(BOARD_HAS_CAPTURE)
#include <drivers/drv_input_capture.h>
#endif // BOARD_HAS_CAPTURE
using namespace time_literals; using namespace time_literals;
/** Mode given via CLI */ /** Mode given via CLI */
@ -81,14 +76,12 @@ enum PortMode {
PORT_PWM3, PORT_PWM3,
PORT_PWM2, PORT_PWM2,
PORT_PWM1, PORT_PWM1,
#if defined(BOARD_HAS_CAPTURE)
PORT_PWM3CAP1, PORT_PWM3CAP1,
PORT_PWM4CAP1, PORT_PWM4CAP1,
PORT_PWM4CAP2, PORT_PWM4CAP2,
PORT_PWM5CAP1, PORT_PWM5CAP1,
PORT_PWM2CAP2, PORT_PWM2CAP2,
PORT_CAPTURE, PORT_CAPTURE,
#endif // BOARD_HAS_CAPTURE
}; };
#if !defined(BOARD_HAS_PWM) #if !defined(BOARD_HAS_PWM)
@ -140,20 +133,20 @@ public:
/** change the FMU mode of the running module */ /** change the FMU mode of the running module */
static int fmu_new_mode(PortMode new_mode); static int fmu_new_mode(PortMode new_mode);
virtual int ioctl(cdev::file_t *filp, int cmd, unsigned long arg); static int test();
virtual int ioctl(file *filp, int cmd, unsigned long arg);
virtual int init(); virtual int init();
int set_mode(Mode mode); int set_mode(Mode mode);
Mode get_mode() { return _mode; } Mode get_mode() { return _mode; }
#if defined(BOARD_HAS_CAPTURE) static int set_i2c_bus_clock(unsigned bus, unsigned clock_hz);
static int test();
static void capture_trampoline(void *context, uint32_t chan_index, static void capture_trampoline(void *context, uint32_t chan_index,
hrt_abstime edge_time, uint32_t edge_state, hrt_abstime edge_time, uint32_t edge_state,
uint32_t overflow); uint32_t overflow);
#endif // BOARD_HAS_CAPTURE
void update_pwm_trims(); void update_pwm_trims();
@ -176,6 +169,7 @@ private:
uORB::Subscription _parameter_update_sub{ORB_ID(parameter_update)}; uORB::Subscription _parameter_update_sub{ORB_ID(parameter_update)};
unsigned _num_outputs{0}; unsigned _num_outputs{0};
int _class_instance{-1}; int _class_instance{-1};
@ -188,18 +182,20 @@ private:
perf_counter_t _cycle_perf; perf_counter_t _cycle_perf;
void capture_callback(uint32_t chan_index,
hrt_abstime edge_time, uint32_t edge_state, uint32_t overflow);
void update_current_rate(); void update_current_rate();
int set_pwm_rate(unsigned rate_map, unsigned default_rate, unsigned alt_rate); int set_pwm_rate(unsigned rate_map, unsigned default_rate, unsigned alt_rate);
int pwm_ioctl(cdev::file_t *filp, int cmd, unsigned long arg); int pwm_ioctl(file *filp, int cmd, unsigned long arg);
void update_pwm_rev_mask(); void update_pwm_rev_mask();
void update_pwm_out_state(bool on); void update_pwm_out_state(bool on);
void update_params(); void update_params();
#if defined(BOARD_HAS_CAPTURE) static void sensor_reset(int ms);
void capture_callback(uint32_t chan_index, hrt_abstime edge_time, uint32_t edge_state, uint32_t overflow); static void peripheral_reset(int ms);
int capture_ioctl(file *filp, int cmd, unsigned long arg); int capture_ioctl(file *filp, int cmd, unsigned long arg);
#endif // BOARD_HAS_CAPTURE
PWMOut(const PWMOut &) = delete; PWMOut(const PWMOut &) = delete;
PWMOut operator=(const PWMOut &) = delete; PWMOut operator=(const PWMOut &) = delete;

View File

@ -311,11 +311,4 @@ private:
} // namespace cdev } // namespace cdev
// class instance for primary driver of each class
enum CLASS_DEVICE {
CLASS_DEVICE_PRIMARY = 0,
CLASS_DEVICE_SECONDARY = 1,
CLASS_DEVICE_TERTIARY = 2
};
#endif /* _CDEV_HPP */ #endif /* _CDEV_HPP */

View File

@ -90,4 +90,11 @@ public:
} // namespace device } // namespace device
// class instance for primary driver of each class
enum CLASS_DEVICE {
CLASS_DEVICE_PRIMARY = 0,
CLASS_DEVICE_SECONDARY = 1,
CLASS_DEVICE_TERTIARY = 2
};
#endif /* _DEVICE_CDEV_HPP */ #endif /* _DEVICE_CDEV_HPP */