Hi,
We are getting following error when trying to send pin to the SIM card. The
problem is not observed in MM 1.20.4. However, please note that the SIM card
does unlocks after the below command even though error is reported.
# mmcli -i 0 --pin=1234
error: couldn't send PIN code to the SIM:
'GDBus.Error:org.freedesktop.ModemManager1.Error.Core.Failed: Couldn't get
interface skeleton'
Now, after looking through the code, following change is causing this issue.
This change was not present in 1.20.4
mm-broadband-modem-mbim.c:
if ((self->priv->enabled_cache.last_ready_state !=
MBIM_SUBSCRIBER_READY_STATE_DEVICE_LOCKED &&
ready_state == MBIM_SUBSCRIBER_READY_STATE_DEVICE_LOCKED) ||
(self->priv->enabled_cache.last_ready_state ==
MBIM_SUBSCRIBER_READY_STATE_DEVICE_LOCKED &&
ready_state != MBIM_SUBSCRIBER_READY_STATE_DEVICE_LOCKED)) {
mm_obj_dbg (self, "Lock state change detected");
active_sim_event = TRUE;
}
self->priv->enabled_cache.last_ready_state = ready_state;
if (active_sim_event) {
mm_iface_modem_process_sim_event (MM_IFACE_MODEM (self));
}
What is happening is when SIM PIN lock state changes then
mm_iface_modem_process_sim_event () is called which eventually calls
mm_base_modem_set_reprobe(). The reprobe, "unexports" the current modem
instance (modem 0) and recreates a new modem instance (1). As a result, the
above mmcli command is reporting error. I'm not sure why this should happen for
SIM Lock state change.
The logs are below. As you can see at timestamp 1713774618.140486, the modem
is unexported and then it's all cleanup and creation of new modem instance.
Please advise.
[1713774617.896807] [modem0/sim0] sending PIN...
[1713774617.896908] [/dev/cdc-wdm0] sent message...
<< RAW:
<< length = 80
<< data = 03:00:00:00:50:00:00:00:17:00:00:00...
[1713774617.897063] [/dev/cdc-wdm0] sent message (translated)...
<< Header:
<< length = 80
<< type= command (0x0003)
<< transaction = 23
<< Fragment header:
<< total = 1
<< current = 0
<< Contents:
<< service = 'basic-connect' (a289cc33-bcbb-8b4f-b6b0-133ec2aae6df)
<< cid = 'pin' (0x0004)
<< type= 'set' (0x0001)
<< Fields:
<< PinType = 'pin1'
<< PinOperation = 'enter'
<< Pin = '1234'
<< NewPin = '(NULL)'
[1713774618.139714] [/dev/cdc-wdm0] received message...
>> RAW:
>> length = 144
>> data = 07:00:00:80:90:00:00:00:00:00:00:00...
[1713774618.139908] [/dev/cdc-wdm0] received message (translated)...
>> Header:
>> length = 144
>> type= indicate-status (0x8007)
>> transaction = 0
>> Fragment header:
>> total = 1
>> current = 0
>> Contents:
>> service = 'basic-connect' (a289cc33-bcbb-8b4f-b6b0-133ec2aae6df)
>> cid = 'subscriber-ready-status' (0x0002)
>> Fields:
>> ReadyState = 'not-initialized'
>> SubscriberId = '###'
>> SimIccId = '###'
>> ReadyInfo = 'none'
>> TelephoneNumbersCount = '0'
>> TelephoneNumbers = '###'
[1713774618.139979] [modem0] received notification (service
'basic-connect', command 'subscriber-ready-status')
[1713774618.140012] [modem0] processed subscriber ready status
notification
[1713774618.140033] [modem0] Lock state change detected
[1713774618.140052] [modem0] Processing SIM event
[1713774618.140486] [device
/sys/devices/platform/soc/soc:internal-regs/f10f.usb3/usb3/3-1] unexported
modem from path '/org/freedesktop/ModemManager1/Modem/0'
[1713774618.140532] [modem0] supported notifications: signal (no),
registration (no), sms (no), connect (no), subscriber (no), packet (no), pco
(no), ussd (no), lte attach info (no), provisioned contexts (no),
slot_info_status (no)
[1713774618.140585] [cdc-wdm0/mbim] Releasing client for service 'uim'...
[1713774618.140623] [/dev/cdc-wdm0] releasing 'uim' client with flags
'release-cid'...
[1713774618.140657] [/dev/cdc-wdm0] unregistered 'uim' client with ID '2'
[1713774618.140769] [/dev/cdc-wdm0] sent message...
<< RAW:
<< length = 17
<< data = 01:10:00:00:00:00:00:07:23:00:05:00...
[1713774618.140910] [/dev/cdc-wdm0] sent generic request (translated)...
<< QMUX:
<< length = 16
<< flags = 0x00
<< service = "ctl"
<< client = 0
<< QMI:
<< flags = "none"
<< transaction = 7
<< tlv_length = 5
<< message = "Release CID" (0x0023)
<< TLV:
<< type = "Release Info" (0x01)
<< length = 2
<< value = 0B:02
<< translated = [ service = 'uim' cid = '2' ]
[1713774618.140994] [/dev/cdc-wdm0] sent message...
<< RAW:
<< length = 65
<< data = 03:00:00:00:41:00:00:00:15:00:00:00...
[1713774618.141233] [/dev/cdc-wdm0] sent message (translated)...
<< Header:
<< length