Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

allow one GPIO pin to trigger 2+ buttons #724

Merged
merged 10 commits into from
Jun 17, 2024

Conversation

bsstephan
Copy link
Contributor

@bsstephan bsstephan commented Dec 27, 2023

This adds a couple protobuf fields to the GpioMappingInfo structure to include dpad and button masks and uses them when setting up the Gamepad object to allow a pin to be the trigger for more than one button. All the cost is at setup time, so this shouldn't have any material effect on gamepad performance.

As usual, @Pelsin helped my proto-brain (pun intended) with the UI work. It will need improvement/expansion in the future, but this works for now.

@bsstephan
Copy link
Contributor Author

This works.

image

via

image

@arntsonl
Copy link
Contributor

Is this all ready to review?

@bsstephan bsstephan added enhancement New feature or request Web Config Changes to the WebConfig application labels Jan 6, 2024
@bsstephan bsstephan force-pushed the one-pin-multiple-buttons branch 3 times, most recently from 33607b1 to 5212bfb Compare February 26, 2024 22:04
@bsstephan bsstephan force-pushed the one-pin-multiple-buttons branch 2 times, most recently from f6f64f6 to a2f6705 Compare March 9, 2024 20:10
@bsstephan bsstephan changed the title WIP/POC/demonstration: allow one GPIO pin to trigger 2+ buttons allow one GPIO pin to trigger 2+ buttons Mar 9, 2024
@bsstephan bsstephan marked this pull request as ready for review March 9, 2024 21:21
@arntsonl
Copy link
Contributor

Confirmed this is working, going to have some other eyes on the UI as well.

@Pelsin
Copy link
Contributor

Pelsin commented Mar 20, 2024

Confirmed this is working, going to have some other eyes on the UI as well.

Thats good! Please ping me if the UI is not good enough for the first iteration, if so i will try to merge the new page with pin mapping page.

@bsstephan bsstephan force-pushed the one-pin-multiple-buttons branch 2 times, most recently from b7bf11b to c4a3c78 Compare March 25, 2024 14:37
@bsstephan bsstephan marked this pull request as draft April 1, 2024 19:15
@bsstephan
Copy link
Contributor Author

Marked this a draft again, since we are saving it for after 0.7.8, and there has been a desire for and already some experimentation around a better UI/UX --- ideally a single page and a fancier selection/modal thing or something.

@bsstephan bsstephan force-pushed the one-pin-multiple-buttons branch 2 times, most recently from 82b3e82 to 7a5fd7e Compare June 8, 2024 17:12
bsstephan and others added 5 commits June 11, 2024 16:33
before it returned just the actions, which was fine, but now we're
adding more stuff to the infos, so return the whole struct rather than
just the GpioAction within it
this expands GpioMappingInfo to include dpad and button masks and uses
those masks when setting up the button maps in Gamepad. this allows for
a GPIO pin to trigger any arbitrary set of buttons
commit 16c34b6
Merge: 3b21858 8b915e0
Author: ian <ian@vidales.se>
Date:   Sat Jun 8 18:14:42 2024 +0200

    Merge branch 'main' into one-pin-multiple-buttons-ui-revamp

    # Conflicts:
    #	proto/config.proto
    #	www/package-lock.json
    #	www/package.json
    #	www/src/Addons/Wii.tsx
    #	www/src/Pages/InputMacroAddonPage.tsx

commit 3b21858
Author: ian <ian@vidales.se>
Date:   Sat May 4 20:59:19 2024 +0200

    Simplify type juggling by making separate components for base pin and profiles mappings

commit 77c30d6
Author: ian <ian@vidales.se>
Date:   Sat May 4 18:59:17 2024 +0200

    Remove old multi mapping path

commit 2f0892f
Author: ian <ian@vidales.se>
Date:   Sat May 4 18:48:01 2024 +0200

    Fix merge issue

commit 12ed309
Merge: be460f9 22ed9a7
Author: ian <ian@vidales.se>
Date:   Sat May 4 18:37:50 2024 +0200

    Merge branch 'main' into one-pin-multiple-buttons-ui-revamp

    # Conflicts:
    #	www/package-lock.json
    #	www/src/Locales/en/Index.jsx
    #	www/src/Pages/InputMacroAddonPage.tsx

commit be460f9
Author: ian <ian@vidales.se>
Date:   Sat May 4 18:19:54 2024 +0200

    Implement UX for multi selection for base profile and single selection for profiles

commit 7dd59ce
Author: ian <ian@vidales.se>
Date:   Fri Apr 26 13:34:20 2024 +0200

    Evaluate if css grids is suitable for the pin mapping page, add nav pills for profiles

commit 0e120b3
Author: ian <ian@vidales.se>
Date:   Mon Apr 22 22:38:24 2024 +0200

    WIP make pin mappping page handle masks

commit 5712845
Author: ian <ian@vidales.se>
Date:   Mon Apr 22 22:25:40 2024 +0200

    Add lodash types

commit 9d10afb
Author: ian <ian@vidales.se>
Date:   Thu Apr 18 10:09:36 2024 +0200

    Remove multmapping page and start merging it with pinMapping page

