diff options
-rw-r--r-- | include/ModemManager-enums.h | 2 | ||||
-rw-r--r-- | src/plugins/quectel/mm-shared-quectel.c | 15 |
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?", |