aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2011-06-06 11:08:51 +0200
committerAleksander Morgado <aleksander@lanedo.com>2012-02-17 13:25:02 +0100
commit156a05afe0ecdbb8e98bcf55a846b06e0e4aeb97 (patch)
tree1f88551c3fab8415581422dce1d124128ecac792
parent85de9bbcc9146447153fe82cc22efbd1e45a44fd (diff)
iridium: handle allowed mode
-rw-r--r--plugins/mm-modem-iridium-gsm.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/plugins/mm-modem-iridium-gsm.c b/plugins/mm-modem-iridium-gsm.c
index 731be930..9a877d19 100644
--- a/plugins/mm-modem-iridium-gsm.c
+++ b/plugins/mm-modem-iridium-gsm.c
@@ -32,6 +32,15 @@ static void modem_gsm_network_init (MMModemGsmNetwork *gsm_network_class);
G_DEFINE_TYPE_EXTENDED (MMModemIridiumGsm, mm_modem_iridium_gsm, MM_TYPE_GENERIC_GSM, 0,
G_IMPLEMENT_INTERFACE (MM_TYPE_MODEM_GSM_NETWORK, modem_gsm_network_init))
+
+#define MM_MODEM_IRIDIUM_GSM_GET_PRIVATE(o) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((o), MM_TYPE_MODEM_IRIDIUM_GSM, MMModemIridiumGsmPrivate))
+
+typedef struct {
+ /* Current allowed mode */
+ MMModemGsmAllowedMode allowed_mode;
+} MMModemIridiumGsmPrivate;
+
MMModem *
mm_modem_iridium_gsm_new (const char *device,
const char *driver,
@@ -54,6 +63,51 @@ mm_modem_iridium_gsm_new (const char *device,
}
static void
+set_allowed_mode (MMGenericGsm *gsm,
+ MMModemGsmAllowedMode mode,
+ MMModemFn callback,
+ gpointer user_data)
+{
+ MMModemIridiumGsmPrivate *priv = MM_MODEM_IRIDIUM_GSM_GET_PRIVATE (gsm);
+ MMCallbackInfo *info;
+
+ info = mm_callback_info_new (MM_MODEM (gsm), callback, user_data);
+
+ /* Allow only 2G-related allowed modes */
+ switch (mode) {
+ case MM_MODEM_GSM_ALLOWED_MODE_2G_PREFERRED:
+ case MM_MODEM_GSM_ALLOWED_MODE_2G_ONLY:
+ case MM_MODEM_GSM_ALLOWED_MODE_ANY:
+ priv->allowed_mode = mode;
+ break;
+ default:
+ info->error = g_error_new (MM_MODEM_ERROR,
+ MM_MODEM_ERROR_GENERAL,
+ "Cannot set desired allowed mode, "
+ "not supported");
+ break;
+ }
+
+ mm_callback_info_schedule (info);
+}
+
+static void
+get_allowed_mode (MMGenericGsm *gsm,
+ MMModemUIntFn callback,
+ gpointer user_data)
+{
+ MMModemIridiumGsmPrivate *priv = MM_MODEM_IRIDIUM_GSM_GET_PRIVATE (gsm);
+ MMCallbackInfo *info;
+
+ /* Just return cached value */
+ info = mm_callback_info_uint_new (MM_MODEM (gsm), callback, user_data);
+ mm_callback_info_set_result (info,
+ GUINT_TO_POINTER (priv->allowed_mode),
+ NULL);
+ mm_callback_info_schedule (info);
+}
+
+static void
get_csqf_done (MMAtSerialPort *port,
GString *response,
GError *error,
@@ -203,6 +257,10 @@ modem_gsm_network_init (MMModemGsmNetwork *network_class)
static void
mm_modem_iridium_gsm_init (MMModemIridiumGsm *self)
{
+ MMModemIridiumGsmPrivate *priv = MM_MODEM_IRIDIUM_GSM_GET_PRIVATE (self);
+
+ /* Set defaults */
+ priv->allowed_mode = MM_MODEM_GSM_ALLOWED_MODE_ANY;
}
static void
@@ -211,6 +269,8 @@ mm_modem_iridium_gsm_class_init (MMModemIridiumGsmClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS (klass);
MMGenericGsmClass *gsm_class = MM_GENERIC_GSM_CLASS (klass);
+ g_type_class_add_private (object_class, sizeof (MMModemIridiumGsmPrivate));
+
object_class->get_property = get_property;
object_class->set_property = set_property;
@@ -230,6 +290,8 @@ mm_modem_iridium_gsm_class_init (MMModemIridiumGsmClass *klass)
MM_GENERIC_GSM_PROP_SMS_STORAGE_LOCATION_CMD,
MM_GENERIC_GSM_SMS_STORAGE_LOCATION_CMD);
+ gsm_class->set_allowed_mode = set_allowed_mode;
+ gsm_class->get_allowed_mode = get_allowed_mode;
gsm_class->get_sim_iccid = get_sim_iccid;
}