From a01e4b2efeb1f86de77ca26d14fe94b14b73d447 Mon Sep 17 00:00:00 2001 From: Mauro Carvalho Chehab Date: Sun, 10 Sep 2017 22:52:23 -0300 Subject: [PATCH] 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 --- lib/logitech_receiver/hidpp20.py | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/lib/logitech_receiver/hidpp20.py b/lib/logitech_receiver/hidpp20.py index 8b441b6f..d6494962 100644 --- a/lib/logitech_receiver/hidpp20.py +++ b/lib/logitech_receiver/hidpp20.py @@ -328,13 +328,19 @@ class KeysArray(object): if self.keyversion == 1: self.keys[index] = _ReprogrammableKeyInfo(index, ctrl_id_text, ctrl_task_text, flags) if self.keyversion == 4: - mapped_data = feature_request(self.device, FEATURE.REPROG_CONTROLS_V4, 0x20, key&0xff00, key&0xff) - if mapped_data: - remap_key, remap_flag, remapped = _unpack('!HBH', mapped_data[:5]) - # if key not mapped map it to itself for display - if remapped == 0: - remapped = key - remapped_text = special_keys.CONTROL[remapped] + try: + mapped_data = feature_request(self.device, FEATURE.REPROG_CONTROLS_V4, 0x20, key&0xff00, key&0xff) + if mapped_data: + remap_key, remap_flag, remapped = _unpack('!HBH', mapped_data[:5]) + # if key not mapped map it to itself for display + if remapped == 0: + 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) return self.keys[index]