diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2012-03-09 00:13:53 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-03-16 14:53:23 +0100 |
commit | 4b64d3dcf044937d92f4bc0c7af54da6ee92c34e (patch) | |
tree | f7fe752ba664a963595dec78a2925c9f16977b47 | |
parent | 25e8bfd2a31c87bc2a1a4f5d98ebb173303b348b (diff) |
nokia: new `MMSimNokia'
Nokia phones don't support AT+CRSM.
-rw-r--r-- | plugins/Makefile.am | 2 | ||||
-rw-r--r-- | plugins/nokia/mm-broadband-modem-nokia.c | 30 | ||||
-rw-r--r-- | plugins/nokia/mm-sim-nokia.c | 84 | ||||
-rw-r--r-- | plugins/nokia/mm-sim-nokia.h | 51 |
4 files changed, 166 insertions, 1 deletions
diff --git a/plugins/Makefile.am b/plugins/Makefile.am index 20838a02..d5971cd1 100644 --- a/plugins/Makefile.am +++ b/plugins/Makefile.am @@ -166,6 +166,8 @@ libmm_plugin_option_la_LDFLAGS = $(PLUGIN_COMMON_LINKER_FLAGS) libmm_plugin_nokia_la_SOURCES = \ nokia/mm-plugin-nokia.c \ nokia/mm-plugin-nokia.h \ + nokia/mm-sim-nokia.c \ + nokia/mm-sim-nokia.h \ nokia/mm-broadband-modem-nokia.c \ nokia/mm-broadband-modem-nokia.h libmm_plugin_nokia_la_CPPFLAGS = $(PLUGIN_COMMON_COMPILER_FLAGS) diff --git a/plugins/nokia/mm-broadband-modem-nokia.c b/plugins/nokia/mm-broadband-modem-nokia.c index 3e8a1661..9991fce0 100644 --- a/plugins/nokia/mm-broadband-modem-nokia.c +++ b/plugins/nokia/mm-broadband-modem-nokia.c @@ -30,6 +30,7 @@ #include "mm-iface-modem.h" #include "mm-base-modem-at.h" #include "mm-broadband-modem-nokia.h" +#include "mm-sim-nokia.h" static void iface_modem_init (MMIfaceModem *iface); @@ -37,7 +38,30 @@ G_DEFINE_TYPE_EXTENDED (MMBroadbandModemNokia, mm_broadband_modem_nokia, MM_TYPE G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM, iface_modem_init)); /*****************************************************************************/ -/* MODEM INIT */ +/* Create SIM (Modem interface) */ + +static MMSim * +create_sim_finish (MMIfaceModem *self, + GAsyncResult *res, + GError **error) +{ + return mm_sim_new_finish (res, error); +} + +static void +create_sim (MMIfaceModem *self, + GAsyncReadyCallback callback, + gpointer user_data) +{ + /* New Nokia SIM */ + mm_sim_nokia_new (MM_BASE_MODEM (self), + NULL, /* cancellable */ + callback, + user_data); +} + +/*****************************************************************************/ +/* Modem initialization (Modem interface) */ static gboolean modem_init_finish (MMIfaceModem *self, @@ -113,6 +137,10 @@ iface_modem_init (MMIfaceModem *iface) iface->modem_init = modem_init; iface->modem_init_finish = modem_init_finish; + /* Create Nokia-specific SIM*/ + iface->create_sim = create_sim; + iface->create_sim_finish = create_sim_finish; + /* Nokia headsets (at least N85) do not support "power on"; they do * support "power off" but you proabably do not want to turn off the * power on your telephone if something went wrong with connecting diff --git a/plugins/nokia/mm-sim-nokia.c b/plugins/nokia/mm-sim-nokia.c new file mode 100644 index 00000000..c0ecfb14 --- /dev/null +++ b/plugins/nokia/mm-sim-nokia.c @@ -0,0 +1,84 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details: + * + * Copyright (C) 2012 Aleksander Morgado <aleksander@gnu.org> + */ + +#include <config.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> +#include <ctype.h> + +#include <ModemManager.h> +#include <libmm-common.h> + +#include "mm-sim-nokia.h" + +G_DEFINE_TYPE (MMSimNokia, mm_sim_nokia, MM_TYPE_SIM); + +/*****************************************************************************/ + +MMSim * +mm_sim_nokia_new_finish (GAsyncResult *res, + GError **error) +{ + GObject *source; + GObject *sim; + + source = g_async_result_get_source_object (res); + sim = g_async_initable_new_finish (G_ASYNC_INITABLE (source), res, error); + g_object_unref (source); + + if (!sim) + return NULL; + + /* Only export valid SIMs */ + mm_sim_export (MM_SIM (sim)); + + return MM_SIM (sim); +} + +void +mm_sim_nokia_new (MMBaseModem *modem, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + g_async_initable_new_async (MM_TYPE_SIM_NOKIA, + G_PRIORITY_DEFAULT, + cancellable, + callback, + user_data, + MM_SIM_MODEM, modem, + NULL); +} + +static void +mm_sim_nokia_init (MMSimNokia *self) +{ +} + +static void +mm_sim_nokia_class_init (MMSimNokiaClass *klass) +{ + MMSimClass *sim_class = MM_SIM_CLASS (klass); + + /* Skip querying most SIM card info, +CRSM not supported by Nokia modems */ + sim_class->load_sim_identifier = NULL; + sim_class->load_sim_identifier_finish = NULL; + sim_class->load_operator_identifier = NULL; + sim_class->load_operator_identifier_finish = NULL; + sim_class->load_operator_name = NULL; + sim_class->load_operator_name_finish = NULL; +} diff --git a/plugins/nokia/mm-sim-nokia.h b/plugins/nokia/mm-sim-nokia.h new file mode 100644 index 00000000..22230979 --- /dev/null +++ b/plugins/nokia/mm-sim-nokia.h @@ -0,0 +1,51 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details: + * + * Copyright (C) 2012 Aleksander Morgado <aleksander@gnu.org> + */ + +#ifndef MM_SIM_NOKIA_H +#define MM_SIM_NOKIA_H + +#include <glib.h> +#include <glib-object.h> + +#include "mm-sim.h" + +#define MM_TYPE_SIM_NOKIA (mm_sim_nokia_get_type ()) +#define MM_SIM_NOKIA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MM_TYPE_SIM_NOKIA, MMSimNokia)) +#define MM_SIM_NOKIA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MM_TYPE_SIM_NOKIA, MMSimNokiaClass)) +#define MM_IS_SIM_NOKIA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MM_TYPE_SIM_NOKIA)) +#define MM_IS_SIM_NOKIA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MM_TYPE_SIM_NOKIA)) +#define MM_SIM_NOKIA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MM_TYPE_SIM_NOKIA, MMSimNokiaClass)) + +typedef struct _MMSimNokia MMSimNokia; +typedef struct _MMSimNokiaClass MMSimNokiaClass; + +struct _MMSimNokia { + MMSim parent; +}; + +struct _MMSimNokiaClass { + MMSimClass parent; +}; + +GType mm_sim_nokia_get_type (void); + +void mm_sim_nokia_new (MMBaseModem *modem, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data); +MMSim *mm_sim_nokia_new_finish (GAsyncResult *res, + GError **error); + +#endif /* MM_SIM_NOKIA_H */ |