From 8092e301fc55c84a5523a8cb3f75461b53ac2e9a Mon Sep 17 00:00:00 2001 From: Aleksander Morgado Date: Thu, 16 May 2019 18:12:01 +0200 Subject: [PATCH] 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). --- plugins/mbm/mm-broadband-modem-mbm.c | 3 ++- src/mm-port-serial-at.c | 1 + src/mm-port-serial-qcdm.c | 1 + src/mm-port-serial.c | 8 +++++++- 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);