knx_pico/
lib.rs

1#![cfg_attr(all(not(test), not(feature = "std")), no_std)]
2#![expect(
3    dead_code,
4    reason = "Library under development, not all items used yet"
5)]
6#![doc = include_str!("../README.md")]
7// Clippy configuration
8#![allow(clippy::doc_markdown)] // Many KNX terms don't need backticks
9#![allow(clippy::match_same_arms)] // Intentional for exhaustiveness in DPT types
10#![allow(clippy::trivially_copy_pass_by_ref)] // Consistent API across DPT types
11#![allow(clippy::unused_self)] // Some methods are intentionally associated
12#![allow(clippy::allow_attributes_without_reason)] // Will be addressed incrementally
13#![allow(clippy::map_err_ignore)] // Error context not always needed
14#![allow(clippy::fn_params_excessive_bools)] // Legacy API, will refactor later
15
16//! # knx-pico
17//!
18//! KNXnet/IP protocol implementation for embedded systems.
19//!
20//! This crate provides a `no_std` implementation of the KNXnet/IP protocol,
21//! designed for use with Embassy async runtime on embedded microcontrollers.
22//!
23//! ## Features
24//!
25//! - KNXnet/IP tunneling support
26//! - Common Datapoint Types (DPT)
27//! - Individual and Group addressing
28//! - Zero-copy parsing
29//! - Async/await with Embassy
30//!
31//! ## Example
32//!
33//! ```rust,no_run
34//! use knx_pico::{KnxClient, GroupAddress};
35//!
36//! // Connect to KNX gateway and send a command
37//! let addr = GroupAddress::new(1, 2, 3).unwrap();
38//! client.write_bool(addr, true).await?;
39//! ```
40
41pub mod addressing;
42pub mod dpt;
43pub mod error;
44pub mod net;
45pub mod protocol;
46
47// Macro modules (must be declared before use)
48#[macro_use]
49pub mod macros;
50#[macro_use]
51pub mod logging;
52
53// Embassy-based client modules (requires embassy-rp or embassy-rp-usb feature)
54#[cfg(any(feature = "embassy-rp", feature = "embassy-rp-usb"))]
55pub mod knx_client;
56#[cfg(any(feature = "embassy-rp", feature = "embassy-rp-usb"))]
57pub mod knx_discovery;
58
59// Re-export commonly used types
60#[doc(inline)]
61pub use addressing::{GroupAddress, IndividualAddress};
62#[doc(inline)]
63pub use dpt::{Dpt1, Dpt5, Dpt9, DptDecode, DptEncode};
64#[doc(inline)]
65pub use error::{KnxError, Result};
66#[doc(inline)]
67pub use net::{IpEndpoint, Ipv4Addr};
68
69// Re-export client types when embassy features are enabled
70#[cfg(any(feature = "embassy-rp", feature = "embassy-rp-usb"))]
71#[doc(inline)]
72pub use knx_client::KnxClient;