38 #include <drivers/device/device.h> 41 #include <drivers/drv_pwm_output.h> 42 #include <lib/mixer/mixer.h> 44 #include <px4_common.h> 49 #include <uORB/topics/actuator_armed.h> 50 #include <uORB/topics/actuator_controls.h> 51 #include <uORB/topics/actuator_outputs.h> 52 #include <uORB/topics/parameter_update.h> 56 static constexpr uint32_t PWM_SIM_DISARMED_MAGIC = 900;
57 static constexpr uint32_t PWM_SIM_FAILSAFE_MAGIC = 600;
58 static constexpr uint32_t PWM_SIM_PWM_MIN_MAGIC = 1000;
59 static constexpr uint32_t PWM_SIM_PWM_MAX_MAGIC = 2000;
82 static int print_usage(
const char *reason =
nullptr);
93 int set_pwm_rate(
unsigned rate);
95 int set_mode(Mode mode);
96 Mode get_mode() {
return _mode; }
99 static constexpr
unsigned MAX_ACTUATORS = 16;
101 Mode _mode{MODE_NONE};
103 int _update_rate{400};
104 int _current_update_rate{0};
106 int _control_subs[actuator_controls_s::NUM_ACTUATOR_CONTROL_GROUPS];
108 px4_pollfd_struct_t _poll_fds[actuator_controls_s::NUM_ACTUATOR_CONTROL_GROUPS] {};
109 unsigned _poll_fds_num{0};
113 actuator_outputs_s _actuator_outputs = {};
117 unsigned _num_outputs{0};
119 unsigned _pwm_min[MAX_ACTUATORS] {};
120 unsigned _pwm_max[MAX_ACTUATORS] {};
122 uint32_t _groups_required{0};
123 uint32_t _groups_subscribed{0};
126 bool _lockdown{
false};
127 bool _failsafe{
false};
131 actuator_controls_s _controls[actuator_controls_s::NUM_ACTUATOR_CONTROL_GROUPS] {};
132 orb_id_t _control_topics[actuator_controls_s::NUM_ACTUATOR_CONTROL_GROUPS] {};
134 Mixer::Airmode _airmode{Mixer::Airmode::disabled};
138 static int control_callback(uintptr_t handle, uint8_t control_group, uint8_t control_index,
float &input);
142 void update_params();
int print_status() override
Definition: PWMSim.cpp:683
Configuration flags used in code.
__BEGIN_DECLS typedef void * orb_advert_t
ORB topic advertiser handle.
Definition: uORB.h:134
High-resolution timer with callouts and timekeeping.
int ioctl(device::file_t *filp, int cmd, unsigned long arg) override
Perform an ioctl operation on the device.
Definition: PWMSim.cpp:360
Group of mixers, built up from single mixers and processed in order when mixing.
Definition: mixer.h:329
static int task_spawn(int argc, char *argv[])
Definition: PWMSim.cpp:585
static int print_usage(const char *reason=nullptr)
Definition: PWMSim.cpp:651
static PWMSim * instantiate(int argc, char *argv[])
Definition: PWMSim.cpp:608
void run() override
Definition: PWMSim.cpp:157
static int custom_command(int argc, char *argv[])
Definition: PWMSim.cpp:613
Definition: cdev_platform.hpp:20
Abstract class for any character device.
Definition: CDev.hpp:58
Definition: PWMSim.hpp:54
Performance measuring tools.