Skip to content

Firmware for the vsFIGHTER controller by Leaf Cutter Labs , supporting XInput and Nintendo Switch.

Notifications You must be signed in to change notification settings

travmaa/vsFIGHTER-Firmware

 
 

Repository files navigation

vsFIGHTER Firmware

Firmware for the vsFIGHTER by Leaf Cutter Labs supporting XInput (PC, Android, Raspberry Pi, etc.) and Nintendo Switch. Works with both the standard and Hitbox variants of the vsFIGHTER.

Usage

vsFIGHTER layout

The vsFIGHTER uses a standard 8-button fightstick layout with 4 additional tact switches for the auxiliary buttons. Here is a button mapping table for the supported input modes:

Generic XInput Switch
P1 X Y
P2 Y X
P3 RB R
P4 LB L
K1 A B
K2 B A
K3 RT ZR
K4 LT ZL
LS LS LS
RS RS RS
Select Back -
Start Start +

Any references to these buttons will use the Generic labels in this documentation.

Home Button

There is no dedicated Home/Logo button on the vsFIGTHTER, but you can activate it via the SELECT + START + UP button combination.

Input Modes

To change the input mode, hold one of the following buttons as the controller is plugged in:

  • SELECT for Nintendo Switch
  • START for XInput

Input mode is saved across power cycles.

D-Pad Modes

You can switch between the 3 modes for the D-Pad while the controller is in use by pressing one of the following combinations:

  • SELECT + START + DOWN - D-Pad
  • SELECT + START + LEFT - Emulate Left Analog stick
  • SELECT + START + RIGHT - Emulate Right Analog stick

D-Pad mode is saved across power cycles.

SOCD Modes

Simultaneous Opposite Cardinal Direction (SOCD) cleaning will ensure the controller doesn't send invalid directional inputs to the computer/console, like Left + Right at the same time. There are 3 modes to choose from while the controller is in use by pressing one of the following combinations:

  • LS + RS + UP - Up Priority mode: Up + Down = Up, Left + Right = Neutral (Hitbox behavior)
  • LS + RS + DOWN - Neutral mode: Up + Down = Neutral, Left + Right = Neutral
  • LS + RS + LEFT - Last Input Priority (Last Win): Hold Up then hold Down = Down, then release and re-press Up = Up. Applies to both axes.

SOCD mode is saved across power cycles.

Performance

Input latency is tested using the methodology outlined at WydD's outstanding inputlag.science website, using the default 1000Hz (1ms) polling rate in the firmware.

XInput Mode Up Priority SOCD Neutral SOCD Last Win SOCD
polling 1 ms 1 ms 1 ms
min 0.56 ms 0.56 ms 0.56 ms
max 1.65 ms 1.59 ms 1.65 ms
avg 0.96 ms 0.94 ms 0.93 ms
stdev 0.28 ms 0.27 ms 0.28 ms
% on time 95.26% 95.38% 95.46%
%1f skip 4.74% 4.62% 4.54%
%2f skip 0% 0% 0%

Installation

NOTE: Any saved modes/options may be cleared when reflashing the controller!

An update package is provided that uses PowerShell and a bundled version of avrdude to handle flashing the microcontroller. If you're familiar with this process or on Linux/Mac, you can just extract the .hex file and flash it manually.

Using the Update Script:

Follow these steps to update your firmware:

  1. Download and extract the latest firmware update package from Releases.
  2. Press the reset button twice quickly on the bottom of your vsFIGHTER. You'll need a small screwdriver or toothpick to press it. This will put the microcontroller into bootloader mode for about 10 seconds.
  3. Run the update.bat file from the extracted firmware update folder. Make sure you do this within a few seconds of resetting the board otherwise it will fail.

Manual Installation:

You will need avrdude for your platform and the COM port of your board when in bootloader mode. Run the following command, replacing $port with your COM port (COM10 for example). Have this command ready and run it right after resetting into bootloader mode with the double press:

avrdude -v -Cavrdude.conf -patmega32u4 -cavr109 -P $port -b57600 -D -Uflash:w:vsFIGHTER-Firmware.hex:i

If the firmware filename is different, make sure to update it before running the command...and that's it! If all went well you should see a success message at the end like avrdude.exe: 15206 bytes of flash verified and avrdude.exe done. Thank you. If you have issues, try running through the steps again or opening an issue.

Changelog

v1.0.2

  • Fixed Switch LS/RS Y-axes being inverted
  • Should load reasonable default if invalid values are retrieved from EEPROM

v1.0.1

  • Fixed Up Priority (Hitbox) SOCD behavior
  • Fixed mode activators (Select + Start and LS + RS) not registering inputs when pressed without selecting a mode
  • Slight latency reduction

v1.0.0

Initial release supporting the following:

  • XInput (PC, Android, RPi, etc.) and Nintendo Switch input modes
  • D-Pad mode selection for emulation of Left or Right analog stick
  • Supports 3 SOCD cleaning methods
  • Options are saved to EEPROM and persist across power cycles
  • 1000 Hz (1ms) polling rate on PC platforms

About

Firmware for the vsFIGHTER controller by Leaf Cutter Labs , supporting XInput and Nintendo Switch.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 66.7%
  • C++ 32.6%
  • Other 0.7%