mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-04-14 10:07:39 +08:00
UAVCAN: improved sensor bridge factory
This commit is contained in:
parent
bdc2ecd9f6
commit
6ebd59c633
@ -45,6 +45,8 @@
|
||||
|
||||
#define MM_PER_CM 10 // Millimeters per centimeter
|
||||
|
||||
const char *const UavcanGnssBridge::NAME = "gnss";
|
||||
|
||||
UavcanGnssBridge::UavcanGnssBridge(uavcan::INode &node) :
|
||||
_node(node),
|
||||
_sub_fix(node),
|
||||
@ -52,8 +54,6 @@ _report_pub(-1)
|
||||
{
|
||||
}
|
||||
|
||||
const char *UavcanGnssBridge::get_name() const { return "gnss"; }
|
||||
|
||||
int UavcanGnssBridge::init()
|
||||
{
|
||||
int res = -1;
|
||||
|
||||
@ -56,9 +56,11 @@
|
||||
class UavcanGnssBridge : public IUavcanSensorBridge
|
||||
{
|
||||
public:
|
||||
static const char *const NAME;
|
||||
|
||||
UavcanGnssBridge(uavcan::INode& node);
|
||||
|
||||
const char *get_name() const override;
|
||||
const char *get_name() const override { return NAME; }
|
||||
|
||||
int init() override;
|
||||
|
||||
|
||||
@ -37,6 +37,8 @@
|
||||
|
||||
#include "mag.hpp"
|
||||
|
||||
const char *const UavcanMagnetometerBridge::NAME = "mag";
|
||||
|
||||
UavcanMagnetometerBridge::UavcanMagnetometerBridge(uavcan::INode& node) :
|
||||
device::CDev("uavcan_mag", "/dev/uavcan/mag"),
|
||||
_sub_mag(node)
|
||||
@ -53,8 +55,6 @@ UavcanMagnetometerBridge::~UavcanMagnetometerBridge()
|
||||
}
|
||||
}
|
||||
|
||||
const char *UavcanMagnetometerBridge::get_name() const { return "mag"; }
|
||||
|
||||
int UavcanMagnetometerBridge::init()
|
||||
{
|
||||
// Init the libuavcan subscription
|
||||
|
||||
@ -46,10 +46,12 @@
|
||||
class UavcanMagnetometerBridge : public IUavcanSensorBridge, public device::CDev
|
||||
{
|
||||
public:
|
||||
static const char *const NAME;
|
||||
|
||||
UavcanMagnetometerBridge(uavcan::INode& node);
|
||||
~UavcanMagnetometerBridge() override;
|
||||
|
||||
const char *get_name() const override;
|
||||
const char *get_name() const override { return NAME; }
|
||||
|
||||
int init() override;
|
||||
|
||||
@ -63,8 +65,7 @@ private:
|
||||
(const uavcan::ReceivedDataStructure<uavcan::equipment::ahrs::Magnetometer>&)>
|
||||
MagCbBinder;
|
||||
|
||||
|
||||
uavcan::Subscriber<uavcan::equipment::ahrs::Magnetometer, MagCbBinder> _sub_mag;
|
||||
uavcan::Subscriber<uavcan::equipment::ahrs::Magnetometer, MagCbBinder> _sub_mag;
|
||||
mag_scale _scale = {};
|
||||
orb_id_t _orb_id = nullptr;
|
||||
orb_advert_t _orb_advert = -1;
|
||||
|
||||
@ -41,9 +41,9 @@
|
||||
|
||||
IUavcanSensorBridge* IUavcanSensorBridge::make(uavcan::INode &node, const char *bridge_name)
|
||||
{
|
||||
if (!std::strncmp("gnss", bridge_name, MaxNameLen)) {
|
||||
if (!std::strncmp(UavcanGnssBridge::NAME, bridge_name, MAX_NAME_LEN)) {
|
||||
return new UavcanGnssBridge(node);
|
||||
} else if (!std::strncmp("mag", bridge_name, MaxNameLen)) {
|
||||
} else if (!std::strncmp(UavcanMagnetometerBridge::NAME, bridge_name, MAX_NAME_LEN)) {
|
||||
return new UavcanMagnetometerBridge(node);
|
||||
} else {
|
||||
return nullptr;
|
||||
|
||||
@ -46,7 +46,7 @@
|
||||
class IUavcanSensorBridge : uavcan::Noncopyable, public ListNode<IUavcanSensorBridge*>
|
||||
{
|
||||
public:
|
||||
static constexpr unsigned MaxNameLen = 20;
|
||||
static constexpr unsigned MAX_NAME_LEN = 20;
|
||||
|
||||
virtual ~IUavcanSensorBridge() { }
|
||||
|
||||
|
||||
@ -535,7 +535,7 @@ int UavcanNode::sensor_enable(const char *bridge_name)
|
||||
{
|
||||
auto pos = _sensor_bridges.getHead();
|
||||
while (pos != nullptr) {
|
||||
if (!std::strncmp(pos->get_name(), bridge_name, IUavcanSensorBridge::MaxNameLen)) {
|
||||
if (!std::strncmp(pos->get_name(), bridge_name, IUavcanSensorBridge::MAX_NAME_LEN)) {
|
||||
warnx("sensor bridge '%s' already exists", bridge_name);
|
||||
retval = -1;
|
||||
goto leave;
|
||||
@ -553,7 +553,7 @@ int UavcanNode::sensor_enable(const char *bridge_name)
|
||||
goto leave;
|
||||
}
|
||||
|
||||
assert(!std::strncmp(bridge->get_name(), bridge_name, IUavcanSensorBridge::MaxNameLen));
|
||||
assert(!std::strncmp(bridge->get_name(), bridge_name, IUavcanSensorBridge::MAX_NAME_LEN));
|
||||
|
||||
retval = bridge->init();
|
||||
if (retval >= 0) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user