mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-31 08:21:36 +08:00
Added tests for UTC transfer timestamping
This commit is contained in:
@@ -23,7 +23,7 @@ struct RxFrameGenerator
|
||||
{ }
|
||||
|
||||
uavcan::RxFrame operator()(int iface_index, const std::string& data, uint8_t frame_index, bool last,
|
||||
uint8_t transfer_id, uint64_t timestamp)
|
||||
uint8_t transfer_id, uint64_t ts_monotonic, uint64_t ts_utc = 0)
|
||||
{
|
||||
if (data.length() > uavcan::Frame::PAYLOAD_LEN_MAX)
|
||||
{
|
||||
@@ -34,7 +34,8 @@ struct RxFrameGenerator
|
||||
uavcan::RxFrame frm;
|
||||
|
||||
frm.iface_index = iface_index;
|
||||
frm.ts_monotonic = timestamp;
|
||||
frm.ts_monotonic = ts_monotonic;
|
||||
frm.ts_utc = ts_utc;
|
||||
|
||||
frm.data_type_id = data_type_id;
|
||||
frm.frame_index = frame_index;
|
||||
@@ -351,3 +352,52 @@ TEST(TransferReceiver, Restart)
|
||||
|
||||
ASSERT_TRUE(matchBufferContent(bufmgr.access(gen.bufmgr_key), "123456781234567812345678"));
|
||||
}
|
||||
|
||||
|
||||
TEST(TransferReceiver, UtcTransferTimestamping)
|
||||
{
|
||||
Context<32> context;
|
||||
RxFrameGenerator gen(789, uavcan::TRANSFER_TYPE_MESSAGE_BROADCAST);
|
||||
uavcan::TransferReceiver& rcv = context.receiver;
|
||||
uavcan::ITransferBufferManager& bufmgr = context.bufmgr;
|
||||
|
||||
/*
|
||||
* Zero UTC timestamp must be preserved
|
||||
*/
|
||||
CHECK_NOT_COMPLETE(rcv.addFrame(gen(1, "12345678", 0, false, 0, 1, 0)));
|
||||
CHECK_NOT_COMPLETE(rcv.addFrame(gen(1, "qwertyui", 1, false, 0, 2, 0)));
|
||||
CHECK_COMPLETE( rcv.addFrame(gen(1, "abcd", 2, true, 0, 3, 0)));
|
||||
|
||||
ASSERT_TRUE(matchBufferContent(bufmgr.access(gen.bufmgr_key), "12345678qwertyuiabcd"));
|
||||
ASSERT_EQ(1, rcv.getLastTransferTimestampMonotonic());
|
||||
ASSERT_EQ(0, rcv.getLastTransferTimestampUtc());
|
||||
|
||||
/*
|
||||
* Non-zero UTC timestamp
|
||||
*/
|
||||
CHECK_NOT_COMPLETE(rcv.addFrame(gen(1, "12345678", 0, false, 1, 4, 123))); // This UTC is going to be preserved
|
||||
CHECK_NOT_COMPLETE(rcv.addFrame(gen(1, "qwertyui", 1, false, 1, 5, 0))); // Following are ignored
|
||||
CHECK_COMPLETE( rcv.addFrame(gen(1, "abcd", 2, true, 1, 6, 42)));
|
||||
|
||||
ASSERT_TRUE(matchBufferContent(bufmgr.access(gen.bufmgr_key), "12345678qwertyuiabcd"));
|
||||
ASSERT_EQ(4, rcv.getLastTransferTimestampMonotonic());
|
||||
ASSERT_EQ(123, rcv.getLastTransferTimestampUtc());
|
||||
|
||||
/*
|
||||
* Single-frame transfers
|
||||
*/
|
||||
CHECK_SINGLE_FRAME(rcv.addFrame(gen(1, "abc", 0, true, 2, 10, 100000000))); // Exact value is irrelevant (100kk ok)
|
||||
ASSERT_EQ(10, rcv.getLastTransferTimestampMonotonic());
|
||||
ASSERT_EQ(100000000, rcv.getLastTransferTimestampUtc());
|
||||
|
||||
/*
|
||||
* Restart recovery
|
||||
*/
|
||||
CHECK_NOT_COMPLETE(rcv.addFrame(gen(0, "12345678", 0, false, 1, 100000000, 800000000)));
|
||||
CHECK_NOT_COMPLETE(rcv.addFrame(gen(0, "qwertyui", 1, false, 1, 100000001, 300000000)));
|
||||
CHECK_COMPLETE( rcv.addFrame(gen(0, "abcd", 2, true, 1, 100000002, 900000000)));
|
||||
|
||||
ASSERT_TRUE(matchBufferContent(bufmgr.access(gen.bufmgr_key), "12345678qwertyuiabcd"));
|
||||
ASSERT_EQ(100000000, rcv.getLastTransferTimestampMonotonic());
|
||||
ASSERT_EQ(800000000, rcv.getLastTransferTimestampUtc());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user