Skip to content

13.40.14ex (RC) (m22)

Latest
Compare
Choose a tag to compare
@muchimi muchimi released this 16 Aug 21:52
· 122 commits to main since this release
373a886

Major new features in 13.40.14ex RC

  • MIDI input support - JGEX supports input from hardware and software MIDI controllers like the Korg Mini, LoupeDeck and Elgato StreamDeck
  • OSC (Open Sound Control or Open Stage Control) input support - supports glass input tablets designed for DJ, lighting or DAW control in JGEX
  • Simconnect action (integrates JGEX with MSFS - currently has basic support for axis, event and simvar control - still in active dev)
  • General UI logic rework
  • Mode behavior rework and separation of edit mode vs runtime mode
  • Gated Axis action - easily add gate triggers to axis inputs via nested container/actions in actions support - this action has sophisticated triggers for splitting an axis up in terms of ranges and gates, as well as output filters. See documentation.
  • TTS (text-to-speech) improvements - voice selection - playback rate and testing while in edit mode
  • Keyboard mapper improvements - autorepeat feature added
  • Virtual keyboard for latched key input - allows handling of complex keys, including mapping of non-visible keys such as F13 to F24 and unusual multi-key latching use-cases.
  • "live" input visualization for current hardware axis and button positions, and visualization of most outputs including response curve
  • Device substitution helper (with profile backup) - used to map a profile device to another if it changed
  • Device tab re-order to user's preference (this does not change the hardware order, just the visualization order in JGEX)
  • Updated input map dialog - shows current mapped inputs (tools menu)
  • QOL features with the UI including improved look, updated icons and more "windows" like behavior such as context menus.
  • library dependency updates (lxml, pyttsx3, qtawesome)
  • Move to Python 3.12.5 64 bit

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.

New discord server:

I created a discord server for discussion as that will be easier to track various questions and suggestions. Please continue to use issues in Github to report bugs/issues.

discord server

Documentation

Please consult the readme.md file for documentation. Documentation is still a work in progress.

Warning - profile data changes

This version has major code changes and touches many core modules to support the new functionality - while I did my best to run and pass internal tests - there may be more bugs than usual - apologies ahead of time. Profiles saved with this version will not be recognized by older versions due to the change in the latching subsystem and new keys to support this information.

Make a backup of your profiles or use "save as" just in case you need to revert to a prior version.

Antivirus False Positives

The Pyinstaller packager for Python continues to sporadically cause false positives because of the way the packager works. This is an issue with some A/V solutions and is due to multiple factors and not unique to GremlinEx. This is not something under my control. The updated doc has some options, including, should this rare event occur, you can create an exception (which seems to be the recommended option for all Python projects using PyInstaller if the issue presents itself - again - rare), or run the code directly from the source. I have run the software through https://www.virustotal.com/ and a few A/V solutions flag the packaged code as a false positive (3 out of 64). This is an issue with the AV solution, not GremlinEx.

Patch notes leading to RC:

(m22)

  • updated documentation
  • device change handling enhancements (see changelog and documentation for behavior changes)
  • keeping m21 available in the distro in case m22 breaks something unexpected

(m21)

  • keyboard mapper remembers last pulse/interval values

(m20)

  • fix for mode status bar not updating
  • fix for mode delete not having a confirm box nor updating the mode

(m19)

  • fix for being able to delete gates in gated axis (two gates must remain) - deletions will be ignored if less than two gates remain
  • fix for gate axis add button not adding a gate

(m18)

  • fix for mode selector not always updating when mode configuration has changed
  • added noop option for simconnect triggers (for commands that take no values)
  • invert flag on axis visual repeater now causes an update showing the inverted value instead of waiting for the next update

(m17)

  • normalization of gated axis no longer includes extra hidden gates in the computation
  • fix for response curve UI symmetry checkbox causing a CTD [breaking]
  • fix for old gated axis profile read not finding registered gates due to ID changes
  • fix for paste action across different devices not updating to new hardware input data until reload

(m16)

  • changes are primarily bug fixes based on the issue list
  • autorepeat added to keyboard mapper as an output mode, has improved descriptions as to what each mode does
  • gated axis now has distinct action maps for each gate or range mode (prior profiles should load fine) - this solves a behavior issue
  • gated axis adds range entry and range exit triggers and conditions to fix an issue with virtual button mappings that would never otherwise release - this was necessary to make virtual buttons functional with this action
  • simconnect axis output in gated mode still a WIP as a result of these changes (didn't get around to testing it) - use ranged or trigger modes for now to avoid issues.
  • fixed a typo in requirements and added a missing dependency

(m15)

  • improved vJoy device naming in JGEX to ease identification - vJoy device names use axis/button/hat counts part of the name to help identify which device it is - adds device sequence
  • added clear map menu option for devices (clears mappings from the selected device w/confirm box)
  • 1:1 map behavior change to be current device specific and reworked logic
  • enhancements to gated input axis and bug fixes (now has range repeater and visualizer)
  • input visualizer now aware of user device order (matches tab sequence)
  • replaced number pick boxes with free text edit for floating point values - this makes the input a bit easier to type in data or cut/paste - the input is very similar to the spin box control it replaces - the wheel mouse increments/decrements values like spin boxes even if it does not display arrows.
  • proposed bug fixes to reported issues, moving us closer to RC

(m14)

  • allowed vJoy as merge axis input
  • change vjoy name to include axis/button/hat counts to distinguish them
  • fix type reference missed via automatic refactor
  • added tooltips on most options
  • removed HID guardian options (not used)
  • added action/container sync option

(m13)

  • cut/paste of simconnect/gated axis data blocks (custom serialization)
  • fix for default gated axis range not saving actions (due to UI changes in m12)
  • recent profile list normalization (now case insensitive and use of consistent path separators)
  • option to enable UI while profile is active (potential dragons ahead when that is enabled)

(m12)

  • response curve UI enhancements, added input tracking and symmetry flag persistence
  • enabled MSFS SimConnect simvar trigger mode supports (toggle, on, off)
  • internal copy/paste for containers referencing a gate data object
  • continued refactor of mode tracking logic
  • continued refactor of UI update
  • hardware detect delay bumped to 500ms
  • vjoy reset device caching

(m11)

  • fix for exception on functors missing action sets (log dump)
  • proposed fix for user plugin variables not saving
  • added user plugin instance duplicate button

(m10)

  • Fix for virtual button mode change handler attached to the incorrect object, preventing buttons from firing correctly

(m9)

  • default profile mode tracking fix (was causing an exception on start or when creating a new profile
  • tabs should now remember the last selected input when modes are changed (session only)
  • reworked QT memory management when changing profiles (reduces memory footprint)
  • added repeater mode to make it easier to know which mode you're mapping for when adding containers/actions
  • misc. fixes

(m8)

  • new merge axis action (see docs - allows axis merging as an action and mapping of output to sub-action/container, and adds inversion option to merged axes. This action is needed if complex processing of merged axis output is needed, such as applying a curve to the mixed output. To edit actions that respond to the merged output, add the appropriate mapping via the merged axis action "actions" configuration button that will open a dialog to do this mapping.
  • fixed a bug in the gated axis action that had an unknown method call depending on what hardware it was mapped to
  • play action has a new play button to test play the sound file while in edit mode
  • bug fix for UI not updating on certain mode changes in edit mode
  • UI interaction is largely disabled in run mode to improve performance and also prevent profile editing/changes while a profile is running. This caused some potential conflicts with state information with the updated event model. Profiles are not expected to be changed/edited while they are also active. If you edit a profile, you should be in edit mode.
  • hourglass now displayed on edit mode changes on lengthy operations
  • this update does not address an issue reported with user plugins not saving data correctly - this is still being investigated and a patch will be issued for that when the issue has been found.

(m7)

  • library reference fix for SimConnect and Macro (libraries not included in packaged JGEX version) - enables these actions to load
  • compact joystick input display - first pass
  • partial user plugin save configuration option (allows partial user plugin variable setups to be saved/recalled in a profile)
  • revised profile mode UI logic after profile mode edit

(m6)

  • fix for macro action not showing up
  • fix for input repeater calling incorrect method

(m5)

  • fix for view input map not responding in device mode
  • fix for device tab sorting not sorting alphabetically in all situations and unpack error
  • fix for merge axis UI
  • fix for error on delete MIDI, OSC or Keyboard input entry
  • fix for user plugin loading - invalid InputType reference

(m4)

  • split device tab highlight change from axis and button highlight options. This is to address a behavior issue with automatic device input highlight when in edit mode, highlighting when it should not, and vice versa.

(m3)

  • incorrect return type for profile data device guid

(m2)

  • hat mapping not finding profile settings
  • made option to show live axis/button inputs default enabled
  • installer not picking up QtMultimedia library, preventing play action from loading in packaged release mode

(m1)

  • response curve control missing (dual slider)

(m)

  • device reorder
  • TTS playback, word per minute rate range adjusts, voice selection, threaded playback
  • gated axis and nested actions
  • device substitution for device IDs that need to change with roundrobin profile backup
  • updated to latest Python 3.12.5 and QT 6.7
  • QT Awesome icons
  • Live input repeater for axis and buttons
  • Improved handling of automatic device switch
  • Improved mode switch at runtime (significantly faster)

(l) internal - not released
(k) patch 2

  • added option to auto-activate a profile if application has the focus (requires autoload enabled)

(k) patch 1

  • added option to suspend/update UI at runtime
  • bug fix on UI update that was causing an exception

(k) patch

  • updated UI for application to profile mapping and options related to automatic load behaviors
  • updated automatic profile management logic and code
  • updated documentation and usage guide
  • keyboard UI now shows scan codes that must be present to trigger an action
  • additional optional troubleshooting log output for keyboard and mouse inputs
  • new dependency (lxml)

(j) patch 1

  • added verbose filters for diagnostics/trace data
  • made the TTS (text to speech) action threaded
  • fix for verbose options not "sticking" under some circumstances
  • fix reference exception

(j) patch

  • refactored key handling in general and added support for virtual scancodes
  • added buffered input at runtime to ensure inputs are processed in sequence for long-running actions that can change the keyboard state before the actions complete - the buffer ensures all key inputs are handled in the order received with the preserved input state at the time of input
  • bug fix with key names and latched key orders
  • added solo mode (hold control down) to select a single key in the virtual keyboard
  • added scroll bars to profile window when adding a new profile
  • proposed fix on mode change and second panel not showing by default on joystick devices
  • added more instrumentation on keyboard inputs to troubleshoot in verbose mode key handling

(i) patch

  • added half a second delay on mouse wheel inputs (vertical and tilt) to prevent wheel message spamming on some mice - this is a work in progress to help with mapping wheel functions as a mouse input - the issue is primarily on the tilt wheel position detection
  • polish pass on Play Sound action (added status icon, default folder, saving, and validation to verify sound file still exists at runtime)
  • bug fix - profile mode hierarchy not applied to keyboard inputs
  • added dynamic key description to virtual keyboard - hover on key to show additional key information
  • added volume and playback rate controls to text-to-speech action, volume is 0 to 100, rate is -10 to +10 with 0 being the normal playback speed

(h) patch

  • Mode switch re-ordered to the last action executed if in a block of actions
  • Fixed bug in reference key used by all keys instead of using a copy when adding mapping a keyboard input
  • Fixed missing module in packager that caused plugins or scripts using control_action to fail at runtime

(g) patch

  • Added mode edit button next to mode selector on toolbar (QOL)
  • Added startup mode selector to mode edit dialog (QOL)
  • Profile now saves startup profile in the xml
  • Bug fix: correct startup mode selected on profile start
  • verbose mode instrumentation on key and mode data for tracing issues

potential issue: some long-running actions like TTS may cause a double trigger on latching detect - TTS continues to cause some weird behavior - need to explore further to suspend input while TTS is played out

(f) patch

  • Fix in key latching display
  • Fix in vjoy remap icons not always found
  • Refactor of input widget layout to make use of all available space and prevent cut-off (descriptions now wrap)

(e) patch update 1

Bug fixes:

  • input listen widget not closing on esc.
  • invalid reference on container for cut/paste ops
  • index OOR if no keys are selected in virtual keyboard in some situations

(d) patch

  • added support for wheel tilt buttons for left/right tilt, also known as horizontal scrolling (experimental).
    Fixes a UI update failure on mode change.

(c) patch

  • bug fixes

(b) patch

  • input widget refactor to solve an issue with QT6 background redraw not always highlighting inputs + color change
  • keyboard input device refactor - added ability to keep multiple keys even if no associated actions are found (was auto deleting them)
  • added virtual keyboard key selector
  • added key support for F13 to F24 to keyboard device input (via virtual keyboard)

(a) patch

  • Updated keyboard mapper EX: narrower footprint
  • Updated mouse mapper EX: added drop-down for selecting mouse action as an alternate action selection mode
  • Updated action view area to support horizontal scrolling if window/scaling too small to fit contents

(original)

  • Updated keyboard mapper EX: supports function keys F13 to F24.

  • Updated keyboard mapper EX: new visual keyboard - allows selection of keyboard keys via a visual keyboard representation - this is to help key combinations that are difficult to select. Limitation: does not support localization - only QWERTY layout for now.

  • proposed bug fix for issue 55