Skip to content

Releases: TeamOpenFIRE/OpenFIRE-Firmware

OpenFIRE Firmware Public Release 6.0 - White Valkyrja

24 May 16:19
14d0027

Choose a tag to compare

The Big Overhaul Release!

And a long time coming, too.

This release is a big one for many reasons. After nearly a year of working on refactoring the app and the firmware, and two weeks worth of public testing and further improvements to the UX, I am very proud to finally bring OpenFIRE Firmware v6.0 to the general public!

Important

OpenFIRE Firmware v6.0 ONLY WORKS WITH APP v3.0 AND ONWARDS

Due to several fundamental changes on the communication between app and firmware, all old stable Firmware releases are rendered incompatible. However, to compensate for this, the new App will prompt the user if they would like it to automatically reboot the requested board if it's detected to be on an incompatible (earlier) version, so you shouldn't need to disassemble your lightgun to access the BOOTSEL button!

Caution

Expect to lose ALL PREVIOUSLY SAVED DATA on upgrade! This includes Saved Calibration Profiles, any current Custom Pin Layouts, and Gun Settings.

With how the communication protocol between app and firmware is built to be futureproof, we hope this will be the only significantly breaking change for the foreseeable future.

This changelog could go on for miles, so only the major highlights are listed below; if you want to get the lowdown on what exactly has changed, check out the commit diff between this and the last release!

Changelog

New Platforms:

  • With the SDK core bumped to the latest version as of writing, 4.5.4, RP2350 boards are now supported!
    • These haven't been tested yet (none of us currently own Pico 2 boards), but since RP2350 is source-compatible, it should be roughly identical in functionality and performance save for some compiler and architectural improvements (though performance has already been maximized even for RP2040 boards).
    • The refactored source code can also take into account the larger GPIO pool of the larger 2350B variant, so it's future-proofed even against those boards.
  • For developers, the shared resource TeamOpenFIRE/OpenFIRE-Boards can be used to easily add new boards and have it be reflected in both halves of the project with very little modification; just bump the submodule versions in each repo for the changes to be reflected!
  • For fans of the MiSTer ecosystem, OpenFIRE support has been officially merged into the main project; starting from this version (and assuming an up-to-date MiSTer release), just plug the gun in and it will automatically switch into a MiSTer-compatible mode with a gamepad layout tailored specifically to the platform!
    • As of now, the setup is subject to the limitations of the MiSTer platform - so you'll have to calibrate against the screen dimensions on a per-core basis and map the gun for each core you want to use it with. These are not something we can address without fundamental changes to the MiSTer's UI/UX, which is beyond the scope of this project.
    • Proper Display Calibration currently has to be done against the desired display from a different device - ergo, a Pi or PC running on the same display that the MiSTer will be plugged into - but we hope to release a companion script or application at some point in the future to allow for at least calibrating from the MiSTer itself without any extra PC needed. We also welcome other contributors to help with this idea!

New Functions:

  • Wii Cam Clock will allow for generating the necessary clock pulse for raw Wiimote cameras only, which normally would require an external quartz crystal.
    • This effectively means that (assuming voltage is wired to 3V3 Out), a standalone Wii Camera can be wired directly to an RP2040 or RP2350 board!
  • Though not necessarily new, the I2C Peripherals functions are now decoupled from being an implicit activation of OLED Displays. Essentially, more I2C Peripherals can be added and implemented into OpenFIRE using this pair! OLED Display is now a separate toggle that activates it as before, assuming a proper Peripherals pins pair is correctly mapped.
    • OLED Display can now choose between the stock address 0x3C and the alt address 0x3D, which some boards may be mapped to. This can be useful if your display doesn't show when toggled even after a reboot.
  • NeoPixel strands can now invert the position of "Static" pixels - so instead of the default "First N pixels", it can be set to "Last N pixels" are statically illuminated.

