updated descriptors table and the devices doc

This commit is contained in:
Daniel Pavel 2013-05-04 17:18:39 +02:00
parent 13a54565ba
commit 64c36a1562
4 changed files with 29 additions and 11 deletions

View File

@ -18,11 +18,12 @@ Linux system configuration) are supported:
* The DPI can be changed on the [Performance MX Mouse][P_MX]. * The DPI can be changed on the [Performance MX Mouse][P_MX].
* Smooth scrolling (higher sensitivity on vertical scrolling with the wheel) can * Smooth scrolling (higher sensitivity on vertical scrolling with the wheel) can
be toggled on the [M705 Marathon Mouse][M705] and [Anywhere MX Mouse][A_MX]. be toggled on the [M705 Marathon Mouse][M705].
# Supported devices # Supported devices
Keyboards: Keyboards:
| Device | HID++ | Battery | Other features | | Device | HID++ | Battery | Other features |
@ -33,7 +34,7 @@ Keyboards:
| K360 | | | | | K360 | | | |
| K400 Touch | | | | | K400 Touch | | | |
| K750 Solar | 2.0 | yes | FN swap, Lux reading, solar button | | K750 Solar | 2.0 | yes | FN swap, Lux reading, solar button |
| K800 Illuminated | | yes | FN swap | | K800 Illuminated | 1.0 | yes | FN swap |
Mice: Mice:
@ -44,14 +45,14 @@ Mice:
| M325 | | | | | | M325 | | | | |
| M345 | | | | | | M345 | | | | |
| M505 | | | | | | M505 | | | | |
| M510 | | | | | | M510 | | yes | | |
| M515 Couch | 2.0 | yes | - | | | M515 Couch | 2.0 | yes | - | |
| M525 | | | | | | M525 | 2.0 | | | |
| M705 Marathon | 1.0 | yes | - | smooth scrolling | | M705 Marathon | 1.0 | yes | - | smooth scrolling |
| T400 Zone Touch | | | | | | T400 Zone Touch | | | | |
| T620 Touch | | | | | | T620 Touch | | | | |
| Performance MX | 1.0 | yes | r/w | | | Performance MX | 1.0 | yes | r/w | |
| Anywhere MX | | yes | - | smooth scrolling | | Anywhere MX | | | | |
| Cube | | | | | | Cube | | | | |
@ -74,7 +75,7 @@ Mouse-Keyboard combos:
| Device | HID++ | Battery | Other features | | Device | HID++ | Battery | Other features |
|------------------|-------|---------|-----------------------------------------| |------------------|-------|---------|-----------------------------------------|
| MK330 | | | | | MK330 | | | |
| MK710 | 1.0 | | FN swap | | MK710 | 1.0 | yes | FN swap |
-- --

View File

@ -1,8 +1,8 @@
# ? # notification flags
<< ( 0.001) [10 01 8100 000000] '\x10\x01\x81\x00\x00\x00\x00' << ( 0.001) [10 01 8100 000000] '\x10\x01\x81\x00\x00\x00\x00'
>> ( 0.062) [10 01 8100 000000] '\x10\x01\x81\x00\x00\x00\x00' >> ( 0.062) [10 01 8100 000000] '\x10\x01\x81\x00\x00\x00\x00'
# ? # smooth scroll
<< ( 1.063) [10 01 8101 000000] '\x10\x01\x81\x01\x00\x00\x00' << ( 1.063) [10 01 8101 000000] '\x10\x01\x81\x01\x00\x00\x00'
>> ( 1.078) [10 01 8101 820000] '\x10\x01\x81\x01\x82\x00\x00' >> ( 1.078) [10 01 8101 820000] '\x10\x01\x81\x01\x82\x00\x00'
@ -10,7 +10,7 @@
<< ( 2.079) [10 01 8102 000000] '\x10\x01\x81\x02\x00\x00\x00' << ( 2.079) [10 01 8102 000000] '\x10\x01\x81\x02\x00\x00\x00'
>> ( 2.094) [10 01 8102 000080] '\x10\x01\x81\x02\x00\x00\x80' >> ( 2.094) [10 01 8102 000080] '\x10\x01\x81\x02\x00\x00\x80'
# ? # battery status
<< ( 7.263) [10 01 8107 000000] '\x10\x01\x81\x07\x00\x00\x00' << ( 7.263) [10 01 8107 000000] '\x10\x01\x81\x07\x00\x00\x00'
>> ( 7.278) [10 01 8107 050000] '\x10\x01\x81\x07\x05\x00\x00' >> ( 7.278) [10 01 8107 050000] '\x10\x01\x81\x07\x05\x00\x00'

View File

@ -74,6 +74,9 @@ def _D(name, codename=None, kind=None, registers=None, settings=None):
# #
# #
# Some HID++1.0 registers and HID++2.0 features can be discovered at run-time,
# so they are not specified here.
# Keyboards # Keyboards
_D('Wireless Keyboard K230') _D('Wireless Keyboard K230')
@ -82,12 +85,14 @@ _D('Wireless Keyboard K350')
_D('Wireless Keyboard K360') _D('Wireless Keyboard K360')
_D('Wireless Touch Keyboard K400') _D('Wireless Touch Keyboard K400')
_D('Wireless Keyboard K710', _D('Wireless Keyboard K710',
registers={'battery_charge': -0x0D, 'battery_status': 0x07},
settings=[ settings=[
_register_fn_swap(0x09, true_value=b'\x00\x01', mask=b'\x00\x01'), _register_fn_swap(0x09, true_value=b'\x00\x01', mask=b'\x00\x01'),
], ],
) )
_D('Wireless Solar Keyboard K750') _D('Wireless Solar Keyboard K750')
_D('Wireless Illuminated Keyboard K800', _D('Wireless Illuminated Keyboard K800',
registers={'battery_charge': -0x0D, 'battery_status': 0x07},
settings=[ settings=[
_register_fn_swap(0x09, true_value=b'\x00\x01', mask=b'\x00\x01'), _register_fn_swap(0x09, true_value=b'\x00\x01', mask=b'\x00\x01'),
], ],
@ -98,11 +103,17 @@ _D('Wireless Illuminated Keyboard K800',
_D('Wireless Mouse M315') _D('Wireless Mouse M315')
_D('Wireless Mouse M325') _D('Wireless Mouse M325')
_D('Wireless Mouse M505') _D('Wireless Mouse M505')
_D('Wireless Mouse M510') _D('Wireless Mouse M510',
registers={'battery_charge': -0x0D, 'battery_status': 0x07},
settings=[
_register_smooth_scroll(0x01, true_value=0x40, mask=0x40),
],
)
_D('Couch Mouse M515') _D('Couch Mouse M515')
_D('Wireless Mouse M525') _D('Wireless Mouse M525')
_D('Touch Mouse M600') _D('Touch Mouse M600')
_D('Marathon Mouse M705', _D('Marathon Mouse M705',
registers={'battery_charge': 0x0D},
settings=[ settings=[
_register_smooth_scroll(0x01, true_value=0x40, mask=0x40), _register_smooth_scroll(0x01, true_value=0x40, mask=0x40),
# _register_dpi(0x63, _NamedInts(**{'100': 10, '300': 30, '350':35, '500':50})), # _register_dpi(0x63, _NamedInts(**{'100': 10, '300': 30, '350':35, '500':50})),
@ -112,11 +123,13 @@ _D('Zone Touch Mouse T400')
_D('Touch Mouse T620') _D('Touch Mouse T620')
_D('Logitech Cube', kind='mouse') _D('Logitech Cube', kind='mouse')
_D('Anywhere Mouse MX', codename='Anywhere MX', _D('Anywhere Mouse MX', codename='Anywhere MX',
registers={'battery_charge': 0x0D},
settings=[ settings=[
_register_smooth_scroll(0x01, true_value=0x40, mask=0x40), _register_smooth_scroll(0x01, true_value=0x40, mask=0x40),
], ],
) )
_D('Performance Mouse MX', codename='Performance MX', _D('Performance Mouse MX', codename='Performance MX',
registers={'battery_charge': -0x0D, 'battery_status': 0x07},
settings=[ settings=[
_register_dpi(0x63, _NamedInts.range(0x81, 0x8F, lambda x: str((x - 0x80) * 100))), _register_dpi(0x63, _NamedInts.range(0x81, 0x8F, lambda x: str((x - 0x80) * 100))),
], ],

View File

@ -82,7 +82,11 @@ def get_register(device, name, default_number=-1):
def get_battery(device): def get_battery(device):
"""Reads a device's battery level, if provided by the HID++ 1.0 protocol.""" """Reads a device's battery level, if provided by the HID++ 1.0 protocol."""
reply = get_register(device, 'battery', 0x0D) if device.protocol >= 2.0:
# let's just assume HID++ 2.0 devices do not provide the battery info in a register
return
reply = get_register(device, 'battery_charge', 0x0D)
if reply: if reply:
charge = ord(reply[:1]) charge = ord(reply[:1])
status = ord(reply[2:3]) & 0xF0 status = ord(reply[2:3]) & 0xF0