AprilNEA/OpenLogi · error
wheel reporting target is not native after write
Error message
wheel reporting target is not native after write: {:?} What it means
Raised by the wheel diagnostic after writing scroll resolution: the read-back `after.target` is not `ScrollReportingTarget::Native`, meaning the device is not routing wheel reporting through the native (on-device HID++ ) target after the write. The diagnostic requires the write to leave the wheel in native reporting mode; anything else indicates the device switched reporting paths or the write disturbed the target setting.
Solutions
- Close competing HID++ tools (Logitech Options+, G-Hub) that may own wheel reporting, then re-run.
- Explicitly set the reporting target back to Native and retry the diagnostic.
- Re-run to determine whether the target flip is reproducible or a transient race.
- Check firmware behavior for this model regarding reporting target on resolution writes.
Example fix
// before
if after.target != ScrollReportingTarget::Native {
anyhow::bail!("wheel reporting target is not native after write: {:?}", after.target);
}
// after
if after.target != ScrollReportingTarget::Native {
openlogi_hid::set_scroll_reporting_target(&route, ScrollReportingTarget::Native).await?;
anyhow::bail!("wheel reporting target is not native after write: {:?} (reset to native)", after.target);
} Defensive patterns
Strategy: try-catch
Validate before calling
// Ensure no other HID++ consumer owns the wheel before writing
let before = read_scroll_reporting(&route).await?;
if before.target != ScrollReportingTarget::Native {
set_scroll_reporting_target(&route, ScrollReportingTarget::Native).await?;
} Try / catch
if let Err(e) = run_wheel_diag(&route, requested).await {
if e.to_string().contains("target is not native") {
// recover: force native target and re-read
let _ = set_scroll_reporting_target(&route, ScrollReportingTarget::Native).await;
}
} Prevention
- Set the reporting target to Native explicitly before diagnostics.
- Stop vendor software (Options+/G-Hub) that competes for wheel reporting.
- Re-read state after every write and restore defaults on collateral change.
- Treat free-scroll/HiRes toggles as potential target-flippers around writes.
When it happens
Trigger: Running the wheel resolution diagnostic where `after.target != ScrollReportingTarget::Native` on read-back — the resolution write side-effected the reporting target, firmware switched to an alternate reporting path, or another driver/application changed the wheel mode concurrently.
Common situations: Concurrency with Logitech Options+ or another HID++ tool that owns wheel reporting; firmware that resets reporting target when resolution changes; HiRes/free-scroll mode toggles flipping the target away from native.
Related errors
- SmartShift mode changed unexpectedly: was
- wheel resolution write not applied: requested
- SmartShift sensitivity write not applied: requested
- SmartShift toggle had no effect: still
- wheel inversion changed unexpectedly: was
AI-assisted analysis of AprilNEA/OpenLogi@e846e6f4b4 (2026-09-13).
Data as JSON: /api/errors/47ba317475b8323f.
Report an issue: GitHub.
Appendix: source
Thrown at crates/openlogi-cli/src/cmd/diag/wheel.rs:65
let Some(requested) = args.resolution.map(ScrollResolution::from) else {
return Ok(());
};
let after = openlogi_hid::set_scroll_resolution(&route, requested)
.await
.context("set wheel resolution")?;
print_mode("read-back", after);
if after.resolution != requested {
anyhow::bail!(
"wheel resolution write not applied: requested {}, device reports {}",
resolution_label(requested),
resolution_label(after.resolution)
);
}
if after.target != ScrollReportingTarget::Native {
anyhow::bail!(
"wheel reporting target is not native after write: {:?}",
after.target
);
}
if after.inverted != before.inverted {
anyhow::bail!(
"wheel inversion changed unexpectedly: was {}, now {}",
before.inverted,
after.inverted
);
}
println!(
"✓ wheel resolution set to {} (native reporting, inversion preserved)",
resolution_label(requested)
);
Ok(())
}View on GitHub (pinned to e846e6f4b4)