diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2012-07-18 19:22:48 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-08-06 20:07:24 +0200 |
commit | b8310729ad94e024a0ce9217607fa6667e4735a2 (patch) | |
tree | 4e154ac71c22b33b776050e1ac64f06ee642fa5b /plugins | |
parent | 2e8ede1a2970ae1108a6b4e4f75a7bcc6a15b7aa (diff) |
icera: implement initial allowed mode loading
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/icera/mm-iface-icera.c | 78 | ||||
-rw-r--r-- | plugins/icera/mm-iface-icera.h | 12 |
2 files changed, 89 insertions, 1 deletions
diff --git a/plugins/icera/mm-iface-icera.c b/plugins/icera/mm-iface-icera.c index 8d55d406..dedb493a 100644 --- a/plugins/icera/mm-iface-icera.c +++ b/plugins/icera/mm-iface-icera.c @@ -24,8 +24,84 @@ #include "ModemManager.h" #include "mm-log.h" +#include "mm-modem-helpers.h" #include "mm-iface-icera.h" -#include "mm-iface-modem.h" +#include "mm-base-modem-at.h" + +/*****************************************************************************/ +/* Load initial allowed/preferred modes (Modem interface) */ + +gboolean +mm_iface_icera_modem_load_allowed_modes_finish (MMIfaceModem *self, + GAsyncResult *res, + MMModemMode *allowed, + MMModemMode *preferred, + GError **error) +{ + const gchar *response; + const gchar *str; + gint mode, domain; + + response = mm_base_modem_at_command_finish (MM_BASE_MODEM (self), res, error); + if (!response) + return FALSE; + + str = mm_strip_tag (response, "%IPSYS:"); + + if (!sscanf (str, "%d,%d", &mode, &domain)) { + g_set_error (error, + MM_CORE_ERROR, + MM_CORE_ERROR_FAILED, + "Couldn't parse %%IPSYS response: '%s'", + response); + return FALSE; + } + + switch (mode) { + case 0: + *allowed = MM_MODEM_MODE_2G; + *preferred = MM_MODEM_MODE_NONE; + return TRUE; + case 1: + *allowed = MM_MODEM_MODE_3G; + *preferred = MM_MODEM_MODE_NONE; + return TRUE; + case 2: + *allowed = (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G); + *preferred = MM_MODEM_MODE_2G; + return TRUE; + case 3: + *allowed = (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G); + *preferred = MM_MODEM_MODE_3G; + return TRUE; + case 5: /* any */ + *allowed = (MM_MODEM_MODE_CS | MM_MODEM_MODE_2G | MM_MODEM_MODE_3G); + *preferred = MM_MODEM_MODE_NONE; + return TRUE; + default: + break; + } + + g_set_error (error, + MM_CORE_ERROR, + MM_CORE_ERROR_FAILED, + "Couldn't parse unexpected %%IPSYS response: '%s'", + response); + return FALSE; +} + +void +mm_iface_icera_modem_load_allowed_modes (MMIfaceModem *self, + GAsyncReadyCallback callback, + gpointer user_data) +{ + mm_base_modem_at_command (MM_BASE_MODEM (self), + "%IPSYS?", + 3, + FALSE, + callback, + user_data); +} /*****************************************************************************/ diff --git a/plugins/icera/mm-iface-icera.h b/plugins/icera/mm-iface-icera.h index fd326e61..07cd3742 100644 --- a/plugins/icera/mm-iface-icera.h +++ b/plugins/icera/mm-iface-icera.h @@ -32,4 +32,16 @@ struct _MMIfaceIcera { GType mm_iface_icera_get_type (void); +/*****************************************************************************/ +/* Modem interface specific implementations */ + +void mm_iface_icera_modem_load_allowed_modes (MMIfaceModem *self, + GAsyncReadyCallback callback, + gpointer user_data); +gboolean mm_iface_icera_modem_load_allowed_modes_finish (MMIfaceModem *self, + GAsyncResult *res, + MMModemMode *allowed, + MMModemMode *preferred, + GError **error); + #endif /* MM_IFACE_ICERA_H */ |