5 #include <gtest/gtest.h> 11 TEST(GlobalTimeSyncSlave, Basic)
31 ASSERT_LE(0, gtss.
start());
39 uavcan::protocol::GlobalTimeSync gts;
40 gts.previous_transmission_timestamp_usec = 0;
42 gts.previous_transmission_timestamp_usec = master_clock.
utc;
44 ASSERT_EQ(0, slave_clock.
utc);
45 ASSERT_EQ(1000000, master_clock.
utc);
46 std::cout <<
"Master mono=" << master_clock.
monotonic <<
" utc=" << master_clock.
utc << std::endl;
47 std::cout <<
"Slave mono=" << slave_clock.
monotonic <<
" utc=" << slave_clock.
utc << std::endl;
57 gts.previous_transmission_timestamp_usec = master_clock.
utc;
59 ASSERT_EQ(1000000, slave_clock.
utc);
60 ASSERT_EQ(1000000, master_clock.
utc);
61 std::cout <<
"Master mono=" << master_clock.
monotonic <<
" utc=" << master_clock.
utc << std::endl;
62 std::cout <<
"Slave mono=" << slave_clock.
monotonic <<
" utc=" << slave_clock.
utc << std::endl;
64 master_clock.
utc += 1000000;
65 slave_clock.
utc += 1000000;
75 gts.previous_transmission_timestamp_usec = master_clock.
utc;
77 ASSERT_EQ(2000000, slave_clock.
utc);
78 ASSERT_EQ(2000000, master_clock.
utc);
80 master_clock.
utc += 1000000;
81 slave_clock.
utc += 1000000;
91 gts.previous_transmission_timestamp_usec = master_clock.
utc;
93 ASSERT_EQ(3000000, slave_clock.
utc);
94 ASSERT_EQ(3000000, master_clock.
utc);
96 master_clock.
utc += 1000000;
97 slave_clock.
utc += 1000000;
98 ASSERT_EQ(4000000, slave_clock.
utc);
99 ASSERT_EQ(4000000, master_clock.
utc);
109 master2_clock.monotonic_auto_advance = 1000;
110 master2_clock.preserve_utc =
true;
113 TestNode master2_node(master2_can, master2_clock, 8);
120 gts.previous_transmission_timestamp_usec = 0;
122 gts.previous_transmission_timestamp_usec = master2_clock.utc;
124 ASSERT_EQ(4000000, slave_clock.
utc);
125 ASSERT_EQ(100, master2_clock.utc);
127 master2_clock.utc += 1000000;
137 ASSERT_EQ(100, slave_clock.
utc);
145 gts.previous_transmission_timestamp_usec = 99999999;
149 ASSERT_EQ(100, slave_clock.
utc);
153 ASSERT_EQ(100, slave_clock.
utc);
161 slave_clock.
advance(100000000);
168 #if !defined(BYTE_ORDER) || !defined(LITTLE_ENDIAN) || (BYTE_ORDER != LITTLE_ENDIAN) 169 # error "This test cannot be executed on this platform" 178 EXPECT_EQ(7, frame.
setPayload(reinterpret_cast<uint8_t*>(&usec), 7));
186 ASSERT_TRUE(frame.
compile(can_frame));
191 TEST(GlobalTimeSyncSlave, Validation)
200 slave_can.
ifaces.at(i).enable_utc_timestamping =
true;
208 ASSERT_LE(0, gtss.
start());
211 ASSERT_EQ(0, slave_clock.
utc);
226 ASSERT_EQ(1000, slave_clock.
utc);
231 ASSERT_EQ(1000, slave_clock.
utc);
232 std::cout << slave_clock.
monotonic << std::endl;
242 ASSERT_EQ(1000, slave_clock.
utc);
243 std::cout << slave_clock.
monotonic << std::endl;
254 ASSERT_EQ(3000, slave_clock.
utc);
255 std::cout << slave_clock.
monotonic << std::endl;
276 ASSERT_EQ(5000, slave_clock.
utc);
277 std::cout << slave_clock.
monotonic << std::endl;
281 TEST(GlobalTimeSyncSlave, Suppression)
290 slave_can.
ifaces.at(i).enable_utc_timestamping =
true;
298 ASSERT_LE(0, gtss.
start());
299 ASSERT_EQ(0, slave_clock.
utc);
313 ASSERT_EQ(0, slave_clock.
utc);
uint64_t monotonic_auto_advance
std::set< PairableCanDriver * > others
void setStartOfTransfer(bool x)
static const NodeID Broadcast
NodeID getMasterNodeID() const
uint8_t setPayload(const uint8_t *data, unsigned len)
void advance(uint64_t usec) const
virtual uavcan::uint8_t getNumIfaces() const
static void broadcastSyncMsg(CanIfaceMock &iface, uavcan::uint64_t usec, uavcan::NodeID snid, uavcan::TransferID tid)
int spin(MonotonicTime deadline)
bool compile(CanFrame &can_frame) const
static GlobalDataTypeRegistry & instance()
static uavcan::Frame makeSyncMsg(uavcan::uint64_t usec, uavcan::NodeID snid, uavcan::TransferID tid)
static MonotonicDuration fromMSec(int64_t ms)
int spinBoth(uavcan::MonotonicDuration duration)
void pushRx(const uavcan::CanFrame &frame)
void setEndOfTransfer(bool x)
std::vector< CanIfaceMock > ifaces
TEST(GlobalTimeSyncSlave, Basic)
void suppress(bool suppressed)
int broadcast(const DataType &message)