logiops_core/
lib.rs

1//! Core HID++ protocol implementation and device features.
2//!
3//! This crate provides the HID++ protocol layer for communicating with
4//! Logitech devices. It builds on top of `hidpp-transport` to provide
5//! higher-level device abstractions and feature implementations.
6//!
7//! # Features
8//!
9//! The HID++ 2.0 protocol uses a feature-based model where each capability
10//! (DPI control, `SmartShift`, etc.) is exposed as a feature with a unique ID.
11//! Feature indices are discovered at runtime since they can vary between
12//! devices and firmware versions.
13//!
14//! # Device Initialization
15//!
16//! ```no_run
17//! use hidpp_transport::{create_hid_api, enumerate_hidpp_devices, HidapiChannel};
18//! use logiops_core::HidppDevice;
19//!
20//! # async fn example() -> logiops_core::error::Result<()> {
21//! let api = create_hid_api()?;
22//! let devices = enumerate_hidpp_devices(&api);
23//!
24//! if let Some(logi_dev) = devices.first() {
25//!     let channel = HidapiChannel::open(&api, &logi_dev.path)?;
26//!     let mut device = HidppDevice::direct(channel);
27//!
28//!     // Initialize queries protocol version, name, and discovers features
29//!     let info = device.initialize().await?;
30//!     println!("Found: {} ({})", info.name, info.protocol_version);
31//! }
32//! # Ok(())
33//! # }
34//! ```
35
36pub mod device;
37pub mod error;
38pub mod features;
39pub mod protocol;
40
41// Re-export main types
42pub use device::{DeviceInfo, HidppDevice};
43pub use error::{HidppErrorCode, ProtocolError, Result};
44pub use features::device_name::DeviceKind;
45pub use features::{
46    AdjustableDpiFeature, BatteryFeature, BatteryInfo, BatteryStatusFeature, ButtonEvent,
47    ChargingStatus, CidReporting, ControlFlags, ControlInfo, FeatureInfo, FeatureSetFeature,
48    FeatureType, ReprogControlsFeature, SensorInfo, SmartShiftConfig, SmartShiftFeature,
49    UnifiedBatteryFeature, WheelMode,
50};
51pub use protocol::ProtocolVersion;
52
53// Re-export transport for convenience
54pub use hidpp_transport;