Re-implementation of rustbootd's ecat_el6695_* examples as a single binary with fixes found in review and on hardware: - DC-follow PLL hardened against period-2 hunting: slew-limited anchor (+/-50us/cycle), bistable-trap snap re-anchor, re-prime on stale deadline - drift-free absolute-grid ticker mode; probe mode for timestamp forensics - bounded-memory online stats (histograms), graceful SIGINT/SIGTERM shutdown with full report, error-streak abort - timestamp plausibility filter comparing against the previous raw sample (avoids the deadlock after a startup outlier) - XFC scope waveform options: --el2202 (with --el2202-dual), --el2262, --el1252 latch timestamp readback with per-channel edge statistics - register access unified in regs.rs: named bit constants everywhere, read-modify-write for enable/activation bytes - vendored patched ethercrab 0.7.1 (sdo_write_complete, send_raw_coe) Verified on J1900 (PREEMPT_RT 6.6.135): 600k cycles/600s exact 1 kHz, tx/rx zero errors, phase_err p50=164us std=5us; EL2202<->EL1252 loopback edge interval mean 2000.24us std=24.65us.
396 lines
7.0 KiB
TOML
396 lines
7.0 KiB
TOML
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
|
#
|
|
# When uploading crates to the registry Cargo will automatically
|
|
# "normalize" Cargo.toml files for maximal compatibility
|
|
# with all versions of Cargo and also rewrite `path` dependencies
|
|
# to registry (e.g., crates.io) dependencies.
|
|
#
|
|
# If you are reading this file be aware that the original Cargo.toml
|
|
# will likely look very different (and much more reasonable).
|
|
# See Cargo.toml.orig for the original contents.
|
|
|
|
[package]
|
|
edition = "2024"
|
|
rust-version = "1.85"
|
|
name = "ethercrab"
|
|
version = "0.7.1"
|
|
build = false
|
|
exclude = [
|
|
"dumps",
|
|
"doc",
|
|
"NOTES.md",
|
|
"SPECNOTES.md",
|
|
]
|
|
autolib = false
|
|
autobins = false
|
|
autoexamples = false
|
|
autotests = false
|
|
autobenches = false
|
|
description = "A pure Rust EtherCAT MainDevice supporting std and no_std environments"
|
|
documentation = "https://docs.rs/ethercrab"
|
|
readme = "README.md"
|
|
keywords = [
|
|
"ethercat",
|
|
"beckhoff",
|
|
"automation",
|
|
"fieldbus",
|
|
"robotics",
|
|
]
|
|
categories = [
|
|
"science::robotics",
|
|
"no-std",
|
|
"network-programming",
|
|
]
|
|
license = "MIT OR Apache-2.0"
|
|
repository = "https://github.com/ethercrab-rs/ethercrab"
|
|
resolver = "2"
|
|
|
|
[package.metadata.docs.rs]
|
|
default-target = "x86_64-unknown-linux-gnu"
|
|
targets = [
|
|
"x86_64-unknown-linux-gnu",
|
|
"x86_64-pc-windows-gnu",
|
|
]
|
|
|
|
[features]
|
|
default = [
|
|
"std",
|
|
"io-uring",
|
|
]
|
|
defmt = [
|
|
"dep:defmt",
|
|
"embedded-io-async/defmt-03",
|
|
"heapless/defmt-03",
|
|
"ethercrab-wire/defmt-03",
|
|
]
|
|
io-uring = ["dep:io-uring"]
|
|
log = ["dep:log"]
|
|
serde = [
|
|
"dep:serde",
|
|
"bitflags/serde",
|
|
]
|
|
std = [
|
|
"dep:pnet_datalink",
|
|
"dep:async-io",
|
|
"log",
|
|
"futures-lite/std",
|
|
"embedded-io-async/std",
|
|
"ethercrab-wire/std",
|
|
"spin/std",
|
|
]
|
|
xdp = ["dep:xsk-rs"]
|
|
|
|
[lib]
|
|
name = "ethercrab"
|
|
path = "src/lib.rs"
|
|
|
|
[[example]]
|
|
name = "dc"
|
|
path = "examples/dc.rs"
|
|
required-features = ["std"]
|
|
|
|
[[example]]
|
|
name = "dc-lan9252-groups"
|
|
path = "examples/dc-lan9252-groups.rs"
|
|
|
|
[[example]]
|
|
name = "discover"
|
|
path = "examples/discover.rs"
|
|
|
|
[[example]]
|
|
name = "dump-eeprom"
|
|
path = "examples/dump-eeprom.rs"
|
|
|
|
[[example]]
|
|
name = "ek1100"
|
|
path = "examples/ek1100.rs"
|
|
required-features = ["std"]
|
|
|
|
[[example]]
|
|
name = "el3702-oversampling"
|
|
path = "examples/el3702-oversampling.rs"
|
|
|
|
[[example]]
|
|
name = "io-uring"
|
|
path = "examples/io-uring.rs"
|
|
required-features = [
|
|
"std",
|
|
"io-uring",
|
|
]
|
|
|
|
[[example]]
|
|
name = "multiple-groups"
|
|
path = "examples/multiple-groups.rs"
|
|
required-features = ["std"]
|
|
|
|
[[example]]
|
|
name = "pdi-and-sdo"
|
|
path = "examples/pdi-and-sdo.rs"
|
|
|
|
[[example]]
|
|
name = "performance"
|
|
path = "examples/performance.rs"
|
|
|
|
[[example]]
|
|
name = "release"
|
|
path = "examples/release.rs"
|
|
|
|
[[example]]
|
|
name = "sdo-info"
|
|
path = "examples/sdo-info.rs"
|
|
|
|
[[example]]
|
|
name = "smol-io-uring"
|
|
path = "examples/smol-io-uring.rs"
|
|
required-features = [
|
|
"std",
|
|
"io-uring",
|
|
]
|
|
|
|
[[example]]
|
|
name = "windows"
|
|
path = "examples/windows.rs"
|
|
|
|
[[example]]
|
|
name = "xdp"
|
|
path = "examples/xdp.rs"
|
|
required-features = [
|
|
"std",
|
|
"xdp",
|
|
]
|
|
|
|
[[test]]
|
|
name = "init-must-be-send"
|
|
path = "tests/init-must-be-send.rs"
|
|
|
|
[[test]]
|
|
name = "replay-dc"
|
|
path = "tests/replay-dc.rs"
|
|
|
|
[[test]]
|
|
name = "replay-ek1100-alias-address"
|
|
path = "tests/replay-ek1100-alias-address.rs"
|
|
|
|
[[test]]
|
|
name = "replay-ek1100-el2828-el2889"
|
|
path = "tests/replay-ek1100-el2828-el2889.rs"
|
|
|
|
[[test]]
|
|
name = "replay-ek1914-el3004-configure"
|
|
path = "tests/replay-ek1914-el3004-configure.rs"
|
|
|
|
[[test]]
|
|
name = "replay-ek1914-el3004-mailbox"
|
|
path = "tests/replay-ek1914-el3004-mailbox.rs"
|
|
|
|
[[test]]
|
|
name = "replay-ek1914-no-complete-access"
|
|
path = "tests/replay-ek1914-no-complete-access.rs"
|
|
|
|
[[test]]
|
|
name = "replay-ek1914-segmented-upload"
|
|
path = "tests/replay-ek1914-segmented-upload.rs"
|
|
|
|
[[test]]
|
|
name = "replay-issue-255"
|
|
path = "tests/replay-issue-255.rs"
|
|
|
|
[[test]]
|
|
name = "util"
|
|
path = "tests/util.rs"
|
|
|
|
[[bench]]
|
|
name = "frame"
|
|
path = "benches/frame.rs"
|
|
harness = false
|
|
|
|
[[bench]]
|
|
name = "pdu_loop"
|
|
path = "benches/pdu_loop.rs"
|
|
harness = false
|
|
|
|
[dependencies.async-io]
|
|
version = "2.0.0"
|
|
optional = true
|
|
|
|
[dependencies.atomic-waker]
|
|
version = "1.1.2"
|
|
|
|
[dependencies.atomic_enum]
|
|
version = "0.3.0"
|
|
|
|
[dependencies.bitflags]
|
|
version = "2.9.0"
|
|
|
|
[dependencies.crc]
|
|
version = "3.2.1"
|
|
default-features = false
|
|
|
|
[dependencies.defmt]
|
|
version = "0.3.5"
|
|
optional = true
|
|
|
|
[dependencies.embassy-time]
|
|
version = "0.4.0"
|
|
|
|
[dependencies.embedded-io-async]
|
|
version = "0.6.0"
|
|
default-features = false
|
|
|
|
[dependencies.ethercrab-wire]
|
|
version = "0.3.0"
|
|
|
|
[dependencies.futures-lite]
|
|
version = "2.0.0"
|
|
default-features = false
|
|
|
|
[dependencies.heapless]
|
|
version = "0.8.0"
|
|
|
|
[dependencies.lock_api]
|
|
version = "0.4.13"
|
|
|
|
[dependencies.log]
|
|
version = "0.4.27"
|
|
optional = true
|
|
default-features = false
|
|
|
|
[dependencies.sealed]
|
|
version = "0.6.0"
|
|
|
|
[dependencies.serde]
|
|
version = "1.0.190"
|
|
features = ["derive"]
|
|
optional = true
|
|
|
|
[dependencies.smlang]
|
|
version = "0.8.0"
|
|
|
|
[dependencies.spin]
|
|
version = "0.10.0"
|
|
features = [
|
|
"lock_api",
|
|
"rwlock",
|
|
]
|
|
default-features = false
|
|
|
|
[dev-dependencies.arbitrary]
|
|
version = "1.3.1"
|
|
features = ["derive"]
|
|
|
|
[dev-dependencies.cassette]
|
|
version = "0.3.0"
|
|
|
|
[dev-dependencies.core_affinity]
|
|
version = "0.8.1"
|
|
|
|
[dev-dependencies.criterion]
|
|
version = "0.5.1"
|
|
features = ["cargo_bench_support"]
|
|
default-features = false
|
|
|
|
[dev-dependencies.csv]
|
|
version = "1.3.0"
|
|
|
|
[dev-dependencies.env_logger]
|
|
version = "0.11.6"
|
|
|
|
[dev-dependencies.heckcheck]
|
|
version = "2.0.1"
|
|
|
|
[dev-dependencies.pcap-file]
|
|
version = "2.0.0"
|
|
|
|
[dev-dependencies.pretty_assertions]
|
|
version = "1.4.0"
|
|
|
|
[dev-dependencies.quanta]
|
|
version = "0.12.3"
|
|
|
|
[dev-dependencies.savefile]
|
|
version = "0.18.5"
|
|
default-features = false
|
|
|
|
[dev-dependencies.savefile-derive]
|
|
version = "0.18.5"
|
|
default-features = false
|
|
|
|
[dev-dependencies.serde]
|
|
version = "1.0.190"
|
|
features = ["derive"]
|
|
default-features = false
|
|
|
|
[dev-dependencies.signal-hook]
|
|
version = "0.3.17"
|
|
|
|
[dev-dependencies.simple_logger]
|
|
version = "5.0.0"
|
|
default-features = false
|
|
|
|
[dev-dependencies.smol]
|
|
version = "2.0.0"
|
|
|
|
[dev-dependencies.smoltcp]
|
|
version = "0.12.0"
|
|
features = [
|
|
"medium-ethernet",
|
|
"proto-ipv4",
|
|
"socket-raw",
|
|
]
|
|
default-features = false
|
|
|
|
[dev-dependencies.spin_sleep]
|
|
version = "1.2.1"
|
|
|
|
[dev-dependencies.ta]
|
|
version = "0.5.0"
|
|
|
|
[dev-dependencies.thread-priority]
|
|
version = "1.2.0"
|
|
|
|
[dev-dependencies.tokio]
|
|
version = "1.33.0"
|
|
features = [
|
|
"rt-multi-thread",
|
|
"macros",
|
|
"sync",
|
|
"time",
|
|
]
|
|
|
|
[target.'cfg(target_os = "linux")'.dependencies.io-uring]
|
|
version = "0.7.4"
|
|
optional = true
|
|
|
|
[target.'cfg(target_os = "linux")'.dependencies.slab]
|
|
version = "0.4.12"
|
|
|
|
[target.'cfg(target_os = "linux")'.dependencies.smallvec]
|
|
version = "1.13.1"
|
|
features = ["const_generics"]
|
|
|
|
[target.'cfg(target_os = "linux")'.dependencies.timerfd]
|
|
version = "1.5.0"
|
|
|
|
[target.'cfg(target_os = "linux")'.dependencies.xsk-rs]
|
|
version = "0.8.0"
|
|
optional = true
|
|
|
|
[target.'cfg(target_os = "windows")'.dependencies.pcap]
|
|
version = "2.2.0"
|
|
|
|
[target.'cfg(target_os = "windows")'.dependencies.pnet_datalink]
|
|
version = "0.35.0"
|
|
features = ["std"]
|
|
optional = true
|
|
|
|
[target."cfg(unix)".dependencies.libc]
|
|
version = "0.2.180"
|
|
|
|
[target."cfg(unix)".dependencies.nix]
|
|
version = "0.31.1"
|
|
features = ["net"]
|
|
|
|
[profile.profiling]
|
|
debug = 2
|
|
inherits = "release"
|