@@ -119,38 +119,34 @@ needs a richer type before it can be exposed even once the command is found.
119119- The DPI stage table (` 0x04 ` /` 0x06 ` ) is decoded and tested but never written.
120120 A wrong length there is the one realistic way to corrupt stored settings.
121121
122- ## Viper Mini (not yet verified on hardware)
122+ ## Viper Mini (verified on hardware)
123123
124124The Viper Mini shares the 90-byte report and command ids above, but belongs to
125- openrazer's legacy transaction group: every command is sent with transaction id
126- ` 0xff ` rather than ` 0x1f ` , and the DPI read uses the no-store byte (` 0x00 ` )
127- where the V3 Pro reads with the storage byte. Commands and the transaction id
128- below come from openrazer's kernel driver and daemon, not from this app's own
129- hardware captures. Confirm each on the device before trusting it:
130-
131- 1 . Connect the mouse over USB and confirm the model and wired state appear, with
132- no battery column (the Viper Mini is wired-only and answers no battery query).
133- 2 . Confirm DPI reads correctly and that the control offers 100–8500 DPI.
134- 3 . Change the DPI and confirm the pointer speed changes, then reload and confirm
135- persistence. This also confirms the write-then-read-back pairing of storage
136- (` 0x01 ` ) and no-store (` 0x00 ` ) works on this model.
137- 4 . Confirm the polling rate reads 125/500/1000 Hz and tracks a Synapse change,
138- then change it and confirm it persists.
139- 5 . Confirm no lift-off distance buttons and no sensor processing card appear.
140- 6 . Record the device identifier, firmware version, and any failing setting in
141- the issue or pull request.
125+ openrazer's legacy transaction group: every command is answered with transaction
126+ id ` 0xff ` rather than ` 0x1f ` , and the DPI read uses the no-store byte (` 0x00 ` )
127+ where the V3 Pro reads with the storage byte. The transaction id and the command
128+ table below were confirmed on hardware (` 1532:008a ` ):
129+
130+ 1 . The model and wired state appear, with no battery column (wired-only; the
131+ mouse answers no battery query).
132+ 2 . DPI reads back correctly and the control offers 100–8500 DPI.
133+ 3 . A DPI change alters pointer speed and persists after reload, confirming the
134+ write-with-storage (` 0x01 ` ) / read-with-no-store (` 0x00 ` ) pairing.
135+ 4 . Polling rate reads 125/500/1000 Hz, a 1000 Hz write round-trips with status
136+ ` 0x02 ` , and the rate persists.
137+ 5 . No lift-off distance buttons and no sensor processing card appear.
142138
143139| Read | Class / ID | Notes |
144140| --- | --- | --- |
145141| Firmware | ` 0x00 ` / ` 0x81 ` | transaction id ` 0xff ` |
146142| Serial | ` 0x00 ` / ` 0x82 ` | ASCII, null terminated; transaction id ` 0xff ` |
147- | DPI | ` 0x04 ` / ` 0x85 ` | no-store byte, then big-endian X and Y |
143+ | DPI | ` 0x04 ` / ` 0x85 ` | no-store byte ` 0x00 ` , then big-endian X and Y |
148144| Polling | ` 0x00 ` / ` 0x85 ` | divisor of 1000; wired only |
149145
150146| Write | Class / ID | Notes |
151147| --- | --- | --- |
152- | DPI | ` 0x04 ` / ` 0x05 ` | storage byte, then big-endian X and Y |
148+ | DPI | ` 0x04 ` / ` 0x05 ` | storage byte ` 0x01 ` , then big-endian X and Y |
153149| Polling | ` 0x00 ` / ` 0x05 ` | divisor of 1000 |
154150
155- The Viper Mini's 8500 DPI ceiling comes from the openrazer daemon class. The
156- DPI step granularity is assumed to be whole values, matching the V3 Pro driver.
151+ The 8500 DPI ceiling comes from the openrazer daemon class. The DPI step
152+ granularity is assumed to be whole values, matching the V3 Pro driver.
0 commit comments