+
+ Firmware: {{ .Device.Firmware }} +
+diff --git a/99-openlinkhub.rules b/99-openlinkhub.rules
index 769c278..1732f79 100644
--- a/99-openlinkhub.rules
+++ b/99-openlinkhub.rules
@@ -72,4 +72,6 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b1c", ATTRS{idProduct}=="1bb2", MODE="0660
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b1c", ATTRS{idProduct}=="2b01", MODE="0660", OWNER="openlinkhub"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b1c", ATTRS{idProduct}=="2b02", MODE="0660", OWNER="openlinkhub"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b1c", ATTRS{idProduct}=="2b14", MODE="0660", OWNER="openlinkhub"
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b1c", ATTRS{idProduct}=="1bb9", MODE="0660", OWNER="openlinkhub"
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b1c", ATTRS{idProduct}=="1b73", MODE="0660", OWNER="openlinkhub"
KERNEL=="uinput", MODE="0660", GROUP="input", OPTIONS+="static_node=uinput", OWNER="openlinkhub"
\ No newline at end of file
diff --git a/README.md b/README.md
index c3fc45c..74e2afb 100644
--- a/README.md
+++ b/README.md
@@ -54,6 +54,7 @@ Open source Linux interface for iCUE LINK Hub and other Corsair AIOs, Hubs.
| K70 RGB MK.2 | `1b55`
`1b49`
`1b6b` | USB |
| K70 CORE TKL | `2b01` | USB |
| K70 CORE TKL WIRELESS | `2b02` | USB |
+| K70 RGB TKL CHAMPION SERIES | `1bb9`
`1b73` | USB |
| KATAR PRO | `1b93` | DPI Control
RGB Control
Key Assignments |
| KATAR PRO XT | `1bac` | DPI Control
RGB Control |
| KATAR PRO WIRELESS | `1b94` | DPI Control
Key Assignments |
diff --git a/database/keyboard/k100-eu.json b/database/keyboard/k100-eu.json
deleted file mode 100644
index d3bf244..0000000
--- a/database/keyboard/k100-eu.json
+++ /dev/null
@@ -1,3163 +0,0 @@
-{
- "key": "k100-default",
- "device": "K100 RGB",
- "layout": "EU",
- "rows": 6,
- "row": {
- "0": {
- "keys": {
- "1": {
- "keyName": "",
- "width": 81,
- "height": 20,
- "left": 0,
- "top": 0,
- "packetIndex": [
- 414
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "2": {
- "keyName": "",
- "width": 78,
- "height": 20,
- "left": 10,
- "top": 0,
- "packetIndex": [
- 417
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "3": {
- "keyName": "",
- "width": 78,
- "height": 20,
- "left": 10,
- "top": 0,
- "packetIndex": [
- 420
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "4": {
- "keyName": "",
- "width": 78,
- "height": 20,
- "left": 10,
- "top": 0,
- "packetIndex": [
- 423
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "5": {
- "keyName": "",
- "width": 78,
- "height": 20,
- "left": 10,
- "top": 0,
- "packetIndex": [
- 426
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "6": {
- "keyName": "",
- "width": 78,
- "height": 20,
- "left": 10,
- "top": 0,
- "packetIndex": [
- 429
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "7": {
- "keyName": "",
- "width": 78,
- "height": 20,
- "left": 10,
- "top": 0,
- "packetIndex": [
- 432
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "8": {
- "keyName": "",
- "width": 78,
- "height": 20,
- "left": 10,
- "top": 0,
- "packetIndex": [
- 435
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "9": {
- "keyName": "",
- "width": 78,
- "height": 20,
- "left": 10,
- "top": 0,
- "packetIndex": [
- 438
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "10": {
- "keyName": "",
- "width": 78,
- "height": 20,
- "left": 10,
- "top": 0,
- "packetIndex": [
- 441
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "11": {
- "keyName": "",
- "width": 78,
- "height": 20,
- "left": 10,
- "top": 0,
- "packetIndex": [
- 444
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "12": {
- "keyName": "",
- "width": 78,
- "height": 20,
- "left": 10,
- "top": 0,
- "packetIndex": [
- 447
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "13": {
- "keyName": "",
- "width": 78,
- "height": 20,
- "left": 10,
- "top": 0,
- "packetIndex": [
- 450
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "14": {
- "keyName": "",
- "width": 78,
- "height": 20,
- "left": 10,
- "top": 0,
- "packetIndex": [
- 453
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "15": {
- "keyName": "",
- "width": 78,
- "height": 20,
- "left": 10,
- "top": 0,
- "packetIndex": [
- 456
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "16": {
- "keyName": "",
- "width": 78,
- "height": 20,
- "left": 10,
- "top": 0,
- "packetIndex": [
- 459
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "17": {
- "keyName": "",
- "width": 78,
- "height": 20,
- "left": 10,
- "top": 0,
- "packetIndex": [
- 462
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "18": {
- "keyName": "",
- "width": 78,
- "height": 20,
- "left": 10,
- "top": 0,
- "packetIndex": [
- 465
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "19": {
- "keyName": "",
- "width": 78,
- "height": 20,
- "left": 10,
- "top": 0,
- "packetIndex": [
- 468
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "20": {
- "keyName": "",
- "width": 78,
- "height": 20,
- "left": 10,
- "top": 0,
- "packetIndex": [
- 471
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "21": {
- "keyName": "",
- "width": 78,
- "height": 20,
- "left": 10,
- "top": 0,
- "packetIndex": [
- 474
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "22": {
- "keyName": "",
- "width": 81,
- "height": 20,
- "left": 10,
- "top": 0,
- "packetIndex": [
- 477
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- }
- }
- },
- "1": {
- "keys": {
- "23": {
- "keyName": "",
- "width": 10,
- "height": 40,
- "left": 0,
- "top": 20,
- "packetIndex": [
- 480
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "24": {
- "keyName": "icon-user.svg",
- "width": 65,
- "height": 40,
- "left": 40,
- "top": 20,
- "packetIndex": [
- 384
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": true
- },
- "25": {
- "keyName": "icon-brightness.svg",
- "width": 65,
- "height": 40,
- "left": 15,
- "top": 20,
- "packetIndex": [
- 546,549,552,555,558,561,564,567,411
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": true
- },
- "26": {
- "keyName": "icon-lock.svg",
- "width": 65,
- "height": 40,
- "left": 15,
- "top": 20,
- "packetIndex": [
- 342
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": true
- },
- "27": {
- "keyName": "LOGO",
- "width": 404,
- "height": 40,
- "left": 450,
- "top": 20,
- "packetIndex": [
- 570,
- 573,
- 576
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "28": {
- "keyName": "icon-mute.svg",
- "width": 65,
- "height": 40,
- "left": 441,
- "top": 20,
- "packetIndex": [
- 306
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": true
- },
- "29": {
- "keyName": "",
- "width": 20,
- "height": 40,
- "left": 255,
- "top": 20,
- "packetIndex": [
- 513
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- }
- }
- },
- "2": {
- "keys": {
- "30": {
- "keyName": "",
- "width": 10,
- "height": 40,
- "left": 0,
- "top": 10,
- "packetIndex": [
- 483
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "31": {
- "keyName": "G1",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 20,
- "packetIndex": [
- 393
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "32": {
- "keyName": "ESC",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 20,
- "packetIndex": [
- 123
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 0,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "33": {
- "keyName": "F1",
- "width": 65,
- "height": 70,
- "left": 95,
- "top": 20,
- "packetIndex": [
- 174
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "34": {
- "keyName": "F2",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 20,
- "packetIndex": [
- 177
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "35": {
- "keyName": "F3",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 20,
- "packetIndex": [
- 180
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "36": {
- "keyName": "F4",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 20,
- "packetIndex": [
- 183
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "37": {
- "keyName": "F5",
- "width": 65,
- "height": 70,
- "left": 55,
- "top": 20,
- "packetIndex": [
- 186
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "38": {
- "keyName": "F6",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 20,
- "packetIndex": [
- 189
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "39": {
- "keyName": "F7",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 20,
- "packetIndex": [
- 192
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "40": {
- "keyName": "F8",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 20,
- "packetIndex": [
- 195
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "41": {
- "keyName": "F9",
- "width": 65,
- "height": 70,
- "left": 60,
- "top": 20,
- "packetIndex": [
- 198
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "42": {
- "keyName": "F10",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 20,
- "packetIndex": [
- 201
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "43": {
- "keyName": "F11",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 20,
- "packetIndex": [
- 204
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "44": {
- "keyName": "F12",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 20,
- "packetIndex": [
- 207
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "45": {
- "keyName": "PrtSc",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 20,
- "packetIndex": [
- 210
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "46": {
- "keyName": "ScrLk",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 20,
- "packetIndex": [
- 213
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "47": {
- "keyName": "Pause",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 20,
- "packetIndex": [
- 216
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "48": {
- "keyName": "icon-stop.svg",
- "width": 65,
- "height": 40,
- "left": 25,
- "top": 20,
- "packetIndex": [
- 369
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": true
- },
- "49": {
- "keyName": "icon-backward.svg",
- "width": 65,
- "height": 40,
- "left": 15,
- "top": 20,
- "packetIndex": [
- 378
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": true
- },
- "50": {
- "keyName": "icon-pause.svg",
- "width": 65,
- "height": 40,
- "left": 15,
- "top": 20,
- "packetIndex": [
- 372
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": true
- },
- "51": {
- "keyName": "icon-forward.svg",
- "width": 65,
- "height": 40,
- "left": 15,
- "top": 20,
- "packetIndex": [
- 375
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": true
- },
- "52": {
- "keyName": "",
- "width": 10,
- "height": 40,
- "left": 15,
- "top": 10,
- "packetIndex": [
- 516
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- }
- }
- },
- "3": {
- "keys": {
- "53": {
- "keyName": "",
- "width": 10,
- "height": 40,
- "left": 0,
- "top": -30,
- "packetIndex": [
- 486
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "54": {
- "keyName": "G2",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 396
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "55": {
- "keyName": "` ~",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 159
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "56": {
- "keyName": "1",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 90
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "57": {
- "keyName": "2",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 93
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "58": {
- "keyName": "3",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 96
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "59": {
- "keyName": "4",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 99
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "60": {
- "keyName": "5",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 102
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "61": {
- "keyName": "6",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 105
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "62": {
- "keyName": "7",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 108
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "63": {
- "keyName": "8",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 111
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "64": {
- "keyName": "9",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 114
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "65": {
- "keyName": "0",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 117
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "66": {
- "keyName": "-",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 135
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "67": {
- "keyName": "=",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 138
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "68": {
- "keyName": "\u003c---",
- "width": 150,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 126
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "69": {
- "keyName": "Ins",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [
- 219
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "70": {
- "keyName": "Home",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 222
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "71": {
- "keyName": "PgUp",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 225
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "72": {
- "keyName": "Num",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [
- 249
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "73": {
- "keyName": "/",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 252
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "74": {
- "keyName": "*",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 255
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "75": {
- "keyName": "-",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 258
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "76": {
- "keyName": "",
- "width": 10,
- "height": 40,
- "left": 15,
- "top": -30,
- "packetIndex": [
- 519
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- }
- }
- },
- "4": {
- "keys": {
- "77": {
- "keyName": "",
- "width": 10,
- "height": 40,
- "left": 0,
- "top": -65,
- "packetIndex": [
- 489
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "78": {
- "keyName": "G3",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 399
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "79": {
- "keyName": "Tab",
- "width": 108,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 129
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "80": {
- "keyName": "Q",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 60
- ],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "81": {
- "keyName": "W",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 78
- ],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "82": {
- "keyName": "E",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 24
- ],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "83": {
- "keyName": "R",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 63
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "84": {
- "keyName": "T",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 69
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "85": {
- "keyName": "Z",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 84
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "86": {
- "keyName": "U",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 72
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "87": {
- "keyName": "I",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 36
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "88": {
- "keyName": "O",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 54
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "89": {
- "keyName": "P",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 57
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "90": {
- "keyName": "[ {",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 141
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "91": {
- "keyName": "] }",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 144
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "92": {
- "keyName": "\\ |",
- "width": 107,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 147
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "93": {
- "keyName": "Del",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [
- 228
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "94": {
- "keyName": "End",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 231
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "95": {
- "keyName": "PgDn",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 234
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "96": {
- "keyName": "7",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [
- 285
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "97": {
- "keyName": "8",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 288
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "98": {
- "keyName": "9",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 291
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "99": {
- "keyName": "+",
- "width": 65,
- "height": 155,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 261
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "100": {
- "keyName": "",
- "width": 10,
- "height": 40,
- "left": 15,
- "top": -65,
- "packetIndex": [
- 522
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- }
- }
- },
- "5": {
- "keys": {
- "101": {
- "keyName": "",
- "width": 10,
- "height": 40,
- "left": 0,
- "top": -100,
- "packetIndex": [
- 492
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "102": {
- "keyName": "G4",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 402
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "103": {
- "keyName": "CAPS",
- "width": 131,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 171
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "104": {
- "keyName": "A",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 12
- ],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "105": {
- "keyName": "S",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 66
- ],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "106": {
- "keyName": "D",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 21
- ],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "107": {
- "keyName": "F",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 27
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "108": {
- "keyName": "G",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 30
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "109": {
- "keyName": "H",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 33
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "110": {
- "keyName": "J",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 39
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "111": {
- "keyName": "K",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 42
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "112": {
- "keyName": "L",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 45
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "113": {
- "keyName": "; :",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 153
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "114": {
- "keyName": "' ''",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 156
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "115": {
- "keyName": "Enter",
- "width": 164,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 120
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "116": {
- "keyName": "4",
- "width": 65,
- "height": 70,
- "left": 275,
- "top": 15,
- "packetIndex": [
- 276
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "117": {
- "keyName": "5",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 279
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "118": {
- "keyName": "6",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 282
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "119": {
- "keyName": "",
- "width": 10,
- "height": 40,
- "left": 95,
- "top": -100,
- "packetIndex": [
- 525
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- }
- }
- },
- "6": {
- "keys": {
- "120": {
- "keyName": "",
- "width": 10,
- "height": 40,
- "left": 0,
- "top": -135,
- "packetIndex": [
- 495
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "121": {
- "keyName": "G5",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 405
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "122": {
- "keyName": "Shift",
- "width": 170,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 318
- ],
- "color": {
- "red": 255,
- "green": 255,
- "blue": 0,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "123": {
- "keyName": "Y",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 87
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "124": {
- "keyName": "X",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 81
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "125": {
- "keyName": "C",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 18
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "126": {
- "keyName": "V",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 75
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "127": {
- "keyName": "B",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 15
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "128": {
- "keyName": "N",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 51
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "129": {
- "keyName": "M",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 48
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "130": {
- "keyName": ", \u003c",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 162
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "131": {
- "keyName": ". \u003e",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 165
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "132": {
- "keyName": "/ ?",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 168
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "133": {
- "keyName": "Shift",
- "width": 205,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 330
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "134": {
- "keyName": "↑",
- "width": 65,
- "height": 70,
- "left": 105,
- "top": 15,
- "packetIndex": [
- 246
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "135": {
- "keyName": "1",
- "width": 65,
- "height": 70,
- "left": 105,
- "top": 15,
- "packetIndex": [
- 267
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "136": {
- "keyName": "2",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 270
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "137": {
- "keyName": "3",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 273
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "138": {
- "keyName": "Enter",
- "width": 65,
- "height": 155,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 264
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "139": {
- "keyName": "",
- "width": 10,
- "height": 40,
- "left": 15,
- "top": -135,
- "packetIndex": [
- 528
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- }
- }
- },
- "7": {
- "keys": {
- "140": {
- "keyName": "",
- "width": 10,
- "height": 40,
- "left": 0,
- "top": -170,
- "packetIndex": [
- 498
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "141": {
- "keyName": "G6",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 408
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "142": {
- "keyName": "Ctrl",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 315
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "143": {
- "keyName": "⊞",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 324
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "144": {
- "keyName": "Alt",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 321
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "145": {
- "keyName": "----------",
- "width": 455,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 132
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "146": {
- "keyName": "Alt",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 333
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "147": {
- "keyName": "Fn",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 366
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "148": {
- "keyName": "RC",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 303
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "149": {
- "keyName": "Ctrl",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 327
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "150": {
- "keyName": "←",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [
- 240
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "151": {
- "keyName": "↓",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 243
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "152": {
- "keyName": "→",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 237
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "153": {
- "keyName": "0",
- "width": 145,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [
- 294
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "154": {
- "keyName": ".",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [
- 297
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "155": {
- "keyName": "",
- "width": 10,
- "height": 40,
- "left": 95,
- "top": -170,
- "packetIndex": [
- 531
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- }
- }
- },
- "8": {
- "keys": {
- "156": {
- "keyName": "",
- "width": 10,
- "height": 40,
- "left": 0,
- "top": -205,
- "packetIndex": [
- 501
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "157": {
- "keyName": "",
- "width": 10,
- "height": 40,
- "left": 1880,
- "top": -205,
- "packetIndex": [
- 534
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- }
- }
- },
- "9": {
- "keys": {
- "158": {
- "keyName": "",
- "width": 10,
- "height": 40,
- "left": 0,
- "top": -155,
- "packetIndex": [
- 504
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "159": {
- "keyName": "",
- "width": 10,
- "height": 40,
- "left": 1880,
- "top": -155,
- "packetIndex": [
- 537
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- }
- }
- },
- "10": {
- "keys": {
- "160": {
- "keyName": "",
- "width": 10,
- "height": 40,
- "left": 0,
- "top": -105,
- "packetIndex": [
- 507
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "161": {
- "keyName": "",
- "width": 10,
- "height": 40,
- "left": 1880,
- "top": -105,
- "packetIndex": [
- 540
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- }
- }
- },
- "11": {
- "keys": {
- "162": {
- "keyName": "",
- "width": 10,
- "height": 40,
- "left": 0,
- "top": -55,
- "packetIndex": [
- 510
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- },
- "163": {
- "keyName": "",
- "width": 10,
- "height": 40,
- "left": 1880,
- "top": -55,
- "packetIndex": [
- 543
- ],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255,
- "brightness": 0,
- "Hex": ""
- },
- "zone": 0,
- "svg": false
- }
- }
- }
- },
- "zones": null,
- "color": {
- "red": 0,
- "green": 0,
- "blue": 0,
- "brightness": 0,
- "Hex": ""
- }
-}
\ No newline at end of file
diff --git a/database/keyboard/k100.json b/database/keyboard/k100.json
index 5457def..34928b4 100644
--- a/database/keyboard/k100.json
+++ b/database/keyboard/k100.json
@@ -1,4 +1,7 @@
{
+ "version": 1,
+ "uppercaseClass": "key-uppercase",
+ "fontSize": 14,
"key": "k100-default",
"device": "K100 RGB",
"layout": "US",
diff --git a/database/keyboard/k100air-de.json b/database/keyboard/k100air-de.json
index c2412f0..28f945b 100644
--- a/database/keyboard/k100air-de.json
+++ b/database/keyboard/k100air-de.json
@@ -1,5 +1,7 @@
{
- "version": 1,
+ "version": 2,
+ "uppercaseClass": "key-uppercase",
+ "fontSize": 14,
"key": "k100air-default",
"device": "K100 AIR RGB",
"layout": "DE",
diff --git a/database/keyboard/k100air-eu.json b/database/keyboard/k100air-eu.json
deleted file mode 100644
index 7a045f5..0000000
--- a/database/keyboard/k100air-eu.json
+++ /dev/null
@@ -1,1584 +0,0 @@
-{
- "version": 1,
- "key": "k100air-default",
- "device": "K100 AIR RGB",
- "layout": "EU",
- "rows": 6,
- "row": {
- "0": {
- "keys": {
- "1": {
- "keyName": "icon-user.svg",
- "width": 65,
- "height": 40,
- "left": 0,
- "top": 0,
- "packetIndex": [384],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true,
- "spacing": [1,1]
- },
- "2": {
- "keyName": "icon-brightness.svg",
- "width": 65,
- "height": 40,
- "left": 15,
- "top": 0,
- "packetIndex": [339],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true
- },
- "3": {
- "keyName": "icon-lock.svg",
- "width": 65,
- "height": 40,
- "left": 15,
- "top": 0,
- "packetIndex": [342],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true
- },
- "4": {
- "keyName": "LOGO",
- "width": 404,
- "height": 40,
- "left": 400,
- "top": 0,
- "packetIndex": [405,408],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1,1,1],
- "css": "keyboard-key wide8"
- },
- "5": {
- "keyName": "icon-backward.svg",
- "width": 65,
- "height": 40,
- "left": 185,
- "top": 0,
- "packetIndex": [378],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true,
- "spacing": [1]
- },
- "6": {
- "keyName": "icon-pause.svg",
- "width": 65,
- "height": 40,
- "left": 15,
- "top": 0,
- "packetIndex": [372],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true
- },
- "7": {
- "keyName": "icon-forward.svg",
- "width": 65,
- "height": 40,
- "left": 15,
- "top": 0,
- "packetIndex": [375],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true
- },
- "8": {
- "keyName": "icon-mute.svg",
- "width": 65,
- "height": 40,
- "left": 25,
- "top": 0,
- "packetIndex": [306],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true,
- "spacing": [1]
- }
- }
- },
- "1": {
- "keys": {
- "9": {
- "keyName": "ESC",
- "width": 65,
- "height": 70,
- "left": 0,
- "top": 50,
- "packetIndex": [123],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 0
- }
- },
- "10": {
- "keyName": "F1",
- "width": 65,
- "height": 70,
- "left": 95,
- "top": 50,
- "packetIndex": [174],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1]
- },
- "11": {
- "keyName": "F2",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [177],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "12": {
- "keyName": "F3",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [180],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "13": {
- "keyName": "F4",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [183],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "14": {
- "keyName": "F5",
- "width": 65,
- "height": 70,
- "left": 55,
- "top": 50,
- "packetIndex": [186],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1]
- },
- "15": {
- "keyName": "F6",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [189],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "16": {
- "keyName": "F7",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [192],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "17": {
- "keyName": "F8",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [195],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "18": {
- "keyName": "F9",
- "width": 65,
- "height": 70,
- "left": 60,
- "top": 50,
- "packetIndex": [198],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1]
- },
- "19": {
- "keyName": "F10",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [201],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "20": {
- "keyName": "F11",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [204],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "21": {
- "keyName": "F12",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [207],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "22": {
- "keyName": "PrtSc",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 50,
- "packetIndex": [210],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1]
- },
- "23": {
- "keyName": "ScrLk",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [213],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "24": {
- "keyName": "Pause",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [216],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "25": {
- "keyName": "G1",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 50,
- "packetIndex": [393],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1]
- },
- "26": {
- "keyName": "G2",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [396],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "27": {
- "keyName": "G3",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [399],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "28": {
- "keyName": "G4",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [402],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "2": {
- "keys": {
- "29": {
- "keyName": "` ~",
- "width": 65,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [159],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "30": {
- "keyName": "1",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [90],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "31": {
- "keyName": "2",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [93],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "32": {
- "keyName": "3",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [96],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "33": {
- "keyName": "4",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [99],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "34": {
- "keyName": "5",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [102],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "35": {
- "keyName": "6",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [105],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "36": {
- "keyName": "7",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [108],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "37": {
- "keyName": "8",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [111],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "38": {
- "keyName": "9",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [114],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "39": {
- "keyName": "0",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [117],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "40": {
- "keyName": "-",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [135],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "41": {
- "keyName": "=",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [138],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "42": {
- "keyName": "<---",
- "width": 150,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [126],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "css": "keyboard-key wide3"
- },
- "43": {
- "keyName": "Ins",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [219],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1]
- },
- "44": {
- "keyName": "Home",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [222],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "45": {
- "keyName": "PgUp",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [225],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "46": {
- "keyName": "Num",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [249],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1]
- },
- "47": {
- "keyName": "/",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [252],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "48": {
- "keyName": "*",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [255],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "49": {
- "keyName": "-",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [258],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "3": {
- "keys": {
- "50": {
- "keyName": "Tab",
- "width": 108,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [129],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "css": "keyboard-key wide"
- },
- "51": {
- "keyName": "Q",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [60],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "52": {
- "keyName": "W",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [78],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "53": {
- "keyName": "E",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [24],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "54": {
- "keyName": "R",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [63],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "55": {
- "keyName": "T",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [69],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "56": {
- "keyName": "Z",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [84],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "57": {
- "keyName": "U",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [72],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "58": {
- "keyName": "I",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [36],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "59": {
- "keyName": "O",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [54],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "60": {
- "keyName": "P",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [57],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "61": {
- "keyName": "[ {",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [141],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "62": {
- "keyName": "] }",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [144],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "63": {
- "keyName": "\\ |",
- "width": 107,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [147],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "css": "keyboard-key wide"
- },
- "64": {
- "keyName": "Del",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [228],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1]
- },
- "65": {
- "keyName": "End",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [231],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "66": {
- "keyName": "PgDn",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [234],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "67": {
- "keyName": "7",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [285],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1]
- },
- "68": {
- "keyName": "8",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [288],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "69": {
- "keyName": "9",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [291],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "70": {
- "keyName": "+",
- "width": 65,
- "height": 155,
- "left": 15,
- "top": 15,
- "packetIndex": [261],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "css": "keyboard-key-125"
- }
- }
- },
- "4": {
- "keys": {
- "71": {
- "keyName": "CAPS",
- "width": 131,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [171],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "css": "keyboard-key wide"
- },
- "72": {
- "keyName": "A",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [12],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "73": {
- "keyName": "S",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [66],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "74": {
- "keyName": "D",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [21],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "75": {
- "keyName": "F",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [27],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "76": {
- "keyName": "G",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [30],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "77": {
- "keyName": "H",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [33],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "78": {
- "keyName": "J",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [39],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "79": {
- "keyName": "K",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [42],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "80": {
- "keyName": "L",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [45],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "81": {
- "keyName": "; :",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [153],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "82": {
- "keyName": "' ''",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [156],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "83": {
- "keyName": "Enter",
- "width": 164,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [120],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "css": "keyboard-key wide3"
- },
- "84": {
- "keyName": "4",
- "width": 65,
- "height": 70,
- "left": 275,
- "top": 15,
- "packetIndex": [276],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1,1,1,1,1]
- },
- "85": {
- "keyName": "5",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [279],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "86": {
- "keyName": "6",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [282],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "5": {
- "keys": {
- "87": {
- "keyName": "Shift",
- "width": 170,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [318],
- "color": {
- "red": 255,
- "green": 255,
- "blue": 0
- },
- "css": "keyboard-key wide3"
- },
- "88": {
- "keyName": "Y",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [87],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "89": {
- "keyName": "X",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [81],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "90": {
- "keyName": "C",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [18],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "91": {
- "keyName": "V",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [75],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "92": {
- "keyName": "B",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [15],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "93": {
- "keyName": "N",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [51],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "94": {
- "keyName": "M",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [48],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "95": {
- "keyName": ", <",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [162],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "96": {
- "keyName": ". >",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [165],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "97": {
- "keyName": "/ ?",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [168],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "98": {
- "keyName": "Shift",
- "width": 205,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [330],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "css": "keyboard-key wide3"
- },
- "99": {
- "keyName": "↑",
- "width": 65,
- "height": 70,
- "left": 105,
- "top": 15,
- "packetIndex": [246],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1,1]
- },
- "100": {
- "keyName": "1",
- "width": 65,
- "height": 70,
- "left": 105,
- "top": 15,
- "packetIndex": [267],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1,1]
- },
- "101": {
- "keyName": "2",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [270],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "102": {
- "keyName": "3",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [273],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "103": {
- "keyName": "Enter",
- "width": 65,
- "height": 155,
- "left": 15,
- "top": 15,
- "packetIndex": [264],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "css": "keyboard-key-125"
- }
- }
- },
- "6": {
- "keys": {
- "104": {
- "keyName": "Ctrl",
- "width": 90,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [315],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "css": "keyboard-key wide"
- },
- "105": {
- "keyName": "Win",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [324],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "106": {
- "keyName": "Alt",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [321],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "css": "keyboard-key wide"
- },
- "107": {
- "keyName": "----------",
- "width": 455,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [132],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "css": "keyboard-key wide7"
- },
- "108": {
- "keyName": "Alt",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [333],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "109": {
- "keyName": "Fn",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [366],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "110": {
- "keyName": "Menu",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [303],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "111": {
- "keyName": "Ctrl",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [327],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "112": {
- "keyName": "←",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [240],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1]
- },
- "113": {
- "keyName": "↓",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [243],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "114": {
- "keyName": "→",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [237],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "115": {
- "keyName": "0",
- "width": 145,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [294],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1],
- "css": "keyboard-key wide"
- },
- "116": {
- "keyName": ".",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [297],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/database/keyboard/k100air.json b/database/keyboard/k100air.json
index 95fd654..d4bc56e 100644
--- a/database/keyboard/k100air.json
+++ b/database/keyboard/k100air.json
@@ -1,5 +1,7 @@
{
- "version": 1,
+ "version": 2,
+ "uppercaseClass": "key-uppercase",
+ "fontSize": 14,
"key": "k100air-default",
"device": "K100 AIR RGB",
"layout": "US",
diff --git a/database/keyboard/k100airW-de.json b/database/keyboard/k100airW-de.json
index 6eaafd9..a2a7107 100644
--- a/database/keyboard/k100airW-de.json
+++ b/database/keyboard/k100airW-de.json
@@ -1,5 +1,7 @@
{
- "version": 1,
+ "version": 2,
+ "uppercaseClass": "key-uppercase",
+ "fontSize": 14,
"key": "k100airW-default",
"device": "K100 AIR RGB",
"layout": "DE",
diff --git a/database/keyboard/k100airW-eu.json b/database/keyboard/k100airW-eu.json
deleted file mode 100644
index e31a557..0000000
--- a/database/keyboard/k100airW-eu.json
+++ /dev/null
@@ -1,1589 +0,0 @@
-{
- "version": 1,
- "key": "k100airW-default",
- "device": "K100 AIR RGB",
- "layout": "EU",
- "rows": 6,
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "row": {
- "0": {
- "keys": {
- "1": {
- "keyName": "icon-user.svg",
- "width": 65,
- "height": 40,
- "left": 0,
- "top": 0,
- "packetIndex": [384],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true,
- "spacing": [1,1]
- },
- "2": {
- "keyName": "icon-brightness.svg",
- "width": 65,
- "height": 40,
- "left": 15,
- "top": 0,
- "packetIndex": [339],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true
- },
- "3": {
- "keyName": "icon-lock.svg",
- "width": 65,
- "height": 40,
- "left": 15,
- "top": 0,
- "packetIndex": [342],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true
- },
- "4": {
- "keyName": "LOGO",
- "width": 404,
- "height": 40,
- "left": 400,
- "top": 0,
- "packetIndex": [405,408],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1,1,1],
- "css": "keyboard-key wide8"
- },
- "5": {
- "keyName": "icon-backward.svg",
- "width": 65,
- "height": 40,
- "left": 185,
- "top": 0,
- "packetIndex": [378],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true,
- "spacing": [1]
- },
- "6": {
- "keyName": "icon-pause.svg",
- "width": 65,
- "height": 40,
- "left": 15,
- "top": 0,
- "packetIndex": [372],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true
- },
- "7": {
- "keyName": "icon-forward.svg",
- "width": 65,
- "height": 40,
- "left": 15,
- "top": 0,
- "packetIndex": [375],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true
- },
- "8": {
- "keyName": "icon-mute.svg",
- "width": 65,
- "height": 40,
- "left": 25,
- "top": 0,
- "packetIndex": [306],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true,
- "spacing": [1]
- }
- }
- },
- "1": {
- "keys": {
- "9": {
- "keyName": "ESC",
- "width": 65,
- "height": 70,
- "left": 0,
- "top": 50,
- "packetIndex": [123],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 0
- }
- },
- "10": {
- "keyName": "F1",
- "width": 65,
- "height": 70,
- "left": 95,
- "top": 50,
- "packetIndex": [174],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1]
- },
- "11": {
- "keyName": "F2",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [177],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "12": {
- "keyName": "F3",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [180],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "13": {
- "keyName": "F4",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [183],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "14": {
- "keyName": "F5",
- "width": 65,
- "height": 70,
- "left": 55,
- "top": 50,
- "packetIndex": [186],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1]
- },
- "15": {
- "keyName": "F6",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [189],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "16": {
- "keyName": "F7",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [192],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "17": {
- "keyName": "F8",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [195],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "18": {
- "keyName": "F9",
- "width": 65,
- "height": 70,
- "left": 60,
- "top": 50,
- "packetIndex": [198],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1]
- },
- "19": {
- "keyName": "F10",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [201],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "20": {
- "keyName": "F11",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [204],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "21": {
- "keyName": "F12",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [207],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "22": {
- "keyName": "PrtSc",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 50,
- "packetIndex": [210],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1]
- },
- "23": {
- "keyName": "ScrLk",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [213],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "24": {
- "keyName": "Pause",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [216],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "25": {
- "keyName": "G1",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 50,
- "packetIndex": [393],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1]
- },
- "26": {
- "keyName": "G2",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [396],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "27": {
- "keyName": "G3",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [399],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "28": {
- "keyName": "G4",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [402],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "2": {
- "keys": {
- "29": {
- "keyName": "` ~",
- "width": 65,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [159],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "30": {
- "keyName": "1",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [90],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "31": {
- "keyName": "2",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [93],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "32": {
- "keyName": "3",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [96],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "33": {
- "keyName": "4",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [99],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "34": {
- "keyName": "5",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [102],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "35": {
- "keyName": "6",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [105],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "36": {
- "keyName": "7",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [108],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "37": {
- "keyName": "8",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [111],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "38": {
- "keyName": "9",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [114],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "39": {
- "keyName": "0",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [117],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "40": {
- "keyName": "-",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [135],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "41": {
- "keyName": "=",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [138],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "42": {
- "keyName": "<---",
- "width": 150,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [126],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "css": "keyboard-key wide3"
- },
- "43": {
- "keyName": "Ins",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [219],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1]
- },
- "44": {
- "keyName": "Home",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [222],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "45": {
- "keyName": "PgUp",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [225],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "46": {
- "keyName": "Num",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [249],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1]
- },
- "47": {
- "keyName": "/",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [252],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "48": {
- "keyName": "*",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [255],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "49": {
- "keyName": "-",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [258],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "3": {
- "keys": {
- "50": {
- "keyName": "Tab",
- "width": 108,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [129],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "css": "keyboard-key wide"
- },
- "51": {
- "keyName": "Q",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [60],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "52": {
- "keyName": "W",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [78],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "53": {
- "keyName": "E",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [24],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "54": {
- "keyName": "R",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [63],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "55": {
- "keyName": "T",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [69],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "56": {
- "keyName": "Z",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [84],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "57": {
- "keyName": "U",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [72],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "58": {
- "keyName": "I",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [36],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "59": {
- "keyName": "O",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [54],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "60": {
- "keyName": "P",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [57],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "61": {
- "keyName": "[ {",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [141],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "62": {
- "keyName": "] }",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [144],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "63": {
- "keyName": "\\ |",
- "width": 107,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [147],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "css": "keyboard-key wide"
- },
- "64": {
- "keyName": "Del",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [228],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1]
- },
- "65": {
- "keyName": "End",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [231],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "66": {
- "keyName": "PgDn",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [234],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "67": {
- "keyName": "7",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [285],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1]
- },
- "68": {
- "keyName": "8",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [288],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "69": {
- "keyName": "9",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [291],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "70": {
- "keyName": "+",
- "width": 65,
- "height": 155,
- "left": 15,
- "top": 15,
- "packetIndex": [261],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "css": "keyboard-key-125"
- }
- }
- },
- "4": {
- "keys": {
- "71": {
- "keyName": "CAPS",
- "width": 131,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [171],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "css": "keyboard-key wide"
- },
- "72": {
- "keyName": "A",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [12],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "73": {
- "keyName": "S",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [66],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "74": {
- "keyName": "D",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [21],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "75": {
- "keyName": "F",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [27],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "76": {
- "keyName": "G",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [30],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "77": {
- "keyName": "H",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [33],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "78": {
- "keyName": "J",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [39],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "79": {
- "keyName": "K",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [42],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "80": {
- "keyName": "L",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [45],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "81": {
- "keyName": "; :",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [153],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "82": {
- "keyName": "' ''",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [156],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "83": {
- "keyName": "Enter",
- "width": 164,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [120],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "css": "keyboard-key wide3"
- },
- "84": {
- "keyName": "4",
- "width": 65,
- "height": 70,
- "left": 275,
- "top": 15,
- "packetIndex": [276],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1,1,1,1,1]
- },
- "85": {
- "keyName": "5",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [279],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "86": {
- "keyName": "6",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [282],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "5": {
- "keys": {
- "87": {
- "keyName": "Shift",
- "width": 170,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [318],
- "color": {
- "red": 255,
- "green": 255,
- "blue": 0
- },
- "css": "keyboard-key wide3"
- },
- "88": {
- "keyName": "Y",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [87],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "89": {
- "keyName": "X",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [81],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "90": {
- "keyName": "C",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [18],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "91": {
- "keyName": "V",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [75],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "92": {
- "keyName": "B",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [15],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "93": {
- "keyName": "N",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [51],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "94": {
- "keyName": "M",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [48],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "95": {
- "keyName": ", <",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [162],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "96": {
- "keyName": ". >",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [165],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "97": {
- "keyName": "/ ?",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [168],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "98": {
- "keyName": "Shift",
- "width": 205,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [330],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "css": "keyboard-key wide3"
- },
- "99": {
- "keyName": "↑",
- "width": 65,
- "height": 70,
- "left": 105,
- "top": 15,
- "packetIndex": [246],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1,1]
- },
- "100": {
- "keyName": "1",
- "width": 65,
- "height": 70,
- "left": 105,
- "top": 15,
- "packetIndex": [267],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1,1]
- },
- "101": {
- "keyName": "2",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [270],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "102": {
- "keyName": "3",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [273],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "103": {
- "keyName": "Enter",
- "width": 65,
- "height": 155,
- "left": 15,
- "top": 15,
- "packetIndex": [264],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "css": "keyboard-key-125"
- }
- }
- },
- "6": {
- "keys": {
- "104": {
- "keyName": "Ctrl",
- "width": 90,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [315],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "css": "keyboard-key wide"
- },
- "105": {
- "keyName": "Win",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [324],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "106": {
- "keyName": "Alt",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [321],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "css": "keyboard-key wide"
- },
- "107": {
- "keyName": "----------",
- "width": 455,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [132],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "css": "keyboard-key wide7"
- },
- "108": {
- "keyName": "Alt",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [333],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "109": {
- "keyName": "Fn",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [366],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "110": {
- "keyName": "Menu",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [303],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "111": {
- "keyName": "Ctrl",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [327],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "112": {
- "keyName": "←",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [240],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1]
- },
- "113": {
- "keyName": "↓",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [243],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "114": {
- "keyName": "→",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [237],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "115": {
- "keyName": "0",
- "width": 145,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [294],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "spacing": [1],
- "css": "keyboard-key wide"
- },
- "116": {
- "keyName": ".",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [297],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/database/keyboard/k100airW.json b/database/keyboard/k100airW.json
index 0ca47f9..c840ebc 100644
--- a/database/keyboard/k100airW.json
+++ b/database/keyboard/k100airW.json
@@ -1,5 +1,7 @@
{
- "version": 1,
+ "version": 2,
+ "uppercaseClass": "key-uppercase",
+ "fontSize": 14,
"key": "k100airW-default",
"device": "K100 AIR RGB",
"layout": "US",
diff --git a/database/keyboard/k55core-eu.json b/database/keyboard/k55core-eu.json
deleted file mode 100644
index 306496f..0000000
--- a/database/keyboard/k55core-eu.json
+++ /dev/null
@@ -1,952 +0,0 @@
-{
- "key": "k55core-default",
- "device": "K55 Core RGB",
- "layout": "EU",
- "rows": 6,
- "zones": {
- "1":{
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "2":{
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "3":{
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "4":{
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "5":{
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "6":{
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "7":{
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "8":{
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "9":{
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "10":{
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- },
- "row": {
- "0": {
- "keys": {
- "1": {
- "keyName": "ESC",
- "width": 65,
- "height": 70,
- "left": 0,
- "top": 0,
- "zone": 1
- },
- "2": {
- "keyName": "F1",
- "width": 65,
- "height": 70,
- "left": 95,
- "top": 0,
- "zone": 2
- },
- "3": {
- "keyName": "F2",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "zone": 2
- },
- "4": {
- "keyName": "F3",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "zone": 3
- },
- "5": {
- "keyName": "F4",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "zone": 3
- },
- "6": {
- "keyName": "F5",
- "width": 65,
- "height": 70,
- "left": 55,
- "top": 0,
- "zone": 4
- },
- "7": {
- "keyName": "F6",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "zone": 4
- },
- "8": {
- "keyName": "F7",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "zone": 5
- },
- "9": {
- "keyName": "F8",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "zone": 5
- },
- "10": {
- "keyName": "F9",
- "width": 65,
- "height": 70,
- "left": 60,
- "top": 0,
- "zone": 6
- },
- "11": {
- "keyName": "F10",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "zone": 6
- },
- "12": {
- "keyName": "F11",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "zone": 7
- },
- "13": {
- "keyName": "F12",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "zone": 7
- },
- "14": {
- "keyName": "PrtSc",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 0,
- "zone": 8
- },
- "15": {
- "keyName": "ScrLk",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "zone": 8
- },
- "16": {
- "keyName": "Pause",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "zone": 8
- }
- }
- },
- "1": {
- "keys": {
- "17": {
- "keyName": "` ~",
- "width": 65,
- "height": 70,
- "left": 0,
- "top": 15,
- "zone": 1
- },
- "18": {
- "keyName": "1",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 1
- },
- "19": {
- "keyName": "2",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 2
- },
- "20": {
- "keyName": "3",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 2
- },
- "21": {
- "keyName": "4",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 3
- },
- "22": {
- "keyName": "5",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 3
- },
- "23": {
- "keyName": "6",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 4
- },
- "24": {
- "keyName": "7",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 4
- },
- "25": {
- "keyName": "8",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 5
- },
- "26": {
- "keyName": "9",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 5
- },
- "27": {
- "keyName": "0",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 5
- },
- "28": {
- "keyName": "-",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 6
- },
- "29": {
- "keyName": "=",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 6
- },
- "30": {
- "keyName": "<---",
- "width": 150,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 7
- },
- "31": {
- "keyName": "Ins",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "zone": 8
- },
- "32": {
- "keyName": "Home",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 8
- },
- "33": {
- "keyName": "PgUp",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 8
- },
- "34": {
- "keyName": "Num",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "zone": 9
- },
- "35": {
- "keyName": "/",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 9
- },
- "36": {
- "keyName": "*",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 10
- },
- "37": {
- "keyName": "-",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 10
- }
- }
- },
- "2": {
- "keys": {
- "38": {
- "keyName": "Tab",
- "width": 108,
- "height": 70,
- "left": 0,
- "top": 15,
- "zone": 1
- },
- "39": {
- "keyName": "Q",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 2
- },
- "40": {
- "keyName": "W",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 2
- },
- "41": {
- "keyName": "E",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 3
- },
- "42": {
- "keyName": "R",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 3
- },
- "43": {
- "keyName": "T",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 3
- },
- "44": {
- "keyName": "Z",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 4
- },
- "45": {
- "keyName": "U",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 4
- },
- "46": {
- "keyName": "I",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 5
- },
- "47": {
- "keyName": "O",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 5
- },
- "48": {
- "keyName": "P",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 6
- },
- "49": {
- "keyName": "[ {",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 6
- },
- "50": {
- "keyName": "] }",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 7
- },
- "51": {
- "keyName": "\\ |",
- "width": 107,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 7
- },
- "52": {
- "keyName": "Del",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "zone": 8
- },
- "53": {
- "keyName": "End",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 8
- },
- "54": {
- "keyName": "PgDn",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 8
- },
- "55": {
- "keyName": "7",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "zone": 9
- },
- "56": {
- "keyName": "8",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 9
- },
- "57": {
- "keyName": "9",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 10
- },
- "58": {
- "keyName": "+",
- "width": 65,
- "height": 155,
- "left": 15,
- "top": 15,
- "zone": 10
- }
- }
- },
- "3": {
- "keys": {
- "59": {
- "keyName": "CAPS",
- "width": 131,
- "height": 70,
- "left": 0,
- "top": 15,
- "zone": 1
- },
- "60": {
- "keyName": "A",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 2
- },
- "61": {
- "keyName": "S",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 2
- },
- "62": {
- "keyName": "D",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 3
- },
- "63": {
- "keyName": "F",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 3
- },
- "64": {
- "keyName": "G",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 3
- },
- "65": {
- "keyName": "H",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 4
- },
- "66": {
- "keyName": "J",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 4
- },
- "67": {
- "keyName": "K",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 5
- },
- "68": {
- "keyName": "L",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 5
- },
- "69": {
- "keyName": "; :",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 6
- },
- "70": {
- "keyName": "' ''",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 6
- },
- "71": {
- "keyName": "Enter",
- "width": 164,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 7
- },
- "72": {
- "keyName": "4",
- "width": 65,
- "height": 70,
- "left": 275,
- "top": 15,
- "zone": 9
- },
- "73": {
- "keyName": "5",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 9
- },
- "74": {
- "keyName": "6",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 10
- }
- }
- },
- "4": {
- "keys": {
- "75": {
- "keyName": "Shift",
- "width": 170,
- "height": 70,
- "left": 0,
- "top": 15,
- "zone": 1
- },
- "76": {
- "keyName": "Y",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 2
- },
- "77": {
- "keyName": "X",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 2
- },
- "78": {
- "keyName": "C",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 3
- },
- "79": {
- "keyName": "V",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 3
- },
- "80": {
- "keyName": "B",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 4
- },
- "81": {
- "keyName": "N",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 4
- },
- "82": {
- "keyName": "M",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 5
- },
- "83": {
- "keyName": ", <",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 5
- },
- "84": {
- "keyName": ". >",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 6
- },
- "85": {
- "keyName": "/ ?",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 6
- },
- "86": {
- "keyName": "Shift",
- "width": 205,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 7
- },
- "87": {
- "keyName": "↑",
- "width": 65,
- "height": 70,
- "left": 105,
- "top": 15,
- "zone": 8
- },
- "88": {
- "keyName": "1",
- "width": 65,
- "height": 70,
- "left": 105,
- "top": 15,
- "zone": 9
- },
- "89": {
- "keyName": "2",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 9
- },
- "90": {
- "keyName": "3",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 10
- },
- "91": {
- "keyName": "Enter",
- "width": 65,
- "height": 155,
- "left": 15,
- "top": 15,
- "zone": 10
- }
- }
- },
- "5": {
- "keys": {
- "92": {
- "keyName": "Ctrl",
- "width": 90,
- "height": 70,
- "left": 0,
- "top": 15,
- "zone": 1
- },
- "93": {
- "keyName": "Win",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 2
- },
- "94": {
- "keyName": "Alt",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 2
- },
- "95": {
- "keyName": "----------",
- "width": 151,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 3
- },
- "96": {
- "keyName": "----------",
- "width": 153,
- "height": 70,
- "left": 0,
- "top": 15,
- "zone": 4
- },
- "97": {
- "keyName": "----------",
- "width": 151,
- "height": 70,
- "left": 0,
- "top": 15,
- "zone": 5
- },
- "98": {
- "keyName": "Alt",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 6
- },
- "99": {
- "keyName": "Fn",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 6
- },
- "100": {
- "keyName": "Menu",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 7
- },
- "101": {
- "keyName": "Ctrl",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 7
- },
- "102": {
- "keyName": "←",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "zone": 8
- },
- "103": {
- "keyName": "↓",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 8
- },
- "104": {
- "keyName": "→",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 8
- },
- "105": {
- "keyName": "0",
- "width": 145,
- "height": 70,
- "left": 25,
- "top": 15,
- "zone": 9
- },
- "106": {
- "keyName": ".",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "zone": 10
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/database/keyboard/k55core.json b/database/keyboard/k55core.json
index f5200cb..d0d0325 100644
--- a/database/keyboard/k55core.json
+++ b/database/keyboard/k55core.json
@@ -1,4 +1,7 @@
{
+ "version": 1,
+ "uppercaseClass": "key-uppercase",
+ "fontSize": 14,
"key": "k55core-default",
"device": "K55 Core RGB",
"layout": "US",
diff --git a/database/keyboard/k65plus-eu.json b/database/keyboard/k65plus-eu.json
deleted file mode 100644
index fc51e02..0000000
--- a/database/keyboard/k65plus-eu.json
+++ /dev/null
@@ -1,1085 +0,0 @@
-{
- "key": "k65plus-default",
- "device": "K65 Plus Wireless",
- "layout": "EU",
- "rows": 6,
- "row": {
- "0": {
- "keys": {
- "1": {
- "keyName": "ESC",
- "width": 70,
- "height": 70,
- "left": 0,
- "top": 0,
- "packetIndex": [123],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 0
- }
- },
- "2": {
- "keyName": "F1",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [174],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "3": {
- "keyName": "F2",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [177],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "4": {
- "keyName": "F3",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [180],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "5": {
- "keyName": "F4",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [183],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "6": {
- "keyName": "F5",
- "width": 70,
- "height": 70,
- "left": 47,
- "top": 0,
- "packetIndex": [186],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "7": {
- "keyName": "F6",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [189],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "8": {
- "keyName": "F7",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [192],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "9": {
- "keyName": "F8",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [195],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "10": {
- "keyName": "F9",
- "width": 70,
- "height": 70,
- "left": 47,
- "top": 0,
- "packetIndex": [198],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "11": {
- "keyName": "F10",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [201],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "12": {
- "keyName": "F11",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [204],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "13": {
- "keyName": "F12",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [207],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "14": {
- "keyName": "Delete",
- "width": 70,
- "height": 70,
- "left": 20,
- "top": 0,
- "packetIndex": [228],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "1": {
- "keys": {
- "15": {
- "keyName": "` ~",
- "width": 70,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [159],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "16": {
- "keyName": "1",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [90],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "17": {
- "keyName": "2",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [93],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "18": {
- "keyName": "3",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [96],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "19": {
- "keyName": "4",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [99],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "20": {
- "keyName": "5",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [102],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "21": {
- "keyName": "6",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [105],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "22": {
- "keyName": "7",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [108],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "23": {
- "keyName": "8",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [111],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "24": {
- "keyName": "9",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [114],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "25": {
- "keyName": "0",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [117],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "26": {
- "keyName": "-",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [135],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "27": {
- "keyName": "=",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [138],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "28": {
- "keyName": "Backspace",
- "width": 140,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [126],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "29": {
- "keyName": "Home",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [222],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "2": {
- "keys": {
- "30": {
- "keyName": "Tab",
- "width": 100,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [129],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "31": {
- "keyName": "Q",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [60],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "32": {
- "keyName": "W",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [78],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "33": {
- "keyName": "E",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [24],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "34": {
- "keyName": "R",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [63],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "35": {
- "keyName": "T",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [69],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "36": {
- "keyName": "Z",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [84],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "37": {
- "keyName": "U",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [72],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "38": {
- "keyName": "I",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [36],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "39": {
- "keyName": "O",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [54],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "40": {
- "keyName": "P",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [57],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "41": {
- "keyName": "[ {",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [141],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "42": {
- "keyName": "] }",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [144],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "43": {
- "keyName": "\\ |",
- "width": 110,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [147],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "44": {
- "keyName": "PgUp",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [225],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "3": {
- "keys": {
- "45": {
- "keyName": "Caps Lock",
- "width": 120,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [171],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "46": {
- "keyName": "A",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [12],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "47": {
- "keyName": "S",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [66],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "48": {
- "keyName": "D",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [21],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "49": {
- "keyName": "F",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [27],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "50": {
- "keyName": "G",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [30],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "51": {
- "keyName": "H",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [33],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "52": {
- "keyName": "J",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [39],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "53": {
- "keyName": "K",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [42],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "54": {
- "keyName": "L",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [45],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "55": {
- "keyName": "; :",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [153],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "56": {
- "keyName": "' ''",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [156],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "57": {
- "keyName": "Enter",
- "width": 175,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [120],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "58": {
- "keyName": "PgDn",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [234],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "4": {
- "keys": {
- "59": {
- "keyName": "Shift",
- "width": 175,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [318],
- "color": {
- "red": 255,
- "green": 255,
- "blue": 0
- }
- },
- "60": {
- "keyName": "Y",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [87],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "61": {
- "keyName": "X",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [81],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "62": {
- "keyName": "C",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [18],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "63": {
- "keyName": "V",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [75],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "64": {
- "keyName": "B",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [15],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "65": {
- "keyName": "N",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [51],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "66": {
- "keyName": "M",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [48],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "67": {
- "keyName": ", <",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [162],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "68": {
- "keyName": ". >",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [165],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "69": {
- "keyName": "/ ?",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [168],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "70": {
- "keyName": "Shift",
- "width": 120,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [330],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "71": {
- "keyName": "↑",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [246],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "5": {
- "keys": {
- "72": {
- "keyName": "Ctrl",
- "width": 90,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [315],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "73": {
- "keyName": "Win",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [324],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "74": {
- "keyName": "Alt",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [321],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "75": {
- "keyName": "",
- "width": 505,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [0, 3, 132],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "76": {
- "keyName": "Alt",
- "width": 60,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [333],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "77": {
- "keyName": "Fn",
- "width": 60,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [366],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "78": {
- "keyName": "Ctrl",
- "width": 60,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [327],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "79": {
- "keyName": "←",
- "width": 70,
- "height": 70,
- "left": 45,
- "top": 15,
- "packetIndex": [240],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "80": {
- "keyName": "↓",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [243],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "81": {
- "keyName": "→",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [237],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/database/keyboard/k65plus.json b/database/keyboard/k65plus.json
index 5eaaf08..f8ca074 100644
--- a/database/keyboard/k65plus.json
+++ b/database/keyboard/k65plus.json
@@ -1,4 +1,7 @@
{
+ "version": 1,
+ "uppercaseClass": "key-uppercase",
+ "fontSize": 14,
"key": "k65plus-default",
"device": "K65 Plus Wireless",
"layout": "US",
diff --git a/database/keyboard/k65plusW-eu.json b/database/keyboard/k65plusW-eu.json
deleted file mode 100644
index 1e7afb5..0000000
--- a/database/keyboard/k65plusW-eu.json
+++ /dev/null
@@ -1,685 +0,0 @@
-{
- "key": "k65plusW-default",
- "device": "K65 Plus Wireless",
- "layout": "EU",
- "rows": 6,
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "row": {
- "0": {
- "keys": {
- "1": {
- "keyName": "ESC",
- "width": 70,
- "height": 70,
- "left": 0,
- "top": 0,
- "packetIndex": [123]
- },
- "2": {
- "keyName": "F1",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [174]
- },
- "3": {
- "keyName": "F2",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [177]
- },
- "4": {
- "keyName": "F3",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [180]
- },
- "5": {
- "keyName": "F4",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [183]
- },
- "6": {
- "keyName": "F5",
- "width": 70,
- "height": 70,
- "left": 47,
- "top": 0,
- "packetIndex": [186]
- },
- "7": {
- "keyName": "F6",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [189]
- },
- "8": {
- "keyName": "F7",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [192]
- },
- "9": {
- "keyName": "F8",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [195]
- },
- "10": {
- "keyName": "F9",
- "width": 70,
- "height": 70,
- "left": 47,
- "top": 0,
- "packetIndex": [198]
- },
- "11": {
- "keyName": "F10",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [201]
- },
- "12": {
- "keyName": "F11",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [204]
- },
- "13": {
- "keyName": "F12",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [207]
- },
- "14": {
- "keyName": "Delete",
- "width": 70,
- "height": 70,
- "left": 20,
- "top": 0,
- "packetIndex": [228]
- }
- }
- },
- "1": {
- "keys": {
- "15": {
- "keyName": "` ~",
- "width": 70,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [159]
- },
- "16": {
- "keyName": "1",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [90]
- },
- "17": {
- "keyName": "2",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [93]
- },
- "18": {
- "keyName": "3",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [96]
- },
- "19": {
- "keyName": "4",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [99]
- },
- "20": {
- "keyName": "5",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [102]
- },
- "21": {
- "keyName": "6",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [105]
- },
- "22": {
- "keyName": "7",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [108]
- },
- "23": {
- "keyName": "8",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [111]
- },
- "24": {
- "keyName": "9",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [114]
- },
- "25": {
- "keyName": "0",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [117]
- },
- "26": {
- "keyName": "-",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [135]
- },
- "27": {
- "keyName": "=",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [138]
- },
- "28": {
- "keyName": "Backspace",
- "width": 140,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [126]
- },
- "29": {
- "keyName": "Home",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [222]
- }
- }
- },
- "2": {
- "keys": {
- "30": {
- "keyName": "Tab",
- "width": 100,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [129]
- },
- "31": {
- "keyName": "Q",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [60]
- },
- "32": {
- "keyName": "W",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [78]
- },
- "33": {
- "keyName": "E",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [24]
- },
- "34": {
- "keyName": "R",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [63]
- },
- "35": {
- "keyName": "T",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [69]
- },
- "36": {
- "keyName": "Z",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [84]
- },
- "37": {
- "keyName": "U",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [72]
- },
- "38": {
- "keyName": "I",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [36]
- },
- "39": {
- "keyName": "O",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [54]
- },
- "40": {
- "keyName": "P",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [57]
- },
- "41": {
- "keyName": "[ {",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [141]
- },
- "42": {
- "keyName": "] }",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [144]
- },
- "43": {
- "keyName": "\\ |",
- "width": 110,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [147]
- },
- "44": {
- "keyName": "PgUp",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [225]
- }
- }
- },
- "3": {
- "keys": {
- "45": {
- "keyName": "Caps Lock",
- "width": 120,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [171]
- },
- "46": {
- "keyName": "A",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [12]
- },
- "47": {
- "keyName": "S",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [66]
- },
- "48": {
- "keyName": "D",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [21]
- },
- "49": {
- "keyName": "F",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [27]
- },
- "50": {
- "keyName": "G",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [30]
- },
- "51": {
- "keyName": "H",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [33]
- },
- "52": {
- "keyName": "J",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [39]
- },
- "53": {
- "keyName": "K",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [42]
- },
- "54": {
- "keyName": "L",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [45]
- },
- "55": {
- "keyName": "; :",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [153]
- },
- "56": {
- "keyName": "' ''",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [156]
- },
- "57": {
- "keyName": "Enter",
- "width": 175,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [120]
- },
- "58": {
- "keyName": "PgDn",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [234]
- }
- }
- },
- "4": {
- "keys": {
- "59": {
- "keyName": "Shift",
- "width": 175,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [318]
- },
- "60": {
- "keyName": "Y",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [87]
- },
- "61": {
- "keyName": "X",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [81]
- },
- "62": {
- "keyName": "C",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [18]
- },
- "63": {
- "keyName": "V",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [75]
- },
- "64": {
- "keyName": "B",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [15]
- },
- "65": {
- "keyName": "N",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [51]
- },
- "66": {
- "keyName": "M",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [48]
- },
- "67": {
- "keyName": ", <",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [162]
- },
- "68": {
- "keyName": ". >",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [165]
- },
- "69": {
- "keyName": "/ ?",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [168]
- },
- "70": {
- "keyName": "Shift",
- "width": 120,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [330]
- },
- "71": {
- "keyName": "↑",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [246]
- }
- }
- },
- "5": {
- "keys": {
- "72": {
- "keyName": "Ctrl",
- "width": 90,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [315]
- },
- "73": {
- "keyName": "Win",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [324]
- },
- "74": {
- "keyName": "Alt",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [321]
- },
- "75": {
- "keyName": "",
- "width": 505,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [0, 3, 132]
- },
- "76": {
- "keyName": "Alt",
- "width": 60,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [333]
- },
- "77": {
- "keyName": "Fn",
- "width": 60,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [366]
- },
- "78": {
- "keyName": "Ctrl",
- "width": 60,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [327]
- },
- "79": {
- "keyName": "←",
- "width": 70,
- "height": 70,
- "left": 45,
- "top": 15,
- "packetIndex": [240]
- },
- "80": {
- "keyName": "↓",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [243]
- },
- "81": {
- "keyName": "→",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [237]
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/database/keyboard/k65plusW.json b/database/keyboard/k65plusW.json
index e9b5252..9e9ceb0 100644
--- a/database/keyboard/k65plusW.json
+++ b/database/keyboard/k65plusW.json
@@ -1,4 +1,7 @@
{
+ "version": 1,
+ "uppercaseClass": "key-uppercase",
+ "fontSize": 14,
"key": "k65plusW-default",
"device": "K65 Plus Wireless",
"layout": "US",
diff --git a/database/keyboard/k65pm-eu.json b/database/keyboard/k65pm-eu.json
deleted file mode 100644
index 9f8f498..0000000
--- a/database/keyboard/k65pm-eu.json
+++ /dev/null
@@ -1,899 +0,0 @@
-{
- "key": "k65pm-default",
- "device": "K65 Pro Mini",
- "layout": "EU",
- "rows": 5,
- "row": {
- "0": {
- "keys": {
- "1": {
- "keyName": "ESC",
- "width": 70,
- "height": 70,
- "left": 0,
- "top": 0,
- "packetIndex": [123],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 0
- }
- },
- "2": {
- "keyName": "1",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [90],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "3": {
- "keyName": "2",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [93],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "4": {
- "keyName": "3",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [96],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "5": {
- "keyName": "4",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [99],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "6": {
- "keyName": "5",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [102],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "7": {
- "keyName": "6",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [105],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "8": {
- "keyName": "7",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [108],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "9": {
- "keyName": "8",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [111],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "10": {
- "keyName": "9",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [114],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "11": {
- "keyName": "0",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [117],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "12": {
- "keyName": "-",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [135],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "13": {
- "keyName": "=",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [138],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "14": {
- "keyName": "<---",
- "width": 140,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [126],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "15": {
- "keyName": "Logo",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [387],
- "color": {
- "red": 255,
- "green": 255,
- "blue": 0
- }
- }
- }
- },
- "1": {
- "keys": {
- "16": {
- "keyName": "TAB",
- "width": 100,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [129],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "17": {
- "keyName": "Q",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [60],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "18": {
- "keyName": "W",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [78],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "19": {
- "keyName": "E",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [24],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "20": {
- "keyName": "R",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [63],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "21": {
- "keyName": "T",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [69],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "22": {
- "keyName": "Z",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [84],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "23": {
- "keyName": "U",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [72],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "24": {
- "keyName": "I",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [36],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "25": {
- "keyName": "O",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [54],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "26": {
- "keyName": "P",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [57],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "27": {
- "keyName": "[ {",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [141],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "28": {
- "keyName": "] }",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [144],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "29": {
- "keyName": "\\ |",
- "width": 110,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [147],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "30": {
- "keyName": "DEL",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [228],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "2": {
- "keys": {
- "31": {
- "keyName": "CAPS",
- "width": 120,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [171],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "32": {
- "keyName": "A",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [12],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "33": {
- "keyName": "S",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [66],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "34": {
- "keyName": "D",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [21],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "35": {
- "keyName": "F",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [27],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "36": {
- "keyName": "G",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [30],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "37": {
- "keyName": "H",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [33],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "38": {
- "keyName": "J",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [39],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "39": {
- "keyName": "K",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [42],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "40": {
- "keyName": "L",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [45],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "41": {
- "keyName": "; :",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [153],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "42": {
- "keyName": "' ''",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [156],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "43": {
- "keyName": "ENTER",
- "width": 175,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [120],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "44": {
- "keyName": "PG UP",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [225],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "3": {
- "keys": {
- "45": {
- "keyName": "SHIFT",
- "width": 175,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [318],
- "color": {
- "red": 255,
- "green": 255,
- "blue": 0
- }
- },
- "46": {
- "keyName": "Y",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [87],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "47": {
- "keyName": "X",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [81],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "48": {
- "keyName": "C",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [18],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "49": {
- "keyName": "V",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [75],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "50": {
- "keyName": "B",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [15],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "51": {
- "keyName": "N",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [51],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "52": {
- "keyName": "M",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [48],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "53": {
- "keyName": ", <",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [162],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "54": {
- "keyName": ". >",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [165],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "55": {
- "keyName": "/ ?",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [168],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "56": {
- "keyName": "SHIFT",
- "width": 120,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [330],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "57": {
- "keyName": "↑",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [246],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "58": {
- "keyName": "PG DN",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [234],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "4": {
- "keys": {
- "59": {
- "keyName": "CTRL",
- "width": 90,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [315],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "60": {
- "keyName": "Win",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [324],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "61": {
- "keyName": "ALT",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [321],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "62": {
- "keyName": "SPACE",
- "width": 520,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [0, 3, 132],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "63": {
- "keyName": "ALT",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [333],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "64": {
- "keyName": "FN",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [366],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "65": {
- "keyName": "←",
- "width": 70,
- "height": 70,
- "left": 45,
- "top": 15,
- "packetIndex": [240],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "66": {
- "keyName": "↓",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [243],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "67": {
- "keyName": "→",
- "width": 70,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [237],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/database/keyboard/k65pm.json b/database/keyboard/k65pm.json
index 9b4c22d..bda8dd5 100644
--- a/database/keyboard/k65pm.json
+++ b/database/keyboard/k65pm.json
@@ -1,4 +1,7 @@
{
+ "version": 1,
+ "uppercaseClass": "key-uppercase",
+ "fontSize": 14,
"key": "k65pm-default",
"device": "K65 Pro Mini",
"layout": "US",
@@ -186,7 +189,8 @@
"red": 0,
"green": 255,
"blue": 255
- }
+ },
+ "css": "keyboard-key wide3"
},
"15": {
"keyName": "Logo",
@@ -216,7 +220,8 @@
"red": 0,
"green": 255,
"blue": 255
- }
+ },
+ "css": "keyboard-key wide"
},
"17": {
"keyName": "Q",
@@ -385,7 +390,8 @@
"red": 0,
"green": 255,
"blue": 255
- }
+ },
+ "css": "keyboard-key wide"
},
"30": {
"keyName": "DEL",
@@ -415,7 +421,8 @@
"red": 0,
"green": 255,
"blue": 255
- }
+ },
+ "css": "keyboard-key wide"
},
"32": {
"keyName": "A",
@@ -571,7 +578,8 @@
"red": 0,
"green": 255,
"blue": 255
- }
+ },
+ "css": "keyboard-key wide3"
},
"44": {
"keyName": "PG UP",
@@ -601,7 +609,8 @@
"red": 255,
"green": 255,
"blue": 0
- }
+ },
+ "css": "keyboard-key wide3"
},
"46": {
"keyName": "Z",
@@ -744,7 +753,8 @@
"red": 0,
"green": 255,
"blue": 255
- }
+ },
+ "css": "keyboard-key wide"
},
"57": {
"keyName": "↑",
@@ -787,7 +797,8 @@
"red": 0,
"green": 255,
"blue": 255
- }
+ },
+ "css": "keyboard-key wide"
},
"60": {
"keyName": "Win",
@@ -813,7 +824,8 @@
"red": 0,
"green": 255,
"blue": 255
- }
+ },
+ "css": "keyboard-key wide"
},
"62": {
"keyName": "SPACE",
@@ -826,7 +838,8 @@
"red": 0,
"green": 255,
"blue": 255
- }
+ },
+ "css": "keyboard-key wide6"
},
"63": {
"keyName": "ALT",
@@ -865,7 +878,8 @@
"red": 0,
"green": 255,
"blue": 255
- }
+ },
+ "spacing": [1]
},
"66": {
"keyName": "↓",
diff --git a/database/keyboard/k70core.json b/database/keyboard/k70core.json
index 4dbf151..278065e 100644
--- a/database/keyboard/k70core.json
+++ b/database/keyboard/k70core.json
@@ -1,4 +1,7 @@
{
+ "version": 1,
+ "uppercaseClass": "key-uppercase",
+ "fontSize": 14,
"key": "k70core-default",
"device": "K70 Core RGB",
"layout": "US",
diff --git a/database/keyboard/k70coretkl-eu.json b/database/keyboard/k70coretkl-eu.json
deleted file mode 100644
index 309dba3..0000000
--- a/database/keyboard/k70coretkl-eu.json
+++ /dev/null
@@ -1,1137 +0,0 @@
-{
- "key": "k70coretkl-default",
- "device": "K70 CORE TKL",
- "layout": "EU",
- "rows": 6,
- "row": {
- "0": {
- "keys": {
- "1": {
- "keyName": "ESC",
- "width": 65,
- "height": 70,
- "left": 0,
- "top": 0,
- "packetIndex": [123],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 0
- }
- },
- "2": {
- "keyName": "F1",
- "width": 65,
- "height": 70,
- "left": 95,
- "top": 0,
- "packetIndex": [174],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "3": {
- "keyName": "F2",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [177],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "4": {
- "keyName": "F3",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [180],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "5": {
- "keyName": "F4",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [183],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "6": {
- "keyName": "F5",
- "width": 65,
- "height": 70,
- "left": 55,
- "top": 0,
- "packetIndex": [186],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "7": {
- "keyName": "F6",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [189],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "8": {
- "keyName": "F7",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [192],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "9": {
- "keyName": "F8",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [195],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "10": {
- "keyName": "F9",
- "width": 65,
- "height": 70,
- "left": 60,
- "top": 0,
- "packetIndex": [198],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "11": {
- "keyName": "F10",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [201],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "12": {
- "keyName": "F11",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [204],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "13": {
- "keyName": "F12",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [207],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "14": {
- "keyName": "Profile",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 0,
- "packetIndex": [372],
- "color": {
- "red": 255,
- "green": 255,
- "blue": 0
- }
- }
- }
- },
- "1": {
- "keys": {
- "15": {
- "keyName": "` ~",
- "width": 65,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [159],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "16": {
- "keyName": "1",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [90],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "17": {
- "keyName": "2",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [93],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "18": {
- "keyName": "3",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [96],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "19": {
- "keyName": "4",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [99],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "20": {
- "keyName": "5",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [102],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "21": {
- "keyName": "6",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [105],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "22": {
- "keyName": "7",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [108],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "23": {
- "keyName": "8",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [111],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "24": {
- "keyName": "9",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [114],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "25": {
- "keyName": "0",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [117],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "26": {
- "keyName": "-",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [135],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "27": {
- "keyName": "=",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [138],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "28": {
- "keyName": "<---",
- "width": 150,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [126],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "29": {
- "keyName": "Ins",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [219],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "30": {
- "keyName": "Home",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [222],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "31": {
- "keyName": "PgUp",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [225],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "2": {
- "keys": {
- "32": {
- "keyName": "Tab",
- "width": 108,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [129],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "33": {
- "keyName": "Q",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [60],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "34": {
- "keyName": "W",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [78],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "35": {
- "keyName": "E",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [24],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "36": {
- "keyName": "R",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [63],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "37": {
- "keyName": "T",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [69],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "38": {
- "keyName": "Z",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [84],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "39": {
- "keyName": "U",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [72],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "40": {
- "keyName": "I",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [36],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "41": {
- "keyName": "O",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [54],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "42": {
- "keyName": "P",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [57],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "43": {
- "keyName": "[ {",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [141],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "44": {
- "keyName": "] }",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [144],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "45": {
- "keyName": "\\ |",
- "width": 107,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [147],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "46": {
- "keyName": "Del",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [228],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "47": {
- "keyName": "End",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [231],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "48": {
- "keyName": "PgDn",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [234],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "3": {
- "keys": {
- "49": {
- "keyName": "CAPS",
- "width": 131,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [171],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "50": {
- "keyName": "A",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [12],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "51": {
- "keyName": "S",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [66],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "52": {
- "keyName": "D",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [21],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "53": {
- "keyName": "F",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [27],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "54": {
- "keyName": "G",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [30],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "55": {
- "keyName": "H",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [33],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "56": {
- "keyName": "J",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [39],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "57": {
- "keyName": "K",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [42],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "58": {
- "keyName": "L",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [45],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "59": {
- "keyName": "; :",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [153],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "60": {
- "keyName": "' ''",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [156],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "61": {
- "keyName": "Enter",
- "width": 164,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [120],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "4": {
- "keys": {
- "62": {
- "keyName": "Shift",
- "width": 170,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [318],
- "color": {
- "red": 255,
- "green": 255,
- "blue": 0
- }
- },
- "63": {
- "keyName": "Y",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [87],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "64": {
- "keyName": "X",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [81],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "65": {
- "keyName": "C",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [18],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "66": {
- "keyName": "V",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [75],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "67": {
- "keyName": "B",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [15],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "68": {
- "keyName": "N",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [51],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "69": {
- "keyName": "M",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [48],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "70": {
- "keyName": ", <",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [162],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "71": {
- "keyName": ". >",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [165],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "72": {
- "keyName": "/ ?",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [168],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "73": {
- "keyName": "Shift",
- "width": 205,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [330],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "74": {
- "keyName": "↑",
- "width": 65,
- "height": 70,
- "left": 105,
- "top": 15,
- "packetIndex": [246],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "5": {
- "keys": {
- "75": {
- "keyName": "Ctrl",
- "width": 90,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [315],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "76": {
- "keyName": "Win",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [324],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "77": {
- "keyName": "Alt",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [321],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "78": {
- "keyName": "----------",
- "width": 455,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [132],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "79": {
- "keyName": "Alt",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [333],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "80": {
- "keyName": "Fn",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [366],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "81": {
- "keyName": "Menu",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [303],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "82": {
- "keyName": "Ctrl",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [327],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "83": {
- "keyName": "←",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [240],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "84": {
- "keyName": "↓",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [243],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "85": {
- "keyName": "→",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [237],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/database/keyboard/k70coretkl.json b/database/keyboard/k70coretkl.json
index 5f5afe2..14bc642 100644
--- a/database/keyboard/k70coretkl.json
+++ b/database/keyboard/k70coretkl.json
@@ -1,4 +1,7 @@
{
+ "version": 1,
+ "uppercaseClass": "key-uppercase",
+ "fontSize": 14,
"key": "k70coretkl-default",
"device": "K70 CORE TKL",
"layout": "US",
diff --git a/database/keyboard/k70coretklW-eu.json b/database/keyboard/k70coretklW-eu.json
deleted file mode 100644
index 0d98923..0000000
--- a/database/keyboard/k70coretklW-eu.json
+++ /dev/null
@@ -1,1156 +0,0 @@
-{
- "key": "k70coretklW-default",
- "device": "K70 CORE TKL WL",
- "layout": "EU",
- "rows": 6,
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "row": {
- "0": {
- "keys": {
- "1": {
- "keyName": "ESC",
- "width": 65,
- "height": 70,
- "left": 0,
- "top": 0,
- "packetIndex": [123],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 0
- }
- },
- "2": {
- "keyName": "F1",
- "width": 65,
- "height": 70,
- "left": 95,
- "top": 0,
- "packetIndex": [174],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "3": {
- "keyName": "F2",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [177],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "4": {
- "keyName": "F3",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [180],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "5": {
- "keyName": "F4",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [183],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "6": {
- "keyName": "F5",
- "width": 65,
- "height": 70,
- "left": 55,
- "top": 0,
- "packetIndex": [186],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "7": {
- "keyName": "F6",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [189],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "8": {
- "keyName": "F7",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [192],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "9": {
- "keyName": "F8",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [195],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "10": {
- "keyName": "F9",
- "width": 65,
- "height": 70,
- "left": 60,
- "top": 0,
- "packetIndex": [198],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "11": {
- "keyName": "F10",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [201],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "12": {
- "keyName": "F11",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [204],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "13": {
- "keyName": "F12",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [207],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "14": {
- "keyName": "icon-speed.svg",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 0,
- "packetIndex": [3],
- "color": {
- "red": 255,
- "green": 255,
- "blue": 0
- },
- "svg": true
- },
- "15": {
- "keyName": "Profile",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [6],
- "color": {
- "red": 255,
- "green": 255,
- "blue": 0
- }
- }
- }
- },
- "1": {
- "keys": {
- "16": {
- "keyName": "` ~",
- "width": 65,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [159],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "17": {
- "keyName": "1",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [90],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "18": {
- "keyName": "2",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [93],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "19": {
- "keyName": "3",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [96],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "20": {
- "keyName": "4",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [99],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "21": {
- "keyName": "5",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [102],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "22": {
- "keyName": "6",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [105],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "23": {
- "keyName": "7",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [108],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "24": {
- "keyName": "8",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [111],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "25": {
- "keyName": "9",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [114],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "26": {
- "keyName": "0",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [117],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "27": {
- "keyName": "-",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [135],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "28": {
- "keyName": "=",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [138],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "29": {
- "keyName": "<---",
- "width": 150,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [126],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "30": {
- "keyName": "Ins",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [219],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "31": {
- "keyName": "Home",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [222],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "32": {
- "keyName": "PgUp",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [225],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "2": {
- "keys": {
- "33": {
- "keyName": "Tab",
- "width": 108,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [129],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "34": {
- "keyName": "Q",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [60],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "35": {
- "keyName": "W",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [78],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "36": {
- "keyName": "E",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [24],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "37": {
- "keyName": "R",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [63],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "38": {
- "keyName": "T",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [69],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "39": {
- "keyName": "Z",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [84],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "40": {
- "keyName": "U",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [72],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "41": {
- "keyName": "I",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [36],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "42": {
- "keyName": "O",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [54],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "43": {
- "keyName": "P",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [57],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "44": {
- "keyName": "[ {",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [141],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "45": {
- "keyName": "] }",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [144],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "46": {
- "keyName": "\\ |",
- "width": 107,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [147],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "47": {
- "keyName": "Del",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [228],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "48": {
- "keyName": "End",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [231],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "49": {
- "keyName": "PgDn",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [234],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "3": {
- "keys": {
- "50": {
- "keyName": "CAPS",
- "width": 131,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [171],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "51": {
- "keyName": "A",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [12],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "52": {
- "keyName": "S",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [66],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "53": {
- "keyName": "D",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [21],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "54": {
- "keyName": "F",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [27],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "55": {
- "keyName": "G",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [30],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "56": {
- "keyName": "H",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [33],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "57": {
- "keyName": "J",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [39],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "58": {
- "keyName": "K",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [42],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "59": {
- "keyName": "L",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [45],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "60": {
- "keyName": "; :",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [153],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "61": {
- "keyName": "' ''",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [156],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "62": {
- "keyName": "Enter",
- "width": 164,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [120],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "4": {
- "keys": {
- "63": {
- "keyName": "Shift",
- "width": 170,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [318],
- "color": {
- "red": 255,
- "green": 255,
- "blue": 0
- }
- },
- "64": {
- "keyName": "Y",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [87],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "65": {
- "keyName": "X",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [81],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "66": {
- "keyName": "C",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [18],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "67": {
- "keyName": "V",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [75],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "68": {
- "keyName": "B",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [15],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "69": {
- "keyName": "N",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [51],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "70": {
- "keyName": "M",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [48],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "71": {
- "keyName": ", <",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [162],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "72": {
- "keyName": ". >",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [165],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "73": {
- "keyName": "/ ?",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [168],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "74": {
- "keyName": "Shift",
- "width": 205,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [330],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "75": {
- "keyName": "↑",
- "width": 65,
- "height": 70,
- "left": 105,
- "top": 15,
- "packetIndex": [246],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "5": {
- "keys": {
- "76": {
- "keyName": "Ctrl",
- "width": 90,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [315],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "77": {
- "keyName": "Win",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [324],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "78": {
- "keyName": "Alt",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [321],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "79": {
- "keyName": "----------",
- "width": 455,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [132],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "80": {
- "keyName": "Alt",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [333],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "81": {
- "keyName": "Fn",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [366],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "82": {
- "keyName": "Menu",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [303],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "83": {
- "keyName": "Ctrl",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [327],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "84": {
- "keyName": "←",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [240],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "85": {
- "keyName": "↓",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [243],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "86": {
- "keyName": "→",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [237],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/database/keyboard/k70coretklW.json b/database/keyboard/k70coretklW.json
index b38e6fa..a17e211 100644
--- a/database/keyboard/k70coretklW.json
+++ b/database/keyboard/k70coretklW.json
@@ -1,4 +1,7 @@
{
+ "version": 1,
+ "uppercaseClass": "key-uppercase",
+ "fontSize": 14,
"key": "k70coretklW-default",
"device": "K70 CORE TKL WL",
"layout": "US",
diff --git a/database/keyboard/k70mk2-eu.json b/database/keyboard/k70mk2-eu.json
deleted file mode 100644
index 318ff6b..0000000
--- a/database/keyboard/k70mk2-eu.json
+++ /dev/null
@@ -1,1539 +0,0 @@
-{
- "key": "k70mk2-default",
- "device": "K70 MK2",
- "layout": "EU",
- "rows": 6,
- "row": {
- "0": {
- "keys": {
- "1": {
- "keyName": "icon-user.svg",
- "width": 65,
- "height": 40,
- "left": 0,
- "top": 0,
- "packetIndex": [125],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true
- },
- "2": {
- "keyName": "icon-brightness.svg",
- "width": 65,
- "height": 40,
- "left": 15,
- "top": 0,
- "packetIndex": [137],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true
- },
- "3": {
- "keyName": "icon-lock.svg",
- "width": 65,
- "height": 40,
- "left": 15,
- "top": 0,
- "packetIndex": [8],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true
- },
- "4": {
- "keyName": "LOGO",
- "width": 202,
- "height": 40,
- "left": 400,
- "top": 0,
- "packetIndex": [47],
- "color": {
- "red": 255,
- "green": 255,
- "blue": 0
- }
- },
- "5": {
- "keyName": "LOGO",
- "width": 202,
- "height": 40,
- "left": 0,
- "top": 0,
- "packetIndex": [59],
- "color": {
- "red": 255,
- "green": 255,
- "blue": 0
- }
- },
- "6": {
- "keyName": "icon-mute.svg",
- "width": 65,
- "height": 40,
- "left": 436,
- "top": 0,
- "packetIndex": [20],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true
- }
- }
- },
- "1": {
- "keys": {
- "7": {
- "keyName": "ESC",
- "width": 65,
- "height": 70,
- "left": 0,
- "top": 50,
- "packetIndex": [0],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 0
- }
- },
- "8": {
- "keyName": "F1",
- "width": 65,
- "height": 70,
- "left": 95,
- "top": 50,
- "packetIndex": [12],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "9": {
- "keyName": "F2",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [24],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "10": {
- "keyName": "F3",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [36],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "11": {
- "keyName": "F4",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [48],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "12": {
- "keyName": "F5",
- "width": 65,
- "height": 70,
- "left": 55,
- "top": 50,
- "packetIndex": [60],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "13": {
- "keyName": "F6",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [72],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "14": {
- "keyName": "F7",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [84],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "15": {
- "keyName": "F8",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [96],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "16": {
- "keyName": "F9",
- "width": 65,
- "height": 70,
- "left": 60,
- "top": 50,
- "packetIndex": [108],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "17": {
- "keyName": "F10",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [120],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "18": {
- "keyName": "F11",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [132],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "19": {
- "keyName": "F12",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [6],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "20": {
- "keyName": "PrtSc",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 50,
- "packetIndex": [18],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "21": {
- "keyName": "ScrLk",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [30],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "22": {
- "keyName": "Pause",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [42],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "23": {
- "keyName": "icon-stop.svg",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 50,
- "packetIndex": [32],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true
- },
- "24": {
- "keyName": "icon-backward.svg",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [44],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true
- },
- "25": {
- "keyName": "icon-pause.svg",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [56],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true
- },
- "26": {
- "keyName": "icon-forward.svg",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [68],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true
- }
- }
- },
- "2": {
- "keys": {
- "27": {
- "keyName": "` ~",
- "width": 65,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [1],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "28": {
- "keyName": "1",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [13],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "29": {
- "keyName": "2",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [25],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "30": {
- "keyName": "3",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [37],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "31": {
- "keyName": "4",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [49],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "32": {
- "keyName": "5",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [61],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "33": {
- "keyName": "6",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [73],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "34": {
- "keyName": "7",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [85],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "35": {
- "keyName": "8",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [97],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "36": {
- "keyName": "9",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [109],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "37": {
- "keyName": "0",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [121],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "38": {
- "keyName": "-",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [133],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "39": {
- "keyName": "=",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [7],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "40": {
- "keyName": "<---",
- "width": 150,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [31],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "41": {
- "keyName": "Ins",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [54],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "42": {
- "keyName": "Home",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [66],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "43": {
- "keyName": "PgUp",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [78],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "44": {
- "keyName": "Num",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [80],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "45": {
- "keyName": "/",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [92],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "46": {
- "keyName": "*",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [104],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "47": {
- "keyName": "-",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [116],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "3": {
- "keys": {
- "48": {
- "keyName": "Tab",
- "width": 108,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [2],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "49": {
- "keyName": "Q",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [14],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "50": {
- "keyName": "W",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [26],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "51": {
- "keyName": "E",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [38],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "52": {
- "keyName": "R",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [50],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "53": {
- "keyName": "T",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [62],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "54": {
- "keyName": "Z",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [74],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "55": {
- "keyName": "U",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [86],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "56": {
- "keyName": "I",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [98],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "57": {
- "keyName": "O",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [110],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "58": {
- "keyName": "P",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [122],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "59": {
- "keyName": "[ {",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [134],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "60": {
- "keyName": "] }",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [90],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "61": {
- "keyName": "Enter",
- "width": 107,
- "height": 155,
- "left": 15,
- "top": 15,
- "packetIndex": [126],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "62": {
- "keyName": "Del",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [43],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "63": {
- "keyName": "End",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [55],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "64": {
- "keyName": "PgDn",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [67],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "65": {
- "keyName": "7",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [9],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "66": {
- "keyName": "8",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [21],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "67": {
- "keyName": "9",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [33],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "68": {
- "keyName": "+",
- "width": 65,
- "height": 155,
- "left": 15,
- "top": 15,
- "packetIndex": [128],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "4": {
- "keys": {
- "69": {
- "keyName": "CAPS",
- "width": 108,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [3],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "70": {
- "keyName": "A",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [15],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "71": {
- "keyName": "S",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [27],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "72": {
- "keyName": "D",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [39],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "73": {
- "keyName": "F",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [51],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "74": {
- "keyName": "G",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [63],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "75": {
- "keyName": "H",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [75],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "76": {
- "keyName": "J",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [87],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "77": {
- "keyName": "K",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [99],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "78": {
- "keyName": "L",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [111],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "79": {
- "keyName": "; :",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [123],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "80": {
- "keyName": "' ''",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [135],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "81": {
- "keyName": "\\ |",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [114],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "82": {
- "keyName": "4",
- "width": 65,
- "height": 70,
- "left": 397,
- "top": 15,
- "packetIndex": [57],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "83": {
- "keyName": "5",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [69],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "84": {
- "keyName": "6",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [81],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "5": {
- "keys": {
- "85": {
- "keyName": "Shift",
- "width": 90,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [4],
- "color": {
- "red": 255,
- "green": 255,
- "blue": 0
- }
- },
- "86": {
- "keyName": "⊞",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [16],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "87": {
- "keyName": "Y",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [28],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "88": {
- "keyName": "X",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [40],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "89": {
- "keyName": "C",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [52],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "90": {
- "keyName": "V",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [64],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "91": {
- "keyName": "B",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [76],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "92": {
- "keyName": "N",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [88],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "93": {
- "keyName": "M",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [100],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "94": {
- "keyName": ", <",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [112],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "95": {
- "keyName": ". >",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [124],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "96": {
- "keyName": "/ ?",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [136],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "97": {
- "keyName": "Shift",
- "width": 205,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [79],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "98": {
- "keyName": "↑",
- "width": 65,
- "height": 70,
- "left": 105,
- "top": 15,
- "packetIndex": [103],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "99": {
- "keyName": "1",
- "width": 65,
- "height": 70,
- "left": 105,
- "top": 15,
- "packetIndex": [93],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "100": {
- "keyName": "2",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [105],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "101": {
- "keyName": "3",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [117],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "102": {
- "keyName": "Enter",
- "width": 65,
- "height": 155,
- "left": 15,
- "top": 15,
- "packetIndex": [140],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "6": {
- "keys": {
- "103": {
- "keyName": "Ctrl",
- "width": 90,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [5],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "104": {
- "keyName": "Win",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [17],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "105": {
- "keyName": "Alt",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [29],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "106": {
- "keyName": "----------",
- "width": 480,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [53],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "107": {
- "keyName": "Alt",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [89],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "108": {
- "keyName": "Win",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [101],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "109": {
- "keyName": "RC",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [113],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "110": {
- "keyName": "Ctrl",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [91],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "111": {
- "keyName": "←",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [115],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "112": {
- "keyName": "↓",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [127],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "113": {
- "keyName": "→",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [139],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "114": {
- "keyName": "0",
- "width": 145,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [129],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "115": {
- "keyName": ".",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [141],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/database/keyboard/k70mk2.json b/database/keyboard/k70mk2.json
index 081f892..36ec516 100644
--- a/database/keyboard/k70mk2.json
+++ b/database/keyboard/k70mk2.json
@@ -1,4 +1,7 @@
{
+ "version": 1,
+ "uppercaseClass": "key-uppercase",
+ "fontSize": 14,
"key": "k70mk2-default",
"device": "K70 MK2",
"layout": "US",
diff --git a/database/keyboard/k70pro-eu.json b/database/keyboard/k70pro-eu.json
deleted file mode 100644
index a78d69e..0000000
--- a/database/keyboard/k70pro-eu.json
+++ /dev/null
@@ -1,1539 +0,0 @@
-{
- "key": "k70pro-default",
- "device": "K70 Pro RGB",
- "layout": "EU",
- "rows": 6,
- "row": {
- "0": {
- "keys": {
- "1": {
- "keyName": "icon-user.svg",
- "width": 65,
- "height": 40,
- "left": 0,
- "top": 0,
- "packetIndex": [384],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true
- },
- "2": {
- "keyName": "icon-brightness.svg",
- "width": 65,
- "height": 40,
- "left": 15,
- "top": 0,
- "packetIndex": [339],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true
- },
- "3": {
- "keyName": "icon-lock.svg",
- "width": 65,
- "height": 40,
- "left": 15,
- "top": 0,
- "packetIndex": [342],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true
- },
- "4": {
- "keyName": "Logo",
- "width": 404,
- "height": 40,
- "left": 400,
- "top": 0,
- "packetIndex": [411,414],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "5": {
- "keyName": "icon-mute.svg",
- "width": 65,
- "height": 40,
- "left": 515,
- "top": 0,
- "packetIndex": [306],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true
- }
- }
- },
- "1": {
- "keys": {
- "6": {
- "keyName": "ESC",
- "width": 65,
- "height": 70,
- "left": 0,
- "top": 50,
- "packetIndex": [123],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 0
- }
- },
- "7": {
- "keyName": "F1",
- "width": 65,
- "height": 70,
- "left": 95,
- "top": 50,
- "packetIndex": [174],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "8": {
- "keyName": "F2",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [177],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "9": {
- "keyName": "F3",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [180],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "10": {
- "keyName": "F4",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [183],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "11": {
- "keyName": "F5",
- "width": 65,
- "height": 70,
- "left": 55,
- "top": 50,
- "packetIndex": [186],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "12": {
- "keyName": "F6",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [189],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "13": {
- "keyName": "F7",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [192],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "14": {
- "keyName": "F8",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [195],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "15": {
- "keyName": "F9",
- "width": 65,
- "height": 70,
- "left": 60,
- "top": 50,
- "packetIndex": [198],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "16": {
- "keyName": "F10",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [201],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "17": {
- "keyName": "F11",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [204],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "18": {
- "keyName": "F12",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [207],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "19": {
- "keyName": "PrtSc",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 50,
- "packetIndex": [210],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "20": {
- "keyName": "ScrLk",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [213],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "21": {
- "keyName": "Pause",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [216],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "22": {
- "keyName": "icon-stop.svg",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 50,
- "packetIndex": [369],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true
- },
- "23": {
- "keyName": "icon-backward.svg",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [378],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true
- },
- "24": {
- "keyName": "icon-pause.svg",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [372],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true
- },
- "25": {
- "keyName": "icon-forward.svg",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 50,
- "packetIndex": [375],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- },
- "svg": true
- }
- }
- },
- "2": {
- "keys": {
- "26": {
- "keyName": "` ~",
- "width": 65,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [159],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "27": {
- "keyName": "1",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [90],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "28": {
- "keyName": "2",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [93],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "29": {
- "keyName": "3",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [96],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "30": {
- "keyName": "4",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [99],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "31": {
- "keyName": "5",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [102],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "32": {
- "keyName": "6",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [105],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "33": {
- "keyName": "7",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [108],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "34": {
- "keyName": "8",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [111],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "35": {
- "keyName": "9",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [114],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "36": {
- "keyName": "0",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [117],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "37": {
- "keyName": "-",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [135],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "38": {
- "keyName": "=",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [138],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "39": {
- "keyName": "<---",
- "width": 150,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [126],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "40": {
- "keyName": "Ins",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [219],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "41": {
- "keyName": "Home",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [222],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "42": {
- "keyName": "PgUp",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [225],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "43": {
- "keyName": "Num",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [249],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "44": {
- "keyName": "/",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [252],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "45": {
- "keyName": "*",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [255],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "46": {
- "keyName": "-",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [258],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "3": {
- "keys": {
- "47": {
- "keyName": "Tab",
- "width": 108,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [129],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "48": {
- "keyName": "Q",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [60],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "49": {
- "keyName": "W",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [78],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "50": {
- "keyName": "E",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [24],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "51": {
- "keyName": "R",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [63],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "52": {
- "keyName": "T",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [69],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "53": {
- "keyName": "Z",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [84],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "54": {
- "keyName": "U",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [72],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "55": {
- "keyName": "I",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [36],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "56": {
- "keyName": "O",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [54],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "57": {
- "keyName": "P",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [57],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "58": {
- "keyName": "[ {",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [141],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "59": {
- "keyName": "] }",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [144],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "60": {
- "keyName": "\\ |",
- "width": 107,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [147],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "61": {
- "keyName": "Del",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [228],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "62": {
- "keyName": "End",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [231],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "63": {
- "keyName": "PgDn",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [234],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "64": {
- "keyName": "7",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [285],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "65": {
- "keyName": "8",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [288],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "66": {
- "keyName": "9",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [291],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "67": {
- "keyName": "+",
- "width": 65,
- "height": 155,
- "left": 15,
- "top": 15,
- "packetIndex": [261],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "4": {
- "keys": {
- "68": {
- "keyName": "CAPS",
- "width": 131,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [171],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "69": {
- "keyName": "A",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [12],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "70": {
- "keyName": "S",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [66],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "71": {
- "keyName": "D",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [21],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "72": {
- "keyName": "F",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [27],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "73": {
- "keyName": "G",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [30],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "74": {
- "keyName": "H",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [33],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "75": {
- "keyName": "J",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [39],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "76": {
- "keyName": "K",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [42],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "77": {
- "keyName": "L",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [45],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "78": {
- "keyName": "; :",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [153],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "79": {
- "keyName": "' ''",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [156],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "80": {
- "keyName": "Enter",
- "width": 164,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [120],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "81": {
- "keyName": "4",
- "width": 65,
- "height": 70,
- "left": 275,
- "top": 15,
- "packetIndex": [276],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "82": {
- "keyName": "5",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [279],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "83": {
- "keyName": "6",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [282],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "5": {
- "keys": {
- "84": {
- "keyName": "Shift",
- "width": 170,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [318],
- "color": {
- "red": 255,
- "green": 255,
- "blue": 0
- }
- },
- "85": {
- "keyName": "Y",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [87],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "86": {
- "keyName": "X",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [81],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "87": {
- "keyName": "C",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [18],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "88": {
- "keyName": "V",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [75],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "89": {
- "keyName": "B",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [15],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "90": {
- "keyName": "N",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [51],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "91": {
- "keyName": "M",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [48],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "92": {
- "keyName": ", <",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [162],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "93": {
- "keyName": ". >",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [165],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "94": {
- "keyName": "/ ?",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [168],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "95": {
- "keyName": "Shift",
- "width": 205,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [330],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "96": {
- "keyName": "↑",
- "width": 65,
- "height": 70,
- "left": 105,
- "top": 15,
- "packetIndex": [246],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "97": {
- "keyName": "1",
- "width": 65,
- "height": 70,
- "left": 105,
- "top": 15,
- "packetIndex": [267],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "98": {
- "keyName": "2",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [270],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "99": {
- "keyName": "3",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [273],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "100": {
- "keyName": "Enter",
- "width": 65,
- "height": 155,
- "left": 15,
- "top": 15,
- "packetIndex": [264],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "6": {
- "keys": {
- "101": {
- "keyName": "Ctrl",
- "width": 90,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [315],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "102": {
- "keyName": "Win",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [324],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "103": {
- "keyName": "Alt",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [321],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "104": {
- "keyName": "",
- "width": 150,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [420],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "105": {
- "keyName": "----------",
- "width": 150,
- "height": 70,
- "left": 2,
- "top": 15,
- "packetIndex": [132],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "106": {
- "keyName": "",
- "width": 151,
- "height": 70,
- "left": 2,
- "top": 15,
- "packetIndex": [423],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "107": {
- "keyName": "Alt",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [333],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "108": {
- "keyName": "Fn",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [366],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "109": {
- "keyName": "Menu",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [303],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "110": {
- "keyName": "Ctrl",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [327],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "111": {
- "keyName": "←",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [240],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "112": {
- "keyName": "↓",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [243],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "113": {
- "keyName": "→",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [237],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "114": {
- "keyName": "0",
- "width": 145,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [294],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "115": {
- "keyName": ".",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [297],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/database/keyboard/k70pro.json b/database/keyboard/k70pro.json
index 30ffa0c..f3fada5 100644
--- a/database/keyboard/k70pro.json
+++ b/database/keyboard/k70pro.json
@@ -1,4 +1,7 @@
{
+ "version": 1,
+ "uppercaseClass": "key-uppercase",
+ "fontSize": 14,
"key": "k70pro-default",
"device": "K70 Pro RGB",
"layout": "US",
diff --git a/database/keyboard/k70protkl-eu.json b/database/keyboard/k70protkl-eu.json
deleted file mode 100644
index 56a7de6..0000000
--- a/database/keyboard/k70protkl-eu.json
+++ /dev/null
@@ -1,1151 +0,0 @@
-{
- "key": "k70protkl-default",
- "device": "K70 PRO TKL",
- "layout": "EU",
- "rows": 6,
- "row": {
- "0": {
- "keys": {
- "1": {
- "keyName": "ESC",
- "width": 65,
- "height": 70,
- "left": 0,
- "top": 0,
- "packetIndex": [123],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 0
- }
- },
- "2": {
- "keyName": "F1",
- "width": 65,
- "height": 70,
- "left": 95,
- "top": 0,
- "packetIndex": [174],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "3": {
- "keyName": "F2",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [177],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "4": {
- "keyName": "F3",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [180],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "5": {
- "keyName": "F4",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [183],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "6": {
- "keyName": "F5",
- "width": 65,
- "height": 70,
- "left": 55,
- "top": 0,
- "packetIndex": [186],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "7": {
- "keyName": "F6",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [189],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "8": {
- "keyName": "F7",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [192],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "9": {
- "keyName": "F8",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [195],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "10": {
- "keyName": "F9",
- "width": 65,
- "height": 70,
- "left": 60,
- "top": 0,
- "packetIndex": [198],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "11": {
- "keyName": "F10",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [201],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "12": {
- "keyName": "F11",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [204],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "13": {
- "keyName": "F12",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [207],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "14": {
- "keyName": "icon-speed.svg",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 0,
- "packetIndex": [390],
- "color": {
- "red": 255,
- "green": 255,
- "blue": 0
- },
- "svg": true
- },
- "15": {
- "keyName": "Profile",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 0,
- "packetIndex": [372],
- "color": {
- "red": 255,
- "green": 255,
- "blue": 0
- }
- }
- }
- },
- "1": {
- "keys": {
- "16": {
- "keyName": "` ~",
- "width": 65,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [159],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "17": {
- "keyName": "1",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [90],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "18": {
- "keyName": "2",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [93],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "19": {
- "keyName": "3",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [96],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "20": {
- "keyName": "4",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [99],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "21": {
- "keyName": "5",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [102],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "22": {
- "keyName": "6",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [105],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "23": {
- "keyName": "7",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [108],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "24": {
- "keyName": "8",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [111],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "25": {
- "keyName": "9",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [114],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "26": {
- "keyName": "0",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [117],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "27": {
- "keyName": "-",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [135],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "28": {
- "keyName": "=",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [138],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "29": {
- "keyName": "<---",
- "width": 150,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [126],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "30": {
- "keyName": "Ins",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [219],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "31": {
- "keyName": "Home",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [222],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "32": {
- "keyName": "PgUp",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [225],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "2": {
- "keys": {
- "33": {
- "keyName": "Tab",
- "width": 108,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [129],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "34": {
- "keyName": "Q",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [60],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "35": {
- "keyName": "W",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [78],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "36": {
- "keyName": "E",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [24],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "37": {
- "keyName": "R",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [63],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "38": {
- "keyName": "T",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [69],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "39": {
- "keyName": "Z",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [84],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "40": {
- "keyName": "U",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [72],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "41": {
- "keyName": "I",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [36],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "42": {
- "keyName": "O",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [54],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "43": {
- "keyName": "P",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [57],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "44": {
- "keyName": "[ {",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [141],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "45": {
- "keyName": "] }",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [144],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "46": {
- "keyName": "\\ |",
- "width": 107,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [147],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "47": {
- "keyName": "Del",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [228],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "48": {
- "keyName": "End",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [231],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "49": {
- "keyName": "PgDn",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [234],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "3": {
- "keys": {
- "50": {
- "keyName": "CAPS",
- "width": 131,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [171],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "51": {
- "keyName": "A",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [12],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "52": {
- "keyName": "S",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [66],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "53": {
- "keyName": "D",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [21],
- "color": {
- "red": 255,
- "green": 0,
- "blue": 0
- }
- },
- "54": {
- "keyName": "F",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [27],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "55": {
- "keyName": "G",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [30],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "56": {
- "keyName": "H",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [33],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "57": {
- "keyName": "J",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [39],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "58": {
- "keyName": "K",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [42],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "59": {
- "keyName": "L",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [45],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "60": {
- "keyName": "; :",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [153],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "61": {
- "keyName": "' ''",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [156],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "62": {
- "keyName": "Enter",
- "width": 164,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [120],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "4": {
- "keys": {
- "63": {
- "keyName": "Shift",
- "width": 170,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [318],
- "color": {
- "red": 255,
- "green": 255,
- "blue": 0
- }
- },
- "64": {
- "keyName": "Y",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [87],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "65": {
- "keyName": "X",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [81],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "66": {
- "keyName": "C",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [18],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "67": {
- "keyName": "V",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [75],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "68": {
- "keyName": "B",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [15],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "69": {
- "keyName": "N",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [51],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "70": {
- "keyName": "M",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [48],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "71": {
- "keyName": ", <",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [162],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "72": {
- "keyName": ". >",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [165],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "73": {
- "keyName": "/ ?",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [168],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "74": {
- "keyName": "Shift",
- "width": 205,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [330],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "75": {
- "keyName": "↑",
- "width": 65,
- "height": 70,
- "left": 105,
- "top": 15,
- "packetIndex": [246],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- },
- "5": {
- "keys": {
- "76": {
- "keyName": "Ctrl",
- "width": 90,
- "height": 70,
- "left": 0,
- "top": 15,
- "packetIndex": [315],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "77": {
- "keyName": "Win",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [324],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "78": {
- "keyName": "Alt",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [321],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "79": {
- "keyName": "----------",
- "width": 455,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [132],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "80": {
- "keyName": "Alt",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [333],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "81": {
- "keyName": "Fn",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [366],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "82": {
- "keyName": "Menu",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [303],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "83": {
- "keyName": "Ctrl",
- "width": 90,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [327],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "84": {
- "keyName": "←",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [240],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "85": {
- "keyName": "↓",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [243],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "86": {
- "keyName": "→",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [237],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/database/keyboard/k70protkl.json b/database/keyboard/k70protkl.json
index 78995de..fc88ddf 100644
--- a/database/keyboard/k70protkl.json
+++ b/database/keyboard/k70protkl.json
@@ -1,4 +1,7 @@
{
+ "version": 1,
+ "uppercaseClass": "key-uppercase",
+ "fontSize": 14,
"key": "k70protkl-default",
"device": "K70 PRO TKL",
"layout": "US",
diff --git a/database/keyboard/k70core-eu.json b/database/keyboard/k70rgbtklcs.json
similarity index 87%
rename from database/keyboard/k70core-eu.json
rename to database/keyboard/k70rgbtklcs.json
index 7f0ca9a..94c88b7 100644
--- a/database/keyboard/k70core-eu.json
+++ b/database/keyboard/k70rgbtklcs.json
@@ -1,17 +1,153 @@
{
- "key": "k70core-default",
- "device": "K70 Core RGB",
- "layout": "EU",
- "rows": 6,
+ "version": 1,
+ "uppercaseClass": "key-uppercase",
+ "fontSize": 14,
+ "key": "k70rgbtklcs-default",
+ "device": "K70 RGB TKL",
+ "layout": "US",
+ "rows": 7,
"row": {
"0": {
"keys": {
"1": {
+ "keyName": "icon-stop.svg",
+ "width": 65,
+ "height": 40,
+ "left": 0,
+ "top": 0,
+ "packetIndex": [369],
+ "color": {
+ "red": 0,
+ "green": 255,
+ "blue": 255
+ },
+ "svg": true
+ },
+ "2": {
+ "keyName": "icon-backward.svg",
+ "width": 65,
+ "height": 40,
+ "left": 15,
+ "top": 0,
+ "packetIndex": [378],
+ "color": {
+ "red": 0,
+ "green": 255,
+ "blue": 255
+ },
+ "svg": true
+ },
+ "3": {
+ "keyName": "icon-pause.svg",
+ "width": 65,
+ "height": 40,
+ "left": 15,
+ "top": 0,
+ "packetIndex": [372],
+ "color": {
+ "red": 0,
+ "green": 255,
+ "blue": 255
+ },
+ "svg": true
+ },
+ "4": {
+ "keyName": "icon-forward.svg",
+ "width": 65,
+ "height": 40,
+ "left": 15,
+ "top": 0,
+ "packetIndex": [375],
+ "color": {
+ "red": 0,
+ "green": 255,
+ "blue": 255
+ },
+ "svg": true
+ },
+ "5": {
+ "keyName": "LOGO",
+ "width": 404,
+ "height": 40,
+ "left": 400,
+ "top": 0,
+ "packetIndex": [3,9],
+ "color": {
+ "red": 0,
+ "green": 255,
+ "blue": 255
+ },
+ "spacing": [1,1,1],
+ "css": "keyboard-key wide4"
+ },
+ "6": {
+ "keyName": "icon-user.svg",
+ "width": 65,
+ "height": 40,
+ "left": 185,
+ "top": 0,
+ "packetIndex": [384],
+ "color": {
+ "red": 0,
+ "green": 255,
+ "blue": 255
+ },
+ "svg": true,
+ "spacing": [1]
+ },
+ "7": {
+ "keyName": "icon-brightness.svg",
+ "width": 65,
+ "height": 40,
+ "left": 15,
+ "top": 0,
+ "packetIndex": [339],
+ "color": {
+ "red": 0,
+ "green": 255,
+ "blue": 255
+ },
+ "svg": true
+ },
+ "8": {
+ "keyName": "icon-lock.svg",
+ "width": 65,
+ "height": 40,
+ "left": 15,
+ "top": 0,
+ "packetIndex": [342],
+ "color": {
+ "red": 0,
+ "green": 255,
+ "blue": 255
+ },
+ "svg": true
+ },
+ "9": {
+ "keyName": "icon-mute.svg",
+ "width": 65,
+ "height": 40,
+ "left": 25,
+ "top": 0,
+ "packetIndex": [306],
+ "color": {
+ "red": 0,
+ "green": 255,
+ "blue": 255
+ },
+ "svg": true,
+ "spacing": [1,1]
+ }
+ }
+ },
+ "1": {
+ "keys": {
+ "10": {
"keyName": "ESC",
"width": 65,
"height": 70,
"left": 0,
- "top": 0,
+ "top": 50,
"packetIndex": [123],
"color": {
"red": 0,
@@ -19,25 +155,26 @@
"blue": 0
}
},
- "2": {
+ "11": {
"keyName": "F1",
"width": 65,
"height": 70,
"left": 95,
- "top": 0,
+ "top": 50,
"packetIndex": [174],
"color": {
"red": 0,
"green": 255,
"blue": 255
- }
+ },
+ "spacing": [1]
},
- "3": {
+ "12": {
"keyName": "F2",
"width": 65,
"height": 70,
"left": 15,
- "top": 0,
+ "top": 50,
"packetIndex": [177],
"color": {
"red": 0,
@@ -45,12 +182,12 @@
"blue": 255
}
},
- "4": {
+ "13": {
"keyName": "F3",
"width": 65,
"height": 70,
"left": 15,
- "top": 0,
+ "top": 50,
"packetIndex": [180],
"color": {
"red": 0,
@@ -58,12 +195,12 @@
"blue": 255
}
},
- "5": {
+ "14": {
"keyName": "F4",
"width": 65,
"height": 70,
"left": 15,
- "top": 0,
+ "top": 50,
"packetIndex": [183],
"color": {
"red": 0,
@@ -71,25 +208,26 @@
"blue": 255
}
},
- "6": {
+ "15": {
"keyName": "F5",
"width": 65,
"height": 70,
"left": 55,
- "top": 0,
+ "top": 50,
"packetIndex": [186],
"color": {
"red": 0,
"green": 255,
"blue": 255
- }
+ },
+ "spacing": [1]
},
- "7": {
+ "16": {
"keyName": "F6",
"width": 65,
"height": 70,
"left": 15,
- "top": 0,
+ "top": 50,
"packetIndex": [189],
"color": {
"red": 0,
@@ -97,12 +235,12 @@
"blue": 255
}
},
- "8": {
+ "17": {
"keyName": "F7",
"width": 65,
"height": 70,
"left": 15,
- "top": 0,
+ "top": 50,
"packetIndex": [192],
"color": {
"red": 0,
@@ -110,12 +248,12 @@
"blue": 255
}
},
- "9": {
+ "18": {
"keyName": "F8",
"width": 65,
"height": 70,
"left": 15,
- "top": 0,
+ "top": 50,
"packetIndex": [195],
"color": {
"red": 0,
@@ -123,25 +261,26 @@
"blue": 255
}
},
- "10": {
+ "19": {
"keyName": "F9",
"width": 65,
"height": 70,
"left": 60,
- "top": 0,
+ "top": 50,
"packetIndex": [198],
"color": {
"red": 0,
"green": 255,
"blue": 255
- }
+ },
+ "spacing": [1]
},
- "11": {
+ "20": {
"keyName": "F10",
"width": 65,
"height": 70,
"left": 15,
- "top": 0,
+ "top": 50,
"packetIndex": [201],
"color": {
"red": 0,
@@ -149,12 +288,12 @@
"blue": 255
}
},
- "12": {
+ "21": {
"keyName": "F11",
"width": 65,
"height": 70,
"left": 15,
- "top": 0,
+ "top": 50,
"packetIndex": [204],
"color": {
"red": 0,
@@ -162,12 +301,12 @@
"blue": 255
}
},
- "13": {
+ "22": {
"keyName": "F12",
"width": 65,
"height": 70,
"left": 15,
- "top": 0,
+ "top": 50,
"packetIndex": [207],
"color": {
"red": 0,
@@ -175,25 +314,26 @@
"blue": 255
}
},
- "14": {
+ "23": {
"keyName": "PrtSc",
"width": 65,
"height": 70,
"left": 25,
- "top": 0,
+ "top": 50,
"packetIndex": [210],
"color": {
"red": 0,
"green": 255,
"blue": 255
- }
+ },
+ "spacing": [1]
},
- "15": {
+ "24": {
"keyName": "ScrLk",
"width": 65,
"height": 70,
"left": 15,
- "top": 0,
+ "top": 50,
"packetIndex": [213],
"color": {
"red": 0,
@@ -201,12 +341,12 @@
"blue": 255
}
},
- "16": {
+ "25": {
"keyName": "Pause",
"width": 65,
"height": 70,
"left": 15,
- "top": 0,
+ "top": 50,
"packetIndex": [216],
"color": {
"red": 0,
@@ -216,9 +356,9 @@
}
}
},
- "1": {
+ "2": {
"keys": {
- "17": {
+ "26": {
"keyName": "` ~",
"width": 65,
"height": 70,
@@ -231,7 +371,7 @@
"blue": 255
}
},
- "18": {
+ "27": {
"keyName": "1",
"width": 65,
"height": 70,
@@ -244,7 +384,7 @@
"blue": 255
}
},
- "19": {
+ "28": {
"keyName": "2",
"width": 65,
"height": 70,
@@ -257,7 +397,7 @@
"blue": 255
}
},
- "20": {
+ "29": {
"keyName": "3",
"width": 65,
"height": 70,
@@ -270,7 +410,7 @@
"blue": 255
}
},
- "21": {
+ "30": {
"keyName": "4",
"width": 65,
"height": 70,
@@ -283,7 +423,7 @@
"blue": 255
}
},
- "22": {
+ "31": {
"keyName": "5",
"width": 65,
"height": 70,
@@ -296,7 +436,7 @@
"blue": 255
}
},
- "23": {
+ "32": {
"keyName": "6",
"width": 65,
"height": 70,
@@ -309,7 +449,7 @@
"blue": 255
}
},
- "24": {
+ "33": {
"keyName": "7",
"width": 65,
"height": 70,
@@ -322,7 +462,7 @@
"blue": 255
}
},
- "25": {
+ "34": {
"keyName": "8",
"width": 65,
"height": 70,
@@ -335,7 +475,7 @@
"blue": 255
}
},
- "26": {
+ "35": {
"keyName": "9",
"width": 65,
"height": 70,
@@ -348,7 +488,7 @@
"blue": 255
}
},
- "27": {
+ "36": {
"keyName": "0",
"width": 65,
"height": 70,
@@ -361,7 +501,7 @@
"blue": 255
}
},
- "28": {
+ "37": {
"keyName": "-",
"width": 65,
"height": 70,
@@ -374,7 +514,7 @@
"blue": 255
}
},
- "29": {
+ "38": {
"keyName": "=",
"width": 65,
"height": 70,
@@ -387,7 +527,7 @@
"blue": 255
}
},
- "30": {
+ "39": {
"keyName": "<---",
"width": 150,
"height": 70,
@@ -398,9 +538,10 @@
"red": 0,
"green": 255,
"blue": 255
- }
+ },
+ "css": "keyboard-key wide3"
},
- "31": {
+ "40": {
"keyName": "Ins",
"width": 65,
"height": 70,
@@ -411,9 +552,10 @@
"red": 0,
"green": 255,
"blue": 255
- }
+ },
+ "spacing": [1]
},
- "32": {
+ "41": {
"keyName": "Home",
"width": 65,
"height": 70,
@@ -426,7 +568,7 @@
"blue": 255
}
},
- "33": {
+ "42": {
"keyName": "PgUp",
"width": 65,
"height": 70,
@@ -438,64 +580,12 @@
"green": 255,
"blue": 255
}
- },
- "34": {
- "keyName": "Num",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [249],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "35": {
- "keyName": "/",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [252],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "36": {
- "keyName": "*",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [255],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "37": {
- "keyName": "-",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [258],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
}
}
},
- "2": {
+ "3": {
"keys": {
- "38": {
+ "43": {
"keyName": "Tab",
"width": 108,
"height": 70,
@@ -506,9 +596,10 @@
"red": 0,
"green": 255,
"blue": 255
- }
+ },
+ "css": "keyboard-key wide"
},
- "39": {
+ "44": {
"keyName": "Q",
"width": 65,
"height": 70,
@@ -521,7 +612,7 @@
"blue": 0
}
},
- "40": {
+ "45": {
"keyName": "W",
"width": 65,
"height": 70,
@@ -534,7 +625,7 @@
"blue": 0
}
},
- "41": {
+ "46": {
"keyName": "E",
"width": 65,
"height": 70,
@@ -547,7 +638,7 @@
"blue": 0
}
},
- "42": {
+ "47": {
"keyName": "R",
"width": 65,
"height": 70,
@@ -560,7 +651,7 @@
"blue": 255
}
},
- "43": {
+ "48": {
"keyName": "T",
"width": 65,
"height": 70,
@@ -573,8 +664,8 @@
"blue": 255
}
},
- "44": {
- "keyName": "Z",
+ "49": {
+ "keyName": "Y",
"width": 65,
"height": 70,
"left": 15,
@@ -586,7 +677,7 @@
"blue": 255
}
},
- "45": {
+ "50": {
"keyName": "U",
"width": 65,
"height": 70,
@@ -599,7 +690,7 @@
"blue": 255
}
},
- "46": {
+ "51": {
"keyName": "I",
"width": 65,
"height": 70,
@@ -612,7 +703,7 @@
"blue": 255
}
},
- "47": {
+ "52": {
"keyName": "O",
"width": 65,
"height": 70,
@@ -625,7 +716,7 @@
"blue": 255
}
},
- "48": {
+ "53": {
"keyName": "P",
"width": 65,
"height": 70,
@@ -638,7 +729,7 @@
"blue": 255
}
},
- "49": {
+ "54": {
"keyName": "[ {",
"width": 65,
"height": 70,
@@ -651,7 +742,7 @@
"blue": 255
}
},
- "50": {
+ "55": {
"keyName": "] }",
"width": 65,
"height": 70,
@@ -664,7 +755,7 @@
"blue": 255
}
},
- "51": {
+ "56": {
"keyName": "\\ |",
"width": 107,
"height": 70,
@@ -675,9 +766,10 @@
"red": 0,
"green": 255,
"blue": 255
- }
+ },
+ "css": "keyboard-key wide"
},
- "52": {
+ "57": {
"keyName": "Del",
"width": 65,
"height": 70,
@@ -688,9 +780,10 @@
"red": 0,
"green": 255,
"blue": 255
- }
+ },
+ "spacing": [1]
},
- "53": {
+ "58": {
"keyName": "End",
"width": 65,
"height": 70,
@@ -703,7 +796,7 @@
"blue": 255
}
},
- "54": {
+ "59": {
"keyName": "PgDn",
"width": 65,
"height": 70,
@@ -715,64 +808,12 @@
"green": 255,
"blue": 255
}
- },
- "55": {
- "keyName": "7",
- "width": 65,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [285],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "56": {
- "keyName": "8",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [288],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "57": {
- "keyName": "9",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [291],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "58": {
- "keyName": "+",
- "width": 65,
- "height": 155,
- "left": 15,
- "top": 15,
- "packetIndex": [261],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
}
}
},
- "3": {
+ "4": {
"keys": {
- "59": {
+ "60": {
"keyName": "CAPS",
"width": 131,
"height": 70,
@@ -783,9 +824,10 @@
"red": 0,
"green": 255,
"blue": 255
- }
+ },
+ "css": "keyboard-key wide"
},
- "60": {
+ "61": {
"keyName": "A",
"width": 65,
"height": 70,
@@ -798,7 +840,7 @@
"blue": 0
}
},
- "61": {
+ "62": {
"keyName": "S",
"width": 65,
"height": 70,
@@ -811,7 +853,7 @@
"blue": 0
}
},
- "62": {
+ "63": {
"keyName": "D",
"width": 65,
"height": 70,
@@ -824,7 +866,7 @@
"blue": 0
}
},
- "63": {
+ "64": {
"keyName": "F",
"width": 65,
"height": 70,
@@ -837,7 +879,7 @@
"blue": 255
}
},
- "64": {
+ "65": {
"keyName": "G",
"width": 65,
"height": 70,
@@ -850,7 +892,7 @@
"blue": 255
}
},
- "65": {
+ "66": {
"keyName": "H",
"width": 65,
"height": 70,
@@ -863,7 +905,7 @@
"blue": 255
}
},
- "66": {
+ "67": {
"keyName": "J",
"width": 65,
"height": 70,
@@ -876,7 +918,7 @@
"blue": 255
}
},
- "67": {
+ "68": {
"keyName": "K",
"width": 65,
"height": 70,
@@ -889,7 +931,7 @@
"blue": 255
}
},
- "68": {
+ "69": {
"keyName": "L",
"width": 65,
"height": 70,
@@ -902,7 +944,7 @@
"blue": 255
}
},
- "69": {
+ "70": {
"keyName": "; :",
"width": 65,
"height": 70,
@@ -915,7 +957,7 @@
"blue": 255
}
},
- "70": {
+ "71": {
"keyName": "' ''",
"width": 65,
"height": 70,
@@ -928,7 +970,7 @@
"blue": 255
}
},
- "71": {
+ "72": {
"keyName": "Enter",
"width": 164,
"height": 70,
@@ -939,52 +981,14 @@
"red": 0,
"green": 255,
"blue": 255
- }
- },
- "72": {
- "keyName": "4",
- "width": 65,
- "height": 70,
- "left": 275,
- "top": 15,
- "packetIndex": [276],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "73": {
- "keyName": "5",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [279],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "74": {
- "keyName": "6",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [282],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
+ },
+ "css": "keyboard-key wide3"
}
}
},
- "4": {
+ "5": {
"keys": {
- "75": {
+ "73": {
"keyName": "Shift",
"width": 170,
"height": 70,
@@ -995,10 +999,11 @@
"red": 255,
"green": 255,
"blue": 0
- }
+ },
+ "css": "keyboard-key wide3"
},
- "76": {
- "keyName": "Y",
+ "74": {
+ "keyName": "Z",
"width": 65,
"height": 70,
"left": 15,
@@ -1010,7 +1015,7 @@
"blue": 255
}
},
- "77": {
+ "75": {
"keyName": "X",
"width": 65,
"height": 70,
@@ -1023,7 +1028,7 @@
"blue": 255
}
},
- "78": {
+ "76": {
"keyName": "C",
"width": 65,
"height": 70,
@@ -1036,7 +1041,7 @@
"blue": 255
}
},
- "79": {
+ "77": {
"keyName": "V",
"width": 65,
"height": 70,
@@ -1049,7 +1054,7 @@
"blue": 255
}
},
- "80": {
+ "78": {
"keyName": "B",
"width": 65,
"height": 70,
@@ -1062,7 +1067,7 @@
"blue": 255
}
},
- "81": {
+ "79": {
"keyName": "N",
"width": 65,
"height": 70,
@@ -1075,7 +1080,7 @@
"blue": 255
}
},
- "82": {
+ "80": {
"keyName": "M",
"width": 65,
"height": 70,
@@ -1088,7 +1093,7 @@
"blue": 255
}
},
- "83": {
+ "81": {
"keyName": ", <",
"width": 65,
"height": 70,
@@ -1101,7 +1106,7 @@
"blue": 255
}
},
- "84": {
+ "82": {
"keyName": ". >",
"width": 65,
"height": 70,
@@ -1114,7 +1119,7 @@
"blue": 255
}
},
- "85": {
+ "83": {
"keyName": "/ ?",
"width": 65,
"height": 70,
@@ -1127,7 +1132,7 @@
"blue": 255
}
},
- "86": {
+ "84": {
"keyName": "Shift",
"width": 205,
"height": 70,
@@ -1138,9 +1143,10 @@
"red": 0,
"green": 255,
"blue": 255
- }
+ },
+ "css": "keyboard-key wide3"
},
- "87": {
+ "85": {
"keyName": "↑",
"width": 65,
"height": 70,
@@ -1151,65 +1157,14 @@
"red": 0,
"green": 255,
"blue": 255
- }
- },
- "88": {
- "keyName": "1",
- "width": 65,
- "height": 70,
- "left": 105,
- "top": 15,
- "packetIndex": [267],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "89": {
- "keyName": "2",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [270],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "90": {
- "keyName": "3",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [273],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "91": {
- "keyName": "Enter",
- "width": 65,
- "height": 155,
- "left": 15,
- "top": 15,
- "packetIndex": [264],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
+ },
+ "spacing": [1,1]
}
}
},
- "5": {
+ "6": {
"keys": {
- "92": {
+ "86": {
"keyName": "Ctrl",
"width": 90,
"height": 70,
@@ -1220,9 +1175,10 @@
"red": 0,
"green": 255,
"blue": 255
- }
+ },
+ "css": "keyboard-key wide"
},
- "93": {
+ "87": {
"keyName": "Win",
"width": 90,
"height": 70,
@@ -1235,7 +1191,7 @@
"blue": 255
}
},
- "94": {
+ "88": {
"keyName": "Alt",
"width": 90,
"height": 70,
@@ -1246,9 +1202,10 @@
"red": 0,
"green": 255,
"blue": 255
- }
+ },
+ "css": "keyboard-key wide"
},
- "95": {
+ "89": {
"keyName": "----------",
"width": 455,
"height": 70,
@@ -1259,9 +1216,10 @@
"red": 0,
"green": 255,
"blue": 255
- }
+ },
+ "css": "keyboard-key wide7"
},
- "96": {
+ "90": {
"keyName": "Alt",
"width": 90,
"height": 70,
@@ -1274,7 +1232,7 @@
"blue": 255
}
},
- "97": {
+ "91": {
"keyName": "Fn",
"width": 90,
"height": 70,
@@ -1287,7 +1245,7 @@
"blue": 255
}
},
- "98": {
+ "92": {
"keyName": "Menu",
"width": 90,
"height": 70,
@@ -1300,7 +1258,7 @@
"blue": 255
}
},
- "99": {
+ "93": {
"keyName": "Ctrl",
"width": 90,
"height": 70,
@@ -1313,7 +1271,7 @@
"blue": 255
}
},
- "100": {
+ "94": {
"keyName": "←",
"width": 65,
"height": 70,
@@ -1324,9 +1282,10 @@
"red": 0,
"green": 255,
"blue": 255
- }
+ },
+ "spacing": [1]
},
- "101": {
+ "95": {
"keyName": "↓",
"width": 65,
"height": 70,
@@ -1339,7 +1298,7 @@
"blue": 255
}
},
- "102": {
+ "96": {
"keyName": "→",
"width": 65,
"height": 70,
@@ -1351,32 +1310,6 @@
"green": 255,
"blue": 255
}
- },
- "103": {
- "keyName": "0",
- "width": 145,
- "height": 70,
- "left": 25,
- "top": 15,
- "packetIndex": [294],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
- },
- "104": {
- "keyName": ".",
- "width": 65,
- "height": 70,
- "left": 15,
- "top": 15,
- "packetIndex": [297],
- "color": {
- "red": 0,
- "green": 255,
- "blue": 255
- }
}
}
}
diff --git a/database/macros/.gitkeep b/database/macros/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/devices/devices.go b/src/devices/devices.go
index aef0256..f2cb677 100644
--- a/src/devices/devices.go
+++ b/src/devices/devices.go
@@ -33,6 +33,7 @@ import (
"OpenLinkHub/src/devices/k70mk2"
"OpenLinkHub/src/devices/k70pro"
"OpenLinkHub/src/devices/k70protkl"
+ "OpenLinkHub/src/devices/k70rgbtklcs"
"OpenLinkHub/src/devices/katarpro"
"OpenLinkHub/src/devices/katarproW"
"OpenLinkHub/src/devices/katarproxt"
@@ -96,6 +97,7 @@ const (
productTypeK70CoreTklWU = 112
productTypeK70CoreTklW = 113
productTypeK70ProTkl = 114
+ productTypeK70RgbTkl = 115
productTypeKatarPro = 201
productTypeIronClawRgb = 202
productTypeIronClawRgbW = 203
@@ -159,7 +161,7 @@ var (
interfaceId = 0
devices = make(map[string]*Device, 0)
products = make(map[string]Product, 0)
- keyboards = []uint16{7127, 7165, 7166, 7110, 7083, 11024, 11015, 7109, 7091, 7036, 7037, 6985, 6997, 7019, 11009, 11010, 11028}
+ keyboards = []uint16{7127, 7165, 7166, 7110, 7083, 11024, 11015, 7109, 7091, 7036, 7037, 6985, 6997, 7019, 11009, 11010, 11028, 7097, 7027}
mouses = []uint16{7059, 7005, 6988, 7096, 7139, 7131, 11011, 7024, 7038, 7040, 7152, 7154, 7070, 7029, 7006, 7084, 7090}
pads = []uint16{7067}
headsets = []uint16{2658, 2660}
@@ -1528,6 +1530,23 @@ func Init() {
}
}(vendorId, productId, key)
}
+ case 7097, 7027: // K70 RGB TKL
+ {
+ go func(vendorId, productId uint16, key string) {
+ dev := k70rgbtklcs.Init(vendorId, productId, key)
+ if dev == nil {
+ return
+ }
+ devices[dev.Serial] = &Device{
+ ProductType: productTypeK70RgbTkl,
+ Product: dev.Product,
+ Serial: dev.Serial,
+ Firmware: dev.Firmware,
+ Image: "icon-keyboard.svg",
+ Instance: dev,
+ }
+ }(vendorId, productId, key)
+ }
case 7166: // K55 CORE RGB
{
go func(vendorId, productId uint16, key string) {
diff --git a/src/devices/k65pm/k65pm.go b/src/devices/k65pm/k65pm.go
index afbec9c..72620e3 100644
--- a/src/devices/k65pm/k65pm.go
+++ b/src/devices/k65pm/k65pm.go
@@ -372,6 +372,26 @@ func (d *Device) saveDeviceProfile() {
deviceProfile.Layout = d.DeviceProfile.Layout
}
+ // Upgrade process
+ if d.DeviceProfile.Keyboards["default"].Version != keyboards.GetKeyboard(defaultLayout).Version {
+ logger.Log(
+ logger.Fields{
+ "current": d.DeviceProfile.Keyboards["default"].Version,
+ "expected": keyboards.GetKeyboard(defaultLayout).Version,
+ "serial": d.Serial,
+ },
+ ).Info("Upgrading keyboard profile version")
+ d.DeviceProfile.Keyboards["default"] = keyboards.GetKeyboard(defaultLayout)
+ } else {
+ logger.Log(
+ logger.Fields{
+ "current": d.DeviceProfile.Keyboards["default"].Version,
+ "expected": keyboards.GetKeyboard(defaultLayout).Version,
+ "serial": d.Serial,
+ },
+ ).Info("Keyboard profile version is OK")
+ }
+
deviceProfile.Active = d.DeviceProfile.Active
deviceProfile.OriginalBrightness = d.DeviceProfile.OriginalBrightness
deviceProfile.Brightness = d.DeviceProfile.Brightness
diff --git a/src/devices/k70rgbtklcs/k70rgbtklcs.go b/src/devices/k70rgbtklcs/k70rgbtklcs.go
new file mode 100644
index 0000000..6ba0a8d
--- /dev/null
+++ b/src/devices/k70rgbtklcs/k70rgbtklcs.go
@@ -0,0 +1,1324 @@
+package k70rgbtklcs
+
+// Package: CORSAIR K70 RGB TKL CHAMPION SERIES
+// This is the primary package for CORSAIR K70 RGB TKL CHAMPION SERIES.
+// All device actions are controlled from this package.
+// Author: Nikola Jurkovic
+// License: GPL-3.0 or later
+
+import (
+ "OpenLinkHub/src/common"
+ "OpenLinkHub/src/config"
+ "OpenLinkHub/src/keyboards"
+ "OpenLinkHub/src/logger"
+ "OpenLinkHub/src/rgb"
+ "OpenLinkHub/src/temperatures"
+ "encoding/binary"
+ "encoding/json"
+ "fmt"
+ "github.com/sstallion/go-hid"
+ "os"
+ "regexp"
+ "slices"
+ "strings"
+ "sync"
+ "time"
+)
+
+// DeviceProfile struct contains all device profile
+type DeviceProfile struct {
+ Active bool
+ Path string
+ Product string
+ Serial string
+ LCDMode uint8
+ LCDRotation uint8
+ Brightness uint8
+ RGBProfile string
+ Label string
+ Layout string
+ Keyboards map[string]*keyboards.Keyboard
+ Profile string
+ BrightnessLevel uint16
+ Profiles []string
+}
+
+type Device struct {
+ Debug bool
+ dev *hid.Device
+ listener *hid.Device
+ Manufacturer string `json:"manufacturer"`
+ Product string `json:"product"`
+ Serial string `json:"serial"`
+ Firmware string `json:"firmware"`
+ activeRgb *rgb.ActiveRGB
+ UserProfiles map[string]*DeviceProfile `json:"userProfiles"`
+ Devices map[int]string `json:"devices"`
+ DeviceProfile *DeviceProfile
+ OriginalProfile *DeviceProfile
+ Template string
+ VendorId uint16
+ ProductId uint16
+ Brightness map[int]string
+ LEDChannels int
+ CpuTemp float32
+ GpuTemp float32
+ Layouts []string
+ Rgb *rgb.RGB
+ Exit bool
+ timer *time.Ticker
+ timerKeepAlive *time.Ticker
+ autoRefreshChan chan struct{}
+ keepAliveChan chan struct{}
+ mutex sync.Mutex
+ UIKeyboard string
+ UIKeyboardRow string
+}
+
+var (
+ pwd = ""
+ cmdSoftwareMode = []byte{0x01, 0x03, 0x00, 0x02}
+ cmdHardwareMode = []byte{0x01, 0x03, 0x00, 0x01}
+ cmdActivateLed = []byte{0x0d, 0x01, 0x22}
+ cmdBrightness = []byte{0x01, 0x02, 0x00}
+ cmdGetFirmware = []byte{0x02, 0x13}
+ dataTypeSetColor = []byte{0x12, 0x00}
+ dataTypeSubColor = []byte{0x07, 0x00}
+ cmdWriteColor = []byte{0x06, 0x01}
+ cmdKeepAlive = []byte{0x12}
+ deviceRefreshInterval = 1000
+ deviceKeepAlive = 20000
+ transferTimeout = 500
+ bufferSize = 1024
+ bufferSizeWrite = bufferSize + 1
+ headerSize = 2
+ headerWriteSize = 4
+ maxBufferSizePerRequest = 1021
+ colorPacketLength = 389
+ keyboardKey = "k70rgbtklcs-default"
+ defaultLayout = "k70rgbtklcs-default-US"
+)
+
+func Init(vendorId, productId uint16, key string) *Device {
+ // Set global working directory
+ pwd = config.GetConfig().ConfigPath
+
+ dev, err := hid.OpenPath(key)
+ if err != nil {
+ logger.Log(logger.Fields{"error": err, "vendorId": vendorId, "productId": productId}).Error("Unable to open HID device")
+ return nil
+ }
+
+ // Init new struct with HID device
+ d := &Device{
+ dev: dev,
+ Template: "k70rgbtklcs.html",
+ VendorId: vendorId,
+ ProductId: productId,
+ Brightness: map[int]string{
+ 0: "RGB Profile",
+ 1: "33 %",
+ 2: "66 %",
+ 3: "100 %",
+ },
+ Product: "K70 RGB TKL CS",
+ LEDChannels: 130,
+ Layouts: keyboards.GetLayouts(keyboardKey),
+ autoRefreshChan: make(chan struct{}),
+ keepAliveChan: make(chan struct{}),
+ UIKeyboard: "keyboard-7",
+ UIKeyboardRow: "keyboard-row-20",
+ }
+
+ d.getDebugMode() // Debug mode
+ d.getManufacturer() // Manufacturer
+ d.getSerial() // Serial
+ d.loadRgb() // Load RGB
+ d.setSoftwareMode() // Activate software mode
+ d.initLeds() // Init LED ports
+ d.getDeviceFirmware() // Firmware
+ d.loadDeviceProfiles() // Load all device profiles
+ d.saveDeviceProfile() // Save profile
+ d.setAutoRefresh() // Set auto device refresh
+ d.setKeepAlive() // Keepalive
+ d.setDeviceColor() // Device color
+ d.setBrightnessLevel() // Brightness
+ d.controlListener() // Control listener
+ logger.Log(logger.Fields{"serial": d.Serial, "product": d.Product}).Info("Device successfully initialized")
+ return d
+}
+
+// GetRgbProfiles will return RGB profiles for a target device
+func (d *Device) GetRgbProfiles() interface{} {
+ return d.Rgb
+}
+
+// Stop will stop all device operations and switch a device back to hardware mode
+func (d *Device) Stop() {
+ d.Exit = true
+ logger.Log(logger.Fields{"serial": d.Serial, "product": d.Product}).Info("Stopping device...")
+ if d.activeRgb != nil {
+ d.activeRgb.Stop()
+ }
+
+ d.timer.Stop()
+ d.timerKeepAlive.Stop()
+ var once sync.Once
+ go func() {
+ once.Do(func() {
+ if d.autoRefreshChan != nil {
+ close(d.autoRefreshChan)
+ }
+ close(d.keepAliveChan)
+ })
+ }()
+
+ d.setHardwareMode()
+ if d.dev != nil {
+ err := d.dev.Close()
+ if err != nil {
+ logger.Log(logger.Fields{"error": err}).Error("Unable to close HID device")
+ }
+ }
+ logger.Log(logger.Fields{"serial": d.Serial, "product": d.Product}).Info("Device stopped")
+}
+
+// loadRgb will load RGB file if found, or create the default.
+func (d *Device) loadRgb() {
+ rgbDirectory := pwd + "/database/rgb/"
+ rgbFilename := rgbDirectory + d.Serial + ".json"
+
+ // Check if filename has .json extension
+ if !common.IsValidExtension(rgbFilename, ".json") {
+ return
+ }
+
+ if !common.FileExists(rgbFilename) {
+ profile := rgb.GetRGB()
+ profile.Device = d.Product
+
+ // Convert to JSON
+ buffer, err := json.MarshalIndent(profile, "", " ")
+ if err != nil {
+ logger.Log(logger.Fields{"error": err, "serial": d.Serial, "location": rgbFilename}).Warn("Unable to encode RGB json")
+ return
+ }
+
+ // Create profile filename
+ file, err := os.Create(rgbFilename)
+ if err != nil {
+ logger.Log(logger.Fields{"error": err, "serial": d.Serial, "location": rgbFilename}).Warn("Unable to create RGB json file")
+ return
+ }
+
+ // Write JSON buffer to file
+ _, err = file.Write(buffer)
+ if err != nil {
+ logger.Log(logger.Fields{"error": err, "serial": d.Serial, "location": rgbFilename}).Warn("Unable to write to RGB json file")
+ return
+ }
+
+ // Close file
+ err = file.Close()
+ if err != nil {
+ logger.Log(logger.Fields{"error": err, "serial": d.Serial, "location": rgbFilename}).Warn("Unable to close RGB json file")
+ return
+ }
+ }
+
+ file, err := os.Open(rgbFilename)
+ if err != nil {
+ logger.Log(logger.Fields{"error": err, "serial": d.Serial, "location": rgbFilename}).Warn("Unable to load RGB")
+ return
+ }
+ if err = json.NewDecoder(file).Decode(&d.Rgb); err != nil {
+ logger.Log(logger.Fields{"error": err, "serial": d.Serial, "location": rgbFilename}).Warn("Unable to decode profile")
+ return
+ }
+ err = file.Close()
+ if err != nil {
+ logger.Log(logger.Fields{"location": rgbFilename, "serial": d.Serial}).Warn("Failed to close file handle")
+ }
+}
+
+// GetRgbProfile will return rgb.Profile struct
+func (d *Device) GetRgbProfile(profile string) *rgb.Profile {
+ if d.Rgb == nil {
+ return nil
+ }
+
+ if val, ok := d.Rgb.Profiles[profile]; ok {
+ return &val
+ }
+ return nil
+}
+
+// GetDeviceTemplate will return device template name
+func (d *Device) GetDeviceTemplate() string {
+ return d.Template
+}
+
+// getManufacturer will return device manufacturer
+func (d *Device) getDebugMode() {
+ d.Debug = config.GetConfig().Debug
+}
+
+// getManufacturer will return device manufacturer
+func (d *Device) getManufacturer() {
+ manufacturer, err := d.dev.GetMfrStr()
+ if err != nil {
+ logger.Log(logger.Fields{"error": err}).Fatal("Unable to get manufacturer")
+ }
+ d.Manufacturer = manufacturer
+}
+
+// getProduct will return device name
+func (d *Device) getProduct() {
+ product, err := d.dev.GetProductStr()
+ if err != nil {
+ logger.Log(logger.Fields{"error": err}).Fatal("Unable to get product")
+ }
+ d.Product = product
+}
+
+// getSerial will return device serial number
+func (d *Device) getSerial() {
+ serial, err := d.dev.GetSerialNbr()
+ if err != nil {
+ logger.Log(logger.Fields{"error": err}).Fatal("Unable to get device serial number")
+ }
+ d.Serial = serial
+}
+
+// setHardwareMode will switch a device to hardware mode
+func (d *Device) setHardwareMode() {
+ _, err := d.transfer(cmdHardwareMode, nil)
+ if err != nil {
+ logger.Log(logger.Fields{"error": err}).Fatal("Unable to change device mode")
+ }
+}
+
+// setSoftwareMode will switch a device to software mode
+func (d *Device) setSoftwareMode() {
+ _, err := d.transfer(cmdSoftwareMode, nil)
+ if err != nil {
+ logger.Log(logger.Fields{"error": err}).Fatal("Unable to change device mode")
+ }
+}
+
+// getDeviceFirmware will return a device firmware version out as string
+func (d *Device) getDeviceFirmware() {
+ fw, err := d.transfer(
+ cmdGetFirmware,
+ nil,
+ )
+ if err != nil {
+ logger.Log(logger.Fields{"error": err}).Fatal("Unable to write to a device")
+ }
+
+ v1, v2, v3 := int(fw[3]), int(fw[4]), int(binary.LittleEndian.Uint16(fw[5:7]))
+ d.Firmware = fmt.Sprintf("%d.%d.%d", v1, v2, v3)
+}
+
+// initLeds will initialize LED ports
+func (d *Device) initLeds() {
+ _, err := d.transfer(cmdActivateLed, nil)
+ if err != nil {
+ logger.Log(logger.Fields{"error": err}).Fatal("Unable to change device mode")
+ }
+ // We need to wait around 500 ms for physical ports to re-initialize
+ // After that we can grab any new connected / disconnected device values
+ time.Sleep(time.Duration(transferTimeout) * time.Millisecond)
+}
+
+// saveDeviceProfile will save device profile for persistent configuration
+func (d *Device) saveDeviceProfile() {
+ profilePath := pwd + "/database/profiles/" + d.Serial + ".json"
+ keyboardMap := make(map[string]*keyboards.Keyboard, 0)
+
+ deviceProfile := &DeviceProfile{
+ Product: d.Product,
+ Serial: d.Serial,
+ Path: profilePath,
+ }
+
+ // First save, assign saved profile to a device
+ if d.DeviceProfile == nil {
+ // RGB, Label
+ deviceProfile.RGBProfile = "keyboard"
+ deviceProfile.Label = "Keyboard"
+ deviceProfile.Active = true
+ keyboardMap["default"] = keyboards.GetKeyboard(defaultLayout)
+ deviceProfile.Keyboards = keyboardMap
+ deviceProfile.Profile = "default"
+ deviceProfile.Profiles = []string{"default"}
+ deviceProfile.BrightnessLevel = 1000
+ deviceProfile.Layout = "US"
+ } else {
+ if len(d.DeviceProfile.Layout) == 0 {
+ deviceProfile.Layout = "US"
+ } else {
+ deviceProfile.Layout = d.DeviceProfile.Layout
+ }
+
+ // Upgrade process
+ if d.DeviceProfile.Keyboards["default"].Version != keyboards.GetKeyboard(defaultLayout).Version {
+ logger.Log(
+ logger.Fields{
+ "current": d.DeviceProfile.Keyboards["default"].Version,
+ "expected": keyboards.GetKeyboard(defaultLayout).Version,
+ "serial": d.Serial,
+ },
+ ).Info("Upgrading keyboard profile version")
+ d.DeviceProfile.Keyboards["default"] = keyboards.GetKeyboard(defaultLayout)
+ } else {
+ logger.Log(
+ logger.Fields{
+ "current": d.DeviceProfile.Keyboards["default"].Version,
+ "expected": keyboards.GetKeyboard(defaultLayout).Version,
+ "serial": d.Serial,
+ },
+ ).Info("Keyboard profile version is OK")
+ }
+ deviceProfile.Active = d.DeviceProfile.Active
+ deviceProfile.Brightness = d.DeviceProfile.Brightness
+ deviceProfile.RGBProfile = d.DeviceProfile.RGBProfile
+ deviceProfile.Label = d.DeviceProfile.Label
+ deviceProfile.Profile = d.DeviceProfile.Profile
+ deviceProfile.Profiles = d.DeviceProfile.Profiles
+ deviceProfile.Keyboards = d.DeviceProfile.Keyboards
+ deviceProfile.BrightnessLevel = d.DeviceProfile.BrightnessLevel
+ if len(d.DeviceProfile.Path) < 1 {
+ deviceProfile.Path = profilePath
+ d.DeviceProfile.Path = profilePath
+ } else {
+ deviceProfile.Path = d.DeviceProfile.Path
+ }
+ deviceProfile.LCDMode = d.DeviceProfile.LCDMode
+ deviceProfile.LCDRotation = d.DeviceProfile.LCDRotation
+ }
+
+ // Convert to JSON
+ buffer, err := json.MarshalIndent(deviceProfile, "", " ")
+ if err != nil {
+ logger.Log(logger.Fields{"error": err}).Error("Unable to convert to json format")
+ return
+ }
+
+ // Create profile filename
+ file, fileErr := os.Create(deviceProfile.Path)
+ if fileErr != nil {
+ logger.Log(logger.Fields{"error": err, "location": deviceProfile.Path}).Error("Unable to create new device profile")
+ return
+ }
+
+ // Write JSON buffer to file
+ _, err = file.Write(buffer)
+ if err != nil {
+ logger.Log(logger.Fields{"error": err, "location": deviceProfile.Path}).Error("Unable to write data")
+ return
+ }
+
+ // Close file
+ err = file.Close()
+ if err != nil {
+ logger.Log(logger.Fields{"error": err, "location": deviceProfile.Path}).Fatal("Unable to close file handle")
+ }
+
+ d.loadDeviceProfiles() // Reload
+}
+
+// loadDeviceProfiles will load custom user profiles
+func (d *Device) loadDeviceProfiles() {
+ profileList := make(map[string]*DeviceProfile, 0)
+ userProfileDirectory := pwd + "/database/profiles/"
+
+ files, err := os.ReadDir(userProfileDirectory)
+ if err != nil {
+ logger.Log(logger.Fields{"error": err, "location": userProfileDirectory, "serial": d.Serial}).Fatal("Unable to read content of a folder")
+ }
+
+ for _, fi := range files {
+ pf := &DeviceProfile{}
+ if fi.IsDir() {
+ continue // Exclude folders if any
+ }
+
+ // Define a full path of filename
+ profileLocation := userProfileDirectory + fi.Name()
+
+ // Check if filename has .json extension
+ if !common.IsValidExtension(profileLocation, ".json") {
+ continue
+ }
+
+ fileName := strings.Split(fi.Name(), ".")[0]
+ if m, _ := regexp.MatchString("^[a-zA-Z0-9-]+$", fileName); !m {
+ continue
+ }
+
+ fileSerial := ""
+ if strings.Contains(fileName, "-") {
+ fileSerial = strings.Split(fileName, "-")[0]
+ } else {
+ fileSerial = fileName
+ }
+
+ if fileSerial != d.Serial {
+ continue
+ }
+
+ file, err := os.Open(profileLocation)
+ if err != nil {
+ logger.Log(logger.Fields{"error": err, "serial": d.Serial, "location": profileLocation}).Warn("Unable to load profile")
+ continue
+ }
+ if err = json.NewDecoder(file).Decode(pf); err != nil {
+ logger.Log(logger.Fields{"error": err, "serial": d.Serial, "location": profileLocation}).Warn("Unable to decode profile")
+ continue
+ }
+ err = file.Close()
+ if err != nil {
+ logger.Log(logger.Fields{"location": profileLocation, "serial": d.Serial}).Warn("Failed to close file handle")
+ }
+ if pf.Serial == d.Serial {
+ if fileName == d.Serial {
+ profileList["default"] = pf
+ } else {
+ name := strings.Split(fileName, "-")[1]
+ profileList[name] = pf
+ }
+ logger.Log(logger.Fields{"location": profileLocation, "serial": d.Serial}).Info("Loaded custom user profile")
+ }
+ }
+ d.UserProfiles = profileList
+ d.getDeviceProfile()
+}
+
+// getDeviceProfile will load persistent device configuration
+func (d *Device) getDeviceProfile() {
+ if len(d.UserProfiles) == 0 {
+ logger.Log(logger.Fields{"serial": d.Serial}).Warn("No profile found for device. Probably initial start")
+ } else {
+ for _, pf := range d.UserProfiles {
+ if pf.Active {
+ d.DeviceProfile = pf
+ }
+ }
+ }
+}
+
+// keepAlive will keep a device alive
+func (d *Device) keepAlive() {
+ if d.Exit {
+ return
+ }
+ _, err := d.transfer(cmdKeepAlive, nil)
+ if err != nil {
+ logger.Log(logger.Fields{"error": err, "serial": d.Serial}).Error("Unable to write to a device")
+ }
+}
+
+// setAutoRefresh will refresh device data
+func (d *Device) setKeepAlive() {
+ d.timerKeepAlive = time.NewTicker(time.Duration(deviceKeepAlive) * time.Millisecond)
+ go func() {
+ for {
+ select {
+ case <-d.timerKeepAlive.C:
+ d.keepAlive()
+ case <-d.keepAliveChan:
+ d.timerKeepAlive.Stop()
+ return
+ }
+ }
+ }()
+}
+
+// setAutoRefresh will refresh device data
+func (d *Device) setAutoRefresh() {
+ d.timer = time.NewTicker(time.Duration(deviceRefreshInterval) * time.Millisecond)
+ go func() {
+ for {
+ select {
+ case <-d.timer.C:
+ if d.Exit {
+ return
+ }
+ d.setTemperatures()
+ case <-d.autoRefreshChan:
+ d.timer.Stop()
+ return
+ }
+ }
+ }()
+}
+
+// setCpuTemperature will store current CPU temperature
+func (d *Device) setTemperatures() {
+ d.CpuTemp = temperatures.GetCpuTemperature()
+ d.GpuTemp = temperatures.GetGpuTemperature()
+}
+
+// UpdateDeviceLabel will set / update device label
+func (d *Device) UpdateDeviceLabel(_ int, label string) uint8 {
+ d.mutex.Lock()
+ defer d.mutex.Unlock()
+
+ d.DeviceProfile.Label = label
+ d.saveDeviceProfile()
+ return 1
+}
+
+// saveRgbProfile will save rgb profile data
+func (d *Device) saveRgbProfile() {
+ rgbDirectory := pwd + "/database/rgb/"
+ rgbFilename := rgbDirectory + d.Serial + ".json"
+ if common.FileExists(rgbFilename) {
+ buffer, err := json.MarshalIndent(d.Rgb, "", " ")
+ if err != nil {
+ logger.Log(logger.Fields{"error": err, "serial": d.Serial, "location": rgbFilename}).Warn("Unable to encode RGB json")
+ return
+ }
+
+ // Create profile filename
+ file, err := os.Create(rgbFilename)
+ if err != nil {
+ logger.Log(logger.Fields{"error": err, "serial": d.Serial, "location": rgbFilename}).Warn("Unable to create RGB json file")
+ return
+ }
+
+ // Write JSON buffer to file
+ _, err = file.Write(buffer)
+ if err != nil {
+ logger.Log(logger.Fields{"error": err, "serial": d.Serial, "location": rgbFilename}).Warn("Unable to write to RGB json file")
+ return
+ }
+
+ // Close file
+ err = file.Close()
+ if err != nil {
+ logger.Log(logger.Fields{"error": err, "serial": d.Serial, "location": rgbFilename}).Warn("Unable to close RGB json file")
+ return
+ }
+ }
+}
+
+// UpdateRgbProfileData will update RGB profile data
+func (d *Device) UpdateRgbProfileData(profileName string, profile rgb.Profile) uint8 {
+ if d.GetRgbProfile(profileName) == nil {
+ logger.Log(logger.Fields{"serial": d.Serial, "profile": profile}).Warn("Non-existing RGB profile")
+ return 0
+ }
+
+ pf := d.GetRgbProfile(profileName)
+ profile.StartColor.Brightness = pf.StartColor.Brightness
+ profile.EndColor.Brightness = pf.EndColor.Brightness
+ pf.StartColor = profile.StartColor
+ pf.EndColor = profile.EndColor
+ pf.Speed = profile.Speed
+
+ d.Rgb.Profiles[profileName] = *pf
+ d.saveRgbProfile()
+ if d.activeRgb != nil {
+ d.activeRgb.Exit <- true // Exit current RGB mode
+ d.activeRgb = nil
+ }
+ d.setDeviceColor() // Restart RGB
+ return 1
+}
+
+// UpdateRgbProfile will update device RGB profile
+func (d *Device) UpdateRgbProfile(_ int, profile string) uint8 {
+ if d.GetRgbProfile(profile) == nil {
+ logger.Log(logger.Fields{"serial": d.Serial, "profile": profile}).Warn("Non-existing RGB profile")
+ return 0
+ }
+ d.DeviceProfile.RGBProfile = profile // Set profile
+ d.saveDeviceProfile() // Save profile
+ if d.activeRgb != nil {
+ d.activeRgb.Exit <- true // Exit current RGB mode
+ d.activeRgb = nil
+ }
+ d.setDeviceColor() // Restart RGB
+ return 1
+
+}
+
+// ChangeDeviceBrightness will change device brightness
+func (d *Device) ChangeDeviceBrightness(mode uint8) uint8 {
+ d.DeviceProfile.Brightness = mode
+ d.saveDeviceProfile()
+ if d.activeRgb != nil {
+ d.activeRgb.Exit <- true // Exit current RGB mode
+ d.activeRgb = nil
+ }
+ d.setDeviceColor() // Restart RGB
+ return 1
+}
+
+// ChangeDeviceProfile will change device profile
+func (d *Device) ChangeDeviceProfile(profileName string) uint8 {
+ if profile, ok := d.UserProfiles[profileName]; ok {
+ currentProfile := d.DeviceProfile
+ currentProfile.Active = false
+ d.DeviceProfile = currentProfile
+ d.saveDeviceProfile()
+
+ // RGB reset
+ if d.activeRgb != nil {
+ d.activeRgb.Exit <- true // Exit current RGB mode
+ d.activeRgb = nil
+ }
+
+ newProfile := profile
+ newProfile.Active = true
+ d.DeviceProfile = newProfile
+ d.saveDeviceProfile()
+ d.setDeviceColor()
+ return 1
+ }
+ return 0
+}
+
+// ChangeKeyboardLayout will change keyboard layout
+func (d *Device) ChangeKeyboardLayout(layout string) uint8 {
+ layouts := keyboards.GetLayouts(keyboardKey)
+ if len(layouts) < 1 {
+ return 2
+ }
+
+ if slices.Contains(layouts, layout) {
+ if d.DeviceProfile != nil {
+ if _, ok := d.DeviceProfile.Keyboards["default"]; ok {
+ layoutKey := fmt.Sprintf("%s-%s", keyboardKey, layout)
+ keyboardLayout := keyboards.GetKeyboard(layoutKey)
+ if keyboardLayout == nil {
+ logger.Log(logger.Fields{"serial": d.Serial}).Warn("Trying to apply non-existing keyboard layout")
+ return 2
+ }
+
+ d.DeviceProfile.Keyboards["default"] = keyboardLayout
+ d.DeviceProfile.Layout = layout
+ d.saveDeviceProfile()
+
+ // RGB reset
+ if d.activeRgb != nil {
+ d.activeRgb.Exit <- true // Exit current RGB mode
+ d.activeRgb = nil
+ }
+ d.setDeviceColor()
+ return 1
+ }
+ } else {
+ logger.Log(logger.Fields{"serial": d.Serial}).Warn("DeviceProfile is null")
+ return 0
+ }
+ } else {
+ logger.Log(logger.Fields{"serial": d.Serial}).Warn("No such layout")
+ return 2
+ }
+ return 0
+}
+
+// getCurrentKeyboard will return current active keyboard
+func (d *Device) getCurrentKeyboard() *keyboards.Keyboard {
+ if keyboard, ok := d.DeviceProfile.Keyboards[d.DeviceProfile.Profile]; ok {
+ return keyboard
+ }
+ return nil
+}
+
+// SaveDeviceProfile will save a new keyboard profile
+func (d *Device) SaveDeviceProfile(profileName string, new bool) uint8 {
+ if new {
+ if d.DeviceProfile == nil {
+ return 0
+ }
+
+ if slices.Contains(d.DeviceProfile.Profiles, profileName) {
+ return 2
+ }
+
+ if _, ok := d.DeviceProfile.Keyboards[profileName]; ok {
+ return 2
+ }
+
+ d.DeviceProfile.Profiles = append(d.DeviceProfile.Profiles, profileName)
+ d.DeviceProfile.Keyboards[profileName] = d.getCurrentKeyboard()
+ d.saveDeviceProfile()
+ return 1
+ } else {
+ d.saveDeviceProfile()
+ return 1
+ }
+}
+
+// UpdateKeyboardProfile will change keyboard profile
+func (d *Device) UpdateKeyboardProfile(profileName string) uint8 {
+ if d.DeviceProfile == nil {
+ return 0
+ }
+
+ if !slices.Contains(d.DeviceProfile.Profiles, profileName) {
+ return 2
+ }
+
+ if _, ok := d.DeviceProfile.Keyboards[profileName]; !ok {
+ return 2
+ }
+
+ d.DeviceProfile.Profile = profileName
+ d.saveDeviceProfile()
+ // RGB reset
+ if d.activeRgb != nil {
+ d.activeRgb.Exit <- true // Exit current RGB mode
+ d.activeRgb = nil
+ }
+ d.setDeviceColor()
+ return 1
+}
+
+// DeleteKeyboardProfile will delete keyboard profile
+func (d *Device) DeleteKeyboardProfile(profileName string) uint8 {
+ if d.DeviceProfile == nil {
+ return 0
+ }
+
+ if profileName == "default" {
+ return 3
+ }
+
+ if !slices.Contains(d.DeviceProfile.Profiles, profileName) {
+ return 2
+ }
+
+ if _, ok := d.DeviceProfile.Keyboards[profileName]; !ok {
+ return 2
+ }
+
+ index := common.IndexOfString(d.DeviceProfile.Profiles, profileName)
+ if index < 0 {
+ return 0
+ }
+
+ d.DeviceProfile.Profile = "default"
+ d.DeviceProfile.Profiles = append(d.DeviceProfile.Profiles[:index], d.DeviceProfile.Profiles[index+1:]...)
+ delete(d.DeviceProfile.Keyboards, profileName)
+
+ d.saveDeviceProfile()
+ // RGB reset
+ if d.activeRgb != nil {
+ d.activeRgb.Exit <- true // Exit current RGB mode
+ d.activeRgb = nil
+ }
+ d.setDeviceColor()
+ return 1
+}
+
+// SaveUserProfile will generate a new user profile configuration and save it to a file
+func (d *Device) SaveUserProfile(profileName string) uint8 {
+ if d.DeviceProfile != nil {
+ profilePath := pwd + "/database/profiles/" + d.Serial + "-" + profileName + ".json"
+
+ newProfile := d.DeviceProfile
+ newProfile.Path = profilePath
+ newProfile.Active = false
+
+ buffer, err := json.Marshal(newProfile)
+ if err != nil {
+ logger.Log(logger.Fields{"error": err}).Error("Unable to convert to json format")
+ return 0
+ }
+
+ // Create profile filename
+ file, err := os.Create(profilePath)
+ if err != nil {
+ logger.Log(logger.Fields{"error": err, "location": newProfile.Path}).Error("Unable to create new device profile")
+ return 0
+ }
+
+ _, err = file.Write(buffer)
+ if err != nil {
+ logger.Log(logger.Fields{"error": err, "location": newProfile.Path}).Error("Unable to write data")
+ return 0
+ }
+
+ err = file.Close()
+ if err != nil {
+ logger.Log(logger.Fields{"error": err, "location": newProfile.Path}).Error("Unable to close file handle")
+ return 0
+ }
+ d.loadDeviceProfiles()
+ return 1
+ }
+ return 0
+}
+
+// UpdateDeviceColor will update device color based on selected input
+func (d *Device) UpdateDeviceColor(keyId, keyOption int, color rgb.Color) uint8 {
+ switch keyOption {
+ case 0:
+ {
+ for rowIndex, row := range d.DeviceProfile.Keyboards[d.DeviceProfile.Profile].Row {
+ for keyIndex, key := range row.Keys {
+ if keyIndex == keyId {
+ key.Color = rgb.Color{
+ Red: color.Red,
+ Green: color.Green,
+ Blue: color.Blue,
+ Brightness: 0,
+ }
+ d.DeviceProfile.Keyboards[d.DeviceProfile.Profile].Row[rowIndex].Keys[keyIndex] = key
+ if d.activeRgb != nil {
+ d.activeRgb.Exit <- true // Exit current RGB mode
+ d.activeRgb = nil
+ }
+ d.setDeviceColor() // Restart RGB
+ return 1
+ }
+ }
+ }
+ }
+ case 1:
+ {
+ rowId := -1
+ for rowIndex, row := range d.DeviceProfile.Keyboards[d.DeviceProfile.Profile].Row {
+ for keyIndex := range row.Keys {
+ if keyIndex == keyId {
+ rowId = rowIndex
+ break
+ }
+ }
+ }
+
+ if rowId < 0 {
+ return 0
+ }
+
+ for keyIndex, key := range d.DeviceProfile.Keyboards[d.DeviceProfile.Profile].Row[rowId].Keys {
+ key.Color = rgb.Color{
+ Red: color.Red,
+ Green: color.Green,
+ Blue: color.Blue,
+ Brightness: 0,
+ }
+ d.DeviceProfile.Keyboards[d.DeviceProfile.Profile].Row[rowId].Keys[keyIndex] = key
+ }
+ if d.activeRgb != nil {
+ d.activeRgb.Exit <- true // Exit current RGB mode
+ d.activeRgb = nil
+ }
+ d.setDeviceColor() // Restart RGB
+ return 1
+ }
+ case 2:
+ {
+ for rowIndex, row := range d.DeviceProfile.Keyboards[d.DeviceProfile.Profile].Row {
+ for keyIndex, key := range row.Keys {
+ key.Color = rgb.Color{
+ Red: color.Red,
+ Green: color.Green,
+ Blue: color.Blue,
+ Brightness: 0,
+ }
+ d.DeviceProfile.Keyboards[d.DeviceProfile.Profile].Row[rowIndex].Keys[keyIndex] = key
+ }
+ }
+ if d.activeRgb != nil {
+ d.activeRgb.Exit <- true // Exit current RGB mode
+ d.activeRgb = nil
+ }
+ d.setDeviceColor() // Restart RGB
+ return 1
+ }
+ }
+ return 0
+}
+
+// setBrightnessLevel will set global brightness level
+func (d *Device) setBrightnessLevel() {
+ if d.Exit {
+ return
+ }
+
+ if d.DeviceProfile != nil {
+ buf := make([]byte, 2)
+ binary.LittleEndian.PutUint16(buf[0:2], d.DeviceProfile.BrightnessLevel)
+ _, err := d.transfer(cmdBrightness, buf)
+ if err != nil {
+ logger.Log(logger.Fields{"error": err, "serial": d.Serial}).Warn("Unable to change brightness")
+ }
+ }
+}
+
+// setDeviceColor will activate and set device RGB
+func (d *Device) setDeviceColor() {
+ // Reset
+ reset := map[int][]byte{}
+ var buffer []byte
+ var buf = make([]byte, colorPacketLength)
+
+ // Reset all channels
+ color := &rgb.Color{
+ Red: 0,
+ Green: 0,
+ Blue: 0,
+ Brightness: 0,
+ }
+
+ for i := 0; i < d.LEDChannels; i++ {
+ reset[i] = []byte{
+ byte(color.Red),
+ byte(color.Green),
+ byte(color.Blue),
+ }
+ }
+
+ buffer = rgb.SetColor(reset)
+ d.writeColor(buffer)
+
+ if d.DeviceProfile == nil {
+ logger.Log(logger.Fields{"serial": d.Serial}).Error("Unable to set color. DeviceProfile is null!")
+ return
+ }
+
+ if d.DeviceProfile.RGBProfile == "keyboard" {
+ if _, ok := d.DeviceProfile.Keyboards[d.DeviceProfile.Profile]; ok {
+ for _, rows := range d.DeviceProfile.Keyboards[d.DeviceProfile.Profile].Row {
+ for _, keys := range rows.Keys {
+ for _, packetIndex := range keys.PacketIndex {
+ buf[packetIndex] = byte(keys.Color.Red)
+ buf[packetIndex+1] = byte(keys.Color.Green)
+ buf[packetIndex+2] = byte(keys.Color.Blue)
+ }
+ }
+ }
+ d.writeColor(buf) // Write color once
+ return
+ } else {
+ logger.Log(logger.Fields{"serial": d.Serial}).Error("Unable to set color. Unknown keyboard")
+ return
+ }
+ }
+
+ if d.DeviceProfile.RGBProfile == "static" {
+ profile := d.GetRgbProfile("static")
+ if d.DeviceProfile.Brightness != 0 {
+ profile.StartColor.Brightness = rgb.GetBrightnessValue(d.DeviceProfile.Brightness)
+ }
+
+ profileColor := rgb.ModifyBrightness(profile.StartColor)
+ for _, rows := range d.DeviceProfile.Keyboards[d.DeviceProfile.Profile].Row {
+ for _, keys := range rows.Keys {
+ for _, packetIndex := range keys.PacketIndex {
+ buf[packetIndex] = byte(profileColor.Red)
+ buf[packetIndex+1] = byte(profileColor.Green)
+ buf[packetIndex+2] = byte(profileColor.Blue)
+ }
+ }
+ }
+ d.writeColor(buf) // Write color once
+ return
+ }
+
+ go func(lightChannels int) {
+ startTime := time.Now()
+ d.activeRgb = rgb.Exit()
+
+ // Generate random colors
+ d.activeRgb.RGBStartColor = rgb.GenerateRandomColor(1)
+ d.activeRgb.RGBEndColor = rgb.GenerateRandomColor(1)
+
+ for {
+ select {
+ case <-d.activeRgb.Exit:
+ return
+ default:
+ buff := make([]byte, 0)
+ var buf = make([]byte, colorPacketLength)
+
+ rgbCustomColor := true
+ profile := d.GetRgbProfile(d.DeviceProfile.RGBProfile)
+ if profile == nil {
+ for i := 0; i < d.LEDChannels; i++ {
+ buff = append(buff, []byte{0, 0, 0}...)
+ }
+ logger.Log(logger.Fields{"profile": d.DeviceProfile.RGBProfile, "serial": d.Serial}).Warn("No such RGB profile found")
+ continue
+ }
+ rgbModeSpeed := common.FClamp(profile.Speed, 0.1, 10)
+ // Check if we have custom colors
+ if (rgb.Color{}) == profile.StartColor || (rgb.Color{}) == profile.EndColor {
+ rgbCustomColor = false
+ }
+
+ r := rgb.New(
+ d.LEDChannels,
+ rgbModeSpeed,
+ nil,
+ nil,
+ profile.Brightness,
+ common.Clamp(profile.Smoothness, 1, 100),
+ time.Duration(rgbModeSpeed)*time.Second,
+ rgbCustomColor,
+ )
+
+ if rgbCustomColor {
+ r.RGBStartColor = &profile.StartColor
+ r.RGBEndColor = &profile.EndColor
+ } else {
+ r.RGBStartColor = d.activeRgb.RGBStartColor
+ r.RGBEndColor = d.activeRgb.RGBEndColor
+ }
+
+ // Brightness
+ if d.DeviceProfile.Brightness > 0 {
+ r.RGBBrightness = rgb.GetBrightnessValue(d.DeviceProfile.Brightness)
+ r.RGBStartColor.Brightness = r.RGBBrightness
+ r.RGBEndColor.Brightness = r.RGBBrightness
+ }
+
+ switch d.DeviceProfile.RGBProfile {
+ case "off":
+ {
+ for n := 0; n < d.LEDChannels; n++ {
+ buff = append(buff, []byte{0, 0, 0}...)
+ }
+ }
+ case "rainbow":
+ {
+ r.Rainbow(startTime)
+ buff = append(buff, r.Output...)
+ }
+ case "watercolor":
+ {
+ r.Watercolor(startTime)
+ buff = append(buff, r.Output...)
+ }
+ case "cpu-temperature":
+ {
+ r.MinTemp = profile.MinTemp
+ r.MaxTemp = profile.MaxTemp
+ r.Temperature(float64(d.CpuTemp))
+ buff = append(buff, r.Output...)
+ }
+ case "gpu-temperature":
+ {
+ r.MinTemp = profile.MinTemp
+ r.MaxTemp = profile.MaxTemp
+ r.Temperature(float64(d.GpuTemp))
+ buff = append(buff, r.Output...)
+ }
+ case "colorpulse":
+ {
+ r.Colorpulse(&startTime)
+ buff = append(buff, r.Output...)
+ }
+ case "static":
+ {
+ r.Static()
+ buff = append(buff, r.Output...)
+ }
+ case "rotator":
+ {
+ r.Rotator(&startTime)
+ buff = append(buff, r.Output...)
+ }
+ case "wave":
+ {
+ r.Wave(&startTime)
+ buff = append(buff, r.Output...)
+ }
+ case "storm":
+ {
+ r.Storm()
+ buff = append(buff, r.Output...)
+ }
+ case "flickering":
+ {
+ r.Flickering(&startTime)
+ buff = append(buff, r.Output...)
+ }
+ case "colorshift":
+ {
+ r.Colorshift(&startTime, d.activeRgb)
+ buff = append(buff, r.Output...)
+ }
+ case "circleshift":
+ {
+ r.CircleShift(&startTime)
+ buff = append(buff, r.Output...)
+ }
+ case "circle":
+ {
+ r.Circle(&startTime)
+ buff = append(buff, r.Output...)
+ }
+ case "spinner":
+ {
+ r.Spinner(&startTime)
+ buff = append(buff, r.Output...)
+ }
+ case "colorwarp":
+ {
+ r.Colorwarp(&startTime, d.activeRgb)
+ buff = append(buff, r.Output...)
+ }
+ }
+ for _, rows := range d.DeviceProfile.Keyboards[d.DeviceProfile.Profile].Row {
+ for _, keys := range rows.Keys {
+ for _, packetIndex := range keys.PacketIndex {
+ buf[packetIndex] = r.Output[packetIndex]
+ buf[packetIndex+1] = r.Output[packetIndex+1]
+ buf[packetIndex+2] = r.Output[packetIndex+2]
+ }
+ }
+ }
+
+ // Send it
+ d.writeColor(buf)
+ time.Sleep(20 * time.Millisecond)
+ }
+ }
+ }(d.LEDChannels)
+}
+
+// writeColor will write data to the device with a specific endpoint.
+// writeColor does not require endpoint closing and opening like normal Write requires.
+// Endpoint is open only once. Once the endpoint is open, color can be sent continuously.
+func (d *Device) writeColor(data []byte) {
+ if d.Exit {
+ return
+ }
+
+ buffer := make([]byte, len(dataTypeSetColor)+len(data)+headerWriteSize)
+ binary.LittleEndian.PutUint16(buffer[0:2], uint16(len(data)))
+ copy(buffer[headerWriteSize:headerWriteSize+len(dataTypeSetColor)], dataTypeSetColor)
+ copy(buffer[headerWriteSize+len(dataTypeSetColor):], data)
+
+ // Split packet into chunks
+ chunks := common.ProcessMultiChunkPacket(buffer, maxBufferSizePerRequest)
+ for i, chunk := range chunks {
+ if i == 0 {
+ // Initial packet is using cmdWriteColor
+ _, err := d.transfer(cmdWriteColor, chunk)
+ if err != nil {
+ logger.Log(logger.Fields{"error": err, "serial": d.Serial}).Error("Unable to write to color endpoint")
+ }
+ } else {
+ // Chunks don't use cmdWriteColor, they use static dataTypeSubColor
+ _, err := d.transfer(dataTypeSubColor, chunk)
+ if err != nil {
+ logger.Log(logger.Fields{"error": err, "serial": d.Serial}).Error("Unable to write to endpoint")
+ }
+ }
+ }
+}
+
+// transfer will send data to a device and retrieve device output
+func (d *Device) transfer(endpoint, buffer []byte) ([]byte, error) {
+ // Packet control, mandatory for this device
+ d.mutex.Lock()
+ defer d.mutex.Unlock()
+
+ // Create write buffer
+ bufferW := make([]byte, bufferSizeWrite)
+ bufferW[1] = 0x08
+ endpointHeaderPosition := bufferW[headerSize : headerSize+len(endpoint)]
+ copy(endpointHeaderPosition, endpoint)
+ if len(buffer) > 0 {
+ copy(bufferW[headerSize+len(endpoint):headerSize+len(endpoint)+len(buffer)], buffer)
+ }
+
+ // Create read buffer
+ bufferR := make([]byte, bufferSize)
+
+ // Send command to a device
+ if _, err := d.dev.Write(bufferW); err != nil {
+ logger.Log(logger.Fields{"error": err, "serial": d.Serial}).Error("Unable to write to a device")
+ return nil, err
+ }
+
+ // Get data from a device
+ if _, err := d.dev.Read(bufferR); err != nil {
+ logger.Log(logger.Fields{"error": err, "serial": d.Serial}).Error("Unable to read data from device")
+ return nil, err
+ }
+
+ return bufferR, nil
+}
+
+// getListenerData will listen for keyboard events and return data on success or nil on failure.
+// ReadWithTimeout is mandatory due to the nature of listening for events
+func (d *Device) getListenerData() []byte {
+ data := make([]byte, bufferSize)
+ n, err := d.listener.ReadWithTimeout(data, 100*time.Millisecond)
+ if err != nil || n == 0 {
+ return nil
+ }
+ return data
+}
+
+// controlListener will listen for events from the control buttons
+func (d *Device) controlListener() {
+ var brightness uint16 = 0
+
+ if d.DeviceProfile.BrightnessLevel == 0 {
+ brightness = 1000
+ } else {
+ brightness = d.DeviceProfile.BrightnessLevel
+ }
+
+ go func() {
+ enum := hid.EnumFunc(func(info *hid.DeviceInfo) error {
+ if info.InterfaceNbr == 2 {
+ listener, err := hid.OpenPath(info.Path)
+ if err != nil {
+ return err
+ }
+ d.listener = listener
+ }
+ return nil
+ })
+
+ err := hid.Enumerate(d.VendorId, d.ProductId, enum)
+ if err != nil {
+ logger.Log(logger.Fields{"error": err, "vendorId": d.VendorId}).Error("Unable to enumerate devices")
+ }
+
+ for {
+ select {
+ default:
+ if d.Exit {
+ err = d.listener.Close()
+ if err != nil {
+ logger.Log(logger.Fields{"error": err, "vendorId": d.VendorId}).Error("Failed to close listener")
+ return
+ }
+ return
+ }
+
+ data := d.getListenerData()
+ if len(data) == 0 || data == nil {
+ continue
+ }
+
+ value := data[4]
+ if value == 0 && data[16] == 2 {
+ if brightness >= 1000 {
+ brightness = 0
+ } else {
+ brightness += 200
+ }
+
+ if d.DeviceProfile != nil {
+ d.DeviceProfile.BrightnessLevel = brightness
+ d.saveDeviceProfile()
+ d.setBrightnessLevel()
+ }
+ }
+ }
+ }
+ }()
+}
diff --git a/src/keyboards/keyboards.go b/src/keyboards/keyboards.go
index 25571f5..726e699 100644
--- a/src/keyboards/keyboards.go
+++ b/src/keyboards/keyboards.go
@@ -17,14 +17,16 @@ var (
)
type Keyboard struct {
- Version int `json:"version"`
- Key string `json:"key"`
- Device string `json:"device"`
- Layout string `json:"layout"`
- Rows int `json:"rows"`
- Row map[int]Row `json:"row"`
- Zones map[int]Zones `json:"zones"`
- Color rgb.Color `json:"color"`
+ Version int `json:"version"`
+ Key string `json:"key"`
+ Device string `json:"device"`
+ Layout string `json:"layout"`
+ Rows int `json:"rows"`
+ Row map[int]Row `json:"row"`
+ Zones map[int]Zones `json:"zones"`
+ Color rgb.Color `json:"color"`
+ UppercaseClass string `json:"uppercaseClass"`
+ FontSize int `json:"fontSize"`
}
type Zones struct {
diff --git a/src/templates/templates.go b/src/templates/templates.go
index 859d24a..1489442 100644
--- a/src/templates/templates.go
+++ b/src/templates/templates.go
@@ -100,6 +100,7 @@ func Init() {
"web/virtuosorgbXTW.html",
"web/darkstarWU.html",
"web/darkstarW.html",
+ "web/k70rgbtklcs.html",
"web/rgb.html",
"web/temperature.html",
"web/scheduler.html",
diff --git a/static/css/custom.css b/static/css/custom.css
index d007452..a5708bb 100644
--- a/static/css/custom.css
+++ b/static/css/custom.css
@@ -616,6 +616,18 @@ footer {
grid-gap: 5px;
}
+.keyboard-row-18 {
+ display: grid;
+ grid-template-columns: repeat(18, 60px);
+ grid-gap: 5px;
+}
+
+.keyboard-row-19 {
+ display: grid;
+ grid-template-columns: repeat(19, 60px);
+ grid-gap: 5px;
+}
+
.keyboard-row-20 {
display: grid;
grid-template-columns: repeat(20, 60px);
diff --git a/web/k100air.html b/web/k100air.html
index 1e02302..6cc0526 100644
--- a/web/k100air.html
+++ b/web/k100air.html
@@ -116,15 +116,15 @@
{{ end }}
{{ if gt (len $keys.Css) 0 }}
-
+ Firmware: {{ .Device.Firmware }} +
+