Files
carbus_lib/example/canfd_periodic_message.py
controllerzz 99451aceb8 update 0.1.9
2026-06-17 20:44:18 +03:00

75 lines
1.4 KiB
Python

import asyncio
from carbus_async import CarBusDevice, PeriodicCanSender
from carbus_async.device import CanTiming
async def main(is_debug=False):
dev = await CarBusDevice.open("COM6")
# await dev.open_can_channel_custom(
# channel=1,
#
# nominal_timing=CanTiming(
# prescaler=15,
# tq_seg1=12,
# tq_seg2=3,
# sjw=1
# ),
# data_timing=CanTiming(
# prescaler=6,
# tq_seg1=7,
# tq_seg2=2,
# sjw=1
# ),
# fd=True,
# brs=True,
# )
await dev.open_can_channel(
channel=1,
nominal_bitrate=500_000,
data_bitrate=2_000_000,
fd=True,
brs=True,
)
await dev.ensure_terminator(channel=1, enabled=True)
sender = PeriodicCanSender(dev)
def mod(tick, data):
b = bytearray(data)
b[0] = tick & 0xFF
return bytes(b)
sender.add(
"cnt",
channel=1,
fd=True,
brs=True,
can_id=0x100,
data=b"\x00" * 8,
period_s=0.5,
modify=mod
)
sender.add(
"heartbeat",
channel=1,
can_id=0x123,
data=b"\x01\x02\x03\x04\x05\x06\x07\x08",
period_s=0.05,
)
try:
await asyncio.Event().wait()
finally:
await sender.stop_all()
await dev.close()
return
asyncio.run(main())