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
This commit is contained in:
@@ -36,6 +36,10 @@
|
|||||||
|
|
||||||
G_DEFINE_ABSTRACT_TYPE (MMBaseModem, mm_base_modem, MM_GDBUS_TYPE_OBJECT_SKELETON);
|
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 {
|
enum {
|
||||||
PROP_0,
|
PROP_0,
|
||||||
PROP_VALID,
|
PROP_VALID,
|
||||||
@@ -1318,6 +1322,8 @@ mm_base_modem_init (MMBaseModem *self)
|
|||||||
g_str_equal,
|
g_str_equal,
|
||||||
g_free,
|
g_free,
|
||||||
g_object_unref);
|
g_object_unref);
|
||||||
|
|
||||||
|
self->priv->max_timeouts = DEFAULT_MAX_TIMEOUTS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -1497,7 +1503,7 @@ mm_base_modem_class_init (MMBaseModemClass *klass)
|
|||||||
"Max timeouts",
|
"Max timeouts",
|
||||||
"Maximum number of consecutive timed out commands sent to "
|
"Maximum number of consecutive timed out commands sent to "
|
||||||
"the modem before disabling it. If 0, this feature is disabled.",
|
"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_PARAM_READWRITE);
|
||||||
g_object_class_install_property (object_class, PROP_MAX_TIMEOUTS, properties[PROP_MAX_TIMEOUTS]);
|
g_object_class_install_property (object_class, PROP_MAX_TIMEOUTS, properties[PROP_MAX_TIMEOUTS]);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user