diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2011-06-06 11:08:51 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-02-17 13:25:02 +0100 |
commit | 156a05afe0ecdbb8e98bcf55a846b06e0e4aeb97 (patch) | |
tree | 1f88551c3fab8415581422dce1d124128ecac792 | |
parent | 85de9bbcc9146447153fe82cc22efbd1e45a44fd (diff) |
iridium: handle allowed mode
-rw-r--r-- | plugins/mm-modem-iridium-gsm.c | 62 |
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; } |