Back to all projects

CarPlay Bridge

Wireless CarPlay in a car that only knows the cable — a Raspberry Pi between phone and head unit.

Linux Python C Raspberry Pi Ghidra USB
Role
Personal research project
Period
2025 – present
Context
My own car
Stack
Linux, Python, C

The challenge

The factory head unit only speaks wired CarPlay. Every trip starts with finding the cable, plugging it in and waiting — even for a ten-minute drive.

Off-the-shelf dongles solve this, but they are closed boxes: undocumented firmware, ads on some models, and no clear answer about where the phone data actually goes. For a device that stays permanently in the car, that was not good enough for me.

The solution

Instead of a sealed box, a device whose behaviour I fully know: a Raspberry Pi that simulates an iPhone on one side and talks to the real phone over the air on the other.

USB gadget instead of a cable

The Pi registers with the head unit through the Linux kernel's USB gadget mode and behaves exactly like a plugged-in iPhone. On the other side it talks to the real phone over Wi-Fi and Bluetooth.

Understanding the protocol

Capturing the USB traffic, comparing it against open reference implementations and analysing firmware in Ghidra to reproduce the handshake, the audio channels and the video stream properly.

Reliable at ignition

Autostart through systemd, a watchdog for dropped links and a reconnect that needs no interaction: key turned, map on screen.

Key facts

0

cables when you get in

2

radio links: Bluetooth & Wi-Fi

100 %

own, open code