radio-settings: Store GSM and UMTS band settings

This commit is contained in:
Antara Borwankar 2016-04-26 19:08:27 +05:30 committed by Denis Kenzior
parent 65132868c8
commit e8c4e0f4c1
1 changed files with 70 additions and 34 deletions

View File

@ -72,7 +72,7 @@ static const char *radio_access_mode_to_string(enum ofono_radio_access_mode m)
case OFONO_RADIO_ACCESS_MODE_LTE:
return "lte";
default:
return "";
return NULL;
}
}
@ -114,7 +114,7 @@ static const char *radio_band_gsm_to_string(enum ofono_radio_band_gsm band)
return "1900";
}
return "";
return NULL;
}
static gboolean radio_band_gsm_from_string(const char *str,
@ -160,7 +160,7 @@ static const char *radio_band_umts_to_string(enum ofono_radio_band_umts band)
return "2100";
}
return "";
return NULL;
}
static gboolean radio_band_umts_from_string(const char *str,
@ -311,6 +311,12 @@ static void radio_set_band(struct ofono_radio_settings *rs)
OFONO_RADIO_SETTINGS_INTERFACE,
"GsmBand", DBUS_TYPE_STRING,
&str_band);
if (rs->settings) {
g_key_file_set_integer(rs->settings, SETTINGS_GROUP,
"GsmBand", rs->band_gsm);
storage_sync(rs->imsi, SETTINGS_STORE, rs->settings);
}
}
if (rs->band_umts != rs->pending_band_umts) {
@ -321,8 +327,13 @@ static void radio_set_band(struct ofono_radio_settings *rs)
OFONO_RADIO_SETTINGS_INTERFACE,
"UmtsBand", DBUS_TYPE_STRING,
&str_band);
}
if (rs->settings) {
g_key_file_set_integer(rs->settings, SETTINGS_GROUP,
"UmtsBand", rs->band_umts);
storage_sync(rs->imsi, SETTINGS_STORE, rs->settings);
}
}
}
static void radio_band_set_callback(const struct ofono_error *error,
@ -368,6 +379,12 @@ static void radio_set_rat_mode(struct ofono_radio_settings *rs,
OFONO_RADIO_SETTINGS_INTERFACE,
"TechnologyPreference",
DBUS_TYPE_STRING, &str_mode);
if (rs->settings) {
g_key_file_set_integer(rs->settings, SETTINGS_GROUP,
"TechnologyPreference", rs->mode);
storage_sync(rs->imsi, SETTINGS_STORE, rs->settings);
}
}
static void radio_mode_set_callback(const struct ofono_error *error, void *data)
@ -578,15 +595,7 @@ static DBusMessage *radio_set_property(DBusConnection *conn, DBusMessage *msg,
rs->pending_mode = mode;
rs->driver->set_rat_mode(rs, mode, radio_mode_set_callback, rs);
if (rs->settings) {
const char *mode_str;
mode_str = radio_access_mode_to_string(mode);
g_key_file_set_string(rs->settings, SETTINGS_GROUP,
"TechnologyPreference", mode_str);
storage_sync(rs->imsi, SETTINGS_STORE, rs->settings);
}
/* will be saved in radiosettng on success response*/
return NULL;
} else if (g_strcmp0(property, "GsmBand") == 0) {
const char *value;
@ -610,7 +619,7 @@ static DBusMessage *radio_set_property(DBusConnection *conn, DBusMessage *msg,
rs->driver->set_band(rs, band, rs->band_umts,
radio_band_set_callback, rs);
/* will be saved in radiosettng on success response*/
return NULL;
} else if (g_strcmp0(property, "UmtsBand") == 0) {
const char *value;
@ -634,7 +643,7 @@ static DBusMessage *radio_set_property(DBusConnection *conn, DBusMessage *msg,
rs->driver->set_band(rs, rs->band_gsm, band,
radio_band_set_callback, rs);
/* will be saved in radiosettng on success response*/
return NULL;
} else if (g_strcmp0(property, "FastDormancy") == 0) {
dbus_bool_t value;
@ -804,12 +813,21 @@ static void radio_mode_set_callback_at_reg(const struct ofono_error *error,
*/
ofono_radio_finish_register(rs);
}
static void radio_band_set_callback_at_reg(const struct ofono_error *error,
void *data)
{
if (error->type != OFONO_ERROR_TYPE_NO_ERROR)
DBG("Error setting radio access mode register time");
/*
* Continue with atom register even if request fail at modem
* ofono_radio_finish_register called by radio_mode_set_callback_at_reg
*/
}
static void radio_load_settings(struct ofono_radio_settings *rs,
const char *imsi)
{
GError *error;
char *strmode;
rs->settings = storage_open(imsi, SETTINGS_STORE);
@ -820,34 +838,46 @@ static void radio_load_settings(struct ofono_radio_settings *rs,
if (rs->settings == NULL) {
DBG("radiosetting storage open failed");
rs->mode = OFONO_RADIO_ACCESS_MODE_ANY;
rs->band_gsm = OFONO_RADIO_BAND_GSM_ANY;
rs->band_umts = OFONO_RADIO_BAND_UMTS_ANY;
return;
}
rs->imsi = g_strdup(imsi);
error = NULL;
strmode = g_key_file_get_string(rs->settings, SETTINGS_GROUP,
rs->band_gsm = g_key_file_get_integer(rs->settings, SETTINGS_GROUP,
"GsmBand", &error);
if (error || radio_band_gsm_to_string(rs->band_gsm) == NULL) {
rs->band_gsm = OFONO_RADIO_BAND_GSM_ANY;
g_key_file_set_integer(rs->settings, SETTINGS_GROUP,
"GsmBand", rs->band_gsm);
}
error = NULL;
rs->band_umts = g_key_file_get_integer(rs->settings, SETTINGS_GROUP,
"UmtsBand", &error);
if (error || radio_band_umts_to_string(rs->band_umts) == NULL) {
rs->band_umts = OFONO_RADIO_BAND_UMTS_ANY;
g_key_file_set_integer(rs->settings, SETTINGS_GROUP,
"UmtsBand", rs->band_umts);
}
error = NULL;
rs->mode = g_key_file_get_integer(rs->settings, SETTINGS_GROUP,
"TechnologyPreference", &error);
if (error) {
g_error_free(error);
goto setdefault;
if (error || radio_access_mode_to_string(rs->mode) == NULL) {
rs->mode = OFONO_RADIO_ACCESS_MODE_ANY;
g_key_file_set_integer(rs->settings, SETTINGS_GROUP,
"TechnologyPreference", rs->mode);
}
if (radio_access_mode_from_string(strmode, &rs->mode) == FALSE) {
DBG("Invalid rat mode in storage; Setting default");
goto setdefault;
}
g_free(strmode);
return;
setdefault:
rs->mode = OFONO_RADIO_ACCESS_MODE_ANY;
g_key_file_set_string(rs->settings, SETTINGS_GROUP,
"TechnologyPreference", "any");
storage_sync(rs->imsi, SETTINGS_STORE, rs->settings);
g_free(strmode);
DBG("TechnologyPreference: %d", rs->mode);
DBG("GsmBand: %d", rs->band_gsm);
DBG("UmtsBand: %d", rs->band_umts);
}
void ofono_radio_settings_register(struct ofono_radio_settings *rs)
@ -860,6 +890,12 @@ void ofono_radio_settings_register(struct ofono_radio_settings *rs)
radio_load_settings(rs, ofono_sim_get_imsi(sim));
if (rs->driver->set_band == NULL)
goto finish;
rs->driver->set_band(rs, rs->band_gsm, rs->band_umts,
radio_band_set_callback_at_reg, rs);
if (rs->driver->set_rat_mode == NULL)
goto finish;