Profile-Guarded EFS Provisioning
Matches devices/*/profile.json before touching /dev/diag; writes 405B dynamic-PCO qp_ims_reg_config + 789B IPV4V6 profile4 on verified Passport hardware.
QUALCOMM 32-BIT (MSM8974) · ANDROID 11 · VERIFIED: BLACKBERRY PASSPORT
ImsService for 32-bit Snapdragon.Qualcomm ended official Snapdragon 800/801 (MSM8974) support at Android 6.0, leaving Android 11 custom ROMs with LTE data but no voice calls after 2G/3G shutdowns. Qcom32 VoLTE provides a clean-room 32-bit Android 11 ImsService stack paired with profile-guarded Hexagon modem EFS provisioning—with BlackBerry Passport (wolverine) live-verified end to end.
Current release: v1.1.0-r1 (generic Qcom32VolteIms v2.4 + Qcom32VolteManager v1.1.0 + blackberry-passport-wolverine profile). Read the Setup Guide
Generic Stack + Profile GuardReusable Android 11 ImsService with device-gated EFS writes
No Magisk + Auto SIM SwapRooted Debugging setup & automatic CarrierConfig re-bind
Pre-Backup & Full RollbackRestores all 54 modem EFS items on demand
Across 32-bit Qualcomm platforms, the Android 11 ImsService and rild_ims0 protobuf call engine are shared, while baseband PDP profile slots must be strictly gated per device.
Matches devices/*/profile.json before touching /dev/diag; writes 405B dynamic-PCO qp_ims_reg_config + 789B IPV4V6 profile4 on verified Passport hardware.
Package org.octolab.qcom32ims running in UID 1001 with zero manifest permissions, persistent CarrierConfig binding, MO/MT call engine, and read-only VolteStatusProvider.
No VoIP apps or background daemons. Survives USB unplugging, normal reboots, and multi-carrier SIM swaps while keeping LTE active during calls.
Qcom32VolteIms and read-only libimsa_probe.so work generically across 32-bit Qualcomm targets, while modem EFS mutations strictly require a verified devices/*/profile.json match and CRC-16 checks.
Declaring extra permissions in a runtime-installed android.uid.phone APK breaks telephony on Android 11; bytecode gates enforce zero manifest permissions.
Exposes a zero-PII read-only content://org.octolab.qcom32ims.status endpoint so Qcom32VolteManager displays live QMI_IMSA & IMS status on-screen without Magisk su.
Most users should run Method 1 (Windows EXE) once over USB, and click “Install Mobile Companion App” so live status is always visible on the phone screen while unplugged.
qcom32-volte-1.1.0-r1-windows-x64.exe
Single-file GUI bundling Python/Tk, official adb.exe, device profiles, and all signed phone payloads—zero external setup required.
%LOCALAPPDATA%\qcom32-volte\backups\Qcom32VolteIms install, reboot, and verificationQcom32VolteManager-1.1.0-r1.apk (org.octolab.qcom32volte)
Standalone user-space app (signed with its own key so it never collides with UID 1001) embedding SHA-256-verified payloads.
rild_ims0, QMI_IMSA VoIP, and framework IMS status directly on-screensu) is installed, provision Stage 6A, upgrade the APK, or roll back modem EFS directly on the deviceqcom32-volte-1.1.0-r1-portable.zip
Zero-dependency Python 3 CLI and Tkinter GUI paired with prebuilt ARM32 binaries, signed APKs, and devices/ profiles.
python3 cli/volte_ctl.py status — Read-only live telemetrypython3 cli/volte_ctl.py deploy / upgrade-apk / install-manager / rollbackpython3 cli/gui.py — Cross-platform desktop GUIrom-integration/Android.bp + device-qcom32-volte.mk
Drop-in Soong build rules to bake Qcom32VolteIms into /system/priv-app/, plus device profile onboarding docs for fellow 32-bit Snapdragon flagships.
ikimi615/qualcomm-volte-enabler inspired initial /dev/diag exploration on BlackBerry KEY2 (SDM660 Android 8.1), whereas 32-bit MSM8974 on Android 11 required solving five structural gaps.
| Dimension | qualcomm-volte-enabler (KEY2 Reference) | qcom32-volte (32-Bit Qualcomm Android 11 Stack) |
|---|---|---|
| SoC, ABI & OS | Snapdragon 660 (arm64-v8a), stock Android 8.1 already ships Qualcomm’s proprietary ims.apk stack. |
32-bit Qualcomm (MSM8974, armeabi-v7a), bridging LineageOS 18.1 (Android 11) where ImsService is completely absent. |
/dev/diag Contract |
Ships prebuilt 64-bit efs_Write; pointer-style ioctl returns EINVAL (-22) on MSM8974 kernel, and MEMORY_DEVICE_MODE blocks EFS ops. |
Open-source 32-bit C pp_regconfig_provision_v6 (549 unit assertions) using scalar ioctl, sequence16+errno32 headers, and CCITT CRC-16. |
| Baseband EFS Scope | Writes 1 byte (IMS_enable=01). Live-tested on Passport (1.61/1.62/1.81): still fails with CAUSE_CODE 54 READ_FAILED & NOT_REGISTERED. |
Decompressed 11.7MB Q6ZIP Hexagon firmware to build Stage 6A: 54 coordinated EFS/DS items (405B qp_ims_reg_config + 789B IPV4V6 profile4 + standalone DCM). |
| Android Stack & Caller ID | Zero Android app code (README mentions of qcril.db and boot scripts are unimplemented in its 4 shell scripts). |
Clean-room Qcom32VolteIms.apk v2.4 (rild_ims0 protobuf engine, persistent CarrierConfig, 3GPP CLIP→OIR + TOA=145 Caller ID fix). |
| Root & Rollback Safety | Requires Magisk; auto_enable_volte.sh performs no backup, writes even after read failure, and has no rollback tool. |
No Magisk required (LineageOS Rooted Debugging + zero-su on-phone status dashboard), mandatory pre-backup, and verified --rollback-all. |
Live-verified device profiles and community porting targets are documented transparently.
wolverine)BlackBerry Passport (SQW100-1 / SQW100-3 / SQW100-4) running LineageOS 18.1-UNOFFICIAL-wseries (API 30), backed by blackberry-passport-wolverine.
mode=0 dynamic PCO). Note SQW100-1 RF supports FDD-LTE B1/B2/B3/B4/B5/B7/B8/B13/B17/B20 (no TDD B38-41 or CDMA 1x): Unicom & Telecom work across FDD LTE; China Mobile works in FDD B3/B8 cells and falls back to 2G GSM in TDD-only cellsOnePlus One (bacon), Xiaomi Mi 4 / Note (cancro), Sony Xperia Z1/Z2/Z3, Samsung Galaxy S5 (klte), LG G2/G3, and HTC One M8 on Android 10/11.
Qcom32VolteIms.apk (on any ROM exposing rild_ims0), Qcom32VolteManager.apk, read-only libimsa_probe.so, and scalar /dev/diag EFS codecs/nv/item_files/pdp_profiles/ read-only to confirm its ims slot index and add a verified devices/<id>/profile.jsonStill running stock BlackBerry 10 OS 10.3.3.3216 (QNX microkernel) on your Passport, Classic (Q20), Q10, or Porsche Design P’9983?
Current Release
v1.1.0-r1 · Generic Stack
Windows 10 / 11 · x64No Magisk · Bundled Python/ADB
Double-click to launch. Connect your phone with USB Debugging + Rooted Debugging enabled to inspect status, back up EFS, activate VoLTE, push the Companion App, or roll back.
Unsigned independent open-source binary; verify the SHA-256 hash before running if Windows SmartScreen prompts.Qcom32VolteManager.apkAndroid 11 ARM32 · Zero-su Status
Install on your phone: view live carrier PLMN, rild_ims0, QMI_IMSA, and framework IMS status anytime without root, or provision/rollback on-device with Magisk.
Qcom32VolteIms.apk v2.4 and pp_regconfig_provision_v6.
macOS / Linux / ROM Maintainers: Portable CLI/GUI bundle, platform-signed generic IMS APK, and clean open-source archive.
Served directly via Cloudflare R2 (qcom32-downloads.octoooo.com). Identical files and checksums are also mirrored on GitHub Releases:
GitHub Windows EXE · GitHub Companion APK · GitHub Portable ZIP · GitHub IMS APK · GitHub SHA-256
Every line of C, Java, and Python—from Q6ZIP baseband findings to the generic Android 11 ImsService—is published under Apache-2.0. Carrier test reports and new MSM8974 device profiles are welcome.
Follow the complete step-by-step guide for Rooted Debugging setup, activation, multi-carrier SIM swaps, and factory rollback.
Open Complete GuideNo! LineageOS 18.1 includes built-in “Rooted debugging” under Developer Options, allowing our Windows EXE or cross-platform CLI to run adb root over USB once. After activation, unplug USB, reboot, and swap SIMs freely—and Qcom32VolteManager.apk displays live telemetry on-screen without Magisk.
Automatically. Deploying or upgrading with v1.1.0-r1 cleans up legacy org.passport.volteims overrides and migrates cleanly to org.octolab.qcom32ims (v2.4).
Yes. Qcom32VolteIms v2.4 translates 3GPP CLIP presentation values into Android’s ImsCallProfile.OIR_* constants, normalizes TOA=145 international numbers, and pushes callSessionUpdated so incoming numbers match Contacts cleanly.
Yes. Every deployment saves a local pre-activation snapshot first, and “Restore Factory Modem EFS & Uninstall” (or volte_ctl.py rollback) restores all 54 EFS items, runs EFS_SYNC, uninstalls the APK, and reboots cleanly.
No. This is an experimental community hardware-preservation project and has not undergone emergency services certification (E911 / IMS Emergency PDN). Do not rely on modified legacy devices as your sole emergency phone.