aboutsummaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-07-18 19:22:48 +0200
committerAleksander Morgado <aleksander@lanedo.com>2012-08-06 20:07:24 +0200
commitb8310729ad94e024a0ce9217607fa6667e4735a2 (patch)
tree4e154ac71c22b33b776050e1ac64f06ee642fa5b /plugins
parent2e8ede1a2970ae1108a6b4e4f75a7bcc6a15b7aa (diff)
icera: implement initial allowed mode loading
Diffstat (limited to 'plugins')
-rw-r--r--plugins/icera/mm-iface-icera.c78
-rw-r--r--plugins/icera/mm-iface-icera.h12
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 */