Time Domain

Resetting device clocks

When a group of channels are added to a Time Domain, their clocks can be reset through a call to reset_time. This function does not require MagiSync support.

Resetting device clocks:

from canlib import canlib, Frame

ch_tx = canlib.openChannel(0)
ch_rx1 = canlib.openChannel(1)
ch_rx2 = canlib.openChannel(2)

domain = canlib.TimeDomain()
domain.add_channel(ch_rx1)
domain.add_channel(ch_rx2)

ch_tx.busOn()
ch_rx1.busOn()
ch_rx2.busOn()

ch_tx.write(Frame(id_=11, data=b''))
frame1 = ch_rx1.read(timeout=100)
frame2 = ch_rx2.read(timeout=100)

print(f"Timestamps, no reset:   {frame1.timestamp=}, {frame2.timestamp=}")

domain.add_channel(ch_rx1)
domain.add_channel(ch_rx2)
domain.reset_time()

ch_tx.write(Frame(id_=11, data=b''))
frame1 = ch_rx1.read(timeout=100)
frame2 = ch_rx2.read(timeout=100)

print(f"Timestamps, with reset: {frame1.timestamp=}, {frame2.timestamp=}")

Output:

Timestamps, no reset:   frame1.timestamp=75254, frame2.timestamp=72253
Timestamps, with reset: frame1.timestamp=0, frame2.timestamp=0

Checking MagiSync info

Some devices have MagiSync support and channels may end up in MagiSync groups depending on how their USBs are connected. For grouped channels, the clocks will run at the same speed. To check grouping and support, canlib.canlib.TimeDomain.get_data can be used. It will return an object of canlib.canlib.TimeDomainData.

Printing time domain data:

from canlib import canlib, Frame

ch0 = canlib.openChannel(0) # Leaf Light v2
ch1 = canlib.openChannel(1) # UsbCan pro 2xHS v2
ch2 = canlib.openChannel(2) # UsbCan pro 2xHS v2

domain = canlib.TimeDomain()
domain.add_channel(ch0)
domain.add_channel(ch1)
domain.add_channel(ch2)

data = domain.get_data()
print(data)

Output:

sync_groups: 1, synced_members: 2, non_sync_cards: 1, non_synced_members: 1

In this case, ch1 and ch2 were from a device with MagiSync support, listed under synced_members. However, ch0 did not have MagiSync support and was therefore listed under non_synced_members. The synced members were connected to the same USB-hub and ended up in the same MagiSync group. The non-synced member was from a device with only 1 channel.