blob: 47683db0fa54bdd3ebc93f0dd496bdea8546f6c3 [file] [log] [blame]
Norman James90baede2015-09-02 20:32:49 -05001#include "interfaces/fru.h"
2#include "openbmc.h"
3
4
5/* ---------------------------------------------------------------------------------------------------- */
6
7static const gchar* dbus_object_path = "/org/openbmc/frus/Board";
8static const gchar* dbus_name = "org.openbmc.frus.Board";
9static const guint poll_interval = 5000;
10static guint heartbeat = 0;
11
12static GDBusObjectManagerServer *manager = NULL;
13
14static gboolean
15on_init (Fru *fru,
16 GDBusMethodInvocation *invocation,
17 gpointer user_data)
18{
19
20 FruEeprom *eeprom = object_get_fru_eeprom((Object*)user_data);
21
22 const gchar* dev_path = fru_eeprom_get_i2c_dev_path(eeprom);
23 const gchar* addr = fru_eeprom_get_i2c_address(eeprom);
24 g_print("Reading VPD EERPROM at: %s, %s\n",dev_path, addr);
25 fru_complete_init(fru,invocation);
26 fru_set_part_num(fru,"test part num");
27
28 // add eeprom read code here
29 fru_emit_cache_me(fru,dbus_name);
30
31 return TRUE;
32}
33
34static void
35on_bus_acquired (GDBusConnection *connection,
36 const gchar *name,
37 gpointer user_data)
38{
39 g_print ("Acquired a message bus connection: %s\n",name);
40
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 ObjectSkeleton *object = object_skeleton_new (s);
54 g_free (s);
55
56 Fru *fru = fru_skeleton_new ();
57 object_skeleton_set_fru (object, fru);
58 g_object_unref (fru);
59
60 FruEeprom *eeprom = fru_eeprom_skeleton_new ();
61 object_skeleton_set_fru_eeprom (object, eeprom);
62 g_object_unref (eeprom);
63
64 g_signal_connect (fru,
65 "handle-init",
66 G_CALLBACK (on_init),
67 object); /* user_data */
68
69
70 /* 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);
73 }
74
75 /* Export all objects */
76 g_dbus_object_manager_server_set_connection (manager, connection);
77}
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 cmdline cmd;
101 cmd.argc = argc;
102 cmd.argv = argv;
103 guint id;
104 loop = g_main_loop_new (NULL, FALSE);
105
106 id = g_bus_own_name (G_BUS_TYPE_SESSION,
107 dbus_name,
108 G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT |
109 G_BUS_NAME_OWNER_FLAGS_REPLACE,
110 on_bus_acquired,
111 on_name_acquired,
112 on_name_lost,
113 &cmd,
114 NULL);
115
116 g_main_loop_run (loop);
117
118 g_bus_unown_name (id);
119 g_main_loop_unref (loop);
120 return 0;
121}