blob: 1f2ed4790d51a9f72d58735f53960cb102d8e2f8 [file] [log] [blame]
Norman Jamese2765102015-08-19 22:00:55 -05001#include "interfaces/sensor.h"
2
3/* ---------------------------------------------------------------------------------------------------- */
Norman James26072c02015-08-25 07:14:29 -05004static const gchar* dbus_object_path = "/org/openbmc/sensors/Temperature/Ambient";
5static const gchar* dbus_name = "org.openbmc.sensors.Temperature.Ambient";
Norman Jamese2765102015-08-19 22:00:55 -05006
7static GDBusObjectManagerServer *manager = NULL;
8static SensorInteger *sensor = NULL;
9
Norman Jamescc7ae122015-08-24 14:26:09 -050010static gchar* i2c_bus = "";
11static gchar* i2c_address = "";
12static gboolean go = FALSE;
Norman Jamese2765102015-08-19 22:00:55 -050013
14static gboolean
15on_get_units (SensorInteger *sen,
16 GDBusMethodInvocation *invocation,
17 gpointer user_data)
18{
19 const gchar* val = sensor_integer_get_units(sen);
20 sensor_integer_complete_get_units(sen,invocation,val);
21 return TRUE;
22}
23
24static gboolean
25on_get (SensorInteger *sen,
26 GDBusMethodInvocation *invocation,
27 gpointer user_data)
28{
29 guint reading = sensor_integer_get_value(sen);
30 sensor_integer_complete_get_value(sen,invocation,reading);
31 return TRUE;
32}
33
Norman Jamescc7ae122015-08-24 14:26:09 -050034static gboolean
35on_set_config (SensorInteger *sen,
36 GDBusMethodInvocation *invocation,
37 gchar** config,
38 gpointer user_data)
39{
40 g_print("I2C bus = %s\n",config[0]);
41 g_print("I2C addr = %s\n",config[1]);
42 sensor_integer_complete_set_config_data(sen,invocation);
43 go = TRUE;
44 return TRUE;
45}
46
47
Norman Jamese2765102015-08-19 22:00:55 -050048static void
49on_bus_acquired (GDBusConnection *connection,
50 const gchar *name,
51 gpointer user_data)
52{
53 ObjectSkeleton *object;
54 guint n;
55
56 g_print ("Acquired a message bus connection: %s\n",name);
57
Norman James26072c02015-08-25 07:14:29 -050058 manager = g_dbus_object_manager_server_new (dbus_object_path);
Norman Jamese2765102015-08-19 22:00:55 -050059
60 gchar *s;
Norman James26072c02015-08-25 07:14:29 -050061 s = g_strdup_printf ("%s/0",dbus_object_path);
Norman Jamese2765102015-08-19 22:00:55 -050062 object = object_skeleton_new (s);
63 g_free (s);
64
65 sensor = sensor_integer_skeleton_new ();
66 object_skeleton_set_sensor_integer (object, sensor);
67 g_object_unref (sensor);
68
69 sensor_integer_set_units(sensor,"C");
70 //define method callbacks here
71 g_signal_connect (sensor,
72 "handle-get-value",
73 G_CALLBACK (on_get),
74 NULL); /* user_data */
75 g_signal_connect (sensor,
76 "handle-get-units",
77 G_CALLBACK (on_get_units),
78 NULL); /* user_data */
79
Norman Jamescc7ae122015-08-24 14:26:09 -050080 g_signal_connect (sensor,
81 "handle-set-config-data",
82 G_CALLBACK (on_set_config),
83 NULL); /* user_data */
84
85
Norman Jamese2765102015-08-19 22:00:55 -050086
87 /* Export the object (@manager takes its own reference to @object) */
88 g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object));
89 g_object_unref (object);
90
91 /* Export all objects */
92 g_dbus_object_manager_server_set_connection (manager, connection);
93}
94
95static void
96on_name_acquired (GDBusConnection *connection,
97 const gchar *name,
98 gpointer user_data)
99{
100 g_print ("Acquired the name %s\n", name);
101}
102
103static void
104on_name_lost (GDBusConnection *connection,
105 const gchar *name,
106 gpointer user_data)
107{
108 g_print ("Lost the name %s\n", name);
109}
110
111static gboolean
112poll_sensor()
113{
Norman Jamescc7ae122015-08-24 14:26:09 -0500114 if (go)
Norman Jamese2765102015-08-19 22:00:55 -0500115 {
Norman Jamescc7ae122015-08-24 14:26:09 -0500116 guint value = sensor_integer_get_value(sensor);
117 //TOOD: Change to actually read sensor
118 value = value+1;
119 g_print("Polling sensor: %d\n",value);
120
121 //if changed, set property and emit signal
122 if (value != sensor_integer_get_value(sensor))
123 {
124 g_print("Sensor changed");
125 sensor_integer_set_value(sensor,value);
126 sensor_integer_emit_changed(sensor,value);
127 }
Norman Jamese2765102015-08-19 22:00:55 -0500128 }
Norman Jamescc7ae122015-08-24 14:26:09 -0500129 return TRUE;
Norman Jamese2765102015-08-19 22:00:55 -0500130}
131
132gint
133main (gint argc, gchar *argv[])
134{
135 GMainLoop *loop;
136
137 guint id;
138 //g_type_init ();
139 loop = g_main_loop_new (NULL, FALSE);
140
141 id = g_bus_own_name (G_BUS_TYPE_SESSION,
Norman James26072c02015-08-25 07:14:29 -0500142 dbus_name,
Norman Jamese2765102015-08-19 22:00:55 -0500143 G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT |
144 G_BUS_NAME_OWNER_FLAGS_REPLACE,
145 on_bus_acquired,
146 on_name_acquired,
147 on_name_lost,
148 loop,
149 NULL);
150
151 g_timeout_add(5000, poll_sensor, NULL);
152 g_main_loop_run (loop);
153
154 g_bus_unown_name (id);
155 g_main_loop_unref (loop);
156 return 0;
157}