Gamepad to Keyboard/mouse/xbox360(gamepad) emulator
- Based on code by: Kris Henriksen and fake Xbox code from: https://github.com/Emanem/js2xbox
- Modified to use SDL2 by: Nikolai Wuttke & Shanti Gilbert for https://github.com/EmuELEC/EmuELEC
- Interactive text entry added by Robin Duxfield
- Mostly a complete rewrite by Jacob Smith
gptokeyb2 is a fairly big rewrite of gptokeyb. It uses a finite state machine (FSM) and a better configuration system. The new FSM allows much more complex control schemes, allowing greater possibilities in controlling ports.
Features:
- multiple controller layouts that can be moved between.
- customizable text input engine
While gptokeyb2 has a lot more flexibility, it is also backwards compatible with gptokeyb, allowing an easy drop in replacement of the older program without any extra work.
gptokeyb2 depends on SDL2 and libevdev. On Debian, you can install them using apt install libsdl2-dev libevdev-dev. To build for ARM devices using cross-compilation, you can use one of the provided toolchains in cmake/toolchains by adding argument -DCMAKE_TOOLCHAIN_FILE=<path to toolchain>.
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=[Release/Debug]
cmake --build .
strip gptokeyb2./gptokeyb2 "program" -c "controls.ini" &
./program
kill -9 $(pidof gptokeyb2)[config]
deadzone_triggers = 3000
mouse_scale = 6114
mouse_delay = 16
mouse_slow_scale = 30
deadzone_mode = axial
deadzone = 1000
deadzone_scale = 7
deadzone_delay = 16
[controls]
# Clear any defaults
overlay = clear
# Scroll by this amount.
mouse_wheel_amount = 3
a = mouse_left # Mouse Left
b = mouse_right # Mouse Right
x = s # Stop
y = g # Guard
l1 = ctrl # Force attack
l2 = shift # Add to selection
r1 = mouse_slow # Slow mouse
r2 = x # Scatter
back = hold_state hotkey # back + button combos
up = 1
down = 3
left = 4
right = 2
left_analog = mouse_movement
right_analog = arrow_keys repeat
[controls:hotkey]
overlay = parent
# We get this from above.
# mouse_wheel_amount = parent
l1 = n # Select next unit
l2 = e # Select everything on screen
r1 = tab # Show/Hide sidebar
r2 = home # Center screen on selection
right_analog_left = clear
right_analog_right = clear
right_analog_up = mouse_wheel_up repeat
right_analog_down = mouse_wheel_down repeat
left_analog = absolute_mouse_movement
# how many pixels of deflection before we move the pointer
absolute_deadzone = 3
# default is zero but set to some other angle if you have a rotated screen
absolute_rotate = 0
# we hardcode a 1280x960 screen here so 640x480 is dead center
absolute_center_x = 640
absolute_center_y = 510
# how many pixels is maximum deflection
absolute_step = 350
[controls:analog_0]
# Controls for devices with 0 analog sticks.
overlay = controls
# Toggle to dpad_mouse
r1 = push_state dpad_mouse
up = 1
down = 3
left = 4
right = 2
[controls:dpad_mouse]
overlay = controls
# Toggle to back
r1 = pop_state
dpad = mouse_movement