DualSense Edge as Mouse & Keyboard with Gyro + Touch Activation?

I randomly came across this project and I’m really interested in the possibilities it offers.

I’ve got a DualSense Edge lying around and I’d like to use it as a mouse and keyboard through a hardware input remapper.

My idea is to bind mouse movement to the gyro, but only have it active while I’m touching the touchpad. The regular gamepad buttons would then be mapped to left click, right click, and keyboard inputs. So basically Gyro Ratcheting Gaming.

What I’m also not sure about is whether it’s possible to use touchpad gestures for logic. For example, something like swiping down with one finger to trigger scroll wheel down, and swiping up for scroll wheel up. Is that doable right now, or not supported yet?

I assume the project is open to adding new features, so this could be a nice addition in the future.

I’m also currently looking for suitable hardware for this kind of setup, especially something that supports higher polling rates, ideally 250 Hz or more.

We have a configuration for a DualSense gyro mouse in the Examples tab. It requires using custom usages to get the gyro data so to transfer it to the DualSense Edge you would have to at least update the product ID there (assuming everything else is in the same places in the report, which I don’t know if it is).

We also have a separate example showing how you can use the DualSense touchpad as a mouse. For gestures you’d have to implement them yourself using expressions, but the example at least shows how to get to the raw data.

1 Like

I just went through some of your videos and it looks really promising. Especially with expressions and the ability to set up custom usages, the project already feels extremely powerful.

I’ve ordered an Adafruit Feather RP2040 with USB Host, Type A, 5723, hopefully that’s the right fit for what I’m trying to do.

“I haven’t found much info about USB polling yet, I assume that’s handled through the firmware?” - Nevermind, found it :slight_smile:

Thanks for the quick reply.

I’ve finished the first version: https://github.com/ryrun/ds-hid-remapper-gyro-mouse-profile

Works great.

What I don’t understand is why it settles at around 360 Hz in the polling tester (Mouse Movements via Browser Polling Testers). Maybe the DS Edge just isn’t sending more gyro data than that or the Tester is limited by my monitor refresh rate (I’m using 360hz)?

I built a lot of this with the help of an LLM, which got me to the register limit pretty quickly. It might make sense to increase that limit in general in future firmware updates, maybe even double it. But it’s also possible you’ll spot some inefficiencies in the expressions.

Nice!

The 360Hz number is likely an artifact of your monitor refresh rate, it’s too big of a coincidence. Not sure why, I have a plain old 60Hz monitor and these testers have no problem showing 1000Hz:

https://clickspeedtester.com/mouse-polling-rate-checker/
https://cpstest.org/polling-rate-test/

That said, I don’t have a DualSense Edge, but a regular DualSense reports at 250Hz over USB.

I just now realized that the custom usages for the gyro inputs should have the “relative” checkbox enabled. If you do that you will likely see 250Hz.

(The gyro data is relative because it is angular velocity - it’s like mouse inputs that only report movement, not like joystick inputs that report the position that is valid until the next report. When the checkbox is not enabled it doesn’t cause much harm, each input is just repeated 4 times, so it increases the sensitivity 4x.)

1 Like

Thanks, I’ll give the relative setting a try.

I’ve also been experimenting a bit with auto calibration to get gyro stick drift under control. A simple deadzone takes away too much fine control. With this expression I’ve already used up all 32 registers, so if it’s not an issue on your end, it would be great to increase that limit in the official firmware. It really makes sense, especially for more complex mappings like this.

Actually, scratch that. Gyro data is absolute, not relative.

Or, if always reported at a fixed rate, it doesn’t really make a difference.

(You could still use it to test the polling rate hypothesis.)

Yeah, I tried it. Same as for you, it goes up to 250 Hz then. But I’ll leave it without “Relative” for now, since I calibrated the sensitivity to get that “4 RWS” behavior, meaning one full controller rotation results in four full rotations in-game.

I played a bit of Doom Eternal with it and it runs perfectly. The HID Remapper is super stable. Custom usages and expressions are very powerful features of the HID Remapper.

1 Like

I made a short YouTube video where I’m playing Doom Dark Ages with it: https://www.youtube.com/watch?v=3ZXBDurfKD0

1 Like