Go to the documentation of this file.
8 # pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant"
16 #include "../transport/can/can.hpp"
42 std::cout <<
"TestNode internal failure: " << msg << std::endl;
67 this->others.insert(with);
87 if (inout_masks.
read == 1)
91 if (inout_masks.
read || inout_masks.
write)
105 for (std::set<PairableCanDriver*>::iterator it =
others.begin(); it !=
others.end(); ++it)
107 (*it)->read_queue.push(
frame);
148 template <
typename ClockType>
179 unsigned nspins2 = unsigned(duration.
toMSec() / 2);
180 nspins2 = nspins2 ? nspins2 : 1;
181 while (nspins2 --> 0)
203 template <
unsigned NumNodes>
218 std::unique_ptr<NodeEnvironment>
nodes[NumNodes];
231 nodes[i]->can_driver.linkTogether(&
nodes[k]->can_driver);
237 assert(
nodes[i]->can_driver.others.size() == (NumNodes - 1));
244 unsigned nspins = unsigned(duration.
toMSec() / NumNodes);
245 nspins = nspins ? nspins : 1;
262 if (index >= NumNodes)
264 throw std::out_of_range(
"No such test node");
266 return nodes[index]->node;
InterlinkedTestNodes< SystemClockDriver > InterlinkedTestNodesWithSysClock
InterlinkedTestNodes(uavcan::NodeID nid_first, uavcan::NodeID nid_second)
uavcan::HeapBasedPoolAllocator< uavcan::MemPoolBlockSize > pool
uint64_t internal_failure_count
bool setNodeID(NodeID nid)
PairableCanDriver(uavcan::ISystemClock &clock)
virtual uavcan::int16_t receive(uavcan::CanFrame &out_frame, uavcan::MonotonicTime &out_ts_monotonic, uavcan::UtcTime &out_ts_utc, uavcan::CanIOFlags &out_flags)
TestNetwork(uavcan::uint8_t first_node_id=1)
Implicitly convertible to/from uavcan.Timestamp.
static MonotonicDuration fromMSec(int64_t ms)
std::unique_ptr< NodeEnvironment > nodes[NumNodes]
static const CanIOFlags CanIOFlagLoopback
virtual uavcan::uint16_t getNumFilters() const
int spin(MonotonicTime deadline)
virtual uavcan::IPoolAllocator & getAllocator()
uavcan::ISystemClock & clock
virtual uavcan::int16_t send(const uavcan::CanFrame &frame, uavcan::MonotonicTime, uavcan::CanIOFlags flags)
PairableCanDriver can_driver
uavcan::Scheduler scheduler
int spinAll(uavcan::MonotonicDuration duration)
virtual uavcan::uint64_t getErrorCount() const
TestNode(uavcan::ICanDriver &can_driver, uavcan::ISystemClock &clock_driver, uavcan::NodeID self_node_id)
virtual uavcan::int16_t configureFilters(const uavcan::CanFilterConfig *, uavcan::uint16_t)
virtual uavcan::Scheduler & getScheduler()
virtual const uavcan::ICanIface * getIface(uavcan::uint8_t iface_index) const
virtual UtcTime getUtc() const =0
void linkTogether(PairableCanDriver *with)
virtual void registerInternalFailure(const char *msg)
virtual uavcan::uint8_t getNumIfaces() const
int spinBoth(uavcan::MonotonicDuration duration)
NodeEnvironment(uavcan::NodeID node_id)
virtual uavcan::int16_t select(uavcan::CanSelectMasks &inout_masks, const uavcan::CanFrame *(&)[uavcan::MaxCanIfaces], uavcan::MonotonicTime blocking_deadline)
void pushRxToAllIfaces(const uavcan::CanFrame &can_frame)
std::queue< uavcan::CanFrame > read_queue
std::set< PairableCanDriver * > others
InterlinkedTestNodes< SystemClockMock > InterlinkedTestNodesWithClockMock
virtual const uavcan::Scheduler & getScheduler() const
virtual uavcan::ICanIface * getIface(uavcan::uint8_t iface_index)
virtual MonotonicTime getMonotonic() const =0
std::queue< uavcan::CanFrame > loopback_queue
TestNode & operator[](unsigned index)