aboutsummaryrefslogtreecommitdiff
path: root/src/mm-base-modem.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mm-base-modem.c')
-rw-r--r--src/mm-base-modem.c71
1 files changed, 62 insertions, 9 deletions
diff --git a/src/mm-base-modem.c b/src/mm-base-modem.c
index 72b9b849..ab41667b 100644
--- a/src/mm-base-modem.c
+++ b/src/mm-base-modem.c
@@ -56,6 +56,8 @@ enum {
PROP_PRODUCT_ID,
PROP_CONNECTION,
PROP_REPROBE,
+ PROP_DATA_NET_SUPPORTED,
+ PROP_DATA_TTY_SUPPORTED,
PROP_LAST
};
@@ -92,7 +94,10 @@ struct _MMBaseModemPrivate {
MMPortSerialAt *primary;
MMPortSerialAt *secondary;
MMPortSerialQcdm *qcdm;
- GList *data;
+
+ GList *data;
+ gboolean data_net_supported;
+ gboolean data_tty_supported;
/* GPS-enabled modems will have an AT port for control, and a raw serial
* port to receive all GPS traces */
@@ -1167,16 +1172,36 @@ mm_base_modem_organize_ports (MMBaseModem *self,
self->priv->gps_control = (gps_control ? g_object_ref (gps_control) : NULL);
self->priv->gps = (gps ? g_object_ref (gps) : NULL);
- /* Build the final list of data ports, NET ports preferred */
+ /* Append net ports to the final list of data ports, but only if the modem
+ * supports them */
if (data_net) {
- g_list_foreach (data_net, (GFunc)g_object_ref, NULL);
- self->priv->data = g_list_concat (self->priv->data, data_net);
+ if (self->priv->data_net_supported) {
+ g_list_foreach (data_net, (GFunc)g_object_ref, NULL);
+ self->priv->data = g_list_concat (self->priv->data, data_net);
+ } else
+ mm_obj_dbg (self, "net ports available but ignored");
}
- if (data_at_primary)
- self->priv->data = g_list_append (self->priv->data, g_object_ref (data_at_primary));
- if (data_at) {
- g_list_foreach (data_at, (GFunc)g_object_ref, NULL);
- self->priv->data = g_list_concat (self->priv->data, data_at);
+
+ /* Append tty ports to the final list of data ports, but only if the modem
+ * supports them */
+ if (data_at_primary || data_at) {
+ if (self->priv->data_tty_supported) {
+ if (data_at_primary)
+ self->priv->data = g_list_append (self->priv->data, g_object_ref (data_at_primary));
+ if (data_at) {
+ g_list_foreach (data_at, (GFunc)g_object_ref, NULL);
+ self->priv->data = g_list_concat (self->priv->data, data_at);
+ }
+ } else
+ mm_obj_dbg (self, "at data ports available but ignored");
+ }
+
+ /* Fail if we haven't added any single data port; this is probably a plugin
+ * misconfiguration */
+ if (!self->priv->data) {
+ g_set_error_literal (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED,
+ "Failed to find a data port in the modem");
+ return FALSE;
}
#if defined WITH_QMI
@@ -1483,6 +1508,12 @@ set_property (GObject *object,
g_clear_object (&self->priv->connection);
self->priv->connection = g_value_dup_object (value);
break;
+ case PROP_DATA_NET_SUPPORTED:
+ self->priv->data_net_supported = g_value_get_boolean (value);
+ break;
+ case PROP_DATA_TTY_SUPPORTED:
+ self->priv->data_tty_supported = g_value_get_boolean (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1525,6 +1556,12 @@ get_property (GObject *object,
case PROP_CONNECTION:
g_value_set_object (value, self->priv->connection);
break;
+ case PROP_DATA_NET_SUPPORTED:
+ g_value_set_boolean (value, self->priv->data_net_supported);
+ break;
+ case PROP_DATA_TTY_SUPPORTED:
+ g_value_set_boolean (value, self->priv->data_tty_supported);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1683,4 +1720,20 @@ mm_base_modem_class_init (MMBaseModemClass *klass)
FALSE,
G_PARAM_READWRITE);
g_object_class_install_property (object_class, PROP_REPROBE, properties[PROP_REPROBE]);
+
+ properties[PROP_DATA_NET_SUPPORTED] =
+ g_param_spec_boolean (MM_BASE_MODEM_DATA_NET_SUPPORTED,
+ "Data NET supported",
+ "Whether the modem supports connection via a NET port.",
+ FALSE,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (object_class, PROP_DATA_NET_SUPPORTED, properties[PROP_DATA_NET_SUPPORTED]);
+
+ properties[PROP_DATA_TTY_SUPPORTED] =
+ g_param_spec_boolean (MM_BASE_MODEM_DATA_TTY_SUPPORTED,
+ "Data TTY supported",
+ "Whether the modem supports connection via a TTY port.",
+ FALSE,
+ G_PARAM_READWRITE);
+ g_object_class_install_property (object_class, PROP_DATA_TTY_SUPPORTED, properties[PROP_DATA_TTY_SUPPORTED]);
}