UAVCAN: improved sensor bridge factory

This commit is contained in:
Pavel Kirienko
2014-08-22 15:52:35 +04:00
parent bdc2ecd9f6
commit 6ebd59c633
7 changed files with 16 additions and 13 deletions
+2 -2
View File
@@ -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;
+3 -1
View File
@@ -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;
+2 -2
View File
@@ -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
+4 -3
View File
@@ -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;
+2 -2
View File
@@ -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;
+1 -1
View File
@@ -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() { }
+2 -2
View File
@@ -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) {