commit 5f3fa47
Merge: 2e040a4 d384d8e
Author: ian <ian@vidales.se>
Date:   Wed Apr 17 18:08:56 2024 +0200

    Merge branch 'main' into one-pin-multiple-buttons-ui-revamp

commit 2e040a4
Merge: c4a3c78 7fb30b9
Author: ian <ian@vidales.se>
Date:   Sun Apr 14 23:43:49 2024 +0200

    Merge branch 'main' into one-pin-multiple-buttons-ui-revamp

    # Conflicts:
    #	proto/enums.proto
    #	www/src/Data/Pins.ts
    #	www/src/Locales/en/PinMapping.jsx
    #	www/src/Pages/InputMacroAddonPage.jsx
    #	www/src/Pages/PinMapping.tsx
    #	www/src/Pages/SettingsPage.jsx

commit c4a3c78
Author: Brian S. Stephan <bss@incorporeal.org>
Date:   Fri Mar 22 16:53:27 2024 -0500

    fix usage of button masks for hotkeys

    I probably introduced this in a bad rebase

commit 580eb5e
Author: Brian S. Stephan <bss@incorporeal.org>
Date:   Sat Mar 9 15:20:06 2024 -0600

    add a disclaimer about multi mapping only working on Profile 1

commit 7aef83e
Author: Pelsin <ian@vidales.se>
Date:   Sat Mar 9 21:16:55 2024 +0100

    multi mapping page (#7)

    * remove double initialization of gamepad GPIOs

    * have getProfilePinMappings return whole GpioMappingInfos

    before it returned just the actions, which was fine, but now we're
    adding more stuff to the infos, so return the whole struct rather than
    just the GpioAction within it

    * define a custom button combo to a GPIO pin

    this expands GpioMappingInfo to include dpad and button masks and uses
    those masks when setting up the button maps in Gamepad. this allows for
    a GPIO pin to trigger any arbitrary set of buttons

    * Add a WIP multi mapping page

    * have getProfilePinMappings return whole GpioMappingInfos

    before it returned just the actions, which was fine, but now we're
    adding more stuff to the infos, so return the whole struct rather than
    just the GpioAction within it

    * define a custom button combo to a GPIO pin

    this expands GpioMappingInfo to include dpad and button masks and uses
    those masks when setting up the button maps in Gamepad. this allows for
    a GPIO pin to trigger any arbitrary set of buttons

    * implement get/setPinMappingsV2 which includes the new masks

    * Start moving to new payload structure, new endpoint, translation keys

    * Set action if mask is set

    * Multi-mapping route added to webconfig, start adding customDpadMask

    * Revert endpoint test for v2

    * fix issue where setPinMappingsV2 was actually ignoring input

    * Rename BUTTON_MASK -> BUTTON_MASK_OPTIONS to prepare for multi mapping data

    * Removed some unused imports

    * Add support for dpad mask

    * Add text for assigned to multi mapping on pin mapping page

    * Add support for swapping button labels

    * Update pins after setting multi pin

    * Set correct default in multi mapping, disables selection on non selectable actions

commit f842e25
Author: Brian S. Stephan <bss@incorporeal.org>
Date:   Wed Feb 28 18:28:27 2024 -0600

    fix issue where setPinMappingsV2 was actually ignoring input

commit a2853d8
Author: Brian S. Stephan <bss@incorporeal.org>
Date:   Thu Feb 22 16:28:06 2024 -0600

    implement get/setPinMappingsV2 which includes the new masks

commit 26bbcbe
Author: Brian S. Stephan <bss@incorporeal.org>
Date:   Wed Dec 27 00:44:22 2023 -0600

    define a custom button combo to a GPIO pin

    this expands GpioMappingInfo to include dpad and button masks and uses
    those masks when setting up the button maps in Gamepad. this allows for
    a GPIO pin to trigger any arbitrary set of buttons

commit 55fb9e5
Author: Brian S. Stephan <bss@incorporeal.org>
Date:   Wed Dec 27 00:25:10 2023 -0600

    have getProfilePinMappings return whole GpioMappingInfos

    before it returned just the actions, which was fine, but now we're
    adding more stuff to the infos, so return the whole struct rather than
    just the GpioAction within it

Co-authored-by: ian <ian@vidales.se>
Co-authored-by: Pelsin <ian@vidales.se>
@bsstephan bsstephan marked this pull request as ready for review June 12, 2024 15:25
@bsstephan
Copy link
Contributor Author

Quick screenshot of the UI as it stands right now in this branch:
image

Note that this can only be done for the time being on the base mappings (profile 1).

bsstephan and others added 4 commits June 12, 2024 15:40
upon conversations with Pelsin, we don't need this distinction anymore
(if we ever did), and the React side will be updated to accommodate. the
same treatment will be done to get/setProfileOptions, which need to be
updated to accept the masks in order to allow the multiselect to work on
profiles 2-4
this will allow the webconfig to do multiselect buttons on all the
profiles, not just profile 1
Copy link
Contributor

@arntsonl arntsonl left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great! New changes we can put into PRs since this PR is already pretty huge

@arntsonl arntsonl merged commit 865ffff into OpenStickCommunity:main Jun 17, 2024
41 checks passed
@reimertz
Copy link

Thanks for this!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request Web Config Changes to the WebConfig application
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants