diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-errors.c | 1 | ||||
-rw-r--r-- | src/mm-errors.h | 3 | ||||
-rw-r--r-- | src/mm-generic-cdma.c | 6 | ||||
-rw-r--r-- | src/mm-generic-gsm.c | 6 | ||||
-rw-r--r-- | src/mm-plugin-base.c | 2 | ||||
-rw-r--r-- | src/mm-serial-port.c | 18 | ||||
-rw-r--r-- | src/mm-serial-port.h | 1 |
7 files changed, 25 insertions, 12 deletions
diff --git a/src/mm-errors.c b/src/mm-errors.c index c0ed608d..f3c16331 100644 --- a/src/mm-errors.c +++ b/src/mm-errors.c @@ -43,6 +43,7 @@ mm_serial_error_get_type (void) ENUM_ENTRY (MM_SERIAL_SEND_FAILED, "SerialSendfailed"), ENUM_ENTRY (MM_SERIAL_RESPONSE_TIMEOUT, "SerialResponseTimeout"), ENUM_ENTRY (MM_SERIAL_OPEN_FAILED_NO_DEVICE, "SerialOpenFailedNoDevice"), + ENUM_ENTRY (MM_SERIAL_ERROR_FLASH_FAILED, "SerialFlashFailed"), { 0, 0, 0 } }; diff --git a/src/mm-errors.h b/src/mm-errors.h index 15ac773b..6da2993a 100644 --- a/src/mm-errors.h +++ b/src/mm-errors.h @@ -23,7 +23,8 @@ enum { MM_SERIAL_OPEN_FAILED = 0, MM_SERIAL_SEND_FAILED = 1, MM_SERIAL_RESPONSE_TIMEOUT = 2, - MM_SERIAL_OPEN_FAILED_NO_DEVICE = 3 + MM_SERIAL_OPEN_FAILED_NO_DEVICE = 3, + MM_SERIAL_ERROR_FLASH_FAILED = 4, }; #define MM_SERIAL_ERROR (mm_serial_error_quark ()) diff --git a/src/mm-generic-cdma.c b/src/mm-generic-cdma.c index f73b434d..5cad9732 100644 --- a/src/mm-generic-cdma.c +++ b/src/mm-generic-cdma.c @@ -588,7 +588,7 @@ enable (MMModem *modem, MM_MODEM_STATE_ENABLING, MM_MODEM_STATE_REASON_NONE); - mm_serial_port_flash (MM_SERIAL_PORT (priv->primary), 100, flash_done, info); + mm_serial_port_flash (MM_SERIAL_PORT (priv->primary), 100, FALSE, flash_done, info); } static void @@ -681,7 +681,7 @@ disable (MMModem *modem, MM_MODEM_STATE_REASON_NONE); if (mm_port_get_connected (MM_PORT (priv->primary))) - mm_serial_port_flash (MM_SERIAL_PORT (priv->primary), 1000, disable_flash_done, info); + mm_serial_port_flash (MM_SERIAL_PORT (priv->primary), 1000, TRUE, disable_flash_done, info); else disable_flash_done (MM_SERIAL_PORT (priv->primary), NULL, info); } @@ -776,7 +776,7 @@ disconnect (MMModem *modem, NULL); mm_modem_set_state (modem, MM_MODEM_STATE_DISCONNECTING, MM_MODEM_STATE_REASON_NONE); - mm_serial_port_flash (MM_SERIAL_PORT (priv->primary), 1000, disconnect_flash_done, info); + mm_serial_port_flash (MM_SERIAL_PORT (priv->primary), 1000, TRUE, disconnect_flash_done, info); } static void diff --git a/src/mm-generic-gsm.c b/src/mm-generic-gsm.c index e5957b24..d7f72300 100644 --- a/src/mm-generic-gsm.c +++ b/src/mm-generic-gsm.c @@ -912,7 +912,7 @@ real_do_enable (MMGenericGsm *self, MMModemFn callback, gpointer user_data) MMCallbackInfo *info; info = mm_callback_info_new (MM_MODEM (self), callback, user_data); - mm_serial_port_flash (MM_SERIAL_PORT (priv->primary), 100, enable_flash_done, info); + mm_serial_port_flash (MM_SERIAL_PORT (priv->primary), 100, FALSE, enable_flash_done, info); } static void @@ -1072,7 +1072,7 @@ disable (MMModem *modem, MM_MODEM_STATE_REASON_NONE); if (mm_port_get_connected (MM_PORT (priv->primary))) - mm_serial_port_flash (MM_SERIAL_PORT (priv->primary), 1000, disable_flash_done, info); + mm_serial_port_flash (MM_SERIAL_PORT (priv->primary), 1000, TRUE, disable_flash_done, info); else disable_flash_done (MM_SERIAL_PORT (priv->primary), NULL, info); } @@ -2195,7 +2195,7 @@ real_do_disconnect (MMGenericGsm *self, MMCallbackInfo *info; info = mm_callback_info_new (MM_MODEM (self), callback, user_data); - mm_serial_port_flash (MM_SERIAL_PORT (priv->primary), 1000, disconnect_flash_done, info); + mm_serial_port_flash (MM_SERIAL_PORT (priv->primary), 1000, TRUE, disconnect_flash_done, info); } static void diff --git a/src/mm-plugin-base.c b/src/mm-plugin-base.c index 5bad7d99..ac8b0d5b 100644 --- a/src/mm-plugin-base.c +++ b/src/mm-plugin-base.c @@ -805,7 +805,7 @@ try_open (gpointer user_data) g_debug ("(%s): probe requested by plugin '%s'", g_udev_device_get_name (port), mm_plugin_get_name (MM_PLUGIN (task_priv->plugin))); - mm_serial_port_flash (MM_SERIAL_PORT (task_priv->probe_port), 100, flash_done, task); + mm_serial_port_flash (MM_SERIAL_PORT (task_priv->probe_port), 100, TRUE, flash_done, task); } return FALSE; diff --git a/src/mm-serial-port.c b/src/mm-serial-port.c index b5323670..a10b3ea8 100644 --- a/src/mm-serial-port.c +++ b/src/mm-serial-port.c @@ -958,8 +958,14 @@ flash_do (gpointer data) priv->flash_id = 0; - if (!set_speed (info->port, info->current_speed, &error)) - g_assert (error); + if (info->current_speed) { + if (!set_speed (info->port, info->current_speed, &error)) + g_assert (error); + } else { + error = g_error_new_literal (MM_SERIAL_ERROR, + MM_SERIAL_ERROR_FLASH_FAILED, + "Failed to retrieve current speed"); + } info->callback (info->port, error, info->user_data); g_clear_error (&error); @@ -970,6 +976,7 @@ flash_do (gpointer data) gboolean mm_serial_port_flash (MMSerialPort *self, guint32 flash_time, + gboolean ignore_errors, MMSerialFlashFn callback, gpointer user_data) { @@ -977,6 +984,7 @@ mm_serial_port_flash (MMSerialPort *self, MMSerialPortPrivate *priv; speed_t cur_speed = 0; GError *error = NULL; + gboolean success; g_return_val_if_fail (MM_IS_SERIAL_PORT (self), FALSE); g_return_val_if_fail (callback != NULL, FALSE); @@ -992,7 +1000,8 @@ mm_serial_port_flash (MMSerialPort *self, return FALSE; } - if (!get_speed (self, &cur_speed, &error)) { + success = get_speed (self, &cur_speed, &error); + if (!success && !ignore_errors) { callback (self, error, user_data); g_error_free (error); return FALSE; @@ -1004,7 +1013,8 @@ mm_serial_port_flash (MMSerialPort *self, info->callback = callback; info->user_data = user_data; - if (!set_speed (self, B0, &error)) { + success = set_speed (self, B0, &error); + if (!success && !ignore_errors) { callback (self, error, user_data); g_error_free (error); return FALSE; diff --git a/src/mm-serial-port.h b/src/mm-serial-port.h index 85dda85c..4da2b23a 100644 --- a/src/mm-serial-port.h +++ b/src/mm-serial-port.h @@ -110,6 +110,7 @@ void mm_serial_port_close (MMSerialPort *self); gboolean mm_serial_port_flash (MMSerialPort *self, guint32 flash_time, + gboolean ignore_errors, MMSerialFlashFn callback, gpointer user_data); void mm_serial_port_flash_cancel (MMSerialPort *self); |