hid_monitor 0.1.2

Cross-platform Rust library for monitoring HID device plug/unplug events and enumerating current HID devices. Supports Windows and macOS.
Documentation
## hid_monitor

一个用于 **监控 HID 设备插拔事件并枚举当前 HID 设备** 的跨平台 Rust 库,当前支持 **Windows** 和 **macOS**。  
This is a cross-platform Rust library for **monitoring HID device plug/unplug events and listing current HID devices**, currently supporting **Windows** and **macOS**.

---

## 特性 Features

- **设备枚举 Device enumeration**:列出当前所有 HID 设备(含路径、VID、PID 等信息)。  
  List all currently connected HID devices (path, VID, PID, etc.).
- **事件监听 Event monitoring**:实时监听 HID 设备的插入和移除事件。  
  Receive real-time events when HID devices are plugged in or removed.
- **跨平台 Cross-platform**:统一 API,内部根据目标平台调用 Windows / macOS 实现。  
  Unified API with platform-specific implementations under the hood.
- **纯 Rust 接口 Pure Rust API**:当前版本仅提供 Rust API,不再暴露 C FFI 接口。  
  This version only exposes a Rust API; C FFI bindings are not provided.

---

## 安装 Installation

在你的 `Cargo.toml` 中添加:  
Add this to your `Cargo.toml`:

```toml
[dependencies]
hid_monitor = "0.1"
```

> 注意:版本号仅为示例,请以 crates.io 上实际发布的版本为准。  
> Note: The version is an example, please use the actual version published on crates.io.

---

## 快速上手 Quick Start

### 列出当前 HID 设备  
### List current HID devices

```rust
use hid_monitor::{list_devices};

fn main() {
    for device in list_devices() {
        println!(
            "Device: path={} vid={:?} pid={:?}",
            device.path,
            device.vid,
            device.pid,
        );
    }
}
```

### 监听插拔事件  
### Monitor plug/unplug events

```rust
use hid_monitor::{start_hid_monitor, HidEvent};

fn main() {
    let rx = start_hid_monitor();
    println!("HID monitor started. Plug/unplug devices to see events...");

    loop {
        match rx.recv() {
            Ok(HidEvent::Arrived(info)) => {
                println!(
                    "Device arrived: path={} vid={:?} pid={:?}",
                    info.path, info.vid, info.pid
                );
            }
            Ok(HidEvent::Removed(info)) => {
                println!(
                    "Device removed: path={} vid={:?} pid={:?}",
                    info.path, info.vid, info.pid
                );
            }
            Err(e) => {
                eprintln!("monitor channel error: {e}");
                break;
            }
        }
    }
}
```

---

## 平台支持与注意事项 Platform Support & Notes

- **Windows**:基于 `windows` crate 调用 Win32 API。  
  Uses Win32 APIs via the `windows` crate.
- **macOS**:基于 `core-foundation``io-kit-sys`  
  Uses `core-foundation` and `io-kit-sys` on macOS.
- **其他平台 Other platforms**:当前返回空设备列表,且不产生事件。  
  On unsupported platforms, the library returns an empty device list and no events.

> 某些系统/环境下,访问 HID 设备可能需要较高权限(例如管理员权限)。  
> On some systems/environments, elevated privileges (e.g. administrator) may be required to access HID devices.

---

## 许可证 License

本项目采用 **MIT License**。  
This project is licensed under the **MIT License**.