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.
This commit is contained in:

committed by
Aleksander Morgado

parent
6be6aa474f
commit
1a56b97061
@@ -11,9 +11,11 @@ SUBSYSTEMS=="usb", ATTRS{bInterfaceNumber}=="?*", ENV{.MM_USBIFNUM}="$attr{bInte
|
|||||||
# ttyACM0 (if #2): secondary (ignore)
|
# ttyACM0 (if #2): secondary (ignore)
|
||||||
# ttyACM1 (if #4): debug port (ignore)
|
# ttyACM1 (if #4): debug port (ignore)
|
||||||
# ttyACM2 (if #6): primary
|
# ttyACM2 (if #6): primary
|
||||||
|
# Wait up to 20s for the +READY URC
|
||||||
# ttyACM3 (if #8): AT port for FOTA (ignore)
|
# ttyACM3 (if #8): AT port for FOTA (ignore)
|
||||||
ATTRS{idVendor}=="1546", ATTRS{idProduct}=="1010", ENV{.MM_USBIFNUM}=="02", ENV{ID_MM_PORT_IGNORE}="1"
|
ATTRS{idVendor}=="1546", ATTRS{idProduct}=="1010", ENV{.MM_USBIFNUM}=="02", ENV{ID_MM_PORT_IGNORE}="1"
|
||||||
ATTRS{idVendor}=="1546", ATTRS{idProduct}=="1010", ENV{.MM_USBIFNUM}=="04", ENV{ID_MM_PORT_IGNORE}="1"
|
ATTRS{idVendor}=="1546", ATTRS{idProduct}=="1010", ENV{.MM_USBIFNUM}=="04", ENV{ID_MM_PORT_IGNORE}="1"
|
||||||
|
ATTRS{idVendor}=="1546", ATTRS{idProduct}=="1010", ENV{.MM_USBIFNUM}=="06", ENV{ID_MM_UBLOX_PORT_READY_DELAY}="20"
|
||||||
ATTRS{idVendor}=="1546", ATTRS{idProduct}=="1010", ENV{.MM_USBIFNUM}=="08", ENV{ID_MM_PORT_IGNORE}="1"
|
ATTRS{idVendor}=="1546", ATTRS{idProduct}=="1010", ENV{.MM_USBIFNUM}=="08", ENV{ID_MM_PORT_IGNORE}="1"
|
||||||
|
|
||||||
# TOBY-R2 port types
|
# TOBY-R2 port types
|
||||||
|
@@ -50,13 +50,11 @@ create_modem (MMPlugin *self,
|
|||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/* Custom init context */
|
/* Custom init context */
|
||||||
|
|
||||||
/* Wait up to 20s for the +READY URC */
|
|
||||||
#define READY_WAIT_TIME_SECS 20
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
MMPortSerialAt *port;
|
MMPortSerialAt *port;
|
||||||
GRegex *ready_regex;
|
GRegex *ready_regex;
|
||||||
guint timeout_id;
|
guint timeout_id;
|
||||||
|
gint wait_timeout_secs;
|
||||||
} CustomInitContext;
|
} CustomInitContext;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -147,8 +145,13 @@ wait_for_ready (GTask *task)
|
|||||||
task,
|
task,
|
||||||
NULL);
|
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. */
|
/* 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
|
static void
|
||||||
@@ -208,6 +211,10 @@ ublox_custom_init (MMPortProbe *probe,
|
|||||||
G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL);
|
G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL);
|
||||||
g_task_set_task_data (task, ctx, (GDestroyNotify) custom_init_context_free);
|
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
|
/* 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,
|
* 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.
|
* 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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Device hotplugged, wait for READY URC */
|
if (ctx->wait_timeout_secs > 0) {
|
||||||
|
/* Device hotplugged and has a defined ready delay, wait for READY URC */
|
||||||
wait_for_ready (task);
|
wait_for_ready (task);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Otherwise, no need for any custom wait */
|
||||||
|
g_task_return_boolean (task, TRUE);
|
||||||
|
g_object_unref (task);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
Reference in New Issue
Block a user