0x1000 · batteryStatus
The legacy battery feature — a coarse discharge level plus charging status, used by older mice that never expose 0x1004 unifiedBattery.
The legacy battery feature: it reports a device's charge as a discharge level
plus a charging status. It predates the consolidated 0x1004
unifiedBattery, and older mice such as the MX Master 2S expose 0x1000 and never
0x1004.
OpenLogi's inventory probe falls back to this feature when the unified one is
absent — the same enhanced-then-legacy pattern SmartShift uses for 0x2111 /
0x2110 — so a legacy mouse still shows battery in the carousel and in
openlogi list.
Spec: Logitech HID++ 2.0 — x1000 batteryStatus. Used by: battery percentage / charge state on legacy devices.
Function reference
The BatteryStatusFeature wrapper (0x1000) exposes:
Methods
| Function | HID++ fn | Signature | Returns |
|---|---|---|---|
get_battery_level_status | 0 | () | LegacyBatteryInfo |
The method is async and returns Result<…, Hidpp20Error>. The optional
getBatteryCapability (function 1) and the broadcast event are not implemented;
neither is needed to display a charge reading.
Types
LegacyBatteryInfo
| Field | Type | Description |
|---|---|---|
discharge_level | u8 | Current charge as a percentage (0–100). Firmware reports it in coarse steps, not as a continuous value. |
next_level | u8 | The next lower discharge step the firmware will report — a granularity hint, unused for display. |
status | LegacyBatteryStatus | The current charging status. |
LegacyBatteryStatus
| Variant | Value | Description |
|---|---|---|
Discharging | 0 | Battery is discharging. |
Recharging | 1 | Battery is recharging. |
AlmostFull | 2 | Charging and nearly full. |
Full | 3 | Charge complete. |
SlowRecharge | 4 | Recharging below optimal speed. |
InvalidBattery | 5 | The battery type is invalid. |
ThermalError | 6 | The battery subsystem reported a thermal error. |
Other | 7 | Other charging error. Kept explicit so a device reporting it surfaces as unknown instead of failing the parse and making the battery indicator vanish. |
Wire format
get_battery_level_status (fn 0)
Request: [0x00, 0x00, 0x00] (no parameters)
Response (byte → field):
| Byte | Field | Notes |
|---|---|---|
| 0 | discharge_level | percentage, in coarse firmware steps |
| 1 | next_level | next lower step the firmware will report |
| 2 | status | LegacyBatteryStatus enum value (0 = Discharging … 7 = Other) |
An unrecognised status byte fails as Hidpp20Error::UnsupportedResponse rather
than being guessed at.
Usage (Rust)
use hidpp::{device::Device, feature::battery_status::BatteryStatusFeature};
// device: &mut Device, already created via Device::new(channel, index)
device.enumerate_features().await?;
if let Some(feat) = device.get_feature::<BatteryStatusFeature>() {
let info = feat.get_battery_level_status().await?;
println!("{}% — {:?}", info.discharge_level, info.status);
}See also: 0x1004 unifiedBattery, 0x1001 batteryVoltage.