Canadensis: A Cyphal implementation
This project implements (most of) Cyphal (previously called UAVCAN v1.0). As the Cyphal website explains, "Cyphal is an open technology for real-time intravehicular distributed computing and communication based on modern networking standards (Ethernet, CAN FD, etc.). It was created to address the challenge of on-board deterministic computing and data distribution in next-generation intelligent vehicles: manned and unmanned aircraft, spacecraft, robots, and cars."
This is currently an independent project, not affiliated with the Cyphal Consortium.
This repository uses a submodule for the public regulated data types.
When cloning, use
git clone --recursive. If you have already cloned the repository without the
recursive option, run
git submodule init followed by
git submodule update. Otherwise, some tests will fail.
||The main library with all core transport-independent functionality|
||Rust types corresponding to the Cyphal public regulated data types|
||Compatibility for bxCAN embedded CAN controllers|
||Compatibility for Linux SocketCAN interfaces|
||Experimental Cyphal/Serial transport|
||Experimental Cyphal/UDP transport|
||A client library for plug-and-play node ID allocation|
||Access to the software image CRC|
||A tool to calculate and write the CRC of a software image for use with
||A DSDL processor that generates Rust data types and serialization code|
||A procedural macro that generates Rust data types and serialization code from inline and/or external DSDL files|
Other crates (
canadensis_filter_config) are re-exported in various places, so you normally will not need to depend on them directly.
This code is intended to conform to version 1.0-beta of the Cyphal specification.
Most of the functionality works. Some parts are incomplete:
- There are some tests, but there are probably several bugs in areas that have not been tested.
- The amount of dynamic memory allocation can be reduced, or at least documented better.
- It needs better documentation
- Runs on embedded devices
- Uses dynamic memory allocation, but only when necessary
- Supports Cyphal/CAN (classic CAN and CAN FD)
- Supports Cyphal/Serial and Cyphal/UDP (these transports are not fully specified yet, but the canadensis
implementations were compatible with
pycyphalwhen they were released)
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.