diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2018-12-28 12:59:55 +0100 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2019-01-03 18:53:52 +0000 |
commit | 87712c27f5868e2f05c03d4fdc2ee79f0ac1c243 (patch) | |
tree | bf20cda912cfbb347583067d78287aa923e6b561 | |
parent | f35d64a8992a06e75585c774090e407ae21f24fe (diff) |
api,firmware: MMModemFirmwareUpdateMethod as flags, not enum
Devices may require/support more than one update method, so instead of
reporting the method as a single enum value, use a set of flags
instead.
-rw-r--r-- | cli/mmcli-modem-firmware.c | 8 | ||||
-rw-r--r-- | docs/reference/libmm-glib/libmm-glib-sections.txt | 4 | ||||
-rw-r--r-- | include/ModemManager-enums.h | 6 | ||||
-rw-r--r-- | introspection/org.freedesktop.ModemManager1.Modem.Firmware.xml | 25 | ||||
-rw-r--r-- | libmm-glib/mm-firmware-update-settings.c | 34 | ||||
-rw-r--r-- | plugins/quectel/mm-shared-quectel.c | 2 |
6 files changed, 41 insertions, 38 deletions
diff --git a/cli/mmcli-modem-firmware.c b/cli/mmcli-modem-firmware.c index edc92ad1..9bff170f 100644 --- a/cli/mmcli-modem-firmware.c +++ b/cli/mmcli-modem-firmware.c @@ -143,7 +143,7 @@ static void print_firmware_status (void) { MMFirmwareUpdateSettings *update_settings; - const gchar *method = NULL; + gchar *method = NULL; const gchar **device_ids = NULL; const gchar *version = NULL; const gchar *fastboot_at = NULL; @@ -153,8 +153,8 @@ print_firmware_status (void) MMModemFirmwareUpdateMethod m; m = mm_firmware_update_settings_get_method (update_settings); - if (m != MM_MODEM_FIRMWARE_UPDATE_METHOD_UNKNOWN) { - method = mm_modem_firmware_update_method_get_string (m); + if (m != MM_MODEM_FIRMWARE_UPDATE_METHOD_NONE) { + method = mm_modem_firmware_update_method_build_string_from_mask (m); device_ids = mm_firmware_update_settings_get_device_ids (update_settings); version = mm_firmware_update_settings_get_version (update_settings); } @@ -180,7 +180,7 @@ print_firmware_status (void) exit (EXIT_FAILURE); } - mmcli_output_string (MMC_F_FIRMWARE_METHOD, method); + mmcli_output_string_take (MMC_F_FIRMWARE_METHOD, method); mmcli_output_string_array (MMC_F_FIRMWARE_DEVICE_IDS, device_ids, TRUE); mmcli_output_string (MMC_F_FIRMWARE_VERSION, version); mmcli_output_string (MMC_F_FIRMWARE_FASTBOOT_AT, fastboot_at); diff --git a/docs/reference/libmm-glib/libmm-glib-sections.txt b/docs/reference/libmm-glib/libmm-glib-sections.txt index cb1f7a24..08c58973 100644 --- a/docs/reference/libmm-glib/libmm-glib-sections.txt +++ b/docs/reference/libmm-glib/libmm-glib-sections.txt @@ -1454,7 +1454,7 @@ mm_modem_cdma_rm_protocol_get_string mm_modem_location_source_build_string_from_mask mm_modem_location_assistance_data_type_build_string_from_mask mm_modem_contacts_storage_get_string -mm_modem_firmware_update_method_get_string +mm_modem_firmware_update_method_build_string_from_mask mm_sms_pdu_type_get_string mm_sms_state_get_string mm_sms_delivery_state_get_string @@ -1512,7 +1512,7 @@ mm_oma_session_state_failed_reason_build_string_from_mask mm_call_direction_build_string_from_mask mm_call_state_build_string_from_mask mm_call_state_reason_build_string_from_mask -mm_modem_firmware_update_method_build_string_from_mask +mm_modem_firmware_update_method_get_string <SUBSECTION Standard> MM_TYPE_BEARER_TYPE MM_TYPE_BEARER_IP_FAMILY diff --git a/include/ModemManager-enums.h b/include/ModemManager-enums.h index 9190c3c4..4c2b22c4 100644 --- a/include/ModemManager-enums.h +++ b/include/ModemManager-enums.h @@ -1405,14 +1405,14 @@ typedef enum { /*< underscore_name=mm_call_direction >*/ /** * MMModemFirmwareUpdateMethod: - * @MM_MODEM_FIRMWARE_UPDATE_METHOD_UNKNOWN: Unknown method. + * @MM_MODEM_FIRMWARE_UPDATE_METHOD_NONE: No method specified. * @MM_MODEM_FIRMWARE_UPDATE_METHOD_FASTBOOT: Device supports fastboot-based update. * * Type of firmware update method supported by the module. */ typedef enum { /*< underscore_name=mm_modem_firmware_update_method >*/ - MM_MODEM_FIRMWARE_UPDATE_METHOD_UNKNOWN, - MM_MODEM_FIRMWARE_UPDATE_METHOD_FASTBOOT, + MM_MODEM_FIRMWARE_UPDATE_METHOD_NONE = 0, + MM_MODEM_FIRMWARE_UPDATE_METHOD_FASTBOOT = 1 << 0, } MMModemFirmwareUpdateMethod; #endif /* _MODEMMANAGER_ENUMS_H_ */ diff --git a/introspection/org.freedesktop.ModemManager1.Modem.Firmware.xml b/introspection/org.freedesktop.ModemManager1.Modem.Firmware.xml index c2fe7eb0..e8c01c81 100644 --- a/introspection/org.freedesktop.ModemManager1.Modem.Firmware.xml +++ b/introspection/org.freedesktop.ModemManager1.Modem.Firmware.xml @@ -122,17 +122,16 @@ Detailed settings that provide information about how the module should be updated. - - The settings are given as a <link linkend="MMModemFirmwareUpdateMethod">MMModemFirmwareUpdateMethod</link> - value specifying the type of firmware update procedure expected followed by a - dictionary that includes other parameters applicable to the specific method. + The settings are given as a bitmask of <link linkend="MMModemFirmwareUpdateMethod">MMModemFirmwareUpdateMethod</link> + values specifying the type of firmware update procedures expected followed by a + dictionary that includes other parameters applicable to the specific methods reported. <variablelist> - <varlistentry><term><link linkend="MM-MODEM-FIRMWARE-UPDATE-METHOD-FASTBOOT:CAPS">MM_MODEM_FIRMWARE_UPDATE_METHOD_FASTBOOT</link></term> + <varlistentry> <listitem> <para> - Devices supporting the fastboot firmware update method require exposing the - following additional settings: + The following settings are mandatory as long as the reported update method is not + <term><link linkend="MM-MODEM-FIRMWARE-UPDATE-METHOD-NONE:CAPS">MM_MODEM_FIRMWARE_UPDATE_METHOD_NONE</link></term>. </para> <variablelist> <varlistentry><term><literal>"device-ids"</literal></term> @@ -152,6 +151,18 @@ (signature <literal>'s'</literal>) </listitem> </varlistentry> + </variablelist> + </listitem> + </varlistentry> + </variablelist> + + <variablelist> + <varlistentry><term><link linkend="MM-MODEM-FIRMWARE-UPDATE-METHOD-FASTBOOT:CAPS">MM_MODEM_FIRMWARE_UPDATE_METHOD_FASTBOOT</link></term> + <listitem> + <para> + Devices supporting the fastboot firmware update method require exposing the + following additional settings: + </para> <varlistentry><term><literal>"fastboot-at"</literal></term> <listitem> (Required) This property exposes the AT command that should be sent to the diff --git a/libmm-glib/mm-firmware-update-settings.c b/libmm-glib/mm-firmware-update-settings.c index 362f1011..01c8bc8d 100644 --- a/libmm-glib/mm-firmware-update-settings.c +++ b/libmm-glib/mm-firmware-update-settings.c @@ -49,14 +49,14 @@ struct _MMFirmwareUpdateSettingsPrivate { * mm_firmware_update_settings_get_method: * @self: A #MMFirmwareUpdateSettings. * - * Gets the method to use during the firmware update operation. + * Gets the methods to use during the firmware update operation. * - * Returns: a #MMModemFirmwareUpdateMethod. + * Returns: a bitmask of #MMModemFirmwareUpdateMethod values. */ MMModemFirmwareUpdateMethod mm_firmware_update_settings_get_method (MMFirmwareUpdateSettings *self) { - g_return_val_if_fail (MM_IS_FIRMWARE_UPDATE_SETTINGS (self), MM_MODEM_FIRMWARE_UPDATE_METHOD_UNKNOWN); + g_return_val_if_fail (MM_IS_FIRMWARE_UPDATE_SETTINGS (self), MM_MODEM_FIRMWARE_UPDATE_METHOD_NONE); return self->priv->method; } @@ -128,7 +128,7 @@ mm_firmware_update_settings_set_version (MMFirmwareUpdateSettings *self, * Gets the AT command that should be sent to the module to trigger a reset * into fastboot mode. * - * Only applicable if the update method is %MM_MODEM_FIRMWARE_UPDATE_METHOD_FASTBOOT. + * Only applicable if the update method includes %MM_MODEM_FIRMWARE_UPDATE_METHOD_FASTBOOT. * * Returns: The AT command string, or %NULL if unknown. Do not free the returned value, it is owned by @self. */ @@ -136,7 +136,7 @@ const gchar * mm_firmware_update_settings_get_fastboot_at (MMFirmwareUpdateSettings *self) { g_return_val_if_fail (MM_IS_FIRMWARE_UPDATE_SETTINGS (self), NULL); - g_return_val_if_fail (self->priv->method == MM_MODEM_FIRMWARE_UPDATE_METHOD_FASTBOOT, NULL); + g_return_val_if_fail (self->priv->method & MM_MODEM_FIRMWARE_UPDATE_METHOD_FASTBOOT, NULL); return self->priv->fastboot_at; } @@ -146,7 +146,7 @@ mm_firmware_update_settings_set_fastboot_at (MMFirmwareUpdateSettings *self, const gchar *fastboot_at) { g_return_if_fail (MM_IS_FIRMWARE_UPDATE_SETTINGS (self)); - g_return_if_fail (self->priv->method == MM_MODEM_FIRMWARE_UPDATE_METHOD_FASTBOOT); + g_return_if_fail (self->priv->method & MM_MODEM_FIRMWARE_UPDATE_METHOD_FASTBOOT); g_free (self->priv->fastboot_at); self->priv->fastboot_at = g_strdup (fastboot_at); @@ -168,7 +168,7 @@ mm_firmware_update_settings_get_variant (MMFirmwareUpdateSettings *self) MMModemFirmwareUpdateMethod method; GVariantBuilder builder; - method = (self ? self->priv->method : MM_MODEM_FIRMWARE_UPDATE_METHOD_UNKNOWN); + method = (self ? self->priv->method : MM_MODEM_FIRMWARE_UPDATE_METHOD_NONE); g_variant_builder_init (&builder, G_VARIANT_TYPE ("(ua{sv})")); g_variant_builder_add (&builder, "u", method); @@ -185,15 +185,11 @@ mm_firmware_update_settings_get_variant (MMFirmwareUpdateSettings *self) PROPERTY_VERSION, g_variant_new_string (self->priv->version)); - switch (method) { - case MM_MODEM_FIRMWARE_UPDATE_METHOD_FASTBOOT: + if (method & MM_MODEM_FIRMWARE_UPDATE_METHOD_FASTBOOT) { g_variant_builder_add (&builder, "{sv}", PROPERTY_FASTBOOT_AT, g_variant_new_string (self->priv->fastboot_at)); - break; - default: - break; } } g_variant_builder_close (&builder); @@ -240,7 +236,7 @@ mm_firmware_update_settings_new_from_variant (GVariant *variant, GError **error) { MMFirmwareUpdateSettings *self; - guint method = MM_MODEM_FIRMWARE_UPDATE_METHOD_UNKNOWN; + guint method = MM_MODEM_FIRMWARE_UPDATE_METHOD_NONE; GVariant *dictionary = NULL; GError *inner_error = NULL; @@ -281,13 +277,9 @@ mm_firmware_update_settings_new_from_variant (GVariant *variant, } if (!inner_error) { - switch (method) { - case MM_MODEM_FIRMWARE_UPDATE_METHOD_FASTBOOT: - if (!self->priv->fastboot_at) - inner_error = g_error_new (MM_CORE_ERROR, MM_CORE_ERROR_INVALID_ARGS, - "Fastboot method requires the '" PROPERTY_FASTBOOT_AT "' setting"); - break; - } + if ((method & MM_MODEM_FIRMWARE_UPDATE_METHOD_FASTBOOT) && (!self->priv->fastboot_at)) + inner_error = g_error_new (MM_CORE_ERROR, MM_CORE_ERROR_INVALID_ARGS, + "Fastboot method requires the '" PROPERTY_FASTBOOT_AT "' setting"); } g_variant_unref (dictionary); } @@ -317,7 +309,7 @@ static void mm_firmware_update_settings_init (MMFirmwareUpdateSettings *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, MM_TYPE_FIRMWARE_UPDATE_SETTINGS, MMFirmwareUpdateSettingsPrivate); - self->priv->method = MM_MODEM_FIRMWARE_UPDATE_METHOD_UNKNOWN; + self->priv->method = MM_MODEM_FIRMWARE_UPDATE_METHOD_NONE; } static void diff --git a/plugins/quectel/mm-shared-quectel.c b/plugins/quectel/mm-shared-quectel.c index 2eae97fb..f451026b 100644 --- a/plugins/quectel/mm-shared-quectel.c +++ b/plugins/quectel/mm-shared-quectel.c @@ -45,7 +45,7 @@ qfastboot_test_ready (MMBaseModem *self, MMFirmwareUpdateSettings *update_settings; if (!mm_base_modem_at_command_finish (self, res, NULL)) - update_settings = mm_firmware_update_settings_new (MM_MODEM_FIRMWARE_UPDATE_METHOD_UNKNOWN); + update_settings = mm_firmware_update_settings_new (MM_MODEM_FIRMWARE_UPDATE_METHOD_NONE); else { update_settings = mm_firmware_update_settings_new (MM_MODEM_FIRMWARE_UPDATE_METHOD_FASTBOOT); mm_firmware_update_settings_set_fastboot_at (update_settings, "AT+QFASTBOOT"); |