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.