I'm opening this issue to document discussions had with @dylanvanassche about VoLTE support, especially in the US, for the OP6.
DylanVanAssche | twiclo: caleb well there are some modem low level config files. Those need to be uploaded to the modem and activated depending on the provider. Besides that, we would need to reverse engineer the QMI messages for the IMS (VoLTE) service. I just bought today a SIM with VoLTE capabilities which is known to work on | Android SDM845 devices. This way, I can try out some stuff when I have time without looking for a capable SIM. Don'tDylanVanAssche | expect anything soon though... There's not really a bug bounting program I think. twiclo | Well please let me know if you need help with testing this feature. I have a mint mobile sim which works off the tmobile network out of the USDylanVanAssche | twiclo: ah the US :p well I'm Belgium where VoLTE is not really a requirement yet, it is only available for a few high end devices to test it out. There's some ModemManager issue about VoLTE, like what woule be needee from the Purism people but that's mostly it twiclo | Yeah here in rural Utah regular calls are practically impossibleDylanVanAssche | If you want to play around with it, you need to use qmicli with the --pdc-* args and upload/activate the right PDC profile for T-Mobile.DylanVanAssche | These profiles are stored in the firmware vendor partition on Android twiclo | Okay I'll have to get in touch with you later on when I'm able to boot my OP6. I'm having issues with that at the moment: https://gitlab.com/postmarketOS/pmaports/-/issues/1874 twiclo | How do you want us to track the progress/how should I get in contact with you? An issue sounds like the way to go hereDylanVanAssche | You can access them on pmOS by mounting one of the modem partitions I thinkDylanVanAssche | However, this stuff is risky...DylanVanAssche | PDC profiles may cause issues when done wrong. I already had such issues :/DylanVanAssche | twiclo: Sure, you can make one on the pmOS pmaports issue tracker and tag meDylanVanAssche | I plan to look into it eventually... Currently making progress on the sensor side, they are hard to get them running :/
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Child items ...
Show closed items
Linked items 0
Link issues together to show that they're related or that one is blocking others.
Learn more.
I'm in the US, have a T-Mobile Prepaid SIM, and have a OnePlus 6T running PostmarketOS. If there is a guide on getting the files (I don't have Android on the phone anymore, but should be able to access the other partitions) and loading them I'd love to try. I can make call audio work, but only by switching to 2G, and basically losing the ability to use data. If I don't have it in 2G, incoming calls go straight to voicemail.
I also have a working OP6 on tmobile and am ready to start tinkering with this. @dylanvanassche or maybe @calebccff are either of you able to tell us which partition is the correct one?
The configs are stored on the modem partition, either modem_a or modem_b, whatever is the most up-to-date. There you will find there a folder called mcfg_sw. If your travel the directories under there, you will find various .mbn files, those are the PDC configs you can upload. They are sorted by country and operator, an example structure can be seen here: https://github.com/JohnBel/QualcommMBNs/tree/master/mbn/OnePlus/3/mcfg_sw/generic
No idea how destructive this all is, USE IT AT YOUR OWN RISK
I'm unable to get anything from those partitions. According to the wiki it should be /dev/sde4 and /dev/sde32. Mounting both of them (like mount -t vfat /dev/sde4 .) shows there's nothing in either partition.
Well 'how do I authenticate' is one of the thousand questions I also have :P Could be that the file is not accepted when it is signed with a different key than OnePlus.
This article has someone wanting to reset his modem. He gets the authentication error when he passes the wrong code (000001) to qmicli -p -d /dev/cdc-wdm0 --dms-validate-service-programming-code=000001
I tried adding that validate command to my load-config and got told it can't make calls to two services at once. I don't see a way to pass a code to the load-config
edit: Pretty sure you need the signature file in the same dir when you try to load a file. I was able to load the config once I had that from the correct partition
If the profile is active, it is not a guarantee that T-Mobile allows the device to register over IMS. However, the profile is definitely a requirement as it contain things like the IMS APN, IMS server for registration, etc. which are carrier specific.
I was able to find the mbn file by copying Adam's mount command (mount -t vfat -o ro /dev/sde32 /mnt), cd-ing to the correct dir and running this qmicli --device=qrtr://0 -p --pdc-load-config=./mcfg_sw.mbn.
It loaded "Commercial-TMO" which doesn't seem to handle VoLTE
For me it does not load the .mbn when I try that, but it appears already loaded when I list configurations. I wonder if there is an updated set of .mbns that adds VoLTE for TMo. I didn't use Android for more than a few seconds when I took it out of the box so I have no idea what version was installed, but my OP6T was practically brand new in box.
I ended up deleting any Commercial-TMO config and reloading the one from the partition. As far as being out of date: I made sure to update the phone before installing pmos. It's looking to me like the OP6/T shipped with VoLTE support
I saw a few that were labelled "OEM VOLTE". I can give those a shot sometime next week. Or maybe @CalcProgrammer1 can try those out. I doubt that'll be the correct config however.
Is there anyone else familiar with VoLTE support on linux that we can loop in? Are there any resources I can read up on to know more? Where did you learn all this?
If I'm understanding this right, Linux doesn't have much to do with VoLTE support. It's all in the modem, right? If we load the proper config into the modem it should just do VoLTE without any additional changes to the Linux side?
I saw a few that were labelled "OEM VOLTE". I can give those a shot sometime next week.
Some people reported on XDA that on Android profiles like Vodafone India worked for any German carrier on the OP6. I guess we have to test out random profiles and see?
Is there anyone else familiar with VoLTE support on linux that we can loop in?
UBports is also working on VoLTE stuff AFAIK, but that's all I know. I tried to get in contact, but I haven't been able to.
Where did you learn all this?
Unfortunately, there's not really a place to learn this stuff. This is all from experience with modems, reverse engineering, and watching other sources like XDA where they sometimes also hack on VoLTE support, but for Android. By gathering this all, you get a view of the components, but a lot is still blackbox...
What's IMS? Where can I learn more about that?
IP Multimedia Subsystem which is the IP part for VoLTE. VoLTE is an IMS service, just like sendings texts etc. over 4G. For voice they just have a fancy well-known name...
Your phone needs to register first with the carrier IMS server through the IMS APN. Once that's working, you can find out which services this carrier has like voice, text, video call, etc.
Linux doesn't have much to do with VoLTE support. It's all in the modem, right?
AFAIK, it is all in the modem. However, we need things on the Linux side to make that the right profile is selected etc.
If we load the proper config into the modem it should just do VoLTE without any additional changes to the Linux side?
Normally yes, but we could be missing more than that. That's a big question currently.
Maybe see if you can receive a phone call. In 4G mode I can't normally receive calls, they go straight to voicemail. If you don't have one, get a Google Voice number. It's free. I use that to test calls on my Linux phones.
I would comb through the interwebs and look for QMI messages that might be relevant for this and start there. There is an IMS service which shows up in qrtr-lookup which is not supported by ModemManager afaik.
The QMI Command's Message ID is 0x8F. This QMI command is yet to be implemented. Hopefully @dylanvanassche can implement it as part of the MR. And we can test if enabling it helps.
I ended up bricking my OnePlus 6T after screwing up my pmOS install and got it to the point where it was stuck in EDL mode. I managed to reflash it with OxygenOS 10.3 which relocked everything, but now I'm going to upgrade it to OxygenOS 11 and experiment with VoLTE there before reinstalling the latest pmOS. Hopefully if I get it working with VoLTE in Android then the modem configuration will persist across into pmOS.
I followed the process here (https://droidwin.com/how-to-enable-volte-and-vowifi-on-any-oneplus-device/) to downgrade the logkit app and then did * # 800 # to access the Function Switch menu and turned on VoLTE and VoWiFi. Rebooted the phone and the settings are available under SIM 1. I turned of VoWiFi in the SIM settings to make it use VoLTE, then tried a test call from Google Voice on my PC. The phone rang and I answered it. The network indicator stayed on LTE and the VoLTE icon stayed in the notification area. I could hear the phone on my PC but not the other way around, but that might just be a microphone permission issue on my PC.
Maybe also check the Phone Information tab when dialing '##4636##'. If you are on there, you tab the 3 dots in the right upper corner and get the IMS status. That shouls give your the registration status of all VoLTE services like IMS, calls, texts, etc.
I did fastboot oem unlock which does a factory reset and it removed the downgraded settings app I used to enable VoLTE/VoWiFi but the settings are still available and enabled in the SIM settings, so that's promising.
Hello, OnePlus 6 similar configuration. Carrier is Mint Mobile, which is a T-Mobile MVNO, so it should be using the T-Mobile profile. VoLTE was working on OxygenOS 11. Status bar, IMS settings, etc. all indicated VoLTE was working. I then flashed postmarketOS edge and VoLTE is not working. I cannot receive calls if 4G is enabled.
The output of the qmicli command appears to show Commercial-TMO as being the active profile.
qmicli output
Total configurations: 25
Configuration 1:
Description: Commercial-TMO
Type: software
Size: 70656
Status: Active
Version: 0x8010536
ID: 7D:87:A8:3A:38:B4:6D:73:B4:AF:04:2A:28:D9:0A:1A:50:3C:C0:B1
I'm upping my bounty. When this gets added to PMOS I'll donate $100 to the project and whoever solves this will also receive $100 personally via paypal/venmo/whatever
I appear to be experiencing the same issue. OnePlus 6T, T-Mobile cellular plan.
I can make phone calls from my phone, but doing so causes my phone to switch to 2G mode.
I can not receive phone calls unless I force 2G mode in mobile broadband settings.
This SIM works fine in my android phone so I'd rather not make any changes to the SIM to get this to work.
I don't believe you're making changes to your sim. You're making config changes to your modem. When you put that sim back into an android phone the android modem is still configured properly.
We're at a point where someone just needs to test all the modem configs that come with the modem and find out which works. If you have the time please do test it. I just had twin babies so I'm out of the game for a while.
If VoLTE works from stock and LineageOS, is it a guarantee that a profile can be switched to to also make VoLTE work on postmarketOS? I don't know how testing is, but if there's like 100 profiles and it's a matter of finding a guaranteed one that works, I could chunk some time out to find it; I'm eager to try pmOS but I need my phone to do cellular things :p
I have a OnePlus 6, Tracfone/TFW in the US with T-Mobile SIM, and VoLTE indicators on stock OxygenOS and LineageOS.
Also is VoLTE mandatory? I did a quick test from OxygenOS by putting my modem to 2G only, and I can still receive and make calls and SMS texts (TFW T-Mobile US). If I recall right from Ubuntu Touch I couldn't make calls at all (or maybe receive them?) but I don't think I did any additional research or changed modem settings and figured the lack-of VoLTE from the OS was the issue. I don't remember if I had a T-Mobile or AT&T SIM at the time but I feel it was AT&T.
Testing abilities are laid out in this thread. You'll have to skim it to check on how to do that. I do believe that if the phone works with LineageOS that means that the modem config is on the modem. @dylanvanassche would have to comment to confirm that.
I think we need some additional stuff for it to instruct the modem to actually register over VoLTE. However, the profiles are a first requirement for sure.
VoLTE seems to be required unless you use 2G. With 4G, I can get texts and high speed data but no calls. With 2G, texts and calls work but data is slow.
My understanding is if you don't have VoLTE your phone will use 2G for the call. The carriers have been saying for years that 2G is going away. When that happens all phones without VoLTE won't be able to do calls. 2G infrastructure isn't being built out anymore so if you live in a new area you need VoLTE
IIRC there were oneplus 6t threads saying it never had general volte support, still the earlier oxygen os modem partitions shipped with volte profiles, and there were ways to enable them. However each update kept overwriting the changes. More current oxygen os completely removed at least the t-mobile profile, but newer? profiles from the Pixel 3 could be installed and made to work.
One reported problem was that the modem always automatically switched back to its default "Overseas-Commercial_DS" profile at the latest on reboot, and did not use any manually uploaded and activated profile as long as that default one wasn't first deactivated for both sims and then removed from the phone (with some pdc tool).
Besides a guide to use that pdc tool on windows, there was also an EfsTools option to overwrite the mcfg_autoselect_by_uim file on the phone with some other, and then only uploading one mcfg_sw.mbn profile, possibly into the root directory of the efs partition? (guess disabling all auto-selection.)
Maybe the first approach can also be done with qmicli pdc commands, but then one would of course still have to find out how to enable the modem's volte client and check its status for success. With qmicli?.
Oh, if you were trying T-Mobile, also I think the stock ones weren't or stopped working (without provider pushed updates), so try the (more recent) ones from pixel 3.
Oxygen OS needed the "VoLTE switch" enabled under "Function Switch" in "OnePlus Logkit" (*#'800#/*#'801# after installing apk). Lineage is said to have it enabled by default.
"Developer mode" with USB debug mode enabled as usual.
"Engineer mode" (connected to the modem?): adb reboot ftm (or adb root); adb shell su; setprop sys.usb.config diag,serial_cdev,rmnet,adb
There are EfsTools.exe versions on github, its "uploadDirectory" option seemed to take a dir or extract dirs from an .mbn file specified as -i, and using -o / as target output dir, -s 1 seemed to select the second, non-default slot1, -v verbose?
The command to overwrite (purposely break) the autoselect was said to be EfsTools.exe writeFile -i mcfg_autoselect_by_uim -o /nv/item_files/mcfg/mcfg_autoselect_by_uim (and second time addding -s 1), both with an empty mcfg_autoselect_by_uimfile.
Seems better to instead just 2*deactivate+remove the "Overseas_Commecial_DS" profile.
I don't know about pmOS, just that working profiles need to be installed on the modem, some pixel ones are on github. Had just fiddled around collecting info long searched for and found on the net to manually enable volte on that thing. It would seem the modem side of it is the same (and would thus need the same workarounds), and then pmOS would still have to "enable" volte on the modem, as it does not seem to be used by default on the 6(t) modem. The modem part could be tested to work using lineage. That should avoid the pitfall of failing in pmOS only due to an old/non-working/never-supported profile.
Wouldn't the correct profile be installed on the modem if the phone previously had something like lineageOS installed which did support VoLTE? Or does installing PMOS reset the modem?
Yes, you need to set the correct profile, sometimes even sideload it.
qmicli has the necessary PDC commands already implemented.
However, besides the correct profile, you still need to setup a connection etc. imsdcm proprietary daemon seems to be one setting up the connection. More stuff might be needed as well. In any case, you have to do almost the same stuff as a mobile connection so even APNs etc. since VoLTE is just another mobile data connection in the end.
I don't know if pmOS images contain or write to the modem partition.
The OS setup would then sound like the terrain of modemmanager to me. However, the pinephone and librem 5 seemed to not need more than have volte enabled in the modem (some AT commands).
pmOS does not touch anything related to the modem EFS.
PinePhone and Librem5 use modems where the firmware contains everything for VoLTE, so it does automatically the setup of the data connection with the IMS APN. This is not the case for regular Android, some userspace components are involved. We don't know yet all of them, but we do know for example that CarrierConfig apps (privileged!) can modify things regarding VoLTE and other stuff.
Thanks, too bad if no corresponding AT commands are supported, that explains it. That might be the same carrier apps that according to the eSIM standard also trigger downloading of the eSIM profiles, by requesting them from the global gatekeepers of the eSIM hardware- and the profile-signing services, as provided to them by network providers, and establishing for them and the mobile network providers "real time access to their hardware".