diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2019-05-16 18:12:01 +0200 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2019-06-03 03:50:22 +0000 |
commit | 8092e301fc55c84a5523a8cb3f75461b53ac2e9a (patch) | |
tree | f1f6d0f7070791d1bc65bd299925bc48ef07128c | |
parent | c78ba5ea0ad37dcff4c2a5ca3b7bca21526eba08 (diff) |
port-serial: allow deciding whether the command is queued last or run next
By default all the commands we were sending through the serial port
were added at the tail of the pending queue, but we may want to queue
them at the head in very specific cases (e.g. while sending an SMS).
-rw-r--r-- | plugins/mbm/mm-broadband-modem-mbm.c | 3 | ||||
-rw-r--r-- | src/mm-port-serial-at.c | 1 | ||||
-rw-r--r-- | src/mm-port-serial-qcdm.c | 1 | ||||
-rw-r--r-- | src/mm-port-serial.c | 8 | ||||
-rw-r--r-- | src/mm-port-serial.h | 1 |
5 files changed, 12 insertions, 2 deletions
diff --git a/plugins/mbm/mm-broadband-modem-mbm.c b/plugins/mbm/mm-broadband-modem-mbm.c index 06bc9ac2..a4b89fd4 100644 --- a/plugins/mbm/mm-broadband-modem-mbm.c +++ b/plugins/mbm/mm-broadband-modem-mbm.c @@ -1262,7 +1262,8 @@ gps_enabled_ready (MMBaseModem *self, mm_port_serial_command (MM_PORT_SERIAL (gps_port), buf, 3, - FALSE, + FALSE, /* never cached */ + FALSE, /* always queued last */ NULL, NULL, NULL); diff --git a/src/mm-port-serial-at.c b/src/mm-port-serial-at.c index fef910e5..e51f73a5 100644 --- a/src/mm-port-serial-at.c +++ b/src/mm-port-serial-at.c @@ -427,6 +427,7 @@ mm_port_serial_at_command (MMPortSerialAt *self, buf, timeout_seconds, allow_cached, + FALSE, /* always queued last */ cancellable, (GAsyncReadyCallback)serial_command_ready, simple); diff --git a/src/mm-port-serial-qcdm.c b/src/mm-port-serial-qcdm.c index 4d26e398..ec1833f5 100644 --- a/src/mm-port-serial-qcdm.c +++ b/src/mm-port-serial-qcdm.c @@ -193,6 +193,7 @@ mm_port_serial_qcdm_command (MMPortSerialQcdm *self, command, timeout_seconds, FALSE, /* never cached */ + FALSE, /* always queued last */ cancellable, (GAsyncReadyCallback)serial_command_ready, task); diff --git a/src/mm-port-serial.c b/src/mm-port-serial.c index d739313b..4067979c 100644 --- a/src/mm-port-serial.c +++ b/src/mm-port-serial.c @@ -163,6 +163,7 @@ mm_port_serial_command (MMPortSerial *self, GByteArray *command, guint32 timeout_seconds, gboolean allow_cached, + gboolean run_next, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) @@ -203,7 +204,12 @@ mm_port_serial_command (MMPortSerial *self, if (!allow_cached) port_serial_set_cached_reply (self, ctx->command, NULL); - g_queue_push_tail (self->priv->queue, ctx); + /* If requested to run next, push to the head of the queue so that it really is + * the next one sent */ + if (run_next) + g_queue_push_head (self->priv->queue, ctx); + else + g_queue_push_tail (self->priv->queue, ctx); if (g_queue_get_length (self->priv->queue) == 1) port_serial_schedule_queue_process (self, 0); diff --git a/src/mm-port-serial.h b/src/mm-port-serial.h index bac79b44..b30bad77 100644 --- a/src/mm-port-serial.h +++ b/src/mm-port-serial.h @@ -144,6 +144,7 @@ void mm_port_serial_command (MMPortSerial *self, GByteArray *command, guint32 timeout_seconds, gboolean allow_cached, + gboolean run_next, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); |