mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-07-14 07:30:35 +08:00
module_base: remove CRTP template pattern to reduce flash bloat (#26476)
* module_base: claude rewrite to remove CRTP bloat * module_base: apply to all drivers/modules * format * fix build errors * fix missing syntax * remove reference to module.h in files that need module_base.h * remove old ModuleBase<T> * add module_base.cpp to px4_protected_layers.cmake * fix IridiumSBD can_stop() * fix IridiumSBD.cpp * clang-tidy: downcast static cast * get_instance() template accessor, revert clang-tidy global * rename module_base.h to module.h * revert changes in zenoh/Kconfig.topics
This commit is contained in:
@@ -45,10 +45,12 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
class AirshipAttitudeControl : public ModuleBase<AirshipAttitudeControl>, public ModuleParams,
|
||||
class AirshipAttitudeControl : public ModuleBase, public ModuleParams,
|
||||
public px4::WorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
AirshipAttitudeControl();
|
||||
|
||||
virtual ~AirshipAttitudeControl();
|
||||
|
||||
@@ -42,6 +42,8 @@
|
||||
|
||||
using namespace matrix;
|
||||
|
||||
ModuleBase::Descriptor AirshipAttitudeControl::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
AirshipAttitudeControl::AirshipAttitudeControl() :
|
||||
ModuleParams(nullptr),
|
||||
WorkItem(MODULE_NAME, px4::wq_configurations::rate_ctrl),
|
||||
@@ -114,7 +116,7 @@ AirshipAttitudeControl::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
_vehicle_angular_velocity_sub.unregisterCallback();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -146,8 +148,8 @@ int AirshipAttitudeControl::task_spawn(int argc, char *argv[])
|
||||
AirshipAttitudeControl *instance = new AirshipAttitudeControl();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -158,8 +160,8 @@ int AirshipAttitudeControl::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -210,5 +212,5 @@ To reduce control latency, the module directly polls on the gyro topic published
|
||||
*/
|
||||
extern "C" __EXPORT int airship_att_control_main(int argc, char *argv[])
|
||||
{
|
||||
return AirshipAttitudeControl::main(argc, argv);
|
||||
return ModuleBase::main(AirshipAttitudeControl::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -80,11 +80,13 @@ using matrix::Quatf;
|
||||
using matrix::Vector2f;
|
||||
using matrix::Vector3f;
|
||||
|
||||
class AirspeedModule : public ModuleBase<AirspeedModule>, public ModuleParams,
|
||||
class AirspeedModule : public ModuleBase, public ModuleParams,
|
||||
public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
|
||||
static Descriptor desc;
|
||||
|
||||
AirspeedModule();
|
||||
|
||||
~AirspeedModule() override;
|
||||
@@ -228,6 +230,8 @@ private:
|
||||
void update_throttle_filter(hrt_abstime t_now);
|
||||
};
|
||||
|
||||
ModuleBase::Descriptor AirspeedModule::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
AirspeedModule::AirspeedModule():
|
||||
ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::nav_and_controllers)
|
||||
@@ -261,10 +265,10 @@ AirspeedModule::task_spawn(int argc, char *argv[])
|
||||
return PX4_ERROR;
|
||||
}
|
||||
|
||||
_object.store(dev);
|
||||
desc.object.store(dev);
|
||||
|
||||
dev->ScheduleOnInterval(SCHEDULE_INTERVAL, 10000);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
return PX4_OK;
|
||||
|
||||
}
|
||||
@@ -478,7 +482,7 @@ AirspeedModule::Run()
|
||||
perf_end(_perf_elapsed);
|
||||
|
||||
if (should_exit()) {
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -867,7 +871,7 @@ void AirspeedModule::update_throttle_filter(hrt_abstime now)
|
||||
|
||||
int AirspeedModule::custom_command(int argc, char *argv[])
|
||||
{
|
||||
if (!is_running()) {
|
||||
if (!is_running(desc)) {
|
||||
int ret = AirspeedModule::task_spawn(argc, argv);
|
||||
|
||||
if (ret) {
|
||||
@@ -906,5 +910,5 @@ and also publishes those.
|
||||
|
||||
extern "C" __EXPORT int airspeed_selector_main(int argc, char *argv[])
|
||||
{
|
||||
return AirspeedModule::main(argc, argv);
|
||||
return ModuleBase::main(AirspeedModule::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -70,10 +70,12 @@ using matrix::wrap_pi;
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
class AttitudeEstimatorQ : public ModuleBase<AttitudeEstimatorQ>, public ModuleParams, public px4::WorkItem
|
||||
class AttitudeEstimatorQ : public ModuleBase, public ModuleParams, public px4::WorkItem
|
||||
{
|
||||
public:
|
||||
|
||||
static Descriptor desc;
|
||||
|
||||
AttitudeEstimatorQ();
|
||||
~AttitudeEstimatorQ() override = default;
|
||||
|
||||
@@ -171,6 +173,8 @@ private:
|
||||
)
|
||||
};
|
||||
|
||||
ModuleBase::Descriptor AttitudeEstimatorQ::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
AttitudeEstimatorQ::AttitudeEstimatorQ() :
|
||||
ModuleParams(nullptr),
|
||||
WorkItem(MODULE_NAME, px4::wq_configurations::nav_and_controllers)
|
||||
@@ -200,7 +204,7 @@ void AttitudeEstimatorQ::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
_sensors_sub.unregisterCallback();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -594,8 +598,8 @@ int AttitudeEstimatorQ::task_spawn(int argc, char *argv[])
|
||||
AttitudeEstimatorQ *instance = new AttitudeEstimatorQ();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -606,8 +610,8 @@ int AttitudeEstimatorQ::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -634,5 +638,5 @@ Attitude estimator q.
|
||||
|
||||
extern "C" __EXPORT int attitude_estimator_q_main(int argc, char *argv[])
|
||||
{
|
||||
return AttitudeEstimatorQ::main(argc, argv);
|
||||
return ModuleBase::main(AttitudeEstimatorQ::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -79,9 +79,11 @@ using namespace time_literals;
|
||||
#error "battery_status module requires power bricks"
|
||||
#endif
|
||||
|
||||
class BatteryStatus : public ModuleBase<BatteryStatus>, public ModuleParams, public px4::ScheduledWorkItem
|
||||
class BatteryStatus : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
BatteryStatus();
|
||||
~BatteryStatus() override;
|
||||
|
||||
@@ -134,6 +136,8 @@ private:
|
||||
void adc_poll();
|
||||
};
|
||||
|
||||
ModuleBase::Descriptor BatteryStatus::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
BatteryStatus::BatteryStatus() :
|
||||
ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::hp_default),
|
||||
@@ -237,7 +241,7 @@ void
|
||||
BatteryStatus::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -258,8 +262,8 @@ BatteryStatus::task_spawn(int argc, char *argv[])
|
||||
BatteryStatus *instance = new BatteryStatus();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -270,8 +274,8 @@ BatteryStatus::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -315,5 +319,5 @@ It runs in its own thread and polls on the currently selected gyro topic.
|
||||
|
||||
extern "C" __EXPORT int battery_status_main(int argc, char *argv[])
|
||||
{
|
||||
return BatteryStatus::main(argc, argv);
|
||||
return ModuleBase::main(BatteryStatus::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -35,6 +35,8 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
ModuleBase::Descriptor CameraFeedback::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
CameraFeedback::CameraFeedback() :
|
||||
ModuleParams(nullptr),
|
||||
WorkItem(MODULE_NAME, px4::wq_configurations::hp_default)
|
||||
@@ -64,7 +66,7 @@ CameraFeedback::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
_trigger_sub.unregisterCallback();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -159,8 +161,8 @@ CameraFeedback::task_spawn(int argc, char *argv[])
|
||||
CameraFeedback *instance = new CameraFeedback();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -171,8 +173,8 @@ CameraFeedback::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -225,5 +227,5 @@ from the `CameraTrigger` and position information from the vehicle.
|
||||
|
||||
extern "C" __EXPORT int camera_feedback_main(int argc, char *argv[])
|
||||
{
|
||||
return CameraFeedback::main(argc, argv);
|
||||
return ModuleBase::main(CameraFeedback::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -57,9 +57,11 @@
|
||||
#include <uORB/topics/vehicle_global_position.h>
|
||||
#include <uORB/topics/gimbal_device_attitude_status.h>
|
||||
|
||||
class CameraFeedback : public ModuleBase<CameraFeedback>, public ModuleParams, public px4::WorkItem
|
||||
class CameraFeedback : public ModuleBase, public ModuleParams, public px4::WorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
CameraFeedback();
|
||||
~CameraFeedback() override = default;
|
||||
|
||||
|
||||
@@ -74,6 +74,8 @@
|
||||
#include <uORB/topics/mavlink_log.h>
|
||||
#include <uORB/topics/tune_control.h>
|
||||
|
||||
ModuleBase::Descriptor Commander::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
typedef enum VEHICLE_MODE_FLAG {
|
||||
VEHICLE_MODE_FLAG_CUSTOM_MODE_ENABLED = 1, /* 0b00000001 Reserved for future use. | */
|
||||
VEHICLE_MODE_FLAG_TEST_ENABLED = 2, /* 0b00000010 system has a test mode enabled. This flag is intended for temporary system tests and should not be used for stable implementations. | */
|
||||
@@ -232,7 +234,7 @@ static bool broadcast_vehicle_command(const uint32_t cmd, const float param1 = N
|
||||
|
||||
int Commander::custom_command(int argc, char *argv[])
|
||||
{
|
||||
if (!is_running()) {
|
||||
if (!is_running(desc)) {
|
||||
print_usage("not running");
|
||||
return 1;
|
||||
}
|
||||
@@ -527,7 +529,7 @@ int Commander::print_status()
|
||||
|
||||
extern "C" __EXPORT int commander_main(int argc, char *argv[])
|
||||
{
|
||||
return Commander::main(argc, argv);
|
||||
return ModuleBase::main(Commander::desc, argc, argv);
|
||||
}
|
||||
|
||||
static constexpr const char *arm_disarm_reason_str(arm_disarm_reason_t calling_reason)
|
||||
@@ -2721,23 +2723,30 @@ void Commander::answer_command(const vehicle_command_s &cmd, uint8_t result)
|
||||
_vehicle_command_ack_pub.publish(command_ack);
|
||||
}
|
||||
|
||||
int Commander::run_trampoline(int argc, char *argv[])
|
||||
{
|
||||
return ModuleBase::run_trampoline_impl(desc, [](int ac, char *av[]) -> ModuleBase * {
|
||||
return Commander::instantiate(ac, av);
|
||||
}, argc, argv);
|
||||
}
|
||||
|
||||
int Commander::task_spawn(int argc, char *argv[])
|
||||
{
|
||||
_task_id = px4_task_spawn_cmd("commander",
|
||||
SCHED_DEFAULT,
|
||||
SCHED_PRIORITY_DEFAULT + 40,
|
||||
PX4_STACK_ADJUSTED(3250),
|
||||
(px4_main_t)&run_trampoline,
|
||||
(char *const *)argv);
|
||||
desc.task_id = px4_task_spawn_cmd("commander",
|
||||
SCHED_DEFAULT,
|
||||
SCHED_PRIORITY_DEFAULT + 40,
|
||||
PX4_STACK_ADJUSTED(3250),
|
||||
(px4_main_t)&run_trampoline,
|
||||
(char *const *)argv);
|
||||
|
||||
if (_task_id < 0) {
|
||||
_task_id = -1;
|
||||
if (desc.task_id < 0) {
|
||||
desc.task_id = -1;
|
||||
return -errno;
|
||||
}
|
||||
|
||||
// wait until task is up & running
|
||||
if (wait_until_running() < 0) {
|
||||
_task_id = -1;
|
||||
if (wait_until_running(desc) < 0) {
|
||||
desc.task_id = -1;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
@@ -95,15 +95,20 @@ using arm_disarm_reason_t = events::px4::enums::arm_disarm_reason_t;
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
class Commander : public ModuleBase<Commander>, public ModuleParams
|
||||
class Commander : public ModuleBase, public ModuleParams
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
Commander();
|
||||
~Commander();
|
||||
|
||||
/** @see ModuleBase */
|
||||
static int task_spawn(int argc, char *argv[]);
|
||||
|
||||
/** @see ModuleBase */
|
||||
static int run_trampoline(int argc, char *argv[]);
|
||||
|
||||
/** @see ModuleBase */
|
||||
static Commander *instantiate(int argc, char *argv[]);
|
||||
|
||||
|
||||
@@ -49,6 +49,8 @@
|
||||
using namespace matrix;
|
||||
using namespace time_literals;
|
||||
|
||||
ModuleBase::Descriptor ControlAllocator::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
ControlAllocator::ControlAllocator() :
|
||||
ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::rate_ctrl),
|
||||
@@ -306,7 +308,7 @@ ControlAllocator::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
_vehicle_torque_setpoint_sub.unregisterCallback();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -818,8 +820,8 @@ int ControlAllocator::task_spawn(int argc, char *argv[])
|
||||
ControlAllocator *instance = new ControlAllocator();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -830,8 +832,8 @@ int ControlAllocator::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -1021,5 +1023,5 @@ extern "C" __EXPORT int control_allocator_main(int argc, char *argv[]);
|
||||
|
||||
int control_allocator_main(int argc, char *argv[])
|
||||
{
|
||||
return ControlAllocator::main(argc, argv);
|
||||
return ModuleBase::main(ControlAllocator::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -80,9 +80,11 @@
|
||||
#include <uORB/topics/vehicle_status.h>
|
||||
#include <uORB/topics/failure_detector_status.h>
|
||||
|
||||
class ControlAllocator : public ModuleBase<ControlAllocator>, public ModuleParams, public px4::ScheduledWorkItem
|
||||
class ControlAllocator : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
static constexpr int NUM_ACTUATORS = ControlAllocation::NUM_ACTUATORS;
|
||||
static constexpr int NUM_AXES = ControlAllocation::NUM_AXES;
|
||||
|
||||
|
||||
@@ -37,6 +37,8 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
ModuleBase::Descriptor EscBattery::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
EscBattery::EscBattery() :
|
||||
ModuleParams(nullptr),
|
||||
WorkItem(MODULE_NAME, px4::wq_configurations::lp_default),
|
||||
@@ -68,7 +70,7 @@ EscBattery::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
_esc_status_sub.unregisterCallback();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -120,8 +122,8 @@ int EscBattery::task_spawn(int argc, char *argv[])
|
||||
EscBattery *instance = new EscBattery();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -132,8 +134,8 @@ int EscBattery::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -165,5 +167,5 @@ This implements using information from the ESC status and publish it as battery
|
||||
|
||||
extern "C" __EXPORT int esc_battery_main(int argc, char *argv[])
|
||||
{
|
||||
return EscBattery::main(argc, argv);
|
||||
return ModuleBase::main(EscBattery::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -48,12 +48,14 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
class EscBattery : public ModuleBase<EscBattery>, public ModuleParams, public px4::WorkItem
|
||||
class EscBattery : public ModuleBase, public ModuleParams, public px4::WorkItem
|
||||
{
|
||||
public:
|
||||
EscBattery();
|
||||
~EscBattery() = default;
|
||||
|
||||
static Descriptor desc;
|
||||
|
||||
/** @see ModuleBase */
|
||||
static int task_spawn(int argc, char *argv[]);
|
||||
|
||||
|
||||
@@ -44,6 +44,8 @@ using namespace time_literals;
|
||||
namespace events
|
||||
{
|
||||
|
||||
ModuleBase::Descriptor SendEvent::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
// Run it at 30 Hz.
|
||||
static constexpr uint32_t SEND_EVENT_INTERVAL_US{1_s / 30};
|
||||
|
||||
@@ -56,8 +58,8 @@ int SendEvent::task_spawn(int argc, char *argv[])
|
||||
return PX4_ERROR;
|
||||
}
|
||||
|
||||
_object.store(send_event);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(send_event);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
send_event->start();
|
||||
|
||||
@@ -95,7 +97,7 @@ int SendEvent::start()
|
||||
void SendEvent::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -162,7 +164,7 @@ int SendEvent::custom_command(int argc, char *argv[])
|
||||
|
||||
int send_event_main(int argc, char *argv[])
|
||||
{
|
||||
return SendEvent::main(argc, argv);
|
||||
return ModuleBase::main(SendEvent::desc, argc, argv);
|
||||
}
|
||||
|
||||
} /* namespace events */
|
||||
|
||||
@@ -49,10 +49,12 @@ namespace events
|
||||
extern "C" __EXPORT int send_event_main(int argc, char *argv[]);
|
||||
|
||||
/** @class SendEvent The SendEvent class manages the RC loss audible alarm, LED status display, and thermal calibration. */
|
||||
class SendEvent : public ModuleBase<SendEvent>, public ModuleParams, public px4::ScheduledWorkItem
|
||||
class SendEvent : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
|
||||
static Descriptor desc;
|
||||
|
||||
SendEvent();
|
||||
|
||||
~SendEvent();
|
||||
|
||||
@@ -38,6 +38,8 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
ModuleBase::Descriptor FlightModeManager::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
FlightModeManager::FlightModeManager() :
|
||||
ModuleParams(nullptr),
|
||||
WorkItem(MODULE_NAME, px4::wq_configurations::nav_and_controllers)
|
||||
@@ -80,7 +82,7 @@ void FlightModeManager::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
_vehicle_local_position_sub.unregisterCallback();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -443,8 +445,8 @@ int FlightModeManager::task_spawn(int argc, char *argv[])
|
||||
FlightModeManager *instance = new FlightModeManager();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -455,8 +457,8 @@ int FlightModeManager::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -502,5 +504,5 @@ and outputs setpoints for controllers.
|
||||
|
||||
extern "C" __EXPORT int flight_mode_manager_main(int argc, char *argv[])
|
||||
{
|
||||
return FlightModeManager::main(argc, argv);
|
||||
return ModuleBase::main(FlightModeManager::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -65,9 +65,11 @@ enum class FlightTaskError : int {
|
||||
ActivationFailed = -2
|
||||
};
|
||||
|
||||
class FlightModeManager : public ModuleBase<FlightModeManager>, public ModuleParams, public px4::WorkItem
|
||||
class FlightModeManager : public ModuleBase, public ModuleParams, public px4::WorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
FlightModeManager();
|
||||
~FlightModeManager() override;
|
||||
|
||||
|
||||
@@ -39,6 +39,8 @@ using namespace matrix;
|
||||
using math::constrain;
|
||||
using math::radians;
|
||||
|
||||
ModuleBase::Descriptor FixedwingAttitudeControl::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
FixedwingAttitudeControl::FixedwingAttitudeControl(bool vtol) :
|
||||
ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::nav_and_controllers),
|
||||
@@ -171,7 +173,7 @@ void FixedwingAttitudeControl::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
_att_sub.unregisterCallback();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -427,8 +429,8 @@ int FixedwingAttitudeControl::task_spawn(int argc, char *argv[])
|
||||
FixedwingAttitudeControl *instance = new FixedwingAttitudeControl(vtol);
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -439,8 +441,8 @@ int FixedwingAttitudeControl::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -473,5 +475,5 @@ fw_att_control is the fixed wing attitude controller.
|
||||
|
||||
extern "C" __EXPORT int fw_att_control_main(int argc, char *argv[])
|
||||
{
|
||||
return FixedwingAttitudeControl::main(argc, argv);
|
||||
return ModuleBase::main(FixedwingAttitudeControl::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -74,10 +74,12 @@ using uORB::SubscriptionData;
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
class FixedwingAttitudeControl final : public ModuleBase<FixedwingAttitudeControl>, public ModuleParams,
|
||||
class FixedwingAttitudeControl final : public ModuleBase, public ModuleParams,
|
||||
public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
FixedwingAttitudeControl(bool vtol = false);
|
||||
~FixedwingAttitudeControl() override;
|
||||
|
||||
|
||||
@@ -41,6 +41,8 @@
|
||||
|
||||
using namespace matrix;
|
||||
|
||||
ModuleBase::Descriptor FwAutotuneAttitudeControl::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
FwAutotuneAttitudeControl::FwAutotuneAttitudeControl(bool is_vtol) :
|
||||
ModuleParams(nullptr),
|
||||
WorkItem(MODULE_NAME, px4::wq_configurations::hp_default),
|
||||
@@ -77,7 +79,7 @@ void FwAutotuneAttitudeControl::Run()
|
||||
if (should_exit()) {
|
||||
_parameter_update_sub.unregisterCallback();
|
||||
_vehicle_torque_setpoint_sub.unregisterCallback();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -906,8 +908,8 @@ int FwAutotuneAttitudeControl::task_spawn(int argc, char *argv[])
|
||||
FwAutotuneAttitudeControl *instance = new FwAutotuneAttitudeControl(is_vtol);
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -918,8 +920,8 @@ int FwAutotuneAttitudeControl::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -958,5 +960,5 @@ int FwAutotuneAttitudeControl::print_usage(const char *reason)
|
||||
|
||||
extern "C" __EXPORT int fw_autotune_attitude_control_main(int argc, char *argv[])
|
||||
{
|
||||
return FwAutotuneAttitudeControl::main(argc, argv);
|
||||
return ModuleBase::main(FwAutotuneAttitudeControl::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -72,10 +72,12 @@ enum class SignalType : uint8_t {
|
||||
kLogSineSweep
|
||||
};
|
||||
|
||||
class FwAutotuneAttitudeControl : public ModuleBase<FwAutotuneAttitudeControl>, public ModuleParams,
|
||||
class FwAutotuneAttitudeControl : public ModuleBase, public ModuleParams,
|
||||
public px4::WorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
FwAutotuneAttitudeControl(bool is_vtol);
|
||||
~FwAutotuneAttitudeControl() override;
|
||||
|
||||
|
||||
@@ -43,6 +43,8 @@ using matrix::Eulerf;
|
||||
using matrix::Quatf;
|
||||
using matrix::Vector2f;
|
||||
|
||||
ModuleBase::Descriptor FwLateralLongitudinalControl::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
// [m/s] maximum reference altitude rate threshhold
|
||||
static constexpr float MAX_ALT_REF_RATE_FOR_LEVEL_FLIGHT = 0.1f;
|
||||
// [us] time after which the wind estimate is disabled if no longer updating
|
||||
@@ -122,7 +124,7 @@ void FwLateralLongitudinalControl::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
_local_pos_sub.unregisterCallback();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -490,8 +492,8 @@ int FwLateralLongitudinalControl::task_spawn(int argc, char *argv[])
|
||||
FwLateralLongitudinalControl *instance = new FwLateralLongitudinalControl(is_vtol);
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -502,8 +504,8 @@ int FwLateralLongitudinalControl::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -863,5 +865,5 @@ float FwLateralLongitudinalControl::getLoadFactor() const
|
||||
|
||||
extern "C" __EXPORT int fw_lat_lon_control_main(int argc, char *argv[])
|
||||
{
|
||||
return FwLateralLongitudinalControl::main(argc, argv);
|
||||
return ModuleBase::main(FwLateralLongitudinalControl::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -84,10 +84,12 @@
|
||||
static constexpr fixed_wing_lateral_setpoint_s empty_lateral_control_setpoint = {.timestamp = 0, .course = NAN, .airspeed_direction = NAN, .lateral_acceleration = NAN};
|
||||
static constexpr fixed_wing_longitudinal_setpoint_s empty_longitudinal_control_setpoint = {.timestamp = 0, .altitude = NAN, .height_rate = NAN, .equivalent_airspeed = NAN, .pitch_direct = NAN, .throttle_direct = NAN};
|
||||
|
||||
class FwLateralLongitudinalControl final : public ModuleBase<FwLateralLongitudinalControl>, public ModuleParams,
|
||||
class FwLateralLongitudinalControl final : public ModuleBase, public ModuleParams,
|
||||
public px4::WorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
FwLateralLongitudinalControl(bool is_vtol);
|
||||
|
||||
~FwLateralLongitudinalControl() override;
|
||||
|
||||
@@ -46,6 +46,8 @@ using matrix::Vector2d;
|
||||
using matrix::Vector3f;
|
||||
using matrix::wrap_pi;
|
||||
|
||||
ModuleBase::Descriptor FixedWingModeManager::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
const fixed_wing_lateral_setpoint_s empty_lateral_control_setpoint = {.timestamp = 0, .course = NAN, .airspeed_direction = NAN, .lateral_acceleration = NAN};
|
||||
const fixed_wing_longitudinal_setpoint_s empty_longitudinal_control_setpoint = {.timestamp = 0, .altitude = NAN, .height_rate = NAN, .equivalent_airspeed = NAN, .pitch_direct = NAN, .throttle_direct = NAN};
|
||||
|
||||
@@ -1991,7 +1993,7 @@ FixedWingModeManager::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
_local_pos_sub.unregisterCallback();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2746,8 +2748,8 @@ int FixedWingModeManager::task_spawn(int argc, char *argv[])
|
||||
FixedWingModeManager *instance = new FixedWingModeManager();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -2758,8 +2760,8 @@ int FixedWingModeManager::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -2793,5 +2795,5 @@ lateral-longitudinal controller and and controllers below that (attitude, rate).
|
||||
|
||||
extern "C" __EXPORT int fw_mode_manager_main(int argc, char *argv[])
|
||||
{
|
||||
return FixedWingModeManager::main(argc, argv);
|
||||
return ModuleBase::main(FixedWingModeManager::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -151,10 +151,12 @@ static constexpr float POST_TOUCHDOWN_CLAMP_TIME = 0.5f;
|
||||
// [] Stick deadzon
|
||||
static constexpr float kStickDeadBand = 0.06f;
|
||||
|
||||
class FixedWingModeManager final : public ModuleBase<FixedWingModeManager>, public ModuleParams,
|
||||
class FixedWingModeManager final : public ModuleBase, public ModuleParams,
|
||||
public px4::WorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
FixedWingModeManager();
|
||||
~FixedWingModeManager() override;
|
||||
|
||||
|
||||
@@ -39,6 +39,8 @@ using namespace matrix;
|
||||
using math::interpolate;
|
||||
using math::radians;
|
||||
|
||||
ModuleBase::Descriptor FixedwingRateControl::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
FixedwingRateControl::FixedwingRateControl(bool vtol) :
|
||||
ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::nav_and_controllers),
|
||||
@@ -204,7 +206,7 @@ void FixedwingRateControl::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
_vehicle_angular_velocity_sub.unregisterCallback();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -550,8 +552,8 @@ int FixedwingRateControl::task_spawn(int argc, char *argv[])
|
||||
FixedwingRateControl *instance = new FixedwingRateControl(vtol);
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -562,8 +564,8 @@ int FixedwingRateControl::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -596,5 +598,5 @@ fw_rate_control is the fixed-wing rate controller.
|
||||
|
||||
extern "C" __EXPORT int fw_rate_control_main(int argc, char *argv[])
|
||||
{
|
||||
return FixedwingRateControl::main(argc, argv);
|
||||
return ModuleBase::main(FixedwingRateControl::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -79,10 +79,12 @@ using uORB::SubscriptionData;
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
class FixedwingRateControl final : public ModuleBase<FixedwingRateControl>, public ModuleParams,
|
||||
class FixedwingRateControl final : public ModuleBase, public ModuleParams,
|
||||
public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
FixedwingRateControl(bool vtol = false);
|
||||
~FixedwingRateControl() override;
|
||||
|
||||
|
||||
@@ -38,6 +38,8 @@
|
||||
using namespace time_literals;
|
||||
using matrix::Vector3f;
|
||||
|
||||
ModuleBase::Descriptor GyroCalibration::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
GyroCalibration::GyroCalibration() :
|
||||
ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::lp_default)
|
||||
@@ -60,7 +62,7 @@ void GyroCalibration::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
ScheduleClear();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -285,8 +287,8 @@ int GyroCalibration::task_spawn(int argc, char *argv[])
|
||||
GyroCalibration *instance = new GyroCalibration();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -297,8 +299,8 @@ int GyroCalibration::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -347,5 +349,5 @@ Simple online gyroscope calibration.
|
||||
|
||||
extern "C" __EXPORT int gyro_calibration_main(int argc, char *argv[])
|
||||
{
|
||||
return GyroCalibration::main(argc, argv);
|
||||
return ModuleBase::main(GyroCalibration::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -52,9 +52,11 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
class GyroCalibration : public ModuleBase<GyroCalibration>, public ModuleParams, public px4::ScheduledWorkItem
|
||||
class GyroCalibration : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
GyroCalibration();
|
||||
~GyroCalibration() override;
|
||||
|
||||
|
||||
@@ -39,6 +39,8 @@
|
||||
|
||||
using namespace matrix;
|
||||
|
||||
ModuleBase::Descriptor GyroFFT::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
GyroFFT::GyroFFT() :
|
||||
ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::hp_default)
|
||||
@@ -304,7 +306,7 @@ void GyroFFT::Run()
|
||||
if (should_exit()) {
|
||||
_sensor_gyro_sub.unregisterCallback();
|
||||
_sensor_gyro_fifo_sub.unregisterCallback();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -682,8 +684,8 @@ int GyroFFT::task_spawn(int argc, char *argv[])
|
||||
GyroFFT *instance = new GyroFFT();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -694,8 +696,8 @@ int GyroFFT::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -737,5 +739,5 @@ int GyroFFT::print_usage(const char *reason)
|
||||
|
||||
extern "C" __EXPORT int gyro_fft_main(int argc, char *argv[])
|
||||
{
|
||||
return GyroFFT::main(argc, argv);
|
||||
return ModuleBase::main(GyroFFT::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -58,9 +58,11 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
class GyroFFT : public ModuleBase<GyroFFT>, public ModuleParams, public px4::ScheduledWorkItem
|
||||
class GyroFFT : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
GyroFFT();
|
||||
~GyroFFT() override;
|
||||
|
||||
|
||||
@@ -38,6 +38,8 @@ using namespace time_literals;
|
||||
namespace hardfault_stream
|
||||
{
|
||||
|
||||
ModuleBase::Descriptor HardfaultStream::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
HardfaultStream::HardfaultStream() :
|
||||
ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::hp_default)
|
||||
@@ -62,8 +64,8 @@ int HardfaultStream::task_spawn(int argc, char *argv[])
|
||||
return -1;
|
||||
}
|
||||
|
||||
_object.store(obj);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(obj);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
/* Schedule a cycle to start things. */
|
||||
obj->start();
|
||||
@@ -154,7 +156,7 @@ void HardfaultStream::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
ScheduleClear();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
}
|
||||
|
||||
switch (_state) {
|
||||
@@ -218,7 +220,7 @@ high enough frequency. The recommended frequency is 10 Hz or higher.
|
||||
|
||||
extern "C" __EXPORT int hardfault_stream_main(int argc, char *argv[])
|
||||
{
|
||||
return HardfaultStream::main(argc, argv);
|
||||
return ModuleBase::main(HardfaultStream::desc, argc, argv);
|
||||
}
|
||||
|
||||
} // namespace hardfault_stream
|
||||
|
||||
@@ -52,9 +52,11 @@
|
||||
namespace hardfault_stream
|
||||
{
|
||||
|
||||
class HardfaultStream : public ModuleBase<HardfaultStream>, public ModuleParams, public px4::ScheduledWorkItem
|
||||
class HardfaultStream : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
HardfaultStream();
|
||||
~HardfaultStream() override;
|
||||
|
||||
|
||||
@@ -40,6 +40,8 @@ using namespace time_literals;
|
||||
namespace internal_combustion_engine_control
|
||||
{
|
||||
|
||||
ModuleBase::Descriptor InternalCombustionEngineControl::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
InternalCombustionEngineControl::InternalCombustionEngineControl() :
|
||||
ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::lp_default)
|
||||
@@ -62,8 +64,8 @@ int InternalCombustionEngineControl::task_spawn(int argc, char *argv[])
|
||||
return -1;
|
||||
}
|
||||
|
||||
_object.store(obj);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(obj);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
/* Schedule a cycle to start things. */
|
||||
obj->start();
|
||||
@@ -80,7 +82,7 @@ void InternalCombustionEngineControl::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
ScheduleClear();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
}
|
||||
|
||||
// check for parameter updates
|
||||
@@ -423,7 +425,7 @@ The architecture is as shown below:
|
||||
|
||||
extern "C" __EXPORT int internal_combustion_engine_control_main(int argc, char *argv[])
|
||||
{
|
||||
return InternalCombustionEngineControl::main(argc, argv);
|
||||
return ModuleBase::main(InternalCombustionEngineControl::desc, argc, argv);
|
||||
}
|
||||
|
||||
} // namespace internal_combustion_engine_control
|
||||
|
||||
@@ -53,10 +53,12 @@
|
||||
namespace internal_combustion_engine_control
|
||||
{
|
||||
|
||||
class InternalCombustionEngineControl : public ModuleBase<InternalCombustionEngineControl>, public ModuleParams,
|
||||
class InternalCombustionEngineControl : public ModuleBase, public ModuleParams,
|
||||
public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
InternalCombustionEngineControl();
|
||||
~InternalCombustionEngineControl() override;
|
||||
|
||||
|
||||
@@ -45,6 +45,8 @@ using namespace time_literals;
|
||||
namespace land_detector
|
||||
{
|
||||
|
||||
ModuleBase::Descriptor LandDetector::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
LandDetector::LandDetector() :
|
||||
ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::nav_and_controllers)
|
||||
@@ -205,7 +207,7 @@ void LandDetector::Run()
|
||||
|
||||
if (should_exit()) {
|
||||
ScheduleClear();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -72,9 +72,11 @@ using namespace time_literals;
|
||||
namespace land_detector
|
||||
{
|
||||
|
||||
class LandDetector : public ModuleBase<LandDetector>, ModuleParams, px4::ScheduledWorkItem
|
||||
class LandDetector : public ModuleBase, ModuleParams, px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
LandDetector();
|
||||
virtual ~LandDetector();
|
||||
|
||||
|
||||
@@ -95,8 +95,8 @@ int LandDetector::task_spawn(int argc, char *argv[])
|
||||
strncpy(_currentMode, argv[1], sizeof(_currentMode) - 1);
|
||||
_currentMode[sizeof(_currentMode) - 1] = '\0';
|
||||
|
||||
_object.store(obj);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(obj);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
obj->start();
|
||||
|
||||
@@ -149,7 +149,7 @@ The module runs periodically on the HP work queue.
|
||||
|
||||
extern "C" __EXPORT int land_detector_main(int argc, char *argv[])
|
||||
{
|
||||
return LandDetector::main(argc, argv);
|
||||
return ModuleBase::main(LandDetector::desc, argc, argv);
|
||||
}
|
||||
|
||||
} // namespace land_detector
|
||||
|
||||
@@ -49,6 +49,8 @@ using namespace time_literals;
|
||||
namespace load_mon
|
||||
{
|
||||
|
||||
ModuleBase::Descriptor LoadMon::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
LoadMon::LoadMon() :
|
||||
ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::lp_default)
|
||||
@@ -70,8 +72,8 @@ int LoadMon::task_spawn(int argc, char *argv[])
|
||||
return -1;
|
||||
}
|
||||
|
||||
_object.store(obj);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(obj);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
/* Schedule a cycle to start things. */
|
||||
obj->start();
|
||||
@@ -114,7 +116,7 @@ void LoadMon::Run()
|
||||
#if defined (__PX4_LINUX)
|
||||
fclose(_proc_fd);
|
||||
#endif
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
}
|
||||
|
||||
perf_end(_cycle_perf);
|
||||
@@ -327,7 +329,7 @@ which will also appear in the log file.
|
||||
|
||||
extern "C" __EXPORT int load_mon_main(int argc, char *argv[])
|
||||
{
|
||||
return LoadMon::main(argc, argv);
|
||||
return ModuleBase::main(LoadMon::desc, argc, argv);
|
||||
}
|
||||
|
||||
} // namespace load_mon
|
||||
|
||||
@@ -55,12 +55,14 @@
|
||||
namespace load_mon
|
||||
{
|
||||
|
||||
class LoadMon : public ModuleBase<LoadMon>, public ModuleParams, public px4::ScheduledWorkItem
|
||||
class LoadMon : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
LoadMon();
|
||||
~LoadMon() override;
|
||||
|
||||
static Descriptor desc;
|
||||
|
||||
static int task_spawn(int argc, char *argv[]);
|
||||
|
||||
/** @see ModuleBase */
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
#include <matrix/math.hpp>
|
||||
#include <cstdlib>
|
||||
|
||||
ModuleBase::Descriptor BlockLocalPositionEstimator::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
orb_advert_t mavlink_log_pub = nullptr;
|
||||
|
||||
// required standard deviation of estimate for estimator to publish data
|
||||
@@ -165,7 +167,7 @@ void BlockLocalPositionEstimator::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
_sensors_sub.unregisterCallback();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1029,8 +1031,8 @@ BlockLocalPositionEstimator::task_spawn(int argc, char *argv[])
|
||||
BlockLocalPositionEstimator *instance = new BlockLocalPositionEstimator();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -1041,8 +1043,8 @@ BlockLocalPositionEstimator::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -1070,5 +1072,5 @@ Attitude and position estimator using an Extended Kalman Filter.
|
||||
|
||||
extern "C" __EXPORT int local_position_estimator_main(int argc, char *argv[])
|
||||
{
|
||||
return BlockLocalPositionEstimator::main(argc, argv);
|
||||
return ModuleBase::main(BlockLocalPositionEstimator::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ static const float BETA_TABLE[7] = {0,
|
||||
19.6465647819,
|
||||
};
|
||||
|
||||
class BlockLocalPositionEstimator : public ModuleBase<BlockLocalPositionEstimator>, public ModuleParams,
|
||||
class BlockLocalPositionEstimator : public ModuleBase, public ModuleParams,
|
||||
public px4::WorkItem, public control::SuperBlock
|
||||
{
|
||||
// dynamics:
|
||||
@@ -110,6 +110,8 @@ class BlockLocalPositionEstimator : public ModuleBase<BlockLocalPositionEstimato
|
||||
// land (detects when landed)): pz (always measures agl = 0)
|
||||
//
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
|
||||
BlockLocalPositionEstimator();
|
||||
~BlockLocalPositionEstimator() override = default;
|
||||
|
||||
@@ -132,7 +132,7 @@ int logger_main(int argc, char *argv[])
|
||||
return 1;
|
||||
}
|
||||
|
||||
return Logger::main(argc, argv);
|
||||
return ModuleBase::main(Logger::desc, argc, argv);
|
||||
}
|
||||
|
||||
namespace px4
|
||||
@@ -140,11 +140,13 @@ namespace px4
|
||||
namespace logger
|
||||
{
|
||||
|
||||
ModuleBase::Descriptor Logger::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
constexpr const char *Logger::LOG_ROOT[(int)LogType::Count];
|
||||
|
||||
int Logger::custom_command(int argc, char *argv[])
|
||||
{
|
||||
if (!is_running()) {
|
||||
if (!is_running(desc)) {
|
||||
print_usage("logger not running");
|
||||
return 1;
|
||||
}
|
||||
@@ -152,36 +154,43 @@ int Logger::custom_command(int argc, char *argv[])
|
||||
#ifdef __PX4_NUTTX
|
||||
|
||||
if (!strcmp(argv[0], "trigger_watchdog")) {
|
||||
get_instance()->trigger_watchdog_now();
|
||||
get_instance<Logger>(desc)->trigger_watchdog_now();
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
if (!strcmp(argv[0], "on")) {
|
||||
get_instance()->set_arm_override(true);
|
||||
get_instance<Logger>(desc)->set_arm_override(true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(argv[0], "off")) {
|
||||
get_instance()->set_arm_override(false);
|
||||
get_instance<Logger>(desc)->set_arm_override(false);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return print_usage("unknown command");
|
||||
}
|
||||
|
||||
int Logger::run_trampoline(int argc, char *argv[])
|
||||
{
|
||||
return ModuleBase::run_trampoline_impl(desc, [](int ac, char *av[]) -> ModuleBase * {
|
||||
return Logger::instantiate(ac, av);
|
||||
}, argc, argv);
|
||||
}
|
||||
|
||||
int Logger::task_spawn(int argc, char *argv[])
|
||||
{
|
||||
_task_id = px4_task_spawn_cmd("logger",
|
||||
SCHED_DEFAULT,
|
||||
SCHED_PRIORITY_LOG_CAPTURE,
|
||||
PX4_STACK_ADJUSTED(CONFIG_LOGGER_STACK_SIZE),
|
||||
(px4_main_t)&run_trampoline,
|
||||
(char *const *)argv);
|
||||
desc.task_id = px4_task_spawn_cmd("logger",
|
||||
SCHED_DEFAULT,
|
||||
SCHED_PRIORITY_LOG_CAPTURE,
|
||||
PX4_STACK_ADJUSTED(CONFIG_LOGGER_STACK_SIZE),
|
||||
(px4_main_t)&run_trampoline,
|
||||
(char *const *)argv);
|
||||
|
||||
if (_task_id < 0) {
|
||||
_task_id = -1;
|
||||
if (desc.task_id < 0) {
|
||||
desc.task_id = -1;
|
||||
return -errno;
|
||||
}
|
||||
|
||||
@@ -433,8 +442,8 @@ void Logger::update_params()
|
||||
|
||||
bool Logger::request_stop_static()
|
||||
{
|
||||
if (is_running()) {
|
||||
get_instance()->request_stop();
|
||||
if (is_running(desc)) {
|
||||
get_instance<Logger>(desc)->request_stop();
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -81,9 +81,11 @@ struct LoggerSubscription : public uORB::SubscriptionInterval {
|
||||
uint8_t msg_id{MSG_ID_INVALID};
|
||||
};
|
||||
|
||||
class Logger : public ModuleBase<Logger>, public ModuleParams
|
||||
class Logger : public ModuleBase, public ModuleParams
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
enum class LogMode {
|
||||
while_armed = 0,
|
||||
boot_until_disarm,
|
||||
@@ -114,6 +116,9 @@ public:
|
||||
/** @see ModuleBase */
|
||||
static int task_spawn(int argc, char *argv[]);
|
||||
|
||||
/** @see ModuleBase */
|
||||
static int run_trampoline(int argc, char *argv[]);
|
||||
|
||||
/** @see ModuleBase */
|
||||
static Logger *instantiate(int argc, char *argv[]);
|
||||
|
||||
|
||||
@@ -39,6 +39,8 @@ using matrix::Vector3f;
|
||||
namespace mag_bias_estimator
|
||||
{
|
||||
|
||||
ModuleBase::Descriptor MagBiasEstimator::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
MagBiasEstimator::MagBiasEstimator() :
|
||||
ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::lp_default)
|
||||
@@ -60,8 +62,8 @@ int MagBiasEstimator::task_spawn(int argc, char *argv[])
|
||||
return -1;
|
||||
}
|
||||
|
||||
_object.store(obj);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(obj);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
/* Schedule a cycle to start things. */
|
||||
obj->start();
|
||||
@@ -78,7 +80,7 @@ void MagBiasEstimator::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
ScheduleClear();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
}
|
||||
|
||||
if (_vehicle_status_sub.updated()) {
|
||||
@@ -293,7 +295,7 @@ Online magnetometer bias estimator.
|
||||
|
||||
extern "C" __EXPORT int mag_bias_estimator_main(int argc, char *argv[])
|
||||
{
|
||||
return MagBiasEstimator::main(argc, argv);
|
||||
return ModuleBase::main(MagBiasEstimator::desc, argc, argv);
|
||||
}
|
||||
|
||||
} // namespace load_mon
|
||||
|
||||
@@ -55,9 +55,11 @@
|
||||
namespace mag_bias_estimator
|
||||
{
|
||||
|
||||
class MagBiasEstimator : public ModuleBase<MagBiasEstimator>, public ModuleParams, public px4::ScheduledWorkItem
|
||||
class MagBiasEstimator : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
MagBiasEstimator();
|
||||
~MagBiasEstimator() override;
|
||||
|
||||
|
||||
@@ -37,6 +37,8 @@
|
||||
#include <lib/systemlib/mavlink_log.h>
|
||||
#include <uORB/topics/vehicle_command.h>
|
||||
|
||||
ModuleBase::Descriptor ManualControl::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
ManualControl::ManualControl() :
|
||||
ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::hp_default)
|
||||
@@ -69,7 +71,7 @@ void ManualControl::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
ScheduleClear();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -541,8 +543,8 @@ int ManualControl::task_spawn(int argc, char *argv[])
|
||||
ManualControl *instance = new ManualControl();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -553,8 +555,8 @@ int ManualControl::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -627,5 +629,5 @@ int8_t ManualControl::navStateFromParam(int32_t param_value)
|
||||
|
||||
extern "C" __EXPORT int manual_control_main(int argc, char *argv[])
|
||||
{
|
||||
return ManualControl::main(argc, argv);
|
||||
return ModuleBase::main(ManualControl::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -55,9 +55,11 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
class ManualControl : public ModuleBase<ManualControl>, public ModuleParams, public px4::ScheduledWorkItem
|
||||
class ManualControl : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
ManualControl();
|
||||
~ManualControl() override;
|
||||
|
||||
|
||||
@@ -63,10 +63,12 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
class MulticopterAttitudeControl : public ModuleBase<MulticopterAttitudeControl>, public ModuleParams,
|
||||
class MulticopterAttitudeControl : public ModuleBase, public ModuleParams,
|
||||
public px4::WorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
MulticopterAttitudeControl(bool vtol = false);
|
||||
~MulticopterAttitudeControl() override;
|
||||
|
||||
|
||||
@@ -53,6 +53,8 @@
|
||||
|
||||
using namespace matrix;
|
||||
|
||||
ModuleBase::Descriptor MulticopterAttitudeControl::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
MulticopterAttitudeControl::MulticopterAttitudeControl(bool vtol) :
|
||||
ModuleParams(nullptr),
|
||||
WorkItem(MODULE_NAME, px4::wq_configurations::nav_and_controllers),
|
||||
@@ -94,6 +96,7 @@ MulticopterAttitudeControl::parameters_updated()
|
||||
|
||||
// angular rate limits
|
||||
using math::radians;
|
||||
|
||||
_attitude_control.setRateLimit(Vector3f(radians(_param_mc_rollrate_max.get()), radians(_param_mc_pitchrate_max.get()),
|
||||
radians(_param_mc_yawrate_max.get())));
|
||||
|
||||
@@ -206,7 +209,7 @@ MulticopterAttitudeControl::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
_vehicle_attitude_sub.unregisterCallback();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -405,8 +408,8 @@ int MulticopterAttitudeControl::task_spawn(int argc, char *argv[])
|
||||
MulticopterAttitudeControl *instance = new MulticopterAttitudeControl(vtol);
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -417,8 +420,8 @@ int MulticopterAttitudeControl::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -465,5 +468,5 @@ https://www.research-collection.ethz.ch/bitstream/handle/20.500.11850/154099/eth
|
||||
*/
|
||||
extern "C" __EXPORT int mc_att_control_main(int argc, char *argv[])
|
||||
{
|
||||
return MulticopterAttitudeControl::main(argc, argv);
|
||||
return ModuleBase::main(MulticopterAttitudeControl::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -41,6 +41,8 @@
|
||||
|
||||
using namespace matrix;
|
||||
|
||||
ModuleBase::Descriptor McAutotuneAttitudeControl::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
McAutotuneAttitudeControl::McAutotuneAttitudeControl() :
|
||||
ModuleParams(nullptr),
|
||||
WorkItem(MODULE_NAME, px4::wq_configurations::hp_default)
|
||||
@@ -71,7 +73,7 @@ void McAutotuneAttitudeControl::Run()
|
||||
if (should_exit()) {
|
||||
_parameter_update_sub.unregisterCallback();
|
||||
_vehicle_torque_setpoint_sub.unregisterCallback();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -645,8 +647,8 @@ int McAutotuneAttitudeControl::task_spawn(int argc, char *argv[])
|
||||
McAutotuneAttitudeControl *instance = new McAutotuneAttitudeControl();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -657,8 +659,8 @@ int McAutotuneAttitudeControl::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -696,5 +698,5 @@ int McAutotuneAttitudeControl::print_usage(const char *reason)
|
||||
|
||||
extern "C" __EXPORT int mc_autotune_attitude_control_main(int argc, char *argv[])
|
||||
{
|
||||
return McAutotuneAttitudeControl::main(argc, argv);
|
||||
return ModuleBase::main(McAutotuneAttitudeControl::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -63,10 +63,12 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
class McAutotuneAttitudeControl : public ModuleBase<McAutotuneAttitudeControl>, public ModuleParams,
|
||||
class McAutotuneAttitudeControl : public ModuleBase, public ModuleParams,
|
||||
public px4::WorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
McAutotuneAttitudeControl();
|
||||
~McAutotuneAttitudeControl() override;
|
||||
|
||||
|
||||
@@ -43,6 +43,8 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
ModuleBase::Descriptor MulticopterHoverThrustEstimator::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
MulticopterHoverThrustEstimator::MulticopterHoverThrustEstimator() :
|
||||
ModuleParams(nullptr),
|
||||
WorkItem(MODULE_NAME, px4::wq_configurations::nav_and_controllers)
|
||||
@@ -97,7 +99,7 @@ void MulticopterHoverThrustEstimator::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
_vehicle_local_position_sub.unregisterCallback();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -265,8 +267,8 @@ int MulticopterHoverThrustEstimator::task_spawn(int argc, char *argv[])
|
||||
MulticopterHoverThrustEstimator *instance = new MulticopterHoverThrustEstimator();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -277,8 +279,8 @@ int MulticopterHoverThrustEstimator::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -316,5 +318,5 @@ int MulticopterHoverThrustEstimator::print_usage(const char *reason)
|
||||
|
||||
extern "C" __EXPORT int mc_hover_thrust_estimator_main(int argc, char *argv[])
|
||||
{
|
||||
return MulticopterHoverThrustEstimator::main(argc, argv);
|
||||
return ModuleBase::main(MulticopterHoverThrustEstimator::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -65,10 +65,12 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
class MulticopterHoverThrustEstimator : public ModuleBase<MulticopterHoverThrustEstimator>, public ModuleParams,
|
||||
class MulticopterHoverThrustEstimator : public ModuleBase, public ModuleParams,
|
||||
public px4::WorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
MulticopterHoverThrustEstimator();
|
||||
~MulticopterHoverThrustEstimator() override;
|
||||
|
||||
|
||||
@@ -45,6 +45,8 @@
|
||||
#include <chrono>
|
||||
#endif
|
||||
|
||||
ModuleBase::Descriptor MulticopterNeuralNetworkControl::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
namespace
|
||||
{
|
||||
// This number should be the number of operations in the model, like tanh and fully connected
|
||||
@@ -412,8 +414,8 @@ int MulticopterNeuralNetworkControl::task_spawn(int argc, char *argv[])
|
||||
MulticopterNeuralNetworkControl *instance = new MulticopterNeuralNetworkControl();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init() and instance->InitializeNetwork() == PX4_OK) {
|
||||
return PX4_OK;
|
||||
@@ -427,8 +429,8 @@ int MulticopterNeuralNetworkControl::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -442,7 +444,7 @@ void MulticopterNeuralNetworkControl::Run()
|
||||
UnregisterNeuralFlightMode(_arming_check_id, _mode_id);
|
||||
}
|
||||
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -624,5 +626,5 @@ Outputs: [Actuator motors(4)]
|
||||
|
||||
extern "C" __EXPORT int mc_nn_control_main(int argc, char *argv[])
|
||||
{
|
||||
return MulticopterNeuralNetworkControl::main(argc, argv);
|
||||
return ModuleBase::main(MulticopterNeuralNetworkControl::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -80,11 +80,13 @@
|
||||
#include <uORB/topics/arming_check_reply.h>
|
||||
|
||||
using namespace time_literals; // For the 1_s in the subscription interval
|
||||
class MulticopterNeuralNetworkControl : public ModuleBase<MulticopterNeuralNetworkControl>, public ModuleParams,
|
||||
class MulticopterNeuralNetworkControl : public ModuleBase, public ModuleParams,
|
||||
public px4::WorkItem
|
||||
{
|
||||
public:
|
||||
|
||||
static Descriptor desc;
|
||||
|
||||
MulticopterNeuralNetworkControl();
|
||||
~MulticopterNeuralNetworkControl() override;
|
||||
|
||||
|
||||
@@ -41,6 +41,8 @@
|
||||
|
||||
using namespace matrix;
|
||||
|
||||
ModuleBase::Descriptor MulticopterPositionControl::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
MulticopterPositionControl::MulticopterPositionControl(bool vtol) :
|
||||
ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::nav_and_controllers),
|
||||
@@ -379,7 +381,7 @@ void MulticopterPositionControl::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
_local_pos_sub.unregisterCallback();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -743,8 +745,8 @@ int MulticopterPositionControl::task_spawn(int argc, char *argv[])
|
||||
MulticopterPositionControl *instance = new MulticopterPositionControl(vtol);
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -755,8 +757,8 @@ int MulticopterPositionControl::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -793,5 +795,5 @@ logging.
|
||||
|
||||
extern "C" __EXPORT int mc_pos_control_main(int argc, char *argv[])
|
||||
{
|
||||
return MulticopterPositionControl::main(argc, argv);
|
||||
return ModuleBase::main(MulticopterPositionControl::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -70,10 +70,12 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
class MulticopterPositionControl : public ModuleBase<MulticopterPositionControl>, public ModuleParams,
|
||||
class MulticopterPositionControl : public ModuleBase, public ModuleParams,
|
||||
public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
MulticopterPositionControl(bool vtol = false);
|
||||
~MulticopterPositionControl() override;
|
||||
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
|
||||
#include <sys/stat.h>
|
||||
|
||||
ModuleBase::Descriptor Raptor::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
Raptor::Raptor(): ModuleParams(nullptr), ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::rate_ctrl)
|
||||
{
|
||||
// node state
|
||||
@@ -184,6 +186,7 @@ bool Raptor::init()
|
||||
rewind(f);
|
||||
bool successfully_loaded = false;
|
||||
using SPEC = rlt::persist::backends::tar::ReaderGroupSpecification<TI, rlt::persist::backends::tar::PosixFileData<TI>>;
|
||||
|
||||
rlt::persist::backends::tar::ReaderGroup<SPEC> reader_group;
|
||||
reader_group.data.f = f;
|
||||
reader_group.data.size = size;
|
||||
@@ -453,7 +456,7 @@ void Raptor::Run()
|
||||
}
|
||||
|
||||
ScheduleClear();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -969,8 +972,8 @@ int Raptor::task_spawn(int argc, char *argv[])
|
||||
Raptor *instance = new Raptor();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -981,8 +984,8 @@ int Raptor::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -1006,7 +1009,7 @@ int Raptor::custom_command(int argc, char *argv[])
|
||||
return PX4_ERROR;
|
||||
}
|
||||
|
||||
Raptor *instance = get_instance();
|
||||
Raptor *instance = get_instance<Raptor>(desc);
|
||||
|
||||
if (instance == nullptr) {
|
||||
PX4_ERR("mc_raptor is not running");
|
||||
@@ -1073,5 +1076,5 @@ RAPTOR Policy Flight Mode
|
||||
|
||||
extern "C" __EXPORT int mc_raptor_main(int argc, char *argv[])
|
||||
{
|
||||
return Raptor::main(argc, argv);
|
||||
return ModuleBase::main(Raptor::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -69,9 +69,11 @@ namespace rlt = rl_tools;
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
class Raptor : public ModuleBase<Raptor>, public ModuleParams, public px4::ScheduledWorkItem
|
||||
class Raptor : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
Raptor();
|
||||
~Raptor() override;
|
||||
|
||||
|
||||
@@ -43,6 +43,8 @@ using namespace matrix;
|
||||
using namespace time_literals;
|
||||
using math::radians;
|
||||
|
||||
ModuleBase::Descriptor MulticopterRateControl::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
MulticopterRateControl::MulticopterRateControl(bool vtol) :
|
||||
ModuleParams(nullptr),
|
||||
WorkItem(MODULE_NAME, px4::wq_configurations::rate_ctrl),
|
||||
@@ -104,7 +106,7 @@ MulticopterRateControl::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
_vehicle_angular_velocity_sub.unregisterCallback();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -308,8 +310,8 @@ int MulticopterRateControl::task_spawn(int argc, char *argv[])
|
||||
MulticopterRateControl *instance = new MulticopterRateControl(vtol);
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -320,8 +322,8 @@ int MulticopterRateControl::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -357,5 +359,5 @@ The controller has a PID loop for angular rate error.
|
||||
|
||||
extern "C" __EXPORT int mc_rate_control_main(int argc, char *argv[])
|
||||
{
|
||||
return MulticopterRateControl::main(argc, argv);
|
||||
return ModuleBase::main(MulticopterRateControl::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -63,9 +63,11 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
class MulticopterRateControl : public ModuleBase<MulticopterRateControl>, public ModuleParams, public px4::WorkItem
|
||||
class MulticopterRateControl : public ModuleBase, public ModuleParams, public px4::WorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
MulticopterRateControl(bool vtol = false);
|
||||
~MulticopterRateControl() override;
|
||||
|
||||
|
||||
@@ -42,6 +42,8 @@
|
||||
#include "loiter.h"
|
||||
#include "navigator.h"
|
||||
|
||||
ModuleBase::Descriptor Navigator::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
Loiter::Loiter(Navigator *navigator) :
|
||||
MissionBlock(navigator, vehicle_status_s::NAVIGATION_STATE_AUTO_LOITER),
|
||||
ModuleParams(navigator)
|
||||
|
||||
@@ -97,9 +97,11 @@ using namespace time_literals;
|
||||
*/
|
||||
#define NAVIGATOR_MODE_ARRAY_SIZE 8
|
||||
|
||||
class Navigator : public ModuleBase<Navigator>, public ModuleParams
|
||||
class Navigator : public ModuleBase, public ModuleParams
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
Navigator();
|
||||
~Navigator() override;
|
||||
|
||||
@@ -109,6 +111,9 @@ public:
|
||||
/** @see ModuleBase */
|
||||
static int task_spawn(int argc, char *argv[]);
|
||||
|
||||
/** @see ModuleBase */
|
||||
static int run_trampoline(int argc, char *argv[]);
|
||||
|
||||
/** @see ModuleBase */
|
||||
static Navigator *instantiate(int argc, char *argv[]);
|
||||
|
||||
|
||||
@@ -1097,17 +1097,24 @@ void Navigator::geofence_breach_check()
|
||||
}
|
||||
}
|
||||
|
||||
int Navigator::run_trampoline(int argc, char *argv[])
|
||||
{
|
||||
return ModuleBase::run_trampoline_impl(desc, [](int ac, char *av[]) -> ModuleBase * {
|
||||
return Navigator::instantiate(ac, av);
|
||||
}, argc, argv);
|
||||
}
|
||||
|
||||
int Navigator::task_spawn(int argc, char *argv[])
|
||||
{
|
||||
_task_id = px4_task_spawn_cmd("navigator",
|
||||
SCHED_DEFAULT,
|
||||
SCHED_PRIORITY_NAVIGATION,
|
||||
PX4_STACK_ADJUSTED(2230),
|
||||
(px4_main_t)&run_trampoline,
|
||||
(char *const *)argv);
|
||||
desc.task_id = px4_task_spawn_cmd("navigator",
|
||||
SCHED_DEFAULT,
|
||||
SCHED_PRIORITY_NAVIGATION,
|
||||
PX4_STACK_ADJUSTED(2230),
|
||||
(px4_main_t)&run_trampoline,
|
||||
(char *const *)argv);
|
||||
|
||||
if (_task_id < 0) {
|
||||
_task_id = -1;
|
||||
if (desc.task_id < 0) {
|
||||
desc.task_id = -1;
|
||||
return -errno;
|
||||
}
|
||||
|
||||
@@ -1336,20 +1343,20 @@ bool Navigator::force_vtol()
|
||||
|
||||
int Navigator::custom_command(int argc, char *argv[])
|
||||
{
|
||||
if (!is_running()) {
|
||||
if (!is_running(desc)) {
|
||||
print_usage("not running");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!strcmp(argv[0], "fencefile")) {
|
||||
get_instance()->load_fence_from_file(GEOFENCE_FILENAME);
|
||||
get_instance<Navigator>(desc)->load_fence_from_file(GEOFENCE_FILENAME);
|
||||
return 0;
|
||||
|
||||
#if CONFIG_NAVIGATOR_ADSB
|
||||
|
||||
} else if (!strcmp(argv[0], "fake_traffic")) {
|
||||
|
||||
get_instance()->run_fake_traffic();
|
||||
get_instance<Navigator>(desc)->run_fake_traffic();
|
||||
|
||||
return 0;
|
||||
#endif // CONFIG_NAVIGATOR_ADSB
|
||||
@@ -1717,5 +1724,5 @@ controller.
|
||||
*/
|
||||
extern "C" __EXPORT int navigator_main(int argc, char *argv[])
|
||||
{
|
||||
return Navigator::main(argc, argv);
|
||||
return ModuleBase::main(Navigator::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -32,6 +32,8 @@
|
||||
****************************************************************************/
|
||||
#include "payload_deliverer.h"
|
||||
|
||||
ModuleBase::Descriptor PayloadDeliverer::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
PayloadDeliverer::PayloadDeliverer()
|
||||
: ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::lp_default)
|
||||
@@ -93,7 +95,7 @@ void PayloadDeliverer::Run()
|
||||
if (should_exit()) {
|
||||
ScheduleClear();
|
||||
_vehicle_command_sub.unregisterCallback();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -317,15 +319,15 @@ int PayloadDeliverer::custom_command(int argc, char *argv[])
|
||||
if (argc >= 1) {
|
||||
// Tests the basic payload open / close ability
|
||||
if (strcmp(argv[0], "gripper_test") == 0) {
|
||||
get_instance()->gripper_test();
|
||||
get_instance<PayloadDeliverer>(desc)->gripper_test();
|
||||
return 0;
|
||||
|
||||
} else if (strcmp(argv[0], "gripper_open") == 0) {
|
||||
get_instance()->gripper_open();
|
||||
get_instance<PayloadDeliverer>(desc)->gripper_open();
|
||||
return 0;
|
||||
|
||||
} else if (strcmp(argv[0], "gripper_close") == 0) {
|
||||
get_instance()->gripper_close();
|
||||
get_instance<PayloadDeliverer>(desc)->gripper_close();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -362,8 +364,8 @@ int PayloadDeliverer::task_spawn(int argc, char *argv[])
|
||||
PayloadDeliverer *instance = new PayloadDeliverer();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -375,13 +377,13 @@ int PayloadDeliverer::task_spawn(int argc, char *argv[])
|
||||
|
||||
// Cleanup instance in memory and mark this module as invalid to run
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
|
||||
int payload_deliverer_main(int argc, char *argv[])
|
||||
{
|
||||
return PayloadDeliverer::main(argc, argv);
|
||||
return ModuleBase::main(PayloadDeliverer::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -69,9 +69,11 @@ static constexpr int8_t GRIPPER_ACTION_NONE = -1;
|
||||
*
|
||||
* This module communicates with the Navigator which handles publishing such vehicle commands.
|
||||
*/
|
||||
class PayloadDeliverer : public ModuleBase<PayloadDeliverer>, public ModuleParams, public px4::ScheduledWorkItem
|
||||
class PayloadDeliverer : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
PayloadDeliverer();
|
||||
|
||||
/** @see ModuleBase **/
|
||||
|
||||
@@ -44,6 +44,8 @@ using namespace time_literals;
|
||||
namespace rc_update
|
||||
{
|
||||
|
||||
ModuleBase::Descriptor RCUpdate::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
// TODO: find a better home for this
|
||||
static bool operator ==(const manual_control_switches_s &a, const manual_control_switches_s &b)
|
||||
{
|
||||
@@ -336,7 +338,7 @@ void RCUpdate::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
_input_rc_sub.unregisterCallback();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -691,8 +693,8 @@ int RCUpdate::task_spawn(int argc, char *argv[])
|
||||
RCUpdate *instance = new RCUpdate();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -703,8 +705,8 @@ int RCUpdate::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -763,5 +765,5 @@ To reduce control latency, the module is scheduled on input_rc publications.
|
||||
|
||||
extern "C" __EXPORT int rc_update_main(int argc, char *argv[])
|
||||
{
|
||||
return rc_update::RCUpdate::main(argc, argv);
|
||||
return ModuleBase::main(rc_update::RCUpdate::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -70,9 +70,11 @@ namespace rc_update
|
||||
*
|
||||
* Handling of RC updates
|
||||
*/
|
||||
class RCUpdate : public ModuleBase<RCUpdate>, public ModuleParams, public px4::WorkItem
|
||||
class RCUpdate : public ModuleBase, public ModuleParams, public px4::WorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
RCUpdate();
|
||||
~RCUpdate() override;
|
||||
|
||||
|
||||
@@ -74,6 +74,8 @@ using namespace time_literals;
|
||||
namespace px4
|
||||
{
|
||||
|
||||
ModuleBase::Descriptor Replay::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
char *Replay::_replay_file = nullptr;
|
||||
|
||||
Replay::CompatSensorCombinedDtType::CompatSensorCombinedDtType(int gyro_integral_dt_offset_log,
|
||||
@@ -1148,6 +1150,14 @@ Replay::custom_command(int argc, char *argv[])
|
||||
return print_usage("unknown command");
|
||||
}
|
||||
|
||||
int
|
||||
Replay::run_trampoline(int argc, char *argv[])
|
||||
{
|
||||
return ModuleBase::run_trampoline_impl(desc, [](int ac, char *av[]) -> ModuleBase * {
|
||||
return Replay::instantiate(ac, av);
|
||||
}, argc, argv);
|
||||
}
|
||||
|
||||
int
|
||||
Replay::task_spawn(int argc, char *argv[])
|
||||
{
|
||||
@@ -1161,15 +1171,15 @@ Replay::task_spawn(int argc, char *argv[])
|
||||
return -1;
|
||||
}
|
||||
|
||||
_task_id = px4_task_spawn_cmd("replay",
|
||||
SCHED_DEFAULT,
|
||||
SCHED_PRIORITY_MAX - 5,
|
||||
4000,
|
||||
(px4_main_t)&run_trampoline,
|
||||
(char *const *)argv);
|
||||
desc.task_id = px4_task_spawn_cmd("replay",
|
||||
SCHED_DEFAULT,
|
||||
SCHED_PRIORITY_MAX - 5,
|
||||
4000,
|
||||
(px4_main_t)&run_trampoline,
|
||||
(char *const *)argv);
|
||||
|
||||
if (_task_id < 0) {
|
||||
_task_id = -1;
|
||||
if (desc.task_id < 0) {
|
||||
desc.task_id = -1;
|
||||
return -errno;
|
||||
}
|
||||
|
||||
|
||||
@@ -55,9 +55,11 @@ namespace px4
|
||||
* to replay. This is necessary because data messages from different subscriptions don't need to be in
|
||||
* monotonic increasing order.
|
||||
*/
|
||||
class Replay : public ModuleBase<Replay>
|
||||
class Replay : public ModuleBase
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
Replay() = default;
|
||||
|
||||
virtual ~Replay();
|
||||
@@ -65,6 +67,9 @@ public:
|
||||
/** @see ModuleBase */
|
||||
static int task_spawn(int argc, char *argv[]);
|
||||
|
||||
/** @see ModuleBase */
|
||||
static int run_trampoline(int argc, char *argv[]);
|
||||
|
||||
/** @see ModuleBase */
|
||||
static Replay *instantiate(int argc, char *argv[]);
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#include <cstring>
|
||||
#include <drivers/drv_hrt.h>
|
||||
#include <px4_platform_common/defines.h>
|
||||
#include <px4_platform_common/posix.h>
|
||||
|
||||
@@ -46,5 +46,5 @@ replay_main(int argc, char *argv[])
|
||||
Replay::setupReplayFile(logfile);
|
||||
}
|
||||
|
||||
return Replay::main(argc, argv);
|
||||
return ModuleBase::main(Replay::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -35,6 +35,8 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
ModuleBase::Descriptor RoverAckermann::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
RoverAckermann::RoverAckermann() :
|
||||
ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::rate_ctrl)
|
||||
@@ -194,8 +196,8 @@ int RoverAckermann::task_spawn(int argc, char *argv[])
|
||||
RoverAckermann *instance = new RoverAckermann();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -206,8 +208,8 @@ int RoverAckermann::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -237,5 +239,5 @@ Rover ackermann module.
|
||||
|
||||
extern "C" __EXPORT int rover_ackermann_main(int argc, char *argv[])
|
||||
{
|
||||
return RoverAckermann::main(argc, argv);
|
||||
return ModuleBase::main(RoverAckermann::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -60,10 +60,12 @@
|
||||
#include "AckermannDriveModes/AckermannManualMode/AckermannManualMode.hpp"
|
||||
#include "AckermannDriveModes/AckermannOffboardMode/AckermannOffboardMode.hpp"
|
||||
|
||||
class RoverAckermann : public ModuleBase<RoverAckermann>, public ModuleParams,
|
||||
class RoverAckermann : public ModuleBase, public ModuleParams,
|
||||
public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
/**
|
||||
* @brief Constructor for RoverAckermann
|
||||
*/
|
||||
|
||||
@@ -35,6 +35,8 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
ModuleBase::Descriptor RoverDifferential::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
RoverDifferential::RoverDifferential() :
|
||||
ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::rate_ctrl)
|
||||
@@ -195,8 +197,8 @@ int RoverDifferential::task_spawn(int argc, char *argv[])
|
||||
RoverDifferential *instance = new RoverDifferential();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -207,8 +209,8 @@ int RoverDifferential::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -238,5 +240,5 @@ Rover differential module.
|
||||
|
||||
extern "C" __EXPORT int rover_differential_main(int argc, char *argv[])
|
||||
{
|
||||
return RoverDifferential::main(argc, argv);
|
||||
return ModuleBase::main(RoverDifferential::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -59,10 +59,12 @@
|
||||
#include "DifferentialDriveModes/DifferentialManualMode/DifferentialManualMode.hpp"
|
||||
#include "DifferentialDriveModes/DifferentialOffboardMode/DifferentialOffboardMode.hpp"
|
||||
|
||||
class RoverDifferential : public ModuleBase<RoverDifferential>, public ModuleParams,
|
||||
class RoverDifferential : public ModuleBase, public ModuleParams,
|
||||
public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
/**
|
||||
* @brief Constructor for RoverDifferential
|
||||
*/
|
||||
|
||||
@@ -35,6 +35,8 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
ModuleBase::Descriptor RoverMecanum::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
RoverMecanum::RoverMecanum() :
|
||||
ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::rate_ctrl)
|
||||
@@ -195,8 +197,8 @@ int RoverMecanum::task_spawn(int argc, char *argv[])
|
||||
RoverMecanum *instance = new RoverMecanum();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -207,8 +209,8 @@ int RoverMecanum::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -238,5 +240,5 @@ Rover mecanum module.
|
||||
|
||||
extern "C" __EXPORT int rover_mecanum_main(int argc, char *argv[])
|
||||
{
|
||||
return RoverMecanum::main(argc, argv);
|
||||
return ModuleBase::main(RoverMecanum::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -59,10 +59,12 @@
|
||||
#include "MecanumDriveModes/MecanumManualMode/MecanumManualMode.hpp"
|
||||
#include "MecanumDriveModes/MecanumOffboardMode/MecanumOffboardMode.hpp"
|
||||
|
||||
class RoverMecanum : public ModuleBase<RoverMecanum>, public ModuleParams,
|
||||
class RoverMecanum : public ModuleBase, public ModuleParams,
|
||||
public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
/**
|
||||
* @brief Constructor for RoverMecanum
|
||||
*/
|
||||
|
||||
@@ -43,6 +43,8 @@
|
||||
|
||||
#include "sensors.hpp"
|
||||
|
||||
ModuleBase::Descriptor Sensors::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
Sensors::Sensors(bool hil_enabled) :
|
||||
ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::nav_and_controllers),
|
||||
@@ -502,7 +504,7 @@ void Sensors::Run()
|
||||
sub.unregisterCallback();
|
||||
}
|
||||
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -647,8 +649,8 @@ int Sensors::task_spawn(int argc, char *argv[])
|
||||
Sensors *instance = new Sensors(hil_enabled);
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -659,8 +661,8 @@ int Sensors::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -775,5 +777,5 @@ It runs in its own thread and polls on the currently selected gyro topic.
|
||||
|
||||
extern "C" __EXPORT int sensors_main(int argc, char *argv[])
|
||||
{
|
||||
return Sensors::main(argc, argv);
|
||||
return ModuleBase::main(Sensors::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -91,9 +91,11 @@
|
||||
using namespace sensors;
|
||||
using namespace time_literals;
|
||||
|
||||
class Sensors : public ModuleBase<Sensors>, public ModuleParams, public px4::ScheduledWorkItem
|
||||
class Sensors : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
explicit Sensors(bool hil_enabled);
|
||||
~Sensors() override;
|
||||
|
||||
|
||||
@@ -33,6 +33,8 @@
|
||||
|
||||
#include "BatterySimulator.hpp"
|
||||
|
||||
ModuleBase::Descriptor BatterySimulator::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
BatterySimulator::BatterySimulator() :
|
||||
ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::hp_default),
|
||||
@@ -55,7 +57,7 @@ void BatterySimulator::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
ScheduleClear();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -175,8 +177,8 @@ int BatterySimulator::task_spawn(int argc, char *argv[])
|
||||
BatterySimulator *instance = new BatterySimulator();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -187,8 +189,8 @@ int BatterySimulator::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -220,5 +222,5 @@ int BatterySimulator::print_usage(const char *reason)
|
||||
|
||||
extern "C" __EXPORT int battery_simulator_main(int argc, char *argv[])
|
||||
{
|
||||
return BatterySimulator::main(argc, argv);
|
||||
return ModuleBase::main(BatterySimulator::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -50,9 +50,11 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
class BatterySimulator : public ModuleBase<BatterySimulator>, public ModuleParams, public px4::ScheduledWorkItem
|
||||
class BatterySimulator : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
BatterySimulator();
|
||||
~BatterySimulator() override;
|
||||
|
||||
|
||||
@@ -43,6 +43,8 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
ModuleBase::Descriptor GZBridge::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
GZBridge::GZBridge(const std::string &world, const std::string &model_name) :
|
||||
ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::rate_ctrl),
|
||||
@@ -170,7 +172,7 @@ void GZBridge::Run()
|
||||
_mixing_interface_wheel.stop();
|
||||
_gimbal.stop();
|
||||
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -983,13 +985,13 @@ int GZBridge::task_spawn(int argc, char *argv[])
|
||||
return PX4_ERROR;
|
||||
}
|
||||
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init() != PX4_OK) {
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
return PX4_ERROR;
|
||||
}
|
||||
|
||||
@@ -1038,5 +1040,5 @@ int GZBridge::print_usage(const char *reason)
|
||||
|
||||
extern "C" __EXPORT int gz_bridge_main(int argc, char *argv[])
|
||||
{
|
||||
return GZBridge::main(argc, argv);
|
||||
return ModuleBase::main(GZBridge::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -84,9 +84,11 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
class GZBridge : public ModuleBase<GZBridge>, public ModuleParams, public px4::ScheduledWorkItem
|
||||
class GZBridge : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
GZBridge(const std::string &world, const std::string &model_name);
|
||||
~GZBridge() override;
|
||||
|
||||
|
||||
@@ -41,6 +41,8 @@
|
||||
|
||||
#include <px4_platform_common/sem.hpp>
|
||||
|
||||
ModuleBase::Descriptor PWMSim::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
PWMSim::PWMSim(bool hil_mode_enabled) :
|
||||
OutputModuleInterface(MODULE_NAME, px4::wq_configurations::hp_default)
|
||||
{
|
||||
@@ -103,7 +105,7 @@ void PWMSim::Run()
|
||||
ScheduleClear();
|
||||
_mixing_output.unregister();
|
||||
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -146,8 +148,8 @@ int PWMSim::task_spawn(int argc, char *argv[])
|
||||
return -1;
|
||||
}
|
||||
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
instance->ScheduleNow();
|
||||
return 0;
|
||||
}
|
||||
@@ -195,5 +197,5 @@ It is used in SITL and HITL.
|
||||
|
||||
extern "C" __EXPORT int pwm_out_sim_main(int argc, char *argv[])
|
||||
{
|
||||
return PWMSim::main(argc, argv);
|
||||
return ModuleBase::main(PWMSim::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -52,9 +52,11 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
class PWMSim : public ModuleBase<PWMSim>, public OutputModuleInterface
|
||||
class PWMSim : public ModuleBase, public OutputModuleInterface
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
PWMSim(bool hil_mode_enabled);
|
||||
~PWMSim() override;
|
||||
|
||||
|
||||
@@ -39,6 +39,8 @@
|
||||
|
||||
using namespace matrix;
|
||||
|
||||
ModuleBase::Descriptor SensorAgpSim::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
SensorAgpSim::SensorAgpSim() :
|
||||
ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::hp_default)
|
||||
@@ -87,7 +89,7 @@ void SensorAgpSim::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
ScheduleClear();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -153,8 +155,8 @@ int SensorAgpSim::task_spawn(int argc, char *argv[])
|
||||
SensorAgpSim *instance = new SensorAgpSim();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -165,8 +167,8 @@ int SensorAgpSim::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -198,5 +200,5 @@ Module to simulate auxiliary global position measurements with optional failure
|
||||
|
||||
extern "C" __EXPORT int sensor_agp_sim_main(int argc, char *argv[])
|
||||
{
|
||||
return SensorAgpSim::main(argc, argv);
|
||||
return ModuleBase::main(SensorAgpSim::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -47,9 +47,11 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
class SensorAgpSim : public ModuleBase<SensorAgpSim>, public ModuleParams, public px4::ScheduledWorkItem
|
||||
class SensorAgpSim : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
SensorAgpSim();
|
||||
~SensorAgpSim() override;
|
||||
|
||||
|
||||
@@ -39,6 +39,8 @@
|
||||
|
||||
using namespace matrix;
|
||||
|
||||
ModuleBase::Descriptor SensorAirspeedSim::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
SensorAirspeedSim::SensorAirspeedSim() :
|
||||
ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::hp_default)
|
||||
@@ -91,7 +93,7 @@ void SensorAirspeedSim::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
ScheduleClear();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -159,8 +161,8 @@ int SensorAirspeedSim::task_spawn(int argc, char *argv[])
|
||||
SensorAirspeedSim *instance = new SensorAirspeedSim();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -171,8 +173,8 @@ int SensorAirspeedSim::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -204,5 +206,5 @@ int SensorAirspeedSim::print_usage(const char *reason)
|
||||
|
||||
extern "C" __EXPORT int sensor_airspeed_sim_main(int argc, char *argv[])
|
||||
{
|
||||
return SensorAirspeedSim::main(argc, argv);
|
||||
return ModuleBase::main(SensorAirspeedSim::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -55,9 +55,11 @@ static constexpr float PRESSURE_MSL = 101325.0; // pressure at MSL [Pa]
|
||||
static constexpr float LAPSE_RATE = 0.0065; // reduction in temperature with altitude for troposphere [K/m]
|
||||
static constexpr float AIR_DENSITY_MSL = 1.225; // air density at MSL [kg/m^3]
|
||||
|
||||
class SensorAirspeedSim : public ModuleBase<SensorAirspeedSim>, public ModuleParams, public px4::ScheduledWorkItem
|
||||
class SensorAirspeedSim : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
SensorAirspeedSim();
|
||||
~SensorAirspeedSim() override;
|
||||
|
||||
|
||||
@@ -37,6 +37,8 @@
|
||||
|
||||
using namespace matrix;
|
||||
|
||||
ModuleBase::Descriptor SensorBaroSim::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
SensorBaroSim::SensorBaroSim() :
|
||||
ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::hp_default)
|
||||
@@ -90,7 +92,7 @@ void SensorBaroSim::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
ScheduleClear();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -183,8 +185,8 @@ int SensorBaroSim::task_spawn(int argc, char *argv[])
|
||||
SensorBaroSim *instance = new SensorBaroSim();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -195,8 +197,8 @@ int SensorBaroSim::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -228,5 +230,5 @@ int SensorBaroSim::print_usage(const char *reason)
|
||||
|
||||
extern "C" __EXPORT int sensor_baro_sim_main(int argc, char *argv[])
|
||||
{
|
||||
return SensorBaroSim::main(argc, argv);
|
||||
return ModuleBase::main(SensorBaroSim::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -48,9 +48,11 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
class SensorBaroSim : public ModuleBase<SensorBaroSim>, public ModuleParams, public px4::ScheduledWorkItem
|
||||
class SensorBaroSim : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
SensorBaroSim();
|
||||
~SensorBaroSim() override;
|
||||
|
||||
|
||||
@@ -39,6 +39,8 @@
|
||||
|
||||
using namespace matrix;
|
||||
|
||||
ModuleBase::Descriptor SensorGpsSim::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
SensorGpsSim::SensorGpsSim() :
|
||||
ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::hp_default)
|
||||
@@ -91,7 +93,7 @@ void SensorGpsSim::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
ScheduleClear();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -187,8 +189,8 @@ int SensorGpsSim::task_spawn(int argc, char *argv[])
|
||||
SensorGpsSim *instance = new SensorGpsSim();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -199,8 +201,8 @@ int SensorGpsSim::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -232,5 +234,5 @@ int SensorGpsSim::print_usage(const char *reason)
|
||||
|
||||
extern "C" __EXPORT int sensor_gps_sim_main(int argc, char *argv[])
|
||||
{
|
||||
return SensorGpsSim::main(argc, argv);
|
||||
return ModuleBase::main(SensorGpsSim::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -48,9 +48,11 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
class SensorGpsSim : public ModuleBase<SensorGpsSim>, public ModuleParams, public px4::ScheduledWorkItem
|
||||
class SensorGpsSim : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
SensorGpsSim();
|
||||
~SensorGpsSim() override;
|
||||
|
||||
|
||||
@@ -38,6 +38,8 @@
|
||||
|
||||
using namespace matrix;
|
||||
|
||||
ModuleBase::Descriptor SensorMagSim::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
SensorMagSim::SensorMagSim() :
|
||||
ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::hp_default)
|
||||
@@ -91,7 +93,7 @@ void SensorMagSim::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
ScheduleClear();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -147,8 +149,8 @@ int SensorMagSim::task_spawn(int argc, char *argv[])
|
||||
SensorMagSim *instance = new SensorMagSim();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -159,8 +161,8 @@ int SensorMagSim::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -192,5 +194,5 @@ int SensorMagSim::print_usage(const char *reason)
|
||||
|
||||
extern "C" __EXPORT int sensor_mag_sim_main(int argc, char *argv[])
|
||||
{
|
||||
return SensorMagSim::main(argc, argv);
|
||||
return ModuleBase::main(SensorMagSim::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -48,9 +48,11 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
class SensorMagSim : public ModuleBase<SensorMagSim>, public ModuleParams, public px4::ScheduledWorkItem
|
||||
class SensorMagSim : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
SensorMagSim();
|
||||
~SensorMagSim() override;
|
||||
|
||||
|
||||
@@ -53,6 +53,8 @@ using namespace math;
|
||||
using namespace matrix;
|
||||
using namespace time_literals;
|
||||
|
||||
ModuleBase::Descriptor Sih::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
Sih::Sih() :
|
||||
ModuleParams(nullptr)
|
||||
{}
|
||||
@@ -84,7 +86,7 @@ void Sih::run()
|
||||
#else
|
||||
realtime_loop();
|
||||
#endif
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
}
|
||||
|
||||
#if defined(ENABLE_LOCKSTEP_SCHEDULER)
|
||||
@@ -845,17 +847,24 @@ int Sih::print_status()
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Sih::run_trampoline(int argc, char *argv[])
|
||||
{
|
||||
return ModuleBase::run_trampoline_impl(desc, [](int ac, char *av[]) -> ModuleBase * {
|
||||
return Sih::instantiate(ac, av);
|
||||
}, argc, argv);
|
||||
}
|
||||
|
||||
int Sih::task_spawn(int argc, char *argv[])
|
||||
{
|
||||
_task_id = px4_task_spawn_cmd("sih",
|
||||
SCHED_DEFAULT,
|
||||
SCHED_PRIORITY_MAX,
|
||||
1560,
|
||||
(px4_main_t)&run_trampoline,
|
||||
(char *const *)argv);
|
||||
desc.task_id = px4_task_spawn_cmd("sih",
|
||||
SCHED_DEFAULT,
|
||||
SCHED_PRIORITY_MAX,
|
||||
1560,
|
||||
(px4_main_t)&run_trampoline,
|
||||
(char *const *)argv);
|
||||
|
||||
if (_task_id < 0) {
|
||||
_task_id = -1;
|
||||
if (desc.task_id < 0) {
|
||||
desc.task_id = -1;
|
||||
return -errno;
|
||||
}
|
||||
|
||||
@@ -914,5 +923,5 @@ Most of the variables are declared global in the .hpp file to avoid stack overfl
|
||||
|
||||
extern "C" __EXPORT int simulator_sih_main(int argc, char *argv[])
|
||||
{
|
||||
return Sih::main(argc, argv);
|
||||
return ModuleBase::main(Sih::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -86,15 +86,20 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
class Sih : public ModuleBase<Sih>, public ModuleParams
|
||||
class Sih : public ModuleBase, public ModuleParams
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
Sih();
|
||||
virtual ~Sih();
|
||||
|
||||
/** @see ModuleBase */
|
||||
static int task_spawn(int argc, char *argv[]);
|
||||
|
||||
/** @see ModuleBase */
|
||||
static int run_trampoline(int argc, char *argv[]);
|
||||
|
||||
/** @see ModuleBase */
|
||||
static Sih *instantiate(int argc, char *argv[]);
|
||||
|
||||
|
||||
@@ -33,6 +33,8 @@
|
||||
|
||||
#include "SystemPowerSimulator.hpp"
|
||||
|
||||
ModuleBase::Descriptor SystemPowerSimulator::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
SystemPowerSimulator::SystemPowerSimulator() :
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::hp_default)
|
||||
{
|
||||
@@ -53,7 +55,7 @@ void SystemPowerSimulator::Run()
|
||||
{
|
||||
if (should_exit()) {
|
||||
ScheduleClear();
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -81,8 +83,8 @@ int SystemPowerSimulator::task_spawn(int argc, char *argv[])
|
||||
SystemPowerSimulator *instance = new SystemPowerSimulator();
|
||||
|
||||
if (instance) {
|
||||
_object.store(instance);
|
||||
_task_id = task_id_is_work_queue;
|
||||
desc.object.store(instance);
|
||||
desc.task_id = task_id_is_work_queue;
|
||||
|
||||
if (instance->init()) {
|
||||
return PX4_OK;
|
||||
@@ -93,8 +95,8 @@ int SystemPowerSimulator::task_spawn(int argc, char *argv[])
|
||||
}
|
||||
|
||||
delete instance;
|
||||
_object.store(nullptr);
|
||||
_task_id = -1;
|
||||
desc.object.store(nullptr);
|
||||
desc.task_id = -1;
|
||||
|
||||
return PX4_ERROR;
|
||||
}
|
||||
@@ -127,5 +129,5 @@ int SystemPowerSimulator::print_usage(const char *reason)
|
||||
|
||||
extern "C" __EXPORT int system_power_simulator_main(int argc, char *argv[])
|
||||
{
|
||||
return SystemPowerSimulator::main(argc, argv);
|
||||
return ModuleBase::main(SystemPowerSimulator::desc, argc, argv);
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user