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:
Jacob Dahl
2026-02-18 17:17:17 -09:00
committed by GitHub
parent 657854ae1b
commit ce3e62841f
227 changed files with 1741 additions and 1496 deletions
@@ -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;
+19 -10
View File
@@ -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);
}
+6 -1
View File
@@ -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);
}
@@ -44,9 +44,11 @@
using namespace time_literals;
class SystemPowerSimulator : public ModuleBase<SystemPowerSimulator>, public px4::ScheduledWorkItem
class SystemPowerSimulator : public ModuleBase, public px4::ScheduledWorkItem
{
public:
static Descriptor desc;
SystemPowerSimulator();
~SystemPowerSimulator() override;