Performance Enhancements:

  • Input has been refined to use a much more stable and thread-safe queuing system - in summary, button signals aren't immediately sent with each press, and each camera poll does not individually send a unique mouse pos update, but rather the changes are queued and sent at the end of each button poll on the second core. In effect, button inputs should be sent significantly more consistently!
    • As a side effect, when using gamepad output mode with an analog stick, OpenFIRE can in fact send a true, near-precisely 1000hz worth of inputs in real world usage! Because of how USB works (and our composite device setup, i.e. the ability to output as three devices at once), this obviously gets split when used across the separate devices, i.e. the mouse and keyboard also have to take slices of that 1khz polling budget from the gamepad slot, but this should satisfy those who decide to put OF through a controller benchmark!
  • Other various optimizations have been made to reduce stalling and potential bottlenecks in normal GunMode usage.

OLED Display Enhancements:

  • OLED display should now be run exclusively from the primary core whenever possible, which should resolve (occasional/intermittent) screen glitches causing the display to shift its contents strangely that could be observed in previous versions.
  • When idling, the display will now update the top ticker to display current temperature, if any is currently installed.
  • When in serial handoff mode with applications that send life updates, when in Life Bar mode, the Life Bar will now scale with whatever the maximum value is provided from the application (for those where a value of "100" isn't necessarily 100% for whatever reason).

Button Mapping:

Every function of the available buttons can now be individually mapped!

  • Users can customize on-screen and off-screen functions of each button, as well as the mappings when in gamepad mode.
  • Whenever signals are sent over serial that modify the current button mapping, these changes will reference the currently saved button mapping, and will reset on either new Start or End signals.
  • Fixes have also been implemented so that the order of button map modifier serial signals, like setting Pedal modes or the Offscreen Button setting, shouldn't matter and will apply correctly regardless.
  • Start and Select button mappings will now always be relative to the currently assigned Player Number as assigned from Serial XR# commands, with the "Player-relative Start/Coin Key" setting.
    • By default, every gun (unless an alt Simple USB ID is set, e.g. templates for P2/P3/P4 IDs) will start with Player 1 appropriate mappings: Start = 1, Select = 5
    • When an XR# command is received, the function of buttons mapped to "Player-relative Start/Coin Key" will change to reflect this mapping.
    • This mapping persists even when modifying layouts further, e.g. temporarily modifying functionality of Pedal or setting Offscreen Button Mode.
    • This mapping is reset when receiving a new Start or End signal, and resets upon boot.
  • If an analog stick is available, it can now be set to either operate as a gamepad's analog stick (default), or emulate either a keyboard's arrow keys array or gamepad directional buttons.

Serial Enhancements:

  • R-type commands are now supported for setting custom "pulse" On/Off times for either Solenoid or Rumble, depending on what the connected FFB distributor calls for.
    • These settings only take effect during Serial Handoff mode, and only for "pulse" type signals (either F0.2.x or F1.2.x).
    • Overrides are reset after every Start and End signal.
  • Calibration Profiles can now have an Aspect Ratio preset which determines the stretch factor used when 4:3 Correction mode is enabled.
  • Solenoid events that are stuck on for more than 2s will now be automatically shut off, in case the FFB distributor has glitched in some way.
  • When using a temperature sensor, Solenoid events will be filtered to accept every other Solenoid ON command if it's crossed the Warning threshold, and will be filtered out entirely when passed the Shutoff threshold.

Other Fixes:

  • Gun will no longer wait an awkward amount of time if docking to the app on a first boot.
  • Lots, and lots, and lots of code cleanup.
  • Calibration will no longer sometimes use a wrong value due to the order of saving values vs. cursor movement - calibration when docked has no cursor movement wait at all.
  • Removed Herobrine.

Installation

Download the firmware file that corresponds to your microcontroller - if it's not listed, you may have luck with either one of the two generic images, but you'll have to map your controls manually. If you'd like to have your board supported, send a PR to TeamOpenFIRE/OpenFIRE-Boards!
For first-time installation, plug in your microcontroller board while holding the BOOTSEL button to enter bootloader mode (this also happens if your board has no code loaded on it yet) - it will appear as a removable drive named RPI-RP2. ...

Read more

OpenFIRE Public Release 5.2 - Dawn

03 Sep 19:19

Choose a tag to compare

Blinkenlights and Serial Fixes

  • Builtin LEDs support was extended to Raspberry Pi Pico (non-W) boards, using its green User LED with interpolated on/off output based on the color information given.
  • Fixed player start/select button not being reflected properly in offscreen button presses.
  • When Low Buttons Mode is enabled, toggling Offscreen Button Mode will change the onscreen A/B buttons to Mouse Buttons 4/5. This primarily allows Virtua Cop 3 to be playable with a single button gun + pedal.
    • As far as I'm aware, VC3 is the only game that doesn't support true offscreen reload and has more than a single button layout (trigger, reload, weapon swap, E.S. Pedal), so this shouldn't affect other games substantially.
  • LED tests (initiated from the App) are now corrected, and will reflect the color across all (non-static) LED devices rather than just fourpins.
  • Calibration mode saves current step info before mouse cursor movement, not after, which should reduce chances of cali info being incorrect due to fast gun movement in calibration.
  • Displays will now display a Mamehook indicator on single element/blank layouts when serial handoff mode is invoked from the PC.
  • Rumble pulses (initiated from serial/Mamehook) will respect and use the specified rumble strength setting for the rise and falloff stages of each pulse.
  • Solenoid pulses (initiated from serial/Mamehook) will always initiate a normal solenoid event cycle using the gun's solenoid timer settings.
    • This will allow for, e.g. using a solenoid in games like Operation Wolf which uses a motor, and thus feedback events would either be unsafe or feel awkward when used as solenoid feedback.
  • Serial LED commands of the same color channel now correctly overwrites static states, fixing situations where color pulses would not work if the same color had already been set to a fixed value before.

Installation

Download the firmware file that corresponds to your microcontroller - if it's not listed, you may have luck with the generic image, but you'll have to map your controls manually.
For first-time installation, plug in your RP2040 board while holding the BOOTSEL button to enter bootloader mode (this also happens if your boards has no code loaded on it yet) - it will appear as a removable drive named RPI-RP2. Now simply drag'n'drop your chosen .UF2 file to the drive, let it copy, and it will automatically unmount and reboot into OpenFIRE! You can now setup the gun as you please from the OpenFIRE App.

For any future firmware updates, you can simply connect ("dock") the gun to the OF App, and click the Reboot to Bootloader option in the Gun Tests tab.

Board files are as follows:

  • adafruitItsy: Adafruit ItsyBitsy RP2040 - Samco Carrier Boards Layout (2.0 [default] or 1.1 [set preset in app])
  • adafruitKB2040: Adafruit "Keeboar" KB2040 - Other Carrier Boards Layout
  • arduinoNano: Arduino Nano RP2040 Connect
  • rpipico: Raspberry Pi Pico (non-W) and clones thereof
  • rpipicow-noBT: Raspberry Pi Pico W, USB-only
  • vccgndYD: VCC-GND YD RP2040 (aka: the Chinese Pico clone with embedded NeoPixel)
  • waveshareZero: Waveshare RP2040 Zero
  • generic: Generic RP2040, may or may not work if your board isn't listed above.

Pico W Bluetooth binaries are for development purposes only, as they do not work currently and will only be made available in the automated build artifacts on the repo.

OpenFIRE Public Release 5.1 - Heartful!

26 Jul 18:09

Choose a tag to compare

Tweaks and Seedlings

As with the last RC hotfix, this contains the adafruitItsy fix for Samco 1.1 boards. This also includes changes to some of the Serial commands to be more inline with and maintain compatibility with other existing systems. Namely:

  • XA analog mode types are now part of M0 commands, where M0x0 sets outputs to Mouse & Keyboard, and M0x1 sets it to Gamepad mode, with the camera mapped to the right stick. To set the camera to the left stick, append an L to the command (M0x1L)
  • M2 now sets Pedal 1 functionality: x0 uses Mouse 4 as before, x1 sets it to Right Mouse, and x2 sets it to Middle Mouse. These are reset whenever a Serial Exit command E is detected.
  • M6 sets either Solenoid or Rumble FF (x0 or x1, respectively).

Also this release contains fixes for calibration that's committed by the PC (i.e. the Profile Cali buttons in the OpenFIRE App) so that force feedback isn't incidentally activated in a way that's potentially dangerous, and that the trigger mouse button isn't kept depressed by a dual core snafu. There are also some additions in the backend to prepare for future cali-related additions. :)

