aboutsummaryrefslogtreecommitdiff
path: root/src/mm-base-modem.c
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2018-04-30 13:11:39 +0200
committerAleksander Morgado <aleksander@aleksander.es>2018-06-02 17:54:54 +0200
commit0e770b13f8967d19f29784f72698f405f85c4d15 (patch)
treee36eeaa760f10af13a5162cbf557bd8b3e65078b /src/mm-base-modem.c
parentb4748ba674d014e639df83583d2e3544aabbafdf (diff)
base-modem: setup a maximum number of timeouts also for USB modems
We have a maximum number of timeouts that could be enabled for TTY modems, e.g. to detect whether the modem is available in the RS232 port or has been unplugged. This was required because RS232 modems aren't notified via udev, so there was no other way to check presence of the modem. But, the same kind of checks may be used in order to detect failed broken modems. If we have a modem that gets into an unstable state where no AT port command goes through and all get timed out, we can definitely flag the modem as invalid and get rid of it. If we don't do this, we would end up leaving the modem exposed and available for users of the API, but in a non-working state. .... <info> Modem /org/freedesktop/ModemManager1/Modem/0: state changed (registered -> connecting) <debug> Launching 3GPP connection attempt with APN 'telefonica.es' <debug> Looking for best CID... <debug> (ttyACM2) device open count is 2 (open) <debug> (ttyACM2): --> 'AT+CGDCONT?<CR>' <debug> Unexpected +CGDCONT? error: 'Serial command timed out' <warn> (tty/ttyACM2) at port timed out 9 consecutive times <debug> Using empty CID 1 with PDP type 'ipv4' <debug> (ttyACM2) device open count is 3 (open) <debug> (ttyACM2) device open count is 2 (close) <debug> (ttyACM2): --> 'AT+CGDCONT=1,"IP","telefonica.es"<CR>' <warn> Couldn't initialize PDP context with our APN: 'Serial command timed out' <debug> Couldn't connect bearer '/org/freedesktop/ModemManager1/Bearer/0': 'Serial command timed out' <info> Modem /org/freedesktop/ModemManager1/Modem/0: state changed (connecting -> registered) <debug> Couldn't connect bearer: 'Serial command timed out' <debug> (ttyACM2) device open count is 1 (close) <error> (tty/ttyACM2) at port timed out 10 consecutive times, marking modem '/org/freedesktop/ModemManager1/Modem/0' as invalid <debug> Removing from DBus bearer at '/org/freedesktop/ModemManager1/Bearer/0' <debug> [device /sys/devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5.5] unexported modem from path '/org/freedesktop/ModemManager1/Modem/0' <debug> Periodic signal checks disabled <debug> (ttyACM2) device open count is 0 (close) <debug> (ttyACM2) closing serial port... <debug> (ttyACM2) serial port closed <debug> (ttyACM2) forced to close port <debug> Modem (u-blox) '/sys/devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5.5' completely disposed
Diffstat (limited to 'src/mm-base-modem.c')
-rw-r--r--src/mm-base-modem.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/mm-base-modem.c b/src/mm-base-modem.c
index 12e96dc0..996fbc13 100644
--- a/src/mm-base-modem.c
+++ b/src/mm-base-modem.c
@@ -36,6 +36,10 @@
G_DEFINE_ABSTRACT_TYPE (MMBaseModem, mm_base_modem, MM_GDBUS_TYPE_OBJECT_SKELETON);
+/* If we get 10 consecutive timeouts in a serial port, we consider the modem
+ * invalid and we request re-probing. */
+#define DEFAULT_MAX_TIMEOUTS 10
+
enum {
PROP_0,
PROP_VALID,
@@ -1318,6 +1322,8 @@ mm_base_modem_init (MMBaseModem *self)
g_str_equal,
g_free,
g_object_unref);
+
+ self->priv->max_timeouts = DEFAULT_MAX_TIMEOUTS;
}
static void
@@ -1497,7 +1503,7 @@ mm_base_modem_class_init (MMBaseModemClass *klass)
"Max timeouts",
"Maximum number of consecutive timed out commands sent to "
"the modem before disabling it. If 0, this feature is disabled.",
- 0, G_MAXUINT, 0,
+ 0, G_MAXUINT, DEFAULT_MAX_TIMEOUTS,
G_PARAM_READWRITE);
g_object_class_install_property (object_class, PROP_MAX_TIMEOUTS, properties[PROP_MAX_TIMEOUTS]);