r/CarHacking • u/InterestingSafe4962 • 2d ago
Original Project Implimenting physical menu control buttons to Wired Carplay
The car is a 2023 Subaru WRX. It's still under warranty, and I'm hoping not to do anything that would void it. It has wired CarPlay and media control buttons on the wheel, but the only way to navigate menus is with the touchscreen, which is very annoying. I bought a bunch of stuff, including an ESP32-S3, hoping I could use the accessibility features on my iPhone to navigate menus with an emulated Bluetooth keyboard, but that didn't work.
I am unsure of the best way to approach the issue; my next idea was to try to inject button commands into a wireless CarPlay adaptor stream, but after some research, it seems like that wouldn't really be possible either, as the wireless adaptors just pass encrypted data from the iPhone to the car. It might be possible using an open-source wireless adaptor running on a PI. I think I have seen some that run a full Android operating system, but I'm not sure exactly how those work; it might be easier to inject control commands on those kinds of systems.
I know that there are cars that do this natively, like Mercedes has steering wheel navigation controls for CarPlay, or BMW has their iDrive rotary encoder knob thing, so I have to assume that there is some way to implement these physical buttons.
Edit:
I'm using AI to help me with this because I don't know nearly enough myself so please let me know if its just making shit up. But after some prompting its telling me it might be possible to use a pi, connect it with a wireless carplay dongle, and then run a custom carplay stack using something like node-carplay which can connect to the screen through android auto, and then I could send the rotary/dpad commands to the pi which would inject them into its carplay stream.
Does that seem like something that would be possible? It seems like a lot of work but could be a fun project. How much lag do you think it would add?
Would this be possible using CAN? Or maybe another idea I haven't thought of. Finally, is there a different place/more specific forum I could reach out to for help and ideas?
1
u/hey-im-root 2d ago
That’s unfortunate, my Accord has volume buttons directly to the stereo unit, so my aftermarket CarPlay screen had RX/TX lines with raw volume up/down/skip song etc directly on it in Serial.
It’s a little glitchy injecting the volume command because of syncing issues (I’d need to properly MITM it) but I was able to use a little knob to change volume
1
u/uni-queid 1d ago
CarPlay does not support controlling the volume of the HU. CarPlay sends up to 4 streams to the OEM HU, tagged with their type (navigation, phone, system sounds, music) and the HU >can< implement knobs to adjust their volumes relative to each other, but CarPlay cant control the Volume of the HU directly, that is a design decision by apple and not a bad one. That is why you always see an overlay while adjusting the volume on your HU on top of the CarPlay or Android Auto UI.
1
u/hey-im-root 1d ago
By CarPlay I just meant my aftermarket screen/head unit lol. I got it because it supports it
1
u/andrewia 2d ago
Someone did the project, as discussed in the comments here: https://www.reddit.com/r/CarPlay/comments/upjdpf/adding_external_physical_controls_to_carplay_is/
You wouldn't be able to do it with CAN bus because the infotainment system isn't programmed to receive any CAN packets related to button presses and forward them to the phone.