Example CodeΒΆ
Read an unfiltered stream of OpenXC messages from a USB vehicle interface:
from openxc.interface import UsbVehicleInterface
def receive(message, **kwargs):
# this callback will receive each message received as a dict
print(message['name'])
vi = UsbVehicleInterface(callback=receive)
vi.start()
# This will block until the connection dies or you exit the program
vi.join()
If you want to connect to a Bluetooth interface (currently only supported in
Linux), just replace UsbVehicleInterface
with BluetoothVehicleInterface
.
The base VehicleInterface
classes all implement the Controller
API,
which also supports writing CAN messages, creating diagnostic requests and
sending configuration commands to the VI.
For example, to create a diagnostic request and wait for responses:
message_id = 42
mode = 1
bus = 1
pid = 3
responses = vi.create_diagnostic_request(message, mode,
bus=bus, pid=pid, wait_for_first_response=True)
To write a low-level CAN message (the VI must be configured to allow this):
vi.write(bus=1, id=42, data="0x1234567812345678")
To put the CAN acceptance filter in bypass mode for bus 1:
vi.set_passthrough(1, true)
There are many more commands and options, and most have documented APIs in the code base. You are encouraged you to dig around as the library is fairly small and should be easy to grok. More examples and documentation would be a most welcome contribution!