keyboard_comm: serialize/deserialize keymaps using Keycode.serialize
parent
4f7cfb36e2
commit
4fc12b69b2
|
|
@ -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"])
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue