added some error handling
diff --git a/Makefile b/Makefile
index 2c49960..ea14c51 100644
--- a/Makefile
+++ b/Makefile
@@ -25,8 +25,8 @@
libopenbmc_intf: openbmc_intf.o
$(CC) -shared -o lib/$@.so obj/openbmc_intf.o $(CFLAGS)
-power_control: power_control_obj.o gpio.o
- $(CC) -o bin/$@.exe obj/gpio.o obj/power_control_obj.o $(OFLAGS) $(CFLAGS)
+power_control: power_control_obj.o gpio.o event_log.o
+ $(CC) -o bin/$@.exe obj/event_log.o obj/gpio.o obj/power_control_obj.o $(OFLAGS) $(CFLAGS)
chassis_identify: chassis_identify_obj.o gpio.o
$(CC) -o bin/$@.exe obj/gpio.o obj/chassis_identify_obj.o $(OFLAGS) $(CFLAGS)
diff --git a/bin/Barreleye.py b/bin/Barreleye.py
index 3c16c8c..436bec1 100644
--- a/bin/Barreleye.py
+++ b/bin/Barreleye.py
@@ -139,6 +139,9 @@
'properties' : {
'org.openbmc.Control': {
'poll_interval' : 3000
+ },
+ 'org.openbmc.control.Power': {
+ 'pgood_timeout' : 10000
}
}
}
diff --git a/bin/Openbmc.py b/bin/Openbmc.py
index 97d20bf..b320d52 100644
--- a/bin/Openbmc.py
+++ b/bin/Openbmc.py
@@ -19,6 +19,10 @@
'FATAL_ERROR' : 2,
'NOT_PRESENT' : 3,
}
+
+EVENT_TYPES = ['NONE','FATAL','RECOVERABLE','WARNING','SW_ERROR','INFO']
+
+
ENUMS = {
'org.openbmc.SensorIntegerThreshold.state' :
['NOT_SET','NORMAL','LOWER_CRITICAL','LOWER_WARNING','UPPER_WARNING','UPPER_CRITICAL'],
diff --git a/bin/eventlogger.py b/bin/eventlogger.py
index 6f2d165..0c4fcfc 100644
--- a/bin/eventlogger.py
+++ b/bin/eventlogger.py
@@ -3,12 +3,11 @@
import sys
import syslog
import json
-#from gi.repository import GObject
import gobject
import dbus
import dbus.service
import dbus.mainloop.glib
-
+import Openbmc
DBUS_NAME = 'org.openbmc.loggers.EventLogger'
OBJ_NAME = '/org/openbmc/loggers/EventLogger/'+sys.argv[1]
@@ -20,10 +19,16 @@
syslog.openlog('openbmc')
bus.add_signal_receiver(self.event_log_signal_handler,
- dbus_interface = "org.openbmc.EventLog", signal_name = "EventLog" )
+ dbus_interface = "org.openbmc.EventLog",
+ signal_name = "EventLog",
+ path_keyword='path')
## Signal handler
- def event_log_signal_handler(self,message):
+ def event_log_signal_handler(self,e_type,msg,path = None):
+ message = {}
+ message['object_path'] = path
+ message['e_type'] = Openbmc.EVENT_TYPES[int(e_type)]
+ message['message'] = msg
syslog.syslog(json.dumps(message))
if __name__ == '__main__':
diff --git a/bin/sensor_manager.py b/bin/sensor_manager.py
index 2e1e96a..0020a1a 100644
--- a/bin/sensor_manager.py
+++ b/bin/sensor_manager.py
@@ -22,6 +22,9 @@
bus.add_signal_receiver(self.SensorChangedHandler,
dbus_interface = 'org.openbmc.SensorValue',
signal_name = 'Changed', path_keyword='path')
+ bus.add_signal_receiver(self.SensorErrorHandler,
+ dbus_interface = 'org.openbmc.SensorValue',
+ signal_name = 'Error', path_keyword='path')
bus.add_signal_receiver(self.NormalThreshold,
dbus_interface = 'org.openbmc.SensorThreshold',
signal_name = 'Normal', path_keyword='path')
@@ -71,7 +74,11 @@
print "Unknown sensor at: "+path
return val
- ## Signal handlers
+ ## Signal handlers
+ def SensorErrorHandler(self,path = None):
+ self.initSensorEntry(path)
+ self.sensor_cache[path]['error'] = True
+
def SensorChangedHandler(self,value,units,path = None):
self.initSensorEntry(path)
self.sensor_cache[path]['value'] = value
diff --git a/includes/gpio.c b/includes/gpio.c
index a7057a5..4b22f89 100644
--- a/includes/gpio.c
+++ b/includes/gpio.c
@@ -11,19 +11,21 @@
#include "gpio.h"
-void gpio_writec(GPIO* gpio, char value)
+int gpio_writec(GPIO* gpio, char value)
{
+ int rc = GPIO_OK;
char buf[1];
buf[0] = value;
if (write(gpio->fd, buf, 1) != 1)
{
- //TODO: error handling
- //printf("Write error\n");
- }
+ rc = GPIO_WRITE_ERROR;
+ }
+ return rc;
}
-void gpio_write(GPIO* gpio, uint8_t value)
+int gpio_write(GPIO* gpio, uint8_t value)
{
+ int rc = GPIO_OK;
char buf[1];
buf[0] = '0';
if (value==1)
@@ -32,37 +34,48 @@
}
if (write(gpio->fd, buf, 1) != 1)
{
- //TODO: error handling
- //printf("write error\n");
- }
+ rc = GPIO_WRITE_ERROR;
+ }
+ return rc;
}
-uint8_t gpio_read(GPIO* gpio)
+int gpio_read(GPIO* gpio, uint8_t* value)
{
char buf[1];
-
+ int r = GPIO_OK;
if (read(gpio->fd,&buf,1) != 1)
{
- //g_print("read error\n");
- //TODO: error handling
+ r = GPIO_READ_ERROR;
+ } else {
+ if (buf[0]=='1') {
+ *value = 1;
+ } else {
+ *value = 0;
+ }
}
- if (buf[0]=='1') {
- return 1;
- }
- return 0;
+ return r;
}
-void gpio_clock_cycle(GPIO* gpio, int num_clks) {
+int gpio_clock_cycle(GPIO* gpio, int num_clks) {
int i=0;
+ int r=GPIO_OK;
for (i=0;i<num_clks;i++) {
- gpio_writec(gpio,'0');
- gpio_writec(gpio,'1');
+ if (gpio_writec(gpio,'0') == -1) {
+ r = GPIO_WRITE_ERROR;
+ break;
+ }
+ if (gpio_writec(gpio,'1') == -1) {
+ r = GPIO_WRITE_ERROR;
+ break;
+ }
}
+ return r;
}
// Gets the gpio device path from gpio manager object
-void gpio_init(GDBusConnection *connection, GPIO* gpio)
+int gpio_init(GDBusConnection *connection, GPIO* gpio)
{
+ int rc = GPIO_OK;
GDBusProxy *proxy;
GError *error;
GVariant *result;
@@ -78,7 +91,9 @@
"org.openbmc.managers.System", /* interface */
NULL, /* GCancellable */
&error);
- g_assert_no_error (error);
+ if (error != NULL) {
+ return GPIO_LOOKUP_ERROR;
+ }
result = g_dbus_proxy_call_sync (proxy,
"gpioInit",
@@ -88,7 +103,9 @@
NULL,
&error);
- g_assert_no_error (error);
+ if (error != NULL) {
+ return GPIO_LOOKUP_ERROR;
+ }
g_assert (result != NULL);
g_variant_get (result, "(&si&s)", &gpio->dev,&gpio->num,&gpio->direction);
g_print("GPIO Lookup: %s = %d,%s\n",gpio->name,gpio->num,gpio->direction);
@@ -97,17 +114,31 @@
char dev[254];
char data[4];
sprintf(dev,"%s/export",gpio->dev);
- int fd = open(dev, O_WRONLY);
- sprintf(data,"%d",gpio->num);
- write(fd,data,strlen(data));
- close(fd);
+ do {
+ int fd = open(dev, O_WRONLY);
+ if (fd == GPIO_ERROR) {
+ rc = GPIO_OPEN_ERROR;
+ break;
+ }
+ sprintf(data,"%d",gpio->num);
+ rc = write(fd,data,strlen(data));
+ close(fd);
+ if (rc == GPIO_ERROR) {
+ rc = GPIO_WRITE_ERROR;
+ break;
+ }
- sprintf(dev,"%s/gpio%d/direction",gpio->dev,gpio->num);
- fd = open(dev,O_WRONLY);
- write(fd,gpio->direction,strlen(gpio->direction));
- close(fd);
+ sprintf(dev,"%s/gpio%d/direction",gpio->dev,gpio->num);
+ fd = open(dev,O_WRONLY);
+ if (fd == GPIO_ERROR) {
+ rc = GPIO_WRITE_ERROR;
+ break;
+ }
+ rc = write(fd,gpio->direction,strlen(gpio->direction));
+ close(fd);
+ } while(0);
-
+ return rc;
}
char* get_gpio_dev(GPIO* gpio)
{
@@ -120,6 +151,7 @@
{
// open gpio for writing or reading
char buf[254];
+ int rc = 0;
if (strcmp(gpio->direction,"in")==0)
{
sprintf(buf, "%s/gpio%d/value", gpio->dev, gpio->num);
@@ -131,10 +163,6 @@
gpio->fd = open(buf, O_WRONLY);
}
- if (gpio->fd == -1)
- {
- printf("error opening: %s\n",buf);
- }
return gpio->fd;
}
diff --git a/includes/gpio.h b/includes/gpio.h
index 68d01bd..54d912d 100644
--- a/includes/gpio.h
+++ b/includes/gpio.h
@@ -14,12 +14,20 @@
//gpio functions
-void gpio_init(GDBusConnection*, GPIO*);
+#define GPIO_OK 0
+#define GPIO_ERROR -1
+#define GPIO_OPEN_ERROR -2
+#define GPIO_INIT_ERROR -3
+#define GPIO_READ_ERROR -4
+#define GPIO_WRITE_ERROR -5
+#define GPIO_LOOKUP_ERROR -6
+
+int gpio_init(GDBusConnection*, GPIO*);
void gpio_close(GPIO*);
int gpio_open(GPIO*);
-void gpio_write(GPIO*, uint8_t);
-void gpio_writec(GPIO*, char);
-void gpio_clock_cycle(GPIO*, int);
-uint8_t gpio_read(GPIO*);
+int gpio_write(GPIO*, uint8_t);
+int gpio_writec(GPIO*, char);
+int gpio_clock_cycle(GPIO*, int);
+int gpio_read(GPIO*,uint8_t*);
#endif
diff --git a/includes/openbmc.h b/includes/openbmc.h
index b8e8d0f..5ae0ede 100644
--- a/includes/openbmc.h
+++ b/includes/openbmc.h
@@ -13,17 +13,23 @@
#define NEW_VARIANT_B(v) g_variant_new_variant(g_variant_new_byte(v))
#define VARIANT_COMPARE(x,y) g_variant_compare(GET_VARIANT(x),GET_VARIANT(y))
-
-static inline void writel(uint32_t val,void* addr)
+#ifdef __arm__
+static inline void write_reg(uint32_t val,void* addr)
{
asm volatile("" : : : "memory");
*(volatile uint32_t *)addr = val;
}
static inline devmem(uint32_t val, uint32_t reg)
{
- writel(val,reg);
+ void* r = (void*)reg;
+ write_reg(val,r);
}
+#else
+static inline devmem(uint32_t val, uint32_t reg)
+{
+}
+#endif
typedef struct {
gint argc;
diff --git a/interfaces/openbmc_intf.c b/interfaces/openbmc_intf.c
index 64804c8..ec88fdc 100644
--- a/interfaces/openbmc_intf.c
+++ b/interfaces/openbmc_intf.c
@@ -3580,6 +3580,17 @@
"changed"
};
+static const _ExtendedGDBusSignalInfo _sensor_value_signal_info_error =
+{
+ {
+ -1,
+ (gchar *) "Error",
+ NULL,
+ NULL
+ },
+ "error"
+};
+
static const _ExtendedGDBusArgInfo _sensor_value_signal_info_heartbeat_ARG_bus_name =
{
{
@@ -3611,6 +3622,7 @@
static const _ExtendedGDBusSignalInfo * const _sensor_value_signal_info_pointers[] =
{
&_sensor_value_signal_info_changed,
+ &_sensor_value_signal_info_error,
&_sensor_value_signal_info_heartbeat,
NULL
};
@@ -3790,6 +3802,7 @@
* @get_units: Getter for the #SensorValue:units property.
* @get_value: Getter for the #SensorValue:value property.
* @changed: Handler for the #SensorValue::changed signal.
+ * @error: Handler for the #SensorValue::error signal.
* @heartbeat: Handler for the #SensorValue::heartbeat signal.
*
* Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorValue.top_of_page">org.openbmc.SensorValue</link>.
@@ -3891,6 +3904,24 @@
2, G_TYPE_VARIANT, G_TYPE_STRING);
/**
+ * SensorValue::error:
+ * @object: A #SensorValue.
+ *
+ * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-openbmc-SensorValue.Error">"Error"</link> is received.
+ *
+ * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit the D-Bus signal.
+ */
+ g_signal_new ("error",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (SensorValueIface, error),
+ NULL,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_NONE,
+ 0);
+
+ /**
* SensorValue::heartbeat:
* @object: A #SensorValue.
* @arg_bus_name: Argument.
@@ -4250,6 +4281,19 @@
}
/**
+ * sensor_value_emit_error:
+ * @object: A #SensorValue.
+ *
+ * Emits the <link linkend="gdbus-signal-org-openbmc-SensorValue.Error">"Error"</link> D-Bus signal.
+ */
+void
+sensor_value_emit_error (
+ SensorValue *object)
+{
+ g_signal_emit_by_name (object, "error");
+}
+
+/**
* sensor_value_emit_heartbeat:
* @object: A #SensorValue.
* @arg_bus_name: Argument to pass with the signal.
@@ -5370,6 +5414,28 @@
}
static void
+_sensor_value_on_signal_error (
+ SensorValue *object)
+{
+ SensorValueSkeleton *skeleton = SENSOR_VALUE_SKELETON (object);
+
+ GList *connections, *l;
+ GVariant *signal_variant;
+ connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));
+
+ signal_variant = g_variant_ref_sink (g_variant_new ("()"));
+ for (l = connections; l != NULL; l = l->next)
+ {
+ GDBusConnection *connection = l->data;
+ g_dbus_connection_emit_signal (connection,
+ NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.SensorValue", "Error",
+ signal_variant, NULL);
+ }
+ g_variant_unref (signal_variant);
+ g_list_free_full (connections, g_object_unref);
+}
+
+static void
_sensor_value_on_signal_heartbeat (
SensorValue *object,
const gchar *arg_bus_name)
@@ -5686,6 +5752,7 @@
sensor_value_skeleton_iface_init (SensorValueIface *iface)
{
iface->changed = _sensor_value_on_signal_changed;
+ iface->error = _sensor_value_on_signal_error;
iface->heartbeat = _sensor_value_on_signal_heartbeat;
iface->get_value = sensor_value_skeleton_get_value;
iface->get_units = sensor_value_skeleton_get_units;
@@ -14421,10 +14488,24 @@
FALSE
};
+static const _ExtendedGDBusPropertyInfo _control_power_property_info_pgood_timeout =
+{
+ {
+ -1,
+ (gchar *) "pgood_timeout",
+ (gchar *) "i",
+ G_DBUS_PROPERTY_INFO_FLAGS_READABLE | G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE,
+ NULL
+ },
+ "pgood-timeout",
+ FALSE
+};
+
static const _ExtendedGDBusPropertyInfo * const _control_power_property_info_pointers[] =
{
&_control_power_property_info_pgood,
&_control_power_property_info_state,
+ &_control_power_property_info_pgood_timeout,
NULL
};
@@ -14470,6 +14551,7 @@
{
g_object_class_override_property (klass, property_id_begin++, "pgood");
g_object_class_override_property (klass, property_id_begin++, "state");
+ g_object_class_override_property (klass, property_id_begin++, "pgood-timeout");
return property_id_begin - 1;
}
@@ -14487,6 +14569,7 @@
* @handle_get_power_state: Handler for the #ControlPower::handle-get-power-state signal.
* @handle_set_power_state: Handler for the #ControlPower::handle-set-power-state signal.
* @get_pgood: Getter for the #ControlPower:pgood property.
+ * @get_pgood_timeout: Getter for the #ControlPower:pgood-timeout property.
* @get_state: Getter for the #ControlPower:state property.
* @power_good: Handler for the #ControlPower::power-good signal.
* @power_lost: Handler for the #ControlPower::power-lost signal.
@@ -14602,6 +14685,15 @@
*/
g_object_interface_install_property (iface,
g_param_spec_int ("state", "state", "state", G_MININT32, G_MAXINT32, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * ControlPower:pgood-timeout:
+ *
+ * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-control-Power.pgood_timeout">"pgood_timeout"</link>.
+ *
+ * Since the D-Bus property for this #GObject property is both readable and writable, it is meaningful to both read from it and write to it on both the service- and client-side.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_int ("pgood-timeout", "pgood_timeout", "pgood_timeout", G_MININT32, G_MAXINT32, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
}
/**
@@ -14667,6 +14759,37 @@
}
/**
+ * control_power_get_pgood_timeout: (skip)
+ * @object: A #ControlPower.
+ *
+ * Gets the value of the <link linkend="gdbus-property-org-openbmc-control-Power.pgood_timeout">"pgood_timeout"</link> D-Bus property.
+ *
+ * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side.
+ *
+ * Returns: The property value.
+ */
+gint
+control_power_get_pgood_timeout (ControlPower *object)
+{
+ return CONTROL_POWER_GET_IFACE (object)->get_pgood_timeout (object);
+}
+
+/**
+ * control_power_set_pgood_timeout: (skip)
+ * @object: A #ControlPower.
+ * @value: The value to set.
+ *
+ * Sets the <link linkend="gdbus-property-org-openbmc-control-Power.pgood_timeout">"pgood_timeout"</link> D-Bus property to @value.
+ *
+ * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side.
+ */
+void
+control_power_set_pgood_timeout (ControlPower *object, gint value)
+{
+ g_object_set (G_OBJECT (object), "pgood-timeout", value, NULL);
+}
+
+/**
* control_power_emit_power_good:
* @object: A #ControlPower.
*
@@ -14975,7 +15098,7 @@
{
const _ExtendedGDBusPropertyInfo *info;
GVariant *variant;
- g_assert (prop_id != 0 && prop_id - 1 < 2);
+ g_assert (prop_id != 0 && prop_id - 1 < 3);
info = _control_power_property_info_pointers[prop_id - 1];
variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (object), info->parent_struct.name);
if (info->use_gvariant)
@@ -15022,7 +15145,7 @@
{
const _ExtendedGDBusPropertyInfo *info;
GVariant *variant;
- g_assert (prop_id != 0 && prop_id - 1 < 2);
+ g_assert (prop_id != 0 && prop_id - 1 < 3);
info = _control_power_property_info_pointers[prop_id - 1];
variant = g_dbus_gvalue_to_gvariant (value, G_VARIANT_TYPE (info->parent_struct.signature));
g_dbus_proxy_call (G_DBUS_PROXY (object),
@@ -15134,6 +15257,21 @@
return value;
}
+static gint
+control_power_proxy_get_pgood_timeout (ControlPower *object)
+{
+ ControlPowerProxy *proxy = CONTROL_POWER_PROXY (object);
+ GVariant *variant;
+ gint value = 0;
+ variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "pgood_timeout");
+ if (variant != NULL)
+ {
+ value = g_variant_get_int32 (variant);
+ g_variant_unref (variant);
+ }
+ return value;
+}
+
static void
control_power_proxy_init (ControlPowerProxy *proxy)
{
@@ -15173,6 +15311,7 @@
{
iface->get_pgood = control_power_proxy_get_pgood;
iface->get_state = control_power_proxy_get_state;
+ iface->get_pgood_timeout = control_power_proxy_get_pgood_timeout;
}
/**
@@ -15643,7 +15782,7 @@
{
ControlPowerSkeleton *skeleton = CONTROL_POWER_SKELETON (object);
guint n;
- for (n = 0; n < 2; n++)
+ for (n = 0; n < 3; n++)
g_value_unset (&skeleton->priv->properties[n]);
g_free (skeleton->priv->properties);
g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);
@@ -15661,7 +15800,7 @@
GParamSpec *pspec G_GNUC_UNUSED)
{
ControlPowerSkeleton *skeleton = CONTROL_POWER_SKELETON (object);
- g_assert (prop_id != 0 && prop_id - 1 < 2);
+ g_assert (prop_id != 0 && prop_id - 1 < 3);
g_mutex_lock (&skeleton->priv->lock);
g_value_copy (&skeleton->priv->properties[prop_id - 1], value);
g_mutex_unlock (&skeleton->priv->lock);
@@ -15778,7 +15917,7 @@
GParamSpec *pspec)
{
ControlPowerSkeleton *skeleton = CONTROL_POWER_SKELETON (object);
- g_assert (prop_id != 0 && prop_id - 1 < 2);
+ g_assert (prop_id != 0 && prop_id - 1 < 3);
g_mutex_lock (&skeleton->priv->lock);
g_object_freeze_notify (object);
if (!_g_value_equal (value, &skeleton->priv->properties[prop_id - 1]))
@@ -15803,9 +15942,10 @@
g_mutex_init (&skeleton->priv->lock);
skeleton->priv->context = g_main_context_ref_thread_default ();
- skeleton->priv->properties = g_new0 (GValue, 2);
+ skeleton->priv->properties = g_new0 (GValue, 3);
g_value_init (&skeleton->priv->properties[0], G_TYPE_INT);
g_value_init (&skeleton->priv->properties[1], G_TYPE_INT);
+ g_value_init (&skeleton->priv->properties[2], G_TYPE_INT);
}
static gint
@@ -15830,6 +15970,17 @@
return value;
}
+static gint
+control_power_skeleton_get_pgood_timeout (ControlPower *object)
+{
+ ControlPowerSkeleton *skeleton = CONTROL_POWER_SKELETON (object);
+ gint value;
+ g_mutex_lock (&skeleton->priv->lock);
+ value = g_value_get_int (&(skeleton->priv->properties[2]));
+ g_mutex_unlock (&skeleton->priv->lock);
+ return value;
+}
+
static void
control_power_skeleton_class_init (ControlPowerSkeletonClass *klass)
{
@@ -15863,6 +16014,7 @@
iface->power_lost = _control_power_on_signal_power_lost;
iface->get_pgood = control_power_skeleton_get_pgood;
iface->get_state = control_power_skeleton_get_state;
+ iface->get_pgood_timeout = control_power_skeleton_get_pgood_timeout;
}
/**
@@ -17517,48 +17669,23 @@
/* ---- Introspection data for org.openbmc.EventLog ---- */
-static const _ExtendedGDBusArgInfo _event_log_method_info_get_message_OUT_ARG_message =
+static const _ExtendedGDBusArgInfo _event_log_signal_info_event_log_ARG_e_type =
{
{
-1,
- (gchar *) "message",
- (gchar *) "a{ss}",
+ (gchar *) "e_type",
+ (gchar *) "y",
NULL
},
FALSE
};
-static const _ExtendedGDBusArgInfo * const _event_log_method_info_get_message_OUT_ARG_pointers[] =
-{
- &_event_log_method_info_get_message_OUT_ARG_message,
- NULL
-};
-
-static const _ExtendedGDBusMethodInfo _event_log_method_info_get_message =
-{
- {
- -1,
- (gchar *) "getMessage",
- NULL,
- (GDBusArgInfo **) &_event_log_method_info_get_message_OUT_ARG_pointers,
- NULL
- },
- "handle-get-message",
- FALSE
-};
-
-static const _ExtendedGDBusMethodInfo * const _event_log_method_info_pointers[] =
-{
- &_event_log_method_info_get_message,
- NULL
-};
-
static const _ExtendedGDBusArgInfo _event_log_signal_info_event_log_ARG_message =
{
{
-1,
(gchar *) "message",
- (gchar *) "a{ss}",
+ (gchar *) "s",
NULL
},
FALSE
@@ -17566,6 +17693,7 @@
static const _ExtendedGDBusArgInfo * const _event_log_signal_info_event_log_ARG_pointers[] =
{
+ &_event_log_signal_info_event_log_ARG_e_type,
&_event_log_signal_info_event_log_ARG_message,
NULL
};
@@ -17587,33 +17715,14 @@
NULL
};
-static const _ExtendedGDBusPropertyInfo _event_log_property_info_message =
-{
- {
- -1,
- (gchar *) "message",
- (gchar *) "a{ss}",
- G_DBUS_PROPERTY_INFO_FLAGS_READABLE,
- NULL
- },
- "message",
- FALSE
-};
-
-static const _ExtendedGDBusPropertyInfo * const _event_log_property_info_pointers[] =
-{
- &_event_log_property_info_message,
- NULL
-};
-
static const _ExtendedGDBusInterfaceInfo _event_log_interface_info =
{
{
-1,
(gchar *) "org.openbmc.EventLog",
- (GDBusMethodInfo **) &_event_log_method_info_pointers,
+ NULL,
(GDBusSignalInfo **) &_event_log_signal_info_pointers,
- (GDBusPropertyInfo **) &_event_log_property_info_pointers,
+ NULL,
NULL
},
"event-log",
@@ -17646,7 +17755,6 @@
guint
event_log_override_properties (GObjectClass *klass, guint property_id_begin)
{
- g_object_class_override_property (klass, property_id_begin++, "message");
return property_id_begin - 1;
}
@@ -17661,8 +17769,6 @@
/**
* EventLogIface:
* @parent_iface: The parent interface.
- * @handle_get_message: Handler for the #EventLog::handle-get-message signal.
- * @get_message: Getter for the #EventLog:message property.
* @event_log: Handler for the #EventLog::event-log signal.
*
* Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-EventLog.top_of_page">org.openbmc.EventLog</link>.
@@ -17674,33 +17780,11 @@
static void
event_log_default_init (EventLogIface *iface)
{
- /* GObject signals for incoming D-Bus method calls: */
- /**
- * EventLog::handle-get-message:
- * @object: A #EventLog.
- * @invocation: A #GDBusMethodInvocation.
- *
- * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-EventLog.getMessage">getMessage()</link> D-Bus method.
- *
- * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call event_log_complete_get_message() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
- *
- * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
- */
- g_signal_new ("handle-get-message",
- G_TYPE_FROM_INTERFACE (iface),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EventLogIface, handle_get_message),
- g_signal_accumulator_true_handled,
- NULL,
- g_cclosure_marshal_generic,
- G_TYPE_BOOLEAN,
- 1,
- G_TYPE_DBUS_METHOD_INVOCATION);
-
/* GObject signals for received D-Bus signals: */
/**
* EventLog::event-log:
* @object: A #EventLog.
+ * @arg_e_type: Argument.
* @arg_message: Argument.
*
* On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-openbmc-EventLog.EventLog">"EventLog"</link> is received.
@@ -17715,74 +17799,14 @@
NULL,
g_cclosure_marshal_generic,
G_TYPE_NONE,
- 1, G_TYPE_VARIANT);
+ 2, G_TYPE_UCHAR, G_TYPE_STRING);
- /* GObject properties for D-Bus properties: */
- /**
- * EventLog:message:
- *
- * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-EventLog.message">"message"</link>.
- *
- * Since the D-Bus property for this #GObject property is readable but not writable, it is meaningful to read from it on both the client- and service-side. It is only meaningful, however, to write to it on the service-side.
- */
- g_object_interface_install_property (iface,
- g_param_spec_variant ("message", "message", "message", G_VARIANT_TYPE ("a{ss}"), NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-}
-
-/**
- * event_log_get_message: (skip)
- * @object: A #EventLog.
- *
- * Gets the value of the <link linkend="gdbus-property-org-openbmc-EventLog.message">"message"</link> D-Bus property.
- *
- * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.
- *
- * <warning>The returned value is only valid until the property changes so on the client-side it is only safe to use this function on the thread where @object was constructed. Use event_log_dup_message() if on another thread.</warning>
- *
- * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object.
- */
-GVariant *
-event_log_get_message (EventLog *object)
-{
- return EVENT_LOG_GET_IFACE (object)->get_message (object);
-}
-
-/**
- * event_log_dup_message: (skip)
- * @object: A #EventLog.
- *
- * Gets a copy of the <link linkend="gdbus-property-org-openbmc-EventLog.message">"message"</link> D-Bus property.
- *
- * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side.
- *
- * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value should be freed with g_variant_unref().
- */
-GVariant *
-event_log_dup_message (EventLog *object)
-{
- GVariant *value;
- g_object_get (G_OBJECT (object), "message", &value, NULL);
- return value;
-}
-
-/**
- * event_log_set_message: (skip)
- * @object: A #EventLog.
- * @value: The value to set.
- *
- * Sets the <link linkend="gdbus-property-org-openbmc-EventLog.message">"message"</link> D-Bus property to @value.
- *
- * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side.
- */
-void
-event_log_set_message (EventLog *object, GVariant *value)
-{
- g_object_set (G_OBJECT (object), "message", value, NULL);
}
/**
* event_log_emit_event_log:
* @object: A #EventLog.
+ * @arg_e_type: Argument to pass with the signal.
* @arg_message: Argument to pass with the signal.
*
* Emits the <link linkend="gdbus-signal-org-openbmc-EventLog.EventLog">"EventLog"</link> D-Bus signal.
@@ -17790,128 +17814,10 @@
void
event_log_emit_event_log (
EventLog *object,
- GVariant *arg_message)
+ guchar arg_e_type,
+ const gchar *arg_message)
{
- g_signal_emit_by_name (object, "event-log", arg_message);
-}
-
-/**
- * event_log_call_get_message:
- * @proxy: A #EventLogProxy.
- * @cancellable: (allow-none): A #GCancellable or %NULL.
- * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
- * @user_data: User data to pass to @callback.
- *
- * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-EventLog.getMessage">getMessage()</link> D-Bus method on @proxy.
- * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
- * You can then call event_log_call_get_message_finish() to get the result of the operation.
- *
- * See event_log_call_get_message_sync() for the synchronous, blocking version of this method.
- */
-void
-event_log_call_get_message (
- EventLog *proxy,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- g_dbus_proxy_call (G_DBUS_PROXY (proxy),
- "getMessage",
- g_variant_new ("()"),
- G_DBUS_CALL_FLAGS_NONE,
- -1,
- cancellable,
- callback,
- user_data);
-}
-
-/**
- * event_log_call_get_message_finish:
- * @proxy: A #EventLogProxy.
- * @out_message: (out): Return location for return parameter or %NULL to ignore.
- * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to event_log_call_get_message().
- * @error: Return location for error or %NULL.
- *
- * Finishes an operation started with event_log_call_get_message().
- *
- * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
- */
-gboolean
-event_log_call_get_message_finish (
- EventLog *proxy,
- GVariant **out_message,
- GAsyncResult *res,
- GError **error)
-{
- GVariant *_ret;
- _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
- if (_ret == NULL)
- goto _out;
- g_variant_get (_ret,
- "(@a{ss})",
- out_message);
- g_variant_unref (_ret);
-_out:
- return _ret != NULL;
-}
-
-/**
- * event_log_call_get_message_sync:
- * @proxy: A #EventLogProxy.
- * @out_message: (out): Return location for return parameter or %NULL to ignore.
- * @cancellable: (allow-none): A #GCancellable or %NULL.
- * @error: Return location for error or %NULL.
- *
- * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-EventLog.getMessage">getMessage()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
- *
- * See event_log_call_get_message() for the asynchronous version of this method.
- *
- * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
- */
-gboolean
-event_log_call_get_message_sync (
- EventLog *proxy,
- GVariant **out_message,
- GCancellable *cancellable,
- GError **error)
-{
- GVariant *_ret;
- _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
- "getMessage",
- g_variant_new ("()"),
- G_DBUS_CALL_FLAGS_NONE,
- -1,
- cancellable,
- error);
- if (_ret == NULL)
- goto _out;
- g_variant_get (_ret,
- "(@a{ss})",
- out_message);
- g_variant_unref (_ret);
-_out:
- return _ret != NULL;
-}
-
-/**
- * event_log_complete_get_message:
- * @object: A #EventLog.
- * @invocation: (transfer full): A #GDBusMethodInvocation.
- * @message: Parameter to return.
- *
- * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-EventLog.getMessage">getMessage()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
- *
- * This method will free @invocation, you cannot use it afterwards.
- */
-void
-event_log_complete_get_message (
- EventLog *object,
- GDBusMethodInvocation *invocation,
- GVariant *message)
-{
- g_dbus_method_invocation_return_value (invocation,
- g_variant_new ("(@a{ss})",
- message));
+ g_signal_emit_by_name (object, "event-log", arg_e_type, arg_message);
}
/* ------------------------------------------------------------------------ */
@@ -17960,45 +17866,6 @@
GValue *value,
GParamSpec *pspec G_GNUC_UNUSED)
{
- const _ExtendedGDBusPropertyInfo *info;
- GVariant *variant;
- g_assert (prop_id != 0 && prop_id - 1 < 1);
- info = _event_log_property_info_pointers[prop_id - 1];
- variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (object), info->parent_struct.name);
- if (info->use_gvariant)
- {
- g_value_set_variant (value, variant);
- }
- else
- {
- if (variant != NULL)
- g_dbus_gvariant_to_gvalue (variant, value);
- }
- if (variant != NULL)
- g_variant_unref (variant);
-}
-
-static void
-event_log_proxy_set_property_cb (GDBusProxy *proxy,
- GAsyncResult *res,
- gpointer user_data)
-{
- const _ExtendedGDBusPropertyInfo *info = user_data;
- GError *error;
- GVariant *_ret;
- error = NULL;
- _ret = g_dbus_proxy_call_finish (proxy, res, &error);
- if (!_ret)
- {
- g_warning ("Error setting property '%s' on interface org.openbmc.EventLog: %s (%s, %d)",
- info->parent_struct.name,
- error->message, g_quark_to_string (error->domain), error->code);
- g_error_free (error);
- }
- else
- {
- g_variant_unref (_ret);
- }
}
static void
@@ -18007,18 +17874,6 @@
const GValue *value,
GParamSpec *pspec G_GNUC_UNUSED)
{
- const _ExtendedGDBusPropertyInfo *info;
- GVariant *variant;
- g_assert (prop_id != 0 && prop_id - 1 < 1);
- info = _event_log_property_info_pointers[prop_id - 1];
- variant = g_dbus_gvalue_to_gvariant (value, G_VARIANT_TYPE (info->parent_struct.signature));
- g_dbus_proxy_call (G_DBUS_PROXY (object),
- "org.freedesktop.DBus.Properties.Set",
- g_variant_new ("(ssv)", "org.openbmc.EventLog", info->parent_struct.name, variant),
- G_DBUS_CALL_FLAGS_NONE,
- -1,
- NULL, (GAsyncReadyCallback) event_log_proxy_set_property_cb, (GDBusPropertyInfo *) &info->parent_struct);
- g_variant_unref (variant);
}
static void
@@ -18091,19 +17946,6 @@
}
}
-static GVariant *
-event_log_proxy_get_message (EventLog *object)
-{
- EventLogProxy *proxy = EVENT_LOG_PROXY (object);
- GVariant *variant;
- GVariant *value = NULL;
- variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "message");
- value = variant;
- if (variant != NULL)
- g_variant_unref (variant);
- return value;
-}
-
static void
event_log_proxy_init (EventLogProxy *proxy)
{
@@ -18131,8 +17973,6 @@
proxy_class->g_signal = event_log_proxy_g_signal;
proxy_class->g_properties_changed = event_log_proxy_g_properties_changed;
- event_log_override_properties (gobject_class, 1);
-
#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
g_type_class_add_private (klass, sizeof (EventLogProxyPrivate));
#endif
@@ -18141,7 +17981,6 @@
static void
event_log_proxy_iface_init (EventLogIface *iface)
{
- iface->get_message = event_log_proxy_get_message;
}
/**
@@ -18531,31 +18370,16 @@
return g_variant_builder_end (&builder);
}
-static gboolean _event_log_emit_changed (gpointer user_data);
-
static void
event_log_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton)
{
- EventLogSkeleton *skeleton = EVENT_LOG_SKELETON (_skeleton);
- gboolean emit_changed = FALSE;
-
- g_mutex_lock (&skeleton->priv->lock);
- if (skeleton->priv->changed_properties_idle_source != NULL)
- {
- g_source_destroy (skeleton->priv->changed_properties_idle_source);
- skeleton->priv->changed_properties_idle_source = NULL;
- emit_changed = TRUE;
- }
- g_mutex_unlock (&skeleton->priv->lock);
-
- if (emit_changed)
- _event_log_emit_changed (skeleton);
}
static void
_event_log_on_signal_event_log (
EventLog *object,
- GVariant *arg_message)
+ guchar arg_e_type,
+ const gchar *arg_message)
{
EventLogSkeleton *skeleton = EVENT_LOG_SKELETON (object);
@@ -18563,7 +18387,8 @@
GVariant *signal_variant;
connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));
- signal_variant = g_variant_ref_sink (g_variant_new ("(@a{ss})",
+ signal_variant = g_variant_ref_sink (g_variant_new ("(ys)",
+ arg_e_type,
arg_message));
for (l = connections; l != NULL; l = l->next)
{
@@ -18591,10 +18416,6 @@
event_log_skeleton_finalize (GObject *object)
{
EventLogSkeleton *skeleton = EVENT_LOG_SKELETON (object);
- guint n;
- for (n = 0; n < 1; n++)
- g_value_unset (&skeleton->priv->properties[n]);
- g_free (skeleton->priv->properties);
g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);
if (skeleton->priv->changed_properties_idle_source != NULL)
g_source_destroy (skeleton->priv->changed_properties_idle_source);
@@ -18604,144 +18425,6 @@
}
static void
-event_log_skeleton_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec G_GNUC_UNUSED)
-{
- EventLogSkeleton *skeleton = EVENT_LOG_SKELETON (object);
- g_assert (prop_id != 0 && prop_id - 1 < 1);
- g_mutex_lock (&skeleton->priv->lock);
- g_value_copy (&skeleton->priv->properties[prop_id - 1], value);
- g_mutex_unlock (&skeleton->priv->lock);
-}
-
-static gboolean
-_event_log_emit_changed (gpointer user_data)
-{
- EventLogSkeleton *skeleton = EVENT_LOG_SKELETON (user_data);
- GList *l;
- GVariantBuilder builder;
- GVariantBuilder invalidated_builder;
- guint num_changes;
-
- g_mutex_lock (&skeleton->priv->lock);
- g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
- g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as"));
- for (l = skeleton->priv->changed_properties, num_changes = 0; l != NULL; l = l->next)
- {
- ChangedProperty *cp = l->data;
- GVariant *variant;
- const GValue *cur_value;
-
- cur_value = &skeleton->priv->properties[cp->prop_id - 1];
- if (!_g_value_equal (cur_value, &cp->orig_value))
- {
- variant = g_dbus_gvalue_to_gvariant (cur_value, G_VARIANT_TYPE (cp->info->parent_struct.signature));
- g_variant_builder_add (&builder, "{sv}", cp->info->parent_struct.name, variant);
- g_variant_unref (variant);
- num_changes++;
- }
- }
- if (num_changes > 0)
- {
- GList *connections, *ll;
- GVariant *signal_variant;
- signal_variant = g_variant_ref_sink (g_variant_new ("(sa{sv}as)", "org.openbmc.EventLog",
- &builder, &invalidated_builder));
- connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));
- for (ll = connections; ll != NULL; ll = ll->next)
- {
- GDBusConnection *connection = ll->data;
-
- g_dbus_connection_emit_signal (connection,
- NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)),
- "org.freedesktop.DBus.Properties",
- "PropertiesChanged",
- signal_variant,
- NULL);
- }
- g_variant_unref (signal_variant);
- g_list_free_full (connections, g_object_unref);
- }
- else
- {
- g_variant_builder_clear (&builder);
- g_variant_builder_clear (&invalidated_builder);
- }
- g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);
- skeleton->priv->changed_properties = NULL;
- skeleton->priv->changed_properties_idle_source = NULL;
- g_mutex_unlock (&skeleton->priv->lock);
- return FALSE;
-}
-
-static void
-_event_log_schedule_emit_changed (EventLogSkeleton *skeleton, const _ExtendedGDBusPropertyInfo *info, guint prop_id, const GValue *orig_value)
-{
- ChangedProperty *cp;
- GList *l;
- cp = NULL;
- for (l = skeleton->priv->changed_properties; l != NULL; l = l->next)
- {
- ChangedProperty *i_cp = l->data;
- if (i_cp->info == info)
- {
- cp = i_cp;
- break;
- }
- }
- if (cp == NULL)
- {
- cp = g_new0 (ChangedProperty, 1);
- cp->prop_id = prop_id;
- cp->info = info;
- skeleton->priv->changed_properties = g_list_prepend (skeleton->priv->changed_properties, cp);
- g_value_init (&cp->orig_value, G_VALUE_TYPE (orig_value));
- g_value_copy (orig_value, &cp->orig_value);
- }
-}
-
-static void
-event_log_skeleton_notify (GObject *object,
- GParamSpec *pspec G_GNUC_UNUSED)
-{
- EventLogSkeleton *skeleton = EVENT_LOG_SKELETON (object);
- g_mutex_lock (&skeleton->priv->lock);
- if (skeleton->priv->changed_properties != NULL &&
- skeleton->priv->changed_properties_idle_source == NULL)
- {
- skeleton->priv->changed_properties_idle_source = g_idle_source_new ();
- g_source_set_priority (skeleton->priv->changed_properties_idle_source, G_PRIORITY_DEFAULT);
- g_source_set_callback (skeleton->priv->changed_properties_idle_source, _event_log_emit_changed, g_object_ref (skeleton), (GDestroyNotify) g_object_unref);
- g_source_attach (skeleton->priv->changed_properties_idle_source, skeleton->priv->context);
- g_source_unref (skeleton->priv->changed_properties_idle_source);
- }
- g_mutex_unlock (&skeleton->priv->lock);
-}
-
-static void
-event_log_skeleton_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EventLogSkeleton *skeleton = EVENT_LOG_SKELETON (object);
- g_assert (prop_id != 0 && prop_id - 1 < 1);
- g_mutex_lock (&skeleton->priv->lock);
- g_object_freeze_notify (object);
- if (!_g_value_equal (value, &skeleton->priv->properties[prop_id - 1]))
- {
- if (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)) != NULL)
- _event_log_schedule_emit_changed (skeleton, _event_log_property_info_pointers[prop_id - 1], prop_id, &skeleton->priv->properties[prop_id - 1]);
- g_value_copy (value, &skeleton->priv->properties[prop_id - 1]);
- g_object_notify_by_pspec (object, pspec);
- }
- g_mutex_unlock (&skeleton->priv->lock);
- g_object_thaw_notify (object);
-}
-
-static void
event_log_skeleton_init (EventLogSkeleton *skeleton)
{
#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
@@ -18752,19 +18435,6 @@
g_mutex_init (&skeleton->priv->lock);
skeleton->priv->context = g_main_context_ref_thread_default ();
- skeleton->priv->properties = g_new0 (GValue, 1);
- g_value_init (&skeleton->priv->properties[0], G_TYPE_VARIANT);
-}
-
-static GVariant *
-event_log_skeleton_get_message (EventLog *object)
-{
- EventLogSkeleton *skeleton = EVENT_LOG_SKELETON (object);
- GVariant *value;
- g_mutex_lock (&skeleton->priv->lock);
- value = g_value_get_variant (&(skeleton->priv->properties[0]));
- g_mutex_unlock (&skeleton->priv->lock);
- return value;
}
static void
@@ -18775,12 +18445,6 @@
gobject_class = G_OBJECT_CLASS (klass);
gobject_class->finalize = event_log_skeleton_finalize;
- gobject_class->get_property = event_log_skeleton_get_property;
- gobject_class->set_property = event_log_skeleton_set_property;
- gobject_class->notify = event_log_skeleton_notify;
-
-
- event_log_override_properties (gobject_class, 1);
skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass);
skeleton_class->get_info = event_log_skeleton_dbus_interface_get_info;
@@ -18797,7 +18461,6 @@
event_log_skeleton_iface_init (EventLogIface *iface)
{
iface->event_log = _event_log_on_signal_event_log;
- iface->get_message = event_log_skeleton_get_message;
}
/**
diff --git a/interfaces/openbmc_intf.h b/interfaces/openbmc_intf.h
index b637e51..e7cbdec 100644
--- a/interfaces/openbmc_intf.h
+++ b/interfaces/openbmc_intf.h
@@ -493,6 +493,9 @@
GVariant *arg_value,
const gchar *arg_units);
+ void (*error) (
+ SensorValue *object);
+
void (*heartbeat) (
SensorValue *object,
const gchar *arg_bus_name);
@@ -527,6 +530,9 @@
GVariant *arg_value,
const gchar *arg_units);
+void sensor_value_emit_error (
+ SensorValue *object);
+
void sensor_value_emit_heartbeat (
SensorValue *object,
const gchar *arg_bus_name);
@@ -1915,6 +1921,8 @@
gint (*get_pgood) (ControlPower *object);
+ gint (*get_pgood_timeout) (ControlPower *object);
+
gint (*get_state) (ControlPower *object);
void (*power_good) (
@@ -1998,6 +2006,9 @@
gint control_power_get_state (ControlPower *object);
void control_power_set_state (ControlPower *object, gint value);
+gint control_power_get_pgood_timeout (ControlPower *object);
+void control_power_set_pgood_timeout (ControlPower *object, gint value);
+
/* ---- */
@@ -2332,17 +2343,10 @@
{
GTypeInterface parent_iface;
-
-
- gboolean (*handle_get_message) (
- EventLog *object,
- GDBusMethodInvocation *invocation);
-
- GVariant * (*get_message) (EventLog *object);
-
void (*event_log) (
EventLog *object,
- GVariant *arg_message);
+ guchar arg_e_type,
+ const gchar *arg_message);
};
@@ -2352,48 +2356,14 @@
guint event_log_override_properties (GObjectClass *klass, guint property_id_begin);
-/* D-Bus method call completion functions: */
-void event_log_complete_get_message (
- EventLog *object,
- GDBusMethodInvocation *invocation,
- GVariant *message);
-
-
-
/* D-Bus signal emissions functions: */
void event_log_emit_event_log (
EventLog *object,
- GVariant *arg_message);
+ guchar arg_e_type,
+ const gchar *arg_message);
-/* D-Bus method calls: */
-void event_log_call_get_message (
- EventLog *proxy,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
-
-gboolean event_log_call_get_message_finish (
- EventLog *proxy,
- GVariant **out_message,
- GAsyncResult *res,
- GError **error);
-
-gboolean event_log_call_get_message_sync (
- EventLog *proxy,
- GVariant **out_message,
- GCancellable *cancellable,
- GError **error);
-
-
-
-/* D-Bus property accessors: */
-GVariant *event_log_get_message (EventLog *object);
-GVariant *event_log_dup_message (EventLog *object);
-void event_log_set_message (EventLog *object, GVariant *value);
-
-
/* ---- */
#define TYPE_EVENT_LOG_PROXY (event_log_proxy_get_type ())
diff --git a/objects/board_vpd_obj.c b/objects/board_vpd_obj.c
index 11b2ab6..42c8bfe 100644
--- a/objects/board_vpd_obj.c
+++ b/objects/board_vpd_obj.c
@@ -45,6 +45,10 @@
//g_main_loop_run (loop);
//g_bus_unown_name (id);
+ //g_variant_unref(result);
+ //g_variant_unref(parm);
+ g_object_unref(p);
+ g_object_unref(c);
g_main_loop_unref (loop);
return 0;
}
diff --git a/objects/power_control_obj.c b/objects/power_control_obj.c
index 0190fdf..3395502 100644
--- a/objects/power_control_obj.c
+++ b/objects/power_control_obj.c
@@ -9,11 +9,13 @@
#include "interfaces/openbmc_intf.h"
#include "openbmc.h"
#include "gpio.h"
+#include "event_log.h"
/* ---------------------------------------------------------------------------------------------------- */
static const gchar* dbus_object_path = "/org/openbmc/control";
static const gchar* dbus_name = "org.openbmc.control.Power";
+//This object will use these GPIOs
GPIO power_pin = (GPIO){ "POWER_PIN" };
GPIO pgood = (GPIO){ "PGOOD" };
@@ -21,6 +23,7 @@
guint tmp_pgood = 0;
guint last_pgood = 0;
+guint pgood_timeout_count = 0;
static gboolean poll_pgood(gpointer user_data)
{
@@ -28,7 +31,17 @@
Control* control = object_get_control((Object*)user_data);
EventLog* event_log = object_get_event_log((Object*)user_data);
control_emit_heartbeat(control,dbus_name);
+ const gchar* obj_path = g_dbus_object_get_object_path((GDBusObject*)user_data);
+ guint pgood_timeout = control_power_get_pgood_timeout(control_power)/
+ control_get_poll_interval(control);
+
+ if (pgood_timeout_count > pgood_timeout)
+ {
+ event_log_emit_event_log(event_log, FATAL, "Pgood poll timeout");
+ control_power_set_pgood_timeout(control_power,0);
+ //return FALSE;
+ }
//For simulation, remove
if (tmp_pgood!=last_pgood) {
if (tmp_pgood == 1) {
@@ -39,21 +52,38 @@
}
last_pgood = tmp_pgood;
- uint8_t gpio = gpio_read(&pgood);
- //if changed, set property and emit signal
- if (gpio != control_power_get_pgood(control_power))
+ uint8_t gpio;
+ int rc = gpio_read(&pgood,&gpio);
+ if (rc == GPIO_OK)
{
- control_power_set_pgood(control_power,gpio);
- if (gpio==0)
- {
- control_power_emit_power_lost(control_power);
- control_emit_goto_system_state(control,"POWERED_OFF");
- }
- else
- {
- control_power_emit_power_good(control_power);
- control_emit_goto_system_state(control,"POWERED_ON");
- }
+ //if changed, set property and emit signal
+ if (gpio != control_power_get_pgood(control_power))
+ {
+ control_power_set_pgood(control_power,gpio);
+ if (gpio==0)
+ {
+ control_power_emit_power_lost(control_power);
+ control_emit_goto_system_state(control,"POWERED_OFF");
+ }
+ else
+ {
+ control_power_emit_power_good(control_power);
+ control_emit_goto_system_state(control,"POWERED_ON");
+ }
+ }
+ } else {
+ event_log_emit_event_log(event_log, FATAL, "GPIO read error");
+ //return FALSE;
+ }
+ //pgood is not at desired state yet
+ if (gpio != control_power_get_state(control_power) &&
+ control_power_get_pgood_timeout(control_power) != 0)
+ {
+ pgood_timeout_count++;
+ }
+ else
+ {
+ pgood_timeout_count = 0;
}
return TRUE;
}
@@ -67,6 +97,8 @@
gpointer user_data)
{
Control* control = object_get_control((Object*)user_data);
+ EventLog* event_log = object_get_event_log((Object*)user_data);
+ const gchar* obj_path = g_dbus_object_get_object_path((GDBusObject*)user_data);
if (state > 1)
{
g_dbus_method_invocation_return_dbus_error (invocation,
@@ -85,17 +117,23 @@
g_print("Set power state: %d\n",state);
//temporary until real hardware works
tmp_pgood = state;
- gpio_open(&power_pin);
- gpio_write(&power_pin,!state);
- gpio_close(&power_pin);
- control_power_set_state(pwr,state);
- if (state == 1)
+ int error = 0;
+ do {
+ error = gpio_open(&power_pin);
+ if (error != GPIO_OK) { break; }
+ error = gpio_write(&power_pin,!state);
+ if (error != GPIO_OK) { break; }
+ gpio_close(&power_pin);
+ control_power_set_state(pwr,state);
+ if (state == 1) {
+ control_emit_goto_system_state(control,"POWERING_ON");
+ } else {
+ control_emit_goto_system_state(control,"POWERING_OFF");
+ }
+ } while(0);
+ if (error != GPIO_OK)
{
- control_emit_goto_system_state(control,"POWERING_ON");
- }
- else
- {
- control_emit_goto_system_state(control,"POWERING_OFF");
+ event_log_emit_event_log(event_log, FATAL, "GPIO setup error");
}
}
return TRUE;
@@ -183,9 +221,15 @@
g_dbus_object_manager_server_set_connection (manager, connection);
// get gpio device paths
- gpio_init(connection,&power_pin);
- gpio_init(connection,&pgood);
- gpio_open(&pgood);
+ do {
+ int rc = GPIO_OK;
+ rc = gpio_init(connection,&power_pin);
+ if (rc != GPIO_OK) { break; }
+ rc = gpio_init(connection,&pgood);
+ if (rc != GPIO_OK) { break; }
+ rc = gpio_open(&pgood);
+ if (rc != GPIO_OK) { break; }
+ } while(0);
}
static void
diff --git a/objects/sensor_temperature_ambient_obj.c b/objects/sensor_temperature_ambient_obj.c
index fab2f1a..a70fb62 100644
--- a/objects/sensor_temperature_ambient_obj.c
+++ b/objects/sensor_temperature_ambient_obj.c
@@ -27,6 +27,8 @@
// sensor_i2c_get_dev_path(i2c),sensor_i2c_get_address(i2c),value);
value = value+1;
+ // Do this in case of an error
+ //sensor_value_emit_error(sensor);
if (heartbeat > 4000)
{
diff --git a/xml/openbmc_intf.xml b/xml/openbmc_intf.xml
index 8993967..4a26f12 100644
--- a/xml/openbmc_intf.xml
+++ b/xml/openbmc_intf.xml
@@ -45,6 +45,7 @@
<arg name="value" type="v"/>
<arg name="units" type="s"/>
</signal>
+ <signal name="Error"/>
<signal name="Heartbeat">
<arg name="bus_name" type="s"/>
</signal>
@@ -111,6 +112,7 @@
</signal>
<property name="pgood" type="i" access="read"/>
<property name="state" type="i" access="read"/>
+ <property name="pgood_timeout" type="i" access="readwrite"/>
</interface>
<interface name="org.openbmc.Watchdog">
<method name="start"/>
@@ -121,12 +123,9 @@
<signal name="WatchdogError"/>
</interface>
<interface name="org.openbmc.EventLog">
- <method name="getMessage">
- <arg name="message" type="a{ss}" direction="out"/>
- </method>
- <property name="message" type="a{ss}" access="read"/>
<signal name="EventLog">
- <arg name="message" type="a{ss}"/>
+ <arg name="e_type" type="y"/>
+ <arg name="message" type="s"/>
</signal>
</interface>
<interface name="org.openbmc.Flash">