The HID CompositeReport descriptor had usage_min = 0x81 paired with
logical_min = 1. For array-type inputs, the host resolves a received
value N to a usage as:
usage = usage_min + (N - logical_min)
With those values, sending 0x82 (Sleep) resolves to
0x81 + (0x82 - 1) = 0x102 -- outside the declared usage range and
silently ignored by the host.
Fix: set usage_min = 0x01 to match logical_min = 1, so the formula
collapses to usage = N and the raw usage ID passes through correctly.
The descriptor byte count is unchanged, so the BLE report_map size
assumption in ble_server.rs is unaffected.
I noticed that pressing the system sleep key on my keymap did nothing. The HID system control descriptor had usage_min = 0x81 with logical_min = 1, which caused the host to resolve the sleep usage ID to an out-of-range value and discard it.
Fix is a one-byte descriptor change: usage_min = 0x01. No behaviour change for any other report type.
Tested with a Linux desktop.