Repository navigation
supported hardware
| Hardware | Circuit-switched calls | VoWiFi | VoLTE |
|---|---|---|---|
| Quectel EC20 | ✅ | ✅ | ✅ |
| Quectel EC200 / EC200U | ❌ (no audio output) | ✅ | ✅ |
| PC/SC card reader (e.g. OmniKey AG 3x21) | ❌ | ✅ | ❌ |
- Circuit-switched — classic GSM voice; the modem answers the call and sends audio over USB.
- VoWiFi — Wi-Fi Calling, over an IPsec tunnel to the carrier.
- VoLTE — voice over the modem's LTE data connection.
A card reader has no modem or radio at all, so it can only ever provide VoWiFi (its SIM reaches the carrier over your host's own network connection, not a cellular one) — circuit-switched calls and VoLTE both need an actual modem.
This table is about how calls arrive. Where they go afterwards — an
external PBX, or an IP phone registered directly to the bridge
([sip_server].enabled) — is device-independent: every mode above works with
either. See
architecture.md.
The default choice — works for all three modes on the same device. See Setting up a modem below.
Same setup as the EC20, minus the USB-audio step (this model has no audio output, so it's always used for VoWiFi/VoLTE, never circuit-switched calls).
Lets a VoWiFi line's SIM sit in a card reader instead of a modem — useful if you'd rather not dedicate a whole modem to one line, or don't have one free. Setup: docs/omnikey-pcsc-vowifi.md.
One-time preparation — do this before the first run.
1. Host prerequisites
- The modem should appear as
/dev/ttyUSB*(check withdmesg | grep ttyUSB) — theoption/qcserialkernel modules that provide this are normally auto-loaded. - If running outside Docker, add your user to the
dialoutandaudiogroups:sudo usermod -aG dialout,audio $USER.
2. Disable ModemManager — it probes serial ports and corrupts AT sessions:
sudo systemctl stop ModemManager
sudo systemctl disable ModemManager3. Enable USB audio (EC20 only — needed for circuit-switched calls):
minicom -D /dev/ttyUSB2 -b 115200
AT+QCFG="USBCFG",0x2C7C,0x0125,1,1,1,1,1,0,1 # enable UAC
AT+CFUN=1,1 # reboot the moduleAfter it reconnects, confirm with arecord -l / aplay -l — you should
see a card named "Android". Repeat for each module; the setting persists
across reboots.
4. VoLTE (optional, per carrier) — some modems ship with VoLTE locked off. If calls aren't connecting over LTE, see the VoLTE unlock guide.
- Deploy the bridge — see the Quick Start.
- Manage modems at runtime with
card list/restart/set-mode— see operations.md.