CanIOFlagAbortOnError - automatically enforced by TransferSender if the node is in passive mode

This commit is contained in:
Pavel Kirienko
2015-07-03 10:41:39 +03:00
parent b927c1de5f
commit 71b62ede9c
5 changed files with 30 additions and 3 deletions
+7 -1
View File
@@ -23,21 +23,25 @@ public:
uavcan::CanFrame frame;
uavcan::MonotonicTime time;
uavcan::UtcTime time_utc;
uavcan::CanIOFlags flags;
FrameWithTime(const uavcan::CanFrame& frame, uavcan::MonotonicTime time)
: frame(frame)
, time(time)
, flags(0)
{ }
FrameWithTime(const uavcan::CanFrame& frame, uavcan::MonotonicTime time, uavcan::UtcTime time_utc)
: frame(frame)
, time(time)
, time_utc(time_utc)
, flags(0)
{ }
FrameWithTime(const uavcan::CanFrame& frame, uint64_t time_usec)
: frame(frame)
, time(uavcan::MonotonicTime::fromUSec(time_usec))
, flags(0)
{ }
};
@@ -115,6 +119,7 @@ public:
return 0;
}
tx.push(FrameWithTime(frame, tx_deadline));
tx.back().flags = flags;
if (flags & uavcan::CanIOFlagLoopback)
{
loopback.push(FrameWithTime(frame, iclock.getMonotonic()));
@@ -126,7 +131,6 @@ public:
uavcan::UtcTime& out_ts_utc, uavcan::CanIOFlags& out_flags)
{
assert(this);
out_flags = uavcan::CanIOFlags();
if (loopback.empty())
{
EXPECT_TRUE(rx.size()); // Shall never be called when not readable
@@ -143,6 +147,7 @@ public:
out_frame = frame.frame;
out_ts_monotonic = frame.time;
out_ts_utc = frame.time_utc;
out_flags = frame.flags;
}
else
{
@@ -151,6 +156,7 @@ public:
loopback.pop();
out_frame = frame.frame;
out_ts_monotonic = frame.time;
out_ts_utc = frame.time_utc;
}
// Let's just all pretend that this code is autogenerated, instead of being carefully designed by a human.
@@ -257,6 +257,10 @@ TEST(TransferSender, PassiveMode)
sender.send(Payload, sizeof(Payload), tsMono(1000), uavcan::MonotonicTime(),
uavcan::TransferTypeServiceRequest, uavcan::NodeID(42)));
// Making sure the abort flag is set
ASSERT_FALSE(driver.ifaces.at(0).tx.empty());
ASSERT_EQ(uavcan::CanIOFlagAbortOnError, driver.ifaces.at(0).tx.front().flags);
EXPECT_EQ(0, dispatcher.getTransferPerfCounter().getErrorCount());
EXPECT_EQ(1, dispatcher.getTransferPerfCounter().getTxTransferCount());
EXPECT_EQ(0, dispatcher.getTransferPerfCounter().getRxTransferCount());