mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-11-04 19:41:35 +08:00
CanIOFlagAbortOnError - automatically enforced by TransferSender if the node is in passive mode
This commit is contained in:
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user