2020-05-08 15:17:44 -06:00
# Documentation
## Source documentation
Doxygen is used in places for source code documentation. To build the documentation install doxygen and run
```
doxygen Doxyfile
```
2020-05-21 16:50:02 -06:00
A directory named doxygen will be created, containing html and latex files.
2020-05-08 15:17:44 -06:00
## USB Protocol description
2020-04-29 07:33:03 -06:00
This directory contains captured usb data (when sending the default settings). For further details look at the write functions in the source code.
2020-07-12 13:17:52 -06:00
default_m908.txt and default-annotated_m908.pdf contain the extracted usb data when sending the default settings. This was obtained by exporting packet dissections as plain text from wireshark (select only bytes) and running ``grep "00[4-9]0"`` on the exported files.
2020-05-02 08:01:29 -06:00
2020-05-08 15:17:44 -06:00
### Button mapping
2020-06-16 10:45:34 -06:00
The function of each button is described by 4 bytes. In case of the fire button all 4 bytes are used, in all other cases the last byte is 0x00. Look at ``set_key_mapping()`` (include/setters.cpp) and include/data.cpp for the full meaning of these bytes.
A few are listed below:
- Keyboard key:
0. = 0x90 if without modifiers, = 0x8f if with modifiers
1. modifier value (sum of individual modifer values)
2. keycode
3. = 0x00
- Media keys:
0. = 0x8e
1. = 0x01
2. keycode
3. = 0x00
- Fire button:
0. = 0x99
1. keycode
2. repeats
3. delay
- Macro:
0. = 0x91
1. macro number (0x0-0xe)
2020-11-08 09:51:53 -07:00
2. number of repeats
2020-06-16 10:45:34 -06:00
3. 0x00
2020-11-08 09:51:53 -07:00
- Macro (repeat until button is pressed again):
0. = 0x91
1. macro number (0x0-0xe) + 0x3f
2. 0xff
3. 0xff
- Macro (repeat while button is pressed):
0. = 0x91
1. macro number (0x0-0xe) + 0x7f
2. 0xff
3. 0xff
2020-11-07 14:40:30 -07:00
- Snipe (Changes DPI while pressed)
0. = 0x9a
1. 1
2. DPI 200-1100 (100 increment): 4 6 9 b d f 12 14 16 18
3. = 2.
2020-06-16 10:45:34 -06:00
- No function (none)
all bytes = 0x00
2020-09-08 16:31:29 -06:00
### Reading settings from the mouse
The settings are read in 3 parts:
1. led settings
2. macros
3. button mappping
2021-01-21 09:54:58 -07:00
### LED modes
The LED mode is specified by two bytes.
byte1 % 8:
- 0: off
- 1: decode byte2
- 2: wave (multicolor)
- 3: reactive_button (static color, new color on button press, not in the official software)
- 4: random (random flashing with random colors, scrollwheel and logo separately, not in the official software)
- 5: wave (same as 2)
- 6: alternating (flashing of scrollwheel and logo separately, multicolor)
- 7: reactive
byte2 (only relevant when byte1 == 1):
- 0: breathing (single color)
- 1: breathing_rainbow (not in the official software)
- 2: static
- 8: rainbow
- 16: flashing