From bad7123b7da89c7bd3d6c92b5cd264037ad8fe2b Mon Sep 17 00:00:00 2001 From: ilia-sheremet Date: Sat, 13 Jun 2015 20:15:45 +0200 Subject: [PATCH] getIface() constants added --- libuavcan/include/uavcan/driver/can.hpp | 12 ++++++++++++ libuavcan/test/node/test_node.hpp | 12 +++++++++++- libuavcan/test/transport/can/can.hpp | 5 +++-- .../linux/include/uavcan_linux/socketcan.hpp | 5 +++++ .../lpc11c24/driver/include/uavcan_lpc11c24/can.hpp | 4 +++- libuavcan_drivers/lpc11c24/driver/src/can.cpp | 5 +++++ 6 files changed, 39 insertions(+), 4 deletions(-) diff --git a/libuavcan/include/uavcan/driver/can.hpp b/libuavcan/include/uavcan/driver/can.hpp index 3fca51c9ed..04a9363b5b 100644 --- a/libuavcan/include/uavcan/driver/can.hpp +++ b/libuavcan/include/uavcan/driver/can.hpp @@ -85,6 +85,17 @@ struct UAVCAN_EXPORT CanFilterConfig { uint32_t id; uint32_t mask; + + //bool operator == (const CanFilterConfig&) const; + bool operator==(const CanFilterConfig& rhs) const + { + return rhs.id == id && rhs.mask == mask; + } + + CanFilterConfig() + : id(0) + , mask(0) + { } }; /** @@ -167,6 +178,7 @@ public: * Returns an interface by index, or null pointer if the index is out of range. */ virtual ICanIface* getIface(uint8_t iface_index) = 0; + virtual const ICanIface* getIface(uint8_t iface_index) const = 0; /** * Total number of available CAN interfaces. diff --git a/libuavcan/test/node/test_node.hpp b/libuavcan/test/node/test_node.hpp index f101f00991..939251f154 100644 --- a/libuavcan/test/node/test_node.hpp +++ b/libuavcan/test/node/test_node.hpp @@ -14,7 +14,8 @@ #include #include #include "../transport/can/can.hpp" - +#include +#include struct TestNode : public uavcan::INode { @@ -74,6 +75,15 @@ struct PairableCanDriver : public uavcan::ICanDriver, public uavcan::ICanIface return NULL; } + virtual const uavcan::ICanIface* getIface(uavcan::uint8_t iface_index) const + { + if (iface_index == 0) + { + return this; + } + return NULL; + } + virtual uavcan::uint8_t getNumIfaces() const { return 1; } virtual uavcan::int16_t select(uavcan::CanSelectMasks& inout_masks, uavcan::MonotonicTime blocking_deadline) diff --git a/libuavcan/test/transport/can/can.hpp b/libuavcan/test/transport/can/can.hpp index 00a038df9e..89bf7f1dbe 100644 --- a/libuavcan/test/transport/can/can.hpp +++ b/libuavcan/test/transport/can/can.hpp @@ -150,9 +150,9 @@ public: // cppcheck-suppress unusedFunction // cppcheck-suppress functionConst - virtual uavcan::int16_t configureFilters(const uavcan::CanFilterConfig*, uavcan::uint16_t) { return -1; } + virtual uavcan::int16_t configureFilters(const uavcan::CanFilterConfig*, uavcan::uint16_t) { return 0; } // cppcheck-suppress unusedFunction - virtual uavcan::uint16_t getNumFilters() const { return 0; } + virtual uavcan::uint16_t getNumFilters() const { return 4; } // decrease number of HW_filters from 9 to 4 virtual uavcan::uint64_t getErrorCount() const { return num_errors; } }; @@ -232,6 +232,7 @@ public: } virtual uavcan::ICanIface* getIface(uavcan::uint8_t iface_index) { return &ifaces.at(iface_index); } + virtual const uavcan::ICanIface* getIface(uavcan::uint8_t iface_index) const { return &ifaces.at(iface_index); } virtual uavcan::uint8_t getNumIfaces() const { return uavcan::uint8_t(ifaces.size()); } }; diff --git a/libuavcan_drivers/linux/include/uavcan_linux/socketcan.hpp b/libuavcan_drivers/linux/include/uavcan_linux/socketcan.hpp index 245d1fbd7e..c9e481f620 100644 --- a/libuavcan_drivers/linux/include/uavcan_linux/socketcan.hpp +++ b/libuavcan_drivers/linux/include/uavcan_linux/socketcan.hpp @@ -601,6 +601,11 @@ public: { return (iface_index >= num_ifaces_) ? nullptr : static_cast(ifaces_[iface_index]); } + const SocketCanIface* getIface(std::uint8_t iface_index) const override + { + return (iface_index >= num_ifaces_) ? nullptr : static_cast(ifaces_[iface_index]); + } + std::uint8_t getNumIfaces() const override { return num_ifaces_; } diff --git a/libuavcan_drivers/lpc11c24/driver/include/uavcan_lpc11c24/can.hpp b/libuavcan_drivers/lpc11c24/driver/include/uavcan_lpc11c24/can.hpp index 4093146cfd..26bf8f2784 100644 --- a/libuavcan_drivers/lpc11c24/driver/include/uavcan_lpc11c24/can.hpp +++ b/libuavcan_drivers/lpc11c24/driver/include/uavcan_lpc11c24/can.hpp @@ -48,7 +48,7 @@ public: uavcan::CanIOFlags flags); virtual uavcan::int16_t receive(uavcan::CanFrame& out_frame, uavcan::MonotonicTime& out_ts_monotonic, - uavcan::UtcTime& out_ts_utc, uavcan::CanIOFlags& out_flags); + uavcan::UtcTime& out_ts_utc, uavcan::CanIOFlags& out_flags); virtual uavcan::int16_t select(uavcan::CanSelectMasks& inout_masks, uavcan::MonotonicTime blocking_deadline); @@ -61,6 +61,8 @@ public: virtual uavcan::ICanIface* getIface(uavcan::uint8_t iface_index); + virtual const uavcan::ICanIface* getIface(uavcan::uint8_t iface_index) const; + virtual uavcan::uint8_t getNumIfaces() const; }; diff --git a/libuavcan_drivers/lpc11c24/driver/src/can.cpp b/libuavcan_drivers/lpc11c24/driver/src/can.cpp index f3b57721fe..7ee82f46cd 100644 --- a/libuavcan_drivers/lpc11c24/driver/src/can.cpp +++ b/libuavcan_drivers/lpc11c24/driver/src/can.cpp @@ -348,6 +348,11 @@ uavcan::ICanIface* CanDriver::getIface(uavcan::uint8_t iface_index) return (iface_index == 0) ? this : NULL; } +const uavcan::ICanIface* CanDriver::getIface(uavcan::uint8_t iface_index) const +{ + return (iface_index == 0) ? this : NULL; +} + uavcan::uint8_t CanDriver::getNumIfaces() const { return 1;