aboutsummaryrefslogtreecommitdiff
path: root/src/mm-base-modem.c
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-03-08 12:47:45 +0100
committerAleksander Morgado <aleksander@lanedo.com>2012-03-16 14:53:23 +0100
commitcc6d4a97fb0a11c799f1079c6db86b31db7eadf7 (patch)
treea1b6214fdc960285dcb020f45b132db2598fd3c1 /src/mm-base-modem.c
parent48285dcfdf04becbe90922ac3f2dd942bc43de53 (diff)
base-modem: new port getters and peekers
* mm_base_modem_peek_port_* () will return either a port object (no new reference), or NULL if none available. You would usually peek() a port if you're going to use it just in the current method, as there is no way to that reference to get invalid (we're single threaded). * mm_base_modem_get_port_* () will return either NEW references to valid port objects, or NULL if none available. And, you would usually get() a port, whenever you want the port object to be valid even out of the current method, for example when keeping it in the context of an async operation. Also, we need to consider that the primary AT port MAY BE NULL when you peek() or get() it. This is due to the fact that we may be releasing ports (due to device disconnection) in the middle of async operations.
Diffstat (limited to 'src/mm-base-modem.c')
-rw-r--r--src/mm-base-modem.c57
1 files changed, 49 insertions, 8 deletions
diff --git a/src/mm-base-modem.c b/src/mm-base-modem.c
index 668199b9..74deb0ac 100644
--- a/src/mm-base-modem.c
+++ b/src/mm-base-modem.c
@@ -325,6 +325,14 @@ mm_base_modem_get_port_primary (MMBaseModem *self)
{
g_return_val_if_fail (MM_IS_BASE_MODEM (self), NULL);
+ return (self->priv->primary ? g_object_ref (self->priv->primary) : NULL);
+}
+
+MMAtSerialPort *
+mm_base_modem_peek_port_primary (MMBaseModem *self)
+{
+ g_return_val_if_fail (MM_IS_BASE_MODEM (self), NULL);
+
return self->priv->primary;
}
@@ -333,6 +341,14 @@ mm_base_modem_get_port_secondary (MMBaseModem *self)
{
g_return_val_if_fail (MM_IS_BASE_MODEM (self), NULL);
+ return (self->priv->secondary ? g_object_ref (self->priv->secondary) : NULL);
+}
+
+MMAtSerialPort *
+mm_base_modem_peek_port_secondary (MMBaseModem *self)
+{
+ g_return_val_if_fail (MM_IS_BASE_MODEM (self), NULL);
+
return self->priv->secondary;
}
@@ -341,12 +357,29 @@ mm_base_modem_get_port_qcdm (MMBaseModem *self)
{
g_return_val_if_fail (MM_IS_BASE_MODEM (self), NULL);
+ return (self->priv->qcdm ? g_object_ref (self->priv->qcdm) : NULL);
+}
+
+MMQcdmSerialPort *
+mm_base_modem_peek_port_qcdm (MMBaseModem *self)
+{
+ g_return_val_if_fail (MM_IS_BASE_MODEM (self), NULL);
+
return self->priv->qcdm;
}
MMPort *
mm_base_modem_get_best_data_port (MMBaseModem *self)
{
+ MMPort *port;
+
+ port = mm_base_modem_peek_best_data_port (self);
+ return (port ? g_object_ref (port) : NULL);
+}
+
+MMPort *
+mm_base_modem_peek_best_data_port (MMBaseModem *self)
+{
g_return_val_if_fail (MM_IS_BASE_MODEM (self), NULL);
/* TODO: sometime we'll have a list of available data ports to use instead
@@ -361,24 +394,32 @@ MMAtSerialPort *
mm_base_modem_get_best_at_port (MMBaseModem *self,
GError **error)
{
- MMAtSerialPort *port;
+ MMAtSerialPort *best;
+ best = mm_base_modem_peek_best_at_port (self, error);
+ return (best ? g_object_ref (best) : NULL);
+}
+
+MMAtSerialPort *
+mm_base_modem_peek_best_at_port (MMBaseModem *self,
+ GError **error)
+{
/* Decide which port to use */
- port = mm_base_modem_get_port_primary (self);
- if (port && !mm_port_get_connected (MM_PORT (port)))
- return port;
+ if (self->priv->primary &&
+ !mm_port_get_connected (MM_PORT (self->priv->primary)))
+ return self->priv->primary;
/* If primary port is connected, check if we can get the secondary
* port */
- port = mm_base_modem_get_port_secondary (self);
- if (port && !mm_port_get_connected (MM_PORT (port)))
- return port;
+ if (self->priv->secondary &&
+ !mm_port_get_connected (MM_PORT (self->priv->secondary)))
+ return self->priv->secondary;
/* Otherwise, we cannot get any port */
g_set_error (error,
MM_CORE_ERROR,
MM_CORE_ERROR_CONNECTED,
- "No port available to run command");
+ "No AT port available to run command");
return NULL;
}