keyboard_comm: serialize/deserialize keymaps using Keycode.serialize

main
Ilya Zhuravlev 2021-03-14 18:05:22 -04:00
parent 4f7cfb36e2
commit 4fc12b69b2
1 changed files with 10 additions and 7 deletions

View File

@ -5,7 +5,7 @@ import json
import lzma import lzma
from collections import OrderedDict from collections import OrderedDict
from keycodes import RESET_KEYCODE from keycodes import RESET_KEYCODE, Keycode
from kle_serial import Serial as KleSerial from kle_serial import Serial as KleSerial
from unlocker import Unlocker from unlocker import Unlocker
from util import MSG_LEN, hid_send, chunks from util import MSG_LEN, hid_send, chunks
@ -258,7 +258,7 @@ class Keyboard:
layer.append(row) layer.append(row)
for c in range(self.cols): for c in range(self.cols):
val = self.layout.get((l, r, c), -1) val = self.layout.get((l, r, c), -1)
row.append(val) row.append(Keycode.serialize(val))
encoder_layout = [] encoder_layout = []
for l in range(self.layers): for l in range(self.layers):
@ -266,12 +266,15 @@ class Keyboard:
for e in range(self.encoder_count): for e in range(self.encoder_count):
cw = (l, e, 0) cw = (l, e, 0)
ccw = (l, e, 1) ccw = (l, e, 1)
layer.append([self.encoder_layout.get(cw, -1), self.encoder_layout.get(ccw, -1)]) layer.append([Keycode.serialize(self.encoder_layout.get(cw, -1)),
Keycode.serialize(self.encoder_layout.get(ccw, -1))])
encoder_layout.append(layer) encoder_layout.append(layer)
data["layout"] = layout data["layout"] = layout
data["encoder_layout"] = encoder_layout data["encoder_layout"] = encoder_layout
data["layout_options"] = self.layout_options data["layout_options"] = self.layout_options
# TODO: macros should be serialized in a portable format instead of base64 string
# i.e. use a custom structure (as keycodes numbers can change, etc)
data["macro"] = base64.b64encode(self.macro).decode("utf-8") data["macro"] = base64.b64encode(self.macro).decode("utf-8")
return json.dumps(data).encode("utf-8") return json.dumps(data).encode("utf-8")
@ -284,15 +287,15 @@ class Keyboard:
# restore keymap # restore keymap
for l, layer in enumerate(data["layout"]): for l, layer in enumerate(data["layout"]):
for r, row in enumerate(layer): for r, row in enumerate(layer):
for c, col in enumerate(row): for c, code in enumerate(row):
if (l, r, c) in self.layout: if (l, r, c) in self.layout:
self.set_key(l, r, c, col) self.set_key(l, r, c, Keycode.deserialize(code))
# restore encoders # restore encoders
for l, layer in enumerate(data["encoder_layout"]): for l, layer in enumerate(data["encoder_layout"]):
for e, encoder in enumerate(layer): for e, encoder in enumerate(layer):
self.set_encoder(l, e, 0, encoder[0]) self.set_encoder(l, e, 0, Keycode.deserialize(encoder[0]))
self.set_encoder(l, e, 1, encoder[1]) self.set_encoder(l, e, 1, Keycode.deserialize(encoder[1]))
self.set_layout_options(data["layout_options"]) self.set_layout_options(data["layout_options"])