blob: 661f0b30afd81b2f85afcb9f3b7e2f7e1a754789 [file] [log] [blame]
Norman Jamese2765102015-08-19 22:00:55 -05001#include "interfaces/sensor.h"
2
3/* ---------------------------------------------------------------------------------------------------- */
4
5static GDBusObjectManagerServer *manager = NULL;
6static SensorInteger *sensor = NULL;
7
Norman Jamescc7ae122015-08-24 14:26:09 -05008static gchar* i2c_bus = "";
9static gchar* i2c_address = "";
10static gboolean go = FALSE;
Norman Jamese2765102015-08-19 22:00:55 -050011
12static gboolean
13on_get_units (SensorInteger *sen,
14 GDBusMethodInvocation *invocation,
15 gpointer user_data)
16{
17 const gchar* val = sensor_integer_get_units(sen);
18 sensor_integer_complete_get_units(sen,invocation,val);
19 return TRUE;
20}
21
22static gboolean
23on_get (SensorInteger *sen,
24 GDBusMethodInvocation *invocation,
25 gpointer user_data)
26{
27 guint reading = sensor_integer_get_value(sen);
28 sensor_integer_complete_get_value(sen,invocation,reading);
29 return TRUE;
30}
31
Norman Jamescc7ae122015-08-24 14:26:09 -050032static gboolean
33on_set_config (SensorInteger *sen,
34 GDBusMethodInvocation *invocation,
35 gchar** config,
36 gpointer user_data)
37{
38 g_print("I2C bus = %s\n",config[0]);
39 g_print("I2C addr = %s\n",config[1]);
40 sensor_integer_complete_set_config_data(sen,invocation);
41 go = TRUE;
42 return TRUE;
43}
44
45
Norman Jamese2765102015-08-19 22:00:55 -050046static void
47on_bus_acquired (GDBusConnection *connection,
48 const gchar *name,
49 gpointer user_data)
50{
51 ObjectSkeleton *object;
52 guint n;
53
54 g_print ("Acquired a message bus connection: %s\n",name);
55
56 manager = g_dbus_object_manager_server_new ("/org/openbmc/Sensors/Temperature/Ambient");
57
58 gchar *s;
59 s = g_strdup_printf ("/org/openbmc/Sensors/Temperature/Ambient/0");
60 object = object_skeleton_new (s);
61 g_free (s);
62
63 sensor = sensor_integer_skeleton_new ();
64 object_skeleton_set_sensor_integer (object, sensor);
65 g_object_unref (sensor);
66
67 sensor_integer_set_units(sensor,"C");
68 //define method callbacks here
69 g_signal_connect (sensor,
70 "handle-get-value",
71 G_CALLBACK (on_get),
72 NULL); /* user_data */
73 g_signal_connect (sensor,
74 "handle-get-units",
75 G_CALLBACK (on_get_units),
76 NULL); /* user_data */
77
Norman Jamescc7ae122015-08-24 14:26:09 -050078 g_signal_connect (sensor,
79 "handle-set-config-data",
80 G_CALLBACK (on_set_config),
81 NULL); /* user_data */
82
83
Norman Jamese2765102015-08-19 22:00:55 -050084
85 /* Export the object (@manager takes its own reference to @object) */
86 g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object));
87 g_object_unref (object);
88
89 /* Export all objects */
90 g_dbus_object_manager_server_set_connection (manager, connection);
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
109static gboolean
110poll_sensor()
111{
Norman Jamescc7ae122015-08-24 14:26:09 -0500112 if (go)
Norman Jamese2765102015-08-19 22:00:55 -0500113 {
Norman Jamescc7ae122015-08-24 14:26:09 -0500114 guint value = sensor_integer_get_value(sensor);
115 //TOOD: Change to actually read sensor
116 value = value+1;
117 g_print("Polling sensor: %d\n",value);
118
119 //if changed, set property and emit signal
120 if (value != sensor_integer_get_value(sensor))
121 {
122 g_print("Sensor changed");
123 sensor_integer_set_value(sensor,value);
124 sensor_integer_emit_changed(sensor,value);
125 }
Norman Jamese2765102015-08-19 22:00:55 -0500126 }
Norman Jamescc7ae122015-08-24 14:26:09 -0500127 return TRUE;
Norman Jamese2765102015-08-19 22:00:55 -0500128}
129
130gint
131main (gint argc, gchar *argv[])
132{
133 GMainLoop *loop;
134
135 guint id;
136 //g_type_init ();
137 loop = g_main_loop_new (NULL, FALSE);
138
139 id = g_bus_own_name (G_BUS_TYPE_SESSION,
140 "org.openbmc.Sensors.Temperature.Ambient",
141 G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT |
142 G_BUS_NAME_OWNER_FLAGS_REPLACE,
143 on_bus_acquired,
144 on_name_acquired,
145 on_name_lost,
146 loop,
147 NULL);
148
149 g_timeout_add(5000, poll_sensor, NULL);
150 g_main_loop_run (loop);
151
152 g_bus_unown_name (id);
153 g_main_loop_unref (loop);
154 return 0;
155}