blob: 72bfb1105ad8121258d099a094bc570e771f8d9d [file] [log] [blame]
Brad Bishop77390492016-04-13 10:47:19 -04001#include "interfaces/openbmc_intf.h"
2#include "openbmc.h"
3#include "object_mapper.h"
4
5/* ------------------------------------------------------------------------- */
6
7static const gchar* dbus_object_path = "/org/openbmc/control";
8static const gchar* dbus_name = "org.openbmc.control.Fan";
9static guint heartbeat = 0;
10
11static GDBusObjectManagerServer *manager = NULL;
12
13static gboolean
14poll_sensor(gpointer user_data)
15{
16 //FruFan *fan = object_get_fan((Object*)user_data);
17 return TRUE;
18}
19
20static gboolean
21on_set_speed(Fan *fan,
22 GDBusMethodInvocation *invocation,
23 guint speed,
24 gpointer user_data)
25{
26 fan_set_speed(fan,speed);
27 fan_complete_set_speed(fan,invocation);
28 return TRUE;
29}
30
31static gboolean
32on_get_speed(Fan *fan,
33 GDBusMethodInvocation *invocation,
34 gpointer user_data)
35{
36 guint reading = fan_get_speed(fan);
37 fan_complete_get_speed(fan,invocation,reading);
38 return TRUE;
39}
40
41static void
42on_bus_acquired(GDBusConnection *connection,
43 const gchar *name,
44 gpointer user_data)
45{
46 //g_print ("Acquired a message bus connection: %s\n",name);
47
48 cmdline *cmd = user_data;
49 if(cmd->argc < 2)
50 {
51 g_print("No objects created. Put object name(s) on command line\n");
52 return;
53 }
54 manager = g_dbus_object_manager_server_new(dbus_object_path);
55 int i=0;
56 for(i=1;i<cmd->argc;i++)
57 {
58 gchar *s;
59 s = g_strdup_printf("%s/%s",dbus_object_path,cmd->argv[i]);
60 ObjectSkeleton *object = object_skeleton_new(s);
61 g_free(s);
62
63 Fan *fan = fan_skeleton_new();
64 object_skeleton_set_fan(object, fan);
65 g_object_unref(fan);
66
67 ObjectMapper* mapper = object_mapper_skeleton_new();
68 object_skeleton_set_object_mapper(object, mapper);
69 g_object_unref(mapper);
70
71 //define method callbacks here
72 g_signal_connect(fan,
73 "handle-get-speed",
74 G_CALLBACK(on_get_speed),
75 NULL); /* user_data */
76 g_signal_connect(fan,
77 "handle-set-speed",
78 G_CALLBACK(on_set_speed),
79 NULL); /* user_data */
80
81 //g_timeout_add(poll_interval, poll_sensor, object);
82
83 /* Export the object (@manager takes its own reference to @object) */
84 g_dbus_object_manager_server_export(manager, G_DBUS_OBJECT_SKELETON(object));
85 g_object_unref(object);
86 }
87
88 /* Export all objects */
89 g_dbus_object_manager_server_set_connection(manager, connection);
90 emit_object_added((GDBusObjectManager*)manager);
91}
92
93static void
94on_name_acquired(GDBusConnection *connection,
95 const gchar *name,
96 gpointer user_data)
97{
98 //g_print ("Acquired the name %s\n", name);
99}
100
101static void
102on_name_lost(GDBusConnection *connection,
103 const gchar *name,
104 gpointer user_data)
105{
106 //g_print ("Lost the name %s\n", name);
107}
108
109gint
110main(gint argc, gchar *argv[])
111{
112 GMainLoop *loop;
113 cmdline cmd;
114 cmd.argc = argc;
115 cmd.argv = argv;
116 guint id;
117 loop = g_main_loop_new(NULL, FALSE);
118
119 id = g_bus_own_name(DBUS_TYPE,
120 dbus_name,
121 G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT |
122 G_BUS_NAME_OWNER_FLAGS_REPLACE,
123 on_bus_acquired,
124 on_name_acquired,
125 on_name_lost,
126 &cmd,
127 NULL);
128
129 g_main_loop_run(loop);
130
131 g_bus_unown_name(id);
132 g_main_loop_unref(loop);
133 return 0;
134}