Skip to content

13.40.16ex m71 (pre-release/release candidate)

Latest
Compare
Choose a tag to compare
@muchimi muchimi released this 27 Oct 02:30
· 1 commit to main since this release
4077866

Major new features in 13.40.16ex

  • New switch container (experimental): this container adds a slightly different way of mapping physical switches using the concept of switch positions and able to latch multiple buttons to the same container, attached to a primary button. The container makes it easier to setup two way, three-way and rotary buttons with multiple positions.

  • Axis curve can be applied to the input before any further processing and the curve is mode specific.

  • Conditions can be applied to the container or individual actions concurrently.

General feature set

  • Designed for home cockpits with a high count of mixed input devices from different manufacturers and mixed HID compliant controller types
  • Support for network based studio and stage management control systems like Korg, TouchOSC, OpenStage, Stream Deck, Loupe Deck using OSC (and if needed MIDI) protocols to work as game input controllers for axes and buttons and hats. These non-typical control systems easily provide GameGlass type experiences and support phones and tablets and networked touch screens, as well as fader / knob / button based media studio systems. As of m36, supports OSC output from GremlinEx at the API level.
  • Support for multiple concurrent networked GremlinEx instances for remote control
  • Support for complex keyboard combinations, including unusual keys like F13 to F25 and sophisticated trigger based on the latching of multiple and uncommon keys
  • Support for Microsoft Flight Simulator 2024 including RPN expressions. GremlinEx can control MSFS via Simconnect and a custom WASM module (must be added to the Community folder) and send linear and momentary actions from any GremlinEx triggers.
  • Includes a wide range of mapping functionality, and for more complex/logic based scenarios, user plugins for full python based scripting
  • Support for multiple TTS voices using the Microsoft Text to speech API including playback rates
  • Support for any audio file playback
  • Support for hierarchical modes
  • Support for VJOY (virtual joystick)
  • Support for Virtual gamepad X-Box 360 controller (via VIGEM) virtual outputs supporting games that only work with console controllers
  • Support for HIDHide to only expose mapped devices to the target application and work within the limitations of the game's understanding of multiple input controllers.
  • Sophisticated axis curving options including curving of input axis data and further filtering by individual mappings
  • Internal sorting of devices to your preference (note, this does not change Windows devices but changes how you interact with them within GremlinEx)
  • 64 bit / recent version of Python and Windows support
  • New containers and actions applicable to the most common input mapping use cases that can handle simple to very complex mapping for more difficult scenarios like gated axis and mapping of multi-way hardware switches that do not trigger in some positions. Containers group actions together and support an array of output features, such as chaining, sequence (macro), long/short press, axis trigger mapping based on gates and ranges and direction of movement.
  • Support for custom user scripts and actions using Python user plugins with enhanced decorators, including two way OSC communication for glass surface output.
  • Per device calibration and curvature tools, along with further curve axis refinements.
  • For linear inputs, advanced mapping through the gated axis action using a more visual programming of the axis range. Actions can be coded based on the movement of the input, gate crossing and what subrange was entered, and GremlinEx is aware of the direction of travel as well so triggers can be different based on the direction of travel.

Requirements

GremlinEx is written in Python and C++. It is self-contained as a packaged EXE that includes Python runtimes. Highly recommended to use HIDHide and VIGEM for additional functionality and hardware cockpit management. Requires VJOY and Windows x64 10 or 11.

It is highly recommended to use HIDHide along with GremlinEx to simplify game management and avoid detection conflicts in games.

Supported input devices

GremlinEx supports any DirectX (DirectInput) compliant HID controller which is most joysticks/throttles/wheels/pedals, up to 128 buttons, 8 axes and 4 hats each.
Gremlin also supports the OSC and MIDI protocols to enable over the network input from glass surfaces (via, for example, Touch/OSC, OSC/Pilot and open source software using the OSC protocol). While OSC and MIDI are music and stage protocols, the same controllers used for stage management are also very effective for game controls because they also use knobs, faders and buttons. Most are programmable and can be controlled via a touch screen which enables glass surfaces to be used by GremlinEx. Both protocols enable the use of StreamDeck and LoupeDeck and traditional MIDI controllers for input like the KORG midi and other pad control systems.

