From ea033c8ff5c9c3d2ad106a18e547ac19783f4e16 Mon Sep 17 00:00:00 2001 From: Ilya Zhuravlev Date: Sat, 17 Oct 2020 05:33:43 -0400 Subject: [PATCH] keyboard: don't set a key if it's already set to the correct value --- src/main/python/keyboard.py | 6 ++++-- src/main/python/test/test_keyboard.py | 11 +++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/main/python/keyboard.py b/src/main/python/keyboard.py index 5b5165e..986bd88 100644 --- a/src/main/python/keyboard.py +++ b/src/main/python/keyboard.py @@ -89,5 +89,7 @@ class Keyboard: self.layout[(layer, row, col)] = keycode def set_key(self, layer, row, col, code): - self.usb_send(self.dev, struct.pack(">BBBBH", CMD_VIA_SET_KEYCODE, layer, row, col, code)) - self.layout[(layer, row, col)] = code + key = (layer, row, col) + if self.layout[key] != code: + self.usb_send(self.dev, struct.pack(">BBBBH", CMD_VIA_SET_KEYCODE, layer, row, col, code)) + self.layout[key] = code diff --git a/src/main/python/test/test_keyboard.py b/src/main/python/test/test_keyboard.py index 268e2ca..7bb48eb 100644 --- a/src/main/python/test/test_keyboard.py +++ b/src/main/python/test/test_keyboard.py @@ -112,3 +112,14 @@ class TestKeyboard(unittest.TestCase): self.assertEqual(kb.layout[(1, 1, 0)], 9) dev.finish() + + def test_set_key_twice(self): + """ Tests that setting a key twice is optimized (doesn't send 2 cmds) """ + + kb, dev = self.prepare_keyboard(LAYOUT_2x2, [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) + dev.expect("050101000009", "") + kb.set_key(1, 1, 0, 9) + kb.set_key(1, 1, 0, 9) + self.assertEqual(kb.layout[(1, 1, 0)], 9) + + dev.finish()