Installation

Download the firmware file that corresponds to your microcontroller - if it's not listed, you may have luck with the generic image, but you'll have to map your controls manually.
For first-time installation, plug in your RP2040 board while holding the BOOTSEL button to enter bootloader mode (this also happens if your boards has no code loaded on it yet) - it will appear as a removable drive named RPI-RP2. Now simply drag'n'drop your chosen .UF2 file to the drive, let it copy, and it will automatically unmount and reboot into OpenFIRE! You can now setup the gun as you please from the OpenFIRE App.

For any future firmware updates, you can simply connect ("dock") the gun to the OF App, and click the Reboot to Bootloader option in the Gun Tests tab.

Board files are as follows:

  • adafruitItsy: Adafruit ItsyBitsy RP2040 - Samco Carrier Boards Layout (2.0 [default] or 1.1 [set preset in app])
  • adafruitKB2040: Adafruit "Keeboar" KB2040 - Other Carrier Boards Layout
  • arduinoNano: Arduino Nano RP2040 Connect
  • rpipico: Raspberry Pi Pico (non-W) and clones thereof
  • rpipicow-noBT: Raspberry Pi Pico W, USB-only
  • vccgndYD: VCC-GND YD RP2040 (aka: the Chinese Pico clone with embedded NeoPixel)
  • waveshareZero: Waveshare RP2040 Zero
  • generic: Generic RP2040, may or may not work if your board isn't listed above.

