Browse Source

UAVCAN: improved sensor bridge factory

sbg
Pavel Kirienko 11 years ago
parent
commit
6ebd59c633
  1. 4
      src/modules/uavcan/sensors/gnss.cpp
  2. 4
      src/modules/uavcan/sensors/gnss.hpp
  3. 4
      src/modules/uavcan/sensors/mag.cpp
  4. 7
      src/modules/uavcan/sensors/mag.hpp
  5. 4
      src/modules/uavcan/sensors/sensor_bridge.cpp
  6. 2
      src/modules/uavcan/sensors/sensor_bridge.hpp
  7. 4
      src/modules/uavcan/uavcan_main.cpp

4
src/modules/uavcan/sensors/gnss.cpp

@ -45,6 +45,8 @@ @@ -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) @@ -52,8 +54,6 @@ _report_pub(-1)
{
}
const char *UavcanGnssBridge::get_name() const { return "gnss"; }
int UavcanGnssBridge::init()
{
int res = -1;

4
src/modules/uavcan/sensors/gnss.hpp

@ -56,9 +56,11 @@ @@ -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;

4
src/modules/uavcan/sensors/mag.cpp

@ -37,6 +37,8 @@ @@ -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() @@ -53,8 +55,6 @@ UavcanMagnetometerBridge::~UavcanMagnetometerBridge()
}
}
const char *UavcanMagnetometerBridge::get_name() const { return "mag"; }
int UavcanMagnetometerBridge::init()
{
// Init the libuavcan subscription

7
src/modules/uavcan/sensors/mag.hpp

@ -46,10 +46,12 @@ @@ -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: @@ -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;

4
src/modules/uavcan/sensors/sensor_bridge.cpp

@ -41,9 +41,9 @@ @@ -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;

2
src/modules/uavcan/sensors/sensor_bridge.hpp

@ -46,7 +46,7 @@ @@ -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() { }

4
src/modules/uavcan/uavcan_main.cpp

@ -535,7 +535,7 @@ int UavcanNode::sensor_enable(const char *bridge_name) @@ -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) @@ -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…
Cancel
Save