diff options
-rw-r--r-- | NEWS | 30 | ||||
-rw-r--r-- | cli/mmcli-common.c | 4 | ||||
-rw-r--r-- | cli/mmcli-manager.c | 9 | ||||
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | plugins/cinterion/77-mm-cinterion-port-types.rules | 32 | ||||
-rw-r--r-- | plugins/telit/mm-broadband-modem-telit.c | 2 | ||||
-rw-r--r-- | plugins/zte/mm-broadband-modem-zte.c | 20 | ||||
-rw-r--r-- | src/mm-broadband-modem-mbim.c | 7 | ||||
-rw-r--r-- | src/mm-broadband-modem-qmi.c | 1 | ||||
-rw-r--r-- | src/mm-iface-modem.c | 8 | ||||
-rw-r--r-- | src/mm-sms-part-cdma.c | 2 |
11 files changed, 87 insertions, 30 deletions
@@ -1,4 +1,34 @@ +ModemManager 1.14.10 +------------------------------------------- +This is a new bugfix release of ModemManager. + + * Modem interface: + ** Plug MmGdbusModem leak when bearers are updated. + ** Don't consider charset setup failure as fatal. + + * Messaging interface: + ** Fix 7-bit ASCII decoding in CDMA SMS messages. + + * QMI: + ** Fix reporting of signal strengh indications. + + * MBIM: + ** Plug memleak when processing USSD in GSM7. + + * mmcli: + ** Don't assume that mm_object_peek|get_modem() return always non-NULL. + + * Plugins: + ** cinterion: add PLS83 port type hints. + ** cinterion: add QCDM and GPS port type hints for PLS26. + ** cinterion: add AT primary/secondary port type hints for PLS8. + ** telit: plug GPS data port leak. + ** zte: add after SIM unlock delay. + + * Several other minor improvements and fixes. + + ModemManager 1.14.8 ------------------------------------------- This is a new bugfix release of ModemManager. diff --git a/cli/mmcli-common.c b/cli/mmcli-common.c index 59498caf..f8eff661 100644 --- a/cli/mmcli-common.c +++ b/cli/mmcli-common.c @@ -205,7 +205,9 @@ find_modem (MMManager *manager, MMModem *modem; obj = MM_OBJECT (l->data); - modem = MM_MODEM (mm_object_get_modem (obj)); + modem = mm_object_get_modem (obj); + if (!modem) + continue; if (modem_any || (modem_path && g_str_equal (mm_object_get_path (obj), modem_path)) || diff --git a/cli/mmcli-manager.c b/cli/mmcli-manager.c index 950617b6..6d495a95 100644 --- a/cli/mmcli-manager.c +++ b/cli/mmcli-manager.c @@ -332,9 +332,14 @@ output_modem_info (MMObject *obj, gchar *extra; const gchar *manufacturer; const gchar *model; + MMModem *modem; - manufacturer = mm_modem_get_manufacturer (mm_object_peek_modem (obj)); - model = mm_modem_get_model (mm_object_peek_modem (obj)); + modem = mm_object_peek_modem (obj); + if (!modem) + return; + + manufacturer = mm_modem_get_manufacturer (modem); + model = mm_modem_get_model (modem); extra = g_strdup_printf ("[%s] %s", manufacturer ? manufacturer : "manufacturer unknown", model ? model : "model unknown"); diff --git a/configure.ac b/configure.ac index 73c8ecfa..e409e998 100644 --- a/configure.ac +++ b/configure.ac @@ -6,7 +6,7 @@ dnl m4_define([mm_major_version], [1]) m4_define([mm_minor_version], [14]) -m4_define([mm_micro_version], [9]) +m4_define([mm_micro_version], [11]) m4_define([mm_version], [mm_major_version.mm_minor_version.mm_micro_version]) diff --git a/plugins/cinterion/77-mm-cinterion-port-types.rules b/plugins/cinterion/77-mm-cinterion-port-types.rules index 51caf221..f9324053 100644 --- a/plugins/cinterion/77-mm-cinterion-port-types.rules +++ b/plugins/cinterion/77-mm-cinterion-port-types.rules @@ -16,6 +16,8 @@ ATTRS{idVendor}=="1e2d", ATTRS{idProduct}=="0053", ENV{.MM_USBIFNUM}=="01", ENV{ # ttyACM2 (if #4): GPS data port # ttyACM3 (if #6): unknown # ttyACM4 (if #8): unknown +ATTRS{idVendor}=="1e2d", ATTRS{idProduct}=="0061", ENV{.MM_USBIFNUM}=="00", ENV{ID_MM_PORT_TYPE_AT_PRIMARY}="1" +ATTRS{idVendor}=="1e2d", ATTRS{idProduct}=="0061", ENV{.MM_USBIFNUM}=="02", ENV{ID_MM_PORT_TYPE_AT_SECONDARY}="1" ATTRS{idVendor}=="1e2d", ATTRS{idProduct}=="0061", ENV{.MM_USBIFNUM}=="04", ENV{ID_MM_PORT_TYPE_GPS}="1" ATTRS{idVendor}=="1e2d", ATTRS{idProduct}=="0061", ENV{.MM_USBIFNUM}=="06", ENV{ID_MM_PORT_IGNORE}="1" ATTRS{idVendor}=="1e2d", ATTRS{idProduct}=="0061", ENV{.MM_USBIFNUM}=="08", ENV{ID_MM_PORT_IGNORE}="1" @@ -25,25 +27,35 @@ ATTRS{idVendor}=="1e2d", ATTRS{idProduct}=="005b", ENV{ID_MM_CINTERION_MODEM_FAM # PLS62 family non-mbim enumeration # ttyACM0 (if #0): AT port # ttyACM1 (if #2): AT port -# ttyACM2 (if #4): can be AT or GNSS in some models, best left ignored -# ttyACM3 (if #6): unknown -# ttyACM4 (if #8): unknown +# ttyACM2 (if #4): can be AT or GNSS in some models +# ttyACM3 (if #6): AT port (but just ignore) +# ttyACM4 (if #8): DIAG/QCDM ATTRS{idVendor}=="1e2d", ATTRS{idProduct}=="005b", ENV{.MM_USBIFNUM}=="00", ENV{ID_MM_PORT_TYPE_AT_PRIMARY}="1" ATTRS{idVendor}=="1e2d", ATTRS{idProduct}=="005b", ENV{.MM_USBIFNUM}=="02", ENV{ID_MM_PORT_TYPE_AT_SECONDARY}="1" -ATTRS{idVendor}=="1e2d", ATTRS{idProduct}=="005b", ENV{.MM_USBIFNUM}=="04", ENV{ID_MM_PORT_IGNORE}="1" +ATTRS{idVendor}=="1e2d", ATTRS{idProduct}=="005b", ENV{.MM_USBIFNUM}=="04", ENV{ID_MM_PORT_TYPE_GPS}="1" ATTRS{idVendor}=="1e2d", ATTRS{idProduct}=="005b", ENV{.MM_USBIFNUM}=="06", ENV{ID_MM_PORT_IGNORE}="1" -ATTRS{idVendor}=="1e2d", ATTRS{idProduct}=="005b", ENV{.MM_USBIFNUM}=="08", ENV{ID_MM_PORT_IGNORE}="1" +ATTRS{idVendor}=="1e2d", ATTRS{idProduct}=="005b", ENV{.MM_USBIFNUM}=="08", ENV{ID_MM_PORT_TYPE_QCDM}="1" # PLS62 family mbim enumeration # ttyACM0 (if #0): AT port # ttyACM1 (if #2): AT port -# ttyACM2 (if #4): can be AT or GNSS in some models, best left ignored -# ttyACM3 (if #6): unknown -# ttyACM4 (if #8): unknown +# ttyACM2 (if #4): can be AT or GNSS in some models +# ttyACM3 (if #6): AT port (but just ignore) +# ttyACM4 (if #8): DIAG/QCDM ATTRS{idVendor}=="1e2d", ATTRS{idProduct}=="005d", ENV{.MM_USBIFNUM}=="00", ENV{ID_MM_PORT_TYPE_AT_PRIMARY}="1" ATTRS{idVendor}=="1e2d", ATTRS{idProduct}=="005d", ENV{.MM_USBIFNUM}=="02", ENV{ID_MM_PORT_TYPE_AT_SECONDARY}="1" -ATTRS{idVendor}=="1e2d", ATTRS{idProduct}=="005d", ENV{.MM_USBIFNUM}=="04", ENV{ID_MM_PORT_IGNORE}="1" +ATTRS{idVendor}=="1e2d", ATTRS{idProduct}=="005d", ENV{.MM_USBIFNUM}=="04", ENV{ID_MM_PORT_TYPE_GPS}="1" ATTRS{idVendor}=="1e2d", ATTRS{idProduct}=="005d", ENV{.MM_USBIFNUM}=="06", ENV{ID_MM_PORT_IGNORE}="1" -ATTRS{idVendor}=="1e2d", ATTRS{idProduct}=="005d", ENV{.MM_USBIFNUM}=="08", ENV{ID_MM_PORT_IGNORE}="1" +ATTRS{idVendor}=="1e2d", ATTRS{idProduct}=="005d", ENV{.MM_USBIFNUM}=="08", ENV{ID_MM_PORT_TYPE_QCDM}="1" + +# PLS83 +# ttyACM0 (if #0): AT port +# ttyACM1 (if #2): AT port +# ttyACM2 (if #4): GPS data port +# ttyACM3 (if #6): DIAG/QCDM +ATTRS{idVendor}=="1e2d", ATTRS{idProduct}=="006F", ENV{.MM_USBIFNUM}=="00", ENV{ID_MM_PORT_TYPE_AT_PRIMARY}="1" +ATTRS{idVendor}=="1e2d", ATTRS{idProduct}=="006F", ENV{.MM_USBIFNUM}=="02", ENV{ID_MM_PORT_TYPE_AT_SECONDARY}="1" +ATTRS{idVendor}=="1e2d", ATTRS{idProduct}=="006F", ENV{.MM_USBIFNUM}=="04", ENV{ID_MM_PORT_TYPE_GPS}="1" +ATTRS{idVendor}=="1e2d", ATTRS{idProduct}=="006F", ENV{.MM_USBIFNUM}=="06", ENV{ID_MM_PORT_TYPE_QCDM}="1" LABEL="mm_cinterion_port_types_end" diff --git a/plugins/telit/mm-broadband-modem-telit.c b/plugins/telit/mm-broadband-modem-telit.c index 8fc869c1..d4bcdf13 100644 --- a/plugins/telit/mm-broadband-modem-telit.c +++ b/plugins/telit/mm-broadband-modem-telit.c @@ -359,7 +359,7 @@ gpsp_test_ready (MMIfaceModemLocation *self, if (error) { mm_obj_dbg (self, "GPS controller not supported: %s", error->message); g_clear_error (&error); - } else if (mm_base_modem_get_port_gps (MM_BASE_MODEM (self))) + } else if (mm_base_modem_peek_port_gps (MM_BASE_MODEM (self))) sources |= (MM_MODEM_LOCATION_SOURCE_GPS_NMEA | MM_MODEM_LOCATION_SOURCE_GPS_RAW | MM_MODEM_LOCATION_SOURCE_GPS_UNMANAGED); diff --git a/plugins/zte/mm-broadband-modem-zte.c b/plugins/zte/mm-broadband-modem-zte.c index 64549cd8..08bbed83 100644 --- a/plugins/zte/mm-broadband-modem-zte.c +++ b/plugins/zte/mm-broadband-modem-zte.c @@ -187,6 +187,19 @@ modem_after_sim_unlock_context_step (GTask *task) task); } +static gboolean +after_sim_unlock_wait_cb (GTask *task) +{ + /* Attempt to disable floods of "+ZUSIMR:2" unsolicited responses that + * eventually fill up the device's buffers and make it crash. Normally + * done during probing, but if the device has a PIN enabled it won't + * accept the +CPMS? during the probe and we have to do it here. + */ + modem_after_sim_unlock_context_step (task); + + return G_SOURCE_REMOVE; +} + static void modem_after_sim_unlock (MMIfaceModem *self, GAsyncReadyCallback callback, @@ -201,12 +214,7 @@ modem_after_sim_unlock (MMIfaceModem *self, task = g_task_new (self, NULL, callback, user_data); g_task_set_task_data (task, ctx, g_free); - /* Attempt to disable floods of "+ZUSIMR:2" unsolicited responses that - * eventually fill up the device's buffers and make it crash. Normally - * done during probing, but if the device has a PIN enabled it won't - * accept the +CPMS? during the probe and we have to do it here. - */ - modem_after_sim_unlock_context_step (task); + g_timeout_add_seconds (1, (GSourceFunc)after_sim_unlock_wait_cb, task); } /*****************************************************************************/ diff --git a/src/mm-broadband-modem-mbim.c b/src/mm-broadband-modem-mbim.c index 2ff3a0b4..b4d620e5 100644 --- a/src/mm-broadband-modem-mbim.c +++ b/src/mm-broadband-modem-mbim.c @@ -3466,6 +3466,9 @@ device_notification_cb (MbimDevice *device, case MBIM_SERVICE_QMI: case MBIM_SERVICE_ATDS: case MBIM_SERVICE_INTEL_FIRMWARE_UPDATE: +#if MBIM_CHECK_VERSION (1,25,1) + case MBIM_SERVICE_MS_SAR: +#endif default: /* Ignore */ break; @@ -4612,8 +4615,8 @@ ussd_decode (guint32 scheme, gchar *decoded = NULL; if (scheme == MM_MODEM_GSM_USSD_SCHEME_7BIT) { - guint8 *unpacked; - guint32 unpacked_len; + g_autofree guint8 *unpacked = NULL; + guint32 unpacked_len; unpacked = mm_charset_gsm_unpack ((const guint8 *)data->data, (data->len * 8) / 7, 0, &unpacked_len); decoded = (gchar *) mm_charset_gsm_unpacked_to_utf8 (unpacked, unpacked_len); diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c index 5e99deb1..ae27b333 100644 --- a/src/mm-broadband-modem-qmi.c +++ b/src/mm-broadband-modem-qmi.c @@ -5013,6 +5013,7 @@ common_enable_disable_unsolicited_events (MMBroadbandModemQmi *self, } ctx = g_new0 (EnableUnsolicitedEventsContext, 1); + ctx->enable = enable; ctx->client = g_object_ref (client); g_task_set_task_data (task, ctx, (GDestroyNotify)enable_unsolicited_events_context_free); diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c index 8a4a00af..4bf9d32a 100644 --- a/src/mm-iface-modem.c +++ b/src/mm-iface-modem.c @@ -422,6 +422,7 @@ bearer_list_updated (MMBearerList *bearer_list, g_strfreev (paths); g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (skeleton)); + g_object_unref (skeleton); } /*****************************************************************************/ @@ -4821,12 +4822,7 @@ interface_initialization_step (GTask *task) return; } - g_task_return_new_error (task, - MM_CORE_ERROR, - MM_CORE_ERROR_FAILED, - "Failed to find a usable modem character set"); - g_object_unref (task); - return; + mm_obj_warn (self, "Failed to find usable modem character set, let it to UNKNOWN"); } ctx->step++; /* fall-through */ diff --git a/src/mm-sms-part-cdma.c b/src/mm-sms-part-cdma.c index 6e3f1179..e08193cf 100644 --- a/src/mm-sms-part-cdma.c +++ b/src/mm-sms-part-cdma.c @@ -846,7 +846,7 @@ read_bearer_data_user_data (MMSmsPart *sms_part, gchar *text; guint i; - SUBPARAMETER_SIZE_CHECK (byte_offset + 1 + ((bit_offset + (num_fields * 7)) / 8)); + SUBPARAMETER_SIZE_CHECK (byte_offset + ((bit_offset + (num_fields * 7)) / 8)); text = g_malloc (num_fields + 1); for (i = 0; i < num_fields; i++) { |