The stack is still work in progress!
- no_std support, but requires alloc
- supports all drivers based on the embedded_can::blocking trait
- Address management (except NAME command and Address command)
- P2P and broadcast transport protocols
- NEMA2000 fast packet transport protocol
All examples are configured to use a socketcan interface named 'vcan0'. On linux you can create a virtual socketcan interface. On other platforms it is necessary to use a different driver which implements the embedded_can driver traits.
This example list all control functions on a j1939 bus with the currently used address and name. To keep the list always updated, the examples send a request for address claim every second, on which all active control functions have to react.
The example listens on the bus for the electronic engine controller broadcast message and prints the raw contents on the command line.
The example consists of two J1939 control functions, which demonstrate the communication between a "ecu" driving a rgb led and a "display" to control the led. Both control functions participate in address management and claiming their address. The examples uses multiple proprietary messages:
- led_status: broadcast the current status of the led every 1000ms on the bus
- led_command: controls the on/off state of the led
- led_control: read/write led parameters like cycle time and color
Additionally Acknowledgement and Request are used to respond to messages or request messages.
- Logging support
- Better error handling
- Timings and Timeouts may be not standard conform or missing
- other OS than linux / baremetal
- PGN Filter
- Address command
- NAME change command
- SA violation check and handling
- extended transport protocol support