aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-04-11 11:47:02 +0200
committerAleksander Morgado <aleksander@lanedo.com>2012-08-29 17:14:47 +0200
commit73a9a037be65807f7eb3c04b5726bc9416ac1524 (patch)
tree044c005cda5c4e3fbdd18594723e0ad380cb9fe6
parent306b4eb5094fb4f46120b41a104e937d0f41e1e9 (diff)
base-modem: allow getting/peeking the QMI port
-rw-r--r--src/mm-base-modem.c33
-rw-r--r--src/mm-base-modem.h2
2 files changed, 34 insertions, 1 deletions
diff --git a/src/mm-base-modem.c b/src/mm-base-modem.c
index 6c5c562a..c3c7de99 100644
--- a/src/mm-base-modem.c
+++ b/src/mm-base-modem.c
@@ -83,6 +83,9 @@ struct _MMBaseModemPrivate {
* port to receive all GPS traces */
MMAtSerialPort *gps_control;
MMGpsSerialPort *gps;
+
+ /* QMI port */
+ MMPort *qmi;
};
static gchar *
@@ -239,7 +242,7 @@ mm_base_modem_grab_port (MMBaseModem *self,
MM_PORT_TYPE, MM_PORT_TYPE_QMI,
NULL));
} else
- /* We already filter out before all non-tty, non-net, non-wdm ports */
+ /* We already filter out before all non-tty, non-net, non-qmi ports */
g_assert_not_reached();
mm_dbg ("(%s) type '%s' claimed by %s",
@@ -304,6 +307,9 @@ mm_base_modem_release_port (MMBaseModem *self,
if (port == (MMPort *)self->priv->gps)
g_clear_object (&self->priv->gps);
+ if (port == (MMPort *)self->priv->qmi)
+ g_clear_object (&self->priv->qmi);
+
/* Remove it from the tracking HT */
mm_dbg ("(%s/%s) type %s released from %s",
subsys,
@@ -503,6 +509,22 @@ mm_base_modem_peek_port_gps (MMBaseModem *self)
}
MMPort *
+mm_base_modem_get_port_qmi (MMBaseModem *self)
+{
+ g_return_val_if_fail (MM_IS_BASE_MODEM (self), NULL);
+
+ return (self->priv->qmi ? g_object_ref (self->priv->qmi) : NULL);
+}
+
+MMPort *
+mm_base_modem_peek_port_qmi (MMBaseModem *self)
+{
+ g_return_val_if_fail (MM_IS_BASE_MODEM (self), NULL);
+
+ return self->priv->qmi;
+}
+
+MMPort *
mm_base_modem_get_best_data_port (MMBaseModem *self)
{
MMPort *port;
@@ -624,6 +646,7 @@ mm_base_modem_organize_ports (MMBaseModem *self,
MMAtSerialPort *gps_control = NULL;
MMGpsSerialPort *gps = NULL;
MMPort *data = NULL;
+ MMPort *qmi = NULL;
g_return_val_if_fail (MM_IS_BASE_MODEM (self), FALSE);
@@ -692,6 +715,11 @@ mm_base_modem_organize_ports (MMBaseModem *self,
gps = MM_GPS_SERIAL_PORT (candidate);
break;
+ case MM_PORT_TYPE_QMI:
+ if (!qmi)
+ qmi = candidate;
+ break;
+
default:
/* Ignore port */
break;
@@ -744,6 +772,7 @@ mm_base_modem_organize_ports (MMBaseModem *self,
log_port (self, MM_PORT (qcdm), "qcdm");
log_port (self, MM_PORT (gps_control), "gps control");
log_port (self, MM_PORT (gps), "gps");
+ log_port (self, MM_PORT (qmi), "qmi");
/* We keep new refs to the objects here */
self->priv->primary = g_object_ref (primary);
@@ -752,6 +781,7 @@ mm_base_modem_organize_ports (MMBaseModem *self,
self->priv->qcdm = (qcdm ? g_object_ref (qcdm) : NULL);
self->priv->gps_control = (gps_control ? g_object_ref (gps_control) : NULL);
self->priv->gps = (gps ? g_object_ref (gps) : NULL);
+ self->priv->qmi = (qmi ? g_object_ref (qmi) : NULL);
/* As soon as we get the ports organized, we initialize the modem */
mm_base_modem_initialize (self,
@@ -1026,6 +1056,7 @@ dispose (GObject *object)
g_clear_object (&self->priv->qcdm);
g_clear_object (&self->priv->gps_control);
g_clear_object (&self->priv->gps);
+ g_clear_object (&self->priv->qmi);
if (self->priv->ports) {
g_hash_table_destroy (self->priv->ports);
diff --git a/src/mm-base-modem.h b/src/mm-base-modem.h
index e0eb18d7..81426111 100644
--- a/src/mm-base-modem.h
+++ b/src/mm-base-modem.h
@@ -116,6 +116,7 @@ MMAtSerialPort *mm_base_modem_peek_port_secondary (MMBaseModem *self);
MMQcdmSerialPort *mm_base_modem_peek_port_qcdm (MMBaseModem *self);
MMAtSerialPort *mm_base_modem_peek_port_gps_control (MMBaseModem *self);
MMGpsSerialPort *mm_base_modem_peek_port_gps (MMBaseModem *self);
+MMPort *mm_base_modem_peek_port_qmi (MMBaseModem *self);
MMAtSerialPort *mm_base_modem_peek_best_at_port (MMBaseModem *self, GError **error);
MMPort *mm_base_modem_peek_best_data_port (MMBaseModem *self);
@@ -124,6 +125,7 @@ MMAtSerialPort *mm_base_modem_get_port_secondary (MMBaseModem *self);
MMQcdmSerialPort *mm_base_modem_get_port_qcdm (MMBaseModem *self);
MMAtSerialPort *mm_base_modem_get_port_gps_control (MMBaseModem *self);
MMGpsSerialPort *mm_base_modem_get_port_gps (MMBaseModem *self);
+MMPort *mm_base_modem_get_port_qmi (MMBaseModem *self);
MMAtSerialPort *mm_base_modem_get_best_at_port (MMBaseModem *self, GError **error);
MMPort *mm_base_modem_get_best_data_port (MMBaseModem *self);