summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2012-09-27 11:36:47 -0500
committerDenis Kenzior <denkenz@gmail.com>2012-10-03 09:10:42 -0500
commitb3e2ad9378e4967aeec8c2641a8902ff1e52b868 (patch)
tree1d1675eff540c22b86d061a73a74e143ecaaad90 /tools
parent66ba90de6ed8ffac24f3f1d40cca29e3eb628708 (diff)
downloadofono-b3e2ad9378e4967aeec8c2641a8902ff1e52b868.tar.bz2
stktest: Add basic power up logic
Diffstat (limited to 'tools')
-rw-r--r--tools/stktest.c76
1 files changed, 76 insertions, 0 deletions
diff --git a/tools/stktest.c b/tools/stktest.c
index ec335593..27fe9528 100644
--- a/tools/stktest.c
+++ b/tools/stktest.c
@@ -312,6 +312,73 @@ static gboolean has_stk_interface(DBusMessageIter *iter)
return FALSE;
}
+static void set_property_reply(DBusPendingCall *call, void *user_data)
+{
+ DBusMessage *reply = dbus_pending_call_steal_reply(call);
+ DBusError err;
+
+ dbus_error_init(&err);
+
+ if (dbus_set_error_from_message(&err, reply) == TRUE) {
+ g_printerr("%s: %s\n", err.name, err.message);
+ dbus_error_free(&err);
+ }
+
+ dbus_message_unref(reply);
+}
+
+static int set_property(const char *key, int type, const void *val,
+ DBusPendingCallNotifyFunction notify,
+ gpointer user_data,
+ DBusFreeFunction destroy)
+{
+ DBusMessage *msg;
+ DBusMessageIter iter, value;
+ DBusPendingCall *call;
+ const char *signature;
+
+ msg = dbus_message_new_method_call(OFONO_SERVICE, STKTEST_PATH,
+ OFONO_MODEM_INTERFACE, "SetProperty");
+ if (msg == NULL)
+ return -ENOMEM;
+
+ dbus_message_set_auto_start(msg, FALSE);
+
+ dbus_message_iter_init_append(msg, &iter);
+
+ dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &key);
+
+ switch (type) {
+ case DBUS_TYPE_BOOLEAN:
+ signature = DBUS_TYPE_BOOLEAN_AS_STRING;
+ break;
+ default:
+ dbus_message_unref(msg);
+ return -EINVAL;
+ }
+
+ dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT,
+ signature, &value);
+ dbus_message_iter_append_basic(&value, type, val);
+ dbus_message_iter_close_container(&iter, &value);
+
+ if (dbus_connection_send_with_reply(conn, msg, &call, -1) == FALSE) {
+ dbus_message_unref(msg);
+ return -EIO;
+ }
+
+ dbus_message_unref(msg);
+
+ if (call == NULL)
+ return -EINVAL;
+
+ dbus_pending_call_set_notify(call, notify, user_data, destroy);
+
+ dbus_pending_call_unref(call);
+
+ return 0;
+}
+
static gboolean modem_changed(DBusConnection *conn,
DBusMessage *msg, void *user_data)
{
@@ -348,6 +415,13 @@ static gboolean modem_changed(DBusConnection *conn,
return TRUE;
}
+static void powerup(void)
+{
+ dbus_bool_t powered = TRUE;
+ set_property("Powered", DBUS_TYPE_BOOLEAN, &powered,
+ set_property_reply, NULL, NULL);
+}
+
static void get_modems_reply(DBusPendingCall *call, void *user_data)
{
DBusMessage *reply = dbus_pending_call_steal_reply(call);
@@ -406,6 +480,8 @@ done:
g_printerr("Unable to listen on modem emulator socket\n");
g_main_loop_quit(main_loop);
}
+
+ powerup();
}
static int get_modems(DBusConnection *conn)