mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-21 09:23: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:
@@ -44,6 +44,8 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
ModuleBase::Descriptor CrsfRc::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
#define CRSF_BAUDRATE 420000
|
||||
|
||||
CrsfRc::CrsfRc(const char *device) :
|
||||
@@ -109,8 +111,8 @@ int CrsfRc::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;
|
||||
|
||||
instance->ScheduleNow();
|
||||
|
||||
@@ -128,7 +130,7 @@ void CrsfRc::Run()
|
||||
_uart = nullptr;
|
||||
}
|
||||
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -548,7 +550,7 @@ int CrsfRc::custom_command(int argc, char *argv[])
|
||||
#ifdef CONFIG_RC_CRSF_INJECT
|
||||
|
||||
if (!strcmp(argv[0], "start")) {
|
||||
if (is_running()) {
|
||||
if (is_running(desc)) {
|
||||
return print_usage("already running");
|
||||
}
|
||||
|
||||
@@ -559,7 +561,7 @@ int CrsfRc::custom_command(int argc, char *argv[])
|
||||
}
|
||||
}
|
||||
|
||||
if (!is_running()) {
|
||||
if (!is_running(desc)) {
|
||||
return print_usage("not running");
|
||||
}
|
||||
|
||||
@@ -612,5 +614,5 @@ This module parses the CRSF RC uplink protocol and generates CRSF downlink telem
|
||||
|
||||
extern "C" __EXPORT int crsf_rc_main(int argc, char *argv[])
|
||||
{
|
||||
return CrsfRc::main(argc, argv);
|
||||
return ModuleBase::main(CrsfRc::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -56,9 +56,11 @@
|
||||
|
||||
using namespace device;
|
||||
|
||||
class CrsfRc : public ModuleBase<CrsfRc>, public ModuleParams, public px4::ScheduledWorkItem
|
||||
class CrsfRc : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
static Descriptor desc;
|
||||
|
||||
CrsfRc(const char *device);
|
||||
~CrsfRc() override;
|
||||
|
||||
|
||||
@@ -39,6 +39,8 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
ModuleBase::Descriptor DsmRc::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
DsmRc::DsmRc(const char *device) :
|
||||
ScheduledWorkItem(MODULE_NAME, px4::serial_port_to_wq(device)),
|
||||
_cycle_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": cycle time")),
|
||||
@@ -106,8 +108,8 @@ int DsmRc::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;
|
||||
|
||||
instance->ScheduleOnInterval(_current_update_interval);
|
||||
|
||||
@@ -136,7 +138,7 @@ void DsmRc::Run()
|
||||
|
||||
dsm_deinit();
|
||||
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -362,7 +364,7 @@ int DsmRc::custom_command(int argc, char *argv[])
|
||||
|
||||
#endif // SPEKTRUM_POWER
|
||||
|
||||
if (!is_running()) {
|
||||
if (!is_running(desc)) {
|
||||
int ret = DsmRc::task_spawn(argc, argv);
|
||||
|
||||
if (ret) {
|
||||
@@ -419,5 +421,5 @@ This module does Spektrum DSM RC input parsing.
|
||||
|
||||
extern "C" __EXPORT int dsm_rc_main(int argc, char *argv[])
|
||||
{
|
||||
return DsmRc::main(argc, argv);
|
||||
return ModuleBase::main(DsmRc::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -52,10 +52,12 @@
|
||||
#include <uORB/topics/vehicle_command.h>
|
||||
#include <uORB/topics/vehicle_status.h>
|
||||
|
||||
class DsmRc : public ModuleBase<DsmRc>, public px4::ScheduledWorkItem
|
||||
class DsmRc : public ModuleBase, public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
|
||||
static Descriptor desc;
|
||||
|
||||
DsmRc(const char *device);
|
||||
virtual ~DsmRc();
|
||||
|
||||
|
||||
@@ -36,6 +36,8 @@
|
||||
#include <termios.h>
|
||||
#include <math.h>
|
||||
|
||||
ModuleBase::Descriptor GhstRc::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
GhstRc::GhstRc(const char *device) :
|
||||
ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::serial_port_to_wq(device)),
|
||||
@@ -101,8 +103,8 @@ int GhstRc::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;
|
||||
|
||||
instance->ScheduleOnInterval(_current_update_interval);
|
||||
|
||||
@@ -129,7 +131,7 @@ void GhstRc::Run()
|
||||
|
||||
close(_rcs_fd);
|
||||
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -255,7 +257,7 @@ void GhstRc::Run()
|
||||
|
||||
int GhstRc::custom_command(int argc, char *argv[])
|
||||
{
|
||||
if (!is_running()) {
|
||||
if (!is_running(desc)) {
|
||||
int ret = GhstRc::task_spawn(argc, argv);
|
||||
|
||||
if (ret) {
|
||||
@@ -307,5 +309,5 @@ This module does Ghost (GHST) RC input parsing.
|
||||
|
||||
extern "C" __EXPORT int ghst_rc_main(int argc, char *argv[])
|
||||
{
|
||||
return GhstRc::main(argc, argv);
|
||||
return ModuleBase::main(GhstRc::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -55,10 +55,12 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
class GhstRc : public ModuleBase<GhstRc>, public ModuleParams, public px4::ScheduledWorkItem
|
||||
class GhstRc : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
|
||||
static Descriptor desc;
|
||||
|
||||
GhstRc(const char *device);
|
||||
virtual ~GhstRc();
|
||||
|
||||
|
||||
@@ -35,6 +35,8 @@
|
||||
|
||||
#include <termios.h>
|
||||
|
||||
ModuleBase::Descriptor SbusRc::desc{task_spawn, custom_command, print_usage};
|
||||
|
||||
SbusRc::SbusRc(const char *device) :
|
||||
ModuleParams(nullptr),
|
||||
ScheduledWorkItem(MODULE_NAME, px4::serial_port_to_wq(device)),
|
||||
@@ -98,8 +100,8 @@ int SbusRc::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;
|
||||
|
||||
instance->ScheduleOnInterval(_current_update_interval);
|
||||
|
||||
@@ -126,7 +128,7 @@ void SbusRc::Run()
|
||||
|
||||
close(_rcs_fd);
|
||||
|
||||
exit_and_cleanup();
|
||||
exit_and_cleanup(desc);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -265,7 +267,7 @@ void SbusRc::Run()
|
||||
|
||||
int SbusRc::custom_command(int argc, char *argv[])
|
||||
{
|
||||
if (!is_running()) {
|
||||
if (!is_running(desc)) {
|
||||
int ret = SbusRc::task_spawn(argc, argv);
|
||||
|
||||
if (ret) {
|
||||
@@ -317,5 +319,5 @@ This module does SBUS RC input parsing.
|
||||
|
||||
extern "C" __EXPORT int sbus_rc_main(int argc, char *argv[])
|
||||
{
|
||||
return SbusRc::main(argc, argv);
|
||||
return ModuleBase::main(SbusRc::desc, argc, argv);
|
||||
}
|
||||
|
||||
@@ -53,10 +53,12 @@
|
||||
|
||||
using namespace time_literals;
|
||||
|
||||
class SbusRc : public ModuleBase<SbusRc>, public ModuleParams, public px4::ScheduledWorkItem
|
||||
class SbusRc : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem
|
||||
{
|
||||
public:
|
||||
|
||||
static Descriptor desc;
|
||||
|
||||
SbusRc(const char *device);
|
||||
virtual ~SbusRc();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user