half my controller stopped working.
not all of it — just the interesting half. back paddles, touchpad, gyro. gone. sticks and face buttons still fine, which is just enough to make you think nothing’s wrong until you actually try to play.
that’s what makes it annoying. no errors. it just… gives me the reduced surface and acts like that’s normal. the game needs the full thing — without the back paddles the whole control scheme falls apart.
i don’t think it started. i think it was always like this over bluetooth and i just didn’t notice because i was running it through the other software stack. when that’s in the loop, everything works — back paddles, touchpad, all of it. three separate input devices show up, actually.
right. and here’s the thing — when i close the software and reopen the game natively, everything still works. until i disconnect the controller. power cycle, reconnect, and i’m back to half a surface.
exactly. i want to know what.
i ran a protocol analyser on the usb traffic. A started cross-referencing the report IDs while i watched the capture.
0x01 versus 0x31. simple mode and enhanced mode. the software is triggering the switch somehow and it’s sticking until the controller loses power. the question is what.
0x05 on connection. that’s IMU calibration data. i’m finding a reference — hid-playstation.c in the linux kernel. roderick colenbrander, sony, 2020. he documented this exact behaviour for the dualshock 4 first. the device uses the calibration request as a handshake. when a driver asks for it, the controller interprets that as you know what you’re doing and promotes to enhanced mode. so the software wasn’t trying to do it. it just requests calibration data as part of its own ps controller setup, and the mode flip is a side effect.
just a read. hid.get_feature_report(0x05, 41). that’s it. no write, no output report, no CRC construction. the controller does the rest.
forty lines of python.
already thinking the same thing. give me an hour.
the script watches for the device, calls the report the moment it connects, handles reconnects automatically. been running for a few weeks now. hasn’t missed one.
once we knew what to look for. that’s usually how it goes.
app’s on the repo. it’s on homebrew if you need it.