hidpp20.py: handle gracefully errors at REPROG_CONTROLS_V4

At least with Anywhere Mouse MX 2, one reprogrammed key
fails to read:

    ERROR [MainThread] logitech_receiver.base: (3) device 3 error on feature request {0829}: 2 = invalid argument

That causes "solaar show" to crash.  Instead, let's handle
errors there gracefully, reporting it as:

         7: unknown:00C3              , default: unknown:009C                => unknown:00C3
             virtual, pos:0, group:4, gmask:0

Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
This commit is contained in:
Mauro Carvalho Chehab 2017-09-10 22:52:23 -03:00
parent 801bdfa224
commit a01e4b2efe
1 changed files with 13 additions and 7 deletions

View File

@ -328,13 +328,19 @@ class KeysArray(object):
if self.keyversion == 1: if self.keyversion == 1:
self.keys[index] = _ReprogrammableKeyInfo(index, ctrl_id_text, ctrl_task_text, flags) self.keys[index] = _ReprogrammableKeyInfo(index, ctrl_id_text, ctrl_task_text, flags)
if self.keyversion == 4: if self.keyversion == 4:
mapped_data = feature_request(self.device, FEATURE.REPROG_CONTROLS_V4, 0x20, key&0xff00, key&0xff) try:
if mapped_data: mapped_data = feature_request(self.device, FEATURE.REPROG_CONTROLS_V4, 0x20, key&0xff00, key&0xff)
remap_key, remap_flag, remapped = _unpack('!HBH', mapped_data[:5]) if mapped_data:
# if key not mapped map it to itself for display remap_key, remap_flag, remapped = _unpack('!HBH', mapped_data[:5])
if remapped == 0: # if key not mapped map it to itself for display
remapped = key if remapped == 0:
remapped_text = special_keys.CONTROL[remapped] remapped = key
except Exception:
remapped = key
remap_key = key
remap_flag = 0
remapped_text = special_keys.CONTROL[remapped]
self.keys[index] = _ReprogrammableKeyInfoV4(index, ctrl_id_text, ctrl_task_text, flags, pos, group, gmask, remapped_text) self.keys[index] = _ReprogrammableKeyInfoV4(index, ctrl_id_text, ctrl_task_text, flags, pos, group, gmask, remapped_text)
return self.keys[index] return self.keys[index]