GremlinEx is vendor agnostic and does not require any vendor software provided the device reports to Windows as an HID joystick, or uses the OSC/MIDI protocols over UDP.

GremlinEx can also use another GremlinEx client on the network as input, itself connected to hardware inputs not visible by the host computer. This feature is solely for the purpose of supporting more complex home cockpit setups where more than one computer is involved and input ports are limited.

Supported output devices

GremlinEx supports VJOY virtual joysticks, VIGEM xbox virtual game controllers, the SimConnect API for MSFS and it can send keyboard and mouse events to applications running on the GremlinEx machine. GremlinEx also supports TTS (text to speech) and can play audio files based on triggers. GremlinEx can also send OSC commands via custom user scripts for two-way communication with controllers/glass surfaces.

License

GremlinEx is open source, for the community, based on prior work and other open source libraries. It is licensed via a GPL license.

Pre-release and RC

I use pre-releases to issue test versions that may include some bugs or proposed fixes to reported bugs. Once a pre-release is stable and mature enough, it will move to RC status.

Thanks for your patience.

Discord server:

I created a discord server for discussion to make tracking various questions and suggestions easier. Please continue to use issues in Github to report bugs/issues.

discord server

Documentation

Please consult the documentation. Documentation is still a work in progress.

Patches

(m71)

  • New: Tick container. The tick container is a container that triggers actions at regular ticks on an axis. The actions can be different based on the tick crossing direction.
  • New: Stepped Axis mode in Vjoy Remap. When attached to a button, this mode allows the action to set a VJOY axis value based on configurable ticks. The mapped button is the tick "up" (increase). The latched button defined in the action is the tick "down" (decrease) button. The ticks are configurable to any position on the axis. Use this mode to easily set axis values based on an up/down scheme.
  • Improved: Settings tab has new preset buttons to setup default startup VJOY axis values at profile start.
  • Fixed: Gated axis will now send a button event on range enter/exit triggers instead of axis triggers. This was confusing actions added to these triggers because they were never seeing a button input, so ignore the trigger completely.
  • Improved: Gated axis ranges now also have a delay entry for the triggers that are momentary (exit/enter). The delay, as with normal gates, is the time between a press and a release.
  • Fixed: Simconnect connection start/stop behavior not reconnecting, causing errors if MSFS is not ready/running, or entering in some cases into a race condition with the WASM bridge module. Tested with MSFS 24 beta patch. WASM is a release attached to this project.
  • Fixed: Simconnect WASM (c++) - alive ping no longer sends the LVARs.
  • Fixed: various UI fixes and exceptions.

(m70)

  • Improved: Options button added to main toolbar.
  • Improved: Options dialog has dedicated tabs for various options
  • Improved: Options performance improvements on close.
  • Improved: Simconnect: configuration button available in all action modes
  • Improved: Macro: additional diagnostics data output in macro verbose mode
  • Improved: Switch mode and Temporary Switch mode not longer show current mode as a choice.
  • Fix: mode name change may not be updated in the profile
  • Fix: Macro: do not reschedule an existing macro if already scheduled
  • Fix: Simconnect: RPN calculator text will now paste MIME types as plain text
  • Fix: Simconnect: RPN UI elements are only displayed in the RPN/calculator mode
  • Fix: Simconnect: stop intercepting mode changes in monitor thread.
  • Fix: OSC: Changing OSC port and IP options will reconfigure internal OSC client/server live so listen behavior uses the current configured port.

