OS Check: This guide covers 32-bit Qualcomm Android 11 (first verified profile: BlackBerry Passport LineageOS 18.1). Stock BB10 OS 10.3.3 users: open the BB10 VoLTE Guide →

SETUP & INTEGRATION GUIDE · v1.1.0-r1

From USB activation to unplugged multi-carrier calls

Follow each stage in order: verify prerequisites → enable Rooted Debugging → run one of the four activation workflows → unplug USB to test calls and swap SIM cards freely.

01. Prerequisites & Verified Device Profile

  1. Verified Device Profile: Ships with blackberry-passport-wolverine supporting BlackBerry Passport (SQW100-1 / SQW100-3 / SQW100-4, codename wolverine) on LineageOS 18.1-UNOFFICIAL-wseries (Android 11 / API 30, SELinux Enforcing). Unverified devices are blocked from EFS writes automatically.
  2. Provisioned SIM: Insert an active 4G/5G USIM with VoLTE enabled on supported FDD-LTE bands and confirm LTE data attaches normally.
  3. Idle Phone State: Ensure no call is active, battery is above 30%, and use a reliable USB data cable.
Data Safety: Activation only provisions the 54 profile-verified IMS modem items (after saving a local backup) and installs Qcom32VolteIms—it does not wipe user data. Never rely on experimental legacy modifications as your sole emergency (911/112) device.

02. Enable LineageOS 18.1 USB & Rooted Debugging

When using Method 1 (Windows EXE) or Method 3 (Portable CLI), Magisk is not required:

  1. Open Settings → About phone and tap Build number 7 times to unlock Developer Options.
  2. Open Settings → System → Advanced → Developer options.
  3. Turn ON Android debugging and Rooted debugging on the same screen.
  4. Connect via USB and accept the “Allow USB debugging?” RSA fingerprint dialog on the phone.

03. Method 1: Windows Desktop One-Click EXE (Recommended)

  1. Download and launch qcom32-volte-1.1.0-r1-windows-x64.exe.
  2. Verify your device serial appears in “ADB Device” and click “1. Check Status (Read-Only)”.
  3. Click “2. Backup & Activate VoLTE (Recommended)” and confirm.
  4. The tool switches to adb root, saves a pre-deployment EFS snapshot under %LOCALAPPDATA%\qcom32-volte\backups\, provisions Stage 6A + EFS_SYNC, migrates/installs Qcom32VolteIms.apk v2.4, reboots normally, and polls until volte_stack_healthy: true.
  5. Click “Install Mobile Companion App” so you can monitor live IMS status directly on the phone screen while unplugged.

04. Method 2: On-Device Companion App

  1. Install Qcom32VolteManager-1.1.0-r1.apk (launcher icon: Qcom32 VoLTE).
  2. Without Magisk (Zero-su Live Dashboard): Tap “Refresh Live Status” anytime to read carrier PLMN, rild_ims0, QMI_IMSA bearer/registration, and framework IMS state over content://org.octolab.qcom32ims.status.
  3. With Magisk (su): Tap “Activate / Repair Native VoLTE (Magisk su)” to run SHA-256-verified backup, Stage 6A provisioning, APK installation, or factory rollback right on the device.

05. Method 3: macOS / Linux / Cross-Platform Portable ZIP

Extract qcom32-volte-1.1.0-r1-portable.zip (requires Python 3.9+ and adb):

python3 cli/volte_ctl.py self-test
python3 cli/volte_ctl.py status
python3 cli/volte_ctl.py deploy
python3 cli/volte_ctl.py install-manager
# Or launch the cross-platform Tkinter GUI:
python3 cli/gui.py

06. Method 4: LineageOS 18.1 ROM Integration & 32-Bit Porting

ROM builders can bake Qcom32VolteIms into /system/priv-app/ using rom-integration/Android.bp and device-qcom32-volte.mk:

mkdir -p packages/apps/Qcom32VolteIms
cp -r src/android-ims-service/* src/qmi-imsa-probe rom-integration/Android.bp packages/apps/Qcom32VolteIms/
# Add to your 32-bit Qualcomm device.mk:
$(call inherit-product, packages/apps/Qcom32VolteIms/device-qcom32-volte.mk)

Because Android ROM zips do not overwrite Qualcomm’s dedicated modem EFS partition, modem EFS provisioning must still be run once per handset. For onboarding OnePlus One, Xperia Z2/Z3, Galaxy S5, Mi 4, LG G3, and HTC One M8 via devices/<id>/profile.json, see MSM8974_PORTING_GUIDE.md and devices/README.md.

07. Zero-PC Multi-Carrier SIM Swapping

Stage 6A modem EFS settings use the standard ims APN and dynamic PCO (mode=0), while CarrierConfigBootstrapReceiver listens to SIM_STATE_CHANGED and CARRIER_CONFIG_CHANGED to automatically bind VoLTE to any newly inserted SIM’s subId—no PC connection is required after swapping SIMs. On Passport SQW100-1, note hardware RF supports FDD-LTE B1/B2/B3/B4/B5/B7/B8/B13/B17/B20 (China Unicom & China Telecom FDD LTE nationwide; China Mobile in FDD B3/B8 areas with automatic 2G GSM fallback in TDD-only B38-41 cells).

08. Live Call Acceptance Checklist

  1. Unplug the USB cable and verify Qcom32 VoLTE shows “VoLTE Stack Active & Registered”;
  2. Place an outgoing call in the stock Dialer: confirm clear two-way audio and verify the status bar stays on LTE / 4G;
  3. Receive an incoming call: confirm ringing, accurate Caller ID display (not “Unknown”), and clean hangup;
  4. Reboot the phone normally, wait ~25 seconds after unlock, and place another call to confirm hands-free boot recovery.

09. Full Factory Modem EFS Rollback

Click “Restore Factory Modem EFS & Uninstall” in the desktop GUI or run:

python3 cli/volte_ctl.py rollback

10. Verify SHA-256 Checksums

# Windows PowerShell:
Get-FileHash "$HOME\Downloads\qcom32-volte-1.1.0-r1-windows-x64.exe" -Algorithm SHA256

# macOS / Linux:
shasum -a 256 ~/Downloads/qcom32-volte-1.1.0-r1-portable.zip