Pico W Bluetooth binaries are for development purposes only, as they do not work currently and will only be made available in the automated build artifacts on the repo.

OpenFIRE Public Release (Candidate) 5 - Heartful!

06 Jul 06:49
6bb2da8

Choose a tag to compare

Misc Fixes

Turns out the way the files were being compiled, some boards weren't applying certain default pins properly as it assumed the firmware wasn't compiled to support them! Oops. So this mainly fixes RGB and TMP pins not being mapped by default on Picos.

  • It's possible that having TMP enabled without a real sensor installed could cause some wacky readings to happen, but in the short time I've tested, the values being read with a vacant analog pin are relatively safe - it'll just read as being <5 deg C for the most part with no underflow.

Also, thanks to @lemmingDev , there's a (very basic) Rumble-based autofire solution for users with Rumble-based Force Feedback enabled in tandem with it! Though the feel of rumble-based sustained fire should be improved in the future, at least the setting will be somewhat consistent between it and normal Solenoid functionality.

EDIT: July 8th 2024 @ 5:39 PM, the adafruitItsy board file was fixed for Samco 1.1 users, so the camera should be powered properly.

Installation

Download the firmware file that corresponds to your microcontroller - if it's not listed, you may have luck with the generic image, but you'll have to map your controls manually.
For first-time installation, plug in your RP2040 board while holding the BOOTSEL button to enter bootloader mode (this also happens if your boards has no code loaded on it yet) - it will appear as a removable drive named RPI-RP2. Now simply drag'n'drop your chosen .UF2 file to the drive, let it copy, and it will automatically unmount and reboot into OpenFIRE! You can now setup the gun as you please from the OpenFIRE App.

For any future firmware updates, you can simply connect ("dock") the gun to the OF App, and click the Reboot to Bootloader option in the Gun Tests tab.

