aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mm-errors.c1
-rw-r--r--src/mm-errors.h1
-rw-r--r--src/mm-serial-port.c16
3 files changed, 14 insertions, 4 deletions
diff --git a/src/mm-errors.c b/src/mm-errors.c
index aa900608..e4fdda7f 100644
--- a/src/mm-errors.c
+++ b/src/mm-errors.c
@@ -44,6 +44,7 @@ mm_serial_error_get_type (void)
ENUM_ENTRY (MM_SERIAL_ERROR_RESPONSE_TIMEOUT, "SerialResponseTimeout"),
ENUM_ENTRY (MM_SERIAL_ERROR_OPEN_FAILED_NO_DEVICE, "SerialOpenFailedNoDevice"),
ENUM_ENTRY (MM_SERIAL_ERROR_FLASH_FAILED, "SerialFlashFailed"),
+ ENUM_ENTRY (MM_SERIAL_ERROR_NOT_OPEN, "SerialNotOpen"),
{ 0, 0, 0 }
};
diff --git a/src/mm-errors.h b/src/mm-errors.h
index b6891c35..13a531d5 100644
--- a/src/mm-errors.h
+++ b/src/mm-errors.h
@@ -25,6 +25,7 @@ enum {
MM_SERIAL_ERROR_RESPONSE_TIMEOUT = 2,
MM_SERIAL_ERROR_OPEN_FAILED_NO_DEVICE = 3,
MM_SERIAL_ERROR_FLASH_FAILED = 4,
+ MM_SERIAL_ERROR_NOT_OPEN = 5,
};
#define MM_SERIAL_ERROR (mm_serial_error_quark ())
diff --git a/src/mm-serial-port.c b/src/mm-serial-port.c
index 18b39f72..df704af3 100644
--- a/src/mm-serial-port.c
+++ b/src/mm-serial-port.c
@@ -814,10 +814,7 @@ mm_serial_port_close (MMSerialPort *self)
priv->channel = NULL;
}
- if (priv->flash_id > 0) {
- g_source_remove (priv->flash_id);
- priv->flash_id = 0;
- }
+ mm_serial_port_flash_cancel (self);
tcsetattr (priv->fd, TCSANOW, &priv->old_t);
close (priv->fd);
@@ -1032,6 +1029,15 @@ mm_serial_port_flash (MMSerialPort *self,
priv = MM_SERIAL_PORT_GET_PRIVATE (self);
+ if (!mm_serial_port_is_open (self)) {
+ error = g_error_new_literal (MM_SERIAL_ERROR,
+ MM_SERIAL_ERROR_NOT_OPEN,
+ "The serial port is not open.");
+ callback (self, error, user_data);
+ g_error_free (error);
+ return FALSE;
+ }
+
if (priv->flash_id > 0) {
error = g_error_new_literal (MM_MODEM_ERROR,
MM_MODEM_ERROR_OPERATION_IN_PROGRESS,
@@ -1215,6 +1221,8 @@ dispose (GObject *object)
if (mm_serial_port_is_open (MM_SERIAL_PORT (object)))
mm_serial_port_close_force (MM_SERIAL_PORT (object));
+ mm_serial_port_flash_cancel (MM_SERIAL_PORT (object));
+
G_OBJECT_CLASS (mm_serial_port_parent_class)->dispose (object);
}