User:TravMurav/Dual-Sim QMI draft
Some dual-sim devices may have a problem where the modem will not select your SIM automatically. When it happens you may need to manually select an application that will handle authentification on your SIM.
This guide happens to work in general but sometimes vendor (like Motorolla on harpia) may change modem firmware and you will need another solution
(Examples provided for wileyfox-crackling)
- 1 Preparation
- 2 Making dual-sim QMI modem work
- 3 Notes:
- 4 References
We don't need custom libqmi anymore, but this instruction is saved for reference
Get working libqmi (at the time of writing libqmi from Alpine crashes with segfault on attempt of communicating with modem):
(This is done with pmbootstrap on your local machine)
cd ~/.local/var/pmbootstrap/cache_git/pmaports/temp mkdir libqmi cd libqmi wget https://gist.githubusercontent.com/Minecrell/eddea99e7c7b17c2a723d8ea657d56ea/raw/cf7a7e1467c062fce459a94ec9d479bb8a22712c/APKBUILD pmbootstrap build libqmi --arch aarch64
(This is done on your device)
sudo apk add libqmi
Make sure you have
Also make sure you have selected proper kernel variant (with
-modem) and enabled
Making dual-sim QMI modem work
Boot device with working SIM inserted.
Make sure oFono services are stopped:
$ sudo rc-service ofono stop * Stopping oFono ... $ sudo rc-service ofono-auto-enable stop * Stopping ofono-auto-enable ...
Check that your modem is working and detected SIM in slot:
$ sudo qmicli -d /dev/modem --uim-get-card-status [/dev/modem] Successfully got card status Provisioning applications: Primary GW: session doesn't exist Primary 1X: session doesn't exist Secondary GW: session doesn't exist Secondary 1X: session doesn't exist Slot : Card state: 'present' UPIN state: 'not-initialized' UPIN retries: '0' UPUK retries: '0' Application : Application type: 'usim (2)' Application state: 'detected' Application ID: [ YOUR AID FOR THIS SIM ] Personalization state: 'unknown' UPIN replaces PIN1: 'no' PIN1 state: 'not-initialized' PIN1 retries: '0' PUK1 retries: '0' PIN2 state: 'not-initialized' PIN2 retries: '0' PUK2 retries: '0' Slot : Card state: 'error: no-atr-received (3) UPIN state: 'not-initialized' UPIN retries: '0' UPUK retries: '0'
Note that neither of four provisioning applications is present: On harpia it wasn't the case, application was already selected but modem didn't go online anyway.
You also can see list of your slots and state of cards in them. You may have more than one application though, for now we only need USIM one.
If you have an application selected already, please check if you have
$ sudo qmicli -d /dev/modem --dms-uim-get-state [/dev/modem] UIM state retrieved: State: 'not-present'
This shows a (suspected) bug in firmware where it reports the wrong state if the application was selected too early (Some kind of race condition in the modem). You need to clear selected application by doing this:
$ sudo qmicli -d /dev/modem --uim-change-provisioning-session='activate=no,session-type=primary-gw-provisioning'
Now you can try to select an application on your SIM:
In the following command you may need to change slot that you are using and you
$YOUR_AID with Application ID that you got from
previous command. (note that applications have different IDs)
$ sudo qmicli -d /dev/modem --uim-change-provisioning-session="slot=1,activate=yes,session-type=primary-gw-provisioning,aid=$YOUR_AID" [/dev/modem] Successfully changed provisioning session
Error like this may mean that either you did something wrong or that you need a different approach. (The message in qmicli for this error is wrong and only means that modem didn't like something)
error: could not power off SIM: QMI protocol error (3): 'Internal'
If the command would succeed you will have application sellected:
$ sudo qmicli -d /dev/modem --uim-get-card-status [/dev/modem] Successfully got card status Provisioning applications: Primary GW: slot '1', application '1' Primary 1X: session doesn't exist Secondary GW: session doesn't exist Secondary 1X: session doesn't exist Slot : Card state: 'present' UPIN state: 'not-initialized' UPIN retries: '0' UPUK retries: '0' Application : Application type: 'usim (2)' Application state: 'ready' Application ID: [ AID ] Personalization state: 'ready' UPIN replaces PIN1: 'no' PIN1 state: 'disabled' PIN1 retries: '3' PUK1 retries: '10' PIN2 state: 'enabled-not-verified' PIN2 retries: '2' PUK2 retries: '10' Slot : Card state: 'error: no-atr-received (3) UPIN state: 'not-initialized' UPIN retries: '0' UPUK retries: '0'
Only thing left is to start ofono and connect to the network:
$ sudo rc-service ofono start * Starting oFono ... $ sudo rc-service ofono-auto-enable start * Starting ofono-auto-enable ...
$ cd /usr/lib/ofono/test/ $ ./enable-modem Connecting modem /gobi_0... $ ./list-modems [ /gobi_0 ] Online = 0 Powered = 1 Lockdown = 0 Emergency = 0 Manufacturer = QUALCOMM INCORPORATED Model = 0 Revision = MPSS.DPM.2.0.2.c1.4-00015-M8936FAAAANUZM-1 1 [Apr 29 2015 05:00:00] Serial = XXXXXXXXXXXXXXX SystemPath = /sys/devices/platform/soc/4080000.hexagon/remoteproc/remoteproc0/remoteproc0:smd-edge/remoteproc0:smd-edge.rpmsg_chrdev.0.0/rpmsg/rpmsg_ctrl1/rpmsg0 Interfaces = org.ofono.SmartMessaging org.ofono.PushNotification org.ofono.MessageManager org.ofono.LongTermEvolution org.ofono.RadioSettings org.ofono.MessageWaiting org.ofono.AllowedAccessPoints org.ofono.SimManager org.ofono.VoiceCallManager Features = sms rat sim Type = hardware [ org.ofono.SmartMessaging ] [ org.ofono.PushNotification ] [ org.ofono.MessageManager ] ServiceCenterAddress = +XXXXXXXXXXX UseDeliveryReports = 0 Bearer = cs-preferred Alphabet = default [ org.ofono.LongTermEvolution ] DefaultAccessPointName = Protocol = ip AuthenticationMethod = none Username = Password = [ org.ofono.RadioSettings ] TechnologyPreference = any AvailableTechnologies = gsm umts lte [ org.ofono.MessageWaiting ] VoicemailWaiting = 0 VoicemailMessageCount = 0 VoicemailMailboxNumber = [ org.ofono.AllowedAccessPoints ] [ org.ofono.SimManager ] Present = 1 CardIdentifier = XXXXXXXXXXXXXXXXXXXX SubscriberIdentity = XXXXXXXXXXXXXXX FixedDialing = 0 BarredDialing = 0 MobileCountryCode = XXX MobileNetworkCode = XX SubscriberNumbers = +XXXXXXXXXXX LockedPins = PinRequired = none Retries = [pin = 3] [pin2 = 2] [puk = 10] [puk2 = 10] CardSlotCount = 1 ActiveCardSlot = 1 [ org.ofono.VoiceCallManager ] EmergencyNumbers = 911 112 $ ./online-modem Setting modem /gobi_0 online...
Now you can send an SMS!
Using ofono test scripts:
$ cd /usr/lib/ofono/test/ $ ./send-sms "+XXXXXXXXXXX" "Hello from pmOS!" 0 Send message using modem /gobi_0 ... /gobi_0/message_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Or you can try to make a call!
$ cd /usr/lib/ofono/test/ $ ./dial-number "number" Using modem /gobi_0 /gobi_0/voicecall01 $ ./hangup-active [ /gobi_0/voicecall01 ] active
$ qdbus-qt5 --system org.ofono /gobi_0 org.ofono.VoiceCallManager.Dial "number" "" ... $ qdbus-qt5 --system org.ofono /gobi_0 org.ofono.VoiceCallManager.HangupAll
Automating this process
At some point I wrote a hacky script that does all of that automatically as a system service. If this guide works for you, you could try installing it from this page Ideally it should be replaced with something less fragile but at least it works as PoC.
"valid" session-type values are:
|primary-gw-provisioning||Primary GSM/WCDMA provisioning.|
|primary-1x-provisioning||Primary CDMA1x provisioning.|
|secondary-gw-provisioning||Secondary GSM/WCDMA provisioning.|
|secondary-1x-provisioning||Secondary CDMA1x provisioning.|
|nonprovisioning-slot-1||Nonprovisioning on slot 1.|
|nonprovisioning-slot-2||Nonprovisioning on slot 2.|
|type-card-slot-1||Card on slot 1.|
|type-card-slot-2||Card on slot 2.|
|logical-channel-slot-1||Logical channel on slot 1.|
|logical-channel-slot-2||Logical channel on slot 2.|