Files
agent/model/serializeConfig.js

154 lines
5.5 KiB
JavaScript
Executable File

#!/usr/bin/env node
var fs = require('fs');
var BufferWriter = require('./BufferWriter');
var buffer = new Buffer(1000);
buffer.fill(0);
var writer = BufferWriter(buffer);
var uhkConfig = JSON.parse(fs.readFileSync('uhk-config.json'));
var keyActions = uhkConfig.keymaps[0].layers[0].modules[0].keyActions;
console.log(keyActions)
var ARRAY_LAST_ELEMENT_ID = 0;
var KEY_ACTION_ID_KEYSTROKE_SCANCODE_FIRST = 1;
var KEY_ACTION_ID_KEYSTROKE_SCANCODE_LAST = 231;
var KEY_ACTION_ID_SWITCH_LAYER_MOD = 232;
var KEY_ACTION_ID_SWITCH_LAYER_FN = 233;
var KEY_ACTION_ID_SWITCH_LAYER_MOUSE = 234;
var KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_MOD = 235;
var KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_FN = 236;
var KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_MOUSE = 237;
var KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_LEFT_CTRL = 238;
var KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_LEFT_SHIFT = 239;
var KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_LEFT_ALT = 240;
var KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_LEFT_SUPER = 241;
var KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_RIGHT_CTRL = 242;
var KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_RIGHT_SHIFT = 243;
var KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_RIGHT_ALT = 244;
var KEY_ACTION_ID_DUAL_ROLE_KEYSTROKE_RIGHT_SUPER = 245;
var KEY_ACTION_ID_MOUSE = 246;
var KEY_ACTION_ID_PLAY_MACRO = 247;
var KEY_ACTION_ID_SWITCH_KEYMAP = 248;
var KEY_ACTION_ID_NONE = 255;
var NONE_ACTION_PADDING = 0;
var MOUSE_ACTION_ID_LEFT_CLICK = 0;
var MOUSE_ACTION_ID_MIDDLE_CLICK = 1;
var MOUSE_ACTION_ID_RIGHT_CLICK = 2;
var MOUSE_ACTION_ID_MOVE_UP = 3;
var MOUSE_ACTION_ID_MOVE_DOWN = 4;
var MOUSE_ACTION_ID_MOVE_LEFT = 5;
var MOUSE_ACTION_ID_MOVE_RIGHT = 6;
var MOUSE_ACTION_ID_SCROLL_UP = 7;
var MOUSE_ACTION_ID_SCROLL_DOWN = 8;
var MOUSE_ACTION_ID_SCROLL_LEFT = 9;
var MOUSE_ACTION_ID_SCROLL_RIGHT = 10;
var MOUSE_ACTION_ID_ACCELERATE = 11;
var MOUSE_ACTION_ID_DECELERATE = 12;
function serializeKeyActions(keyActions) {
keyActions.forEach(function(keyAction) {
serializeKeyAction(keyAction);
});
writer.uint8(ARRAY_LAST_ELEMENT_ID);
}
function serializeKeyAction(keyAction) {
switch (keyAction.actionType) {
case 'none':
serializeNoneAction();
break;
case 'keystroke':
serializeKeystrokeAction(keyAction);
break;
case 'dualRoleKeystroke':
serializeDualRoleKeyAction(keyAction);
break;
case 'mouse':
serializeMouseAction(keyAction);
break;
case 'playMacro':
serializeMacroAction(keyAction);
break;
case 'switchKeymap':
serializeSwitchKeymapAction(keyAction);
break;
case 'switchLayer':
serializeSwitchLayerAction(keyAction);
break;
default:
throw "KeyAction doesn't have a valid actionType property: " + keyAction.actionType;
}
}
function serializeNoneAction(keystrokeAction) {
writer.uint8(KEY_ACTION_ID_NONE);
writer.uint8(NONE_ACTION_PADDING);
}
function serializeKeystrokeAction(keystrokeAction) {
writer.uint8(keystrokeAction.scancode);
writer.uint8(keystrokeAction.modifiers);
}
function serializeDualRoleKeyAction(dualRoleKeyAction) {
writer.uint8({
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.uint8(dualRoleKeyAction.scancode);
}
function serializeMouseAction(mouseAction) {
writer.uint8(KEY_ACTION_ID_MOUSE);
writer.uint8({
leftClick : MOUSE_ACTION_ID_LEFT_CLICK,
middleClick: MOUSE_ACTION_ID_MIDDLE_CLICK,
rightClick : MOUSE_ACTION_ID_RIGHT_CLICK,
moveUp : MOUSE_ACTION_ID_MOVE_UP,
moveDown : MOUSE_ACTION_ID_MOVE_DOWN,
moveLeft : MOUSE_ACTION_ID_MOVE_LEFT,
moveRight : MOUSE_ACTION_ID_MOVE_RIGHT,
scrollUp : MOUSE_ACTION_ID_SCROLL_UP,
scrollDown : MOUSE_ACTION_ID_SCROLL_DOWN,
scrollLeft : MOUSE_ACTION_ID_SCROLL_LEFT,
scrollRight: MOUSE_ACTION_ID_SCROLL_RIGHT,
accelerate : MOUSE_ACTION_ID_ACCELERATE,
decelerate : MOUSE_ACTION_ID_DECELERATE
}[mouseAction.mouseAction]);
}
function serializeMacroAction(macroAction) {
writer.uint8(KEY_ACTION_ID_PLAY_MACRO);
writer.uint8(macroAction.macroId);
}
function serializeSwitchKeymapAction(switchKeymapAction) {
writer.uint8(KEY_ACTION_ID_SWITCH_KEYMAP);
writer.uint8(switchKeymapAction.keymapId);
}
function serializeSwitchLayerAction(switchLayerAction) {
writer.uint8({
mod : KEY_ACTION_ID_SWITCH_LAYER_MOD,
fn : KEY_ACTION_ID_SWITCH_LAYER_FN,
mouse: KEY_ACTION_ID_SWITCH_LAYER_MOUSE
}[switchLayerAction]);
writer.uint8(0);
}
serializeKeyActions(keyActions);
fs.writeFileSync('uhk-config.bin', buffer);