It started with a dumb idea. I have a Logitech MX Vertical, which travels between my home machine, work laptop and other devices constantly. At some point I looked at it and thought: this thing has a flash memory. It has to, otherwise how does it remember the DPI setting between plugs. So what if I stored something in it? Yea, I was bored. The plan was to treat the mouse like a tiny USB drive. Since it physically travels between computers, it could technically carry data with it. 2 bytes on a 64GB stick is embarrassing. 2 bytes in your mouse is art. Logitech mice communicate over something called HID++, a protocol they built on top of standard USB HID. It's partially documented by Logitech, partially reverse engineered by the open source community. I wrote a Rust tool to enumerate every feature the mouse exposes. Turns out it has 33 of them. HID++ 2.0 works like this: every device has a feature table. Each entry maps a stable feature ID to a device-specific index. The ID is consistent across all Logitech devices. The index varies per model. So you first ask the device "where is feature 0x2201?" and it tells you "index 0x12 on this mouse". Then you use that index for all subsequent calls. Every call is a short packet: report ID, device index, feature index, function ID, and up to 3 bytes of params. The response comes back in the same shape. Most are undocumented. Some have names like EnableHiddenFeatures and TemplateBytesNVS. That last one sounds exactly like what I wanted: non-volatile storage, index 0x1eb0. I spent a while on 0x1c00 first. Six slots, read/write flags, the whole thing. Turns out macOS's IOHIDManager silently blocks the longer HID++ report format you need to actually write to it. The OS just drops the packets. No error, no explanation, nothing. I found this out after writing a pile of probe code and staring at empty responses for longer than I'd like to admit. There are ways around IOHIDManager, like talking directly to the USB device via IOKit, but ...
First seen: 2026-03-22 00:44
Last seen: 2026-03-23 05:59