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