Restructure code to allow other properties besides
TechnologyPreference to be returned.
---
src/radio-settings.c | 59 +++++++++++++++++++++++++------------------------
1 files changed, 30 insertions(+), 29 deletions(-)
diff --git a/src/radio-settings.c b/src/radio-settings.c
index f70d870..5b6ef9e 100644
--- a/src/radio-settings.c
+++ b/src/radio-settings.c
@@ -77,15 +77,17 @@ static int string_to_radio_access_mode(const char *mode)
return -1;
}
+static void radio_rat_mode_query_callback(const struct ofono_error *error,
+ enum ofono_radio_access_mode mode,
+ void *data);
+
static DBusMessage *radio_get_properties_reply(DBusMessage *msg,
- struct ofono_radio_settings *rs)
+ struct ofono_radio_settings *rs)
{
DBusMessage *reply;
DBusMessageIter iter;
DBusMessageIter dict;
- const char *mode = radio_access_mode_to_string(rs->mode);
-
reply = dbus_message_new_method_return(msg);
if (!reply)
return NULL;
@@ -96,8 +98,17 @@ static DBusMessage *radio_get_properties_reply(DBusMessage
*msg,
OFONO_PROPERTIES_ARRAY_SIGNATURE,
&dict);
- ofono_dbus_dict_append(&dict, "TechnologyPreference", DBUS_TYPE_STRING,
- &mode);
+ if (rs->flags & RADIO_SETTINGS_MODE_CACHED) {
+ const char *mode = radio_access_mode_to_string(rs->mode);
+ ofono_dbus_dict_append(&dict, "TechnologyPreference",
+ DBUS_TYPE_STRING, &mode);
+ } else if (rs->driver->query_rat_mode) {
+ rs->pending = dbus_message_ref(msg);
+ rs->driver->query_rat_mode(rs,
+ radio_rat_mode_query_callback, rs);
+ dbus_message_unref(reply);
+ return NULL;
+ }
dbus_message_iter_close_container(&iter, &dict);
@@ -107,23 +118,21 @@ static DBusMessage
*radio_get_properties_reply(DBusMessage *msg,
static void radio_set_rat_mode(struct ofono_radio_settings *rs,
enum ofono_radio_access_mode mode)
{
- DBusConnection *conn = ofono_dbus_get_connection();
- const char *path;
- const char *str_mode;
+ if ((rs->flags & RADIO_SETTINGS_MODE_CACHED) &&
+ rs->mode != (int)mode) {
- if (rs->mode == (int)mode)
- return;
+ DBusConnection *conn = ofono_dbus_get_connection();
+ const char *path = __ofono_atom_get_path(rs->atom);
+ const char *str_mode = radio_access_mode_to_string(rs->mode);
+
+ ofono_dbus_signal_property_changed(conn, path,
+ OFONO_RADIO_SETTINGS_INTERFACE,
+ "TechnologyPreference",
+ DBUS_TYPE_STRING, &str_mode);
+ }
rs->mode = mode;
rs->flags |= RADIO_SETTINGS_MODE_CACHED;
-
- path = __ofono_atom_get_path(rs->atom);
- str_mode = radio_access_mode_to_string(rs->mode);
-
- ofono_dbus_signal_property_changed(conn, path,
- OFONO_RADIO_SETTINGS_INTERFACE,
- "TechnologyPreference",
DBUS_TYPE_STRING,
- &str_mode);
}
static void radio_mode_set_callback(const struct ofono_error *error, void
*data)
@@ -162,7 +171,8 @@ static void radio_rat_mode_query_callback(const struct
ofono_error *error,
radio_set_rat_mode(rs, mode);
reply = radio_get_properties_reply(rs->pending, rs);
- __ofono_dbus_pending_reply(&rs->pending, reply);
+ if (reply)
+ __ofono_dbus_pending_reply(&rs->pending, reply);
}
static DBusMessage *radio_get_properties(DBusConnection *conn, DBusMessage
*msg,
@@ -170,19 +180,10 @@ static DBusMessage *radio_get_properties(DBusConnection
*conn, DBusMessage *msg,
{
struct ofono_radio_settings *rs = data;
- if (rs->flags & RADIO_SETTINGS_MODE_CACHED)
- return radio_get_properties_reply(msg, rs);
-
- if (!rs->driver->query_rat_mode)
- return __ofono_error_not_implemented(msg);
-
if (rs->pending)
return __ofono_error_busy(msg);
- rs->pending = dbus_message_ref(msg);
- rs->driver->query_rat_mode(rs, radio_rat_mode_query_callback, rs);
-
- return NULL;
+ return radio_get_properties_reply(msg, rs);
}
static DBusMessage *radio_set_property(DBusConnection *conn, DBusMessage *msg,
--
1.7.0.4
_______________________________________________
ofono mailing list
[email protected]
http://lists.ofono.org/listinfo/ofono