OpenLogi

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

FunctionHID++ fnSignatureReturns
get_battery_level_status0()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

FieldTypeDescription
discharge_levelu8Current charge as a percentage (0100). Firmware reports it in coarse steps, not as a continuous value.
next_levelu8The next lower discharge step the firmware will report — a granularity hint, unused for display.
statusLegacyBatteryStatusThe current charging status.

LegacyBatteryStatus

VariantValueDescription
Discharging0Battery is discharging.
Recharging1Battery is recharging.
AlmostFull2Charging and nearly full.
Full3Charge complete.
SlowRecharge4Recharging below optimal speed.
InvalidBattery5The battery type is invalid.
ThermalError6The battery subsystem reported a thermal error.
Other7Other 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):

ByteFieldNotes
0discharge_levelpercentage, in coarse firmware steps
1next_levelnext lower step the firmware will report
2statusLegacyBatteryStatus 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.

On this page