aboutsummaryrefslogtreecommitdiff
path: root/plugins/ublox/mm-plugin-ublox.c
diff options
context:
space:
mode:
authorMatthew Starr <mstarr@hedonline.com>2018-05-07 22:26:48 +0000
committerAleksander Morgado <aleksander@aleksander.es>2018-05-08 09:43:15 +0200
commit1a56b97061252fa4605bd0b58de491bbe43a6685 (patch)
tree39cd6d78979ee7facb96250d51a830c7bada4d96 /plugins/ublox/mm-plugin-ublox.c
parent6be6aa474f238f771579adbba800ab0408c7f0d9 (diff)
ublox: use ID_MM_UBLOX_PORT_READY_DELAY udev flag as init delay
Added reading the ID_MM_UBLOX_PORT_READY_DELAY udev flag value and using it as an init delay when a value is set. The 20 second delay for the TOBY-L4 +READ URC has been reimplemented using the new ID_MM_UBLOX_PORT_READY_DELAY udev value.
Diffstat (limited to 'plugins/ublox/mm-plugin-ublox.c')
-rw-r--r--plugins/ublox/mm-plugin-ublox.c26
1 files changed, 20 insertions, 6 deletions
diff --git a/plugins/ublox/mm-plugin-ublox.c b/plugins/ublox/mm-plugin-ublox.c
index f4553a60..4f16346a 100644
--- a/plugins/ublox/mm-plugin-ublox.c
+++ b/plugins/ublox/mm-plugin-ublox.c
@@ -50,13 +50,11 @@ create_modem (MMPlugin *self,
/*****************************************************************************/
/* Custom init context */
-/* Wait up to 20s for the +READY URC */
-#define READY_WAIT_TIME_SECS 20
-
typedef struct {
MMPortSerialAt *port;
GRegex *ready_regex;
guint timeout_id;
+ gint wait_timeout_secs;
} CustomInitContext;
static void
@@ -147,8 +145,13 @@ wait_for_ready (GTask *task)
task,
NULL);
+ mm_dbg ("(%s/%s) waiting %d seconds for init timeout",
+ mm_port_probe_get_port_subsys (probe),
+ mm_port_probe_get_port_name (probe),
+ ctx->wait_timeout_secs);
+
/* Otherwise, let the custom init timeout in some seconds. */
- ctx->timeout_id = g_timeout_add_seconds (READY_WAIT_TIME_SECS, (GSourceFunc) ready_timeout, task);
+ ctx->timeout_id = g_timeout_add_seconds (ctx->wait_timeout_secs, (GSourceFunc) ready_timeout, task);
}
static void
@@ -208,6 +211,10 @@ ublox_custom_init (MMPortProbe *probe,
G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL);
g_task_set_task_data (task, ctx, (GDestroyNotify) custom_init_context_free);
+ ctx->wait_timeout_secs = mm_kernel_device_get_property_as_int (mm_port_probe_peek_port(probe), "ID_MM_UBLOX_PORT_READY_DELAY");
+ if (ctx->wait_timeout_secs < 0)
+ ctx->wait_timeout_secs = 0;
+
/* If the device hasn't been plugged in right away, we assume it was already
* running for some time. We validate the assumption with a quick AT probe,
* and if it times out, we run the explicit READY wait from scratch (e.g.
@@ -225,8 +232,15 @@ ublox_custom_init (MMPortProbe *probe,
return;
}
- /* Device hotplugged, wait for READY URC */
- wait_for_ready (task);
+ if (ctx->wait_timeout_secs > 0) {
+ /* Device hotplugged and has a defined ready delay, wait for READY URC */
+ wait_for_ready (task);
+ return;
+ }
+
+ /* Otherwise, no need for any custom wait */
+ g_task_return_boolean (task, TRUE);
+ g_object_unref (task);
}
/*****************************************************************************/