summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS30
-rw-r--r--cli/mmcli-common.c4
-rw-r--r--cli/mmcli-manager.c9
-rw-r--r--configure.ac2
-rw-r--r--plugins/cinterion/77-mm-cinterion-port-types.rules32
-rw-r--r--plugins/telit/mm-broadband-modem-telit.c2
-rw-r--r--plugins/zte/mm-broadband-modem-zte.c20
-rw-r--r--src/mm-broadband-modem-mbim.c7
-rw-r--r--src/mm-broadband-modem-qmi.c1
-rw-r--r--src/mm-iface-modem.c8
-rw-r--r--src/mm-sms-part-cdma.c2
11 files changed, 87 insertions, 30 deletions
diff --git a/NEWS b/NEWS
index c620fa0d..7c69ab30 100644
--- a/NEWS
+++ b/NEWS
@@ -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++) {