# CallPipe Relay (Raspberry Pi) The Pi pairs to the phone as a **Bluetooth HFP hands-free unit**. During a call the phone routes call audio to it over SCO; `bluez-alsa` exposes that as ALSA PCMs. `callpipe-relay.py` is a dumb audio pipe: Bluetooth SCO (via `arecord`/`aplay`) ⇄ the phone's audio TCP server over WiFi. Call control lives on the phone. See `../docs/relay-setup.md` for the one-time Bluetooth stack setup. ## Install ```sh # on the Pi (root): apt-get install -y bluez bluez-firmware bluez-alsa-utils alsa-utils python3 python-is-python3 install -D callpipe-relay.py /opt/callpipe/callpipe-relay.py install -D callpipe-relay.service /etc/systemd/system/callpipe-relay.service # set the phone IP: systemctl edit callpipe-relay # or edit Environment=CALLPIPE_PHONE=... in the unit systemctl enable --now callpipe-relay ``` ## Config (env) | var | default | meaning | |-----|---------|---------| | `CALLPIPE_PHONE` | `10.0.1.239` | phone (hub) IP | | `CALLPIPE_PORT` | `9010` | phone audio TCP port | | `CALLPIPE_BT` | auto | HFP device MAC (auto-detected from bluez-alsa) | ## Wire protocol (TCP, both directions) `[4B big-endian len N][1B type][payload]` where `N = 1 + len(payload)` - `A` (0x41): PCM S16LE mono 16 kHz, 20 ms (640 B) frames - `C` (0x43): control JSON — phone sends `{"cmd":"start"|"stop"}`; relay sends `{"event":"hello|started|stopped|error", ...}` ## Manual test ```sh CALLPIPE_PHONE= python /opt/callpipe/callpipe-relay.py # with tools/phone_stub.py running on , place a call routed to BT ```