Skip to content

Multiplatform GPD WinControls replacement (command-line)

License

Notifications You must be signed in to change notification settings

OpenWinControls/OpenWinControlsCLI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenWinControlsCLI

Multiplatform GPD WinControls replacement, command-line version.

Features

  • Import and export mappings from/to yaml files
  • Pretty-print current firmware settings
  • Print a list of supported keycodes
  • Allows to remap all buttons
  • Allows to change controller settings, like deadzone, leds etc.., where available

Known device firmware bugs (must be fixed by GPD)

Win5

  • RT and LT ignore the keycode value in firmware config
  • All back button modes don't work as expected
  • Back buttons send F14 (for l4) and F15 (for r4) keycodes in addition to the user defined keycode, disrupting the correct functionality of the macro mode
  • Controller may softlock itself when entering sleep mode by the OS, no longer processing commands, requiring the user to manually switch mode back and forth using the physical button on device
  • Config is not written to the controller if OS enters sleep mode soon after write command is issued, wait 10-15 secs
  • Mappings may be reverted to a previous state, after device reboot/poweroff, in some unknown circumstances

Linux

Root permissions are required.

To run without root, allow access to the controller:

Create the file 70-gpd-controller.rules in /etc/udev/rules.d

SUBSYSTEMS=="usb", ATTRS{idVendor}=="2f24", ATTRS{idProduct}=="0135", TAG+="uaccess"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2f24", ATTRS{idProduct}=="0137", TAG+="uaccess"

Load the new rules:

sudo udevadm control --reload-rules && sudo udevadm trigger

Usage

OpenWinControlsCLI 2.0

Usage: OpenWinControlsCLI command [args]

Some options only apply to V1 or V2, incompatible options, if provided, are ignored.

Commands:

  help
    show help

  keys
    print supported keyboard[&mouse] mode keys

  xkeys
    print supported xinput mode keys

  set option value [..]
    set firmware settings
    Example: set du w dl space [..]

  export file_name.yaml
    export current firmware mapping to a yaml file to share with others or apply back later

  import file_name.yaml
    apply mapping from file

  print
    Print current firmware settings

Options:

  du [key]
    Assign dpad up a key

  dd [key]
    Assign dpad down a key

  dl [key]
    Assign dpad left a key

  dr [key]
    Assign dpad right a key

  a [key]
    Assign A button a key

  b [key]
    Assign B button a key

  x [key]
    Assign X button a key

  y [key]
    Assign Y button a key

  lu [key]
    Assign left analog up a key

  ld [key]
    Assign left analog down a key

  ll [key]
    Assign left analog left a key

  lr [key]
    Assign left analog right a key

  st [key]
    Assign start button a key

  sl [key]
    Assign select button a key

  mu [key]
    Assign menu button a key

  l1 [key]
    Assign L1 button a key

  l2 [key]
    Assign L2 button a key

  l3 [key]
    Assign L3 button a key

  r1 [key]
    Assign R1 button a key

  r2 [key]
    Assign R2 button a key

  r3 [key]
    Assign R3 button a key

  xdu [xinput button]
    Reassign dpad up button

  xdd [xinput button]
    Reassign dpad down button

  xdl [xinput button]
    Reassign dpad left button

  xdr [xinput button]
    Reassign dpad right button

  xa [xinput button]
    Reassign A button button

  xb [xinput button]
    Reassign B button button

  xx [xinput button]
    Reassign X button button

  xy [xinput button]
    Reassign Y button button

  xlu [xinput button]
    Reassign left analog up button

  xld [xinput button]
    Reassign left analog down button

  xll [xinput button]
    Reassign left analog left button

  xlr [xinput button]
    Reassign left analog right button

  xru [xinput button]
    Reassign right analog up button

  xrd [xinput button]
    Reassign right analog down button

  xrl [xinput button]
    Reassign right analog left button

  xrr [xinput button]
    Reassign right analog right button

  xst [xinput button]
    Reassign start button button

  xsl [xinput button]
    Reassign select button button

  xmu [xinput button]
    Reassign menu button button

  xl1 [xinput button]
    Reassign L1 button button

  xl2 [xinput button]
    Reassign L2 button button

  xl3 [xinput button]
    Reassign L3 button button

  xr1 [xinput button]
    Reassign R1 button button

  xr2 [xinput button]
    Reassign R2 button button

  xr3 [xinput button]
    Reassign R3 button button

  l4 [key1,key2,key3..]
    Comma separated list of keys
    Assign L4 back button

  l4d [time1,time2..]
    Comma separated list of times
    Set L4 back button keys start time in milliseconds

  l4h [time1,time2..]
    Comma separated list of times
    Set L4 back button keys hold time in milliseconds

  r4 [key1,key2,key3..]
    Comma separated list of keys
    Assign R4 back button

  r4d [time1,time2..]
    Comma separated list of times
    Set R4 back button keys start time in milliseconds

  r4h [time1,time2..]
    Comma separated list of times
    Set R4 back button keys hold time in milliseconds

  rmb [mode]
    Set vibration intensity [0 = off, 1 = low, 2 = high]

  lc [value]
    Adjust left analog deadzone [-10, +10]

  lb [value]
    Adjust left analog boundary [-10, +10]

  rc [value]
    Adjust right analog deadzone [-10, +10]

  rb [value]
    Adjust right analog boundary [-10, +10]

  led [mode]
    Set shoulder buttons led mode [0 = off, 1 = solid, 2 = breathe, 3 = rotate]

  ledclr [R:G:B]
    Set shoulder buttons led color [0-255:0-255:0-255]

Notes:

  Controller V1 features:
     Support up to 4 key/time slots for back buttons macro.
     If more keys/times are provied, they will be ignored.
     The 4th time slot is special, it sets the whole macro start time.

  Controller V2 features:
     Support up to 32 key/time/hold slots for back buttons.

  Deadzone settings:
     This is composed of two values, center and boundary.
     Center refers to the deadzone itself, 0 is the default value from GPD, roughtly ~15%.
     A value of -10 removes the deadzone.
     Boundary refers to the circularity, 0 is the default value from GPD, roughtly ~13% average error.
     A value of -10 should lessen the average error on circularity tests.

How to build

git clone --recursive https://github.com/OpenWinControls/OpenWinControlsCLI
git submodule update --init --recursive
cmake -B build
make -C build

About

Multiplatform GPD WinControls replacement (command-line)

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project