Loading README.md +2 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,8 @@ nubs.right.x = [mouse_x|mouse_y|*mouse_btn*|scroll_x|scroll_y] nubs.right.y = [mouse_x|mouse_y|mouse_btn|scroll_x|*scroll_y*] nubs.left.click = [*mouse_left*|mouse_right] nubs.right.click = [mouse_left|*mouse_right*] altmode.start.button = [*left_alt*|right_alt] altmode.right.trigger = [*left_alt*|right_alt] gamepad.export = 1 keypad.export = 1 mouse.export = 1 Loading pyrainput.cpp +43 −4 Original line number Diff line number Diff line Loading @@ -101,6 +101,9 @@ struct Settings { NUB_CLICK_LEFT, NUB_CLICK_RIGHT, MOUSE_LEFT, MOUSE_RIGHT }; enum AltMode { LEFT_ALT, RIGHT_ALT }; NubAxisMode leftNubModeX = MOUSE_X; NubAxisMode leftNubModeY = MOUSE_Y; Loading @@ -109,6 +112,9 @@ struct Settings { NubClickMode leftNubClickMode = MOUSE_LEFT; NubClickMode rightNubClickMode = MOUSE_RIGHT; AltMode startButton = LEFT_ALT; AltMode rightTrigger = LEFT_ALT; // May be changed from any thread at any time int joyDeadzone = 10; int mouseDeadzone = 20; Loading @@ -124,6 +130,12 @@ struct Settings { Scripts brightness; }; using AltModeMap = std::unordered_map<std::string, Settings::AltMode>; AltModeMap const ALT_MODES = { { "left_alt", Settings::LEFT_ALT }, { "right_alt", Settings::RIGHT_ALT } }; using NubAxisModeMap = std::unordered_map<std::string, Settings::NubAxisMode>; NubAxisModeMap const NUB_AXIS_MODES = { { "mouse_x", Settings::MOUSE_X }, Loading @@ -145,6 +157,7 @@ void handleArgs(char const** argv, unsigned int argc, Settings& settings); void loadConfig(std::string const& filename, Settings& settings); Settings::NubAxisMode parseNubAxisMode(std::string const& str); Settings::NubClickMode parseNubClickMode(std::string const& str); Settings::AltMode parseAltMode(std::string const& str); void handleNubAxis(Settings::NubAxisMode mode, int value, Mouse* mouse, UinputDevice* gamepad, Settings const& settings); void handleNubClick(Settings::NubClickMode mode, int value, Mouse* mouse, UinputDevice* gamepad, Settings const& settings); Loading Loading @@ -214,9 +227,9 @@ void init(char const** argv, unsigned int argc) { global.Fn.pressed = global.Fn.left || global.Fn.right; }); //TODO: make the alt mapping configurable global.behaviors->altmap(KEY_ESC, &global.Fn.pressed, KEY_ESC, KEY_SYSRQ); global.behaviors->altmap(KEY_PAUSE, &global.Fn.pressed, KEY_PAUSE, KEY_SCALE); global.behaviors->script(KEY_BRIGHTNESSUP, &global.settings.brightness); global.behaviors->altmap(KEY_PAUSE, &global.Fn.pressed, KEY_PAUSE, KEY_SCALE); global.behaviors->script(KEY_BRIGHTNESSUP, &global.settings.brightness); //global.behaviors->altmap(KEY_BRIGHTNESSUP, &global.Fn.pressed, KEY_BRIGHTNESSUP, KEY_BRIGHTNESSDOWN); global.behaviors->altmap(KEY_F11, &global.Fn.pressed, KEY_F11, KEY_F12); global.behaviors->altmap(KEY_1, &global.Fn.pressed, KEY_1, KEY_F1); Loading Loading @@ -349,14 +362,14 @@ void handle(input_event const& e, unsigned int role) { case BTN_THUMBL: case BTN_THUMBR: if (role == ROLE_LEFT_NUB && global.settings.exportMouse) { std::cout << "left nub click\n"; //std::cout << "left nub click\n"; handleNubClick(global.settings.leftNubClickMode, e.value, global.mouse, global.gamepad, global.settings); if (global.settings.exportGamepad) { global.gamepad->send(EV_KEY, BTN_THUMBL, e.value); global.gamepad->send(EV_SYN, 0, 0); } } else if (role == ROLE_RIGHT_NUB && global.settings.exportMouse) { std::cout << "right nub click\n"; //std::cout << "right nub click\n"; handleNubClick(global.settings.rightNubClickMode, e.value, global.mouse, global.gamepad, global.settings); if (global.settings.exportGamepad) { global.gamepad->send(EV_KEY, BTN_THUMBR, e.value); Loading Loading @@ -501,6 +514,12 @@ SettingHandlerMap const SETTING_HANDLERS = { } }, { "nubs.right.click", [](std::string const& value, Settings& settings) { settings.rightNubClickMode = parseNubClickMode(value); } }, { "altmode.start.button", [](std::string const& value, Settings& settings) { settings.startButton = parseAltMode(value); } }, { "altmode.right.trigger", [](std::string const& value, Settings& settings) { settings.rightTrigger = parseAltMode(value); } } }; Loading Loading @@ -534,6 +553,15 @@ void loadConfig(std::string const& filename, Settings& settings) { std::cerr << "Invalid line in config file: " << line << std::endl; } } /* Apply "Alt Keys" mapping configuration */ if (settings.startButton == Settings::LEFT_ALT) global.behaviors->gpmap2(KEY_LEFTALT, BTN_START, &global.Alt.left, &global.Alt); else global.behaviors->gpmap2(KEY_RIGHTALT, BTN_START, &global.Alt.right, &global.Alt); if (settings.rightTrigger == Settings::LEFT_ALT) global.behaviors->gpmap2(KEY_LEFTALT, BTN_TR2, &global.Alt.left, &global.Alt); else global.behaviors->gpmap2(KEY_RIGHTALT, BTN_TR2, &global.Alt.right, &global.Alt); } Settings::NubAxisMode parseNubAxisMode(std::string const& str) { Loading @@ -558,6 +586,17 @@ Settings::NubClickMode parseNubClickMode(std::string const& str) { } } Settings::AltMode parseAltMode(std::string const& str) { std::string s(str); std::transform(s.begin(), s.end(), s.begin(), tolower); auto iter = ALT_MODES.find(s); if(iter == ALT_MODES.end()) { return Settings::LEFT_ALT; } else { return iter->second; } } void handleNubAxis(Settings::NubAxisMode mode, int value, Mouse* mouse, UinputDevice* gamepad, Settings const& settings) { switch(mode) { case Settings::MOUSE_X: Loading Loading
README.md +2 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,8 @@ nubs.right.x = [mouse_x|mouse_y|*mouse_btn*|scroll_x|scroll_y] nubs.right.y = [mouse_x|mouse_y|mouse_btn|scroll_x|*scroll_y*] nubs.left.click = [*mouse_left*|mouse_right] nubs.right.click = [mouse_left|*mouse_right*] altmode.start.button = [*left_alt*|right_alt] altmode.right.trigger = [*left_alt*|right_alt] gamepad.export = 1 keypad.export = 1 mouse.export = 1 Loading
pyrainput.cpp +43 −4 Original line number Diff line number Diff line Loading @@ -101,6 +101,9 @@ struct Settings { NUB_CLICK_LEFT, NUB_CLICK_RIGHT, MOUSE_LEFT, MOUSE_RIGHT }; enum AltMode { LEFT_ALT, RIGHT_ALT }; NubAxisMode leftNubModeX = MOUSE_X; NubAxisMode leftNubModeY = MOUSE_Y; Loading @@ -109,6 +112,9 @@ struct Settings { NubClickMode leftNubClickMode = MOUSE_LEFT; NubClickMode rightNubClickMode = MOUSE_RIGHT; AltMode startButton = LEFT_ALT; AltMode rightTrigger = LEFT_ALT; // May be changed from any thread at any time int joyDeadzone = 10; int mouseDeadzone = 20; Loading @@ -124,6 +130,12 @@ struct Settings { Scripts brightness; }; using AltModeMap = std::unordered_map<std::string, Settings::AltMode>; AltModeMap const ALT_MODES = { { "left_alt", Settings::LEFT_ALT }, { "right_alt", Settings::RIGHT_ALT } }; using NubAxisModeMap = std::unordered_map<std::string, Settings::NubAxisMode>; NubAxisModeMap const NUB_AXIS_MODES = { { "mouse_x", Settings::MOUSE_X }, Loading @@ -145,6 +157,7 @@ void handleArgs(char const** argv, unsigned int argc, Settings& settings); void loadConfig(std::string const& filename, Settings& settings); Settings::NubAxisMode parseNubAxisMode(std::string const& str); Settings::NubClickMode parseNubClickMode(std::string const& str); Settings::AltMode parseAltMode(std::string const& str); void handleNubAxis(Settings::NubAxisMode mode, int value, Mouse* mouse, UinputDevice* gamepad, Settings const& settings); void handleNubClick(Settings::NubClickMode mode, int value, Mouse* mouse, UinputDevice* gamepad, Settings const& settings); Loading Loading @@ -214,9 +227,9 @@ void init(char const** argv, unsigned int argc) { global.Fn.pressed = global.Fn.left || global.Fn.right; }); //TODO: make the alt mapping configurable global.behaviors->altmap(KEY_ESC, &global.Fn.pressed, KEY_ESC, KEY_SYSRQ); global.behaviors->altmap(KEY_PAUSE, &global.Fn.pressed, KEY_PAUSE, KEY_SCALE); global.behaviors->script(KEY_BRIGHTNESSUP, &global.settings.brightness); global.behaviors->altmap(KEY_PAUSE, &global.Fn.pressed, KEY_PAUSE, KEY_SCALE); global.behaviors->script(KEY_BRIGHTNESSUP, &global.settings.brightness); //global.behaviors->altmap(KEY_BRIGHTNESSUP, &global.Fn.pressed, KEY_BRIGHTNESSUP, KEY_BRIGHTNESSDOWN); global.behaviors->altmap(KEY_F11, &global.Fn.pressed, KEY_F11, KEY_F12); global.behaviors->altmap(KEY_1, &global.Fn.pressed, KEY_1, KEY_F1); Loading Loading @@ -349,14 +362,14 @@ void handle(input_event const& e, unsigned int role) { case BTN_THUMBL: case BTN_THUMBR: if (role == ROLE_LEFT_NUB && global.settings.exportMouse) { std::cout << "left nub click\n"; //std::cout << "left nub click\n"; handleNubClick(global.settings.leftNubClickMode, e.value, global.mouse, global.gamepad, global.settings); if (global.settings.exportGamepad) { global.gamepad->send(EV_KEY, BTN_THUMBL, e.value); global.gamepad->send(EV_SYN, 0, 0); } } else if (role == ROLE_RIGHT_NUB && global.settings.exportMouse) { std::cout << "right nub click\n"; //std::cout << "right nub click\n"; handleNubClick(global.settings.rightNubClickMode, e.value, global.mouse, global.gamepad, global.settings); if (global.settings.exportGamepad) { global.gamepad->send(EV_KEY, BTN_THUMBR, e.value); Loading Loading @@ -501,6 +514,12 @@ SettingHandlerMap const SETTING_HANDLERS = { } }, { "nubs.right.click", [](std::string const& value, Settings& settings) { settings.rightNubClickMode = parseNubClickMode(value); } }, { "altmode.start.button", [](std::string const& value, Settings& settings) { settings.startButton = parseAltMode(value); } }, { "altmode.right.trigger", [](std::string const& value, Settings& settings) { settings.rightTrigger = parseAltMode(value); } } }; Loading Loading @@ -534,6 +553,15 @@ void loadConfig(std::string const& filename, Settings& settings) { std::cerr << "Invalid line in config file: " << line << std::endl; } } /* Apply "Alt Keys" mapping configuration */ if (settings.startButton == Settings::LEFT_ALT) global.behaviors->gpmap2(KEY_LEFTALT, BTN_START, &global.Alt.left, &global.Alt); else global.behaviors->gpmap2(KEY_RIGHTALT, BTN_START, &global.Alt.right, &global.Alt); if (settings.rightTrigger == Settings::LEFT_ALT) global.behaviors->gpmap2(KEY_LEFTALT, BTN_TR2, &global.Alt.left, &global.Alt); else global.behaviors->gpmap2(KEY_RIGHTALT, BTN_TR2, &global.Alt.right, &global.Alt); } Settings::NubAxisMode parseNubAxisMode(std::string const& str) { Loading @@ -558,6 +586,17 @@ Settings::NubClickMode parseNubClickMode(std::string const& str) { } } Settings::AltMode parseAltMode(std::string const& str) { std::string s(str); std::transform(s.begin(), s.end(), s.begin(), tolower); auto iter = ALT_MODES.find(s); if(iter == ALT_MODES.end()) { return Settings::LEFT_ALT; } else { return iter->second; } } void handleNubAxis(Settings::NubAxisMode mode, int value, Mouse* mouse, UinputDevice* gamepad, Settings const& settings) { switch(mode) { case Settings::MOUSE_X: Loading