blob: 6dbd5c3498c0697693d57c4a72657b6833f8af3e [file] [log] [blame]
Norman Jamese2765102015-08-19 22:00:55 -05001#include "interfaces/button.h"
Norman James10ff6a32015-08-27 14:24:17 -05002#include "gpio.h"
3#include "openbmc.h"
Norman Jamese2765102015-08-19 22:00:55 -05004
5/* ---------------------------------------------------------------------------------------------------- */
Norman James26072c02015-08-25 07:14:29 -05006static const gchar* dbus_object_path = "/org/openbmc/buttons/ButtonPower";
7static const gchar* dbus_name = "org.openbmc.buttons.ButtonPower";
Norman Jamese2765102015-08-19 22:00:55 -05008
9static GDBusObjectManagerServer *manager = NULL;
Norman Jamese2765102015-08-19 22:00:55 -050010
11static gboolean
12on_is_on (Button *btn,
13 GDBusMethodInvocation *invocation,
14 gpointer user_data)
15{
16 gboolean btn_state=button_get_state(btn);
17 button_complete_is_on(btn,invocation,btn_state);
18 return TRUE;
19
20}
21
22static gboolean
23on_sim_button_press (Button *btn,
24 GDBusMethodInvocation *invocation,
25 gpointer user_data)
26{
27 g_print("Simulating button pressed\n");
28 button_emit_button_pressed(btn);
29 button_complete_sim_button_press(btn,invocation);
30 return TRUE;
31
32}
33
34static void
35on_bus_acquired (GDBusConnection *connection,
36 const gchar *name,
37 gpointer user_data)
38{
Norman James10ff6a32015-08-27 14:24:17 -050039 ObjectSkeleton *object;
40 g_print ("Acquired a message bus connection: %s\n",name);
41 cmdline *cmd = user_data;
42 if (cmd->argc < 2)
43 {
44 g_print("No objects created. Put object name(s) on command line\n");
45 return;
46 }
47 manager = g_dbus_object_manager_server_new (dbus_object_path);
48 int i=0;
49 for (i=1;i<cmd->argc;i++)
50 {
51 gchar *s;
52 s = g_strdup_printf ("%s/%s",dbus_object_path,cmd->argv[i]);
53 object = object_skeleton_new (s);
54 g_free (s);
Norman Jamese2765102015-08-19 22:00:55 -050055
Norman James10ff6a32015-08-27 14:24:17 -050056 Button* button = button_skeleton_new ();
57 object_skeleton_set_button (object, button);
58 g_object_unref (button);
Norman Jamese2765102015-08-19 22:00:55 -050059
Norman James10ff6a32015-08-27 14:24:17 -050060 //define method callbacks
61 g_signal_connect (button,
Norman Jamese2765102015-08-19 22:00:55 -050062 "handle-is-on",
63 G_CALLBACK (on_is_on),
64 NULL); /* user_data */
Norman James10ff6a32015-08-27 14:24:17 -050065 g_signal_connect (button,
Norman Jamese2765102015-08-19 22:00:55 -050066 "handle-sim-button-press",
67 G_CALLBACK (on_sim_button_press),
68 NULL); /* user_data */
69
Norman James10ff6a32015-08-27 14:24:17 -050070 /* Export the object (@manager takes its own reference to @object) */
71 g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object));
72 g_object_unref (object);
Norman Jamese2765102015-08-19 22:00:55 -050073
Norman James10ff6a32015-08-27 14:24:17 -050074 }
75 /* Export all objects */
76 g_dbus_object_manager_server_set_connection (manager, connection);
Norman Jamese2765102015-08-19 22:00:55 -050077}
78
79static void
80on_name_acquired (GDBusConnection *connection,
81 const gchar *name,
82 gpointer user_data)
83{
84 g_print ("Acquired the name %s\n", name);
85}
86
87static void
88on_name_lost (GDBusConnection *connection,
89 const gchar *name,
90 gpointer user_data)
91{
92 g_print ("Lost the name %s\n", name);
93}
94
95
96gint
97main (gint argc, gchar *argv[])
98{
99 GMainLoop *loop;
100
Norman James952b38d2015-08-27 21:30:06 -0500101 cmdline cmd;
102 cmd.argc = argc;
103 cmd.argv = argv;
104
Norman Jamese2765102015-08-19 22:00:55 -0500105 guint id;
Norman Jamese2765102015-08-19 22:00:55 -0500106 loop = g_main_loop_new (NULL, FALSE);
107
108 id = g_bus_own_name (G_BUS_TYPE_SESSION,
Norman James26072c02015-08-25 07:14:29 -0500109 dbus_name,
Norman Jamese2765102015-08-19 22:00:55 -0500110 G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT |
111 G_BUS_NAME_OWNER_FLAGS_REPLACE,
112 on_bus_acquired,
113 on_name_acquired,
114 on_name_lost,
Norman James952b38d2015-08-27 21:30:06 -0500115 &cmd,
Norman Jamese2765102015-08-19 22:00:55 -0500116 NULL);
117
118 g_main_loop_run (loop);
119
120 g_bus_unown_name (id);
121 g_main_loop_unref (loop);
122 return 0;
123}