aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/ModemManager-enums.h2
-rw-r--r--src/plugins/quectel/mm-shared-quectel.c15
2 files changed, 16 insertions, 1 deletions
diff --git a/include/ModemManager-enums.h b/include/ModemManager-enums.h
index cf4baeb1..e1baf30f 100644
--- a/include/ModemManager-enums.h
+++ b/include/ModemManager-enums.h
@@ -1669,6 +1669,7 @@ typedef enum { /*< underscore_name=mm_call_direction >*/
* @MM_MODEM_FIRMWARE_UPDATE_METHOD_MBIM_QDU: Device supports MBIM QDU based update. Since 1.18.
* @MM_MODEM_FIRMWARE_UPDATE_METHOD_FIREHOSE: Device supports Firehose based update. Since 1.18.
* @MM_MODEM_FIRMWARE_UPDATE_METHOD_SAHARA: Device supports Sahara protocol. Usually used in combination with Firehose. Since 1.20.
+ * @MM_MODEM_FIRMWARE_UPDATE_METHOD_DFOTA: Device supports Quectel DFOTA based update. Since 1.24.
*
* Type of firmware update method supported by the module.
*
@@ -1681,6 +1682,7 @@ typedef enum { /*< underscore_name=mm_modem_firmware_update_method >*/
MM_MODEM_FIRMWARE_UPDATE_METHOD_MBIM_QDU = 1 << 2,
MM_MODEM_FIRMWARE_UPDATE_METHOD_FIREHOSE = 1 << 3,
MM_MODEM_FIRMWARE_UPDATE_METHOD_SAHARA = 1 << 4,
+ MM_MODEM_FIRMWARE_UPDATE_METHOD_DFOTA = 1 << 5,
} MMModemFirmwareUpdateMethod;
/**
diff --git a/src/plugins/quectel/mm-shared-quectel.c b/src/plugins/quectel/mm-shared-quectel.c
index 56565257..6226dacd 100644
--- a/src/plugins/quectel/mm-shared-quectel.c
+++ b/src/plugins/quectel/mm-shared-quectel.c
@@ -244,6 +244,13 @@ quectel_is_firehose_supported (MMBaseModem *modem,
return mm_kernel_device_get_global_property_as_boolean (mm_port_peek_kernel_device (port), "ID_MM_QUECTEL_FIREHOSE");
}
+static gboolean
+quectel_is_dfota_supported (MMBaseModem *modem,
+ MMPort *port)
+{
+ return mm_kernel_device_get_global_property_as_boolean (mm_port_peek_kernel_device (port), "ID_MM_QUECTEL_DFOTA");
+}
+
static MMModemFirmwareUpdateMethod
quectel_get_firmware_update_methods (MMBaseModem *modem,
MMPort *port)
@@ -257,6 +264,11 @@ quectel_get_firmware_update_methods (MMBaseModem *modem,
if (quectel_is_sahara_supported (modem, port))
update_methods |= MM_MODEM_FIRMWARE_UPDATE_METHOD_SAHARA;
+ /* DFOTA should not be used in combination with any other update method. */
+ if (update_methods == MM_MODEM_FIRMWARE_UPDATE_METHOD_NONE &&
+ quectel_is_dfota_supported (modem, port))
+ update_methods |= MM_MODEM_FIRMWARE_UPDATE_METHOD_DFOTA;
+
return update_methods;
}
@@ -417,7 +429,8 @@ quectel_at_port_get_firmware_revision_ready (MMBaseModem *self,
mm_firmware_update_settings_set_device_ids (ctx->update_settings, (const gchar **)ids->pdata);
/* Set update methods */
- if (update_methods & MM_MODEM_FIRMWARE_UPDATE_METHOD_FIREHOSE) {
+ if (update_methods & MM_MODEM_FIRMWARE_UPDATE_METHOD_FIREHOSE ||
+ update_methods & MM_MODEM_FIRMWARE_UPDATE_METHOD_DFOTA) {
/* Fetch full firmware info */
mm_base_modem_at_command (self,
"+QGMR?",