Board files are as follows:

  • adafruitItsy: Adafruit ItsyBitsy RP2040 - Samco Carrier Boards Layout (2.0 [default] or 1.1 [set preset in app])
  • adafruitKB2040: Adafruit "Keeboar" KB2040 - Other Carrier Boards Layout
  • arduinoNano: Arduino Nano RP2040 Connect
  • rpipico: Raspberry Pi Pico (non-W) and clones thereof
  • rpipicow-btBETA: Raspberry Pi Pico W, Bluetooth-enabled (BETA)
  • rpipicow-noBT: Raspberry Pi Pico W, USB-only
  • vccgndYD: VCC-GND YD RP2040 (aka: the Chinese Pico clone with embedded NeoPixel)
  • waveshareZero: Waveshare RP2040 Zero
  • generic: Generic RP2040, may or may not work if your board isn't listed above.

OpenFIRE Public Release (Candidate) 4 - Heartful!

26 Jun 23:35
7efd05d

Choose a tag to compare

SAMCO Fix

SAMCO 1.1 boards requires that pin 5 be set to an output and normally high, so versions after this release should allow the camera to work on ItsyBitsy builds in either SAMCO 1.1 or 2.0. With the corresponding app update introducing a SAMCO 1.1 layout preset, there should be no need for separate Adafruit ItsyBitsy builds for each board anymore.

To clarify, OpenFIREfw.adafruitItsy.uf2 is the default release for both SAMCO carrier boards. The default pinout is setup for Samco 2.0 by default; if you're using a Samco 1.1 board, you'll need to update the pinout in the app (simply choose SAMCO 1.1 from the preset layouts drop down in the bottom right-hand corner of the board layout screen).

EDIT: Binaries have been updated July 3rd @ 7:30 PM EST to resolve a minor compiler snafu where some boards weren't applying all of their default presets on boot (mainly rpipico's 4-pin & TMP pins). If you aren't using a TMP, you may want to enable custom pins and unmap Pin 28 from the app to avoid irregular pin reads. Also, binaries have been updated again @ 8:33 PM EST to resolve issues where static NeoPixels weren't being lit when it matched the count of neopixels in a chain.

Installation

Download the firmware file that corresponds to your microcontroller - if it's not listed, you may have luck with the generic image, but you'll have to map your controls manually.
For first-time installation, plug in your RP2040 board while holding the BOOTSEL button to enter bootloader mode (this also happens if your boards has no code loaded on it yet) - it will appear as a removable drive named RPI-RP2. Now simply drag'n'drop your chosen .UF2 file to the drive, let it copy, and it will automatically unmount and reboot into OpenFIRE! You can now setup the gun as you please from the OpenFIRE App.

For any future firmware updates, you can simply connect ("dock") the gun to the OF App, and click the Reboot to Bootloader option in the Gun Tests tab.

Board files are as follows:

  • adafruitItsy: Adafruit ItsyBitsy RP2040 - Samco Carrier Boards Layout (2.0 [default] or 1.1 [set preset in app])
  • adafruitKB2040: Adafruit "Keeboar" KB2040 - Other Carrier Boards Layout
  • arduinoNano: Arduino Nano RP2040 Connect
  • rpipico: Raspberry Pi Pico (non-W) and clones thereof
  • rpipicow-btBETA: Raspberry Pi Pico W, Bluetooth-enabled (BETA)
  • rpipicow-noBT: Raspberry Pi Pico W, USB-only
  • vccgndYD: VCC-GND YD RP2040 (aka: the Chinese Pico clone with embedded NeoPixel)
  • waveshareZero: Waveshare RP2040 Zero
  • generic: Generic RP2040, may or may not work if your board isn't listed above.

OpenFIRE Public Release (Candidate) 3 - Heartful!

18 Jun 14:25
d2265ce

Choose a tag to compare

Welcome to OpenFIRE!-deux

This RC fixes a position range oversight that mainly affected Windows users, and player ID (when it actually correlates to Player Number) now properly reflects the keyboard mappings at boot, rather than needing an XR# signal - though you may still want to use the serial commands offered to get the full flexibility of the OpenFIRE system!

The only currently known issues are within the Bluetooth support, as it's still early and a work-in-progress - it only supports the Pico W, and using the Bluetooth-enabled firmware image over USB will cause the board to hang. It also may not re-sync to the PC without manually reconnecting to it. If anyone with more experience of Arduino/Pico Bluetooth could offer assistance in this area, it would be appreciated.

