From 94e5d55d8f38e2f7bfb40cc2e7d21b2e162aa7c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Monda?= Date: Wed, 30 Mar 2016 01:48:08 +0200 Subject: [PATCH] Add DualRoleKeystrokeAction. --- .../config-items/DualRoleKeystrokeAction.ts | 61 +++++++++++++++++++ .../config-items/KeystrokeAction.ts | 3 +- .../config-items/config-items.ts | 1 + config-serializer/serializeConfig.ts | 48 --------------- 4 files changed, 64 insertions(+), 49 deletions(-) create mode 100644 config-serializer/config-items/DualRoleKeystrokeAction.ts diff --git a/config-serializer/config-items/DualRoleKeystrokeAction.ts b/config-serializer/config-items/DualRoleKeystrokeAction.ts new file mode 100644 index 00000000..0bfeae3d --- /dev/null +++ b/config-serializer/config-items/DualRoleKeystrokeAction.ts @@ -0,0 +1,61 @@ +enum LongPressActionId { + leftCtrl = 233, + leftShift, + leftAlt, + leftSuper, + rightCtrl, + rightShift, + rightAlt, + rightSuper, + mod, + fn, + mouse, +} + +class DualRoleKeystrokeAction extends KeyAction implements Serializable { + static keyActionTypeString = 'dualRoleKeystroke'; + + public scancode; + + private _longPressAction: LongPressActionId; + + get longPressAction(): number { + return this._longPressAction; + } + + set longPressAction(value) { + if (!DualRoleKeystrokeAction.isDualRoleKeystrokeActionValid(value)) { + throw 'Invalid DualRoleKeystrokeAction.longPressAction: ${value}'; + } + this._longPressAction = value; + } + + static isDualRoleKeystrokeActionValid(keyActionId): boolean { + return LongPressActionId[keyActionId] !== undefined; + } + + fromJsObject(jsObject: any): DualRoleKeystrokeAction { + this.longPressAction = jsObject.longPressAction; + this.scancode = jsObject.scancode; + return this; + } + + fromBinary(buffer: UhkBuffer): DualRoleKeystrokeAction { + this.longPressAction = buffer.readUInt8(); + this.scancode = buffer.readUInt8(); + return this; + } + + toJsObject(): any { + return { + keyActionType: DualRoleKeystrokeAction.keyActionTypeString, + longPressAction: LongPressActionId[this.longPressAction], + scancode: this.scancode + }; + } + + toBinary(buffer: UhkBuffer) { + buffer.writeUInt8(this.longPressAction); + buffer.writeUInt8(this.scancode); + } +} diff --git a/config-serializer/config-items/KeystrokeAction.ts b/config-serializer/config-items/KeystrokeAction.ts index d2e19aea..3d3fd201 100644 --- a/config-serializer/config-items/KeystrokeAction.ts +++ b/config-serializer/config-items/KeystrokeAction.ts @@ -4,9 +4,10 @@ class KeystrokeAction extends KeyAction implements Serializable static firstValidScancode = 1; static lastValidScancode = 231; - private _scancode: number; modifierMask: number; + private _scancode: number; + get scancode(): number { return this._scancode; } diff --git a/config-serializer/config-items/config-items.ts b/config-serializer/config-items/config-items.ts index 0c1bd558..71dbc851 100644 --- a/config-serializer/config-items/config-items.ts +++ b/config-serializer/config-items/config-items.ts @@ -1,5 +1,6 @@ /// /// +/// /// /// /// diff --git a/config-serializer/serializeConfig.ts b/config-serializer/serializeConfig.ts index d073d704..a75258a7 100644 --- a/config-serializer/serializeConfig.ts +++ b/config-serializer/serializeConfig.ts @@ -8,42 +8,13 @@ let writer = new UhkBuffer(); let uhkConfig = JSON.parse(fs.readFileSync('uhk-config.json')); let keyActions = uhkConfig.keymaps[0].layers[0].modules[0].keyActions; -let ARRAY_LAST_ELEMENT_ID = 0; - -let KEY_ACTION_ID_SWITCH_LAYER = 232; -let KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_MOD = 233; -let KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_FN = 234; -let KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_MOUSE = 235; -let KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_LEFT_CTRL = 236; -let KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_LEFT_SHIFT = 237; -let KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_LEFT_ALT = 238; -let KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_LEFT_SUPER = 239; -let KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_RIGHT_CTRL = 240; -let KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_RIGHT_SHIFT = 241; -let KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_RIGHT_ALT = 242; -let KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_RIGHT_SUPER = 243; -let KEY_ACTION_ID_NONE = 255; - let SWITCH_LAYER_MOD = 0; let SWITCH_LAYER_FN = 1; let SWITCH_LAYER_MOUSE = 2; let SWITCH_LAYER_TOGGLE = 0x80; -let NONE_ACTION_PADDING = 0; - - -function serializeKeyActions(keyActionsParam) { - keyActionsParam.forEach(function(keyAction) { - serializeKeyAction(keyAction); - }); - writer.writeUInt8(ARRAY_LAST_ELEMENT_ID); -} - function serializeKeyAction(keyAction) { switch (keyAction.actionType) { - case 'dualRoleKeystroke': - serializeDualRoleKeyAction(keyAction); - break; case 'switchLayer': serializeSwitchLayerAction(keyAction); break; @@ -52,25 +23,7 @@ function serializeKeyAction(keyAction) { } } -function serializeDualRoleKeyAction(dualRoleKeyAction) { - writer.writeUInt8({ - mod : KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_MOD, - fn : KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_FN, - mouse : KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_MOUSE, - leftControl : KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_LEFT_CTRL, - leftShift : KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_LEFT_SHIFT, - leftAlt : KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_LEFT_ALT, - leftSuper : KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_LEFT_SUPER, - rightControl: KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_RIGHT_CTRL, - rightShift : KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_RIGHT_SHIFT, - rightAlt : KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_RIGHT_ALT, - rightSuper : KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_RIGHT_SUPER - }[dualRoleKeyAction.longPressAction]); - writer.writeUInt8(dualRoleKeyAction.scancode); -} - function serializeSwitchLayerAction(switchLayerAction) { - writer.writeUInt8(KEY_ACTION_ID_SWITCH_LAYER); writer.writeUInt8({ mod : SWITCH_LAYER_MOD, fn : SWITCH_LAYER_FN, @@ -78,5 +31,4 @@ function serializeSwitchLayerAction(switchLayerAction) { }[switchLayerAction] | switchLayerAction.toggle ? SWITCH_LAYER_TOGGLE : 0); } -//serializeKeyActions(keyActions); fs.writeFileSync('uhk-config.bin', writer.buffer);