#include "common.h"
#include "simutil.h"
#include "util.h"
+#include "storage.h"
#define NETWORK_REGISTRATION_INTERFACE "org.ofono.NetworkRegistration"
#define NETWORK_OPERATOR_INTERFACE "org.ofono.NetworkOperator"
/* How often we update the operator list, in seconds */
#define OPERATOR_LIST_UPDATE_TIME 300
+#define SETTINGS_STORE "netreg"
+#define SETTINGS_GROUP "Settings"
+
static GSList *g_drivers = NULL;
/* 27.007 Section 7.3 <stat> */
struct sim_eons *eons;
gint opscan_source;
struct ofono_sim *sim;
+ GKeyFile *settings;
+ char *imsi;
struct ofono_watchlist *status_watches;
const struct ofono_netreg_driver *driver;
void *driver_data;
netreg->mode = mode;
+ if (netreg->settings) {
+ g_key_file_set_integer(netreg->settings, SETTINGS_GROUP,
+ "Mode", netreg->mode);
+ storage_sync(netreg->imsi, SETTINGS_STORE, netreg->settings);
+ }
+
strmode = registration_mode_to_string(mode);
conn = ofono_dbus_get_connection();
netreg->base_station = NULL;
}
+ if (netreg->settings) {
+ storage_close(netreg->imsi, SETTINGS_STORE,
+ netreg->settings, TRUE);
+
+ g_free(netreg->imsi);
+ netreg->imsi = NULL;
+ netreg->settings = NULL;
+ }
+
g_dbus_unregister_interface(conn, path,
NETWORK_REGISTRATION_INTERFACE);
ofono_modem_remove_interface(modem, NETWORK_REGISTRATION_INTERFACE);
return netreg;
}
+static void netreg_load_settings(struct ofono_netreg *netreg)
+{
+ const char *imsi;
+ int mode;
+
+ imsi = ofono_sim_get_imsi(netreg->sim);
+
+ if (!imsi)
+ return;
+
+ netreg->settings = storage_open(imsi, SETTINGS_STORE);
+
+ if (netreg->settings == NULL)
+ return;
+
+ netreg->imsi = g_strdup(imsi);
+
+ mode = g_key_file_get_integer(netreg->settings, SETTINGS_GROUP,
+ "Mode", NULL);
+
+ if (mode >= 0 && mode <= 2)
+ netreg->mode = mode;
+
+ g_key_file_set_integer(netreg->settings, SETTINGS_GROUP,
+ "Mode", netreg->mode);
+}
+
void ofono_netreg_register(struct ofono_netreg *netreg)
{
DBusConnection *conn = ofono_dbus_get_connection();
sim_atom = __ofono_modem_find_atom(modem, OFONO_ATOM_TYPE_SIM);
if (sim_atom) {
+ const char *imsi;
+
/* Assume that if sim atom exists, it is ready */
netreg->sim = __ofono_atom_get_data(sim_atom);
+ netreg_load_settings(netreg);
+
ofono_sim_read(netreg->sim, SIM_EFPNN_FILEID,
OFONO_SIM_FILE_STRUCTURE_FIXED,
sim_pnn_read_cb, netreg);