(m69)

  • Improved: Keyboard macro bring up the unified keyboard list for enhanced keys.
  • Improved: Keyboard macro has quick add shortcut buttons for add a press, or add a release.
  • Improved: Input Viewer will synchronize with current input state on start.
  • Fix: more reliable profile auto-start behaviors across different options (profiles associated with processes)
  • Fix: TTS rate now uses word per minute rather and the older offset method.
  • Fix: XML sometimes saving integers as floating point and unable to read the data back.
  • Fix: Unified highlighting - suspends on all input listening

(m68)

  • Fix: TTS enabled at design time to allow for playback at design time (this was broken when TTS was moved to a queueing system to help with spamming messages that could hang the system)
  • Improved: TTS message on mode change will now trigger (if enabled) on profile start (to remind you what mode the profile is starting in), will also not trigger if the mode changes within 2 seconds to avoid TTS spamming. The windows TTS API is not very kind to rapid fire TTS. TTS messages generated by GremlinEx are currently hard coded to play at 150 words per minute to also make the message less intrusive. You can always turn the feature off if you do not want automated TTS messages on mode change and provide your own through actions.
  • Improved: Simconnect WASM module has a ping/pong mechanism to validate the GremlinEx bridge is connected and communicating before sending commands. This also verifies the proper installation/configuration of the WASM module in MSFS to avoid errors in Gremlin Ex. There is a new WASM module updated in the distribution.
  • Fix: Simconnect quit (profile stop) may not restart the connection at next profile start.
  • Improved: Input viewer added to master toolbar for convenience.
  • Improved: Highlight on/off added to bottom right status bar for convenience.
  • Improved: Options window revamped with scrolling to ease navigation with various scaling and resolutions.
    (m67)
    Pre-release stabilization:
  • Fix: Resolve an exception when selecting a tab without any prior input selected.
  • Fix: Gated Axis UI rework to address some gate add/remove and movement issues.
  • New: Barebones undo for gated axis. Ctrl-Z hotkey will undo last gated action such as adding a gate or moving a gate. This is very rudimentary at this point and doesn't handle adding or removing actions to gates/ranges at this time.
  • Improved: swap device UI has now has an ok/cancel button pair to exit out of the dialog.
  • Fix: 1:1 mapping forces an update of action icons
  • Fix: Using VJOY as input in settings does not update device list

(m66)
Pre-release stabilization:

  • New: "use calibrated input" on axis conditions. When checked, the condition will use the calibrated data on the input, when unchecked, will use the raw (uncalibrated) data. If the input is not calibrated, this setting doesn't matter.
  • Fix: Non-centered calibration scales properly based on deadzone extremities.
  • Fix: conditions deemed "invalid" weren't persisted. Conditions are now saved regardless of validity. Note: this also means that it's possible to save mutually exclusive conditions. The verbose mode "condition" will output to the log file the execution tree and the result of any conditions tested, in the order of testing.
  • Fix: condition default evaluation mode was not always defaulted causing the condition to fail all the time.
  • Fix: some condition types could not be applied to some actions
  • Fix: issue pasting vjoy remap action if changing input type from axis to buttons
  • Fix: Simconnect action not populating description and range data when selecting a command in non calculator mode.
  • Fix: Center zero preset was ignored in calibration window.
  • Fix: latched functors not responding to event triggers due to the change in event processing in m58 (this was in particular impacting the axis merge functionality in vjoy remap)
  • Improved: Integer and Floating point input boxes now have a custom input validator that is a bit more forgiving for inputs than the default validator. The default validator would prevent valid data entry due to a stricter set of rules.
  • Fix: UI disables consistently regardless of how a profile is started.

(m65)

  • New: Macro verbose option to handle verbose diagnostics mode for macros specifically
  • Fix: Keyboard Mapper Ex wasn't sending "press" events in certain option combinations with the new "direct" mode

