Updating firmware to repurpose the buttons to switch the LED colors?

18 views
Skip to first unread message

Volkan GER

unread,
Jul 7, 2024, 8:31:17 PM7/7/24
to psmove
I'm trying to get a stand-alone toy out of my controller. I was wondering if it's possible to make alterations so that the device turns on and just lights the LED up? Then even more complex stuff as the trigger altering the brightness and the action button changing colors of the LED, square turning on the vibrations etc, etc.

I feel like it needs to be done on the firmware level but not sure if this is even possible? If not, the next best thing would be running a program on the PC that gets the input and alters the device over Bluetooth, right?

Thanks in advance!

Alexander Nitsch

unread,
Jul 8, 2024, 2:12:07 PM7/8/24
to psm...@googlegroups.com
> I'm trying to get a stand-alone toy out of my controller. I was wondering
> if it's possible to make alterations so that the device turns on and just
> lights the LED up? Then even more complex stuff as the trigger altering the
> brightness and the action button changing colors of the LED, square turning
> on the vibrations etc, etc.

It depends on what exactly your controller is.

For the original models ("ZCM1", see the sticker on the controller's
back), we have a pretty good understanding of the internals, having
reverse-engineered lots of its firmware and most of its hardware. Also,
it features an STM32F103 microcontroller as its "brain". There is plenty
of publicly available vendor documentation on how this microcontroller
works, how to program it etc. Also, a free GCC-based toolchain.

So you could implement any firmware you like from scratch if you have
experience with the STM32 line of microcontrollers or if you are willing
to spend some time learning.

Another option would be to patch the original firmware binary instead of
replacing it with your own implementation. Way less code to write (you
would not have to reimplement things like communication with the
Bluetooth chipset or handle battery charging yourself -- if you actually
need it), but it requires some familiarity with ARM assembly, reverse
engineering and some creativity for the actual implementation.

The later models ("ZCM2" and possibly others, I haven't really kept up)
are mostly new hardware and built upon a completely different
microcontroller that does not seem to have publicly available datasheets
or tools; at leat last time I checked. I don't think anybody has done
any serious reverse-engineering on those (if any at all). So you would
have to start with that.


> I feel like it needs to be done on the firmware level but not sure if this
> is even possible? If not, the next best thing would be running a program on
> the PC that gets the input and alters the device over Bluetooth, right?

That is how it would normally work, yes. The host device (i.e. the
PlayStation or your computer) sends commands to the Move controller
(switching on/off the LEDs and the rumble motor) and receives sensor
data from it. Both via Bluetooth. Doing that should be pretty
straightforwards since this is what PS Move API is designed to do. It is
not standalone, though.

Volkan GER

unread,
Jul 10, 2024, 8:41:30 PM7/10/24
to psmove
Great info, thank you, much appretiated! Yeah, unfortunately, I got the newer PS4 moves, CECH-ZCM2U. Even with the earlier versions, I don't think I'm ready to get into hardware that much, I'm still in shallow software seas! :D 

Then it leaves my next best guess to program something on the PC and keep it running. I'll read through the docs to see if there's anything already out there I can just piggy back on to tie the LED brightness to the trigger; pretty sure it's done somewhere before! :D

Alexander Nitsch

unread,
Jul 11, 2024, 1:03:35 AM7/11/24
to psm...@googlegroups.com
> Then it leaves my next best guess to program something on the PC and keep
> it running. I'll read through the docs to see if there's anything already
> out there I can just piggy back on to tie the LED brightness to the
> trigger; pretty sure it's done somewhere before! :D

Have a look at these examples (written in C and Python, respectively)
which control LED color depending on the trigger button:

https://github.com/thp/psmoveapi/blob/master/examples/c/example.c

https://github.com/thp/psmoveapi/blob/master/examples/python/example_new_api.py
Reply all
Reply to author
Forward
0 new messages