Expand description
§Crazyflie Link
This Crate implement the Crazyflie radio link connection using Crazyradio. It allows to scan for Crazyflies and to open a safe bidirectional radio connection using a Crazyradio.
The entry point to this Crate is the LinkContext, it keeps track of Crazyradio dongles and provides functions to open a link Connection.
A connection can then be used to send and receive packet with the Crazyflie.
Example:
// Create a link Context
let context = crazyflie_link::LinkContext::new();
// Scan for Crazyflies
let cf_found = context.scan([0xe7; 5]).await?;
if let Some(uri) = cf_found.first() {
let connection = context.open_link(uri).await?;
let packet = connection.recv_packet().await?;
println!("Packet received: {:?}", packet);
}§Link URI format
The link URI format is as follows:
radio://<radio_nth>/<channel>/[datarate]/[address]?[options=value&options=value...]radio_nthis the index of the Crazyradio to use (0 for the first, 1 for the second, etc.)channelis the radio channel to use (0-125)datarateis the datarate to use (optional, default is 2M, possible values are 250K, 1M, 2M)addressis the radio address to use (optional, default is e7e7e7e7e7, 5 bytes in hex)optionsare additional options:- safelink: Disable safelink packet loss protection (optional, default is 1, 0 to disable)
- ackfilter: Enable ACK filtering, if disable, empty ack packet will be send as null packet downstream (optional, default is 0, 1 to enable)
- timeout: Set the receive timeout in milliseconds (optional, default is 1000)
Note: Crazyradio 2.0 only support channels 0-100, and datarates 1M and 2M.
§Cargo features
- packet_capture - Enable packet capture via Unix socket (Unix only)
§Packet Capture
When the packet_capture feature is enabled, CRTP packets can be captured and sent
to an external application for analysis. Call [capture::init()] at startup to
connect to the capture socket.
The capture uses a Unix socket at /tmp/crazyflie-capture.sock. To view packets in
Wireshark, use the extcap plugin from https://github.com/evoggy/wireshark-crazyflie.
§Capture Format
Each captured packet is sent with a 41-byte header followed by the CRTP packet data:
| Offset | Size | Field | Description |
|---|---|---|---|
| 0 | 1 | link_type | 1 = Radio, 2 = USB |
| 1 | 1 | direction | 0 = TX (to Crazyflie), 1 = RX (from CF) |
| 2 | 12 | address | Radio address (5 bytes) or empty for USB |
| 14 | 1 | channel | Radio channel (0 for USB) |
| 15 | 16 | serial | Radio/device serial number |
| 31 | 8 | timestamp | Microseconds since Unix epoch (LE) |
| 39 | 2 | length | CRTP packet length (LE) |
| 41 | N | data | CRTP packet (header + payload) |
Re-exports§
pub use error::Error;
Modules§
Structs§
- Connection
- Connection to a Crazyflie
- Link
Context - Context for the link connections
- Packet
- CRTP data packet
- Platform
Ack - Response from a platform command
- Radio
Link Statistics - Radio link statistics snapshot
- Shared
Crazyradio - Multi-user threaded Crazyradio
Enums§
- Connection
Status - Describe the current link connection status