(m64a)

  • New: Run Process action: allows GremlinEx to execute an arbitrary process based on an input press or release. Note: The ability for GremlinEx to spawn processes depends on the permissions given to GremlinEx.
  • Fix: Virtual button enabled user setting (Virtual Button Tab) now loads the correct saved option.
  • New: Open GremlinEx folder option in file menu
  • Fix: Additional logic to track modes associated with specific processes and profiles so that when a process is given focus, the profile and the mode last associated with the process is restored. This is still a work in progress.
  • UI will not update input tracking at profile runtime to optimize performance

(m63)

  • Improved: Input Viewer remembers the last selection
  • Fix: Input viewer has the correct axis number for non-sequential inputs

(m62)

  • Improved: hat button repeater enabled - now shows the direction of the hat "live".
  • Fix: OSC output port value will update the correct port.
  • Fix: Joystick conditions will now correctly skip axes (the dropdown previously assumed axes were sequential - depends on the hardware).

(m61)

m61 is a general stabilization patch focused on cleaning up remaining issues linked to new features introduced and module refactors in this version.

  • Fix: input listener not detecting some axis changes
  • Improved: Joystick condition UI now has manual device input selectors so select the hardware latching condition latching.
  • Improved: Range selectors in conditions include a repeater that shows current input values and is in line with the gated axis, including record buttons to set the values from the live input.
  • Fix: multiple references to older properties of the removed tab widget impacting UI functions such as 1:1, device substitution causing exceptions
  • Fix: calibration icon not showing correct state
  • Fix: some containers are missing their action condition entries for each action in the container
  • Fix: condition counts in the condition tab do not always update as conditions are added or removed
  • Fix: map to vjoy merged value repeater not updating correctly
  • Fix: virtual button on axis input not triggering action (note: if a virtual button condition is used, any other joystick condition is ignored)
  • Fix: UI not disabling at runtime with the option selected to prevent inadvertent interactions/changes.
  • New: The virtual button condition is now user-controllable via a checkbox on the virtual button tab. This was added because virtual buttons override any other conditions, which is not always the desired behavior for some use cases. The enabled state is also visible on the virtual button tab.

(m59/60)

  • Fix: The special mode device is not always creating entries for a new mode, causing a key exception.
  • Improved: The hourglass is now more consistently displayed for operations that can take a while to refresh.
  • Fix: triggering an OSC or MIDI input was not selecting the input when pressed, and the highlight is enabled.
  • Fix: Occasional QT C++ reference exception on button or axis repeaters.

(m58)

  • fix for autorelease callbacks (temporary mode switch being one of the affected actions)
  • fix for SimConnect not detected on some clients in the packaged version and not finding the DLL causing a profile start error if SimConnect is used.
  • updated to latest version of SimConnect
  • Fix: further UI tweaks for edit time mode changes and general UI synchronization when changing modes and devices.
  • Fix: GremlinEx triggers not functional due to event serialization changes to support the auto-release functionality on more complex inputs introduced in m57. The serialization changes would cause the logic to miss the events because they are coded differently to allow serialization, so there are now two keys, one for serialization, and one for triggers.
  • Fix: More UI work to keep device and modes in sync with the display with the new UI logic and replacement of the problematic UI component introduced in m50. This caused issues with blank screens on mode changes and general display of information not always in sync with UI navigation. This continues to be a bit of whack-a-mole as the navigation logic is quite complex as some inputs are fixed, some are user-defined, and others are application driven. To this end, much of the legacy device logic was redone to be consistent for all input types so all devices respond similarly to UI actions and thus can refresh/update more appropriately. There is probably more work here to be done and this gets us closer to the resolution of this issue. I knew yanking a core component out of the UI would be complicated and painful - not disappointed - however the choices were continued random race condition and crashes or a gut/replace of the UI management system.
  • New: Map to VJOY has a new option to do automatic button releases on Keyboard, OSC and MIDI inputs. This was not possible before due to the serialization issues on complex inputs. This means keyboard inputs, when mapped to a VJOY button, will release when that button is released (it will remain "on" if not selected which is the prior behavior).