CLI for diplaying information about wlmouse using hidapi
- [❔] Beast X Mini - I don't own it. There is a good chance it also uses feature reports and potentially compatible with Max/BeastX 8K
- [✔️/❌] Beast X - requires direct reading from interrupt endpoint. Battery only right now, still don't know how to poll for other stuff
- [✔️] Beast X 8K - originally developed with it in mind. Done through feature reports
- [❔] Beast X Max - I don't own it. There is a good chance it also uses feature reports and potentially compatible with Mini/BeastX 8K
WLMouse product | Vendor ID | Product ID |
---|---|---|
Beast X Mini Receiver | 0x36A7 |
? |
Beast X Mini | 0x36A7 |
? |
Beast X | 0x36A7 |
0xA888 |
Beast X Receiver | 0x36A7 |
0xA887 |
Beast X 8K | 0x36A7 |
0xA884 |
Beast X 8K Receiver | 0x36A7 |
0xA883 |
Beast X Max | 0x36A7 |
? |
Beast X Max Receiver | 0x36A7 |
? |
All bytes sent and read from feature reports were sniffed using Wireshark and usbpcap between actual device and official WLMouse software. Since there is no official structure of all the bytes sent/read, I had to guess what they do mean. This means it MAY NOT be 100% accurate
Summary of how to set/get feature reports
- List all devices (GetRawInputDeviceList)
- Get device info for each one (GetRawInputDeviceInfoW with
uiCommand == RIDI_DEVICEINFO
) - Get the one with required Vendor and Product ID
- Get device virtual file (GetRawInputDeviceInfoW with
uiCommand == RIDI_DEVICENAME
) - Open virtual file (CreateFileW)
- Set required feature to poll from device (HidD_SetFeature)
- Wait for a small delay for device to process your request
- Grab result of your request (HidD_GetFeature)
Summary of how to read/write using interrupt endpoint
- List all devices (GetRawInputDeviceList)
- Get device info for each one (GetRawInputDeviceInfoW with
uiCommand == RIDI_DEVICEINFO
) - Get the one with required Vendor, Product ID
- Check device usage, should be control (
0x06
), otherwise Windows won't allow read/write operation. If no, repeat step 3 - Get device virtual file (GetRawInputDeviceInfoW with
uiCommand == RIDI_DEVICENAME
) - Open virtual file (CreateFileW)
- Write to virtual file (WriteFile)
- Read from virtual file (ReadFile)