Update: Binaries have been updated @ June 19th, 12:11 AM EST with some backend tweaks to the calibration, and fixes for the gamepad output under Windows.

Installation

Download the firmware file that corresponds to your microcontroller - if it's not listed, you may have luck with the generic image, but you'll have to map your controls manually.
For first-time installation, plug in your RP2040 board while holding the BOOTSEL button to enter bootloader mode (this also happens if your boards has no code loaded on it yet) - it will appear as a removable drive named RPI-RP2. Now simply drag'n'drop your chosen .UF2 file to the drive, let it copy, and it will automatically unmount and reboot into OpenFIRE! You can now setup the gun as you please from the OpenFIRE App.

For any future firmware updates, you can simply connect ("dock") the gun to the OF App, and click the Reboot to Bootloader option in the Gun Tests tab.

Board files are as follows:

  • adafruitItsy: Adafruit ItsyBitsy RP2040 - Samco Carrier Boards Layout
  • adafruitKB2040: Adafruit "Keeboar" KB2040 - Other Carrier Boards Layout
  • arduinoNano: Arduino Nano RP2040 Connect
  • rpipico: Raspberry Pi Pico (non-W) and clones thereof
  • rpipicow-btBETA: Raspberry Pi Pico W, Bluetooth-enabled (BETA)
  • rpipicow-noBT: Raspberry Pi Pico W, USB-only
  • vccgndYD: VCC-GND YD RP2040 (aka: the Chinese Pico clone with embedded NeoPixel)
  • waveshareZero: Waveshare RP2040 Zero
  • generic: Generic RP2040, may or may not work if your board isn't listed above.

OpenFIRE Public Release (Candidate) 2 - Heartful!

11 Jun 17:12
580c7f1

Choose a tag to compare

Welcome to OpenFIRE!

insert music link here

After nearly a year of cumulative work, this is the first second Release Candidate of the OpenFIRE project. This is near-final initial release code as far as features and performance are concerned, but there might be some bugs hidden in certain odds and ends - so if you run into any problems, don't hesitate to make an issue about it!

The only currently known issues are within the Bluetooth support, as it's still early and a work-in-progress - it only supports the Pico W, and using the Bluetooth-enabled firmware image over USB will cause the board to hang. It also may not re-sync to the PC without manually reconnecting to it. If anyone with more experience of Arduino/Pico Bluetooth could offer assistance in this area, it would be appreciated.

Installation

Download the firmware file that corresponds to your microcontroller - if it's not listed, you may have luck with the generic image, but you'll have to map your controls manually.
For first-time installation, plug in your RP2040 board while holding the BOOTSEL button to enter bootloader mode (this also happens if your boards has no code loaded on it yet) - it will appear as a removable drive named RPI-RP2. Now simply drag'n'drop your chosen .UF2 file to the drive, let it copy, and it will automatically unmount and reboot into OpenFIRE! You can now setup the gun as you please from the OpenFIRE App.

For any future firmware updates, you can simply connect ("dock") the gun to the OF App, and click the Reboot to Bootloader option in the Gun Tests tab.

Board files are as follows:

  • adafruitItsy: Adafruit ItsyBitsy RP2040 - Samco Carrier Boards Layout
  • adafruitKB2040: Adafruit "Keeboar" KB2040 - Other Carrier Boards Layout
  • arduinoNano: Arduino Nano RP2040 Connect
  • rpipico: Raspberry Pi Pico (non-W) and clones thereof
  • rpipicow-btBETA: Raspberry Pi Pico W, Bluetooth-enabled (BETA)
  • rpipicow-noBT: Raspberry Pi Pico W, USB-only
  • vccgndYD: VCC-GND YD RP2040 (aka: the Chinese Pico clone with embedded NeoPixel)
  • waveshareZero: Waveshare RP2040 Zero
  • generic: Generic RP2040, may or may not work if your board isn't listed above.