[package] name = "ethercrab" categories = ["science::robotics", "no-std", "network-programming"] version = "0.4.4" edition = "2021" license = "MIT OR Apache-2.0" readme = "README.md" repository = "https://github.com/ethercrab-rs/ethercrab" documentation = "https://docs.rs/ethercrab" description = "An EtherCAT master in pure Rust that is no_std compatible" keywords = ["ethercat", "beckhoff", "automation", "fieldbus", "soem"] exclude = ["dumps", "doc", "NOTES.md", "SPECNOTES.md"] resolver = "2" rust-version = "1.79" [workspace] members = ["ethercrab-wire", "ethercrab-wire-derive"] [package.metadata.docs.rs] default-target = "x86_64-unknown-linux-gnu" targets = ["x86_64-unknown-linux-gnu", "x86_64-pc-windows-gnu"] [dependencies] async-io = { version = "2.0.0", optional = true } atomic-waker = "1.1.2" atomic_enum = "0.3.0" atomic_refcell = "0.1.13" bitflags = "2.4.1" defmt = { version = "0.3.5", optional = true } embassy-time = "0.3.0" embedded-io-async = { version = "0.6.0", default-features = false } futures-lite = { version = "2.0.0", default-features = false } heapless = "0.8.0" log = { version = "0.4.20", optional = true, default-features = false } sealed = "0.5.0" serde = { version = "1.0.190", features = ["derive"], optional = true } smlang = "0.6.0" smoltcp = { version = "0.11.0", default-features = false, features = [ "proto-ipv4", "socket-raw", "medium-ethernet", ] } ethercrab-wire = { version = "0.1.4", path = "./ethercrab-wire" } [target.'cfg(target_os = "windows")'.dependencies] pnet_datalink = { version = "0.34.0", features = ["std"], optional = true } async-channel = "2.2.0" [target.'cfg(unix)'.dependencies] libc = "0.2.149" nix = { version = "0.28.0", features = ["net"] } [target.'cfg(target_os = "linux")'.dependencies] io-uring = "0.6.3" smallvec = { version = "1.13.1", features = ["const_generics"] } slab = "0.4.9" timerfd = "1.5.0" [dev-dependencies] arbitrary = { version = "1.3.1", features = ["derive"] } criterion = { version = "0.5.1", default-features = false, features = [ "cargo_bench_support", ] } env_logger = "0.11.1" heckcheck = "2.0.1" pcap-file = "2.0.0" pretty_assertions = "1.4.0" smol = "2.0.0" tokio = { version = "1.33.0", features = [ "rt-multi-thread", "macros", "sync", "time", ] } thread-priority = "0.16.0" ta = "0.5.0" cassette = "0.2.5" csv = "1.3.0" serde = { version = "1.0.190", default-features = false, features = ["derive"] } signal-hook = "0.3.17" core_affinity = "0.8.1" anyhow = "1.0.82" [features] default = ["std"] defmt = [ "dep:defmt", "smoltcp/defmt", "embedded-io-async/defmt-03", "heapless/defmt-03", "ethercrab-wire/defmt-03", ] log = ["dep:log"] std = [ "dep:pnet_datalink", "dep:async-io", "smoltcp/phy-raw_socket", "log", "futures-lite/std", "embedded-io-async/std", "ethercrab-wire/std", ] serde = ["dep:serde", "bitflags/serde"] # Development only - DO NOT USE __internals = [] [[example]] name = "akd" required-features = ["std"] [[example]] name = "dc" required-features = ["std"] [[example]] name = "ec400" required-features = ["std"] [[example]] name = "ek1100" required-features = ["std"] [[example]] name = "multiple-groups" required-features = ["std"] [[example]] name = "dump-eeprom" required-features = ["std", "__internals"] [[bench]] name = "pdu_loop" harness = false [[bench]] name = "frame" harness = false [profile.profiling] inherits = "release" debug = true