1 /* 2 * Generated by gdbus-codegen 2.42.2. DO NOT EDIT. 3 * 4 * The license of this code is the same as for the source it was derived from. 5 */ 6 7 #ifdef HAVE_CONFIG_H 8 # include "config.h" 9 #endif 10 11 #include "openbmc_intf.h" 12 13 #include <string.h> 14 #ifdef G_OS_UNIX 15 # include <gio/gunixfdlist.h> 16 #endif 17 18 typedef struct 19 { 20 GDBusArgInfo parent_struct; 21 gboolean use_gvariant; 22 } _ExtendedGDBusArgInfo; 23 24 typedef struct 25 { 26 GDBusMethodInfo parent_struct; 27 const gchar *signal_name; 28 gboolean pass_fdlist; 29 } _ExtendedGDBusMethodInfo; 30 31 typedef struct 32 { 33 GDBusSignalInfo parent_struct; 34 const gchar *signal_name; 35 } _ExtendedGDBusSignalInfo; 36 37 typedef struct 38 { 39 GDBusPropertyInfo parent_struct; 40 const gchar *hyphen_name; 41 gboolean use_gvariant; 42 } _ExtendedGDBusPropertyInfo; 43 44 typedef struct 45 { 46 GDBusInterfaceInfo parent_struct; 47 const gchar *hyphen_name; 48 } _ExtendedGDBusInterfaceInfo; 49 50 typedef struct 51 { 52 const _ExtendedGDBusPropertyInfo *info; 53 guint prop_id; 54 GValue orig_value; /* the value before the change */ 55 } ChangedProperty; 56 57 static void 58 _changed_property_free (ChangedProperty *data) 59 { 60 g_value_unset (&data->orig_value); 61 g_free (data); 62 } 63 64 static gboolean 65 _g_strv_equal0 (gchar **a, gchar **b) 66 { 67 gboolean ret = FALSE; 68 guint n; 69 if (a == NULL && b == NULL) 70 { 71 ret = TRUE; 72 goto out; 73 } 74 if (a == NULL || b == NULL) 75 goto out; 76 if (g_strv_length (a) != g_strv_length (b)) 77 goto out; 78 for (n = 0; a[n] != NULL; n++) 79 if (g_strcmp0 (a[n], b[n]) != 0) 80 goto out; 81 ret = TRUE; 82 out: 83 return ret; 84 } 85 86 static gboolean 87 _g_variant_equal0 (GVariant *a, GVariant *b) 88 { 89 gboolean ret = FALSE; 90 if (a == NULL && b == NULL) 91 { 92 ret = TRUE; 93 goto out; 94 } 95 if (a == NULL || b == NULL) 96 goto out; 97 ret = g_variant_equal (a, b); 98 out: 99 return ret; 100 } 101 102 G_GNUC_UNUSED static gboolean 103 _g_value_equal (const GValue *a, const GValue *b) 104 { 105 gboolean ret = FALSE; 106 g_assert (G_VALUE_TYPE (a) == G_VALUE_TYPE (b)); 107 switch (G_VALUE_TYPE (a)) 108 { 109 case G_TYPE_BOOLEAN: 110 ret = (g_value_get_boolean (a) == g_value_get_boolean (b)); 111 break; 112 case G_TYPE_UCHAR: 113 ret = (g_value_get_uchar (a) == g_value_get_uchar (b)); 114 break; 115 case G_TYPE_INT: 116 ret = (g_value_get_int (a) == g_value_get_int (b)); 117 break; 118 case G_TYPE_UINT: 119 ret = (g_value_get_uint (a) == g_value_get_uint (b)); 120 break; 121 case G_TYPE_INT64: 122 ret = (g_value_get_int64 (a) == g_value_get_int64 (b)); 123 break; 124 case G_TYPE_UINT64: 125 ret = (g_value_get_uint64 (a) == g_value_get_uint64 (b)); 126 break; 127 case G_TYPE_DOUBLE: 128 { 129 /* Avoid -Wfloat-equal warnings by doing a direct bit compare */ 130 gdouble da = g_value_get_double (a); 131 gdouble db = g_value_get_double (b); 132 ret = memcmp (&da, &db, sizeof (gdouble)) == 0; 133 } 134 break; 135 case G_TYPE_STRING: 136 ret = (g_strcmp0 (g_value_get_string (a), g_value_get_string (b)) == 0); 137 break; 138 case G_TYPE_VARIANT: 139 ret = _g_variant_equal0 (g_value_get_variant (a), g_value_get_variant (b)); 140 break; 141 default: 142 if (G_VALUE_TYPE (a) == G_TYPE_STRV) 143 ret = _g_strv_equal0 (g_value_get_boxed (a), g_value_get_boxed (b)); 144 else 145 g_critical ("_g_value_equal() does not handle type %s", g_type_name (G_VALUE_TYPE (a))); 146 break; 147 } 148 return ret; 149 } 150 151 /* ------------------------------------------------------------------------ 152 * Code for interface org.openbmc.Hwmon 153 * ------------------------------------------------------------------------ 154 */ 155 156 /** 157 * SECTION:Hwmon 158 * @title: Hwmon 159 * @short_description: Generated C code for the org.openbmc.Hwmon D-Bus interface 160 * 161 * This section contains code for working with the <link linkend="gdbus-interface-org-openbmc-Hwmon.top_of_page">org.openbmc.Hwmon</link> D-Bus interface in C. 162 */ 163 164 /* ---- Introspection data for org.openbmc.Hwmon ---- */ 165 166 static const _ExtendedGDBusPropertyInfo _hwmon_property_info_poll_interval = 167 { 168 { 169 -1, 170 (gchar *) "poll_interval", 171 (gchar *) "i", 172 G_DBUS_PROPERTY_INFO_FLAGS_READABLE, 173 NULL 174 }, 175 "poll-interval", 176 FALSE 177 }; 178 179 static const _ExtendedGDBusPropertyInfo _hwmon_property_info_sysfs_path = 180 { 181 { 182 -1, 183 (gchar *) "sysfs_path", 184 (gchar *) "s", 185 G_DBUS_PROPERTY_INFO_FLAGS_READABLE, 186 NULL 187 }, 188 "sysfs-path", 189 FALSE 190 }; 191 192 static const _ExtendedGDBusPropertyInfo _hwmon_property_info_scale = 193 { 194 { 195 -1, 196 (gchar *) "scale", 197 (gchar *) "i", 198 G_DBUS_PROPERTY_INFO_FLAGS_READABLE, 199 NULL 200 }, 201 "scale", 202 FALSE 203 }; 204 205 static const _ExtendedGDBusPropertyInfo * const _hwmon_property_info_pointers[] = 206 { 207 &_hwmon_property_info_poll_interval, 208 &_hwmon_property_info_sysfs_path, 209 &_hwmon_property_info_scale, 210 NULL 211 }; 212 213 static const _ExtendedGDBusInterfaceInfo _hwmon_interface_info = 214 { 215 { 216 -1, 217 (gchar *) "org.openbmc.Hwmon", 218 NULL, 219 NULL, 220 (GDBusPropertyInfo **) &_hwmon_property_info_pointers, 221 NULL 222 }, 223 "hwmon", 224 }; 225 226 227 /** 228 * hwmon_interface_info: 229 * 230 * Gets a machine-readable description of the <link linkend="gdbus-interface-org-openbmc-Hwmon.top_of_page">org.openbmc.Hwmon</link> D-Bus interface. 231 * 232 * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free. 233 */ 234 GDBusInterfaceInfo * 235 hwmon_interface_info (void) 236 { 237 return (GDBusInterfaceInfo *) &_hwmon_interface_info.parent_struct; 238 } 239 240 /** 241 * hwmon_override_properties: 242 * @klass: The class structure for a #GObject<!-- -->-derived class. 243 * @property_id_begin: The property id to assign to the first overridden property. 244 * 245 * Overrides all #GObject properties in the #Hwmon interface for a concrete class. 246 * The properties are overridden in the order they are defined. 247 * 248 * Returns: The last property id. 249 */ 250 guint 251 hwmon_override_properties (GObjectClass *klass, guint property_id_begin) 252 { 253 g_object_class_override_property (klass, property_id_begin++, "poll-interval"); 254 g_object_class_override_property (klass, property_id_begin++, "sysfs-path"); 255 g_object_class_override_property (klass, property_id_begin++, "scale"); 256 return property_id_begin - 1; 257 } 258 259 260 261 /** 262 * Hwmon: 263 * 264 * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Hwmon.top_of_page">org.openbmc.Hwmon</link>. 265 */ 266 267 /** 268 * HwmonIface: 269 * @parent_iface: The parent interface. 270 * @get_poll_interval: Getter for the #Hwmon:poll-interval property. 271 * @get_scale: Getter for the #Hwmon:scale property. 272 * @get_sysfs_path: Getter for the #Hwmon:sysfs-path property. 273 * 274 * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Hwmon.top_of_page">org.openbmc.Hwmon</link>. 275 */ 276 277 typedef HwmonIface HwmonInterface; 278 G_DEFINE_INTERFACE (Hwmon, hwmon, G_TYPE_OBJECT); 279 280 static void 281 hwmon_default_init (HwmonIface *iface) 282 { 283 /* GObject properties for D-Bus properties: */ 284 /** 285 * Hwmon:poll-interval: 286 * 287 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-Hwmon.poll_interval">"poll_interval"</link>. 288 * 289 * 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. 290 */ 291 g_object_interface_install_property (iface, 292 g_param_spec_int ("poll-interval", "poll_interval", "poll_interval", G_MININT32, G_MAXINT32, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 293 /** 294 * Hwmon:sysfs-path: 295 * 296 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-Hwmon.sysfs_path">"sysfs_path"</link>. 297 * 298 * 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. 299 */ 300 g_object_interface_install_property (iface, 301 g_param_spec_string ("sysfs-path", "sysfs_path", "sysfs_path", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 302 /** 303 * Hwmon:scale: 304 * 305 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-Hwmon.scale">"scale"</link>. 306 * 307 * 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. 308 */ 309 g_object_interface_install_property (iface, 310 g_param_spec_int ("scale", "scale", "scale", G_MININT32, G_MAXINT32, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 311 } 312 313 /** 314 * hwmon_get_poll_interval: (skip) 315 * @object: A #Hwmon. 316 * 317 * Gets the value of the <link linkend="gdbus-property-org-openbmc-Hwmon.poll_interval">"poll_interval"</link> D-Bus property. 318 * 319 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 320 * 321 * Returns: The property value. 322 */ 323 gint 324 hwmon_get_poll_interval (Hwmon *object) 325 { 326 return HWMON_GET_IFACE (object)->get_poll_interval (object); 327 } 328 329 /** 330 * hwmon_set_poll_interval: (skip) 331 * @object: A #Hwmon. 332 * @value: The value to set. 333 * 334 * Sets the <link linkend="gdbus-property-org-openbmc-Hwmon.poll_interval">"poll_interval"</link> D-Bus property to @value. 335 * 336 * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side. 337 */ 338 void 339 hwmon_set_poll_interval (Hwmon *object, gint value) 340 { 341 g_object_set (G_OBJECT (object), "poll-interval", value, NULL); 342 } 343 344 /** 345 * hwmon_get_sysfs_path: (skip) 346 * @object: A #Hwmon. 347 * 348 * Gets the value of the <link linkend="gdbus-property-org-openbmc-Hwmon.sysfs_path">"sysfs_path"</link> D-Bus property. 349 * 350 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 351 * 352 * <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 hwmon_dup_sysfs_path() if on another thread.</warning> 353 * 354 * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object. 355 */ 356 const gchar * 357 hwmon_get_sysfs_path (Hwmon *object) 358 { 359 return HWMON_GET_IFACE (object)->get_sysfs_path (object); 360 } 361 362 /** 363 * hwmon_dup_sysfs_path: (skip) 364 * @object: A #Hwmon. 365 * 366 * Gets a copy of the <link linkend="gdbus-property-org-openbmc-Hwmon.sysfs_path">"sysfs_path"</link> D-Bus property. 367 * 368 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 369 * 370 * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value should be freed with g_free(). 371 */ 372 gchar * 373 hwmon_dup_sysfs_path (Hwmon *object) 374 { 375 gchar *value; 376 g_object_get (G_OBJECT (object), "sysfs-path", &value, NULL); 377 return value; 378 } 379 380 /** 381 * hwmon_set_sysfs_path: (skip) 382 * @object: A #Hwmon. 383 * @value: The value to set. 384 * 385 * Sets the <link linkend="gdbus-property-org-openbmc-Hwmon.sysfs_path">"sysfs_path"</link> D-Bus property to @value. 386 * 387 * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side. 388 */ 389 void 390 hwmon_set_sysfs_path (Hwmon *object, const gchar *value) 391 { 392 g_object_set (G_OBJECT (object), "sysfs-path", value, NULL); 393 } 394 395 /** 396 * hwmon_get_scale: (skip) 397 * @object: A #Hwmon. 398 * 399 * Gets the value of the <link linkend="gdbus-property-org-openbmc-Hwmon.scale">"scale"</link> D-Bus property. 400 * 401 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 402 * 403 * Returns: The property value. 404 */ 405 gint 406 hwmon_get_scale (Hwmon *object) 407 { 408 return HWMON_GET_IFACE (object)->get_scale (object); 409 } 410 411 /** 412 * hwmon_set_scale: (skip) 413 * @object: A #Hwmon. 414 * @value: The value to set. 415 * 416 * Sets the <link linkend="gdbus-property-org-openbmc-Hwmon.scale">"scale"</link> D-Bus property to @value. 417 * 418 * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side. 419 */ 420 void 421 hwmon_set_scale (Hwmon *object, gint value) 422 { 423 g_object_set (G_OBJECT (object), "scale", value, NULL); 424 } 425 426 /* ------------------------------------------------------------------------ */ 427 428 /** 429 * HwmonProxy: 430 * 431 * The #HwmonProxy structure contains only private data and should only be accessed using the provided API. 432 */ 433 434 /** 435 * HwmonProxyClass: 436 * @parent_class: The parent class. 437 * 438 * Class structure for #HwmonProxy. 439 */ 440 441 struct _HwmonProxyPrivate 442 { 443 GData *qdata; 444 }; 445 446 static void hwmon_proxy_iface_init (HwmonIface *iface); 447 448 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 449 G_DEFINE_TYPE_WITH_CODE (HwmonProxy, hwmon_proxy, G_TYPE_DBUS_PROXY, 450 G_ADD_PRIVATE (HwmonProxy) 451 G_IMPLEMENT_INTERFACE (TYPE_HWMON, hwmon_proxy_iface_init)); 452 453 #else 454 G_DEFINE_TYPE_WITH_CODE (HwmonProxy, hwmon_proxy, G_TYPE_DBUS_PROXY, 455 G_IMPLEMENT_INTERFACE (TYPE_HWMON, hwmon_proxy_iface_init)); 456 457 #endif 458 static void 459 hwmon_proxy_finalize (GObject *object) 460 { 461 HwmonProxy *proxy = HWMON_PROXY (object); 462 g_datalist_clear (&proxy->priv->qdata); 463 G_OBJECT_CLASS (hwmon_proxy_parent_class)->finalize (object); 464 } 465 466 static void 467 hwmon_proxy_get_property (GObject *object, 468 guint prop_id, 469 GValue *value, 470 GParamSpec *pspec G_GNUC_UNUSED) 471 { 472 const _ExtendedGDBusPropertyInfo *info; 473 GVariant *variant; 474 g_assert (prop_id != 0 && prop_id - 1 < 3); 475 info = _hwmon_property_info_pointers[prop_id - 1]; 476 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (object), info->parent_struct.name); 477 if (info->use_gvariant) 478 { 479 g_value_set_variant (value, variant); 480 } 481 else 482 { 483 if (variant != NULL) 484 g_dbus_gvariant_to_gvalue (variant, value); 485 } 486 if (variant != NULL) 487 g_variant_unref (variant); 488 } 489 490 static void 491 hwmon_proxy_set_property_cb (GDBusProxy *proxy, 492 GAsyncResult *res, 493 gpointer user_data) 494 { 495 const _ExtendedGDBusPropertyInfo *info = user_data; 496 GError *error; 497 GVariant *_ret; 498 error = NULL; 499 _ret = g_dbus_proxy_call_finish (proxy, res, &error); 500 if (!_ret) 501 { 502 g_warning ("Error setting property '%s' on interface org.openbmc.Hwmon: %s (%s, %d)", 503 info->parent_struct.name, 504 error->message, g_quark_to_string (error->domain), error->code); 505 g_error_free (error); 506 } 507 else 508 { 509 g_variant_unref (_ret); 510 } 511 } 512 513 static void 514 hwmon_proxy_set_property (GObject *object, 515 guint prop_id, 516 const GValue *value, 517 GParamSpec *pspec G_GNUC_UNUSED) 518 { 519 const _ExtendedGDBusPropertyInfo *info; 520 GVariant *variant; 521 g_assert (prop_id != 0 && prop_id - 1 < 3); 522 info = _hwmon_property_info_pointers[prop_id - 1]; 523 variant = g_dbus_gvalue_to_gvariant (value, G_VARIANT_TYPE (info->parent_struct.signature)); 524 g_dbus_proxy_call (G_DBUS_PROXY (object), 525 "org.freedesktop.DBus.Properties.Set", 526 g_variant_new ("(ssv)", "org.openbmc.Hwmon", info->parent_struct.name, variant), 527 G_DBUS_CALL_FLAGS_NONE, 528 -1, 529 NULL, (GAsyncReadyCallback) hwmon_proxy_set_property_cb, (GDBusPropertyInfo *) &info->parent_struct); 530 g_variant_unref (variant); 531 } 532 533 static void 534 hwmon_proxy_g_signal (GDBusProxy *proxy, 535 const gchar *sender_name G_GNUC_UNUSED, 536 const gchar *signal_name, 537 GVariant *parameters) 538 { 539 _ExtendedGDBusSignalInfo *info; 540 GVariantIter iter; 541 GVariant *child; 542 GValue *paramv; 543 guint num_params; 544 guint n; 545 guint signal_id; 546 info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_hwmon_interface_info.parent_struct, signal_name); 547 if (info == NULL) 548 return; 549 num_params = g_variant_n_children (parameters); 550 paramv = g_new0 (GValue, num_params + 1); 551 g_value_init (¶mv[0], TYPE_HWMON); 552 g_value_set_object (¶mv[0], proxy); 553 g_variant_iter_init (&iter, parameters); 554 n = 1; 555 while ((child = g_variant_iter_next_value (&iter)) != NULL) 556 { 557 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1]; 558 if (arg_info->use_gvariant) 559 { 560 g_value_init (¶mv[n], G_TYPE_VARIANT); 561 g_value_set_variant (¶mv[n], child); 562 n++; 563 } 564 else 565 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 566 g_variant_unref (child); 567 } 568 signal_id = g_signal_lookup (info->signal_name, TYPE_HWMON); 569 g_signal_emitv (paramv, signal_id, 0, NULL); 570 for (n = 0; n < num_params + 1; n++) 571 g_value_unset (¶mv[n]); 572 g_free (paramv); 573 } 574 575 static void 576 hwmon_proxy_g_properties_changed (GDBusProxy *_proxy, 577 GVariant *changed_properties, 578 const gchar *const *invalidated_properties) 579 { 580 HwmonProxy *proxy = HWMON_PROXY (_proxy); 581 guint n; 582 const gchar *key; 583 GVariantIter *iter; 584 _ExtendedGDBusPropertyInfo *info; 585 g_variant_get (changed_properties, "a{sv}", &iter); 586 while (g_variant_iter_next (iter, "{&sv}", &key, NULL)) 587 { 588 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_hwmon_interface_info.parent_struct, key); 589 g_datalist_remove_data (&proxy->priv->qdata, key); 590 if (info != NULL) 591 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 592 } 593 g_variant_iter_free (iter); 594 for (n = 0; invalidated_properties[n] != NULL; n++) 595 { 596 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_hwmon_interface_info.parent_struct, invalidated_properties[n]); 597 g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]); 598 if (info != NULL) 599 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 600 } 601 } 602 603 static gint 604 hwmon_proxy_get_poll_interval (Hwmon *object) 605 { 606 HwmonProxy *proxy = HWMON_PROXY (object); 607 GVariant *variant; 608 gint value = 0; 609 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "poll_interval"); 610 if (variant != NULL) 611 { 612 value = g_variant_get_int32 (variant); 613 g_variant_unref (variant); 614 } 615 return value; 616 } 617 618 static const gchar * 619 hwmon_proxy_get_sysfs_path (Hwmon *object) 620 { 621 HwmonProxy *proxy = HWMON_PROXY (object); 622 GVariant *variant; 623 const gchar *value = NULL; 624 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "sysfs_path"); 625 if (variant != NULL) 626 { 627 value = g_variant_get_string (variant, NULL); 628 g_variant_unref (variant); 629 } 630 return value; 631 } 632 633 static gint 634 hwmon_proxy_get_scale (Hwmon *object) 635 { 636 HwmonProxy *proxy = HWMON_PROXY (object); 637 GVariant *variant; 638 gint value = 0; 639 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "scale"); 640 if (variant != NULL) 641 { 642 value = g_variant_get_int32 (variant); 643 g_variant_unref (variant); 644 } 645 return value; 646 } 647 648 static void 649 hwmon_proxy_init (HwmonProxy *proxy) 650 { 651 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 652 proxy->priv = hwmon_proxy_get_instance_private (proxy); 653 #else 654 proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, TYPE_HWMON_PROXY, HwmonProxyPrivate); 655 #endif 656 657 g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), hwmon_interface_info ()); 658 } 659 660 static void 661 hwmon_proxy_class_init (HwmonProxyClass *klass) 662 { 663 GObjectClass *gobject_class; 664 GDBusProxyClass *proxy_class; 665 666 gobject_class = G_OBJECT_CLASS (klass); 667 gobject_class->finalize = hwmon_proxy_finalize; 668 gobject_class->get_property = hwmon_proxy_get_property; 669 gobject_class->set_property = hwmon_proxy_set_property; 670 671 proxy_class = G_DBUS_PROXY_CLASS (klass); 672 proxy_class->g_signal = hwmon_proxy_g_signal; 673 proxy_class->g_properties_changed = hwmon_proxy_g_properties_changed; 674 675 hwmon_override_properties (gobject_class, 1); 676 677 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 678 g_type_class_add_private (klass, sizeof (HwmonProxyPrivate)); 679 #endif 680 } 681 682 static void 683 hwmon_proxy_iface_init (HwmonIface *iface) 684 { 685 iface->get_poll_interval = hwmon_proxy_get_poll_interval; 686 iface->get_sysfs_path = hwmon_proxy_get_sysfs_path; 687 iface->get_scale = hwmon_proxy_get_scale; 688 } 689 690 /** 691 * hwmon_proxy_new: 692 * @connection: A #GDBusConnection. 693 * @flags: Flags from the #GDBusProxyFlags enumeration. 694 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 695 * @object_path: An object path. 696 * @cancellable: (allow-none): A #GCancellable or %NULL. 697 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 698 * @user_data: User data to pass to @callback. 699 * 700 * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Hwmon.top_of_page">org.openbmc.Hwmon</link>. See g_dbus_proxy_new() for more details. 701 * 702 * 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. 703 * You can then call hwmon_proxy_new_finish() to get the result of the operation. 704 * 705 * See hwmon_proxy_new_sync() for the synchronous, blocking version of this constructor. 706 */ 707 void 708 hwmon_proxy_new ( 709 GDBusConnection *connection, 710 GDBusProxyFlags flags, 711 const gchar *name, 712 const gchar *object_path, 713 GCancellable *cancellable, 714 GAsyncReadyCallback callback, 715 gpointer user_data) 716 { 717 g_async_initable_new_async (TYPE_HWMON_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.Hwmon", NULL); 718 } 719 720 /** 721 * hwmon_proxy_new_finish: 722 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to hwmon_proxy_new(). 723 * @error: Return location for error or %NULL 724 * 725 * Finishes an operation started with hwmon_proxy_new(). 726 * 727 * Returns: (transfer full) (type HwmonProxy): The constructed proxy object or %NULL if @error is set. 728 */ 729 Hwmon * 730 hwmon_proxy_new_finish ( 731 GAsyncResult *res, 732 GError **error) 733 { 734 GObject *ret; 735 GObject *source_object; 736 source_object = g_async_result_get_source_object (res); 737 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 738 g_object_unref (source_object); 739 if (ret != NULL) 740 return HWMON (ret); 741 else 742 return NULL; 743 } 744 745 /** 746 * hwmon_proxy_new_sync: 747 * @connection: A #GDBusConnection. 748 * @flags: Flags from the #GDBusProxyFlags enumeration. 749 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 750 * @object_path: An object path. 751 * @cancellable: (allow-none): A #GCancellable or %NULL. 752 * @error: Return location for error or %NULL 753 * 754 * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Hwmon.top_of_page">org.openbmc.Hwmon</link>. See g_dbus_proxy_new_sync() for more details. 755 * 756 * The calling thread is blocked until a reply is received. 757 * 758 * See hwmon_proxy_new() for the asynchronous version of this constructor. 759 * 760 * Returns: (transfer full) (type HwmonProxy): The constructed proxy object or %NULL if @error is set. 761 */ 762 Hwmon * 763 hwmon_proxy_new_sync ( 764 GDBusConnection *connection, 765 GDBusProxyFlags flags, 766 const gchar *name, 767 const gchar *object_path, 768 GCancellable *cancellable, 769 GError **error) 770 { 771 GInitable *ret; 772 ret = g_initable_new (TYPE_HWMON_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.Hwmon", NULL); 773 if (ret != NULL) 774 return HWMON (ret); 775 else 776 return NULL; 777 } 778 779 780 /** 781 * hwmon_proxy_new_for_bus: 782 * @bus_type: A #GBusType. 783 * @flags: Flags from the #GDBusProxyFlags enumeration. 784 * @name: A bus name (well-known or unique). 785 * @object_path: An object path. 786 * @cancellable: (allow-none): A #GCancellable or %NULL. 787 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 788 * @user_data: User data to pass to @callback. 789 * 790 * Like hwmon_proxy_new() but takes a #GBusType instead of a #GDBusConnection. 791 * 792 * 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. 793 * You can then call hwmon_proxy_new_for_bus_finish() to get the result of the operation. 794 * 795 * See hwmon_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor. 796 */ 797 void 798 hwmon_proxy_new_for_bus ( 799 GBusType bus_type, 800 GDBusProxyFlags flags, 801 const gchar *name, 802 const gchar *object_path, 803 GCancellable *cancellable, 804 GAsyncReadyCallback callback, 805 gpointer user_data) 806 { 807 g_async_initable_new_async (TYPE_HWMON_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.Hwmon", NULL); 808 } 809 810 /** 811 * hwmon_proxy_new_for_bus_finish: 812 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to hwmon_proxy_new_for_bus(). 813 * @error: Return location for error or %NULL 814 * 815 * Finishes an operation started with hwmon_proxy_new_for_bus(). 816 * 817 * Returns: (transfer full) (type HwmonProxy): The constructed proxy object or %NULL if @error is set. 818 */ 819 Hwmon * 820 hwmon_proxy_new_for_bus_finish ( 821 GAsyncResult *res, 822 GError **error) 823 { 824 GObject *ret; 825 GObject *source_object; 826 source_object = g_async_result_get_source_object (res); 827 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 828 g_object_unref (source_object); 829 if (ret != NULL) 830 return HWMON (ret); 831 else 832 return NULL; 833 } 834 835 /** 836 * hwmon_proxy_new_for_bus_sync: 837 * @bus_type: A #GBusType. 838 * @flags: Flags from the #GDBusProxyFlags enumeration. 839 * @name: A bus name (well-known or unique). 840 * @object_path: An object path. 841 * @cancellable: (allow-none): A #GCancellable or %NULL. 842 * @error: Return location for error or %NULL 843 * 844 * Like hwmon_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection. 845 * 846 * The calling thread is blocked until a reply is received. 847 * 848 * See hwmon_proxy_new_for_bus() for the asynchronous version of this constructor. 849 * 850 * Returns: (transfer full) (type HwmonProxy): The constructed proxy object or %NULL if @error is set. 851 */ 852 Hwmon * 853 hwmon_proxy_new_for_bus_sync ( 854 GBusType bus_type, 855 GDBusProxyFlags flags, 856 const gchar *name, 857 const gchar *object_path, 858 GCancellable *cancellable, 859 GError **error) 860 { 861 GInitable *ret; 862 ret = g_initable_new (TYPE_HWMON_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.Hwmon", NULL); 863 if (ret != NULL) 864 return HWMON (ret); 865 else 866 return NULL; 867 } 868 869 870 /* ------------------------------------------------------------------------ */ 871 872 /** 873 * HwmonSkeleton: 874 * 875 * The #HwmonSkeleton structure contains only private data and should only be accessed using the provided API. 876 */ 877 878 /** 879 * HwmonSkeletonClass: 880 * @parent_class: The parent class. 881 * 882 * Class structure for #HwmonSkeleton. 883 */ 884 885 struct _HwmonSkeletonPrivate 886 { 887 GValue *properties; 888 GList *changed_properties; 889 GSource *changed_properties_idle_source; 890 GMainContext *context; 891 GMutex lock; 892 }; 893 894 static void 895 _hwmon_skeleton_handle_method_call ( 896 GDBusConnection *connection G_GNUC_UNUSED, 897 const gchar *sender G_GNUC_UNUSED, 898 const gchar *object_path G_GNUC_UNUSED, 899 const gchar *interface_name, 900 const gchar *method_name, 901 GVariant *parameters, 902 GDBusMethodInvocation *invocation, 903 gpointer user_data) 904 { 905 HwmonSkeleton *skeleton = HWMON_SKELETON (user_data); 906 _ExtendedGDBusMethodInfo *info; 907 GVariantIter iter; 908 GVariant *child; 909 GValue *paramv; 910 guint num_params; 911 guint num_extra; 912 guint n; 913 guint signal_id; 914 GValue return_value = G_VALUE_INIT; 915 info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation); 916 g_assert (info != NULL); 917 num_params = g_variant_n_children (parameters); 918 num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra); 919 n = 0; 920 g_value_init (¶mv[n], TYPE_HWMON); 921 g_value_set_object (¶mv[n++], skeleton); 922 g_value_init (¶mv[n], G_TYPE_DBUS_METHOD_INVOCATION); 923 g_value_set_object (¶mv[n++], invocation); 924 if (info->pass_fdlist) 925 { 926 #ifdef G_OS_UNIX 927 g_value_init (¶mv[n], G_TYPE_UNIX_FD_LIST); 928 g_value_set_object (¶mv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation))); 929 #else 930 g_assert_not_reached (); 931 #endif 932 } 933 g_variant_iter_init (&iter, parameters); 934 while ((child = g_variant_iter_next_value (&iter)) != NULL) 935 { 936 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra]; 937 if (arg_info->use_gvariant) 938 { 939 g_value_init (¶mv[n], G_TYPE_VARIANT); 940 g_value_set_variant (¶mv[n], child); 941 n++; 942 } 943 else 944 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 945 g_variant_unref (child); 946 } 947 signal_id = g_signal_lookup (info->signal_name, TYPE_HWMON); 948 g_value_init (&return_value, G_TYPE_BOOLEAN); 949 g_signal_emitv (paramv, signal_id, 0, &return_value); 950 if (!g_value_get_boolean (&return_value)) 951 g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name); 952 g_value_unset (&return_value); 953 for (n = 0; n < num_params + num_extra; n++) 954 g_value_unset (¶mv[n]); 955 g_free (paramv); 956 } 957 958 static GVariant * 959 _hwmon_skeleton_handle_get_property ( 960 GDBusConnection *connection G_GNUC_UNUSED, 961 const gchar *sender G_GNUC_UNUSED, 962 const gchar *object_path G_GNUC_UNUSED, 963 const gchar *interface_name G_GNUC_UNUSED, 964 const gchar *property_name, 965 GError **error, 966 gpointer user_data) 967 { 968 HwmonSkeleton *skeleton = HWMON_SKELETON (user_data); 969 GValue value = G_VALUE_INIT; 970 GParamSpec *pspec; 971 _ExtendedGDBusPropertyInfo *info; 972 GVariant *ret; 973 ret = NULL; 974 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_hwmon_interface_info.parent_struct, property_name); 975 g_assert (info != NULL); 976 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 977 if (pspec == NULL) 978 { 979 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 980 } 981 else 982 { 983 g_value_init (&value, pspec->value_type); 984 g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value); 985 ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature)); 986 g_value_unset (&value); 987 } 988 return ret; 989 } 990 991 static gboolean 992 _hwmon_skeleton_handle_set_property ( 993 GDBusConnection *connection G_GNUC_UNUSED, 994 const gchar *sender G_GNUC_UNUSED, 995 const gchar *object_path G_GNUC_UNUSED, 996 const gchar *interface_name G_GNUC_UNUSED, 997 const gchar *property_name, 998 GVariant *variant, 999 GError **error, 1000 gpointer user_data) 1001 { 1002 HwmonSkeleton *skeleton = HWMON_SKELETON (user_data); 1003 GValue value = G_VALUE_INIT; 1004 GParamSpec *pspec; 1005 _ExtendedGDBusPropertyInfo *info; 1006 gboolean ret; 1007 ret = FALSE; 1008 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_hwmon_interface_info.parent_struct, property_name); 1009 g_assert (info != NULL); 1010 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 1011 if (pspec == NULL) 1012 { 1013 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 1014 } 1015 else 1016 { 1017 if (info->use_gvariant) 1018 g_value_set_variant (&value, variant); 1019 else 1020 g_dbus_gvariant_to_gvalue (variant, &value); 1021 g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value); 1022 g_value_unset (&value); 1023 ret = TRUE; 1024 } 1025 return ret; 1026 } 1027 1028 static const GDBusInterfaceVTable _hwmon_skeleton_vtable = 1029 { 1030 _hwmon_skeleton_handle_method_call, 1031 _hwmon_skeleton_handle_get_property, 1032 _hwmon_skeleton_handle_set_property, 1033 {NULL} 1034 }; 1035 1036 static GDBusInterfaceInfo * 1037 hwmon_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 1038 { 1039 return hwmon_interface_info (); 1040 } 1041 1042 static GDBusInterfaceVTable * 1043 hwmon_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 1044 { 1045 return (GDBusInterfaceVTable *) &_hwmon_skeleton_vtable; 1046 } 1047 1048 static GVariant * 1049 hwmon_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton) 1050 { 1051 HwmonSkeleton *skeleton = HWMON_SKELETON (_skeleton); 1052 1053 GVariantBuilder builder; 1054 guint n; 1055 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 1056 if (_hwmon_interface_info.parent_struct.properties == NULL) 1057 goto out; 1058 for (n = 0; _hwmon_interface_info.parent_struct.properties[n] != NULL; n++) 1059 { 1060 GDBusPropertyInfo *info = _hwmon_interface_info.parent_struct.properties[n]; 1061 if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE) 1062 { 1063 GVariant *value; 1064 value = _hwmon_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.Hwmon", info->name, NULL, skeleton); 1065 if (value != NULL) 1066 { 1067 g_variant_take_ref (value); 1068 g_variant_builder_add (&builder, "{sv}", info->name, value); 1069 g_variant_unref (value); 1070 } 1071 } 1072 } 1073 out: 1074 return g_variant_builder_end (&builder); 1075 } 1076 1077 static gboolean _hwmon_emit_changed (gpointer user_data); 1078 1079 static void 1080 hwmon_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton) 1081 { 1082 HwmonSkeleton *skeleton = HWMON_SKELETON (_skeleton); 1083 gboolean emit_changed = FALSE; 1084 1085 g_mutex_lock (&skeleton->priv->lock); 1086 if (skeleton->priv->changed_properties_idle_source != NULL) 1087 { 1088 g_source_destroy (skeleton->priv->changed_properties_idle_source); 1089 skeleton->priv->changed_properties_idle_source = NULL; 1090 emit_changed = TRUE; 1091 } 1092 g_mutex_unlock (&skeleton->priv->lock); 1093 1094 if (emit_changed) 1095 _hwmon_emit_changed (skeleton); 1096 } 1097 1098 static void hwmon_skeleton_iface_init (HwmonIface *iface); 1099 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 1100 G_DEFINE_TYPE_WITH_CODE (HwmonSkeleton, hwmon_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 1101 G_ADD_PRIVATE (HwmonSkeleton) 1102 G_IMPLEMENT_INTERFACE (TYPE_HWMON, hwmon_skeleton_iface_init)); 1103 1104 #else 1105 G_DEFINE_TYPE_WITH_CODE (HwmonSkeleton, hwmon_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 1106 G_IMPLEMENT_INTERFACE (TYPE_HWMON, hwmon_skeleton_iface_init)); 1107 1108 #endif 1109 static void 1110 hwmon_skeleton_finalize (GObject *object) 1111 { 1112 HwmonSkeleton *skeleton = HWMON_SKELETON (object); 1113 guint n; 1114 for (n = 0; n < 3; n++) 1115 g_value_unset (&skeleton->priv->properties[n]); 1116 g_free (skeleton->priv->properties); 1117 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 1118 if (skeleton->priv->changed_properties_idle_source != NULL) 1119 g_source_destroy (skeleton->priv->changed_properties_idle_source); 1120 g_main_context_unref (skeleton->priv->context); 1121 g_mutex_clear (&skeleton->priv->lock); 1122 G_OBJECT_CLASS (hwmon_skeleton_parent_class)->finalize (object); 1123 } 1124 1125 static void 1126 hwmon_skeleton_get_property (GObject *object, 1127 guint prop_id, 1128 GValue *value, 1129 GParamSpec *pspec G_GNUC_UNUSED) 1130 { 1131 HwmonSkeleton *skeleton = HWMON_SKELETON (object); 1132 g_assert (prop_id != 0 && prop_id - 1 < 3); 1133 g_mutex_lock (&skeleton->priv->lock); 1134 g_value_copy (&skeleton->priv->properties[prop_id - 1], value); 1135 g_mutex_unlock (&skeleton->priv->lock); 1136 } 1137 1138 static gboolean 1139 _hwmon_emit_changed (gpointer user_data) 1140 { 1141 HwmonSkeleton *skeleton = HWMON_SKELETON (user_data); 1142 GList *l; 1143 GVariantBuilder builder; 1144 GVariantBuilder invalidated_builder; 1145 guint num_changes; 1146 1147 g_mutex_lock (&skeleton->priv->lock); 1148 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 1149 g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as")); 1150 for (l = skeleton->priv->changed_properties, num_changes = 0; l != NULL; l = l->next) 1151 { 1152 ChangedProperty *cp = l->data; 1153 GVariant *variant; 1154 const GValue *cur_value; 1155 1156 cur_value = &skeleton->priv->properties[cp->prop_id - 1]; 1157 if (!_g_value_equal (cur_value, &cp->orig_value)) 1158 { 1159 variant = g_dbus_gvalue_to_gvariant (cur_value, G_VARIANT_TYPE (cp->info->parent_struct.signature)); 1160 g_variant_builder_add (&builder, "{sv}", cp->info->parent_struct.name, variant); 1161 g_variant_unref (variant); 1162 num_changes++; 1163 } 1164 } 1165 if (num_changes > 0) 1166 { 1167 GList *connections, *ll; 1168 GVariant *signal_variant; 1169 signal_variant = g_variant_ref_sink (g_variant_new ("(sa{sv}as)", "org.openbmc.Hwmon", 1170 &builder, &invalidated_builder)); 1171 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 1172 for (ll = connections; ll != NULL; ll = ll->next) 1173 { 1174 GDBusConnection *connection = ll->data; 1175 1176 g_dbus_connection_emit_signal (connection, 1177 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), 1178 "org.freedesktop.DBus.Properties", 1179 "PropertiesChanged", 1180 signal_variant, 1181 NULL); 1182 } 1183 g_variant_unref (signal_variant); 1184 g_list_free_full (connections, g_object_unref); 1185 } 1186 else 1187 { 1188 g_variant_builder_clear (&builder); 1189 g_variant_builder_clear (&invalidated_builder); 1190 } 1191 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 1192 skeleton->priv->changed_properties = NULL; 1193 skeleton->priv->changed_properties_idle_source = NULL; 1194 g_mutex_unlock (&skeleton->priv->lock); 1195 return FALSE; 1196 } 1197 1198 static void 1199 _hwmon_schedule_emit_changed (HwmonSkeleton *skeleton, const _ExtendedGDBusPropertyInfo *info, guint prop_id, const GValue *orig_value) 1200 { 1201 ChangedProperty *cp; 1202 GList *l; 1203 cp = NULL; 1204 for (l = skeleton->priv->changed_properties; l != NULL; l = l->next) 1205 { 1206 ChangedProperty *i_cp = l->data; 1207 if (i_cp->info == info) 1208 { 1209 cp = i_cp; 1210 break; 1211 } 1212 } 1213 if (cp == NULL) 1214 { 1215 cp = g_new0 (ChangedProperty, 1); 1216 cp->prop_id = prop_id; 1217 cp->info = info; 1218 skeleton->priv->changed_properties = g_list_prepend (skeleton->priv->changed_properties, cp); 1219 g_value_init (&cp->orig_value, G_VALUE_TYPE (orig_value)); 1220 g_value_copy (orig_value, &cp->orig_value); 1221 } 1222 } 1223 1224 static void 1225 hwmon_skeleton_notify (GObject *object, 1226 GParamSpec *pspec G_GNUC_UNUSED) 1227 { 1228 HwmonSkeleton *skeleton = HWMON_SKELETON (object); 1229 g_mutex_lock (&skeleton->priv->lock); 1230 if (skeleton->priv->changed_properties != NULL && 1231 skeleton->priv->changed_properties_idle_source == NULL) 1232 { 1233 skeleton->priv->changed_properties_idle_source = g_idle_source_new (); 1234 g_source_set_priority (skeleton->priv->changed_properties_idle_source, G_PRIORITY_DEFAULT); 1235 g_source_set_callback (skeleton->priv->changed_properties_idle_source, _hwmon_emit_changed, g_object_ref (skeleton), (GDestroyNotify) g_object_unref); 1236 g_source_set_name (skeleton->priv->changed_properties_idle_source, "[generated] _hwmon_emit_changed"); 1237 g_source_attach (skeleton->priv->changed_properties_idle_source, skeleton->priv->context); 1238 g_source_unref (skeleton->priv->changed_properties_idle_source); 1239 } 1240 g_mutex_unlock (&skeleton->priv->lock); 1241 } 1242 1243 static void 1244 hwmon_skeleton_set_property (GObject *object, 1245 guint prop_id, 1246 const GValue *value, 1247 GParamSpec *pspec) 1248 { 1249 HwmonSkeleton *skeleton = HWMON_SKELETON (object); 1250 g_assert (prop_id != 0 && prop_id - 1 < 3); 1251 g_mutex_lock (&skeleton->priv->lock); 1252 g_object_freeze_notify (object); 1253 if (!_g_value_equal (value, &skeleton->priv->properties[prop_id - 1])) 1254 { 1255 if (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)) != NULL) 1256 _hwmon_schedule_emit_changed (skeleton, _hwmon_property_info_pointers[prop_id - 1], prop_id, &skeleton->priv->properties[prop_id - 1]); 1257 g_value_copy (value, &skeleton->priv->properties[prop_id - 1]); 1258 g_object_notify_by_pspec (object, pspec); 1259 } 1260 g_mutex_unlock (&skeleton->priv->lock); 1261 g_object_thaw_notify (object); 1262 } 1263 1264 static void 1265 hwmon_skeleton_init (HwmonSkeleton *skeleton) 1266 { 1267 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 1268 skeleton->priv = hwmon_skeleton_get_instance_private (skeleton); 1269 #else 1270 skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, TYPE_HWMON_SKELETON, HwmonSkeletonPrivate); 1271 #endif 1272 1273 g_mutex_init (&skeleton->priv->lock); 1274 skeleton->priv->context = g_main_context_ref_thread_default (); 1275 skeleton->priv->properties = g_new0 (GValue, 3); 1276 g_value_init (&skeleton->priv->properties[0], G_TYPE_INT); 1277 g_value_init (&skeleton->priv->properties[1], G_TYPE_STRING); 1278 g_value_init (&skeleton->priv->properties[2], G_TYPE_INT); 1279 } 1280 1281 static gint 1282 hwmon_skeleton_get_poll_interval (Hwmon *object) 1283 { 1284 HwmonSkeleton *skeleton = HWMON_SKELETON (object); 1285 gint value; 1286 g_mutex_lock (&skeleton->priv->lock); 1287 value = g_value_get_int (&(skeleton->priv->properties[0])); 1288 g_mutex_unlock (&skeleton->priv->lock); 1289 return value; 1290 } 1291 1292 static const gchar * 1293 hwmon_skeleton_get_sysfs_path (Hwmon *object) 1294 { 1295 HwmonSkeleton *skeleton = HWMON_SKELETON (object); 1296 const gchar *value; 1297 g_mutex_lock (&skeleton->priv->lock); 1298 value = g_value_get_string (&(skeleton->priv->properties[1])); 1299 g_mutex_unlock (&skeleton->priv->lock); 1300 return value; 1301 } 1302 1303 static gint 1304 hwmon_skeleton_get_scale (Hwmon *object) 1305 { 1306 HwmonSkeleton *skeleton = HWMON_SKELETON (object); 1307 gint value; 1308 g_mutex_lock (&skeleton->priv->lock); 1309 value = g_value_get_int (&(skeleton->priv->properties[2])); 1310 g_mutex_unlock (&skeleton->priv->lock); 1311 return value; 1312 } 1313 1314 static void 1315 hwmon_skeleton_class_init (HwmonSkeletonClass *klass) 1316 { 1317 GObjectClass *gobject_class; 1318 GDBusInterfaceSkeletonClass *skeleton_class; 1319 1320 gobject_class = G_OBJECT_CLASS (klass); 1321 gobject_class->finalize = hwmon_skeleton_finalize; 1322 gobject_class->get_property = hwmon_skeleton_get_property; 1323 gobject_class->set_property = hwmon_skeleton_set_property; 1324 gobject_class->notify = hwmon_skeleton_notify; 1325 1326 1327 hwmon_override_properties (gobject_class, 1); 1328 1329 skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass); 1330 skeleton_class->get_info = hwmon_skeleton_dbus_interface_get_info; 1331 skeleton_class->get_properties = hwmon_skeleton_dbus_interface_get_properties; 1332 skeleton_class->flush = hwmon_skeleton_dbus_interface_flush; 1333 skeleton_class->get_vtable = hwmon_skeleton_dbus_interface_get_vtable; 1334 1335 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 1336 g_type_class_add_private (klass, sizeof (HwmonSkeletonPrivate)); 1337 #endif 1338 } 1339 1340 static void 1341 hwmon_skeleton_iface_init (HwmonIface *iface) 1342 { 1343 iface->get_poll_interval = hwmon_skeleton_get_poll_interval; 1344 iface->get_sysfs_path = hwmon_skeleton_get_sysfs_path; 1345 iface->get_scale = hwmon_skeleton_get_scale; 1346 } 1347 1348 /** 1349 * hwmon_skeleton_new: 1350 * 1351 * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Hwmon.top_of_page">org.openbmc.Hwmon</link>. 1352 * 1353 * Returns: (transfer full) (type HwmonSkeleton): The skeleton object. 1354 */ 1355 Hwmon * 1356 hwmon_skeleton_new (void) 1357 { 1358 return HWMON (g_object_new (TYPE_HWMON_SKELETON, NULL)); 1359 } 1360 1361 /* ------------------------------------------------------------------------ 1362 * Code for interface org.openbmc.Fan 1363 * ------------------------------------------------------------------------ 1364 */ 1365 1366 /** 1367 * SECTION:Fan 1368 * @title: Fan 1369 * @short_description: Generated C code for the org.openbmc.Fan D-Bus interface 1370 * 1371 * This section contains code for working with the <link linkend="gdbus-interface-org-openbmc-Fan.top_of_page">org.openbmc.Fan</link> D-Bus interface in C. 1372 */ 1373 1374 /* ---- Introspection data for org.openbmc.Fan ---- */ 1375 1376 static const _ExtendedGDBusArgInfo _fan_method_info_set_cooling_zone_IN_ARG_cooling_zone = 1377 { 1378 { 1379 -1, 1380 (gchar *) "cooling_zone", 1381 (gchar *) "i", 1382 NULL 1383 }, 1384 FALSE 1385 }; 1386 1387 static const _ExtendedGDBusArgInfo * const _fan_method_info_set_cooling_zone_IN_ARG_pointers[] = 1388 { 1389 &_fan_method_info_set_cooling_zone_IN_ARG_cooling_zone, 1390 NULL 1391 }; 1392 1393 static const _ExtendedGDBusMethodInfo _fan_method_info_set_cooling_zone = 1394 { 1395 { 1396 -1, 1397 (gchar *) "setCoolingZone", 1398 (GDBusArgInfo **) &_fan_method_info_set_cooling_zone_IN_ARG_pointers, 1399 NULL, 1400 NULL 1401 }, 1402 "handle-set-cooling-zone", 1403 FALSE 1404 }; 1405 1406 static const _ExtendedGDBusArgInfo _fan_method_info_get_speed_OUT_ARG_speed = 1407 { 1408 { 1409 -1, 1410 (gchar *) "speed", 1411 (gchar *) "i", 1412 NULL 1413 }, 1414 FALSE 1415 }; 1416 1417 static const _ExtendedGDBusArgInfo * const _fan_method_info_get_speed_OUT_ARG_pointers[] = 1418 { 1419 &_fan_method_info_get_speed_OUT_ARG_speed, 1420 NULL 1421 }; 1422 1423 static const _ExtendedGDBusMethodInfo _fan_method_info_get_speed = 1424 { 1425 { 1426 -1, 1427 (gchar *) "getSpeed", 1428 NULL, 1429 (GDBusArgInfo **) &_fan_method_info_get_speed_OUT_ARG_pointers, 1430 NULL 1431 }, 1432 "handle-get-speed", 1433 FALSE 1434 }; 1435 1436 static const _ExtendedGDBusArgInfo _fan_method_info_set_speed_IN_ARG_speed = 1437 { 1438 { 1439 -1, 1440 (gchar *) "speed", 1441 (gchar *) "i", 1442 NULL 1443 }, 1444 FALSE 1445 }; 1446 1447 static const _ExtendedGDBusArgInfo * const _fan_method_info_set_speed_IN_ARG_pointers[] = 1448 { 1449 &_fan_method_info_set_speed_IN_ARG_speed, 1450 NULL 1451 }; 1452 1453 static const _ExtendedGDBusMethodInfo _fan_method_info_set_speed = 1454 { 1455 { 1456 -1, 1457 (gchar *) "setSpeed", 1458 (GDBusArgInfo **) &_fan_method_info_set_speed_IN_ARG_pointers, 1459 NULL, 1460 NULL 1461 }, 1462 "handle-set-speed", 1463 FALSE 1464 }; 1465 1466 static const _ExtendedGDBusMethodInfo * const _fan_method_info_pointers[] = 1467 { 1468 &_fan_method_info_set_cooling_zone, 1469 &_fan_method_info_get_speed, 1470 &_fan_method_info_set_speed, 1471 NULL 1472 }; 1473 1474 static const _ExtendedGDBusArgInfo _fan_signal_info_speed_changed_ARG_speed = 1475 { 1476 { 1477 -1, 1478 (gchar *) "speed", 1479 (gchar *) "i", 1480 NULL 1481 }, 1482 FALSE 1483 }; 1484 1485 static const _ExtendedGDBusArgInfo * const _fan_signal_info_speed_changed_ARG_pointers[] = 1486 { 1487 &_fan_signal_info_speed_changed_ARG_speed, 1488 NULL 1489 }; 1490 1491 static const _ExtendedGDBusSignalInfo _fan_signal_info_speed_changed = 1492 { 1493 { 1494 -1, 1495 (gchar *) "SpeedChanged", 1496 (GDBusArgInfo **) &_fan_signal_info_speed_changed_ARG_pointers, 1497 NULL 1498 }, 1499 "speed-changed" 1500 }; 1501 1502 static const _ExtendedGDBusSignalInfo _fan_signal_info_tach_error = 1503 { 1504 { 1505 -1, 1506 (gchar *) "TachError", 1507 NULL, 1508 NULL 1509 }, 1510 "tach-error" 1511 }; 1512 1513 static const _ExtendedGDBusSignalInfo * const _fan_signal_info_pointers[] = 1514 { 1515 &_fan_signal_info_speed_changed, 1516 &_fan_signal_info_tach_error, 1517 NULL 1518 }; 1519 1520 static const _ExtendedGDBusPropertyInfo _fan_property_info_speed = 1521 { 1522 { 1523 -1, 1524 (gchar *) "speed", 1525 (gchar *) "i", 1526 G_DBUS_PROPERTY_INFO_FLAGS_READABLE | G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE, 1527 NULL 1528 }, 1529 "speed", 1530 FALSE 1531 }; 1532 1533 static const _ExtendedGDBusPropertyInfo _fan_property_info_cooling_zone = 1534 { 1535 { 1536 -1, 1537 (gchar *) "cooling_zone", 1538 (gchar *) "i", 1539 G_DBUS_PROPERTY_INFO_FLAGS_READABLE | G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE, 1540 NULL 1541 }, 1542 "cooling-zone", 1543 FALSE 1544 }; 1545 1546 static const _ExtendedGDBusPropertyInfo _fan_property_info_pwm_num = 1547 { 1548 { 1549 -1, 1550 (gchar *) "pwm_num", 1551 (gchar *) "i", 1552 G_DBUS_PROPERTY_INFO_FLAGS_READABLE | G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE, 1553 NULL 1554 }, 1555 "pwm-num", 1556 FALSE 1557 }; 1558 1559 static const _ExtendedGDBusPropertyInfo * const _fan_property_info_pointers[] = 1560 { 1561 &_fan_property_info_speed, 1562 &_fan_property_info_cooling_zone, 1563 &_fan_property_info_pwm_num, 1564 NULL 1565 }; 1566 1567 static const _ExtendedGDBusInterfaceInfo _fan_interface_info = 1568 { 1569 { 1570 -1, 1571 (gchar *) "org.openbmc.Fan", 1572 (GDBusMethodInfo **) &_fan_method_info_pointers, 1573 (GDBusSignalInfo **) &_fan_signal_info_pointers, 1574 (GDBusPropertyInfo **) &_fan_property_info_pointers, 1575 NULL 1576 }, 1577 "fan", 1578 }; 1579 1580 1581 /** 1582 * fan_interface_info: 1583 * 1584 * Gets a machine-readable description of the <link linkend="gdbus-interface-org-openbmc-Fan.top_of_page">org.openbmc.Fan</link> D-Bus interface. 1585 * 1586 * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free. 1587 */ 1588 GDBusInterfaceInfo * 1589 fan_interface_info (void) 1590 { 1591 return (GDBusInterfaceInfo *) &_fan_interface_info.parent_struct; 1592 } 1593 1594 /** 1595 * fan_override_properties: 1596 * @klass: The class structure for a #GObject<!-- -->-derived class. 1597 * @property_id_begin: The property id to assign to the first overridden property. 1598 * 1599 * Overrides all #GObject properties in the #Fan interface for a concrete class. 1600 * The properties are overridden in the order they are defined. 1601 * 1602 * Returns: The last property id. 1603 */ 1604 guint 1605 fan_override_properties (GObjectClass *klass, guint property_id_begin) 1606 { 1607 g_object_class_override_property (klass, property_id_begin++, "speed"); 1608 g_object_class_override_property (klass, property_id_begin++, "cooling-zone"); 1609 g_object_class_override_property (klass, property_id_begin++, "pwm-num"); 1610 return property_id_begin - 1; 1611 } 1612 1613 1614 1615 /** 1616 * Fan: 1617 * 1618 * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Fan.top_of_page">org.openbmc.Fan</link>. 1619 */ 1620 1621 /** 1622 * FanIface: 1623 * @parent_iface: The parent interface. 1624 * @handle_get_speed: Handler for the #Fan::handle-get-speed signal. 1625 * @handle_set_cooling_zone: Handler for the #Fan::handle-set-cooling-zone signal. 1626 * @handle_set_speed: Handler for the #Fan::handle-set-speed signal. 1627 * @get_cooling_zone: Getter for the #Fan:cooling-zone property. 1628 * @get_pwm_num: Getter for the #Fan:pwm-num property. 1629 * @get_speed: Getter for the #Fan:speed property. 1630 * @speed_changed: Handler for the #Fan::speed-changed signal. 1631 * @tach_error: Handler for the #Fan::tach-error signal. 1632 * 1633 * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Fan.top_of_page">org.openbmc.Fan</link>. 1634 */ 1635 1636 typedef FanIface FanInterface; 1637 G_DEFINE_INTERFACE (Fan, fan, G_TYPE_OBJECT); 1638 1639 static void 1640 fan_default_init (FanIface *iface) 1641 { 1642 /* GObject signals for incoming D-Bus method calls: */ 1643 /** 1644 * Fan::handle-set-cooling-zone: 1645 * @object: A #Fan. 1646 * @invocation: A #GDBusMethodInvocation. 1647 * @arg_cooling_zone: Argument passed by remote caller. 1648 * 1649 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-Fan.setCoolingZone">setCoolingZone()</link> D-Bus method. 1650 * 1651 * 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 fan_complete_set_cooling_zone() 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. 1652 * 1653 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 1654 */ 1655 g_signal_new ("handle-set-cooling-zone", 1656 G_TYPE_FROM_INTERFACE (iface), 1657 G_SIGNAL_RUN_LAST, 1658 G_STRUCT_OFFSET (FanIface, handle_set_cooling_zone), 1659 g_signal_accumulator_true_handled, 1660 NULL, 1661 g_cclosure_marshal_generic, 1662 G_TYPE_BOOLEAN, 1663 2, 1664 G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_INT); 1665 1666 /** 1667 * Fan::handle-get-speed: 1668 * @object: A #Fan. 1669 * @invocation: A #GDBusMethodInvocation. 1670 * 1671 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-Fan.getSpeed">getSpeed()</link> D-Bus method. 1672 * 1673 * 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 fan_complete_get_speed() 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. 1674 * 1675 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 1676 */ 1677 g_signal_new ("handle-get-speed", 1678 G_TYPE_FROM_INTERFACE (iface), 1679 G_SIGNAL_RUN_LAST, 1680 G_STRUCT_OFFSET (FanIface, handle_get_speed), 1681 g_signal_accumulator_true_handled, 1682 NULL, 1683 g_cclosure_marshal_generic, 1684 G_TYPE_BOOLEAN, 1685 1, 1686 G_TYPE_DBUS_METHOD_INVOCATION); 1687 1688 /** 1689 * Fan::handle-set-speed: 1690 * @object: A #Fan. 1691 * @invocation: A #GDBusMethodInvocation. 1692 * @arg_speed: Argument passed by remote caller. 1693 * 1694 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-Fan.setSpeed">setSpeed()</link> D-Bus method. 1695 * 1696 * 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 fan_complete_set_speed() 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. 1697 * 1698 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 1699 */ 1700 g_signal_new ("handle-set-speed", 1701 G_TYPE_FROM_INTERFACE (iface), 1702 G_SIGNAL_RUN_LAST, 1703 G_STRUCT_OFFSET (FanIface, handle_set_speed), 1704 g_signal_accumulator_true_handled, 1705 NULL, 1706 g_cclosure_marshal_generic, 1707 G_TYPE_BOOLEAN, 1708 2, 1709 G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_INT); 1710 1711 /* GObject signals for received D-Bus signals: */ 1712 /** 1713 * Fan::speed-changed: 1714 * @object: A #Fan. 1715 * @arg_speed: Argument. 1716 * 1717 * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-openbmc-Fan.SpeedChanged">"SpeedChanged"</link> is received. 1718 * 1719 * 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. 1720 */ 1721 g_signal_new ("speed-changed", 1722 G_TYPE_FROM_INTERFACE (iface), 1723 G_SIGNAL_RUN_LAST, 1724 G_STRUCT_OFFSET (FanIface, speed_changed), 1725 NULL, 1726 NULL, 1727 g_cclosure_marshal_generic, 1728 G_TYPE_NONE, 1729 1, G_TYPE_INT); 1730 1731 /** 1732 * Fan::tach-error: 1733 * @object: A #Fan. 1734 * 1735 * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-openbmc-Fan.TachError">"TachError"</link> is received. 1736 * 1737 * 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. 1738 */ 1739 g_signal_new ("tach-error", 1740 G_TYPE_FROM_INTERFACE (iface), 1741 G_SIGNAL_RUN_LAST, 1742 G_STRUCT_OFFSET (FanIface, tach_error), 1743 NULL, 1744 NULL, 1745 g_cclosure_marshal_generic, 1746 G_TYPE_NONE, 1747 0); 1748 1749 /* GObject properties for D-Bus properties: */ 1750 /** 1751 * Fan:speed: 1752 * 1753 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-Fan.speed">"speed"</link>. 1754 * 1755 * 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. 1756 */ 1757 g_object_interface_install_property (iface, 1758 g_param_spec_int ("speed", "speed", "speed", G_MININT32, G_MAXINT32, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 1759 /** 1760 * Fan:cooling-zone: 1761 * 1762 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-Fan.cooling_zone">"cooling_zone"</link>. 1763 * 1764 * 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. 1765 */ 1766 g_object_interface_install_property (iface, 1767 g_param_spec_int ("cooling-zone", "cooling_zone", "cooling_zone", G_MININT32, G_MAXINT32, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 1768 /** 1769 * Fan:pwm-num: 1770 * 1771 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-Fan.pwm_num">"pwm_num"</link>. 1772 * 1773 * 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. 1774 */ 1775 g_object_interface_install_property (iface, 1776 g_param_spec_int ("pwm-num", "pwm_num", "pwm_num", G_MININT32, G_MAXINT32, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 1777 } 1778 1779 /** 1780 * fan_get_speed: (skip) 1781 * @object: A #Fan. 1782 * 1783 * Gets the value of the <link linkend="gdbus-property-org-openbmc-Fan.speed">"speed"</link> D-Bus property. 1784 * 1785 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 1786 * 1787 * Returns: The property value. 1788 */ 1789 gint 1790 fan_get_speed (Fan *object) 1791 { 1792 return FAN_GET_IFACE (object)->get_speed (object); 1793 } 1794 1795 /** 1796 * fan_set_speed: (skip) 1797 * @object: A #Fan. 1798 * @value: The value to set. 1799 * 1800 * Sets the <link linkend="gdbus-property-org-openbmc-Fan.speed">"speed"</link> D-Bus property to @value. 1801 * 1802 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 1803 */ 1804 void 1805 fan_set_speed (Fan *object, gint value) 1806 { 1807 g_object_set (G_OBJECT (object), "speed", value, NULL); 1808 } 1809 1810 /** 1811 * fan_get_cooling_zone: (skip) 1812 * @object: A #Fan. 1813 * 1814 * Gets the value of the <link linkend="gdbus-property-org-openbmc-Fan.cooling_zone">"cooling_zone"</link> D-Bus property. 1815 * 1816 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 1817 * 1818 * Returns: The property value. 1819 */ 1820 gint 1821 fan_get_cooling_zone (Fan *object) 1822 { 1823 return FAN_GET_IFACE (object)->get_cooling_zone (object); 1824 } 1825 1826 /** 1827 * fan_set_cooling_zone: (skip) 1828 * @object: A #Fan. 1829 * @value: The value to set. 1830 * 1831 * Sets the <link linkend="gdbus-property-org-openbmc-Fan.cooling_zone">"cooling_zone"</link> D-Bus property to @value. 1832 * 1833 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 1834 */ 1835 void 1836 fan_set_cooling_zone (Fan *object, gint value) 1837 { 1838 g_object_set (G_OBJECT (object), "cooling-zone", value, NULL); 1839 } 1840 1841 /** 1842 * fan_get_pwm_num: (skip) 1843 * @object: A #Fan. 1844 * 1845 * Gets the value of the <link linkend="gdbus-property-org-openbmc-Fan.pwm_num">"pwm_num"</link> D-Bus property. 1846 * 1847 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 1848 * 1849 * Returns: The property value. 1850 */ 1851 gint 1852 fan_get_pwm_num (Fan *object) 1853 { 1854 return FAN_GET_IFACE (object)->get_pwm_num (object); 1855 } 1856 1857 /** 1858 * fan_set_pwm_num: (skip) 1859 * @object: A #Fan. 1860 * @value: The value to set. 1861 * 1862 * Sets the <link linkend="gdbus-property-org-openbmc-Fan.pwm_num">"pwm_num"</link> D-Bus property to @value. 1863 * 1864 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 1865 */ 1866 void 1867 fan_set_pwm_num (Fan *object, gint value) 1868 { 1869 g_object_set (G_OBJECT (object), "pwm-num", value, NULL); 1870 } 1871 1872 /** 1873 * fan_emit_speed_changed: 1874 * @object: A #Fan. 1875 * @arg_speed: Argument to pass with the signal. 1876 * 1877 * Emits the <link linkend="gdbus-signal-org-openbmc-Fan.SpeedChanged">"SpeedChanged"</link> D-Bus signal. 1878 */ 1879 void 1880 fan_emit_speed_changed ( 1881 Fan *object, 1882 gint arg_speed) 1883 { 1884 g_signal_emit_by_name (object, "speed-changed", arg_speed); 1885 } 1886 1887 /** 1888 * fan_emit_tach_error: 1889 * @object: A #Fan. 1890 * 1891 * Emits the <link linkend="gdbus-signal-org-openbmc-Fan.TachError">"TachError"</link> D-Bus signal. 1892 */ 1893 void 1894 fan_emit_tach_error ( 1895 Fan *object) 1896 { 1897 g_signal_emit_by_name (object, "tach-error"); 1898 } 1899 1900 /** 1901 * fan_call_set_cooling_zone: 1902 * @proxy: A #FanProxy. 1903 * @arg_cooling_zone: Argument to pass with the method invocation. 1904 * @cancellable: (allow-none): A #GCancellable or %NULL. 1905 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 1906 * @user_data: User data to pass to @callback. 1907 * 1908 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-Fan.setCoolingZone">setCoolingZone()</link> D-Bus method on @proxy. 1909 * 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. 1910 * You can then call fan_call_set_cooling_zone_finish() to get the result of the operation. 1911 * 1912 * See fan_call_set_cooling_zone_sync() for the synchronous, blocking version of this method. 1913 */ 1914 void 1915 fan_call_set_cooling_zone ( 1916 Fan *proxy, 1917 gint arg_cooling_zone, 1918 GCancellable *cancellable, 1919 GAsyncReadyCallback callback, 1920 gpointer user_data) 1921 { 1922 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 1923 "setCoolingZone", 1924 g_variant_new ("(i)", 1925 arg_cooling_zone), 1926 G_DBUS_CALL_FLAGS_NONE, 1927 -1, 1928 cancellable, 1929 callback, 1930 user_data); 1931 } 1932 1933 /** 1934 * fan_call_set_cooling_zone_finish: 1935 * @proxy: A #FanProxy. 1936 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to fan_call_set_cooling_zone(). 1937 * @error: Return location for error or %NULL. 1938 * 1939 * Finishes an operation started with fan_call_set_cooling_zone(). 1940 * 1941 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 1942 */ 1943 gboolean 1944 fan_call_set_cooling_zone_finish ( 1945 Fan *proxy, 1946 GAsyncResult *res, 1947 GError **error) 1948 { 1949 GVariant *_ret; 1950 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 1951 if (_ret == NULL) 1952 goto _out; 1953 g_variant_get (_ret, 1954 "()"); 1955 g_variant_unref (_ret); 1956 _out: 1957 return _ret != NULL; 1958 } 1959 1960 /** 1961 * fan_call_set_cooling_zone_sync: 1962 * @proxy: A #FanProxy. 1963 * @arg_cooling_zone: Argument to pass with the method invocation. 1964 * @cancellable: (allow-none): A #GCancellable or %NULL. 1965 * @error: Return location for error or %NULL. 1966 * 1967 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-Fan.setCoolingZone">setCoolingZone()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 1968 * 1969 * See fan_call_set_cooling_zone() for the asynchronous version of this method. 1970 * 1971 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 1972 */ 1973 gboolean 1974 fan_call_set_cooling_zone_sync ( 1975 Fan *proxy, 1976 gint arg_cooling_zone, 1977 GCancellable *cancellable, 1978 GError **error) 1979 { 1980 GVariant *_ret; 1981 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 1982 "setCoolingZone", 1983 g_variant_new ("(i)", 1984 arg_cooling_zone), 1985 G_DBUS_CALL_FLAGS_NONE, 1986 -1, 1987 cancellable, 1988 error); 1989 if (_ret == NULL) 1990 goto _out; 1991 g_variant_get (_ret, 1992 "()"); 1993 g_variant_unref (_ret); 1994 _out: 1995 return _ret != NULL; 1996 } 1997 1998 /** 1999 * fan_call_get_speed: 2000 * @proxy: A #FanProxy. 2001 * @cancellable: (allow-none): A #GCancellable or %NULL. 2002 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 2003 * @user_data: User data to pass to @callback. 2004 * 2005 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-Fan.getSpeed">getSpeed()</link> D-Bus method on @proxy. 2006 * 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. 2007 * You can then call fan_call_get_speed_finish() to get the result of the operation. 2008 * 2009 * See fan_call_get_speed_sync() for the synchronous, blocking version of this method. 2010 */ 2011 void 2012 fan_call_get_speed ( 2013 Fan *proxy, 2014 GCancellable *cancellable, 2015 GAsyncReadyCallback callback, 2016 gpointer user_data) 2017 { 2018 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 2019 "getSpeed", 2020 g_variant_new ("()"), 2021 G_DBUS_CALL_FLAGS_NONE, 2022 -1, 2023 cancellable, 2024 callback, 2025 user_data); 2026 } 2027 2028 /** 2029 * fan_call_get_speed_finish: 2030 * @proxy: A #FanProxy. 2031 * @out_speed: (out): Return location for return parameter or %NULL to ignore. 2032 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to fan_call_get_speed(). 2033 * @error: Return location for error or %NULL. 2034 * 2035 * Finishes an operation started with fan_call_get_speed(). 2036 * 2037 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 2038 */ 2039 gboolean 2040 fan_call_get_speed_finish ( 2041 Fan *proxy, 2042 gint *out_speed, 2043 GAsyncResult *res, 2044 GError **error) 2045 { 2046 GVariant *_ret; 2047 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 2048 if (_ret == NULL) 2049 goto _out; 2050 g_variant_get (_ret, 2051 "(i)", 2052 out_speed); 2053 g_variant_unref (_ret); 2054 _out: 2055 return _ret != NULL; 2056 } 2057 2058 /** 2059 * fan_call_get_speed_sync: 2060 * @proxy: A #FanProxy. 2061 * @out_speed: (out): Return location for return parameter or %NULL to ignore. 2062 * @cancellable: (allow-none): A #GCancellable or %NULL. 2063 * @error: Return location for error or %NULL. 2064 * 2065 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-Fan.getSpeed">getSpeed()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 2066 * 2067 * See fan_call_get_speed() for the asynchronous version of this method. 2068 * 2069 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 2070 */ 2071 gboolean 2072 fan_call_get_speed_sync ( 2073 Fan *proxy, 2074 gint *out_speed, 2075 GCancellable *cancellable, 2076 GError **error) 2077 { 2078 GVariant *_ret; 2079 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 2080 "getSpeed", 2081 g_variant_new ("()"), 2082 G_DBUS_CALL_FLAGS_NONE, 2083 -1, 2084 cancellable, 2085 error); 2086 if (_ret == NULL) 2087 goto _out; 2088 g_variant_get (_ret, 2089 "(i)", 2090 out_speed); 2091 g_variant_unref (_ret); 2092 _out: 2093 return _ret != NULL; 2094 } 2095 2096 /** 2097 * fan_call_set_speed: 2098 * @proxy: A #FanProxy. 2099 * @arg_speed: Argument to pass with the method invocation. 2100 * @cancellable: (allow-none): A #GCancellable or %NULL. 2101 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 2102 * @user_data: User data to pass to @callback. 2103 * 2104 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-Fan.setSpeed">setSpeed()</link> D-Bus method on @proxy. 2105 * 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. 2106 * You can then call fan_call_set_speed_finish() to get the result of the operation. 2107 * 2108 * See fan_call_set_speed_sync() for the synchronous, blocking version of this method. 2109 */ 2110 void 2111 fan_call_set_speed ( 2112 Fan *proxy, 2113 gint arg_speed, 2114 GCancellable *cancellable, 2115 GAsyncReadyCallback callback, 2116 gpointer user_data) 2117 { 2118 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 2119 "setSpeed", 2120 g_variant_new ("(i)", 2121 arg_speed), 2122 G_DBUS_CALL_FLAGS_NONE, 2123 -1, 2124 cancellable, 2125 callback, 2126 user_data); 2127 } 2128 2129 /** 2130 * fan_call_set_speed_finish: 2131 * @proxy: A #FanProxy. 2132 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to fan_call_set_speed(). 2133 * @error: Return location for error or %NULL. 2134 * 2135 * Finishes an operation started with fan_call_set_speed(). 2136 * 2137 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 2138 */ 2139 gboolean 2140 fan_call_set_speed_finish ( 2141 Fan *proxy, 2142 GAsyncResult *res, 2143 GError **error) 2144 { 2145 GVariant *_ret; 2146 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 2147 if (_ret == NULL) 2148 goto _out; 2149 g_variant_get (_ret, 2150 "()"); 2151 g_variant_unref (_ret); 2152 _out: 2153 return _ret != NULL; 2154 } 2155 2156 /** 2157 * fan_call_set_speed_sync: 2158 * @proxy: A #FanProxy. 2159 * @arg_speed: Argument to pass with the method invocation. 2160 * @cancellable: (allow-none): A #GCancellable or %NULL. 2161 * @error: Return location for error or %NULL. 2162 * 2163 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-Fan.setSpeed">setSpeed()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 2164 * 2165 * See fan_call_set_speed() for the asynchronous version of this method. 2166 * 2167 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 2168 */ 2169 gboolean 2170 fan_call_set_speed_sync ( 2171 Fan *proxy, 2172 gint arg_speed, 2173 GCancellable *cancellable, 2174 GError **error) 2175 { 2176 GVariant *_ret; 2177 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 2178 "setSpeed", 2179 g_variant_new ("(i)", 2180 arg_speed), 2181 G_DBUS_CALL_FLAGS_NONE, 2182 -1, 2183 cancellable, 2184 error); 2185 if (_ret == NULL) 2186 goto _out; 2187 g_variant_get (_ret, 2188 "()"); 2189 g_variant_unref (_ret); 2190 _out: 2191 return _ret != NULL; 2192 } 2193 2194 /** 2195 * fan_complete_set_cooling_zone: 2196 * @object: A #Fan. 2197 * @invocation: (transfer full): A #GDBusMethodInvocation. 2198 * 2199 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-Fan.setCoolingZone">setCoolingZone()</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. 2200 * 2201 * This method will free @invocation, you cannot use it afterwards. 2202 */ 2203 void 2204 fan_complete_set_cooling_zone ( 2205 Fan *object, 2206 GDBusMethodInvocation *invocation) 2207 { 2208 g_dbus_method_invocation_return_value (invocation, 2209 g_variant_new ("()")); 2210 } 2211 2212 /** 2213 * fan_complete_get_speed: 2214 * @object: A #Fan. 2215 * @invocation: (transfer full): A #GDBusMethodInvocation. 2216 * @speed: Parameter to return. 2217 * 2218 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-Fan.getSpeed">getSpeed()</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. 2219 * 2220 * This method will free @invocation, you cannot use it afterwards. 2221 */ 2222 void 2223 fan_complete_get_speed ( 2224 Fan *object, 2225 GDBusMethodInvocation *invocation, 2226 gint speed) 2227 { 2228 g_dbus_method_invocation_return_value (invocation, 2229 g_variant_new ("(i)", 2230 speed)); 2231 } 2232 2233 /** 2234 * fan_complete_set_speed: 2235 * @object: A #Fan. 2236 * @invocation: (transfer full): A #GDBusMethodInvocation. 2237 * 2238 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-Fan.setSpeed">setSpeed()</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. 2239 * 2240 * This method will free @invocation, you cannot use it afterwards. 2241 */ 2242 void 2243 fan_complete_set_speed ( 2244 Fan *object, 2245 GDBusMethodInvocation *invocation) 2246 { 2247 g_dbus_method_invocation_return_value (invocation, 2248 g_variant_new ("()")); 2249 } 2250 2251 /* ------------------------------------------------------------------------ */ 2252 2253 /** 2254 * FanProxy: 2255 * 2256 * The #FanProxy structure contains only private data and should only be accessed using the provided API. 2257 */ 2258 2259 /** 2260 * FanProxyClass: 2261 * @parent_class: The parent class. 2262 * 2263 * Class structure for #FanProxy. 2264 */ 2265 2266 struct _FanProxyPrivate 2267 { 2268 GData *qdata; 2269 }; 2270 2271 static void fan_proxy_iface_init (FanIface *iface); 2272 2273 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 2274 G_DEFINE_TYPE_WITH_CODE (FanProxy, fan_proxy, G_TYPE_DBUS_PROXY, 2275 G_ADD_PRIVATE (FanProxy) 2276 G_IMPLEMENT_INTERFACE (TYPE_FAN, fan_proxy_iface_init)); 2277 2278 #else 2279 G_DEFINE_TYPE_WITH_CODE (FanProxy, fan_proxy, G_TYPE_DBUS_PROXY, 2280 G_IMPLEMENT_INTERFACE (TYPE_FAN, fan_proxy_iface_init)); 2281 2282 #endif 2283 static void 2284 fan_proxy_finalize (GObject *object) 2285 { 2286 FanProxy *proxy = FAN_PROXY (object); 2287 g_datalist_clear (&proxy->priv->qdata); 2288 G_OBJECT_CLASS (fan_proxy_parent_class)->finalize (object); 2289 } 2290 2291 static void 2292 fan_proxy_get_property (GObject *object, 2293 guint prop_id, 2294 GValue *value, 2295 GParamSpec *pspec G_GNUC_UNUSED) 2296 { 2297 const _ExtendedGDBusPropertyInfo *info; 2298 GVariant *variant; 2299 g_assert (prop_id != 0 && prop_id - 1 < 3); 2300 info = _fan_property_info_pointers[prop_id - 1]; 2301 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (object), info->parent_struct.name); 2302 if (info->use_gvariant) 2303 { 2304 g_value_set_variant (value, variant); 2305 } 2306 else 2307 { 2308 if (variant != NULL) 2309 g_dbus_gvariant_to_gvalue (variant, value); 2310 } 2311 if (variant != NULL) 2312 g_variant_unref (variant); 2313 } 2314 2315 static void 2316 fan_proxy_set_property_cb (GDBusProxy *proxy, 2317 GAsyncResult *res, 2318 gpointer user_data) 2319 { 2320 const _ExtendedGDBusPropertyInfo *info = user_data; 2321 GError *error; 2322 GVariant *_ret; 2323 error = NULL; 2324 _ret = g_dbus_proxy_call_finish (proxy, res, &error); 2325 if (!_ret) 2326 { 2327 g_warning ("Error setting property '%s' on interface org.openbmc.Fan: %s (%s, %d)", 2328 info->parent_struct.name, 2329 error->message, g_quark_to_string (error->domain), error->code); 2330 g_error_free (error); 2331 } 2332 else 2333 { 2334 g_variant_unref (_ret); 2335 } 2336 } 2337 2338 static void 2339 fan_proxy_set_property (GObject *object, 2340 guint prop_id, 2341 const GValue *value, 2342 GParamSpec *pspec G_GNUC_UNUSED) 2343 { 2344 const _ExtendedGDBusPropertyInfo *info; 2345 GVariant *variant; 2346 g_assert (prop_id != 0 && prop_id - 1 < 3); 2347 info = _fan_property_info_pointers[prop_id - 1]; 2348 variant = g_dbus_gvalue_to_gvariant (value, G_VARIANT_TYPE (info->parent_struct.signature)); 2349 g_dbus_proxy_call (G_DBUS_PROXY (object), 2350 "org.freedesktop.DBus.Properties.Set", 2351 g_variant_new ("(ssv)", "org.openbmc.Fan", info->parent_struct.name, variant), 2352 G_DBUS_CALL_FLAGS_NONE, 2353 -1, 2354 NULL, (GAsyncReadyCallback) fan_proxy_set_property_cb, (GDBusPropertyInfo *) &info->parent_struct); 2355 g_variant_unref (variant); 2356 } 2357 2358 static void 2359 fan_proxy_g_signal (GDBusProxy *proxy, 2360 const gchar *sender_name G_GNUC_UNUSED, 2361 const gchar *signal_name, 2362 GVariant *parameters) 2363 { 2364 _ExtendedGDBusSignalInfo *info; 2365 GVariantIter iter; 2366 GVariant *child; 2367 GValue *paramv; 2368 guint num_params; 2369 guint n; 2370 guint signal_id; 2371 info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_fan_interface_info.parent_struct, signal_name); 2372 if (info == NULL) 2373 return; 2374 num_params = g_variant_n_children (parameters); 2375 paramv = g_new0 (GValue, num_params + 1); 2376 g_value_init (¶mv[0], TYPE_FAN); 2377 g_value_set_object (¶mv[0], proxy); 2378 g_variant_iter_init (&iter, parameters); 2379 n = 1; 2380 while ((child = g_variant_iter_next_value (&iter)) != NULL) 2381 { 2382 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1]; 2383 if (arg_info->use_gvariant) 2384 { 2385 g_value_init (¶mv[n], G_TYPE_VARIANT); 2386 g_value_set_variant (¶mv[n], child); 2387 n++; 2388 } 2389 else 2390 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 2391 g_variant_unref (child); 2392 } 2393 signal_id = g_signal_lookup (info->signal_name, TYPE_FAN); 2394 g_signal_emitv (paramv, signal_id, 0, NULL); 2395 for (n = 0; n < num_params + 1; n++) 2396 g_value_unset (¶mv[n]); 2397 g_free (paramv); 2398 } 2399 2400 static void 2401 fan_proxy_g_properties_changed (GDBusProxy *_proxy, 2402 GVariant *changed_properties, 2403 const gchar *const *invalidated_properties) 2404 { 2405 FanProxy *proxy = FAN_PROXY (_proxy); 2406 guint n; 2407 const gchar *key; 2408 GVariantIter *iter; 2409 _ExtendedGDBusPropertyInfo *info; 2410 g_variant_get (changed_properties, "a{sv}", &iter); 2411 while (g_variant_iter_next (iter, "{&sv}", &key, NULL)) 2412 { 2413 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_fan_interface_info.parent_struct, key); 2414 g_datalist_remove_data (&proxy->priv->qdata, key); 2415 if (info != NULL) 2416 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 2417 } 2418 g_variant_iter_free (iter); 2419 for (n = 0; invalidated_properties[n] != NULL; n++) 2420 { 2421 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_fan_interface_info.parent_struct, invalidated_properties[n]); 2422 g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]); 2423 if (info != NULL) 2424 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 2425 } 2426 } 2427 2428 static gint 2429 fan_proxy_get_speed (Fan *object) 2430 { 2431 FanProxy *proxy = FAN_PROXY (object); 2432 GVariant *variant; 2433 gint value = 0; 2434 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "speed"); 2435 if (variant != NULL) 2436 { 2437 value = g_variant_get_int32 (variant); 2438 g_variant_unref (variant); 2439 } 2440 return value; 2441 } 2442 2443 static gint 2444 fan_proxy_get_cooling_zone (Fan *object) 2445 { 2446 FanProxy *proxy = FAN_PROXY (object); 2447 GVariant *variant; 2448 gint value = 0; 2449 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "cooling_zone"); 2450 if (variant != NULL) 2451 { 2452 value = g_variant_get_int32 (variant); 2453 g_variant_unref (variant); 2454 } 2455 return value; 2456 } 2457 2458 static gint 2459 fan_proxy_get_pwm_num (Fan *object) 2460 { 2461 FanProxy *proxy = FAN_PROXY (object); 2462 GVariant *variant; 2463 gint value = 0; 2464 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "pwm_num"); 2465 if (variant != NULL) 2466 { 2467 value = g_variant_get_int32 (variant); 2468 g_variant_unref (variant); 2469 } 2470 return value; 2471 } 2472 2473 static void 2474 fan_proxy_init (FanProxy *proxy) 2475 { 2476 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 2477 proxy->priv = fan_proxy_get_instance_private (proxy); 2478 #else 2479 proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, TYPE_FAN_PROXY, FanProxyPrivate); 2480 #endif 2481 2482 g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), fan_interface_info ()); 2483 } 2484 2485 static void 2486 fan_proxy_class_init (FanProxyClass *klass) 2487 { 2488 GObjectClass *gobject_class; 2489 GDBusProxyClass *proxy_class; 2490 2491 gobject_class = G_OBJECT_CLASS (klass); 2492 gobject_class->finalize = fan_proxy_finalize; 2493 gobject_class->get_property = fan_proxy_get_property; 2494 gobject_class->set_property = fan_proxy_set_property; 2495 2496 proxy_class = G_DBUS_PROXY_CLASS (klass); 2497 proxy_class->g_signal = fan_proxy_g_signal; 2498 proxy_class->g_properties_changed = fan_proxy_g_properties_changed; 2499 2500 fan_override_properties (gobject_class, 1); 2501 2502 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 2503 g_type_class_add_private (klass, sizeof (FanProxyPrivate)); 2504 #endif 2505 } 2506 2507 static void 2508 fan_proxy_iface_init (FanIface *iface) 2509 { 2510 iface->get_speed = fan_proxy_get_speed; 2511 iface->get_cooling_zone = fan_proxy_get_cooling_zone; 2512 iface->get_pwm_num = fan_proxy_get_pwm_num; 2513 } 2514 2515 /** 2516 * fan_proxy_new: 2517 * @connection: A #GDBusConnection. 2518 * @flags: Flags from the #GDBusProxyFlags enumeration. 2519 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 2520 * @object_path: An object path. 2521 * @cancellable: (allow-none): A #GCancellable or %NULL. 2522 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 2523 * @user_data: User data to pass to @callback. 2524 * 2525 * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Fan.top_of_page">org.openbmc.Fan</link>. See g_dbus_proxy_new() for more details. 2526 * 2527 * 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. 2528 * You can then call fan_proxy_new_finish() to get the result of the operation. 2529 * 2530 * See fan_proxy_new_sync() for the synchronous, blocking version of this constructor. 2531 */ 2532 void 2533 fan_proxy_new ( 2534 GDBusConnection *connection, 2535 GDBusProxyFlags flags, 2536 const gchar *name, 2537 const gchar *object_path, 2538 GCancellable *cancellable, 2539 GAsyncReadyCallback callback, 2540 gpointer user_data) 2541 { 2542 g_async_initable_new_async (TYPE_FAN_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.Fan", NULL); 2543 } 2544 2545 /** 2546 * fan_proxy_new_finish: 2547 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to fan_proxy_new(). 2548 * @error: Return location for error or %NULL 2549 * 2550 * Finishes an operation started with fan_proxy_new(). 2551 * 2552 * Returns: (transfer full) (type FanProxy): The constructed proxy object or %NULL if @error is set. 2553 */ 2554 Fan * 2555 fan_proxy_new_finish ( 2556 GAsyncResult *res, 2557 GError **error) 2558 { 2559 GObject *ret; 2560 GObject *source_object; 2561 source_object = g_async_result_get_source_object (res); 2562 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 2563 g_object_unref (source_object); 2564 if (ret != NULL) 2565 return FAN (ret); 2566 else 2567 return NULL; 2568 } 2569 2570 /** 2571 * fan_proxy_new_sync: 2572 * @connection: A #GDBusConnection. 2573 * @flags: Flags from the #GDBusProxyFlags enumeration. 2574 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 2575 * @object_path: An object path. 2576 * @cancellable: (allow-none): A #GCancellable or %NULL. 2577 * @error: Return location for error or %NULL 2578 * 2579 * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Fan.top_of_page">org.openbmc.Fan</link>. See g_dbus_proxy_new_sync() for more details. 2580 * 2581 * The calling thread is blocked until a reply is received. 2582 * 2583 * See fan_proxy_new() for the asynchronous version of this constructor. 2584 * 2585 * Returns: (transfer full) (type FanProxy): The constructed proxy object or %NULL if @error is set. 2586 */ 2587 Fan * 2588 fan_proxy_new_sync ( 2589 GDBusConnection *connection, 2590 GDBusProxyFlags flags, 2591 const gchar *name, 2592 const gchar *object_path, 2593 GCancellable *cancellable, 2594 GError **error) 2595 { 2596 GInitable *ret; 2597 ret = g_initable_new (TYPE_FAN_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.Fan", NULL); 2598 if (ret != NULL) 2599 return FAN (ret); 2600 else 2601 return NULL; 2602 } 2603 2604 2605 /** 2606 * fan_proxy_new_for_bus: 2607 * @bus_type: A #GBusType. 2608 * @flags: Flags from the #GDBusProxyFlags enumeration. 2609 * @name: A bus name (well-known or unique). 2610 * @object_path: An object path. 2611 * @cancellable: (allow-none): A #GCancellable or %NULL. 2612 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 2613 * @user_data: User data to pass to @callback. 2614 * 2615 * Like fan_proxy_new() but takes a #GBusType instead of a #GDBusConnection. 2616 * 2617 * 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. 2618 * You can then call fan_proxy_new_for_bus_finish() to get the result of the operation. 2619 * 2620 * See fan_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor. 2621 */ 2622 void 2623 fan_proxy_new_for_bus ( 2624 GBusType bus_type, 2625 GDBusProxyFlags flags, 2626 const gchar *name, 2627 const gchar *object_path, 2628 GCancellable *cancellable, 2629 GAsyncReadyCallback callback, 2630 gpointer user_data) 2631 { 2632 g_async_initable_new_async (TYPE_FAN_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.Fan", NULL); 2633 } 2634 2635 /** 2636 * fan_proxy_new_for_bus_finish: 2637 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to fan_proxy_new_for_bus(). 2638 * @error: Return location for error or %NULL 2639 * 2640 * Finishes an operation started with fan_proxy_new_for_bus(). 2641 * 2642 * Returns: (transfer full) (type FanProxy): The constructed proxy object or %NULL if @error is set. 2643 */ 2644 Fan * 2645 fan_proxy_new_for_bus_finish ( 2646 GAsyncResult *res, 2647 GError **error) 2648 { 2649 GObject *ret; 2650 GObject *source_object; 2651 source_object = g_async_result_get_source_object (res); 2652 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 2653 g_object_unref (source_object); 2654 if (ret != NULL) 2655 return FAN (ret); 2656 else 2657 return NULL; 2658 } 2659 2660 /** 2661 * fan_proxy_new_for_bus_sync: 2662 * @bus_type: A #GBusType. 2663 * @flags: Flags from the #GDBusProxyFlags enumeration. 2664 * @name: A bus name (well-known or unique). 2665 * @object_path: An object path. 2666 * @cancellable: (allow-none): A #GCancellable or %NULL. 2667 * @error: Return location for error or %NULL 2668 * 2669 * Like fan_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection. 2670 * 2671 * The calling thread is blocked until a reply is received. 2672 * 2673 * See fan_proxy_new_for_bus() for the asynchronous version of this constructor. 2674 * 2675 * Returns: (transfer full) (type FanProxy): The constructed proxy object or %NULL if @error is set. 2676 */ 2677 Fan * 2678 fan_proxy_new_for_bus_sync ( 2679 GBusType bus_type, 2680 GDBusProxyFlags flags, 2681 const gchar *name, 2682 const gchar *object_path, 2683 GCancellable *cancellable, 2684 GError **error) 2685 { 2686 GInitable *ret; 2687 ret = g_initable_new (TYPE_FAN_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.Fan", NULL); 2688 if (ret != NULL) 2689 return FAN (ret); 2690 else 2691 return NULL; 2692 } 2693 2694 2695 /* ------------------------------------------------------------------------ */ 2696 2697 /** 2698 * FanSkeleton: 2699 * 2700 * The #FanSkeleton structure contains only private data and should only be accessed using the provided API. 2701 */ 2702 2703 /** 2704 * FanSkeletonClass: 2705 * @parent_class: The parent class. 2706 * 2707 * Class structure for #FanSkeleton. 2708 */ 2709 2710 struct _FanSkeletonPrivate 2711 { 2712 GValue *properties; 2713 GList *changed_properties; 2714 GSource *changed_properties_idle_source; 2715 GMainContext *context; 2716 GMutex lock; 2717 }; 2718 2719 static void 2720 _fan_skeleton_handle_method_call ( 2721 GDBusConnection *connection G_GNUC_UNUSED, 2722 const gchar *sender G_GNUC_UNUSED, 2723 const gchar *object_path G_GNUC_UNUSED, 2724 const gchar *interface_name, 2725 const gchar *method_name, 2726 GVariant *parameters, 2727 GDBusMethodInvocation *invocation, 2728 gpointer user_data) 2729 { 2730 FanSkeleton *skeleton = FAN_SKELETON (user_data); 2731 _ExtendedGDBusMethodInfo *info; 2732 GVariantIter iter; 2733 GVariant *child; 2734 GValue *paramv; 2735 guint num_params; 2736 guint num_extra; 2737 guint n; 2738 guint signal_id; 2739 GValue return_value = G_VALUE_INIT; 2740 info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation); 2741 g_assert (info != NULL); 2742 num_params = g_variant_n_children (parameters); 2743 num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra); 2744 n = 0; 2745 g_value_init (¶mv[n], TYPE_FAN); 2746 g_value_set_object (¶mv[n++], skeleton); 2747 g_value_init (¶mv[n], G_TYPE_DBUS_METHOD_INVOCATION); 2748 g_value_set_object (¶mv[n++], invocation); 2749 if (info->pass_fdlist) 2750 { 2751 #ifdef G_OS_UNIX 2752 g_value_init (¶mv[n], G_TYPE_UNIX_FD_LIST); 2753 g_value_set_object (¶mv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation))); 2754 #else 2755 g_assert_not_reached (); 2756 #endif 2757 } 2758 g_variant_iter_init (&iter, parameters); 2759 while ((child = g_variant_iter_next_value (&iter)) != NULL) 2760 { 2761 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra]; 2762 if (arg_info->use_gvariant) 2763 { 2764 g_value_init (¶mv[n], G_TYPE_VARIANT); 2765 g_value_set_variant (¶mv[n], child); 2766 n++; 2767 } 2768 else 2769 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 2770 g_variant_unref (child); 2771 } 2772 signal_id = g_signal_lookup (info->signal_name, TYPE_FAN); 2773 g_value_init (&return_value, G_TYPE_BOOLEAN); 2774 g_signal_emitv (paramv, signal_id, 0, &return_value); 2775 if (!g_value_get_boolean (&return_value)) 2776 g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name); 2777 g_value_unset (&return_value); 2778 for (n = 0; n < num_params + num_extra; n++) 2779 g_value_unset (¶mv[n]); 2780 g_free (paramv); 2781 } 2782 2783 static GVariant * 2784 _fan_skeleton_handle_get_property ( 2785 GDBusConnection *connection G_GNUC_UNUSED, 2786 const gchar *sender G_GNUC_UNUSED, 2787 const gchar *object_path G_GNUC_UNUSED, 2788 const gchar *interface_name G_GNUC_UNUSED, 2789 const gchar *property_name, 2790 GError **error, 2791 gpointer user_data) 2792 { 2793 FanSkeleton *skeleton = FAN_SKELETON (user_data); 2794 GValue value = G_VALUE_INIT; 2795 GParamSpec *pspec; 2796 _ExtendedGDBusPropertyInfo *info; 2797 GVariant *ret; 2798 ret = NULL; 2799 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_fan_interface_info.parent_struct, property_name); 2800 g_assert (info != NULL); 2801 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 2802 if (pspec == NULL) 2803 { 2804 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 2805 } 2806 else 2807 { 2808 g_value_init (&value, pspec->value_type); 2809 g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value); 2810 ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature)); 2811 g_value_unset (&value); 2812 } 2813 return ret; 2814 } 2815 2816 static gboolean 2817 _fan_skeleton_handle_set_property ( 2818 GDBusConnection *connection G_GNUC_UNUSED, 2819 const gchar *sender G_GNUC_UNUSED, 2820 const gchar *object_path G_GNUC_UNUSED, 2821 const gchar *interface_name G_GNUC_UNUSED, 2822 const gchar *property_name, 2823 GVariant *variant, 2824 GError **error, 2825 gpointer user_data) 2826 { 2827 FanSkeleton *skeleton = FAN_SKELETON (user_data); 2828 GValue value = G_VALUE_INIT; 2829 GParamSpec *pspec; 2830 _ExtendedGDBusPropertyInfo *info; 2831 gboolean ret; 2832 ret = FALSE; 2833 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_fan_interface_info.parent_struct, property_name); 2834 g_assert (info != NULL); 2835 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 2836 if (pspec == NULL) 2837 { 2838 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 2839 } 2840 else 2841 { 2842 if (info->use_gvariant) 2843 g_value_set_variant (&value, variant); 2844 else 2845 g_dbus_gvariant_to_gvalue (variant, &value); 2846 g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value); 2847 g_value_unset (&value); 2848 ret = TRUE; 2849 } 2850 return ret; 2851 } 2852 2853 static const GDBusInterfaceVTable _fan_skeleton_vtable = 2854 { 2855 _fan_skeleton_handle_method_call, 2856 _fan_skeleton_handle_get_property, 2857 _fan_skeleton_handle_set_property, 2858 {NULL} 2859 }; 2860 2861 static GDBusInterfaceInfo * 2862 fan_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 2863 { 2864 return fan_interface_info (); 2865 } 2866 2867 static GDBusInterfaceVTable * 2868 fan_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 2869 { 2870 return (GDBusInterfaceVTable *) &_fan_skeleton_vtable; 2871 } 2872 2873 static GVariant * 2874 fan_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton) 2875 { 2876 FanSkeleton *skeleton = FAN_SKELETON (_skeleton); 2877 2878 GVariantBuilder builder; 2879 guint n; 2880 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 2881 if (_fan_interface_info.parent_struct.properties == NULL) 2882 goto out; 2883 for (n = 0; _fan_interface_info.parent_struct.properties[n] != NULL; n++) 2884 { 2885 GDBusPropertyInfo *info = _fan_interface_info.parent_struct.properties[n]; 2886 if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE) 2887 { 2888 GVariant *value; 2889 value = _fan_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.Fan", info->name, NULL, skeleton); 2890 if (value != NULL) 2891 { 2892 g_variant_take_ref (value); 2893 g_variant_builder_add (&builder, "{sv}", info->name, value); 2894 g_variant_unref (value); 2895 } 2896 } 2897 } 2898 out: 2899 return g_variant_builder_end (&builder); 2900 } 2901 2902 static gboolean _fan_emit_changed (gpointer user_data); 2903 2904 static void 2905 fan_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton) 2906 { 2907 FanSkeleton *skeleton = FAN_SKELETON (_skeleton); 2908 gboolean emit_changed = FALSE; 2909 2910 g_mutex_lock (&skeleton->priv->lock); 2911 if (skeleton->priv->changed_properties_idle_source != NULL) 2912 { 2913 g_source_destroy (skeleton->priv->changed_properties_idle_source); 2914 skeleton->priv->changed_properties_idle_source = NULL; 2915 emit_changed = TRUE; 2916 } 2917 g_mutex_unlock (&skeleton->priv->lock); 2918 2919 if (emit_changed) 2920 _fan_emit_changed (skeleton); 2921 } 2922 2923 static void 2924 _fan_on_signal_speed_changed ( 2925 Fan *object, 2926 gint arg_speed) 2927 { 2928 FanSkeleton *skeleton = FAN_SKELETON (object); 2929 2930 GList *connections, *l; 2931 GVariant *signal_variant; 2932 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 2933 2934 signal_variant = g_variant_ref_sink (g_variant_new ("(i)", 2935 arg_speed)); 2936 for (l = connections; l != NULL; l = l->next) 2937 { 2938 GDBusConnection *connection = l->data; 2939 g_dbus_connection_emit_signal (connection, 2940 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.Fan", "SpeedChanged", 2941 signal_variant, NULL); 2942 } 2943 g_variant_unref (signal_variant); 2944 g_list_free_full (connections, g_object_unref); 2945 } 2946 2947 static void 2948 _fan_on_signal_tach_error ( 2949 Fan *object) 2950 { 2951 FanSkeleton *skeleton = FAN_SKELETON (object); 2952 2953 GList *connections, *l; 2954 GVariant *signal_variant; 2955 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 2956 2957 signal_variant = g_variant_ref_sink (g_variant_new ("()")); 2958 for (l = connections; l != NULL; l = l->next) 2959 { 2960 GDBusConnection *connection = l->data; 2961 g_dbus_connection_emit_signal (connection, 2962 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.Fan", "TachError", 2963 signal_variant, NULL); 2964 } 2965 g_variant_unref (signal_variant); 2966 g_list_free_full (connections, g_object_unref); 2967 } 2968 2969 static void fan_skeleton_iface_init (FanIface *iface); 2970 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 2971 G_DEFINE_TYPE_WITH_CODE (FanSkeleton, fan_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 2972 G_ADD_PRIVATE (FanSkeleton) 2973 G_IMPLEMENT_INTERFACE (TYPE_FAN, fan_skeleton_iface_init)); 2974 2975 #else 2976 G_DEFINE_TYPE_WITH_CODE (FanSkeleton, fan_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 2977 G_IMPLEMENT_INTERFACE (TYPE_FAN, fan_skeleton_iface_init)); 2978 2979 #endif 2980 static void 2981 fan_skeleton_finalize (GObject *object) 2982 { 2983 FanSkeleton *skeleton = FAN_SKELETON (object); 2984 guint n; 2985 for (n = 0; n < 3; n++) 2986 g_value_unset (&skeleton->priv->properties[n]); 2987 g_free (skeleton->priv->properties); 2988 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 2989 if (skeleton->priv->changed_properties_idle_source != NULL) 2990 g_source_destroy (skeleton->priv->changed_properties_idle_source); 2991 g_main_context_unref (skeleton->priv->context); 2992 g_mutex_clear (&skeleton->priv->lock); 2993 G_OBJECT_CLASS (fan_skeleton_parent_class)->finalize (object); 2994 } 2995 2996 static void 2997 fan_skeleton_get_property (GObject *object, 2998 guint prop_id, 2999 GValue *value, 3000 GParamSpec *pspec G_GNUC_UNUSED) 3001 { 3002 FanSkeleton *skeleton = FAN_SKELETON (object); 3003 g_assert (prop_id != 0 && prop_id - 1 < 3); 3004 g_mutex_lock (&skeleton->priv->lock); 3005 g_value_copy (&skeleton->priv->properties[prop_id - 1], value); 3006 g_mutex_unlock (&skeleton->priv->lock); 3007 } 3008 3009 static gboolean 3010 _fan_emit_changed (gpointer user_data) 3011 { 3012 FanSkeleton *skeleton = FAN_SKELETON (user_data); 3013 GList *l; 3014 GVariantBuilder builder; 3015 GVariantBuilder invalidated_builder; 3016 guint num_changes; 3017 3018 g_mutex_lock (&skeleton->priv->lock); 3019 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 3020 g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as")); 3021 for (l = skeleton->priv->changed_properties, num_changes = 0; l != NULL; l = l->next) 3022 { 3023 ChangedProperty *cp = l->data; 3024 GVariant *variant; 3025 const GValue *cur_value; 3026 3027 cur_value = &skeleton->priv->properties[cp->prop_id - 1]; 3028 if (!_g_value_equal (cur_value, &cp->orig_value)) 3029 { 3030 variant = g_dbus_gvalue_to_gvariant (cur_value, G_VARIANT_TYPE (cp->info->parent_struct.signature)); 3031 g_variant_builder_add (&builder, "{sv}", cp->info->parent_struct.name, variant); 3032 g_variant_unref (variant); 3033 num_changes++; 3034 } 3035 } 3036 if (num_changes > 0) 3037 { 3038 GList *connections, *ll; 3039 GVariant *signal_variant; 3040 signal_variant = g_variant_ref_sink (g_variant_new ("(sa{sv}as)", "org.openbmc.Fan", 3041 &builder, &invalidated_builder)); 3042 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 3043 for (ll = connections; ll != NULL; ll = ll->next) 3044 { 3045 GDBusConnection *connection = ll->data; 3046 3047 g_dbus_connection_emit_signal (connection, 3048 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), 3049 "org.freedesktop.DBus.Properties", 3050 "PropertiesChanged", 3051 signal_variant, 3052 NULL); 3053 } 3054 g_variant_unref (signal_variant); 3055 g_list_free_full (connections, g_object_unref); 3056 } 3057 else 3058 { 3059 g_variant_builder_clear (&builder); 3060 g_variant_builder_clear (&invalidated_builder); 3061 } 3062 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 3063 skeleton->priv->changed_properties = NULL; 3064 skeleton->priv->changed_properties_idle_source = NULL; 3065 g_mutex_unlock (&skeleton->priv->lock); 3066 return FALSE; 3067 } 3068 3069 static void 3070 _fan_schedule_emit_changed (FanSkeleton *skeleton, const _ExtendedGDBusPropertyInfo *info, guint prop_id, const GValue *orig_value) 3071 { 3072 ChangedProperty *cp; 3073 GList *l; 3074 cp = NULL; 3075 for (l = skeleton->priv->changed_properties; l != NULL; l = l->next) 3076 { 3077 ChangedProperty *i_cp = l->data; 3078 if (i_cp->info == info) 3079 { 3080 cp = i_cp; 3081 break; 3082 } 3083 } 3084 if (cp == NULL) 3085 { 3086 cp = g_new0 (ChangedProperty, 1); 3087 cp->prop_id = prop_id; 3088 cp->info = info; 3089 skeleton->priv->changed_properties = g_list_prepend (skeleton->priv->changed_properties, cp); 3090 g_value_init (&cp->orig_value, G_VALUE_TYPE (orig_value)); 3091 g_value_copy (orig_value, &cp->orig_value); 3092 } 3093 } 3094 3095 static void 3096 fan_skeleton_notify (GObject *object, 3097 GParamSpec *pspec G_GNUC_UNUSED) 3098 { 3099 FanSkeleton *skeleton = FAN_SKELETON (object); 3100 g_mutex_lock (&skeleton->priv->lock); 3101 if (skeleton->priv->changed_properties != NULL && 3102 skeleton->priv->changed_properties_idle_source == NULL) 3103 { 3104 skeleton->priv->changed_properties_idle_source = g_idle_source_new (); 3105 g_source_set_priority (skeleton->priv->changed_properties_idle_source, G_PRIORITY_DEFAULT); 3106 g_source_set_callback (skeleton->priv->changed_properties_idle_source, _fan_emit_changed, g_object_ref (skeleton), (GDestroyNotify) g_object_unref); 3107 g_source_set_name (skeleton->priv->changed_properties_idle_source, "[generated] _fan_emit_changed"); 3108 g_source_attach (skeleton->priv->changed_properties_idle_source, skeleton->priv->context); 3109 g_source_unref (skeleton->priv->changed_properties_idle_source); 3110 } 3111 g_mutex_unlock (&skeleton->priv->lock); 3112 } 3113 3114 static void 3115 fan_skeleton_set_property (GObject *object, 3116 guint prop_id, 3117 const GValue *value, 3118 GParamSpec *pspec) 3119 { 3120 FanSkeleton *skeleton = FAN_SKELETON (object); 3121 g_assert (prop_id != 0 && prop_id - 1 < 3); 3122 g_mutex_lock (&skeleton->priv->lock); 3123 g_object_freeze_notify (object); 3124 if (!_g_value_equal (value, &skeleton->priv->properties[prop_id - 1])) 3125 { 3126 if (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)) != NULL) 3127 _fan_schedule_emit_changed (skeleton, _fan_property_info_pointers[prop_id - 1], prop_id, &skeleton->priv->properties[prop_id - 1]); 3128 g_value_copy (value, &skeleton->priv->properties[prop_id - 1]); 3129 g_object_notify_by_pspec (object, pspec); 3130 } 3131 g_mutex_unlock (&skeleton->priv->lock); 3132 g_object_thaw_notify (object); 3133 } 3134 3135 static void 3136 fan_skeleton_init (FanSkeleton *skeleton) 3137 { 3138 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 3139 skeleton->priv = fan_skeleton_get_instance_private (skeleton); 3140 #else 3141 skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, TYPE_FAN_SKELETON, FanSkeletonPrivate); 3142 #endif 3143 3144 g_mutex_init (&skeleton->priv->lock); 3145 skeleton->priv->context = g_main_context_ref_thread_default (); 3146 skeleton->priv->properties = g_new0 (GValue, 3); 3147 g_value_init (&skeleton->priv->properties[0], G_TYPE_INT); 3148 g_value_init (&skeleton->priv->properties[1], G_TYPE_INT); 3149 g_value_init (&skeleton->priv->properties[2], G_TYPE_INT); 3150 } 3151 3152 static gint 3153 fan_skeleton_get_speed (Fan *object) 3154 { 3155 FanSkeleton *skeleton = FAN_SKELETON (object); 3156 gint value; 3157 g_mutex_lock (&skeleton->priv->lock); 3158 value = g_value_get_int (&(skeleton->priv->properties[0])); 3159 g_mutex_unlock (&skeleton->priv->lock); 3160 return value; 3161 } 3162 3163 static gint 3164 fan_skeleton_get_cooling_zone (Fan *object) 3165 { 3166 FanSkeleton *skeleton = FAN_SKELETON (object); 3167 gint value; 3168 g_mutex_lock (&skeleton->priv->lock); 3169 value = g_value_get_int (&(skeleton->priv->properties[1])); 3170 g_mutex_unlock (&skeleton->priv->lock); 3171 return value; 3172 } 3173 3174 static gint 3175 fan_skeleton_get_pwm_num (Fan *object) 3176 { 3177 FanSkeleton *skeleton = FAN_SKELETON (object); 3178 gint value; 3179 g_mutex_lock (&skeleton->priv->lock); 3180 value = g_value_get_int (&(skeleton->priv->properties[2])); 3181 g_mutex_unlock (&skeleton->priv->lock); 3182 return value; 3183 } 3184 3185 static void 3186 fan_skeleton_class_init (FanSkeletonClass *klass) 3187 { 3188 GObjectClass *gobject_class; 3189 GDBusInterfaceSkeletonClass *skeleton_class; 3190 3191 gobject_class = G_OBJECT_CLASS (klass); 3192 gobject_class->finalize = fan_skeleton_finalize; 3193 gobject_class->get_property = fan_skeleton_get_property; 3194 gobject_class->set_property = fan_skeleton_set_property; 3195 gobject_class->notify = fan_skeleton_notify; 3196 3197 3198 fan_override_properties (gobject_class, 1); 3199 3200 skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass); 3201 skeleton_class->get_info = fan_skeleton_dbus_interface_get_info; 3202 skeleton_class->get_properties = fan_skeleton_dbus_interface_get_properties; 3203 skeleton_class->flush = fan_skeleton_dbus_interface_flush; 3204 skeleton_class->get_vtable = fan_skeleton_dbus_interface_get_vtable; 3205 3206 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 3207 g_type_class_add_private (klass, sizeof (FanSkeletonPrivate)); 3208 #endif 3209 } 3210 3211 static void 3212 fan_skeleton_iface_init (FanIface *iface) 3213 { 3214 iface->speed_changed = _fan_on_signal_speed_changed; 3215 iface->tach_error = _fan_on_signal_tach_error; 3216 iface->get_speed = fan_skeleton_get_speed; 3217 iface->get_cooling_zone = fan_skeleton_get_cooling_zone; 3218 iface->get_pwm_num = fan_skeleton_get_pwm_num; 3219 } 3220 3221 /** 3222 * fan_skeleton_new: 3223 * 3224 * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Fan.top_of_page">org.openbmc.Fan</link>. 3225 * 3226 * Returns: (transfer full) (type FanSkeleton): The skeleton object. 3227 */ 3228 Fan * 3229 fan_skeleton_new (void) 3230 { 3231 return FAN (g_object_new (TYPE_FAN_SKELETON, NULL)); 3232 } 3233 3234 /* ------------------------------------------------------------------------ 3235 * Code for interface org.openbmc.SensorValue 3236 * ------------------------------------------------------------------------ 3237 */ 3238 3239 /** 3240 * SECTION:SensorValue 3241 * @title: SensorValue 3242 * @short_description: Generated C code for the org.openbmc.SensorValue D-Bus interface 3243 * 3244 * This section contains code for working with the <link linkend="gdbus-interface-org-openbmc-SensorValue.top_of_page">org.openbmc.SensorValue</link> D-Bus interface in C. 3245 */ 3246 3247 /* ---- Introspection data for org.openbmc.SensorValue ---- */ 3248 3249 static const _ExtendedGDBusMethodInfo _sensor_value_method_info_init = 3250 { 3251 { 3252 -1, 3253 (gchar *) "init", 3254 NULL, 3255 NULL, 3256 NULL 3257 }, 3258 "handle-init", 3259 FALSE 3260 }; 3261 3262 static const _ExtendedGDBusArgInfo _sensor_value_method_info_get_value_OUT_ARG_value = 3263 { 3264 { 3265 -1, 3266 (gchar *) "value", 3267 (gchar *) "v", 3268 NULL 3269 }, 3270 FALSE 3271 }; 3272 3273 static const _ExtendedGDBusArgInfo * const _sensor_value_method_info_get_value_OUT_ARG_pointers[] = 3274 { 3275 &_sensor_value_method_info_get_value_OUT_ARG_value, 3276 NULL 3277 }; 3278 3279 static const _ExtendedGDBusMethodInfo _sensor_value_method_info_get_value = 3280 { 3281 { 3282 -1, 3283 (gchar *) "getValue", 3284 NULL, 3285 (GDBusArgInfo **) &_sensor_value_method_info_get_value_OUT_ARG_pointers, 3286 NULL 3287 }, 3288 "handle-get-value", 3289 FALSE 3290 }; 3291 3292 static const _ExtendedGDBusArgInfo _sensor_value_method_info_set_value_IN_ARG_value = 3293 { 3294 { 3295 -1, 3296 (gchar *) "value", 3297 (gchar *) "v", 3298 NULL 3299 }, 3300 FALSE 3301 }; 3302 3303 static const _ExtendedGDBusArgInfo * const _sensor_value_method_info_set_value_IN_ARG_pointers[] = 3304 { 3305 &_sensor_value_method_info_set_value_IN_ARG_value, 3306 NULL 3307 }; 3308 3309 static const _ExtendedGDBusMethodInfo _sensor_value_method_info_set_value = 3310 { 3311 { 3312 -1, 3313 (gchar *) "setValue", 3314 (GDBusArgInfo **) &_sensor_value_method_info_set_value_IN_ARG_pointers, 3315 NULL, 3316 NULL 3317 }, 3318 "handle-set-value", 3319 FALSE 3320 }; 3321 3322 static const _ExtendedGDBusMethodInfo * const _sensor_value_method_info_pointers[] = 3323 { 3324 &_sensor_value_method_info_init, 3325 &_sensor_value_method_info_get_value, 3326 &_sensor_value_method_info_set_value, 3327 NULL 3328 }; 3329 3330 static const _ExtendedGDBusArgInfo _sensor_value_signal_info_changed_ARG_value = 3331 { 3332 { 3333 -1, 3334 (gchar *) "value", 3335 (gchar *) "v", 3336 NULL 3337 }, 3338 FALSE 3339 }; 3340 3341 static const _ExtendedGDBusArgInfo _sensor_value_signal_info_changed_ARG_units = 3342 { 3343 { 3344 -1, 3345 (gchar *) "units", 3346 (gchar *) "s", 3347 NULL 3348 }, 3349 FALSE 3350 }; 3351 3352 static const _ExtendedGDBusArgInfo * const _sensor_value_signal_info_changed_ARG_pointers[] = 3353 { 3354 &_sensor_value_signal_info_changed_ARG_value, 3355 &_sensor_value_signal_info_changed_ARG_units, 3356 NULL 3357 }; 3358 3359 static const _ExtendedGDBusSignalInfo _sensor_value_signal_info_changed = 3360 { 3361 { 3362 -1, 3363 (gchar *) "Changed", 3364 (GDBusArgInfo **) &_sensor_value_signal_info_changed_ARG_pointers, 3365 NULL 3366 }, 3367 "changed" 3368 }; 3369 3370 static const _ExtendedGDBusSignalInfo _sensor_value_signal_info_error = 3371 { 3372 { 3373 -1, 3374 (gchar *) "Error", 3375 NULL, 3376 NULL 3377 }, 3378 "error" 3379 }; 3380 3381 static const _ExtendedGDBusArgInfo _sensor_value_signal_info_heartbeat_ARG_bus_name = 3382 { 3383 { 3384 -1, 3385 (gchar *) "bus_name", 3386 (gchar *) "s", 3387 NULL 3388 }, 3389 FALSE 3390 }; 3391 3392 static const _ExtendedGDBusArgInfo * const _sensor_value_signal_info_heartbeat_ARG_pointers[] = 3393 { 3394 &_sensor_value_signal_info_heartbeat_ARG_bus_name, 3395 NULL 3396 }; 3397 3398 static const _ExtendedGDBusSignalInfo _sensor_value_signal_info_heartbeat = 3399 { 3400 { 3401 -1, 3402 (gchar *) "Heartbeat", 3403 (GDBusArgInfo **) &_sensor_value_signal_info_heartbeat_ARG_pointers, 3404 NULL 3405 }, 3406 "heartbeat" 3407 }; 3408 3409 static const _ExtendedGDBusSignalInfo * const _sensor_value_signal_info_pointers[] = 3410 { 3411 &_sensor_value_signal_info_changed, 3412 &_sensor_value_signal_info_error, 3413 &_sensor_value_signal_info_heartbeat, 3414 NULL 3415 }; 3416 3417 static const _ExtendedGDBusPropertyInfo _sensor_value_property_info_value = 3418 { 3419 { 3420 -1, 3421 (gchar *) "value", 3422 (gchar *) "v", 3423 G_DBUS_PROPERTY_INFO_FLAGS_READABLE, 3424 NULL 3425 }, 3426 "value", 3427 FALSE 3428 }; 3429 3430 static const _ExtendedGDBusPropertyInfo _sensor_value_property_info_units = 3431 { 3432 { 3433 -1, 3434 (gchar *) "units", 3435 (gchar *) "s", 3436 G_DBUS_PROPERTY_INFO_FLAGS_READABLE, 3437 NULL 3438 }, 3439 "units", 3440 FALSE 3441 }; 3442 3443 static const _ExtendedGDBusPropertyInfo _sensor_value_property_info_poll_interval = 3444 { 3445 { 3446 -1, 3447 (gchar *) "poll_interval", 3448 (gchar *) "i", 3449 G_DBUS_PROPERTY_INFO_FLAGS_READABLE | G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE, 3450 NULL 3451 }, 3452 "poll-interval", 3453 FALSE 3454 }; 3455 3456 static const _ExtendedGDBusPropertyInfo _sensor_value_property_info_heatbeat = 3457 { 3458 { 3459 -1, 3460 (gchar *) "heatbeat", 3461 (gchar *) "i", 3462 G_DBUS_PROPERTY_INFO_FLAGS_READABLE, 3463 NULL 3464 }, 3465 "heatbeat", 3466 FALSE 3467 }; 3468 3469 static const _ExtendedGDBusPropertyInfo _sensor_value_property_info_settable = 3470 { 3471 { 3472 -1, 3473 (gchar *) "settable", 3474 (gchar *) "b", 3475 G_DBUS_PROPERTY_INFO_FLAGS_READABLE, 3476 NULL 3477 }, 3478 "settable", 3479 FALSE 3480 }; 3481 3482 static const _ExtendedGDBusPropertyInfo * const _sensor_value_property_info_pointers[] = 3483 { 3484 &_sensor_value_property_info_value, 3485 &_sensor_value_property_info_units, 3486 &_sensor_value_property_info_poll_interval, 3487 &_sensor_value_property_info_heatbeat, 3488 &_sensor_value_property_info_settable, 3489 NULL 3490 }; 3491 3492 static const _ExtendedGDBusInterfaceInfo _sensor_value_interface_info = 3493 { 3494 { 3495 -1, 3496 (gchar *) "org.openbmc.SensorValue", 3497 (GDBusMethodInfo **) &_sensor_value_method_info_pointers, 3498 (GDBusSignalInfo **) &_sensor_value_signal_info_pointers, 3499 (GDBusPropertyInfo **) &_sensor_value_property_info_pointers, 3500 NULL 3501 }, 3502 "sensor-value", 3503 }; 3504 3505 3506 /** 3507 * sensor_value_interface_info: 3508 * 3509 * Gets a machine-readable description of the <link linkend="gdbus-interface-org-openbmc-SensorValue.top_of_page">org.openbmc.SensorValue</link> D-Bus interface. 3510 * 3511 * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free. 3512 */ 3513 GDBusInterfaceInfo * 3514 sensor_value_interface_info (void) 3515 { 3516 return (GDBusInterfaceInfo *) &_sensor_value_interface_info.parent_struct; 3517 } 3518 3519 /** 3520 * sensor_value_override_properties: 3521 * @klass: The class structure for a #GObject<!-- -->-derived class. 3522 * @property_id_begin: The property id to assign to the first overridden property. 3523 * 3524 * Overrides all #GObject properties in the #SensorValue interface for a concrete class. 3525 * The properties are overridden in the order they are defined. 3526 * 3527 * Returns: The last property id. 3528 */ 3529 guint 3530 sensor_value_override_properties (GObjectClass *klass, guint property_id_begin) 3531 { 3532 g_object_class_override_property (klass, property_id_begin++, "value"); 3533 g_object_class_override_property (klass, property_id_begin++, "units"); 3534 g_object_class_override_property (klass, property_id_begin++, "poll-interval"); 3535 g_object_class_override_property (klass, property_id_begin++, "heatbeat"); 3536 g_object_class_override_property (klass, property_id_begin++, "settable"); 3537 return property_id_begin - 1; 3538 } 3539 3540 3541 3542 /** 3543 * SensorValue: 3544 * 3545 * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorValue.top_of_page">org.openbmc.SensorValue</link>. 3546 */ 3547 3548 /** 3549 * SensorValueIface: 3550 * @parent_iface: The parent interface. 3551 * @handle_get_value: Handler for the #SensorValue::handle-get-value signal. 3552 * @handle_init: Handler for the #SensorValue::handle-init signal. 3553 * @handle_set_value: Handler for the #SensorValue::handle-set-value signal. 3554 * @get_heatbeat: Getter for the #SensorValue:heatbeat property. 3555 * @get_poll_interval: Getter for the #SensorValue:poll-interval property. 3556 * @get_settable: Getter for the #SensorValue:settable property. 3557 * @get_units: Getter for the #SensorValue:units property. 3558 * @get_value: Getter for the #SensorValue:value property. 3559 * @changed: Handler for the #SensorValue::changed signal. 3560 * @error: Handler for the #SensorValue::error signal. 3561 * @heartbeat: Handler for the #SensorValue::heartbeat signal. 3562 * 3563 * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorValue.top_of_page">org.openbmc.SensorValue</link>. 3564 */ 3565 3566 typedef SensorValueIface SensorValueInterface; 3567 G_DEFINE_INTERFACE (SensorValue, sensor_value, G_TYPE_OBJECT); 3568 3569 static void 3570 sensor_value_default_init (SensorValueIface *iface) 3571 { 3572 /* GObject signals for incoming D-Bus method calls: */ 3573 /** 3574 * SensorValue::handle-init: 3575 * @object: A #SensorValue. 3576 * @invocation: A #GDBusMethodInvocation. 3577 * 3578 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-SensorValue.init">init()</link> D-Bus method. 3579 * 3580 * 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 sensor_value_complete_init() 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. 3581 * 3582 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 3583 */ 3584 g_signal_new ("handle-init", 3585 G_TYPE_FROM_INTERFACE (iface), 3586 G_SIGNAL_RUN_LAST, 3587 G_STRUCT_OFFSET (SensorValueIface, handle_init), 3588 g_signal_accumulator_true_handled, 3589 NULL, 3590 g_cclosure_marshal_generic, 3591 G_TYPE_BOOLEAN, 3592 1, 3593 G_TYPE_DBUS_METHOD_INVOCATION); 3594 3595 /** 3596 * SensorValue::handle-get-value: 3597 * @object: A #SensorValue. 3598 * @invocation: A #GDBusMethodInvocation. 3599 * 3600 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-SensorValue.getValue">getValue()</link> D-Bus method. 3601 * 3602 * 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 sensor_value_complete_get_value() 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. 3603 * 3604 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 3605 */ 3606 g_signal_new ("handle-get-value", 3607 G_TYPE_FROM_INTERFACE (iface), 3608 G_SIGNAL_RUN_LAST, 3609 G_STRUCT_OFFSET (SensorValueIface, handle_get_value), 3610 g_signal_accumulator_true_handled, 3611 NULL, 3612 g_cclosure_marshal_generic, 3613 G_TYPE_BOOLEAN, 3614 1, 3615 G_TYPE_DBUS_METHOD_INVOCATION); 3616 3617 /** 3618 * SensorValue::handle-set-value: 3619 * @object: A #SensorValue. 3620 * @invocation: A #GDBusMethodInvocation. 3621 * @arg_value: Argument passed by remote caller. 3622 * 3623 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-SensorValue.setValue">setValue()</link> D-Bus method. 3624 * 3625 * 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 sensor_value_complete_set_value() 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. 3626 * 3627 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 3628 */ 3629 g_signal_new ("handle-set-value", 3630 G_TYPE_FROM_INTERFACE (iface), 3631 G_SIGNAL_RUN_LAST, 3632 G_STRUCT_OFFSET (SensorValueIface, handle_set_value), 3633 g_signal_accumulator_true_handled, 3634 NULL, 3635 g_cclosure_marshal_generic, 3636 G_TYPE_BOOLEAN, 3637 2, 3638 G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_VARIANT); 3639 3640 /* GObject signals for received D-Bus signals: */ 3641 /** 3642 * SensorValue::changed: 3643 * @object: A #SensorValue. 3644 * @arg_value: Argument. 3645 * @arg_units: Argument. 3646 * 3647 * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-openbmc-SensorValue.Changed">"Changed"</link> is received. 3648 * 3649 * 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. 3650 */ 3651 g_signal_new ("changed", 3652 G_TYPE_FROM_INTERFACE (iface), 3653 G_SIGNAL_RUN_LAST, 3654 G_STRUCT_OFFSET (SensorValueIface, changed), 3655 NULL, 3656 NULL, 3657 g_cclosure_marshal_generic, 3658 G_TYPE_NONE, 3659 2, G_TYPE_VARIANT, G_TYPE_STRING); 3660 3661 /** 3662 * SensorValue::error: 3663 * @object: A #SensorValue. 3664 * 3665 * 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. 3666 * 3667 * 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. 3668 */ 3669 g_signal_new ("error", 3670 G_TYPE_FROM_INTERFACE (iface), 3671 G_SIGNAL_RUN_LAST, 3672 G_STRUCT_OFFSET (SensorValueIface, error), 3673 NULL, 3674 NULL, 3675 g_cclosure_marshal_generic, 3676 G_TYPE_NONE, 3677 0); 3678 3679 /** 3680 * SensorValue::heartbeat: 3681 * @object: A #SensorValue. 3682 * @arg_bus_name: Argument. 3683 * 3684 * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-openbmc-SensorValue.Heartbeat">"Heartbeat"</link> is received. 3685 * 3686 * 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. 3687 */ 3688 g_signal_new ("heartbeat", 3689 G_TYPE_FROM_INTERFACE (iface), 3690 G_SIGNAL_RUN_LAST, 3691 G_STRUCT_OFFSET (SensorValueIface, heartbeat), 3692 NULL, 3693 NULL, 3694 g_cclosure_marshal_generic, 3695 G_TYPE_NONE, 3696 1, G_TYPE_STRING); 3697 3698 /* GObject properties for D-Bus properties: */ 3699 /** 3700 * SensorValue:value: 3701 * 3702 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-SensorValue.value">"value"</link>. 3703 * 3704 * 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. 3705 */ 3706 g_object_interface_install_property (iface, 3707 g_param_spec_variant ("value", "value", "value", G_VARIANT_TYPE ("v"), NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 3708 /** 3709 * SensorValue:units: 3710 * 3711 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-SensorValue.units">"units"</link>. 3712 * 3713 * 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. 3714 */ 3715 g_object_interface_install_property (iface, 3716 g_param_spec_string ("units", "units", "units", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 3717 /** 3718 * SensorValue:poll-interval: 3719 * 3720 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-SensorValue.poll_interval">"poll_interval"</link>. 3721 * 3722 * 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. 3723 */ 3724 g_object_interface_install_property (iface, 3725 g_param_spec_int ("poll-interval", "poll_interval", "poll_interval", G_MININT32, G_MAXINT32, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 3726 /** 3727 * SensorValue:heatbeat: 3728 * 3729 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-SensorValue.heatbeat">"heatbeat"</link>. 3730 * 3731 * 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. 3732 */ 3733 g_object_interface_install_property (iface, 3734 g_param_spec_int ("heatbeat", "heatbeat", "heatbeat", G_MININT32, G_MAXINT32, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 3735 /** 3736 * SensorValue:settable: 3737 * 3738 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-SensorValue.settable">"settable"</link>. 3739 * 3740 * 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. 3741 */ 3742 g_object_interface_install_property (iface, 3743 g_param_spec_boolean ("settable", "settable", "settable", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 3744 } 3745 3746 /** 3747 * sensor_value_get_value: (skip) 3748 * @object: A #SensorValue. 3749 * 3750 * Gets the value of the <link linkend="gdbus-property-org-openbmc-SensorValue.value">"value"</link> D-Bus property. 3751 * 3752 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 3753 * 3754 * <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 sensor_value_dup_value() if on another thread.</warning> 3755 * 3756 * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object. 3757 */ 3758 GVariant * 3759 sensor_value_get_value (SensorValue *object) 3760 { 3761 return SENSOR_VALUE_GET_IFACE (object)->get_value (object); 3762 } 3763 3764 /** 3765 * sensor_value_dup_value: (skip) 3766 * @object: A #SensorValue. 3767 * 3768 * Gets a copy of the <link linkend="gdbus-property-org-openbmc-SensorValue.value">"value"</link> D-Bus property. 3769 * 3770 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 3771 * 3772 * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value should be freed with g_variant_unref(). 3773 */ 3774 GVariant * 3775 sensor_value_dup_value (SensorValue *object) 3776 { 3777 GVariant *value; 3778 g_object_get (G_OBJECT (object), "value", &value, NULL); 3779 return value; 3780 } 3781 3782 /** 3783 * sensor_value_set_value: (skip) 3784 * @object: A #SensorValue. 3785 * @value: The value to set. 3786 * 3787 * Sets the <link linkend="gdbus-property-org-openbmc-SensorValue.value">"value"</link> D-Bus property to @value. 3788 * 3789 * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side. 3790 */ 3791 void 3792 sensor_value_set_value (SensorValue *object, GVariant *value) 3793 { 3794 g_object_set (G_OBJECT (object), "value", value, NULL); 3795 } 3796 3797 /** 3798 * sensor_value_get_units: (skip) 3799 * @object: A #SensorValue. 3800 * 3801 * Gets the value of the <link linkend="gdbus-property-org-openbmc-SensorValue.units">"units"</link> D-Bus property. 3802 * 3803 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 3804 * 3805 * <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 sensor_value_dup_units() if on another thread.</warning> 3806 * 3807 * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object. 3808 */ 3809 const gchar * 3810 sensor_value_get_units (SensorValue *object) 3811 { 3812 return SENSOR_VALUE_GET_IFACE (object)->get_units (object); 3813 } 3814 3815 /** 3816 * sensor_value_dup_units: (skip) 3817 * @object: A #SensorValue. 3818 * 3819 * Gets a copy of the <link linkend="gdbus-property-org-openbmc-SensorValue.units">"units"</link> D-Bus property. 3820 * 3821 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 3822 * 3823 * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value should be freed with g_free(). 3824 */ 3825 gchar * 3826 sensor_value_dup_units (SensorValue *object) 3827 { 3828 gchar *value; 3829 g_object_get (G_OBJECT (object), "units", &value, NULL); 3830 return value; 3831 } 3832 3833 /** 3834 * sensor_value_set_units: (skip) 3835 * @object: A #SensorValue. 3836 * @value: The value to set. 3837 * 3838 * Sets the <link linkend="gdbus-property-org-openbmc-SensorValue.units">"units"</link> D-Bus property to @value. 3839 * 3840 * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side. 3841 */ 3842 void 3843 sensor_value_set_units (SensorValue *object, const gchar *value) 3844 { 3845 g_object_set (G_OBJECT (object), "units", value, NULL); 3846 } 3847 3848 /** 3849 * sensor_value_get_poll_interval: (skip) 3850 * @object: A #SensorValue. 3851 * 3852 * Gets the value of the <link linkend="gdbus-property-org-openbmc-SensorValue.poll_interval">"poll_interval"</link> D-Bus property. 3853 * 3854 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 3855 * 3856 * Returns: The property value. 3857 */ 3858 gint 3859 sensor_value_get_poll_interval (SensorValue *object) 3860 { 3861 return SENSOR_VALUE_GET_IFACE (object)->get_poll_interval (object); 3862 } 3863 3864 /** 3865 * sensor_value_set_poll_interval: (skip) 3866 * @object: A #SensorValue. 3867 * @value: The value to set. 3868 * 3869 * Sets the <link linkend="gdbus-property-org-openbmc-SensorValue.poll_interval">"poll_interval"</link> D-Bus property to @value. 3870 * 3871 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 3872 */ 3873 void 3874 sensor_value_set_poll_interval (SensorValue *object, gint value) 3875 { 3876 g_object_set (G_OBJECT (object), "poll-interval", value, NULL); 3877 } 3878 3879 /** 3880 * sensor_value_get_heatbeat: (skip) 3881 * @object: A #SensorValue. 3882 * 3883 * Gets the value of the <link linkend="gdbus-property-org-openbmc-SensorValue.heatbeat">"heatbeat"</link> D-Bus property. 3884 * 3885 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 3886 * 3887 * Returns: The property value. 3888 */ 3889 gint 3890 sensor_value_get_heatbeat (SensorValue *object) 3891 { 3892 return SENSOR_VALUE_GET_IFACE (object)->get_heatbeat (object); 3893 } 3894 3895 /** 3896 * sensor_value_set_heatbeat: (skip) 3897 * @object: A #SensorValue. 3898 * @value: The value to set. 3899 * 3900 * Sets the <link linkend="gdbus-property-org-openbmc-SensorValue.heatbeat">"heatbeat"</link> D-Bus property to @value. 3901 * 3902 * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side. 3903 */ 3904 void 3905 sensor_value_set_heatbeat (SensorValue *object, gint value) 3906 { 3907 g_object_set (G_OBJECT (object), "heatbeat", value, NULL); 3908 } 3909 3910 /** 3911 * sensor_value_get_settable: (skip) 3912 * @object: A #SensorValue. 3913 * 3914 * Gets the value of the <link linkend="gdbus-property-org-openbmc-SensorValue.settable">"settable"</link> D-Bus property. 3915 * 3916 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 3917 * 3918 * Returns: The property value. 3919 */ 3920 gboolean 3921 sensor_value_get_settable (SensorValue *object) 3922 { 3923 return SENSOR_VALUE_GET_IFACE (object)->get_settable (object); 3924 } 3925 3926 /** 3927 * sensor_value_set_settable: (skip) 3928 * @object: A #SensorValue. 3929 * @value: The value to set. 3930 * 3931 * Sets the <link linkend="gdbus-property-org-openbmc-SensorValue.settable">"settable"</link> D-Bus property to @value. 3932 * 3933 * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side. 3934 */ 3935 void 3936 sensor_value_set_settable (SensorValue *object, gboolean value) 3937 { 3938 g_object_set (G_OBJECT (object), "settable", value, NULL); 3939 } 3940 3941 /** 3942 * sensor_value_emit_changed: 3943 * @object: A #SensorValue. 3944 * @arg_value: Argument to pass with the signal. 3945 * @arg_units: Argument to pass with the signal. 3946 * 3947 * Emits the <link linkend="gdbus-signal-org-openbmc-SensorValue.Changed">"Changed"</link> D-Bus signal. 3948 */ 3949 void 3950 sensor_value_emit_changed ( 3951 SensorValue *object, 3952 GVariant *arg_value, 3953 const gchar *arg_units) 3954 { 3955 g_signal_emit_by_name (object, "changed", arg_value, arg_units); 3956 } 3957 3958 /** 3959 * sensor_value_emit_error: 3960 * @object: A #SensorValue. 3961 * 3962 * Emits the <link linkend="gdbus-signal-org-openbmc-SensorValue.Error">"Error"</link> D-Bus signal. 3963 */ 3964 void 3965 sensor_value_emit_error ( 3966 SensorValue *object) 3967 { 3968 g_signal_emit_by_name (object, "error"); 3969 } 3970 3971 /** 3972 * sensor_value_emit_heartbeat: 3973 * @object: A #SensorValue. 3974 * @arg_bus_name: Argument to pass with the signal. 3975 * 3976 * Emits the <link linkend="gdbus-signal-org-openbmc-SensorValue.Heartbeat">"Heartbeat"</link> D-Bus signal. 3977 */ 3978 void 3979 sensor_value_emit_heartbeat ( 3980 SensorValue *object, 3981 const gchar *arg_bus_name) 3982 { 3983 g_signal_emit_by_name (object, "heartbeat", arg_bus_name); 3984 } 3985 3986 /** 3987 * sensor_value_call_init: 3988 * @proxy: A #SensorValueProxy. 3989 * @cancellable: (allow-none): A #GCancellable or %NULL. 3990 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 3991 * @user_data: User data to pass to @callback. 3992 * 3993 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-SensorValue.init">init()</link> D-Bus method on @proxy. 3994 * 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. 3995 * You can then call sensor_value_call_init_finish() to get the result of the operation. 3996 * 3997 * See sensor_value_call_init_sync() for the synchronous, blocking version of this method. 3998 */ 3999 void 4000 sensor_value_call_init ( 4001 SensorValue *proxy, 4002 GCancellable *cancellable, 4003 GAsyncReadyCallback callback, 4004 gpointer user_data) 4005 { 4006 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 4007 "init", 4008 g_variant_new ("()"), 4009 G_DBUS_CALL_FLAGS_NONE, 4010 -1, 4011 cancellable, 4012 callback, 4013 user_data); 4014 } 4015 4016 /** 4017 * sensor_value_call_init_finish: 4018 * @proxy: A #SensorValueProxy. 4019 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to sensor_value_call_init(). 4020 * @error: Return location for error or %NULL. 4021 * 4022 * Finishes an operation started with sensor_value_call_init(). 4023 * 4024 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 4025 */ 4026 gboolean 4027 sensor_value_call_init_finish ( 4028 SensorValue *proxy, 4029 GAsyncResult *res, 4030 GError **error) 4031 { 4032 GVariant *_ret; 4033 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 4034 if (_ret == NULL) 4035 goto _out; 4036 g_variant_get (_ret, 4037 "()"); 4038 g_variant_unref (_ret); 4039 _out: 4040 return _ret != NULL; 4041 } 4042 4043 /** 4044 * sensor_value_call_init_sync: 4045 * @proxy: A #SensorValueProxy. 4046 * @cancellable: (allow-none): A #GCancellable or %NULL. 4047 * @error: Return location for error or %NULL. 4048 * 4049 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-SensorValue.init">init()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 4050 * 4051 * See sensor_value_call_init() for the asynchronous version of this method. 4052 * 4053 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 4054 */ 4055 gboolean 4056 sensor_value_call_init_sync ( 4057 SensorValue *proxy, 4058 GCancellable *cancellable, 4059 GError **error) 4060 { 4061 GVariant *_ret; 4062 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 4063 "init", 4064 g_variant_new ("()"), 4065 G_DBUS_CALL_FLAGS_NONE, 4066 -1, 4067 cancellable, 4068 error); 4069 if (_ret == NULL) 4070 goto _out; 4071 g_variant_get (_ret, 4072 "()"); 4073 g_variant_unref (_ret); 4074 _out: 4075 return _ret != NULL; 4076 } 4077 4078 /** 4079 * sensor_value_call_get_value: 4080 * @proxy: A #SensorValueProxy. 4081 * @cancellable: (allow-none): A #GCancellable or %NULL. 4082 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 4083 * @user_data: User data to pass to @callback. 4084 * 4085 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-SensorValue.getValue">getValue()</link> D-Bus method on @proxy. 4086 * 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. 4087 * You can then call sensor_value_call_get_value_finish() to get the result of the operation. 4088 * 4089 * See sensor_value_call_get_value_sync() for the synchronous, blocking version of this method. 4090 */ 4091 void 4092 sensor_value_call_get_value ( 4093 SensorValue *proxy, 4094 GCancellable *cancellable, 4095 GAsyncReadyCallback callback, 4096 gpointer user_data) 4097 { 4098 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 4099 "getValue", 4100 g_variant_new ("()"), 4101 G_DBUS_CALL_FLAGS_NONE, 4102 -1, 4103 cancellable, 4104 callback, 4105 user_data); 4106 } 4107 4108 /** 4109 * sensor_value_call_get_value_finish: 4110 * @proxy: A #SensorValueProxy. 4111 * @out_value: (out): Return location for return parameter or %NULL to ignore. 4112 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to sensor_value_call_get_value(). 4113 * @error: Return location for error or %NULL. 4114 * 4115 * Finishes an operation started with sensor_value_call_get_value(). 4116 * 4117 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 4118 */ 4119 gboolean 4120 sensor_value_call_get_value_finish ( 4121 SensorValue *proxy, 4122 GVariant **out_value, 4123 GAsyncResult *res, 4124 GError **error) 4125 { 4126 GVariant *_ret; 4127 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 4128 if (_ret == NULL) 4129 goto _out; 4130 g_variant_get (_ret, 4131 "(@v)", 4132 out_value); 4133 g_variant_unref (_ret); 4134 _out: 4135 return _ret != NULL; 4136 } 4137 4138 /** 4139 * sensor_value_call_get_value_sync: 4140 * @proxy: A #SensorValueProxy. 4141 * @out_value: (out): Return location for return parameter or %NULL to ignore. 4142 * @cancellable: (allow-none): A #GCancellable or %NULL. 4143 * @error: Return location for error or %NULL. 4144 * 4145 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-SensorValue.getValue">getValue()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 4146 * 4147 * See sensor_value_call_get_value() for the asynchronous version of this method. 4148 * 4149 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 4150 */ 4151 gboolean 4152 sensor_value_call_get_value_sync ( 4153 SensorValue *proxy, 4154 GVariant **out_value, 4155 GCancellable *cancellable, 4156 GError **error) 4157 { 4158 GVariant *_ret; 4159 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 4160 "getValue", 4161 g_variant_new ("()"), 4162 G_DBUS_CALL_FLAGS_NONE, 4163 -1, 4164 cancellable, 4165 error); 4166 if (_ret == NULL) 4167 goto _out; 4168 g_variant_get (_ret, 4169 "(@v)", 4170 out_value); 4171 g_variant_unref (_ret); 4172 _out: 4173 return _ret != NULL; 4174 } 4175 4176 /** 4177 * sensor_value_call_set_value: 4178 * @proxy: A #SensorValueProxy. 4179 * @arg_value: Argument to pass with the method invocation. 4180 * @cancellable: (allow-none): A #GCancellable or %NULL. 4181 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 4182 * @user_data: User data to pass to @callback. 4183 * 4184 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-SensorValue.setValue">setValue()</link> D-Bus method on @proxy. 4185 * 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. 4186 * You can then call sensor_value_call_set_value_finish() to get the result of the operation. 4187 * 4188 * See sensor_value_call_set_value_sync() for the synchronous, blocking version of this method. 4189 */ 4190 void 4191 sensor_value_call_set_value ( 4192 SensorValue *proxy, 4193 GVariant *arg_value, 4194 GCancellable *cancellable, 4195 GAsyncReadyCallback callback, 4196 gpointer user_data) 4197 { 4198 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 4199 "setValue", 4200 g_variant_new ("(@v)", 4201 arg_value), 4202 G_DBUS_CALL_FLAGS_NONE, 4203 -1, 4204 cancellable, 4205 callback, 4206 user_data); 4207 } 4208 4209 /** 4210 * sensor_value_call_set_value_finish: 4211 * @proxy: A #SensorValueProxy. 4212 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to sensor_value_call_set_value(). 4213 * @error: Return location for error or %NULL. 4214 * 4215 * Finishes an operation started with sensor_value_call_set_value(). 4216 * 4217 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 4218 */ 4219 gboolean 4220 sensor_value_call_set_value_finish ( 4221 SensorValue *proxy, 4222 GAsyncResult *res, 4223 GError **error) 4224 { 4225 GVariant *_ret; 4226 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 4227 if (_ret == NULL) 4228 goto _out; 4229 g_variant_get (_ret, 4230 "()"); 4231 g_variant_unref (_ret); 4232 _out: 4233 return _ret != NULL; 4234 } 4235 4236 /** 4237 * sensor_value_call_set_value_sync: 4238 * @proxy: A #SensorValueProxy. 4239 * @arg_value: Argument to pass with the method invocation. 4240 * @cancellable: (allow-none): A #GCancellable or %NULL. 4241 * @error: Return location for error or %NULL. 4242 * 4243 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-SensorValue.setValue">setValue()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 4244 * 4245 * See sensor_value_call_set_value() for the asynchronous version of this method. 4246 * 4247 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 4248 */ 4249 gboolean 4250 sensor_value_call_set_value_sync ( 4251 SensorValue *proxy, 4252 GVariant *arg_value, 4253 GCancellable *cancellable, 4254 GError **error) 4255 { 4256 GVariant *_ret; 4257 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 4258 "setValue", 4259 g_variant_new ("(@v)", 4260 arg_value), 4261 G_DBUS_CALL_FLAGS_NONE, 4262 -1, 4263 cancellable, 4264 error); 4265 if (_ret == NULL) 4266 goto _out; 4267 g_variant_get (_ret, 4268 "()"); 4269 g_variant_unref (_ret); 4270 _out: 4271 return _ret != NULL; 4272 } 4273 4274 /** 4275 * sensor_value_complete_init: 4276 * @object: A #SensorValue. 4277 * @invocation: (transfer full): A #GDBusMethodInvocation. 4278 * 4279 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-SensorValue.init">init()</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. 4280 * 4281 * This method will free @invocation, you cannot use it afterwards. 4282 */ 4283 void 4284 sensor_value_complete_init ( 4285 SensorValue *object, 4286 GDBusMethodInvocation *invocation) 4287 { 4288 g_dbus_method_invocation_return_value (invocation, 4289 g_variant_new ("()")); 4290 } 4291 4292 /** 4293 * sensor_value_complete_get_value: 4294 * @object: A #SensorValue. 4295 * @invocation: (transfer full): A #GDBusMethodInvocation. 4296 * @value: Parameter to return. 4297 * 4298 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-SensorValue.getValue">getValue()</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. 4299 * 4300 * This method will free @invocation, you cannot use it afterwards. 4301 */ 4302 void 4303 sensor_value_complete_get_value ( 4304 SensorValue *object, 4305 GDBusMethodInvocation *invocation, 4306 GVariant *value) 4307 { 4308 g_dbus_method_invocation_return_value (invocation, 4309 g_variant_new ("(@v)", 4310 value)); 4311 } 4312 4313 /** 4314 * sensor_value_complete_set_value: 4315 * @object: A #SensorValue. 4316 * @invocation: (transfer full): A #GDBusMethodInvocation. 4317 * 4318 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-SensorValue.setValue">setValue()</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. 4319 * 4320 * This method will free @invocation, you cannot use it afterwards. 4321 */ 4322 void 4323 sensor_value_complete_set_value ( 4324 SensorValue *object, 4325 GDBusMethodInvocation *invocation) 4326 { 4327 g_dbus_method_invocation_return_value (invocation, 4328 g_variant_new ("()")); 4329 } 4330 4331 /* ------------------------------------------------------------------------ */ 4332 4333 /** 4334 * SensorValueProxy: 4335 * 4336 * The #SensorValueProxy structure contains only private data and should only be accessed using the provided API. 4337 */ 4338 4339 /** 4340 * SensorValueProxyClass: 4341 * @parent_class: The parent class. 4342 * 4343 * Class structure for #SensorValueProxy. 4344 */ 4345 4346 struct _SensorValueProxyPrivate 4347 { 4348 GData *qdata; 4349 }; 4350 4351 static void sensor_value_proxy_iface_init (SensorValueIface *iface); 4352 4353 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 4354 G_DEFINE_TYPE_WITH_CODE (SensorValueProxy, sensor_value_proxy, G_TYPE_DBUS_PROXY, 4355 G_ADD_PRIVATE (SensorValueProxy) 4356 G_IMPLEMENT_INTERFACE (TYPE_SENSOR_VALUE, sensor_value_proxy_iface_init)); 4357 4358 #else 4359 G_DEFINE_TYPE_WITH_CODE (SensorValueProxy, sensor_value_proxy, G_TYPE_DBUS_PROXY, 4360 G_IMPLEMENT_INTERFACE (TYPE_SENSOR_VALUE, sensor_value_proxy_iface_init)); 4361 4362 #endif 4363 static void 4364 sensor_value_proxy_finalize (GObject *object) 4365 { 4366 SensorValueProxy *proxy = SENSOR_VALUE_PROXY (object); 4367 g_datalist_clear (&proxy->priv->qdata); 4368 G_OBJECT_CLASS (sensor_value_proxy_parent_class)->finalize (object); 4369 } 4370 4371 static void 4372 sensor_value_proxy_get_property (GObject *object, 4373 guint prop_id, 4374 GValue *value, 4375 GParamSpec *pspec G_GNUC_UNUSED) 4376 { 4377 const _ExtendedGDBusPropertyInfo *info; 4378 GVariant *variant; 4379 g_assert (prop_id != 0 && prop_id - 1 < 5); 4380 info = _sensor_value_property_info_pointers[prop_id - 1]; 4381 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (object), info->parent_struct.name); 4382 if (info->use_gvariant) 4383 { 4384 g_value_set_variant (value, variant); 4385 } 4386 else 4387 { 4388 if (variant != NULL) 4389 g_dbus_gvariant_to_gvalue (variant, value); 4390 } 4391 if (variant != NULL) 4392 g_variant_unref (variant); 4393 } 4394 4395 static void 4396 sensor_value_proxy_set_property_cb (GDBusProxy *proxy, 4397 GAsyncResult *res, 4398 gpointer user_data) 4399 { 4400 const _ExtendedGDBusPropertyInfo *info = user_data; 4401 GError *error; 4402 GVariant *_ret; 4403 error = NULL; 4404 _ret = g_dbus_proxy_call_finish (proxy, res, &error); 4405 if (!_ret) 4406 { 4407 g_warning ("Error setting property '%s' on interface org.openbmc.SensorValue: %s (%s, %d)", 4408 info->parent_struct.name, 4409 error->message, g_quark_to_string (error->domain), error->code); 4410 g_error_free (error); 4411 } 4412 else 4413 { 4414 g_variant_unref (_ret); 4415 } 4416 } 4417 4418 static void 4419 sensor_value_proxy_set_property (GObject *object, 4420 guint prop_id, 4421 const GValue *value, 4422 GParamSpec *pspec G_GNUC_UNUSED) 4423 { 4424 const _ExtendedGDBusPropertyInfo *info; 4425 GVariant *variant; 4426 g_assert (prop_id != 0 && prop_id - 1 < 5); 4427 info = _sensor_value_property_info_pointers[prop_id - 1]; 4428 variant = g_dbus_gvalue_to_gvariant (value, G_VARIANT_TYPE (info->parent_struct.signature)); 4429 g_dbus_proxy_call (G_DBUS_PROXY (object), 4430 "org.freedesktop.DBus.Properties.Set", 4431 g_variant_new ("(ssv)", "org.openbmc.SensorValue", info->parent_struct.name, variant), 4432 G_DBUS_CALL_FLAGS_NONE, 4433 -1, 4434 NULL, (GAsyncReadyCallback) sensor_value_proxy_set_property_cb, (GDBusPropertyInfo *) &info->parent_struct); 4435 g_variant_unref (variant); 4436 } 4437 4438 static void 4439 sensor_value_proxy_g_signal (GDBusProxy *proxy, 4440 const gchar *sender_name G_GNUC_UNUSED, 4441 const gchar *signal_name, 4442 GVariant *parameters) 4443 { 4444 _ExtendedGDBusSignalInfo *info; 4445 GVariantIter iter; 4446 GVariant *child; 4447 GValue *paramv; 4448 guint num_params; 4449 guint n; 4450 guint signal_id; 4451 info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_sensor_value_interface_info.parent_struct, signal_name); 4452 if (info == NULL) 4453 return; 4454 num_params = g_variant_n_children (parameters); 4455 paramv = g_new0 (GValue, num_params + 1); 4456 g_value_init (¶mv[0], TYPE_SENSOR_VALUE); 4457 g_value_set_object (¶mv[0], proxy); 4458 g_variant_iter_init (&iter, parameters); 4459 n = 1; 4460 while ((child = g_variant_iter_next_value (&iter)) != NULL) 4461 { 4462 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1]; 4463 if (arg_info->use_gvariant) 4464 { 4465 g_value_init (¶mv[n], G_TYPE_VARIANT); 4466 g_value_set_variant (¶mv[n], child); 4467 n++; 4468 } 4469 else 4470 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 4471 g_variant_unref (child); 4472 } 4473 signal_id = g_signal_lookup (info->signal_name, TYPE_SENSOR_VALUE); 4474 g_signal_emitv (paramv, signal_id, 0, NULL); 4475 for (n = 0; n < num_params + 1; n++) 4476 g_value_unset (¶mv[n]); 4477 g_free (paramv); 4478 } 4479 4480 static void 4481 sensor_value_proxy_g_properties_changed (GDBusProxy *_proxy, 4482 GVariant *changed_properties, 4483 const gchar *const *invalidated_properties) 4484 { 4485 SensorValueProxy *proxy = SENSOR_VALUE_PROXY (_proxy); 4486 guint n; 4487 const gchar *key; 4488 GVariantIter *iter; 4489 _ExtendedGDBusPropertyInfo *info; 4490 g_variant_get (changed_properties, "a{sv}", &iter); 4491 while (g_variant_iter_next (iter, "{&sv}", &key, NULL)) 4492 { 4493 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_sensor_value_interface_info.parent_struct, key); 4494 g_datalist_remove_data (&proxy->priv->qdata, key); 4495 if (info != NULL) 4496 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 4497 } 4498 g_variant_iter_free (iter); 4499 for (n = 0; invalidated_properties[n] != NULL; n++) 4500 { 4501 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_sensor_value_interface_info.parent_struct, invalidated_properties[n]); 4502 g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]); 4503 if (info != NULL) 4504 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 4505 } 4506 } 4507 4508 static GVariant * 4509 sensor_value_proxy_get_value (SensorValue *object) 4510 { 4511 SensorValueProxy *proxy = SENSOR_VALUE_PROXY (object); 4512 GVariant *variant; 4513 GVariant *value = NULL; 4514 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "value"); 4515 value = variant; 4516 if (variant != NULL) 4517 g_variant_unref (variant); 4518 return value; 4519 } 4520 4521 static const gchar * 4522 sensor_value_proxy_get_units (SensorValue *object) 4523 { 4524 SensorValueProxy *proxy = SENSOR_VALUE_PROXY (object); 4525 GVariant *variant; 4526 const gchar *value = NULL; 4527 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "units"); 4528 if (variant != NULL) 4529 { 4530 value = g_variant_get_string (variant, NULL); 4531 g_variant_unref (variant); 4532 } 4533 return value; 4534 } 4535 4536 static gint 4537 sensor_value_proxy_get_poll_interval (SensorValue *object) 4538 { 4539 SensorValueProxy *proxy = SENSOR_VALUE_PROXY (object); 4540 GVariant *variant; 4541 gint value = 0; 4542 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "poll_interval"); 4543 if (variant != NULL) 4544 { 4545 value = g_variant_get_int32 (variant); 4546 g_variant_unref (variant); 4547 } 4548 return value; 4549 } 4550 4551 static gint 4552 sensor_value_proxy_get_heatbeat (SensorValue *object) 4553 { 4554 SensorValueProxy *proxy = SENSOR_VALUE_PROXY (object); 4555 GVariant *variant; 4556 gint value = 0; 4557 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "heatbeat"); 4558 if (variant != NULL) 4559 { 4560 value = g_variant_get_int32 (variant); 4561 g_variant_unref (variant); 4562 } 4563 return value; 4564 } 4565 4566 static gboolean 4567 sensor_value_proxy_get_settable (SensorValue *object) 4568 { 4569 SensorValueProxy *proxy = SENSOR_VALUE_PROXY (object); 4570 GVariant *variant; 4571 gboolean value = 0; 4572 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "settable"); 4573 if (variant != NULL) 4574 { 4575 value = g_variant_get_boolean (variant); 4576 g_variant_unref (variant); 4577 } 4578 return value; 4579 } 4580 4581 static void 4582 sensor_value_proxy_init (SensorValueProxy *proxy) 4583 { 4584 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 4585 proxy->priv = sensor_value_proxy_get_instance_private (proxy); 4586 #else 4587 proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, TYPE_SENSOR_VALUE_PROXY, SensorValueProxyPrivate); 4588 #endif 4589 4590 g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), sensor_value_interface_info ()); 4591 } 4592 4593 static void 4594 sensor_value_proxy_class_init (SensorValueProxyClass *klass) 4595 { 4596 GObjectClass *gobject_class; 4597 GDBusProxyClass *proxy_class; 4598 4599 gobject_class = G_OBJECT_CLASS (klass); 4600 gobject_class->finalize = sensor_value_proxy_finalize; 4601 gobject_class->get_property = sensor_value_proxy_get_property; 4602 gobject_class->set_property = sensor_value_proxy_set_property; 4603 4604 proxy_class = G_DBUS_PROXY_CLASS (klass); 4605 proxy_class->g_signal = sensor_value_proxy_g_signal; 4606 proxy_class->g_properties_changed = sensor_value_proxy_g_properties_changed; 4607 4608 sensor_value_override_properties (gobject_class, 1); 4609 4610 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 4611 g_type_class_add_private (klass, sizeof (SensorValueProxyPrivate)); 4612 #endif 4613 } 4614 4615 static void 4616 sensor_value_proxy_iface_init (SensorValueIface *iface) 4617 { 4618 iface->get_value = sensor_value_proxy_get_value; 4619 iface->get_units = sensor_value_proxy_get_units; 4620 iface->get_poll_interval = sensor_value_proxy_get_poll_interval; 4621 iface->get_heatbeat = sensor_value_proxy_get_heatbeat; 4622 iface->get_settable = sensor_value_proxy_get_settable; 4623 } 4624 4625 /** 4626 * sensor_value_proxy_new: 4627 * @connection: A #GDBusConnection. 4628 * @flags: Flags from the #GDBusProxyFlags enumeration. 4629 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 4630 * @object_path: An object path. 4631 * @cancellable: (allow-none): A #GCancellable or %NULL. 4632 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 4633 * @user_data: User data to pass to @callback. 4634 * 4635 * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorValue.top_of_page">org.openbmc.SensorValue</link>. See g_dbus_proxy_new() for more details. 4636 * 4637 * 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. 4638 * You can then call sensor_value_proxy_new_finish() to get the result of the operation. 4639 * 4640 * See sensor_value_proxy_new_sync() for the synchronous, blocking version of this constructor. 4641 */ 4642 void 4643 sensor_value_proxy_new ( 4644 GDBusConnection *connection, 4645 GDBusProxyFlags flags, 4646 const gchar *name, 4647 const gchar *object_path, 4648 GCancellable *cancellable, 4649 GAsyncReadyCallback callback, 4650 gpointer user_data) 4651 { 4652 g_async_initable_new_async (TYPE_SENSOR_VALUE_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.SensorValue", NULL); 4653 } 4654 4655 /** 4656 * sensor_value_proxy_new_finish: 4657 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to sensor_value_proxy_new(). 4658 * @error: Return location for error or %NULL 4659 * 4660 * Finishes an operation started with sensor_value_proxy_new(). 4661 * 4662 * Returns: (transfer full) (type SensorValueProxy): The constructed proxy object or %NULL if @error is set. 4663 */ 4664 SensorValue * 4665 sensor_value_proxy_new_finish ( 4666 GAsyncResult *res, 4667 GError **error) 4668 { 4669 GObject *ret; 4670 GObject *source_object; 4671 source_object = g_async_result_get_source_object (res); 4672 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 4673 g_object_unref (source_object); 4674 if (ret != NULL) 4675 return SENSOR_VALUE (ret); 4676 else 4677 return NULL; 4678 } 4679 4680 /** 4681 * sensor_value_proxy_new_sync: 4682 * @connection: A #GDBusConnection. 4683 * @flags: Flags from the #GDBusProxyFlags enumeration. 4684 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 4685 * @object_path: An object path. 4686 * @cancellable: (allow-none): A #GCancellable or %NULL. 4687 * @error: Return location for error or %NULL 4688 * 4689 * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorValue.top_of_page">org.openbmc.SensorValue</link>. See g_dbus_proxy_new_sync() for more details. 4690 * 4691 * The calling thread is blocked until a reply is received. 4692 * 4693 * See sensor_value_proxy_new() for the asynchronous version of this constructor. 4694 * 4695 * Returns: (transfer full) (type SensorValueProxy): The constructed proxy object or %NULL if @error is set. 4696 */ 4697 SensorValue * 4698 sensor_value_proxy_new_sync ( 4699 GDBusConnection *connection, 4700 GDBusProxyFlags flags, 4701 const gchar *name, 4702 const gchar *object_path, 4703 GCancellable *cancellable, 4704 GError **error) 4705 { 4706 GInitable *ret; 4707 ret = g_initable_new (TYPE_SENSOR_VALUE_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.SensorValue", NULL); 4708 if (ret != NULL) 4709 return SENSOR_VALUE (ret); 4710 else 4711 return NULL; 4712 } 4713 4714 4715 /** 4716 * sensor_value_proxy_new_for_bus: 4717 * @bus_type: A #GBusType. 4718 * @flags: Flags from the #GDBusProxyFlags enumeration. 4719 * @name: A bus name (well-known or unique). 4720 * @object_path: An object path. 4721 * @cancellable: (allow-none): A #GCancellable or %NULL. 4722 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 4723 * @user_data: User data to pass to @callback. 4724 * 4725 * Like sensor_value_proxy_new() but takes a #GBusType instead of a #GDBusConnection. 4726 * 4727 * 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. 4728 * You can then call sensor_value_proxy_new_for_bus_finish() to get the result of the operation. 4729 * 4730 * See sensor_value_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor. 4731 */ 4732 void 4733 sensor_value_proxy_new_for_bus ( 4734 GBusType bus_type, 4735 GDBusProxyFlags flags, 4736 const gchar *name, 4737 const gchar *object_path, 4738 GCancellable *cancellable, 4739 GAsyncReadyCallback callback, 4740 gpointer user_data) 4741 { 4742 g_async_initable_new_async (TYPE_SENSOR_VALUE_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.SensorValue", NULL); 4743 } 4744 4745 /** 4746 * sensor_value_proxy_new_for_bus_finish: 4747 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to sensor_value_proxy_new_for_bus(). 4748 * @error: Return location for error or %NULL 4749 * 4750 * Finishes an operation started with sensor_value_proxy_new_for_bus(). 4751 * 4752 * Returns: (transfer full) (type SensorValueProxy): The constructed proxy object or %NULL if @error is set. 4753 */ 4754 SensorValue * 4755 sensor_value_proxy_new_for_bus_finish ( 4756 GAsyncResult *res, 4757 GError **error) 4758 { 4759 GObject *ret; 4760 GObject *source_object; 4761 source_object = g_async_result_get_source_object (res); 4762 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 4763 g_object_unref (source_object); 4764 if (ret != NULL) 4765 return SENSOR_VALUE (ret); 4766 else 4767 return NULL; 4768 } 4769 4770 /** 4771 * sensor_value_proxy_new_for_bus_sync: 4772 * @bus_type: A #GBusType. 4773 * @flags: Flags from the #GDBusProxyFlags enumeration. 4774 * @name: A bus name (well-known or unique). 4775 * @object_path: An object path. 4776 * @cancellable: (allow-none): A #GCancellable or %NULL. 4777 * @error: Return location for error or %NULL 4778 * 4779 * Like sensor_value_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection. 4780 * 4781 * The calling thread is blocked until a reply is received. 4782 * 4783 * See sensor_value_proxy_new_for_bus() for the asynchronous version of this constructor. 4784 * 4785 * Returns: (transfer full) (type SensorValueProxy): The constructed proxy object or %NULL if @error is set. 4786 */ 4787 SensorValue * 4788 sensor_value_proxy_new_for_bus_sync ( 4789 GBusType bus_type, 4790 GDBusProxyFlags flags, 4791 const gchar *name, 4792 const gchar *object_path, 4793 GCancellable *cancellable, 4794 GError **error) 4795 { 4796 GInitable *ret; 4797 ret = g_initable_new (TYPE_SENSOR_VALUE_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.SensorValue", NULL); 4798 if (ret != NULL) 4799 return SENSOR_VALUE (ret); 4800 else 4801 return NULL; 4802 } 4803 4804 4805 /* ------------------------------------------------------------------------ */ 4806 4807 /** 4808 * SensorValueSkeleton: 4809 * 4810 * The #SensorValueSkeleton structure contains only private data and should only be accessed using the provided API. 4811 */ 4812 4813 /** 4814 * SensorValueSkeletonClass: 4815 * @parent_class: The parent class. 4816 * 4817 * Class structure for #SensorValueSkeleton. 4818 */ 4819 4820 struct _SensorValueSkeletonPrivate 4821 { 4822 GValue *properties; 4823 GList *changed_properties; 4824 GSource *changed_properties_idle_source; 4825 GMainContext *context; 4826 GMutex lock; 4827 }; 4828 4829 static void 4830 _sensor_value_skeleton_handle_method_call ( 4831 GDBusConnection *connection G_GNUC_UNUSED, 4832 const gchar *sender G_GNUC_UNUSED, 4833 const gchar *object_path G_GNUC_UNUSED, 4834 const gchar *interface_name, 4835 const gchar *method_name, 4836 GVariant *parameters, 4837 GDBusMethodInvocation *invocation, 4838 gpointer user_data) 4839 { 4840 SensorValueSkeleton *skeleton = SENSOR_VALUE_SKELETON (user_data); 4841 _ExtendedGDBusMethodInfo *info; 4842 GVariantIter iter; 4843 GVariant *child; 4844 GValue *paramv; 4845 guint num_params; 4846 guint num_extra; 4847 guint n; 4848 guint signal_id; 4849 GValue return_value = G_VALUE_INIT; 4850 info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation); 4851 g_assert (info != NULL); 4852 num_params = g_variant_n_children (parameters); 4853 num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra); 4854 n = 0; 4855 g_value_init (¶mv[n], TYPE_SENSOR_VALUE); 4856 g_value_set_object (¶mv[n++], skeleton); 4857 g_value_init (¶mv[n], G_TYPE_DBUS_METHOD_INVOCATION); 4858 g_value_set_object (¶mv[n++], invocation); 4859 if (info->pass_fdlist) 4860 { 4861 #ifdef G_OS_UNIX 4862 g_value_init (¶mv[n], G_TYPE_UNIX_FD_LIST); 4863 g_value_set_object (¶mv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation))); 4864 #else 4865 g_assert_not_reached (); 4866 #endif 4867 } 4868 g_variant_iter_init (&iter, parameters); 4869 while ((child = g_variant_iter_next_value (&iter)) != NULL) 4870 { 4871 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra]; 4872 if (arg_info->use_gvariant) 4873 { 4874 g_value_init (¶mv[n], G_TYPE_VARIANT); 4875 g_value_set_variant (¶mv[n], child); 4876 n++; 4877 } 4878 else 4879 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 4880 g_variant_unref (child); 4881 } 4882 signal_id = g_signal_lookup (info->signal_name, TYPE_SENSOR_VALUE); 4883 g_value_init (&return_value, G_TYPE_BOOLEAN); 4884 g_signal_emitv (paramv, signal_id, 0, &return_value); 4885 if (!g_value_get_boolean (&return_value)) 4886 g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name); 4887 g_value_unset (&return_value); 4888 for (n = 0; n < num_params + num_extra; n++) 4889 g_value_unset (¶mv[n]); 4890 g_free (paramv); 4891 } 4892 4893 static GVariant * 4894 _sensor_value_skeleton_handle_get_property ( 4895 GDBusConnection *connection G_GNUC_UNUSED, 4896 const gchar *sender G_GNUC_UNUSED, 4897 const gchar *object_path G_GNUC_UNUSED, 4898 const gchar *interface_name G_GNUC_UNUSED, 4899 const gchar *property_name, 4900 GError **error, 4901 gpointer user_data) 4902 { 4903 SensorValueSkeleton *skeleton = SENSOR_VALUE_SKELETON (user_data); 4904 GValue value = G_VALUE_INIT; 4905 GParamSpec *pspec; 4906 _ExtendedGDBusPropertyInfo *info; 4907 GVariant *ret; 4908 ret = NULL; 4909 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_sensor_value_interface_info.parent_struct, property_name); 4910 g_assert (info != NULL); 4911 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 4912 if (pspec == NULL) 4913 { 4914 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 4915 } 4916 else 4917 { 4918 g_value_init (&value, pspec->value_type); 4919 g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value); 4920 ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature)); 4921 g_value_unset (&value); 4922 } 4923 return ret; 4924 } 4925 4926 static gboolean 4927 _sensor_value_skeleton_handle_set_property ( 4928 GDBusConnection *connection G_GNUC_UNUSED, 4929 const gchar *sender G_GNUC_UNUSED, 4930 const gchar *object_path G_GNUC_UNUSED, 4931 const gchar *interface_name G_GNUC_UNUSED, 4932 const gchar *property_name, 4933 GVariant *variant, 4934 GError **error, 4935 gpointer user_data) 4936 { 4937 SensorValueSkeleton *skeleton = SENSOR_VALUE_SKELETON (user_data); 4938 GValue value = G_VALUE_INIT; 4939 GParamSpec *pspec; 4940 _ExtendedGDBusPropertyInfo *info; 4941 gboolean ret; 4942 ret = FALSE; 4943 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_sensor_value_interface_info.parent_struct, property_name); 4944 g_assert (info != NULL); 4945 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 4946 if (pspec == NULL) 4947 { 4948 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 4949 } 4950 else 4951 { 4952 if (info->use_gvariant) 4953 g_value_set_variant (&value, variant); 4954 else 4955 g_dbus_gvariant_to_gvalue (variant, &value); 4956 g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value); 4957 g_value_unset (&value); 4958 ret = TRUE; 4959 } 4960 return ret; 4961 } 4962 4963 static const GDBusInterfaceVTable _sensor_value_skeleton_vtable = 4964 { 4965 _sensor_value_skeleton_handle_method_call, 4966 _sensor_value_skeleton_handle_get_property, 4967 _sensor_value_skeleton_handle_set_property, 4968 {NULL} 4969 }; 4970 4971 static GDBusInterfaceInfo * 4972 sensor_value_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 4973 { 4974 return sensor_value_interface_info (); 4975 } 4976 4977 static GDBusInterfaceVTable * 4978 sensor_value_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 4979 { 4980 return (GDBusInterfaceVTable *) &_sensor_value_skeleton_vtable; 4981 } 4982 4983 static GVariant * 4984 sensor_value_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton) 4985 { 4986 SensorValueSkeleton *skeleton = SENSOR_VALUE_SKELETON (_skeleton); 4987 4988 GVariantBuilder builder; 4989 guint n; 4990 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 4991 if (_sensor_value_interface_info.parent_struct.properties == NULL) 4992 goto out; 4993 for (n = 0; _sensor_value_interface_info.parent_struct.properties[n] != NULL; n++) 4994 { 4995 GDBusPropertyInfo *info = _sensor_value_interface_info.parent_struct.properties[n]; 4996 if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE) 4997 { 4998 GVariant *value; 4999 value = _sensor_value_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.SensorValue", info->name, NULL, skeleton); 5000 if (value != NULL) 5001 { 5002 g_variant_take_ref (value); 5003 g_variant_builder_add (&builder, "{sv}", info->name, value); 5004 g_variant_unref (value); 5005 } 5006 } 5007 } 5008 out: 5009 return g_variant_builder_end (&builder); 5010 } 5011 5012 static gboolean _sensor_value_emit_changed (gpointer user_data); 5013 5014 static void 5015 sensor_value_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton) 5016 { 5017 SensorValueSkeleton *skeleton = SENSOR_VALUE_SKELETON (_skeleton); 5018 gboolean emit_changed = FALSE; 5019 5020 g_mutex_lock (&skeleton->priv->lock); 5021 if (skeleton->priv->changed_properties_idle_source != NULL) 5022 { 5023 g_source_destroy (skeleton->priv->changed_properties_idle_source); 5024 skeleton->priv->changed_properties_idle_source = NULL; 5025 emit_changed = TRUE; 5026 } 5027 g_mutex_unlock (&skeleton->priv->lock); 5028 5029 if (emit_changed) 5030 _sensor_value_emit_changed (skeleton); 5031 } 5032 5033 static void 5034 _sensor_value_on_signal_changed ( 5035 SensorValue *object, 5036 GVariant *arg_value, 5037 const gchar *arg_units) 5038 { 5039 SensorValueSkeleton *skeleton = SENSOR_VALUE_SKELETON (object); 5040 5041 GList *connections, *l; 5042 GVariant *signal_variant; 5043 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 5044 5045 signal_variant = g_variant_ref_sink (g_variant_new ("(@vs)", 5046 arg_value, 5047 arg_units)); 5048 for (l = connections; l != NULL; l = l->next) 5049 { 5050 GDBusConnection *connection = l->data; 5051 g_dbus_connection_emit_signal (connection, 5052 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.SensorValue", "Changed", 5053 signal_variant, NULL); 5054 } 5055 g_variant_unref (signal_variant); 5056 g_list_free_full (connections, g_object_unref); 5057 } 5058 5059 static void 5060 _sensor_value_on_signal_error ( 5061 SensorValue *object) 5062 { 5063 SensorValueSkeleton *skeleton = SENSOR_VALUE_SKELETON (object); 5064 5065 GList *connections, *l; 5066 GVariant *signal_variant; 5067 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 5068 5069 signal_variant = g_variant_ref_sink (g_variant_new ("()")); 5070 for (l = connections; l != NULL; l = l->next) 5071 { 5072 GDBusConnection *connection = l->data; 5073 g_dbus_connection_emit_signal (connection, 5074 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.SensorValue", "Error", 5075 signal_variant, NULL); 5076 } 5077 g_variant_unref (signal_variant); 5078 g_list_free_full (connections, g_object_unref); 5079 } 5080 5081 static void 5082 _sensor_value_on_signal_heartbeat ( 5083 SensorValue *object, 5084 const gchar *arg_bus_name) 5085 { 5086 SensorValueSkeleton *skeleton = SENSOR_VALUE_SKELETON (object); 5087 5088 GList *connections, *l; 5089 GVariant *signal_variant; 5090 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 5091 5092 signal_variant = g_variant_ref_sink (g_variant_new ("(s)", 5093 arg_bus_name)); 5094 for (l = connections; l != NULL; l = l->next) 5095 { 5096 GDBusConnection *connection = l->data; 5097 g_dbus_connection_emit_signal (connection, 5098 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.SensorValue", "Heartbeat", 5099 signal_variant, NULL); 5100 } 5101 g_variant_unref (signal_variant); 5102 g_list_free_full (connections, g_object_unref); 5103 } 5104 5105 static void sensor_value_skeleton_iface_init (SensorValueIface *iface); 5106 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 5107 G_DEFINE_TYPE_WITH_CODE (SensorValueSkeleton, sensor_value_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 5108 G_ADD_PRIVATE (SensorValueSkeleton) 5109 G_IMPLEMENT_INTERFACE (TYPE_SENSOR_VALUE, sensor_value_skeleton_iface_init)); 5110 5111 #else 5112 G_DEFINE_TYPE_WITH_CODE (SensorValueSkeleton, sensor_value_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 5113 G_IMPLEMENT_INTERFACE (TYPE_SENSOR_VALUE, sensor_value_skeleton_iface_init)); 5114 5115 #endif 5116 static void 5117 sensor_value_skeleton_finalize (GObject *object) 5118 { 5119 SensorValueSkeleton *skeleton = SENSOR_VALUE_SKELETON (object); 5120 guint n; 5121 for (n = 0; n < 5; n++) 5122 g_value_unset (&skeleton->priv->properties[n]); 5123 g_free (skeleton->priv->properties); 5124 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 5125 if (skeleton->priv->changed_properties_idle_source != NULL) 5126 g_source_destroy (skeleton->priv->changed_properties_idle_source); 5127 g_main_context_unref (skeleton->priv->context); 5128 g_mutex_clear (&skeleton->priv->lock); 5129 G_OBJECT_CLASS (sensor_value_skeleton_parent_class)->finalize (object); 5130 } 5131 5132 static void 5133 sensor_value_skeleton_get_property (GObject *object, 5134 guint prop_id, 5135 GValue *value, 5136 GParamSpec *pspec G_GNUC_UNUSED) 5137 { 5138 SensorValueSkeleton *skeleton = SENSOR_VALUE_SKELETON (object); 5139 g_assert (prop_id != 0 && prop_id - 1 < 5); 5140 g_mutex_lock (&skeleton->priv->lock); 5141 g_value_copy (&skeleton->priv->properties[prop_id - 1], value); 5142 g_mutex_unlock (&skeleton->priv->lock); 5143 } 5144 5145 static gboolean 5146 _sensor_value_emit_changed (gpointer user_data) 5147 { 5148 SensorValueSkeleton *skeleton = SENSOR_VALUE_SKELETON (user_data); 5149 GList *l; 5150 GVariantBuilder builder; 5151 GVariantBuilder invalidated_builder; 5152 guint num_changes; 5153 5154 g_mutex_lock (&skeleton->priv->lock); 5155 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 5156 g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as")); 5157 for (l = skeleton->priv->changed_properties, num_changes = 0; l != NULL; l = l->next) 5158 { 5159 ChangedProperty *cp = l->data; 5160 GVariant *variant; 5161 const GValue *cur_value; 5162 5163 cur_value = &skeleton->priv->properties[cp->prop_id - 1]; 5164 if (!_g_value_equal (cur_value, &cp->orig_value)) 5165 { 5166 variant = g_dbus_gvalue_to_gvariant (cur_value, G_VARIANT_TYPE (cp->info->parent_struct.signature)); 5167 g_variant_builder_add (&builder, "{sv}", cp->info->parent_struct.name, variant); 5168 g_variant_unref (variant); 5169 num_changes++; 5170 } 5171 } 5172 if (num_changes > 0) 5173 { 5174 GList *connections, *ll; 5175 GVariant *signal_variant; 5176 signal_variant = g_variant_ref_sink (g_variant_new ("(sa{sv}as)", "org.openbmc.SensorValue", 5177 &builder, &invalidated_builder)); 5178 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 5179 for (ll = connections; ll != NULL; ll = ll->next) 5180 { 5181 GDBusConnection *connection = ll->data; 5182 5183 g_dbus_connection_emit_signal (connection, 5184 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), 5185 "org.freedesktop.DBus.Properties", 5186 "PropertiesChanged", 5187 signal_variant, 5188 NULL); 5189 } 5190 g_variant_unref (signal_variant); 5191 g_list_free_full (connections, g_object_unref); 5192 } 5193 else 5194 { 5195 g_variant_builder_clear (&builder); 5196 g_variant_builder_clear (&invalidated_builder); 5197 } 5198 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 5199 skeleton->priv->changed_properties = NULL; 5200 skeleton->priv->changed_properties_idle_source = NULL; 5201 g_mutex_unlock (&skeleton->priv->lock); 5202 return FALSE; 5203 } 5204 5205 static void 5206 _sensor_value_schedule_emit_changed (SensorValueSkeleton *skeleton, const _ExtendedGDBusPropertyInfo *info, guint prop_id, const GValue *orig_value) 5207 { 5208 ChangedProperty *cp; 5209 GList *l; 5210 cp = NULL; 5211 for (l = skeleton->priv->changed_properties; l != NULL; l = l->next) 5212 { 5213 ChangedProperty *i_cp = l->data; 5214 if (i_cp->info == info) 5215 { 5216 cp = i_cp; 5217 break; 5218 } 5219 } 5220 if (cp == NULL) 5221 { 5222 cp = g_new0 (ChangedProperty, 1); 5223 cp->prop_id = prop_id; 5224 cp->info = info; 5225 skeleton->priv->changed_properties = g_list_prepend (skeleton->priv->changed_properties, cp); 5226 g_value_init (&cp->orig_value, G_VALUE_TYPE (orig_value)); 5227 g_value_copy (orig_value, &cp->orig_value); 5228 } 5229 } 5230 5231 static void 5232 sensor_value_skeleton_notify (GObject *object, 5233 GParamSpec *pspec G_GNUC_UNUSED) 5234 { 5235 SensorValueSkeleton *skeleton = SENSOR_VALUE_SKELETON (object); 5236 g_mutex_lock (&skeleton->priv->lock); 5237 if (skeleton->priv->changed_properties != NULL && 5238 skeleton->priv->changed_properties_idle_source == NULL) 5239 { 5240 skeleton->priv->changed_properties_idle_source = g_idle_source_new (); 5241 g_source_set_priority (skeleton->priv->changed_properties_idle_source, G_PRIORITY_DEFAULT); 5242 g_source_set_callback (skeleton->priv->changed_properties_idle_source, _sensor_value_emit_changed, g_object_ref (skeleton), (GDestroyNotify) g_object_unref); 5243 g_source_set_name (skeleton->priv->changed_properties_idle_source, "[generated] _sensor_value_emit_changed"); 5244 g_source_attach (skeleton->priv->changed_properties_idle_source, skeleton->priv->context); 5245 g_source_unref (skeleton->priv->changed_properties_idle_source); 5246 } 5247 g_mutex_unlock (&skeleton->priv->lock); 5248 } 5249 5250 static void 5251 sensor_value_skeleton_set_property (GObject *object, 5252 guint prop_id, 5253 const GValue *value, 5254 GParamSpec *pspec) 5255 { 5256 SensorValueSkeleton *skeleton = SENSOR_VALUE_SKELETON (object); 5257 g_assert (prop_id != 0 && prop_id - 1 < 5); 5258 g_mutex_lock (&skeleton->priv->lock); 5259 g_object_freeze_notify (object); 5260 if (!_g_value_equal (value, &skeleton->priv->properties[prop_id - 1])) 5261 { 5262 if (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)) != NULL) 5263 _sensor_value_schedule_emit_changed (skeleton, _sensor_value_property_info_pointers[prop_id - 1], prop_id, &skeleton->priv->properties[prop_id - 1]); 5264 g_value_copy (value, &skeleton->priv->properties[prop_id - 1]); 5265 g_object_notify_by_pspec (object, pspec); 5266 } 5267 g_mutex_unlock (&skeleton->priv->lock); 5268 g_object_thaw_notify (object); 5269 } 5270 5271 static void 5272 sensor_value_skeleton_init (SensorValueSkeleton *skeleton) 5273 { 5274 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 5275 skeleton->priv = sensor_value_skeleton_get_instance_private (skeleton); 5276 #else 5277 skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, TYPE_SENSOR_VALUE_SKELETON, SensorValueSkeletonPrivate); 5278 #endif 5279 5280 g_mutex_init (&skeleton->priv->lock); 5281 skeleton->priv->context = g_main_context_ref_thread_default (); 5282 skeleton->priv->properties = g_new0 (GValue, 5); 5283 g_value_init (&skeleton->priv->properties[0], G_TYPE_VARIANT); 5284 g_value_init (&skeleton->priv->properties[1], G_TYPE_STRING); 5285 g_value_init (&skeleton->priv->properties[2], G_TYPE_INT); 5286 g_value_init (&skeleton->priv->properties[3], G_TYPE_INT); 5287 g_value_init (&skeleton->priv->properties[4], G_TYPE_BOOLEAN); 5288 } 5289 5290 static GVariant * 5291 sensor_value_skeleton_get_value (SensorValue *object) 5292 { 5293 SensorValueSkeleton *skeleton = SENSOR_VALUE_SKELETON (object); 5294 GVariant *value; 5295 g_mutex_lock (&skeleton->priv->lock); 5296 value = g_value_get_variant (&(skeleton->priv->properties[0])); 5297 g_mutex_unlock (&skeleton->priv->lock); 5298 return value; 5299 } 5300 5301 static const gchar * 5302 sensor_value_skeleton_get_units (SensorValue *object) 5303 { 5304 SensorValueSkeleton *skeleton = SENSOR_VALUE_SKELETON (object); 5305 const gchar *value; 5306 g_mutex_lock (&skeleton->priv->lock); 5307 value = g_value_get_string (&(skeleton->priv->properties[1])); 5308 g_mutex_unlock (&skeleton->priv->lock); 5309 return value; 5310 } 5311 5312 static gint 5313 sensor_value_skeleton_get_poll_interval (SensorValue *object) 5314 { 5315 SensorValueSkeleton *skeleton = SENSOR_VALUE_SKELETON (object); 5316 gint value; 5317 g_mutex_lock (&skeleton->priv->lock); 5318 value = g_value_get_int (&(skeleton->priv->properties[2])); 5319 g_mutex_unlock (&skeleton->priv->lock); 5320 return value; 5321 } 5322 5323 static gint 5324 sensor_value_skeleton_get_heatbeat (SensorValue *object) 5325 { 5326 SensorValueSkeleton *skeleton = SENSOR_VALUE_SKELETON (object); 5327 gint value; 5328 g_mutex_lock (&skeleton->priv->lock); 5329 value = g_value_get_int (&(skeleton->priv->properties[3])); 5330 g_mutex_unlock (&skeleton->priv->lock); 5331 return value; 5332 } 5333 5334 static gboolean 5335 sensor_value_skeleton_get_settable (SensorValue *object) 5336 { 5337 SensorValueSkeleton *skeleton = SENSOR_VALUE_SKELETON (object); 5338 gboolean value; 5339 g_mutex_lock (&skeleton->priv->lock); 5340 value = g_value_get_boolean (&(skeleton->priv->properties[4])); 5341 g_mutex_unlock (&skeleton->priv->lock); 5342 return value; 5343 } 5344 5345 static void 5346 sensor_value_skeleton_class_init (SensorValueSkeletonClass *klass) 5347 { 5348 GObjectClass *gobject_class; 5349 GDBusInterfaceSkeletonClass *skeleton_class; 5350 5351 gobject_class = G_OBJECT_CLASS (klass); 5352 gobject_class->finalize = sensor_value_skeleton_finalize; 5353 gobject_class->get_property = sensor_value_skeleton_get_property; 5354 gobject_class->set_property = sensor_value_skeleton_set_property; 5355 gobject_class->notify = sensor_value_skeleton_notify; 5356 5357 5358 sensor_value_override_properties (gobject_class, 1); 5359 5360 skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass); 5361 skeleton_class->get_info = sensor_value_skeleton_dbus_interface_get_info; 5362 skeleton_class->get_properties = sensor_value_skeleton_dbus_interface_get_properties; 5363 skeleton_class->flush = sensor_value_skeleton_dbus_interface_flush; 5364 skeleton_class->get_vtable = sensor_value_skeleton_dbus_interface_get_vtable; 5365 5366 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 5367 g_type_class_add_private (klass, sizeof (SensorValueSkeletonPrivate)); 5368 #endif 5369 } 5370 5371 static void 5372 sensor_value_skeleton_iface_init (SensorValueIface *iface) 5373 { 5374 iface->changed = _sensor_value_on_signal_changed; 5375 iface->error = _sensor_value_on_signal_error; 5376 iface->heartbeat = _sensor_value_on_signal_heartbeat; 5377 iface->get_value = sensor_value_skeleton_get_value; 5378 iface->get_units = sensor_value_skeleton_get_units; 5379 iface->get_poll_interval = sensor_value_skeleton_get_poll_interval; 5380 iface->get_heatbeat = sensor_value_skeleton_get_heatbeat; 5381 iface->get_settable = sensor_value_skeleton_get_settable; 5382 } 5383 5384 /** 5385 * sensor_value_skeleton_new: 5386 * 5387 * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorValue.top_of_page">org.openbmc.SensorValue</link>. 5388 * 5389 * Returns: (transfer full) (type SensorValueSkeleton): The skeleton object. 5390 */ 5391 SensorValue * 5392 sensor_value_skeleton_new (void) 5393 { 5394 return SENSOR_VALUE (g_object_new (TYPE_SENSOR_VALUE_SKELETON, NULL)); 5395 } 5396 5397 /* ------------------------------------------------------------------------ 5398 * Code for interface org.openbmc.SensorThreshold 5399 * ------------------------------------------------------------------------ 5400 */ 5401 5402 /** 5403 * SECTION:SensorThreshold 5404 * @title: SensorThreshold 5405 * @short_description: Generated C code for the org.openbmc.SensorThreshold D-Bus interface 5406 * 5407 * This section contains code for working with the <link linkend="gdbus-interface-org-openbmc-SensorThreshold.top_of_page">org.openbmc.SensorThreshold</link> D-Bus interface in C. 5408 */ 5409 5410 /* ---- Introspection data for org.openbmc.SensorThreshold ---- */ 5411 5412 static const _ExtendedGDBusArgInfo _sensor_threshold_method_info_get_state_OUT_ARG_state = 5413 { 5414 { 5415 -1, 5416 (gchar *) "state", 5417 (gchar *) "y", 5418 NULL 5419 }, 5420 FALSE 5421 }; 5422 5423 static const _ExtendedGDBusArgInfo * const _sensor_threshold_method_info_get_state_OUT_ARG_pointers[] = 5424 { 5425 &_sensor_threshold_method_info_get_state_OUT_ARG_state, 5426 NULL 5427 }; 5428 5429 static const _ExtendedGDBusMethodInfo _sensor_threshold_method_info_get_state = 5430 { 5431 { 5432 -1, 5433 (gchar *) "getState", 5434 NULL, 5435 (GDBusArgInfo **) &_sensor_threshold_method_info_get_state_OUT_ARG_pointers, 5436 NULL 5437 }, 5438 "handle-get-state", 5439 FALSE 5440 }; 5441 5442 static const _ExtendedGDBusMethodInfo * const _sensor_threshold_method_info_pointers[] = 5443 { 5444 &_sensor_threshold_method_info_get_state, 5445 NULL 5446 }; 5447 5448 static const _ExtendedGDBusSignalInfo _sensor_threshold_signal_info_warning = 5449 { 5450 { 5451 -1, 5452 (gchar *) "Warning", 5453 NULL, 5454 NULL 5455 }, 5456 "warning" 5457 }; 5458 5459 static const _ExtendedGDBusSignalInfo _sensor_threshold_signal_info_critical = 5460 { 5461 { 5462 -1, 5463 (gchar *) "Critical", 5464 NULL, 5465 NULL 5466 }, 5467 "critical" 5468 }; 5469 5470 static const _ExtendedGDBusSignalInfo _sensor_threshold_signal_info_normal = 5471 { 5472 { 5473 -1, 5474 (gchar *) "Normal", 5475 NULL, 5476 NULL 5477 }, 5478 "normal" 5479 }; 5480 5481 static const _ExtendedGDBusSignalInfo * const _sensor_threshold_signal_info_pointers[] = 5482 { 5483 &_sensor_threshold_signal_info_warning, 5484 &_sensor_threshold_signal_info_critical, 5485 &_sensor_threshold_signal_info_normal, 5486 NULL 5487 }; 5488 5489 static const _ExtendedGDBusPropertyInfo _sensor_threshold_property_info_lower_critical = 5490 { 5491 { 5492 -1, 5493 (gchar *) "lower_critical", 5494 (gchar *) "v", 5495 G_DBUS_PROPERTY_INFO_FLAGS_READABLE | G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE, 5496 NULL 5497 }, 5498 "lower-critical", 5499 FALSE 5500 }; 5501 5502 static const _ExtendedGDBusPropertyInfo _sensor_threshold_property_info_lower_warning = 5503 { 5504 { 5505 -1, 5506 (gchar *) "lower_warning", 5507 (gchar *) "v", 5508 G_DBUS_PROPERTY_INFO_FLAGS_READABLE | G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE, 5509 NULL 5510 }, 5511 "lower-warning", 5512 FALSE 5513 }; 5514 5515 static const _ExtendedGDBusPropertyInfo _sensor_threshold_property_info_upper_warning = 5516 { 5517 { 5518 -1, 5519 (gchar *) "upper_warning", 5520 (gchar *) "v", 5521 G_DBUS_PROPERTY_INFO_FLAGS_READABLE | G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE, 5522 NULL 5523 }, 5524 "upper-warning", 5525 FALSE 5526 }; 5527 5528 static const _ExtendedGDBusPropertyInfo _sensor_threshold_property_info_upper_critical = 5529 { 5530 { 5531 -1, 5532 (gchar *) "upper_critical", 5533 (gchar *) "v", 5534 G_DBUS_PROPERTY_INFO_FLAGS_READABLE | G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE, 5535 NULL 5536 }, 5537 "upper-critical", 5538 FALSE 5539 }; 5540 5541 static const _ExtendedGDBusPropertyInfo _sensor_threshold_property_info_state = 5542 { 5543 { 5544 -1, 5545 (gchar *) "state", 5546 (gchar *) "y", 5547 G_DBUS_PROPERTY_INFO_FLAGS_READABLE, 5548 NULL 5549 }, 5550 "state", 5551 FALSE 5552 }; 5553 5554 static const _ExtendedGDBusPropertyInfo * const _sensor_threshold_property_info_pointers[] = 5555 { 5556 &_sensor_threshold_property_info_lower_critical, 5557 &_sensor_threshold_property_info_lower_warning, 5558 &_sensor_threshold_property_info_upper_warning, 5559 &_sensor_threshold_property_info_upper_critical, 5560 &_sensor_threshold_property_info_state, 5561 NULL 5562 }; 5563 5564 static const _ExtendedGDBusInterfaceInfo _sensor_threshold_interface_info = 5565 { 5566 { 5567 -1, 5568 (gchar *) "org.openbmc.SensorThreshold", 5569 (GDBusMethodInfo **) &_sensor_threshold_method_info_pointers, 5570 (GDBusSignalInfo **) &_sensor_threshold_signal_info_pointers, 5571 (GDBusPropertyInfo **) &_sensor_threshold_property_info_pointers, 5572 NULL 5573 }, 5574 "sensor-threshold", 5575 }; 5576 5577 5578 /** 5579 * sensor_threshold_interface_info: 5580 * 5581 * Gets a machine-readable description of the <link linkend="gdbus-interface-org-openbmc-SensorThreshold.top_of_page">org.openbmc.SensorThreshold</link> D-Bus interface. 5582 * 5583 * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free. 5584 */ 5585 GDBusInterfaceInfo * 5586 sensor_threshold_interface_info (void) 5587 { 5588 return (GDBusInterfaceInfo *) &_sensor_threshold_interface_info.parent_struct; 5589 } 5590 5591 /** 5592 * sensor_threshold_override_properties: 5593 * @klass: The class structure for a #GObject<!-- -->-derived class. 5594 * @property_id_begin: The property id to assign to the first overridden property. 5595 * 5596 * Overrides all #GObject properties in the #SensorThreshold interface for a concrete class. 5597 * The properties are overridden in the order they are defined. 5598 * 5599 * Returns: The last property id. 5600 */ 5601 guint 5602 sensor_threshold_override_properties (GObjectClass *klass, guint property_id_begin) 5603 { 5604 g_object_class_override_property (klass, property_id_begin++, "lower-critical"); 5605 g_object_class_override_property (klass, property_id_begin++, "lower-warning"); 5606 g_object_class_override_property (klass, property_id_begin++, "upper-warning"); 5607 g_object_class_override_property (klass, property_id_begin++, "upper-critical"); 5608 g_object_class_override_property (klass, property_id_begin++, "state"); 5609 return property_id_begin - 1; 5610 } 5611 5612 5613 5614 /** 5615 * SensorThreshold: 5616 * 5617 * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorThreshold.top_of_page">org.openbmc.SensorThreshold</link>. 5618 */ 5619 5620 /** 5621 * SensorThresholdIface: 5622 * @parent_iface: The parent interface. 5623 * @handle_get_state: Handler for the #SensorThreshold::handle-get-state signal. 5624 * @get_lower_critical: Getter for the #SensorThreshold:lower-critical property. 5625 * @get_lower_warning: Getter for the #SensorThreshold:lower-warning property. 5626 * @get_state: Getter for the #SensorThreshold:state property. 5627 * @get_upper_critical: Getter for the #SensorThreshold:upper-critical property. 5628 * @get_upper_warning: Getter for the #SensorThreshold:upper-warning property. 5629 * @critical: Handler for the #SensorThreshold::critical signal. 5630 * @normal: Handler for the #SensorThreshold::normal signal. 5631 * @warning: Handler for the #SensorThreshold::warning signal. 5632 * 5633 * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorThreshold.top_of_page">org.openbmc.SensorThreshold</link>. 5634 */ 5635 5636 typedef SensorThresholdIface SensorThresholdInterface; 5637 G_DEFINE_INTERFACE (SensorThreshold, sensor_threshold, G_TYPE_OBJECT); 5638 5639 static void 5640 sensor_threshold_default_init (SensorThresholdIface *iface) 5641 { 5642 /* GObject signals for incoming D-Bus method calls: */ 5643 /** 5644 * SensorThreshold::handle-get-state: 5645 * @object: A #SensorThreshold. 5646 * @invocation: A #GDBusMethodInvocation. 5647 * 5648 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-SensorThreshold.getState">getState()</link> D-Bus method. 5649 * 5650 * 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 sensor_threshold_complete_get_state() 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. 5651 * 5652 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 5653 */ 5654 g_signal_new ("handle-get-state", 5655 G_TYPE_FROM_INTERFACE (iface), 5656 G_SIGNAL_RUN_LAST, 5657 G_STRUCT_OFFSET (SensorThresholdIface, handle_get_state), 5658 g_signal_accumulator_true_handled, 5659 NULL, 5660 g_cclosure_marshal_generic, 5661 G_TYPE_BOOLEAN, 5662 1, 5663 G_TYPE_DBUS_METHOD_INVOCATION); 5664 5665 /* GObject signals for received D-Bus signals: */ 5666 /** 5667 * SensorThreshold::warning: 5668 * @object: A #SensorThreshold. 5669 * 5670 * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-openbmc-SensorThreshold.Warning">"Warning"</link> is received. 5671 * 5672 * 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. 5673 */ 5674 g_signal_new ("warning", 5675 G_TYPE_FROM_INTERFACE (iface), 5676 G_SIGNAL_RUN_LAST, 5677 G_STRUCT_OFFSET (SensorThresholdIface, warning), 5678 NULL, 5679 NULL, 5680 g_cclosure_marshal_generic, 5681 G_TYPE_NONE, 5682 0); 5683 5684 /** 5685 * SensorThreshold::critical: 5686 * @object: A #SensorThreshold. 5687 * 5688 * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-openbmc-SensorThreshold.Critical">"Critical"</link> is received. 5689 * 5690 * 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. 5691 */ 5692 g_signal_new ("critical", 5693 G_TYPE_FROM_INTERFACE (iface), 5694 G_SIGNAL_RUN_LAST, 5695 G_STRUCT_OFFSET (SensorThresholdIface, critical), 5696 NULL, 5697 NULL, 5698 g_cclosure_marshal_generic, 5699 G_TYPE_NONE, 5700 0); 5701 5702 /** 5703 * SensorThreshold::normal: 5704 * @object: A #SensorThreshold. 5705 * 5706 * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-openbmc-SensorThreshold.Normal">"Normal"</link> is received. 5707 * 5708 * 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. 5709 */ 5710 g_signal_new ("normal", 5711 G_TYPE_FROM_INTERFACE (iface), 5712 G_SIGNAL_RUN_LAST, 5713 G_STRUCT_OFFSET (SensorThresholdIface, normal), 5714 NULL, 5715 NULL, 5716 g_cclosure_marshal_generic, 5717 G_TYPE_NONE, 5718 0); 5719 5720 /* GObject properties for D-Bus properties: */ 5721 /** 5722 * SensorThreshold:lower-critical: 5723 * 5724 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-SensorThreshold.lower_critical">"lower_critical"</link>. 5725 * 5726 * 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. 5727 */ 5728 g_object_interface_install_property (iface, 5729 g_param_spec_variant ("lower-critical", "lower_critical", "lower_critical", G_VARIANT_TYPE ("v"), NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 5730 /** 5731 * SensorThreshold:lower-warning: 5732 * 5733 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-SensorThreshold.lower_warning">"lower_warning"</link>. 5734 * 5735 * 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. 5736 */ 5737 g_object_interface_install_property (iface, 5738 g_param_spec_variant ("lower-warning", "lower_warning", "lower_warning", G_VARIANT_TYPE ("v"), NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 5739 /** 5740 * SensorThreshold:upper-warning: 5741 * 5742 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-SensorThreshold.upper_warning">"upper_warning"</link>. 5743 * 5744 * 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. 5745 */ 5746 g_object_interface_install_property (iface, 5747 g_param_spec_variant ("upper-warning", "upper_warning", "upper_warning", G_VARIANT_TYPE ("v"), NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 5748 /** 5749 * SensorThreshold:upper-critical: 5750 * 5751 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-SensorThreshold.upper_critical">"upper_critical"</link>. 5752 * 5753 * 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. 5754 */ 5755 g_object_interface_install_property (iface, 5756 g_param_spec_variant ("upper-critical", "upper_critical", "upper_critical", G_VARIANT_TYPE ("v"), NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 5757 /** 5758 * SensorThreshold:state: 5759 * 5760 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-SensorThreshold.state">"state"</link>. 5761 * 5762 * 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. 5763 */ 5764 g_object_interface_install_property (iface, 5765 g_param_spec_uchar ("state", "state", "state", 0, 255, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 5766 } 5767 5768 /** 5769 * sensor_threshold_get_lower_critical: (skip) 5770 * @object: A #SensorThreshold. 5771 * 5772 * Gets the value of the <link linkend="gdbus-property-org-openbmc-SensorThreshold.lower_critical">"lower_critical"</link> D-Bus property. 5773 * 5774 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 5775 * 5776 * <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 sensor_threshold_dup_lower_critical() if on another thread.</warning> 5777 * 5778 * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object. 5779 */ 5780 GVariant * 5781 sensor_threshold_get_lower_critical (SensorThreshold *object) 5782 { 5783 return SENSOR_THRESHOLD_GET_IFACE (object)->get_lower_critical (object); 5784 } 5785 5786 /** 5787 * sensor_threshold_dup_lower_critical: (skip) 5788 * @object: A #SensorThreshold. 5789 * 5790 * Gets a copy of the <link linkend="gdbus-property-org-openbmc-SensorThreshold.lower_critical">"lower_critical"</link> D-Bus property. 5791 * 5792 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 5793 * 5794 * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value should be freed with g_variant_unref(). 5795 */ 5796 GVariant * 5797 sensor_threshold_dup_lower_critical (SensorThreshold *object) 5798 { 5799 GVariant *value; 5800 g_object_get (G_OBJECT (object), "lower-critical", &value, NULL); 5801 return value; 5802 } 5803 5804 /** 5805 * sensor_threshold_set_lower_critical: (skip) 5806 * @object: A #SensorThreshold. 5807 * @value: The value to set. 5808 * 5809 * Sets the <link linkend="gdbus-property-org-openbmc-SensorThreshold.lower_critical">"lower_critical"</link> D-Bus property to @value. 5810 * 5811 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 5812 */ 5813 void 5814 sensor_threshold_set_lower_critical (SensorThreshold *object, GVariant *value) 5815 { 5816 g_object_set (G_OBJECT (object), "lower-critical", value, NULL); 5817 } 5818 5819 /** 5820 * sensor_threshold_get_lower_warning: (skip) 5821 * @object: A #SensorThreshold. 5822 * 5823 * Gets the value of the <link linkend="gdbus-property-org-openbmc-SensorThreshold.lower_warning">"lower_warning"</link> D-Bus property. 5824 * 5825 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 5826 * 5827 * <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 sensor_threshold_dup_lower_warning() if on another thread.</warning> 5828 * 5829 * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object. 5830 */ 5831 GVariant * 5832 sensor_threshold_get_lower_warning (SensorThreshold *object) 5833 { 5834 return SENSOR_THRESHOLD_GET_IFACE (object)->get_lower_warning (object); 5835 } 5836 5837 /** 5838 * sensor_threshold_dup_lower_warning: (skip) 5839 * @object: A #SensorThreshold. 5840 * 5841 * Gets a copy of the <link linkend="gdbus-property-org-openbmc-SensorThreshold.lower_warning">"lower_warning"</link> D-Bus property. 5842 * 5843 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 5844 * 5845 * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value should be freed with g_variant_unref(). 5846 */ 5847 GVariant * 5848 sensor_threshold_dup_lower_warning (SensorThreshold *object) 5849 { 5850 GVariant *value; 5851 g_object_get (G_OBJECT (object), "lower-warning", &value, NULL); 5852 return value; 5853 } 5854 5855 /** 5856 * sensor_threshold_set_lower_warning: (skip) 5857 * @object: A #SensorThreshold. 5858 * @value: The value to set. 5859 * 5860 * Sets the <link linkend="gdbus-property-org-openbmc-SensorThreshold.lower_warning">"lower_warning"</link> D-Bus property to @value. 5861 * 5862 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 5863 */ 5864 void 5865 sensor_threshold_set_lower_warning (SensorThreshold *object, GVariant *value) 5866 { 5867 g_object_set (G_OBJECT (object), "lower-warning", value, NULL); 5868 } 5869 5870 /** 5871 * sensor_threshold_get_upper_warning: (skip) 5872 * @object: A #SensorThreshold. 5873 * 5874 * Gets the value of the <link linkend="gdbus-property-org-openbmc-SensorThreshold.upper_warning">"upper_warning"</link> D-Bus property. 5875 * 5876 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 5877 * 5878 * <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 sensor_threshold_dup_upper_warning() if on another thread.</warning> 5879 * 5880 * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object. 5881 */ 5882 GVariant * 5883 sensor_threshold_get_upper_warning (SensorThreshold *object) 5884 { 5885 return SENSOR_THRESHOLD_GET_IFACE (object)->get_upper_warning (object); 5886 } 5887 5888 /** 5889 * sensor_threshold_dup_upper_warning: (skip) 5890 * @object: A #SensorThreshold. 5891 * 5892 * Gets a copy of the <link linkend="gdbus-property-org-openbmc-SensorThreshold.upper_warning">"upper_warning"</link> D-Bus property. 5893 * 5894 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 5895 * 5896 * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value should be freed with g_variant_unref(). 5897 */ 5898 GVariant * 5899 sensor_threshold_dup_upper_warning (SensorThreshold *object) 5900 { 5901 GVariant *value; 5902 g_object_get (G_OBJECT (object), "upper-warning", &value, NULL); 5903 return value; 5904 } 5905 5906 /** 5907 * sensor_threshold_set_upper_warning: (skip) 5908 * @object: A #SensorThreshold. 5909 * @value: The value to set. 5910 * 5911 * Sets the <link linkend="gdbus-property-org-openbmc-SensorThreshold.upper_warning">"upper_warning"</link> D-Bus property to @value. 5912 * 5913 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 5914 */ 5915 void 5916 sensor_threshold_set_upper_warning (SensorThreshold *object, GVariant *value) 5917 { 5918 g_object_set (G_OBJECT (object), "upper-warning", value, NULL); 5919 } 5920 5921 /** 5922 * sensor_threshold_get_upper_critical: (skip) 5923 * @object: A #SensorThreshold. 5924 * 5925 * Gets the value of the <link linkend="gdbus-property-org-openbmc-SensorThreshold.upper_critical">"upper_critical"</link> D-Bus property. 5926 * 5927 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 5928 * 5929 * <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 sensor_threshold_dup_upper_critical() if on another thread.</warning> 5930 * 5931 * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object. 5932 */ 5933 GVariant * 5934 sensor_threshold_get_upper_critical (SensorThreshold *object) 5935 { 5936 return SENSOR_THRESHOLD_GET_IFACE (object)->get_upper_critical (object); 5937 } 5938 5939 /** 5940 * sensor_threshold_dup_upper_critical: (skip) 5941 * @object: A #SensorThreshold. 5942 * 5943 * Gets a copy of the <link linkend="gdbus-property-org-openbmc-SensorThreshold.upper_critical">"upper_critical"</link> D-Bus property. 5944 * 5945 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 5946 * 5947 * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value should be freed with g_variant_unref(). 5948 */ 5949 GVariant * 5950 sensor_threshold_dup_upper_critical (SensorThreshold *object) 5951 { 5952 GVariant *value; 5953 g_object_get (G_OBJECT (object), "upper-critical", &value, NULL); 5954 return value; 5955 } 5956 5957 /** 5958 * sensor_threshold_set_upper_critical: (skip) 5959 * @object: A #SensorThreshold. 5960 * @value: The value to set. 5961 * 5962 * Sets the <link linkend="gdbus-property-org-openbmc-SensorThreshold.upper_critical">"upper_critical"</link> D-Bus property to @value. 5963 * 5964 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 5965 */ 5966 void 5967 sensor_threshold_set_upper_critical (SensorThreshold *object, GVariant *value) 5968 { 5969 g_object_set (G_OBJECT (object), "upper-critical", value, NULL); 5970 } 5971 5972 /** 5973 * sensor_threshold_get_state: (skip) 5974 * @object: A #SensorThreshold. 5975 * 5976 * Gets the value of the <link linkend="gdbus-property-org-openbmc-SensorThreshold.state">"state"</link> D-Bus property. 5977 * 5978 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 5979 * 5980 * Returns: The property value. 5981 */ 5982 guchar 5983 sensor_threshold_get_state (SensorThreshold *object) 5984 { 5985 return SENSOR_THRESHOLD_GET_IFACE (object)->get_state (object); 5986 } 5987 5988 /** 5989 * sensor_threshold_set_state: (skip) 5990 * @object: A #SensorThreshold. 5991 * @value: The value to set. 5992 * 5993 * Sets the <link linkend="gdbus-property-org-openbmc-SensorThreshold.state">"state"</link> D-Bus property to @value. 5994 * 5995 * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side. 5996 */ 5997 void 5998 sensor_threshold_set_state (SensorThreshold *object, guchar value) 5999 { 6000 g_object_set (G_OBJECT (object), "state", value, NULL); 6001 } 6002 6003 /** 6004 * sensor_threshold_emit_warning: 6005 * @object: A #SensorThreshold. 6006 * 6007 * Emits the <link linkend="gdbus-signal-org-openbmc-SensorThreshold.Warning">"Warning"</link> D-Bus signal. 6008 */ 6009 void 6010 sensor_threshold_emit_warning ( 6011 SensorThreshold *object) 6012 { 6013 g_signal_emit_by_name (object, "warning"); 6014 } 6015 6016 /** 6017 * sensor_threshold_emit_critical: 6018 * @object: A #SensorThreshold. 6019 * 6020 * Emits the <link linkend="gdbus-signal-org-openbmc-SensorThreshold.Critical">"Critical"</link> D-Bus signal. 6021 */ 6022 void 6023 sensor_threshold_emit_critical ( 6024 SensorThreshold *object) 6025 { 6026 g_signal_emit_by_name (object, "critical"); 6027 } 6028 6029 /** 6030 * sensor_threshold_emit_normal: 6031 * @object: A #SensorThreshold. 6032 * 6033 * Emits the <link linkend="gdbus-signal-org-openbmc-SensorThreshold.Normal">"Normal"</link> D-Bus signal. 6034 */ 6035 void 6036 sensor_threshold_emit_normal ( 6037 SensorThreshold *object) 6038 { 6039 g_signal_emit_by_name (object, "normal"); 6040 } 6041 6042 /** 6043 * sensor_threshold_call_get_state: 6044 * @proxy: A #SensorThresholdProxy. 6045 * @cancellable: (allow-none): A #GCancellable or %NULL. 6046 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 6047 * @user_data: User data to pass to @callback. 6048 * 6049 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-SensorThreshold.getState">getState()</link> D-Bus method on @proxy. 6050 * 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. 6051 * You can then call sensor_threshold_call_get_state_finish() to get the result of the operation. 6052 * 6053 * See sensor_threshold_call_get_state_sync() for the synchronous, blocking version of this method. 6054 */ 6055 void 6056 sensor_threshold_call_get_state ( 6057 SensorThreshold *proxy, 6058 GCancellable *cancellable, 6059 GAsyncReadyCallback callback, 6060 gpointer user_data) 6061 { 6062 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 6063 "getState", 6064 g_variant_new ("()"), 6065 G_DBUS_CALL_FLAGS_NONE, 6066 -1, 6067 cancellable, 6068 callback, 6069 user_data); 6070 } 6071 6072 /** 6073 * sensor_threshold_call_get_state_finish: 6074 * @proxy: A #SensorThresholdProxy. 6075 * @out_state: (out): Return location for return parameter or %NULL to ignore. 6076 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to sensor_threshold_call_get_state(). 6077 * @error: Return location for error or %NULL. 6078 * 6079 * Finishes an operation started with sensor_threshold_call_get_state(). 6080 * 6081 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 6082 */ 6083 gboolean 6084 sensor_threshold_call_get_state_finish ( 6085 SensorThreshold *proxy, 6086 guchar *out_state, 6087 GAsyncResult *res, 6088 GError **error) 6089 { 6090 GVariant *_ret; 6091 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 6092 if (_ret == NULL) 6093 goto _out; 6094 g_variant_get (_ret, 6095 "(y)", 6096 out_state); 6097 g_variant_unref (_ret); 6098 _out: 6099 return _ret != NULL; 6100 } 6101 6102 /** 6103 * sensor_threshold_call_get_state_sync: 6104 * @proxy: A #SensorThresholdProxy. 6105 * @out_state: (out): Return location for return parameter or %NULL to ignore. 6106 * @cancellable: (allow-none): A #GCancellable or %NULL. 6107 * @error: Return location for error or %NULL. 6108 * 6109 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-SensorThreshold.getState">getState()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 6110 * 6111 * See sensor_threshold_call_get_state() for the asynchronous version of this method. 6112 * 6113 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 6114 */ 6115 gboolean 6116 sensor_threshold_call_get_state_sync ( 6117 SensorThreshold *proxy, 6118 guchar *out_state, 6119 GCancellable *cancellable, 6120 GError **error) 6121 { 6122 GVariant *_ret; 6123 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 6124 "getState", 6125 g_variant_new ("()"), 6126 G_DBUS_CALL_FLAGS_NONE, 6127 -1, 6128 cancellable, 6129 error); 6130 if (_ret == NULL) 6131 goto _out; 6132 g_variant_get (_ret, 6133 "(y)", 6134 out_state); 6135 g_variant_unref (_ret); 6136 _out: 6137 return _ret != NULL; 6138 } 6139 6140 /** 6141 * sensor_threshold_complete_get_state: 6142 * @object: A #SensorThreshold. 6143 * @invocation: (transfer full): A #GDBusMethodInvocation. 6144 * @state: Parameter to return. 6145 * 6146 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-SensorThreshold.getState">getState()</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. 6147 * 6148 * This method will free @invocation, you cannot use it afterwards. 6149 */ 6150 void 6151 sensor_threshold_complete_get_state ( 6152 SensorThreshold *object, 6153 GDBusMethodInvocation *invocation, 6154 guchar state) 6155 { 6156 g_dbus_method_invocation_return_value (invocation, 6157 g_variant_new ("(y)", 6158 state)); 6159 } 6160 6161 /* ------------------------------------------------------------------------ */ 6162 6163 /** 6164 * SensorThresholdProxy: 6165 * 6166 * The #SensorThresholdProxy structure contains only private data and should only be accessed using the provided API. 6167 */ 6168 6169 /** 6170 * SensorThresholdProxyClass: 6171 * @parent_class: The parent class. 6172 * 6173 * Class structure for #SensorThresholdProxy. 6174 */ 6175 6176 struct _SensorThresholdProxyPrivate 6177 { 6178 GData *qdata; 6179 }; 6180 6181 static void sensor_threshold_proxy_iface_init (SensorThresholdIface *iface); 6182 6183 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 6184 G_DEFINE_TYPE_WITH_CODE (SensorThresholdProxy, sensor_threshold_proxy, G_TYPE_DBUS_PROXY, 6185 G_ADD_PRIVATE (SensorThresholdProxy) 6186 G_IMPLEMENT_INTERFACE (TYPE_SENSOR_THRESHOLD, sensor_threshold_proxy_iface_init)); 6187 6188 #else 6189 G_DEFINE_TYPE_WITH_CODE (SensorThresholdProxy, sensor_threshold_proxy, G_TYPE_DBUS_PROXY, 6190 G_IMPLEMENT_INTERFACE (TYPE_SENSOR_THRESHOLD, sensor_threshold_proxy_iface_init)); 6191 6192 #endif 6193 static void 6194 sensor_threshold_proxy_finalize (GObject *object) 6195 { 6196 SensorThresholdProxy *proxy = SENSOR_THRESHOLD_PROXY (object); 6197 g_datalist_clear (&proxy->priv->qdata); 6198 G_OBJECT_CLASS (sensor_threshold_proxy_parent_class)->finalize (object); 6199 } 6200 6201 static void 6202 sensor_threshold_proxy_get_property (GObject *object, 6203 guint prop_id, 6204 GValue *value, 6205 GParamSpec *pspec G_GNUC_UNUSED) 6206 { 6207 const _ExtendedGDBusPropertyInfo *info; 6208 GVariant *variant; 6209 g_assert (prop_id != 0 && prop_id - 1 < 5); 6210 info = _sensor_threshold_property_info_pointers[prop_id - 1]; 6211 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (object), info->parent_struct.name); 6212 if (info->use_gvariant) 6213 { 6214 g_value_set_variant (value, variant); 6215 } 6216 else 6217 { 6218 if (variant != NULL) 6219 g_dbus_gvariant_to_gvalue (variant, value); 6220 } 6221 if (variant != NULL) 6222 g_variant_unref (variant); 6223 } 6224 6225 static void 6226 sensor_threshold_proxy_set_property_cb (GDBusProxy *proxy, 6227 GAsyncResult *res, 6228 gpointer user_data) 6229 { 6230 const _ExtendedGDBusPropertyInfo *info = user_data; 6231 GError *error; 6232 GVariant *_ret; 6233 error = NULL; 6234 _ret = g_dbus_proxy_call_finish (proxy, res, &error); 6235 if (!_ret) 6236 { 6237 g_warning ("Error setting property '%s' on interface org.openbmc.SensorThreshold: %s (%s, %d)", 6238 info->parent_struct.name, 6239 error->message, g_quark_to_string (error->domain), error->code); 6240 g_error_free (error); 6241 } 6242 else 6243 { 6244 g_variant_unref (_ret); 6245 } 6246 } 6247 6248 static void 6249 sensor_threshold_proxy_set_property (GObject *object, 6250 guint prop_id, 6251 const GValue *value, 6252 GParamSpec *pspec G_GNUC_UNUSED) 6253 { 6254 const _ExtendedGDBusPropertyInfo *info; 6255 GVariant *variant; 6256 g_assert (prop_id != 0 && prop_id - 1 < 5); 6257 info = _sensor_threshold_property_info_pointers[prop_id - 1]; 6258 variant = g_dbus_gvalue_to_gvariant (value, G_VARIANT_TYPE (info->parent_struct.signature)); 6259 g_dbus_proxy_call (G_DBUS_PROXY (object), 6260 "org.freedesktop.DBus.Properties.Set", 6261 g_variant_new ("(ssv)", "org.openbmc.SensorThreshold", info->parent_struct.name, variant), 6262 G_DBUS_CALL_FLAGS_NONE, 6263 -1, 6264 NULL, (GAsyncReadyCallback) sensor_threshold_proxy_set_property_cb, (GDBusPropertyInfo *) &info->parent_struct); 6265 g_variant_unref (variant); 6266 } 6267 6268 static void 6269 sensor_threshold_proxy_g_signal (GDBusProxy *proxy, 6270 const gchar *sender_name G_GNUC_UNUSED, 6271 const gchar *signal_name, 6272 GVariant *parameters) 6273 { 6274 _ExtendedGDBusSignalInfo *info; 6275 GVariantIter iter; 6276 GVariant *child; 6277 GValue *paramv; 6278 guint num_params; 6279 guint n; 6280 guint signal_id; 6281 info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_sensor_threshold_interface_info.parent_struct, signal_name); 6282 if (info == NULL) 6283 return; 6284 num_params = g_variant_n_children (parameters); 6285 paramv = g_new0 (GValue, num_params + 1); 6286 g_value_init (¶mv[0], TYPE_SENSOR_THRESHOLD); 6287 g_value_set_object (¶mv[0], proxy); 6288 g_variant_iter_init (&iter, parameters); 6289 n = 1; 6290 while ((child = g_variant_iter_next_value (&iter)) != NULL) 6291 { 6292 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1]; 6293 if (arg_info->use_gvariant) 6294 { 6295 g_value_init (¶mv[n], G_TYPE_VARIANT); 6296 g_value_set_variant (¶mv[n], child); 6297 n++; 6298 } 6299 else 6300 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 6301 g_variant_unref (child); 6302 } 6303 signal_id = g_signal_lookup (info->signal_name, TYPE_SENSOR_THRESHOLD); 6304 g_signal_emitv (paramv, signal_id, 0, NULL); 6305 for (n = 0; n < num_params + 1; n++) 6306 g_value_unset (¶mv[n]); 6307 g_free (paramv); 6308 } 6309 6310 static void 6311 sensor_threshold_proxy_g_properties_changed (GDBusProxy *_proxy, 6312 GVariant *changed_properties, 6313 const gchar *const *invalidated_properties) 6314 { 6315 SensorThresholdProxy *proxy = SENSOR_THRESHOLD_PROXY (_proxy); 6316 guint n; 6317 const gchar *key; 6318 GVariantIter *iter; 6319 _ExtendedGDBusPropertyInfo *info; 6320 g_variant_get (changed_properties, "a{sv}", &iter); 6321 while (g_variant_iter_next (iter, "{&sv}", &key, NULL)) 6322 { 6323 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_sensor_threshold_interface_info.parent_struct, key); 6324 g_datalist_remove_data (&proxy->priv->qdata, key); 6325 if (info != NULL) 6326 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 6327 } 6328 g_variant_iter_free (iter); 6329 for (n = 0; invalidated_properties[n] != NULL; n++) 6330 { 6331 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_sensor_threshold_interface_info.parent_struct, invalidated_properties[n]); 6332 g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]); 6333 if (info != NULL) 6334 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 6335 } 6336 } 6337 6338 static GVariant * 6339 sensor_threshold_proxy_get_lower_critical (SensorThreshold *object) 6340 { 6341 SensorThresholdProxy *proxy = SENSOR_THRESHOLD_PROXY (object); 6342 GVariant *variant; 6343 GVariant *value = NULL; 6344 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "lower_critical"); 6345 value = variant; 6346 if (variant != NULL) 6347 g_variant_unref (variant); 6348 return value; 6349 } 6350 6351 static GVariant * 6352 sensor_threshold_proxy_get_lower_warning (SensorThreshold *object) 6353 { 6354 SensorThresholdProxy *proxy = SENSOR_THRESHOLD_PROXY (object); 6355 GVariant *variant; 6356 GVariant *value = NULL; 6357 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "lower_warning"); 6358 value = variant; 6359 if (variant != NULL) 6360 g_variant_unref (variant); 6361 return value; 6362 } 6363 6364 static GVariant * 6365 sensor_threshold_proxy_get_upper_warning (SensorThreshold *object) 6366 { 6367 SensorThresholdProxy *proxy = SENSOR_THRESHOLD_PROXY (object); 6368 GVariant *variant; 6369 GVariant *value = NULL; 6370 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "upper_warning"); 6371 value = variant; 6372 if (variant != NULL) 6373 g_variant_unref (variant); 6374 return value; 6375 } 6376 6377 static GVariant * 6378 sensor_threshold_proxy_get_upper_critical (SensorThreshold *object) 6379 { 6380 SensorThresholdProxy *proxy = SENSOR_THRESHOLD_PROXY (object); 6381 GVariant *variant; 6382 GVariant *value = NULL; 6383 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "upper_critical"); 6384 value = variant; 6385 if (variant != NULL) 6386 g_variant_unref (variant); 6387 return value; 6388 } 6389 6390 static guchar 6391 sensor_threshold_proxy_get_state (SensorThreshold *object) 6392 { 6393 SensorThresholdProxy *proxy = SENSOR_THRESHOLD_PROXY (object); 6394 GVariant *variant; 6395 guchar value = 0; 6396 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "state"); 6397 if (variant != NULL) 6398 { 6399 value = g_variant_get_byte (variant); 6400 g_variant_unref (variant); 6401 } 6402 return value; 6403 } 6404 6405 static void 6406 sensor_threshold_proxy_init (SensorThresholdProxy *proxy) 6407 { 6408 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 6409 proxy->priv = sensor_threshold_proxy_get_instance_private (proxy); 6410 #else 6411 proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, TYPE_SENSOR_THRESHOLD_PROXY, SensorThresholdProxyPrivate); 6412 #endif 6413 6414 g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), sensor_threshold_interface_info ()); 6415 } 6416 6417 static void 6418 sensor_threshold_proxy_class_init (SensorThresholdProxyClass *klass) 6419 { 6420 GObjectClass *gobject_class; 6421 GDBusProxyClass *proxy_class; 6422 6423 gobject_class = G_OBJECT_CLASS (klass); 6424 gobject_class->finalize = sensor_threshold_proxy_finalize; 6425 gobject_class->get_property = sensor_threshold_proxy_get_property; 6426 gobject_class->set_property = sensor_threshold_proxy_set_property; 6427 6428 proxy_class = G_DBUS_PROXY_CLASS (klass); 6429 proxy_class->g_signal = sensor_threshold_proxy_g_signal; 6430 proxy_class->g_properties_changed = sensor_threshold_proxy_g_properties_changed; 6431 6432 sensor_threshold_override_properties (gobject_class, 1); 6433 6434 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 6435 g_type_class_add_private (klass, sizeof (SensorThresholdProxyPrivate)); 6436 #endif 6437 } 6438 6439 static void 6440 sensor_threshold_proxy_iface_init (SensorThresholdIface *iface) 6441 { 6442 iface->get_lower_critical = sensor_threshold_proxy_get_lower_critical; 6443 iface->get_lower_warning = sensor_threshold_proxy_get_lower_warning; 6444 iface->get_upper_warning = sensor_threshold_proxy_get_upper_warning; 6445 iface->get_upper_critical = sensor_threshold_proxy_get_upper_critical; 6446 iface->get_state = sensor_threshold_proxy_get_state; 6447 } 6448 6449 /** 6450 * sensor_threshold_proxy_new: 6451 * @connection: A #GDBusConnection. 6452 * @flags: Flags from the #GDBusProxyFlags enumeration. 6453 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 6454 * @object_path: An object path. 6455 * @cancellable: (allow-none): A #GCancellable or %NULL. 6456 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 6457 * @user_data: User data to pass to @callback. 6458 * 6459 * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorThreshold.top_of_page">org.openbmc.SensorThreshold</link>. See g_dbus_proxy_new() for more details. 6460 * 6461 * 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. 6462 * You can then call sensor_threshold_proxy_new_finish() to get the result of the operation. 6463 * 6464 * See sensor_threshold_proxy_new_sync() for the synchronous, blocking version of this constructor. 6465 */ 6466 void 6467 sensor_threshold_proxy_new ( 6468 GDBusConnection *connection, 6469 GDBusProxyFlags flags, 6470 const gchar *name, 6471 const gchar *object_path, 6472 GCancellable *cancellable, 6473 GAsyncReadyCallback callback, 6474 gpointer user_data) 6475 { 6476 g_async_initable_new_async (TYPE_SENSOR_THRESHOLD_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.SensorThreshold", NULL); 6477 } 6478 6479 /** 6480 * sensor_threshold_proxy_new_finish: 6481 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to sensor_threshold_proxy_new(). 6482 * @error: Return location for error or %NULL 6483 * 6484 * Finishes an operation started with sensor_threshold_proxy_new(). 6485 * 6486 * Returns: (transfer full) (type SensorThresholdProxy): The constructed proxy object or %NULL if @error is set. 6487 */ 6488 SensorThreshold * 6489 sensor_threshold_proxy_new_finish ( 6490 GAsyncResult *res, 6491 GError **error) 6492 { 6493 GObject *ret; 6494 GObject *source_object; 6495 source_object = g_async_result_get_source_object (res); 6496 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 6497 g_object_unref (source_object); 6498 if (ret != NULL) 6499 return SENSOR_THRESHOLD (ret); 6500 else 6501 return NULL; 6502 } 6503 6504 /** 6505 * sensor_threshold_proxy_new_sync: 6506 * @connection: A #GDBusConnection. 6507 * @flags: Flags from the #GDBusProxyFlags enumeration. 6508 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 6509 * @object_path: An object path. 6510 * @cancellable: (allow-none): A #GCancellable or %NULL. 6511 * @error: Return location for error or %NULL 6512 * 6513 * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorThreshold.top_of_page">org.openbmc.SensorThreshold</link>. See g_dbus_proxy_new_sync() for more details. 6514 * 6515 * The calling thread is blocked until a reply is received. 6516 * 6517 * See sensor_threshold_proxy_new() for the asynchronous version of this constructor. 6518 * 6519 * Returns: (transfer full) (type SensorThresholdProxy): The constructed proxy object or %NULL if @error is set. 6520 */ 6521 SensorThreshold * 6522 sensor_threshold_proxy_new_sync ( 6523 GDBusConnection *connection, 6524 GDBusProxyFlags flags, 6525 const gchar *name, 6526 const gchar *object_path, 6527 GCancellable *cancellable, 6528 GError **error) 6529 { 6530 GInitable *ret; 6531 ret = g_initable_new (TYPE_SENSOR_THRESHOLD_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.SensorThreshold", NULL); 6532 if (ret != NULL) 6533 return SENSOR_THRESHOLD (ret); 6534 else 6535 return NULL; 6536 } 6537 6538 6539 /** 6540 * sensor_threshold_proxy_new_for_bus: 6541 * @bus_type: A #GBusType. 6542 * @flags: Flags from the #GDBusProxyFlags enumeration. 6543 * @name: A bus name (well-known or unique). 6544 * @object_path: An object path. 6545 * @cancellable: (allow-none): A #GCancellable or %NULL. 6546 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 6547 * @user_data: User data to pass to @callback. 6548 * 6549 * Like sensor_threshold_proxy_new() but takes a #GBusType instead of a #GDBusConnection. 6550 * 6551 * 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. 6552 * You can then call sensor_threshold_proxy_new_for_bus_finish() to get the result of the operation. 6553 * 6554 * See sensor_threshold_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor. 6555 */ 6556 void 6557 sensor_threshold_proxy_new_for_bus ( 6558 GBusType bus_type, 6559 GDBusProxyFlags flags, 6560 const gchar *name, 6561 const gchar *object_path, 6562 GCancellable *cancellable, 6563 GAsyncReadyCallback callback, 6564 gpointer user_data) 6565 { 6566 g_async_initable_new_async (TYPE_SENSOR_THRESHOLD_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.SensorThreshold", NULL); 6567 } 6568 6569 /** 6570 * sensor_threshold_proxy_new_for_bus_finish: 6571 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to sensor_threshold_proxy_new_for_bus(). 6572 * @error: Return location for error or %NULL 6573 * 6574 * Finishes an operation started with sensor_threshold_proxy_new_for_bus(). 6575 * 6576 * Returns: (transfer full) (type SensorThresholdProxy): The constructed proxy object or %NULL if @error is set. 6577 */ 6578 SensorThreshold * 6579 sensor_threshold_proxy_new_for_bus_finish ( 6580 GAsyncResult *res, 6581 GError **error) 6582 { 6583 GObject *ret; 6584 GObject *source_object; 6585 source_object = g_async_result_get_source_object (res); 6586 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 6587 g_object_unref (source_object); 6588 if (ret != NULL) 6589 return SENSOR_THRESHOLD (ret); 6590 else 6591 return NULL; 6592 } 6593 6594 /** 6595 * sensor_threshold_proxy_new_for_bus_sync: 6596 * @bus_type: A #GBusType. 6597 * @flags: Flags from the #GDBusProxyFlags enumeration. 6598 * @name: A bus name (well-known or unique). 6599 * @object_path: An object path. 6600 * @cancellable: (allow-none): A #GCancellable or %NULL. 6601 * @error: Return location for error or %NULL 6602 * 6603 * Like sensor_threshold_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection. 6604 * 6605 * The calling thread is blocked until a reply is received. 6606 * 6607 * See sensor_threshold_proxy_new_for_bus() for the asynchronous version of this constructor. 6608 * 6609 * Returns: (transfer full) (type SensorThresholdProxy): The constructed proxy object or %NULL if @error is set. 6610 */ 6611 SensorThreshold * 6612 sensor_threshold_proxy_new_for_bus_sync ( 6613 GBusType bus_type, 6614 GDBusProxyFlags flags, 6615 const gchar *name, 6616 const gchar *object_path, 6617 GCancellable *cancellable, 6618 GError **error) 6619 { 6620 GInitable *ret; 6621 ret = g_initable_new (TYPE_SENSOR_THRESHOLD_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.SensorThreshold", NULL); 6622 if (ret != NULL) 6623 return SENSOR_THRESHOLD (ret); 6624 else 6625 return NULL; 6626 } 6627 6628 6629 /* ------------------------------------------------------------------------ */ 6630 6631 /** 6632 * SensorThresholdSkeleton: 6633 * 6634 * The #SensorThresholdSkeleton structure contains only private data and should only be accessed using the provided API. 6635 */ 6636 6637 /** 6638 * SensorThresholdSkeletonClass: 6639 * @parent_class: The parent class. 6640 * 6641 * Class structure for #SensorThresholdSkeleton. 6642 */ 6643 6644 struct _SensorThresholdSkeletonPrivate 6645 { 6646 GValue *properties; 6647 GList *changed_properties; 6648 GSource *changed_properties_idle_source; 6649 GMainContext *context; 6650 GMutex lock; 6651 }; 6652 6653 static void 6654 _sensor_threshold_skeleton_handle_method_call ( 6655 GDBusConnection *connection G_GNUC_UNUSED, 6656 const gchar *sender G_GNUC_UNUSED, 6657 const gchar *object_path G_GNUC_UNUSED, 6658 const gchar *interface_name, 6659 const gchar *method_name, 6660 GVariant *parameters, 6661 GDBusMethodInvocation *invocation, 6662 gpointer user_data) 6663 { 6664 SensorThresholdSkeleton *skeleton = SENSOR_THRESHOLD_SKELETON (user_data); 6665 _ExtendedGDBusMethodInfo *info; 6666 GVariantIter iter; 6667 GVariant *child; 6668 GValue *paramv; 6669 guint num_params; 6670 guint num_extra; 6671 guint n; 6672 guint signal_id; 6673 GValue return_value = G_VALUE_INIT; 6674 info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation); 6675 g_assert (info != NULL); 6676 num_params = g_variant_n_children (parameters); 6677 num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra); 6678 n = 0; 6679 g_value_init (¶mv[n], TYPE_SENSOR_THRESHOLD); 6680 g_value_set_object (¶mv[n++], skeleton); 6681 g_value_init (¶mv[n], G_TYPE_DBUS_METHOD_INVOCATION); 6682 g_value_set_object (¶mv[n++], invocation); 6683 if (info->pass_fdlist) 6684 { 6685 #ifdef G_OS_UNIX 6686 g_value_init (¶mv[n], G_TYPE_UNIX_FD_LIST); 6687 g_value_set_object (¶mv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation))); 6688 #else 6689 g_assert_not_reached (); 6690 #endif 6691 } 6692 g_variant_iter_init (&iter, parameters); 6693 while ((child = g_variant_iter_next_value (&iter)) != NULL) 6694 { 6695 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra]; 6696 if (arg_info->use_gvariant) 6697 { 6698 g_value_init (¶mv[n], G_TYPE_VARIANT); 6699 g_value_set_variant (¶mv[n], child); 6700 n++; 6701 } 6702 else 6703 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 6704 g_variant_unref (child); 6705 } 6706 signal_id = g_signal_lookup (info->signal_name, TYPE_SENSOR_THRESHOLD); 6707 g_value_init (&return_value, G_TYPE_BOOLEAN); 6708 g_signal_emitv (paramv, signal_id, 0, &return_value); 6709 if (!g_value_get_boolean (&return_value)) 6710 g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name); 6711 g_value_unset (&return_value); 6712 for (n = 0; n < num_params + num_extra; n++) 6713 g_value_unset (¶mv[n]); 6714 g_free (paramv); 6715 } 6716 6717 static GVariant * 6718 _sensor_threshold_skeleton_handle_get_property ( 6719 GDBusConnection *connection G_GNUC_UNUSED, 6720 const gchar *sender G_GNUC_UNUSED, 6721 const gchar *object_path G_GNUC_UNUSED, 6722 const gchar *interface_name G_GNUC_UNUSED, 6723 const gchar *property_name, 6724 GError **error, 6725 gpointer user_data) 6726 { 6727 SensorThresholdSkeleton *skeleton = SENSOR_THRESHOLD_SKELETON (user_data); 6728 GValue value = G_VALUE_INIT; 6729 GParamSpec *pspec; 6730 _ExtendedGDBusPropertyInfo *info; 6731 GVariant *ret; 6732 ret = NULL; 6733 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_sensor_threshold_interface_info.parent_struct, property_name); 6734 g_assert (info != NULL); 6735 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 6736 if (pspec == NULL) 6737 { 6738 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 6739 } 6740 else 6741 { 6742 g_value_init (&value, pspec->value_type); 6743 g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value); 6744 ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature)); 6745 g_value_unset (&value); 6746 } 6747 return ret; 6748 } 6749 6750 static gboolean 6751 _sensor_threshold_skeleton_handle_set_property ( 6752 GDBusConnection *connection G_GNUC_UNUSED, 6753 const gchar *sender G_GNUC_UNUSED, 6754 const gchar *object_path G_GNUC_UNUSED, 6755 const gchar *interface_name G_GNUC_UNUSED, 6756 const gchar *property_name, 6757 GVariant *variant, 6758 GError **error, 6759 gpointer user_data) 6760 { 6761 SensorThresholdSkeleton *skeleton = SENSOR_THRESHOLD_SKELETON (user_data); 6762 GValue value = G_VALUE_INIT; 6763 GParamSpec *pspec; 6764 _ExtendedGDBusPropertyInfo *info; 6765 gboolean ret; 6766 ret = FALSE; 6767 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_sensor_threshold_interface_info.parent_struct, property_name); 6768 g_assert (info != NULL); 6769 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 6770 if (pspec == NULL) 6771 { 6772 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 6773 } 6774 else 6775 { 6776 if (info->use_gvariant) 6777 g_value_set_variant (&value, variant); 6778 else 6779 g_dbus_gvariant_to_gvalue (variant, &value); 6780 g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value); 6781 g_value_unset (&value); 6782 ret = TRUE; 6783 } 6784 return ret; 6785 } 6786 6787 static const GDBusInterfaceVTable _sensor_threshold_skeleton_vtable = 6788 { 6789 _sensor_threshold_skeleton_handle_method_call, 6790 _sensor_threshold_skeleton_handle_get_property, 6791 _sensor_threshold_skeleton_handle_set_property, 6792 {NULL} 6793 }; 6794 6795 static GDBusInterfaceInfo * 6796 sensor_threshold_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 6797 { 6798 return sensor_threshold_interface_info (); 6799 } 6800 6801 static GDBusInterfaceVTable * 6802 sensor_threshold_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 6803 { 6804 return (GDBusInterfaceVTable *) &_sensor_threshold_skeleton_vtable; 6805 } 6806 6807 static GVariant * 6808 sensor_threshold_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton) 6809 { 6810 SensorThresholdSkeleton *skeleton = SENSOR_THRESHOLD_SKELETON (_skeleton); 6811 6812 GVariantBuilder builder; 6813 guint n; 6814 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 6815 if (_sensor_threshold_interface_info.parent_struct.properties == NULL) 6816 goto out; 6817 for (n = 0; _sensor_threshold_interface_info.parent_struct.properties[n] != NULL; n++) 6818 { 6819 GDBusPropertyInfo *info = _sensor_threshold_interface_info.parent_struct.properties[n]; 6820 if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE) 6821 { 6822 GVariant *value; 6823 value = _sensor_threshold_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.SensorThreshold", info->name, NULL, skeleton); 6824 if (value != NULL) 6825 { 6826 g_variant_take_ref (value); 6827 g_variant_builder_add (&builder, "{sv}", info->name, value); 6828 g_variant_unref (value); 6829 } 6830 } 6831 } 6832 out: 6833 return g_variant_builder_end (&builder); 6834 } 6835 6836 static gboolean _sensor_threshold_emit_changed (gpointer user_data); 6837 6838 static void 6839 sensor_threshold_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton) 6840 { 6841 SensorThresholdSkeleton *skeleton = SENSOR_THRESHOLD_SKELETON (_skeleton); 6842 gboolean emit_changed = FALSE; 6843 6844 g_mutex_lock (&skeleton->priv->lock); 6845 if (skeleton->priv->changed_properties_idle_source != NULL) 6846 { 6847 g_source_destroy (skeleton->priv->changed_properties_idle_source); 6848 skeleton->priv->changed_properties_idle_source = NULL; 6849 emit_changed = TRUE; 6850 } 6851 g_mutex_unlock (&skeleton->priv->lock); 6852 6853 if (emit_changed) 6854 _sensor_threshold_emit_changed (skeleton); 6855 } 6856 6857 static void 6858 _sensor_threshold_on_signal_warning ( 6859 SensorThreshold *object) 6860 { 6861 SensorThresholdSkeleton *skeleton = SENSOR_THRESHOLD_SKELETON (object); 6862 6863 GList *connections, *l; 6864 GVariant *signal_variant; 6865 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 6866 6867 signal_variant = g_variant_ref_sink (g_variant_new ("()")); 6868 for (l = connections; l != NULL; l = l->next) 6869 { 6870 GDBusConnection *connection = l->data; 6871 g_dbus_connection_emit_signal (connection, 6872 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.SensorThreshold", "Warning", 6873 signal_variant, NULL); 6874 } 6875 g_variant_unref (signal_variant); 6876 g_list_free_full (connections, g_object_unref); 6877 } 6878 6879 static void 6880 _sensor_threshold_on_signal_critical ( 6881 SensorThreshold *object) 6882 { 6883 SensorThresholdSkeleton *skeleton = SENSOR_THRESHOLD_SKELETON (object); 6884 6885 GList *connections, *l; 6886 GVariant *signal_variant; 6887 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 6888 6889 signal_variant = g_variant_ref_sink (g_variant_new ("()")); 6890 for (l = connections; l != NULL; l = l->next) 6891 { 6892 GDBusConnection *connection = l->data; 6893 g_dbus_connection_emit_signal (connection, 6894 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.SensorThreshold", "Critical", 6895 signal_variant, NULL); 6896 } 6897 g_variant_unref (signal_variant); 6898 g_list_free_full (connections, g_object_unref); 6899 } 6900 6901 static void 6902 _sensor_threshold_on_signal_normal ( 6903 SensorThreshold *object) 6904 { 6905 SensorThresholdSkeleton *skeleton = SENSOR_THRESHOLD_SKELETON (object); 6906 6907 GList *connections, *l; 6908 GVariant *signal_variant; 6909 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 6910 6911 signal_variant = g_variant_ref_sink (g_variant_new ("()")); 6912 for (l = connections; l != NULL; l = l->next) 6913 { 6914 GDBusConnection *connection = l->data; 6915 g_dbus_connection_emit_signal (connection, 6916 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.SensorThreshold", "Normal", 6917 signal_variant, NULL); 6918 } 6919 g_variant_unref (signal_variant); 6920 g_list_free_full (connections, g_object_unref); 6921 } 6922 6923 static void sensor_threshold_skeleton_iface_init (SensorThresholdIface *iface); 6924 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 6925 G_DEFINE_TYPE_WITH_CODE (SensorThresholdSkeleton, sensor_threshold_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 6926 G_ADD_PRIVATE (SensorThresholdSkeleton) 6927 G_IMPLEMENT_INTERFACE (TYPE_SENSOR_THRESHOLD, sensor_threshold_skeleton_iface_init)); 6928 6929 #else 6930 G_DEFINE_TYPE_WITH_CODE (SensorThresholdSkeleton, sensor_threshold_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 6931 G_IMPLEMENT_INTERFACE (TYPE_SENSOR_THRESHOLD, sensor_threshold_skeleton_iface_init)); 6932 6933 #endif 6934 static void 6935 sensor_threshold_skeleton_finalize (GObject *object) 6936 { 6937 SensorThresholdSkeleton *skeleton = SENSOR_THRESHOLD_SKELETON (object); 6938 guint n; 6939 for (n = 0; n < 5; n++) 6940 g_value_unset (&skeleton->priv->properties[n]); 6941 g_free (skeleton->priv->properties); 6942 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 6943 if (skeleton->priv->changed_properties_idle_source != NULL) 6944 g_source_destroy (skeleton->priv->changed_properties_idle_source); 6945 g_main_context_unref (skeleton->priv->context); 6946 g_mutex_clear (&skeleton->priv->lock); 6947 G_OBJECT_CLASS (sensor_threshold_skeleton_parent_class)->finalize (object); 6948 } 6949 6950 static void 6951 sensor_threshold_skeleton_get_property (GObject *object, 6952 guint prop_id, 6953 GValue *value, 6954 GParamSpec *pspec G_GNUC_UNUSED) 6955 { 6956 SensorThresholdSkeleton *skeleton = SENSOR_THRESHOLD_SKELETON (object); 6957 g_assert (prop_id != 0 && prop_id - 1 < 5); 6958 g_mutex_lock (&skeleton->priv->lock); 6959 g_value_copy (&skeleton->priv->properties[prop_id - 1], value); 6960 g_mutex_unlock (&skeleton->priv->lock); 6961 } 6962 6963 static gboolean 6964 _sensor_threshold_emit_changed (gpointer user_data) 6965 { 6966 SensorThresholdSkeleton *skeleton = SENSOR_THRESHOLD_SKELETON (user_data); 6967 GList *l; 6968 GVariantBuilder builder; 6969 GVariantBuilder invalidated_builder; 6970 guint num_changes; 6971 6972 g_mutex_lock (&skeleton->priv->lock); 6973 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 6974 g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as")); 6975 for (l = skeleton->priv->changed_properties, num_changes = 0; l != NULL; l = l->next) 6976 { 6977 ChangedProperty *cp = l->data; 6978 GVariant *variant; 6979 const GValue *cur_value; 6980 6981 cur_value = &skeleton->priv->properties[cp->prop_id - 1]; 6982 if (!_g_value_equal (cur_value, &cp->orig_value)) 6983 { 6984 variant = g_dbus_gvalue_to_gvariant (cur_value, G_VARIANT_TYPE (cp->info->parent_struct.signature)); 6985 g_variant_builder_add (&builder, "{sv}", cp->info->parent_struct.name, variant); 6986 g_variant_unref (variant); 6987 num_changes++; 6988 } 6989 } 6990 if (num_changes > 0) 6991 { 6992 GList *connections, *ll; 6993 GVariant *signal_variant; 6994 signal_variant = g_variant_ref_sink (g_variant_new ("(sa{sv}as)", "org.openbmc.SensorThreshold", 6995 &builder, &invalidated_builder)); 6996 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 6997 for (ll = connections; ll != NULL; ll = ll->next) 6998 { 6999 GDBusConnection *connection = ll->data; 7000 7001 g_dbus_connection_emit_signal (connection, 7002 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), 7003 "org.freedesktop.DBus.Properties", 7004 "PropertiesChanged", 7005 signal_variant, 7006 NULL); 7007 } 7008 g_variant_unref (signal_variant); 7009 g_list_free_full (connections, g_object_unref); 7010 } 7011 else 7012 { 7013 g_variant_builder_clear (&builder); 7014 g_variant_builder_clear (&invalidated_builder); 7015 } 7016 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 7017 skeleton->priv->changed_properties = NULL; 7018 skeleton->priv->changed_properties_idle_source = NULL; 7019 g_mutex_unlock (&skeleton->priv->lock); 7020 return FALSE; 7021 } 7022 7023 static void 7024 _sensor_threshold_schedule_emit_changed (SensorThresholdSkeleton *skeleton, const _ExtendedGDBusPropertyInfo *info, guint prop_id, const GValue *orig_value) 7025 { 7026 ChangedProperty *cp; 7027 GList *l; 7028 cp = NULL; 7029 for (l = skeleton->priv->changed_properties; l != NULL; l = l->next) 7030 { 7031 ChangedProperty *i_cp = l->data; 7032 if (i_cp->info == info) 7033 { 7034 cp = i_cp; 7035 break; 7036 } 7037 } 7038 if (cp == NULL) 7039 { 7040 cp = g_new0 (ChangedProperty, 1); 7041 cp->prop_id = prop_id; 7042 cp->info = info; 7043 skeleton->priv->changed_properties = g_list_prepend (skeleton->priv->changed_properties, cp); 7044 g_value_init (&cp->orig_value, G_VALUE_TYPE (orig_value)); 7045 g_value_copy (orig_value, &cp->orig_value); 7046 } 7047 } 7048 7049 static void 7050 sensor_threshold_skeleton_notify (GObject *object, 7051 GParamSpec *pspec G_GNUC_UNUSED) 7052 { 7053 SensorThresholdSkeleton *skeleton = SENSOR_THRESHOLD_SKELETON (object); 7054 g_mutex_lock (&skeleton->priv->lock); 7055 if (skeleton->priv->changed_properties != NULL && 7056 skeleton->priv->changed_properties_idle_source == NULL) 7057 { 7058 skeleton->priv->changed_properties_idle_source = g_idle_source_new (); 7059 g_source_set_priority (skeleton->priv->changed_properties_idle_source, G_PRIORITY_DEFAULT); 7060 g_source_set_callback (skeleton->priv->changed_properties_idle_source, _sensor_threshold_emit_changed, g_object_ref (skeleton), (GDestroyNotify) g_object_unref); 7061 g_source_set_name (skeleton->priv->changed_properties_idle_source, "[generated] _sensor_threshold_emit_changed"); 7062 g_source_attach (skeleton->priv->changed_properties_idle_source, skeleton->priv->context); 7063 g_source_unref (skeleton->priv->changed_properties_idle_source); 7064 } 7065 g_mutex_unlock (&skeleton->priv->lock); 7066 } 7067 7068 static void 7069 sensor_threshold_skeleton_set_property (GObject *object, 7070 guint prop_id, 7071 const GValue *value, 7072 GParamSpec *pspec) 7073 { 7074 SensorThresholdSkeleton *skeleton = SENSOR_THRESHOLD_SKELETON (object); 7075 g_assert (prop_id != 0 && prop_id - 1 < 5); 7076 g_mutex_lock (&skeleton->priv->lock); 7077 g_object_freeze_notify (object); 7078 if (!_g_value_equal (value, &skeleton->priv->properties[prop_id - 1])) 7079 { 7080 if (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)) != NULL) 7081 _sensor_threshold_schedule_emit_changed (skeleton, _sensor_threshold_property_info_pointers[prop_id - 1], prop_id, &skeleton->priv->properties[prop_id - 1]); 7082 g_value_copy (value, &skeleton->priv->properties[prop_id - 1]); 7083 g_object_notify_by_pspec (object, pspec); 7084 } 7085 g_mutex_unlock (&skeleton->priv->lock); 7086 g_object_thaw_notify (object); 7087 } 7088 7089 static void 7090 sensor_threshold_skeleton_init (SensorThresholdSkeleton *skeleton) 7091 { 7092 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 7093 skeleton->priv = sensor_threshold_skeleton_get_instance_private (skeleton); 7094 #else 7095 skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, TYPE_SENSOR_THRESHOLD_SKELETON, SensorThresholdSkeletonPrivate); 7096 #endif 7097 7098 g_mutex_init (&skeleton->priv->lock); 7099 skeleton->priv->context = g_main_context_ref_thread_default (); 7100 skeleton->priv->properties = g_new0 (GValue, 5); 7101 g_value_init (&skeleton->priv->properties[0], G_TYPE_VARIANT); 7102 g_value_init (&skeleton->priv->properties[1], G_TYPE_VARIANT); 7103 g_value_init (&skeleton->priv->properties[2], G_TYPE_VARIANT); 7104 g_value_init (&skeleton->priv->properties[3], G_TYPE_VARIANT); 7105 g_value_init (&skeleton->priv->properties[4], G_TYPE_UCHAR); 7106 } 7107 7108 static GVariant * 7109 sensor_threshold_skeleton_get_lower_critical (SensorThreshold *object) 7110 { 7111 SensorThresholdSkeleton *skeleton = SENSOR_THRESHOLD_SKELETON (object); 7112 GVariant *value; 7113 g_mutex_lock (&skeleton->priv->lock); 7114 value = g_value_get_variant (&(skeleton->priv->properties[0])); 7115 g_mutex_unlock (&skeleton->priv->lock); 7116 return value; 7117 } 7118 7119 static GVariant * 7120 sensor_threshold_skeleton_get_lower_warning (SensorThreshold *object) 7121 { 7122 SensorThresholdSkeleton *skeleton = SENSOR_THRESHOLD_SKELETON (object); 7123 GVariant *value; 7124 g_mutex_lock (&skeleton->priv->lock); 7125 value = g_value_get_variant (&(skeleton->priv->properties[1])); 7126 g_mutex_unlock (&skeleton->priv->lock); 7127 return value; 7128 } 7129 7130 static GVariant * 7131 sensor_threshold_skeleton_get_upper_warning (SensorThreshold *object) 7132 { 7133 SensorThresholdSkeleton *skeleton = SENSOR_THRESHOLD_SKELETON (object); 7134 GVariant *value; 7135 g_mutex_lock (&skeleton->priv->lock); 7136 value = g_value_get_variant (&(skeleton->priv->properties[2])); 7137 g_mutex_unlock (&skeleton->priv->lock); 7138 return value; 7139 } 7140 7141 static GVariant * 7142 sensor_threshold_skeleton_get_upper_critical (SensorThreshold *object) 7143 { 7144 SensorThresholdSkeleton *skeleton = SENSOR_THRESHOLD_SKELETON (object); 7145 GVariant *value; 7146 g_mutex_lock (&skeleton->priv->lock); 7147 value = g_value_get_variant (&(skeleton->priv->properties[3])); 7148 g_mutex_unlock (&skeleton->priv->lock); 7149 return value; 7150 } 7151 7152 static guchar 7153 sensor_threshold_skeleton_get_state (SensorThreshold *object) 7154 { 7155 SensorThresholdSkeleton *skeleton = SENSOR_THRESHOLD_SKELETON (object); 7156 guchar value; 7157 g_mutex_lock (&skeleton->priv->lock); 7158 value = g_value_get_uchar (&(skeleton->priv->properties[4])); 7159 g_mutex_unlock (&skeleton->priv->lock); 7160 return value; 7161 } 7162 7163 static void 7164 sensor_threshold_skeleton_class_init (SensorThresholdSkeletonClass *klass) 7165 { 7166 GObjectClass *gobject_class; 7167 GDBusInterfaceSkeletonClass *skeleton_class; 7168 7169 gobject_class = G_OBJECT_CLASS (klass); 7170 gobject_class->finalize = sensor_threshold_skeleton_finalize; 7171 gobject_class->get_property = sensor_threshold_skeleton_get_property; 7172 gobject_class->set_property = sensor_threshold_skeleton_set_property; 7173 gobject_class->notify = sensor_threshold_skeleton_notify; 7174 7175 7176 sensor_threshold_override_properties (gobject_class, 1); 7177 7178 skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass); 7179 skeleton_class->get_info = sensor_threshold_skeleton_dbus_interface_get_info; 7180 skeleton_class->get_properties = sensor_threshold_skeleton_dbus_interface_get_properties; 7181 skeleton_class->flush = sensor_threshold_skeleton_dbus_interface_flush; 7182 skeleton_class->get_vtable = sensor_threshold_skeleton_dbus_interface_get_vtable; 7183 7184 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 7185 g_type_class_add_private (klass, sizeof (SensorThresholdSkeletonPrivate)); 7186 #endif 7187 } 7188 7189 static void 7190 sensor_threshold_skeleton_iface_init (SensorThresholdIface *iface) 7191 { 7192 iface->warning = _sensor_threshold_on_signal_warning; 7193 iface->critical = _sensor_threshold_on_signal_critical; 7194 iface->normal = _sensor_threshold_on_signal_normal; 7195 iface->get_lower_critical = sensor_threshold_skeleton_get_lower_critical; 7196 iface->get_lower_warning = sensor_threshold_skeleton_get_lower_warning; 7197 iface->get_upper_warning = sensor_threshold_skeleton_get_upper_warning; 7198 iface->get_upper_critical = sensor_threshold_skeleton_get_upper_critical; 7199 iface->get_state = sensor_threshold_skeleton_get_state; 7200 } 7201 7202 /** 7203 * sensor_threshold_skeleton_new: 7204 * 7205 * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorThreshold.top_of_page">org.openbmc.SensorThreshold</link>. 7206 * 7207 * Returns: (transfer full) (type SensorThresholdSkeleton): The skeleton object. 7208 */ 7209 SensorThreshold * 7210 sensor_threshold_skeleton_new (void) 7211 { 7212 return SENSOR_THRESHOLD (g_object_new (TYPE_SENSOR_THRESHOLD_SKELETON, NULL)); 7213 } 7214 7215 /* ------------------------------------------------------------------------ 7216 * Code for interface org.openbmc.SensorI2c 7217 * ------------------------------------------------------------------------ 7218 */ 7219 7220 /** 7221 * SECTION:SensorI2c 7222 * @title: SensorI2c 7223 * @short_description: Generated C code for the org.openbmc.SensorI2c D-Bus interface 7224 * 7225 * This section contains code for working with the <link linkend="gdbus-interface-org-openbmc-SensorI2c.top_of_page">org.openbmc.SensorI2c</link> D-Bus interface in C. 7226 */ 7227 7228 /* ---- Introspection data for org.openbmc.SensorI2c ---- */ 7229 7230 static const _ExtendedGDBusPropertyInfo _sensor_i2c_property_info_dev_path = 7231 { 7232 { 7233 -1, 7234 (gchar *) "dev_path", 7235 (gchar *) "s", 7236 G_DBUS_PROPERTY_INFO_FLAGS_READABLE | G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE, 7237 NULL 7238 }, 7239 "dev-path", 7240 FALSE 7241 }; 7242 7243 static const _ExtendedGDBusPropertyInfo _sensor_i2c_property_info_address = 7244 { 7245 { 7246 -1, 7247 (gchar *) "address", 7248 (gchar *) "s", 7249 G_DBUS_PROPERTY_INFO_FLAGS_READABLE | G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE, 7250 NULL 7251 }, 7252 "address", 7253 FALSE 7254 }; 7255 7256 static const _ExtendedGDBusPropertyInfo * const _sensor_i2c_property_info_pointers[] = 7257 { 7258 &_sensor_i2c_property_info_dev_path, 7259 &_sensor_i2c_property_info_address, 7260 NULL 7261 }; 7262 7263 static const _ExtendedGDBusInterfaceInfo _sensor_i2c_interface_info = 7264 { 7265 { 7266 -1, 7267 (gchar *) "org.openbmc.SensorI2c", 7268 NULL, 7269 NULL, 7270 (GDBusPropertyInfo **) &_sensor_i2c_property_info_pointers, 7271 NULL 7272 }, 7273 "sensor-i2c", 7274 }; 7275 7276 7277 /** 7278 * sensor_i2c_interface_info: 7279 * 7280 * Gets a machine-readable description of the <link linkend="gdbus-interface-org-openbmc-SensorI2c.top_of_page">org.openbmc.SensorI2c</link> D-Bus interface. 7281 * 7282 * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free. 7283 */ 7284 GDBusInterfaceInfo * 7285 sensor_i2c_interface_info (void) 7286 { 7287 return (GDBusInterfaceInfo *) &_sensor_i2c_interface_info.parent_struct; 7288 } 7289 7290 /** 7291 * sensor_i2c_override_properties: 7292 * @klass: The class structure for a #GObject<!-- -->-derived class. 7293 * @property_id_begin: The property id to assign to the first overridden property. 7294 * 7295 * Overrides all #GObject properties in the #SensorI2c interface for a concrete class. 7296 * The properties are overridden in the order they are defined. 7297 * 7298 * Returns: The last property id. 7299 */ 7300 guint 7301 sensor_i2c_override_properties (GObjectClass *klass, guint property_id_begin) 7302 { 7303 g_object_class_override_property (klass, property_id_begin++, "dev-path"); 7304 g_object_class_override_property (klass, property_id_begin++, "address"); 7305 return property_id_begin - 1; 7306 } 7307 7308 7309 7310 /** 7311 * SensorI2c: 7312 * 7313 * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorI2c.top_of_page">org.openbmc.SensorI2c</link>. 7314 */ 7315 7316 /** 7317 * SensorI2cIface: 7318 * @parent_iface: The parent interface. 7319 * @get_address: Getter for the #SensorI2c:address property. 7320 * @get_dev_path: Getter for the #SensorI2c:dev-path property. 7321 * 7322 * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorI2c.top_of_page">org.openbmc.SensorI2c</link>. 7323 */ 7324 7325 typedef SensorI2cIface SensorI2cInterface; 7326 G_DEFINE_INTERFACE (SensorI2c, sensor_i2c, G_TYPE_OBJECT); 7327 7328 static void 7329 sensor_i2c_default_init (SensorI2cIface *iface) 7330 { 7331 /* GObject properties for D-Bus properties: */ 7332 /** 7333 * SensorI2c:dev-path: 7334 * 7335 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-SensorI2c.dev_path">"dev_path"</link>. 7336 * 7337 * 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. 7338 */ 7339 g_object_interface_install_property (iface, 7340 g_param_spec_string ("dev-path", "dev_path", "dev_path", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 7341 /** 7342 * SensorI2c:address: 7343 * 7344 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-SensorI2c.address">"address"</link>. 7345 * 7346 * 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. 7347 */ 7348 g_object_interface_install_property (iface, 7349 g_param_spec_string ("address", "address", "address", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 7350 } 7351 7352 /** 7353 * sensor_i2c_get_dev_path: (skip) 7354 * @object: A #SensorI2c. 7355 * 7356 * Gets the value of the <link linkend="gdbus-property-org-openbmc-SensorI2c.dev_path">"dev_path"</link> D-Bus property. 7357 * 7358 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 7359 * 7360 * <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 sensor_i2c_dup_dev_path() if on another thread.</warning> 7361 * 7362 * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object. 7363 */ 7364 const gchar * 7365 sensor_i2c_get_dev_path (SensorI2c *object) 7366 { 7367 return SENSOR_I2C_GET_IFACE (object)->get_dev_path (object); 7368 } 7369 7370 /** 7371 * sensor_i2c_dup_dev_path: (skip) 7372 * @object: A #SensorI2c. 7373 * 7374 * Gets a copy of the <link linkend="gdbus-property-org-openbmc-SensorI2c.dev_path">"dev_path"</link> D-Bus property. 7375 * 7376 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 7377 * 7378 * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value should be freed with g_free(). 7379 */ 7380 gchar * 7381 sensor_i2c_dup_dev_path (SensorI2c *object) 7382 { 7383 gchar *value; 7384 g_object_get (G_OBJECT (object), "dev-path", &value, NULL); 7385 return value; 7386 } 7387 7388 /** 7389 * sensor_i2c_set_dev_path: (skip) 7390 * @object: A #SensorI2c. 7391 * @value: The value to set. 7392 * 7393 * Sets the <link linkend="gdbus-property-org-openbmc-SensorI2c.dev_path">"dev_path"</link> D-Bus property to @value. 7394 * 7395 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 7396 */ 7397 void 7398 sensor_i2c_set_dev_path (SensorI2c *object, const gchar *value) 7399 { 7400 g_object_set (G_OBJECT (object), "dev-path", value, NULL); 7401 } 7402 7403 /** 7404 * sensor_i2c_get_address: (skip) 7405 * @object: A #SensorI2c. 7406 * 7407 * Gets the value of the <link linkend="gdbus-property-org-openbmc-SensorI2c.address">"address"</link> D-Bus property. 7408 * 7409 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 7410 * 7411 * <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 sensor_i2c_dup_address() if on another thread.</warning> 7412 * 7413 * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object. 7414 */ 7415 const gchar * 7416 sensor_i2c_get_address (SensorI2c *object) 7417 { 7418 return SENSOR_I2C_GET_IFACE (object)->get_address (object); 7419 } 7420 7421 /** 7422 * sensor_i2c_dup_address: (skip) 7423 * @object: A #SensorI2c. 7424 * 7425 * Gets a copy of the <link linkend="gdbus-property-org-openbmc-SensorI2c.address">"address"</link> D-Bus property. 7426 * 7427 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 7428 * 7429 * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value should be freed with g_free(). 7430 */ 7431 gchar * 7432 sensor_i2c_dup_address (SensorI2c *object) 7433 { 7434 gchar *value; 7435 g_object_get (G_OBJECT (object), "address", &value, NULL); 7436 return value; 7437 } 7438 7439 /** 7440 * sensor_i2c_set_address: (skip) 7441 * @object: A #SensorI2c. 7442 * @value: The value to set. 7443 * 7444 * Sets the <link linkend="gdbus-property-org-openbmc-SensorI2c.address">"address"</link> D-Bus property to @value. 7445 * 7446 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 7447 */ 7448 void 7449 sensor_i2c_set_address (SensorI2c *object, const gchar *value) 7450 { 7451 g_object_set (G_OBJECT (object), "address", value, NULL); 7452 } 7453 7454 /* ------------------------------------------------------------------------ */ 7455 7456 /** 7457 * SensorI2cProxy: 7458 * 7459 * The #SensorI2cProxy structure contains only private data and should only be accessed using the provided API. 7460 */ 7461 7462 /** 7463 * SensorI2cProxyClass: 7464 * @parent_class: The parent class. 7465 * 7466 * Class structure for #SensorI2cProxy. 7467 */ 7468 7469 struct _SensorI2cProxyPrivate 7470 { 7471 GData *qdata; 7472 }; 7473 7474 static void sensor_i2c_proxy_iface_init (SensorI2cIface *iface); 7475 7476 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 7477 G_DEFINE_TYPE_WITH_CODE (SensorI2cProxy, sensor_i2c_proxy, G_TYPE_DBUS_PROXY, 7478 G_ADD_PRIVATE (SensorI2cProxy) 7479 G_IMPLEMENT_INTERFACE (TYPE_SENSOR_I2C, sensor_i2c_proxy_iface_init)); 7480 7481 #else 7482 G_DEFINE_TYPE_WITH_CODE (SensorI2cProxy, sensor_i2c_proxy, G_TYPE_DBUS_PROXY, 7483 G_IMPLEMENT_INTERFACE (TYPE_SENSOR_I2C, sensor_i2c_proxy_iface_init)); 7484 7485 #endif 7486 static void 7487 sensor_i2c_proxy_finalize (GObject *object) 7488 { 7489 SensorI2cProxy *proxy = SENSOR_I2C_PROXY (object); 7490 g_datalist_clear (&proxy->priv->qdata); 7491 G_OBJECT_CLASS (sensor_i2c_proxy_parent_class)->finalize (object); 7492 } 7493 7494 static void 7495 sensor_i2c_proxy_get_property (GObject *object, 7496 guint prop_id, 7497 GValue *value, 7498 GParamSpec *pspec G_GNUC_UNUSED) 7499 { 7500 const _ExtendedGDBusPropertyInfo *info; 7501 GVariant *variant; 7502 g_assert (prop_id != 0 && prop_id - 1 < 2); 7503 info = _sensor_i2c_property_info_pointers[prop_id - 1]; 7504 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (object), info->parent_struct.name); 7505 if (info->use_gvariant) 7506 { 7507 g_value_set_variant (value, variant); 7508 } 7509 else 7510 { 7511 if (variant != NULL) 7512 g_dbus_gvariant_to_gvalue (variant, value); 7513 } 7514 if (variant != NULL) 7515 g_variant_unref (variant); 7516 } 7517 7518 static void 7519 sensor_i2c_proxy_set_property_cb (GDBusProxy *proxy, 7520 GAsyncResult *res, 7521 gpointer user_data) 7522 { 7523 const _ExtendedGDBusPropertyInfo *info = user_data; 7524 GError *error; 7525 GVariant *_ret; 7526 error = NULL; 7527 _ret = g_dbus_proxy_call_finish (proxy, res, &error); 7528 if (!_ret) 7529 { 7530 g_warning ("Error setting property '%s' on interface org.openbmc.SensorI2c: %s (%s, %d)", 7531 info->parent_struct.name, 7532 error->message, g_quark_to_string (error->domain), error->code); 7533 g_error_free (error); 7534 } 7535 else 7536 { 7537 g_variant_unref (_ret); 7538 } 7539 } 7540 7541 static void 7542 sensor_i2c_proxy_set_property (GObject *object, 7543 guint prop_id, 7544 const GValue *value, 7545 GParamSpec *pspec G_GNUC_UNUSED) 7546 { 7547 const _ExtendedGDBusPropertyInfo *info; 7548 GVariant *variant; 7549 g_assert (prop_id != 0 && prop_id - 1 < 2); 7550 info = _sensor_i2c_property_info_pointers[prop_id - 1]; 7551 variant = g_dbus_gvalue_to_gvariant (value, G_VARIANT_TYPE (info->parent_struct.signature)); 7552 g_dbus_proxy_call (G_DBUS_PROXY (object), 7553 "org.freedesktop.DBus.Properties.Set", 7554 g_variant_new ("(ssv)", "org.openbmc.SensorI2c", info->parent_struct.name, variant), 7555 G_DBUS_CALL_FLAGS_NONE, 7556 -1, 7557 NULL, (GAsyncReadyCallback) sensor_i2c_proxy_set_property_cb, (GDBusPropertyInfo *) &info->parent_struct); 7558 g_variant_unref (variant); 7559 } 7560 7561 static void 7562 sensor_i2c_proxy_g_signal (GDBusProxy *proxy, 7563 const gchar *sender_name G_GNUC_UNUSED, 7564 const gchar *signal_name, 7565 GVariant *parameters) 7566 { 7567 _ExtendedGDBusSignalInfo *info; 7568 GVariantIter iter; 7569 GVariant *child; 7570 GValue *paramv; 7571 guint num_params; 7572 guint n; 7573 guint signal_id; 7574 info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_sensor_i2c_interface_info.parent_struct, signal_name); 7575 if (info == NULL) 7576 return; 7577 num_params = g_variant_n_children (parameters); 7578 paramv = g_new0 (GValue, num_params + 1); 7579 g_value_init (¶mv[0], TYPE_SENSOR_I2C); 7580 g_value_set_object (¶mv[0], proxy); 7581 g_variant_iter_init (&iter, parameters); 7582 n = 1; 7583 while ((child = g_variant_iter_next_value (&iter)) != NULL) 7584 { 7585 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1]; 7586 if (arg_info->use_gvariant) 7587 { 7588 g_value_init (¶mv[n], G_TYPE_VARIANT); 7589 g_value_set_variant (¶mv[n], child); 7590 n++; 7591 } 7592 else 7593 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 7594 g_variant_unref (child); 7595 } 7596 signal_id = g_signal_lookup (info->signal_name, TYPE_SENSOR_I2C); 7597 g_signal_emitv (paramv, signal_id, 0, NULL); 7598 for (n = 0; n < num_params + 1; n++) 7599 g_value_unset (¶mv[n]); 7600 g_free (paramv); 7601 } 7602 7603 static void 7604 sensor_i2c_proxy_g_properties_changed (GDBusProxy *_proxy, 7605 GVariant *changed_properties, 7606 const gchar *const *invalidated_properties) 7607 { 7608 SensorI2cProxy *proxy = SENSOR_I2C_PROXY (_proxy); 7609 guint n; 7610 const gchar *key; 7611 GVariantIter *iter; 7612 _ExtendedGDBusPropertyInfo *info; 7613 g_variant_get (changed_properties, "a{sv}", &iter); 7614 while (g_variant_iter_next (iter, "{&sv}", &key, NULL)) 7615 { 7616 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_sensor_i2c_interface_info.parent_struct, key); 7617 g_datalist_remove_data (&proxy->priv->qdata, key); 7618 if (info != NULL) 7619 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 7620 } 7621 g_variant_iter_free (iter); 7622 for (n = 0; invalidated_properties[n] != NULL; n++) 7623 { 7624 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_sensor_i2c_interface_info.parent_struct, invalidated_properties[n]); 7625 g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]); 7626 if (info != NULL) 7627 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 7628 } 7629 } 7630 7631 static const gchar * 7632 sensor_i2c_proxy_get_dev_path (SensorI2c *object) 7633 { 7634 SensorI2cProxy *proxy = SENSOR_I2C_PROXY (object); 7635 GVariant *variant; 7636 const gchar *value = NULL; 7637 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "dev_path"); 7638 if (variant != NULL) 7639 { 7640 value = g_variant_get_string (variant, NULL); 7641 g_variant_unref (variant); 7642 } 7643 return value; 7644 } 7645 7646 static const gchar * 7647 sensor_i2c_proxy_get_address (SensorI2c *object) 7648 { 7649 SensorI2cProxy *proxy = SENSOR_I2C_PROXY (object); 7650 GVariant *variant; 7651 const gchar *value = NULL; 7652 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "address"); 7653 if (variant != NULL) 7654 { 7655 value = g_variant_get_string (variant, NULL); 7656 g_variant_unref (variant); 7657 } 7658 return value; 7659 } 7660 7661 static void 7662 sensor_i2c_proxy_init (SensorI2cProxy *proxy) 7663 { 7664 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 7665 proxy->priv = sensor_i2c_proxy_get_instance_private (proxy); 7666 #else 7667 proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, TYPE_SENSOR_I2C_PROXY, SensorI2cProxyPrivate); 7668 #endif 7669 7670 g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), sensor_i2c_interface_info ()); 7671 } 7672 7673 static void 7674 sensor_i2c_proxy_class_init (SensorI2cProxyClass *klass) 7675 { 7676 GObjectClass *gobject_class; 7677 GDBusProxyClass *proxy_class; 7678 7679 gobject_class = G_OBJECT_CLASS (klass); 7680 gobject_class->finalize = sensor_i2c_proxy_finalize; 7681 gobject_class->get_property = sensor_i2c_proxy_get_property; 7682 gobject_class->set_property = sensor_i2c_proxy_set_property; 7683 7684 proxy_class = G_DBUS_PROXY_CLASS (klass); 7685 proxy_class->g_signal = sensor_i2c_proxy_g_signal; 7686 proxy_class->g_properties_changed = sensor_i2c_proxy_g_properties_changed; 7687 7688 sensor_i2c_override_properties (gobject_class, 1); 7689 7690 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 7691 g_type_class_add_private (klass, sizeof (SensorI2cProxyPrivate)); 7692 #endif 7693 } 7694 7695 static void 7696 sensor_i2c_proxy_iface_init (SensorI2cIface *iface) 7697 { 7698 iface->get_dev_path = sensor_i2c_proxy_get_dev_path; 7699 iface->get_address = sensor_i2c_proxy_get_address; 7700 } 7701 7702 /** 7703 * sensor_i2c_proxy_new: 7704 * @connection: A #GDBusConnection. 7705 * @flags: Flags from the #GDBusProxyFlags enumeration. 7706 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 7707 * @object_path: An object path. 7708 * @cancellable: (allow-none): A #GCancellable or %NULL. 7709 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 7710 * @user_data: User data to pass to @callback. 7711 * 7712 * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorI2c.top_of_page">org.openbmc.SensorI2c</link>. See g_dbus_proxy_new() for more details. 7713 * 7714 * 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. 7715 * You can then call sensor_i2c_proxy_new_finish() to get the result of the operation. 7716 * 7717 * See sensor_i2c_proxy_new_sync() for the synchronous, blocking version of this constructor. 7718 */ 7719 void 7720 sensor_i2c_proxy_new ( 7721 GDBusConnection *connection, 7722 GDBusProxyFlags flags, 7723 const gchar *name, 7724 const gchar *object_path, 7725 GCancellable *cancellable, 7726 GAsyncReadyCallback callback, 7727 gpointer user_data) 7728 { 7729 g_async_initable_new_async (TYPE_SENSOR_I2C_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.SensorI2c", NULL); 7730 } 7731 7732 /** 7733 * sensor_i2c_proxy_new_finish: 7734 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to sensor_i2c_proxy_new(). 7735 * @error: Return location for error or %NULL 7736 * 7737 * Finishes an operation started with sensor_i2c_proxy_new(). 7738 * 7739 * Returns: (transfer full) (type SensorI2cProxy): The constructed proxy object or %NULL if @error is set. 7740 */ 7741 SensorI2c * 7742 sensor_i2c_proxy_new_finish ( 7743 GAsyncResult *res, 7744 GError **error) 7745 { 7746 GObject *ret; 7747 GObject *source_object; 7748 source_object = g_async_result_get_source_object (res); 7749 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 7750 g_object_unref (source_object); 7751 if (ret != NULL) 7752 return SENSOR_I2C (ret); 7753 else 7754 return NULL; 7755 } 7756 7757 /** 7758 * sensor_i2c_proxy_new_sync: 7759 * @connection: A #GDBusConnection. 7760 * @flags: Flags from the #GDBusProxyFlags enumeration. 7761 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 7762 * @object_path: An object path. 7763 * @cancellable: (allow-none): A #GCancellable or %NULL. 7764 * @error: Return location for error or %NULL 7765 * 7766 * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorI2c.top_of_page">org.openbmc.SensorI2c</link>. See g_dbus_proxy_new_sync() for more details. 7767 * 7768 * The calling thread is blocked until a reply is received. 7769 * 7770 * See sensor_i2c_proxy_new() for the asynchronous version of this constructor. 7771 * 7772 * Returns: (transfer full) (type SensorI2cProxy): The constructed proxy object or %NULL if @error is set. 7773 */ 7774 SensorI2c * 7775 sensor_i2c_proxy_new_sync ( 7776 GDBusConnection *connection, 7777 GDBusProxyFlags flags, 7778 const gchar *name, 7779 const gchar *object_path, 7780 GCancellable *cancellable, 7781 GError **error) 7782 { 7783 GInitable *ret; 7784 ret = g_initable_new (TYPE_SENSOR_I2C_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.SensorI2c", NULL); 7785 if (ret != NULL) 7786 return SENSOR_I2C (ret); 7787 else 7788 return NULL; 7789 } 7790 7791 7792 /** 7793 * sensor_i2c_proxy_new_for_bus: 7794 * @bus_type: A #GBusType. 7795 * @flags: Flags from the #GDBusProxyFlags enumeration. 7796 * @name: A bus name (well-known or unique). 7797 * @object_path: An object path. 7798 * @cancellable: (allow-none): A #GCancellable or %NULL. 7799 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 7800 * @user_data: User data to pass to @callback. 7801 * 7802 * Like sensor_i2c_proxy_new() but takes a #GBusType instead of a #GDBusConnection. 7803 * 7804 * 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. 7805 * You can then call sensor_i2c_proxy_new_for_bus_finish() to get the result of the operation. 7806 * 7807 * See sensor_i2c_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor. 7808 */ 7809 void 7810 sensor_i2c_proxy_new_for_bus ( 7811 GBusType bus_type, 7812 GDBusProxyFlags flags, 7813 const gchar *name, 7814 const gchar *object_path, 7815 GCancellable *cancellable, 7816 GAsyncReadyCallback callback, 7817 gpointer user_data) 7818 { 7819 g_async_initable_new_async (TYPE_SENSOR_I2C_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.SensorI2c", NULL); 7820 } 7821 7822 /** 7823 * sensor_i2c_proxy_new_for_bus_finish: 7824 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to sensor_i2c_proxy_new_for_bus(). 7825 * @error: Return location for error or %NULL 7826 * 7827 * Finishes an operation started with sensor_i2c_proxy_new_for_bus(). 7828 * 7829 * Returns: (transfer full) (type SensorI2cProxy): The constructed proxy object or %NULL if @error is set. 7830 */ 7831 SensorI2c * 7832 sensor_i2c_proxy_new_for_bus_finish ( 7833 GAsyncResult *res, 7834 GError **error) 7835 { 7836 GObject *ret; 7837 GObject *source_object; 7838 source_object = g_async_result_get_source_object (res); 7839 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 7840 g_object_unref (source_object); 7841 if (ret != NULL) 7842 return SENSOR_I2C (ret); 7843 else 7844 return NULL; 7845 } 7846 7847 /** 7848 * sensor_i2c_proxy_new_for_bus_sync: 7849 * @bus_type: A #GBusType. 7850 * @flags: Flags from the #GDBusProxyFlags enumeration. 7851 * @name: A bus name (well-known or unique). 7852 * @object_path: An object path. 7853 * @cancellable: (allow-none): A #GCancellable or %NULL. 7854 * @error: Return location for error or %NULL 7855 * 7856 * Like sensor_i2c_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection. 7857 * 7858 * The calling thread is blocked until a reply is received. 7859 * 7860 * See sensor_i2c_proxy_new_for_bus() for the asynchronous version of this constructor. 7861 * 7862 * Returns: (transfer full) (type SensorI2cProxy): The constructed proxy object or %NULL if @error is set. 7863 */ 7864 SensorI2c * 7865 sensor_i2c_proxy_new_for_bus_sync ( 7866 GBusType bus_type, 7867 GDBusProxyFlags flags, 7868 const gchar *name, 7869 const gchar *object_path, 7870 GCancellable *cancellable, 7871 GError **error) 7872 { 7873 GInitable *ret; 7874 ret = g_initable_new (TYPE_SENSOR_I2C_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.SensorI2c", NULL); 7875 if (ret != NULL) 7876 return SENSOR_I2C (ret); 7877 else 7878 return NULL; 7879 } 7880 7881 7882 /* ------------------------------------------------------------------------ */ 7883 7884 /** 7885 * SensorI2cSkeleton: 7886 * 7887 * The #SensorI2cSkeleton structure contains only private data and should only be accessed using the provided API. 7888 */ 7889 7890 /** 7891 * SensorI2cSkeletonClass: 7892 * @parent_class: The parent class. 7893 * 7894 * Class structure for #SensorI2cSkeleton. 7895 */ 7896 7897 struct _SensorI2cSkeletonPrivate 7898 { 7899 GValue *properties; 7900 GList *changed_properties; 7901 GSource *changed_properties_idle_source; 7902 GMainContext *context; 7903 GMutex lock; 7904 }; 7905 7906 static void 7907 _sensor_i2c_skeleton_handle_method_call ( 7908 GDBusConnection *connection G_GNUC_UNUSED, 7909 const gchar *sender G_GNUC_UNUSED, 7910 const gchar *object_path G_GNUC_UNUSED, 7911 const gchar *interface_name, 7912 const gchar *method_name, 7913 GVariant *parameters, 7914 GDBusMethodInvocation *invocation, 7915 gpointer user_data) 7916 { 7917 SensorI2cSkeleton *skeleton = SENSOR_I2C_SKELETON (user_data); 7918 _ExtendedGDBusMethodInfo *info; 7919 GVariantIter iter; 7920 GVariant *child; 7921 GValue *paramv; 7922 guint num_params; 7923 guint num_extra; 7924 guint n; 7925 guint signal_id; 7926 GValue return_value = G_VALUE_INIT; 7927 info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation); 7928 g_assert (info != NULL); 7929 num_params = g_variant_n_children (parameters); 7930 num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra); 7931 n = 0; 7932 g_value_init (¶mv[n], TYPE_SENSOR_I2C); 7933 g_value_set_object (¶mv[n++], skeleton); 7934 g_value_init (¶mv[n], G_TYPE_DBUS_METHOD_INVOCATION); 7935 g_value_set_object (¶mv[n++], invocation); 7936 if (info->pass_fdlist) 7937 { 7938 #ifdef G_OS_UNIX 7939 g_value_init (¶mv[n], G_TYPE_UNIX_FD_LIST); 7940 g_value_set_object (¶mv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation))); 7941 #else 7942 g_assert_not_reached (); 7943 #endif 7944 } 7945 g_variant_iter_init (&iter, parameters); 7946 while ((child = g_variant_iter_next_value (&iter)) != NULL) 7947 { 7948 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra]; 7949 if (arg_info->use_gvariant) 7950 { 7951 g_value_init (¶mv[n], G_TYPE_VARIANT); 7952 g_value_set_variant (¶mv[n], child); 7953 n++; 7954 } 7955 else 7956 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 7957 g_variant_unref (child); 7958 } 7959 signal_id = g_signal_lookup (info->signal_name, TYPE_SENSOR_I2C); 7960 g_value_init (&return_value, G_TYPE_BOOLEAN); 7961 g_signal_emitv (paramv, signal_id, 0, &return_value); 7962 if (!g_value_get_boolean (&return_value)) 7963 g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name); 7964 g_value_unset (&return_value); 7965 for (n = 0; n < num_params + num_extra; n++) 7966 g_value_unset (¶mv[n]); 7967 g_free (paramv); 7968 } 7969 7970 static GVariant * 7971 _sensor_i2c_skeleton_handle_get_property ( 7972 GDBusConnection *connection G_GNUC_UNUSED, 7973 const gchar *sender G_GNUC_UNUSED, 7974 const gchar *object_path G_GNUC_UNUSED, 7975 const gchar *interface_name G_GNUC_UNUSED, 7976 const gchar *property_name, 7977 GError **error, 7978 gpointer user_data) 7979 { 7980 SensorI2cSkeleton *skeleton = SENSOR_I2C_SKELETON (user_data); 7981 GValue value = G_VALUE_INIT; 7982 GParamSpec *pspec; 7983 _ExtendedGDBusPropertyInfo *info; 7984 GVariant *ret; 7985 ret = NULL; 7986 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_sensor_i2c_interface_info.parent_struct, property_name); 7987 g_assert (info != NULL); 7988 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 7989 if (pspec == NULL) 7990 { 7991 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 7992 } 7993 else 7994 { 7995 g_value_init (&value, pspec->value_type); 7996 g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value); 7997 ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature)); 7998 g_value_unset (&value); 7999 } 8000 return ret; 8001 } 8002 8003 static gboolean 8004 _sensor_i2c_skeleton_handle_set_property ( 8005 GDBusConnection *connection G_GNUC_UNUSED, 8006 const gchar *sender G_GNUC_UNUSED, 8007 const gchar *object_path G_GNUC_UNUSED, 8008 const gchar *interface_name G_GNUC_UNUSED, 8009 const gchar *property_name, 8010 GVariant *variant, 8011 GError **error, 8012 gpointer user_data) 8013 { 8014 SensorI2cSkeleton *skeleton = SENSOR_I2C_SKELETON (user_data); 8015 GValue value = G_VALUE_INIT; 8016 GParamSpec *pspec; 8017 _ExtendedGDBusPropertyInfo *info; 8018 gboolean ret; 8019 ret = FALSE; 8020 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_sensor_i2c_interface_info.parent_struct, property_name); 8021 g_assert (info != NULL); 8022 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 8023 if (pspec == NULL) 8024 { 8025 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 8026 } 8027 else 8028 { 8029 if (info->use_gvariant) 8030 g_value_set_variant (&value, variant); 8031 else 8032 g_dbus_gvariant_to_gvalue (variant, &value); 8033 g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value); 8034 g_value_unset (&value); 8035 ret = TRUE; 8036 } 8037 return ret; 8038 } 8039 8040 static const GDBusInterfaceVTable _sensor_i2c_skeleton_vtable = 8041 { 8042 _sensor_i2c_skeleton_handle_method_call, 8043 _sensor_i2c_skeleton_handle_get_property, 8044 _sensor_i2c_skeleton_handle_set_property, 8045 {NULL} 8046 }; 8047 8048 static GDBusInterfaceInfo * 8049 sensor_i2c_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 8050 { 8051 return sensor_i2c_interface_info (); 8052 } 8053 8054 static GDBusInterfaceVTable * 8055 sensor_i2c_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 8056 { 8057 return (GDBusInterfaceVTable *) &_sensor_i2c_skeleton_vtable; 8058 } 8059 8060 static GVariant * 8061 sensor_i2c_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton) 8062 { 8063 SensorI2cSkeleton *skeleton = SENSOR_I2C_SKELETON (_skeleton); 8064 8065 GVariantBuilder builder; 8066 guint n; 8067 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 8068 if (_sensor_i2c_interface_info.parent_struct.properties == NULL) 8069 goto out; 8070 for (n = 0; _sensor_i2c_interface_info.parent_struct.properties[n] != NULL; n++) 8071 { 8072 GDBusPropertyInfo *info = _sensor_i2c_interface_info.parent_struct.properties[n]; 8073 if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE) 8074 { 8075 GVariant *value; 8076 value = _sensor_i2c_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.SensorI2c", info->name, NULL, skeleton); 8077 if (value != NULL) 8078 { 8079 g_variant_take_ref (value); 8080 g_variant_builder_add (&builder, "{sv}", info->name, value); 8081 g_variant_unref (value); 8082 } 8083 } 8084 } 8085 out: 8086 return g_variant_builder_end (&builder); 8087 } 8088 8089 static gboolean _sensor_i2c_emit_changed (gpointer user_data); 8090 8091 static void 8092 sensor_i2c_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton) 8093 { 8094 SensorI2cSkeleton *skeleton = SENSOR_I2C_SKELETON (_skeleton); 8095 gboolean emit_changed = FALSE; 8096 8097 g_mutex_lock (&skeleton->priv->lock); 8098 if (skeleton->priv->changed_properties_idle_source != NULL) 8099 { 8100 g_source_destroy (skeleton->priv->changed_properties_idle_source); 8101 skeleton->priv->changed_properties_idle_source = NULL; 8102 emit_changed = TRUE; 8103 } 8104 g_mutex_unlock (&skeleton->priv->lock); 8105 8106 if (emit_changed) 8107 _sensor_i2c_emit_changed (skeleton); 8108 } 8109 8110 static void sensor_i2c_skeleton_iface_init (SensorI2cIface *iface); 8111 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 8112 G_DEFINE_TYPE_WITH_CODE (SensorI2cSkeleton, sensor_i2c_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 8113 G_ADD_PRIVATE (SensorI2cSkeleton) 8114 G_IMPLEMENT_INTERFACE (TYPE_SENSOR_I2C, sensor_i2c_skeleton_iface_init)); 8115 8116 #else 8117 G_DEFINE_TYPE_WITH_CODE (SensorI2cSkeleton, sensor_i2c_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 8118 G_IMPLEMENT_INTERFACE (TYPE_SENSOR_I2C, sensor_i2c_skeleton_iface_init)); 8119 8120 #endif 8121 static void 8122 sensor_i2c_skeleton_finalize (GObject *object) 8123 { 8124 SensorI2cSkeleton *skeleton = SENSOR_I2C_SKELETON (object); 8125 guint n; 8126 for (n = 0; n < 2; n++) 8127 g_value_unset (&skeleton->priv->properties[n]); 8128 g_free (skeleton->priv->properties); 8129 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 8130 if (skeleton->priv->changed_properties_idle_source != NULL) 8131 g_source_destroy (skeleton->priv->changed_properties_idle_source); 8132 g_main_context_unref (skeleton->priv->context); 8133 g_mutex_clear (&skeleton->priv->lock); 8134 G_OBJECT_CLASS (sensor_i2c_skeleton_parent_class)->finalize (object); 8135 } 8136 8137 static void 8138 sensor_i2c_skeleton_get_property (GObject *object, 8139 guint prop_id, 8140 GValue *value, 8141 GParamSpec *pspec G_GNUC_UNUSED) 8142 { 8143 SensorI2cSkeleton *skeleton = SENSOR_I2C_SKELETON (object); 8144 g_assert (prop_id != 0 && prop_id - 1 < 2); 8145 g_mutex_lock (&skeleton->priv->lock); 8146 g_value_copy (&skeleton->priv->properties[prop_id - 1], value); 8147 g_mutex_unlock (&skeleton->priv->lock); 8148 } 8149 8150 static gboolean 8151 _sensor_i2c_emit_changed (gpointer user_data) 8152 { 8153 SensorI2cSkeleton *skeleton = SENSOR_I2C_SKELETON (user_data); 8154 GList *l; 8155 GVariantBuilder builder; 8156 GVariantBuilder invalidated_builder; 8157 guint num_changes; 8158 8159 g_mutex_lock (&skeleton->priv->lock); 8160 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 8161 g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as")); 8162 for (l = skeleton->priv->changed_properties, num_changes = 0; l != NULL; l = l->next) 8163 { 8164 ChangedProperty *cp = l->data; 8165 GVariant *variant; 8166 const GValue *cur_value; 8167 8168 cur_value = &skeleton->priv->properties[cp->prop_id - 1]; 8169 if (!_g_value_equal (cur_value, &cp->orig_value)) 8170 { 8171 variant = g_dbus_gvalue_to_gvariant (cur_value, G_VARIANT_TYPE (cp->info->parent_struct.signature)); 8172 g_variant_builder_add (&builder, "{sv}", cp->info->parent_struct.name, variant); 8173 g_variant_unref (variant); 8174 num_changes++; 8175 } 8176 } 8177 if (num_changes > 0) 8178 { 8179 GList *connections, *ll; 8180 GVariant *signal_variant; 8181 signal_variant = g_variant_ref_sink (g_variant_new ("(sa{sv}as)", "org.openbmc.SensorI2c", 8182 &builder, &invalidated_builder)); 8183 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 8184 for (ll = connections; ll != NULL; ll = ll->next) 8185 { 8186 GDBusConnection *connection = ll->data; 8187 8188 g_dbus_connection_emit_signal (connection, 8189 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), 8190 "org.freedesktop.DBus.Properties", 8191 "PropertiesChanged", 8192 signal_variant, 8193 NULL); 8194 } 8195 g_variant_unref (signal_variant); 8196 g_list_free_full (connections, g_object_unref); 8197 } 8198 else 8199 { 8200 g_variant_builder_clear (&builder); 8201 g_variant_builder_clear (&invalidated_builder); 8202 } 8203 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 8204 skeleton->priv->changed_properties = NULL; 8205 skeleton->priv->changed_properties_idle_source = NULL; 8206 g_mutex_unlock (&skeleton->priv->lock); 8207 return FALSE; 8208 } 8209 8210 static void 8211 _sensor_i2c_schedule_emit_changed (SensorI2cSkeleton *skeleton, const _ExtendedGDBusPropertyInfo *info, guint prop_id, const GValue *orig_value) 8212 { 8213 ChangedProperty *cp; 8214 GList *l; 8215 cp = NULL; 8216 for (l = skeleton->priv->changed_properties; l != NULL; l = l->next) 8217 { 8218 ChangedProperty *i_cp = l->data; 8219 if (i_cp->info == info) 8220 { 8221 cp = i_cp; 8222 break; 8223 } 8224 } 8225 if (cp == NULL) 8226 { 8227 cp = g_new0 (ChangedProperty, 1); 8228 cp->prop_id = prop_id; 8229 cp->info = info; 8230 skeleton->priv->changed_properties = g_list_prepend (skeleton->priv->changed_properties, cp); 8231 g_value_init (&cp->orig_value, G_VALUE_TYPE (orig_value)); 8232 g_value_copy (orig_value, &cp->orig_value); 8233 } 8234 } 8235 8236 static void 8237 sensor_i2c_skeleton_notify (GObject *object, 8238 GParamSpec *pspec G_GNUC_UNUSED) 8239 { 8240 SensorI2cSkeleton *skeleton = SENSOR_I2C_SKELETON (object); 8241 g_mutex_lock (&skeleton->priv->lock); 8242 if (skeleton->priv->changed_properties != NULL && 8243 skeleton->priv->changed_properties_idle_source == NULL) 8244 { 8245 skeleton->priv->changed_properties_idle_source = g_idle_source_new (); 8246 g_source_set_priority (skeleton->priv->changed_properties_idle_source, G_PRIORITY_DEFAULT); 8247 g_source_set_callback (skeleton->priv->changed_properties_idle_source, _sensor_i2c_emit_changed, g_object_ref (skeleton), (GDestroyNotify) g_object_unref); 8248 g_source_set_name (skeleton->priv->changed_properties_idle_source, "[generated] _sensor_i2c_emit_changed"); 8249 g_source_attach (skeleton->priv->changed_properties_idle_source, skeleton->priv->context); 8250 g_source_unref (skeleton->priv->changed_properties_idle_source); 8251 } 8252 g_mutex_unlock (&skeleton->priv->lock); 8253 } 8254 8255 static void 8256 sensor_i2c_skeleton_set_property (GObject *object, 8257 guint prop_id, 8258 const GValue *value, 8259 GParamSpec *pspec) 8260 { 8261 SensorI2cSkeleton *skeleton = SENSOR_I2C_SKELETON (object); 8262 g_assert (prop_id != 0 && prop_id - 1 < 2); 8263 g_mutex_lock (&skeleton->priv->lock); 8264 g_object_freeze_notify (object); 8265 if (!_g_value_equal (value, &skeleton->priv->properties[prop_id - 1])) 8266 { 8267 if (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)) != NULL) 8268 _sensor_i2c_schedule_emit_changed (skeleton, _sensor_i2c_property_info_pointers[prop_id - 1], prop_id, &skeleton->priv->properties[prop_id - 1]); 8269 g_value_copy (value, &skeleton->priv->properties[prop_id - 1]); 8270 g_object_notify_by_pspec (object, pspec); 8271 } 8272 g_mutex_unlock (&skeleton->priv->lock); 8273 g_object_thaw_notify (object); 8274 } 8275 8276 static void 8277 sensor_i2c_skeleton_init (SensorI2cSkeleton *skeleton) 8278 { 8279 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 8280 skeleton->priv = sensor_i2c_skeleton_get_instance_private (skeleton); 8281 #else 8282 skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, TYPE_SENSOR_I2C_SKELETON, SensorI2cSkeletonPrivate); 8283 #endif 8284 8285 g_mutex_init (&skeleton->priv->lock); 8286 skeleton->priv->context = g_main_context_ref_thread_default (); 8287 skeleton->priv->properties = g_new0 (GValue, 2); 8288 g_value_init (&skeleton->priv->properties[0], G_TYPE_STRING); 8289 g_value_init (&skeleton->priv->properties[1], G_TYPE_STRING); 8290 } 8291 8292 static const gchar * 8293 sensor_i2c_skeleton_get_dev_path (SensorI2c *object) 8294 { 8295 SensorI2cSkeleton *skeleton = SENSOR_I2C_SKELETON (object); 8296 const gchar *value; 8297 g_mutex_lock (&skeleton->priv->lock); 8298 value = g_value_get_string (&(skeleton->priv->properties[0])); 8299 g_mutex_unlock (&skeleton->priv->lock); 8300 return value; 8301 } 8302 8303 static const gchar * 8304 sensor_i2c_skeleton_get_address (SensorI2c *object) 8305 { 8306 SensorI2cSkeleton *skeleton = SENSOR_I2C_SKELETON (object); 8307 const gchar *value; 8308 g_mutex_lock (&skeleton->priv->lock); 8309 value = g_value_get_string (&(skeleton->priv->properties[1])); 8310 g_mutex_unlock (&skeleton->priv->lock); 8311 return value; 8312 } 8313 8314 static void 8315 sensor_i2c_skeleton_class_init (SensorI2cSkeletonClass *klass) 8316 { 8317 GObjectClass *gobject_class; 8318 GDBusInterfaceSkeletonClass *skeleton_class; 8319 8320 gobject_class = G_OBJECT_CLASS (klass); 8321 gobject_class->finalize = sensor_i2c_skeleton_finalize; 8322 gobject_class->get_property = sensor_i2c_skeleton_get_property; 8323 gobject_class->set_property = sensor_i2c_skeleton_set_property; 8324 gobject_class->notify = sensor_i2c_skeleton_notify; 8325 8326 8327 sensor_i2c_override_properties (gobject_class, 1); 8328 8329 skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass); 8330 skeleton_class->get_info = sensor_i2c_skeleton_dbus_interface_get_info; 8331 skeleton_class->get_properties = sensor_i2c_skeleton_dbus_interface_get_properties; 8332 skeleton_class->flush = sensor_i2c_skeleton_dbus_interface_flush; 8333 skeleton_class->get_vtable = sensor_i2c_skeleton_dbus_interface_get_vtable; 8334 8335 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 8336 g_type_class_add_private (klass, sizeof (SensorI2cSkeletonPrivate)); 8337 #endif 8338 } 8339 8340 static void 8341 sensor_i2c_skeleton_iface_init (SensorI2cIface *iface) 8342 { 8343 iface->get_dev_path = sensor_i2c_skeleton_get_dev_path; 8344 iface->get_address = sensor_i2c_skeleton_get_address; 8345 } 8346 8347 /** 8348 * sensor_i2c_skeleton_new: 8349 * 8350 * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorI2c.top_of_page">org.openbmc.SensorI2c</link>. 8351 * 8352 * Returns: (transfer full) (type SensorI2cSkeleton): The skeleton object. 8353 */ 8354 SensorI2c * 8355 sensor_i2c_skeleton_new (void) 8356 { 8357 return SENSOR_I2C (g_object_new (TYPE_SENSOR_I2C_SKELETON, NULL)); 8358 } 8359 8360 /* ------------------------------------------------------------------------ 8361 * Code for interface org.openbmc.SensorMatch 8362 * ------------------------------------------------------------------------ 8363 */ 8364 8365 /** 8366 * SECTION:SensorMatch 8367 * @title: SensorMatch 8368 * @short_description: Generated C code for the org.openbmc.SensorMatch D-Bus interface 8369 * 8370 * This section contains code for working with the <link linkend="gdbus-interface-org-openbmc-SensorMatch.top_of_page">org.openbmc.SensorMatch</link> D-Bus interface in C. 8371 */ 8372 8373 /* ---- Introspection data for org.openbmc.SensorMatch ---- */ 8374 8375 static const _ExtendedGDBusArgInfo _sensor_match_signal_info_sensor_match_ARG_state = 8376 { 8377 { 8378 -1, 8379 (gchar *) "state", 8380 (gchar *) "y", 8381 NULL 8382 }, 8383 FALSE 8384 }; 8385 8386 static const _ExtendedGDBusArgInfo * const _sensor_match_signal_info_sensor_match_ARG_pointers[] = 8387 { 8388 &_sensor_match_signal_info_sensor_match_ARG_state, 8389 NULL 8390 }; 8391 8392 static const _ExtendedGDBusSignalInfo _sensor_match_signal_info_sensor_match = 8393 { 8394 { 8395 -1, 8396 (gchar *) "SensorMatch", 8397 (GDBusArgInfo **) &_sensor_match_signal_info_sensor_match_ARG_pointers, 8398 NULL 8399 }, 8400 "sensor-match" 8401 }; 8402 8403 static const _ExtendedGDBusSignalInfo * const _sensor_match_signal_info_pointers[] = 8404 { 8405 &_sensor_match_signal_info_sensor_match, 8406 NULL 8407 }; 8408 8409 static const _ExtendedGDBusPropertyInfo _sensor_match_property_info_match_value = 8410 { 8411 { 8412 -1, 8413 (gchar *) "match_value", 8414 (gchar *) "v", 8415 G_DBUS_PROPERTY_INFO_FLAGS_READABLE, 8416 NULL 8417 }, 8418 "match-value", 8419 FALSE 8420 }; 8421 8422 static const _ExtendedGDBusPropertyInfo _sensor_match_property_info_state = 8423 { 8424 { 8425 -1, 8426 (gchar *) "state", 8427 (gchar *) "y", 8428 G_DBUS_PROPERTY_INFO_FLAGS_READABLE, 8429 NULL 8430 }, 8431 "state", 8432 FALSE 8433 }; 8434 8435 static const _ExtendedGDBusPropertyInfo * const _sensor_match_property_info_pointers[] = 8436 { 8437 &_sensor_match_property_info_match_value, 8438 &_sensor_match_property_info_state, 8439 NULL 8440 }; 8441 8442 static const _ExtendedGDBusInterfaceInfo _sensor_match_interface_info = 8443 { 8444 { 8445 -1, 8446 (gchar *) "org.openbmc.SensorMatch", 8447 NULL, 8448 (GDBusSignalInfo **) &_sensor_match_signal_info_pointers, 8449 (GDBusPropertyInfo **) &_sensor_match_property_info_pointers, 8450 NULL 8451 }, 8452 "sensor-match", 8453 }; 8454 8455 8456 /** 8457 * sensor_match_interface_info: 8458 * 8459 * Gets a machine-readable description of the <link linkend="gdbus-interface-org-openbmc-SensorMatch.top_of_page">org.openbmc.SensorMatch</link> D-Bus interface. 8460 * 8461 * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free. 8462 */ 8463 GDBusInterfaceInfo * 8464 sensor_match_interface_info (void) 8465 { 8466 return (GDBusInterfaceInfo *) &_sensor_match_interface_info.parent_struct; 8467 } 8468 8469 /** 8470 * sensor_match_override_properties: 8471 * @klass: The class structure for a #GObject<!-- -->-derived class. 8472 * @property_id_begin: The property id to assign to the first overridden property. 8473 * 8474 * Overrides all #GObject properties in the #SensorMatch interface for a concrete class. 8475 * The properties are overridden in the order they are defined. 8476 * 8477 * Returns: The last property id. 8478 */ 8479 guint 8480 sensor_match_override_properties (GObjectClass *klass, guint property_id_begin) 8481 { 8482 g_object_class_override_property (klass, property_id_begin++, "match-value"); 8483 g_object_class_override_property (klass, property_id_begin++, "state"); 8484 return property_id_begin - 1; 8485 } 8486 8487 8488 8489 /** 8490 * SensorMatch: 8491 * 8492 * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorMatch.top_of_page">org.openbmc.SensorMatch</link>. 8493 */ 8494 8495 /** 8496 * SensorMatchIface: 8497 * @parent_iface: The parent interface. 8498 * @get_match_value: Getter for the #SensorMatch:match-value property. 8499 * @get_state: Getter for the #SensorMatch:state property. 8500 * @sensor_match: Handler for the #SensorMatch::sensor-match signal. 8501 * 8502 * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorMatch.top_of_page">org.openbmc.SensorMatch</link>. 8503 */ 8504 8505 typedef SensorMatchIface SensorMatchInterface; 8506 G_DEFINE_INTERFACE (SensorMatch, sensor_match, G_TYPE_OBJECT); 8507 8508 static void 8509 sensor_match_default_init (SensorMatchIface *iface) 8510 { 8511 /* GObject signals for received D-Bus signals: */ 8512 /** 8513 * SensorMatch::sensor-match: 8514 * @object: A #SensorMatch. 8515 * @arg_state: Argument. 8516 * 8517 * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-openbmc-SensorMatch.SensorMatch">"SensorMatch"</link> is received. 8518 * 8519 * 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. 8520 */ 8521 g_signal_new ("sensor-match", 8522 G_TYPE_FROM_INTERFACE (iface), 8523 G_SIGNAL_RUN_LAST, 8524 G_STRUCT_OFFSET (SensorMatchIface, sensor_match), 8525 NULL, 8526 NULL, 8527 g_cclosure_marshal_generic, 8528 G_TYPE_NONE, 8529 1, G_TYPE_UCHAR); 8530 8531 /* GObject properties for D-Bus properties: */ 8532 /** 8533 * SensorMatch:match-value: 8534 * 8535 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-SensorMatch.match_value">"match_value"</link>. 8536 * 8537 * 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. 8538 */ 8539 g_object_interface_install_property (iface, 8540 g_param_spec_variant ("match-value", "match_value", "match_value", G_VARIANT_TYPE ("v"), NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 8541 /** 8542 * SensorMatch:state: 8543 * 8544 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-SensorMatch.state">"state"</link>. 8545 * 8546 * 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. 8547 */ 8548 g_object_interface_install_property (iface, 8549 g_param_spec_uchar ("state", "state", "state", 0, 255, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 8550 } 8551 8552 /** 8553 * sensor_match_get_match_value: (skip) 8554 * @object: A #SensorMatch. 8555 * 8556 * Gets the value of the <link linkend="gdbus-property-org-openbmc-SensorMatch.match_value">"match_value"</link> D-Bus property. 8557 * 8558 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 8559 * 8560 * <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 sensor_match_dup_match_value() if on another thread.</warning> 8561 * 8562 * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object. 8563 */ 8564 GVariant * 8565 sensor_match_get_match_value (SensorMatch *object) 8566 { 8567 return SENSOR_MATCH_GET_IFACE (object)->get_match_value (object); 8568 } 8569 8570 /** 8571 * sensor_match_dup_match_value: (skip) 8572 * @object: A #SensorMatch. 8573 * 8574 * Gets a copy of the <link linkend="gdbus-property-org-openbmc-SensorMatch.match_value">"match_value"</link> D-Bus property. 8575 * 8576 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 8577 * 8578 * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value should be freed with g_variant_unref(). 8579 */ 8580 GVariant * 8581 sensor_match_dup_match_value (SensorMatch *object) 8582 { 8583 GVariant *value; 8584 g_object_get (G_OBJECT (object), "match-value", &value, NULL); 8585 return value; 8586 } 8587 8588 /** 8589 * sensor_match_set_match_value: (skip) 8590 * @object: A #SensorMatch. 8591 * @value: The value to set. 8592 * 8593 * Sets the <link linkend="gdbus-property-org-openbmc-SensorMatch.match_value">"match_value"</link> D-Bus property to @value. 8594 * 8595 * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side. 8596 */ 8597 void 8598 sensor_match_set_match_value (SensorMatch *object, GVariant *value) 8599 { 8600 g_object_set (G_OBJECT (object), "match-value", value, NULL); 8601 } 8602 8603 /** 8604 * sensor_match_get_state: (skip) 8605 * @object: A #SensorMatch. 8606 * 8607 * Gets the value of the <link linkend="gdbus-property-org-openbmc-SensorMatch.state">"state"</link> D-Bus property. 8608 * 8609 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 8610 * 8611 * Returns: The property value. 8612 */ 8613 guchar 8614 sensor_match_get_state (SensorMatch *object) 8615 { 8616 return SENSOR_MATCH_GET_IFACE (object)->get_state (object); 8617 } 8618 8619 /** 8620 * sensor_match_set_state: (skip) 8621 * @object: A #SensorMatch. 8622 * @value: The value to set. 8623 * 8624 * Sets the <link linkend="gdbus-property-org-openbmc-SensorMatch.state">"state"</link> D-Bus property to @value. 8625 * 8626 * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side. 8627 */ 8628 void 8629 sensor_match_set_state (SensorMatch *object, guchar value) 8630 { 8631 g_object_set (G_OBJECT (object), "state", value, NULL); 8632 } 8633 8634 /** 8635 * sensor_match_emit_sensor_match: 8636 * @object: A #SensorMatch. 8637 * @arg_state: Argument to pass with the signal. 8638 * 8639 * Emits the <link linkend="gdbus-signal-org-openbmc-SensorMatch.SensorMatch">"SensorMatch"</link> D-Bus signal. 8640 */ 8641 void 8642 sensor_match_emit_sensor_match ( 8643 SensorMatch *object, 8644 guchar arg_state) 8645 { 8646 g_signal_emit_by_name (object, "sensor-match", arg_state); 8647 } 8648 8649 /* ------------------------------------------------------------------------ */ 8650 8651 /** 8652 * SensorMatchProxy: 8653 * 8654 * The #SensorMatchProxy structure contains only private data and should only be accessed using the provided API. 8655 */ 8656 8657 /** 8658 * SensorMatchProxyClass: 8659 * @parent_class: The parent class. 8660 * 8661 * Class structure for #SensorMatchProxy. 8662 */ 8663 8664 struct _SensorMatchProxyPrivate 8665 { 8666 GData *qdata; 8667 }; 8668 8669 static void sensor_match_proxy_iface_init (SensorMatchIface *iface); 8670 8671 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 8672 G_DEFINE_TYPE_WITH_CODE (SensorMatchProxy, sensor_match_proxy, G_TYPE_DBUS_PROXY, 8673 G_ADD_PRIVATE (SensorMatchProxy) 8674 G_IMPLEMENT_INTERFACE (TYPE_SENSOR_MATCH, sensor_match_proxy_iface_init)); 8675 8676 #else 8677 G_DEFINE_TYPE_WITH_CODE (SensorMatchProxy, sensor_match_proxy, G_TYPE_DBUS_PROXY, 8678 G_IMPLEMENT_INTERFACE (TYPE_SENSOR_MATCH, sensor_match_proxy_iface_init)); 8679 8680 #endif 8681 static void 8682 sensor_match_proxy_finalize (GObject *object) 8683 { 8684 SensorMatchProxy *proxy = SENSOR_MATCH_PROXY (object); 8685 g_datalist_clear (&proxy->priv->qdata); 8686 G_OBJECT_CLASS (sensor_match_proxy_parent_class)->finalize (object); 8687 } 8688 8689 static void 8690 sensor_match_proxy_get_property (GObject *object, 8691 guint prop_id, 8692 GValue *value, 8693 GParamSpec *pspec G_GNUC_UNUSED) 8694 { 8695 const _ExtendedGDBusPropertyInfo *info; 8696 GVariant *variant; 8697 g_assert (prop_id != 0 && prop_id - 1 < 2); 8698 info = _sensor_match_property_info_pointers[prop_id - 1]; 8699 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (object), info->parent_struct.name); 8700 if (info->use_gvariant) 8701 { 8702 g_value_set_variant (value, variant); 8703 } 8704 else 8705 { 8706 if (variant != NULL) 8707 g_dbus_gvariant_to_gvalue (variant, value); 8708 } 8709 if (variant != NULL) 8710 g_variant_unref (variant); 8711 } 8712 8713 static void 8714 sensor_match_proxy_set_property_cb (GDBusProxy *proxy, 8715 GAsyncResult *res, 8716 gpointer user_data) 8717 { 8718 const _ExtendedGDBusPropertyInfo *info = user_data; 8719 GError *error; 8720 GVariant *_ret; 8721 error = NULL; 8722 _ret = g_dbus_proxy_call_finish (proxy, res, &error); 8723 if (!_ret) 8724 { 8725 g_warning ("Error setting property '%s' on interface org.openbmc.SensorMatch: %s (%s, %d)", 8726 info->parent_struct.name, 8727 error->message, g_quark_to_string (error->domain), error->code); 8728 g_error_free (error); 8729 } 8730 else 8731 { 8732 g_variant_unref (_ret); 8733 } 8734 } 8735 8736 static void 8737 sensor_match_proxy_set_property (GObject *object, 8738 guint prop_id, 8739 const GValue *value, 8740 GParamSpec *pspec G_GNUC_UNUSED) 8741 { 8742 const _ExtendedGDBusPropertyInfo *info; 8743 GVariant *variant; 8744 g_assert (prop_id != 0 && prop_id - 1 < 2); 8745 info = _sensor_match_property_info_pointers[prop_id - 1]; 8746 variant = g_dbus_gvalue_to_gvariant (value, G_VARIANT_TYPE (info->parent_struct.signature)); 8747 g_dbus_proxy_call (G_DBUS_PROXY (object), 8748 "org.freedesktop.DBus.Properties.Set", 8749 g_variant_new ("(ssv)", "org.openbmc.SensorMatch", info->parent_struct.name, variant), 8750 G_DBUS_CALL_FLAGS_NONE, 8751 -1, 8752 NULL, (GAsyncReadyCallback) sensor_match_proxy_set_property_cb, (GDBusPropertyInfo *) &info->parent_struct); 8753 g_variant_unref (variant); 8754 } 8755 8756 static void 8757 sensor_match_proxy_g_signal (GDBusProxy *proxy, 8758 const gchar *sender_name G_GNUC_UNUSED, 8759 const gchar *signal_name, 8760 GVariant *parameters) 8761 { 8762 _ExtendedGDBusSignalInfo *info; 8763 GVariantIter iter; 8764 GVariant *child; 8765 GValue *paramv; 8766 guint num_params; 8767 guint n; 8768 guint signal_id; 8769 info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_sensor_match_interface_info.parent_struct, signal_name); 8770 if (info == NULL) 8771 return; 8772 num_params = g_variant_n_children (parameters); 8773 paramv = g_new0 (GValue, num_params + 1); 8774 g_value_init (¶mv[0], TYPE_SENSOR_MATCH); 8775 g_value_set_object (¶mv[0], proxy); 8776 g_variant_iter_init (&iter, parameters); 8777 n = 1; 8778 while ((child = g_variant_iter_next_value (&iter)) != NULL) 8779 { 8780 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1]; 8781 if (arg_info->use_gvariant) 8782 { 8783 g_value_init (¶mv[n], G_TYPE_VARIANT); 8784 g_value_set_variant (¶mv[n], child); 8785 n++; 8786 } 8787 else 8788 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 8789 g_variant_unref (child); 8790 } 8791 signal_id = g_signal_lookup (info->signal_name, TYPE_SENSOR_MATCH); 8792 g_signal_emitv (paramv, signal_id, 0, NULL); 8793 for (n = 0; n < num_params + 1; n++) 8794 g_value_unset (¶mv[n]); 8795 g_free (paramv); 8796 } 8797 8798 static void 8799 sensor_match_proxy_g_properties_changed (GDBusProxy *_proxy, 8800 GVariant *changed_properties, 8801 const gchar *const *invalidated_properties) 8802 { 8803 SensorMatchProxy *proxy = SENSOR_MATCH_PROXY (_proxy); 8804 guint n; 8805 const gchar *key; 8806 GVariantIter *iter; 8807 _ExtendedGDBusPropertyInfo *info; 8808 g_variant_get (changed_properties, "a{sv}", &iter); 8809 while (g_variant_iter_next (iter, "{&sv}", &key, NULL)) 8810 { 8811 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_sensor_match_interface_info.parent_struct, key); 8812 g_datalist_remove_data (&proxy->priv->qdata, key); 8813 if (info != NULL) 8814 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 8815 } 8816 g_variant_iter_free (iter); 8817 for (n = 0; invalidated_properties[n] != NULL; n++) 8818 { 8819 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_sensor_match_interface_info.parent_struct, invalidated_properties[n]); 8820 g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]); 8821 if (info != NULL) 8822 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 8823 } 8824 } 8825 8826 static GVariant * 8827 sensor_match_proxy_get_match_value (SensorMatch *object) 8828 { 8829 SensorMatchProxy *proxy = SENSOR_MATCH_PROXY (object); 8830 GVariant *variant; 8831 GVariant *value = NULL; 8832 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "match_value"); 8833 value = variant; 8834 if (variant != NULL) 8835 g_variant_unref (variant); 8836 return value; 8837 } 8838 8839 static guchar 8840 sensor_match_proxy_get_state (SensorMatch *object) 8841 { 8842 SensorMatchProxy *proxy = SENSOR_MATCH_PROXY (object); 8843 GVariant *variant; 8844 guchar value = 0; 8845 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "state"); 8846 if (variant != NULL) 8847 { 8848 value = g_variant_get_byte (variant); 8849 g_variant_unref (variant); 8850 } 8851 return value; 8852 } 8853 8854 static void 8855 sensor_match_proxy_init (SensorMatchProxy *proxy) 8856 { 8857 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 8858 proxy->priv = sensor_match_proxy_get_instance_private (proxy); 8859 #else 8860 proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, TYPE_SENSOR_MATCH_PROXY, SensorMatchProxyPrivate); 8861 #endif 8862 8863 g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), sensor_match_interface_info ()); 8864 } 8865 8866 static void 8867 sensor_match_proxy_class_init (SensorMatchProxyClass *klass) 8868 { 8869 GObjectClass *gobject_class; 8870 GDBusProxyClass *proxy_class; 8871 8872 gobject_class = G_OBJECT_CLASS (klass); 8873 gobject_class->finalize = sensor_match_proxy_finalize; 8874 gobject_class->get_property = sensor_match_proxy_get_property; 8875 gobject_class->set_property = sensor_match_proxy_set_property; 8876 8877 proxy_class = G_DBUS_PROXY_CLASS (klass); 8878 proxy_class->g_signal = sensor_match_proxy_g_signal; 8879 proxy_class->g_properties_changed = sensor_match_proxy_g_properties_changed; 8880 8881 sensor_match_override_properties (gobject_class, 1); 8882 8883 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 8884 g_type_class_add_private (klass, sizeof (SensorMatchProxyPrivate)); 8885 #endif 8886 } 8887 8888 static void 8889 sensor_match_proxy_iface_init (SensorMatchIface *iface) 8890 { 8891 iface->get_match_value = sensor_match_proxy_get_match_value; 8892 iface->get_state = sensor_match_proxy_get_state; 8893 } 8894 8895 /** 8896 * sensor_match_proxy_new: 8897 * @connection: A #GDBusConnection. 8898 * @flags: Flags from the #GDBusProxyFlags enumeration. 8899 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 8900 * @object_path: An object path. 8901 * @cancellable: (allow-none): A #GCancellable or %NULL. 8902 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 8903 * @user_data: User data to pass to @callback. 8904 * 8905 * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorMatch.top_of_page">org.openbmc.SensorMatch</link>. See g_dbus_proxy_new() for more details. 8906 * 8907 * 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. 8908 * You can then call sensor_match_proxy_new_finish() to get the result of the operation. 8909 * 8910 * See sensor_match_proxy_new_sync() for the synchronous, blocking version of this constructor. 8911 */ 8912 void 8913 sensor_match_proxy_new ( 8914 GDBusConnection *connection, 8915 GDBusProxyFlags flags, 8916 const gchar *name, 8917 const gchar *object_path, 8918 GCancellable *cancellable, 8919 GAsyncReadyCallback callback, 8920 gpointer user_data) 8921 { 8922 g_async_initable_new_async (TYPE_SENSOR_MATCH_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.SensorMatch", NULL); 8923 } 8924 8925 /** 8926 * sensor_match_proxy_new_finish: 8927 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to sensor_match_proxy_new(). 8928 * @error: Return location for error or %NULL 8929 * 8930 * Finishes an operation started with sensor_match_proxy_new(). 8931 * 8932 * Returns: (transfer full) (type SensorMatchProxy): The constructed proxy object or %NULL if @error is set. 8933 */ 8934 SensorMatch * 8935 sensor_match_proxy_new_finish ( 8936 GAsyncResult *res, 8937 GError **error) 8938 { 8939 GObject *ret; 8940 GObject *source_object; 8941 source_object = g_async_result_get_source_object (res); 8942 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 8943 g_object_unref (source_object); 8944 if (ret != NULL) 8945 return SENSOR_MATCH (ret); 8946 else 8947 return NULL; 8948 } 8949 8950 /** 8951 * sensor_match_proxy_new_sync: 8952 * @connection: A #GDBusConnection. 8953 * @flags: Flags from the #GDBusProxyFlags enumeration. 8954 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 8955 * @object_path: An object path. 8956 * @cancellable: (allow-none): A #GCancellable or %NULL. 8957 * @error: Return location for error or %NULL 8958 * 8959 * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorMatch.top_of_page">org.openbmc.SensorMatch</link>. See g_dbus_proxy_new_sync() for more details. 8960 * 8961 * The calling thread is blocked until a reply is received. 8962 * 8963 * See sensor_match_proxy_new() for the asynchronous version of this constructor. 8964 * 8965 * Returns: (transfer full) (type SensorMatchProxy): The constructed proxy object or %NULL if @error is set. 8966 */ 8967 SensorMatch * 8968 sensor_match_proxy_new_sync ( 8969 GDBusConnection *connection, 8970 GDBusProxyFlags flags, 8971 const gchar *name, 8972 const gchar *object_path, 8973 GCancellable *cancellable, 8974 GError **error) 8975 { 8976 GInitable *ret; 8977 ret = g_initable_new (TYPE_SENSOR_MATCH_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.SensorMatch", NULL); 8978 if (ret != NULL) 8979 return SENSOR_MATCH (ret); 8980 else 8981 return NULL; 8982 } 8983 8984 8985 /** 8986 * sensor_match_proxy_new_for_bus: 8987 * @bus_type: A #GBusType. 8988 * @flags: Flags from the #GDBusProxyFlags enumeration. 8989 * @name: A bus name (well-known or unique). 8990 * @object_path: An object path. 8991 * @cancellable: (allow-none): A #GCancellable or %NULL. 8992 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 8993 * @user_data: User data to pass to @callback. 8994 * 8995 * Like sensor_match_proxy_new() but takes a #GBusType instead of a #GDBusConnection. 8996 * 8997 * 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. 8998 * You can then call sensor_match_proxy_new_for_bus_finish() to get the result of the operation. 8999 * 9000 * See sensor_match_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor. 9001 */ 9002 void 9003 sensor_match_proxy_new_for_bus ( 9004 GBusType bus_type, 9005 GDBusProxyFlags flags, 9006 const gchar *name, 9007 const gchar *object_path, 9008 GCancellable *cancellable, 9009 GAsyncReadyCallback callback, 9010 gpointer user_data) 9011 { 9012 g_async_initable_new_async (TYPE_SENSOR_MATCH_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.SensorMatch", NULL); 9013 } 9014 9015 /** 9016 * sensor_match_proxy_new_for_bus_finish: 9017 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to sensor_match_proxy_new_for_bus(). 9018 * @error: Return location for error or %NULL 9019 * 9020 * Finishes an operation started with sensor_match_proxy_new_for_bus(). 9021 * 9022 * Returns: (transfer full) (type SensorMatchProxy): The constructed proxy object or %NULL if @error is set. 9023 */ 9024 SensorMatch * 9025 sensor_match_proxy_new_for_bus_finish ( 9026 GAsyncResult *res, 9027 GError **error) 9028 { 9029 GObject *ret; 9030 GObject *source_object; 9031 source_object = g_async_result_get_source_object (res); 9032 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 9033 g_object_unref (source_object); 9034 if (ret != NULL) 9035 return SENSOR_MATCH (ret); 9036 else 9037 return NULL; 9038 } 9039 9040 /** 9041 * sensor_match_proxy_new_for_bus_sync: 9042 * @bus_type: A #GBusType. 9043 * @flags: Flags from the #GDBusProxyFlags enumeration. 9044 * @name: A bus name (well-known or unique). 9045 * @object_path: An object path. 9046 * @cancellable: (allow-none): A #GCancellable or %NULL. 9047 * @error: Return location for error or %NULL 9048 * 9049 * Like sensor_match_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection. 9050 * 9051 * The calling thread is blocked until a reply is received. 9052 * 9053 * See sensor_match_proxy_new_for_bus() for the asynchronous version of this constructor. 9054 * 9055 * Returns: (transfer full) (type SensorMatchProxy): The constructed proxy object or %NULL if @error is set. 9056 */ 9057 SensorMatch * 9058 sensor_match_proxy_new_for_bus_sync ( 9059 GBusType bus_type, 9060 GDBusProxyFlags flags, 9061 const gchar *name, 9062 const gchar *object_path, 9063 GCancellable *cancellable, 9064 GError **error) 9065 { 9066 GInitable *ret; 9067 ret = g_initable_new (TYPE_SENSOR_MATCH_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.SensorMatch", NULL); 9068 if (ret != NULL) 9069 return SENSOR_MATCH (ret); 9070 else 9071 return NULL; 9072 } 9073 9074 9075 /* ------------------------------------------------------------------------ */ 9076 9077 /** 9078 * SensorMatchSkeleton: 9079 * 9080 * The #SensorMatchSkeleton structure contains only private data and should only be accessed using the provided API. 9081 */ 9082 9083 /** 9084 * SensorMatchSkeletonClass: 9085 * @parent_class: The parent class. 9086 * 9087 * Class structure for #SensorMatchSkeleton. 9088 */ 9089 9090 struct _SensorMatchSkeletonPrivate 9091 { 9092 GValue *properties; 9093 GList *changed_properties; 9094 GSource *changed_properties_idle_source; 9095 GMainContext *context; 9096 GMutex lock; 9097 }; 9098 9099 static void 9100 _sensor_match_skeleton_handle_method_call ( 9101 GDBusConnection *connection G_GNUC_UNUSED, 9102 const gchar *sender G_GNUC_UNUSED, 9103 const gchar *object_path G_GNUC_UNUSED, 9104 const gchar *interface_name, 9105 const gchar *method_name, 9106 GVariant *parameters, 9107 GDBusMethodInvocation *invocation, 9108 gpointer user_data) 9109 { 9110 SensorMatchSkeleton *skeleton = SENSOR_MATCH_SKELETON (user_data); 9111 _ExtendedGDBusMethodInfo *info; 9112 GVariantIter iter; 9113 GVariant *child; 9114 GValue *paramv; 9115 guint num_params; 9116 guint num_extra; 9117 guint n; 9118 guint signal_id; 9119 GValue return_value = G_VALUE_INIT; 9120 info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation); 9121 g_assert (info != NULL); 9122 num_params = g_variant_n_children (parameters); 9123 num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra); 9124 n = 0; 9125 g_value_init (¶mv[n], TYPE_SENSOR_MATCH); 9126 g_value_set_object (¶mv[n++], skeleton); 9127 g_value_init (¶mv[n], G_TYPE_DBUS_METHOD_INVOCATION); 9128 g_value_set_object (¶mv[n++], invocation); 9129 if (info->pass_fdlist) 9130 { 9131 #ifdef G_OS_UNIX 9132 g_value_init (¶mv[n], G_TYPE_UNIX_FD_LIST); 9133 g_value_set_object (¶mv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation))); 9134 #else 9135 g_assert_not_reached (); 9136 #endif 9137 } 9138 g_variant_iter_init (&iter, parameters); 9139 while ((child = g_variant_iter_next_value (&iter)) != NULL) 9140 { 9141 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra]; 9142 if (arg_info->use_gvariant) 9143 { 9144 g_value_init (¶mv[n], G_TYPE_VARIANT); 9145 g_value_set_variant (¶mv[n], child); 9146 n++; 9147 } 9148 else 9149 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 9150 g_variant_unref (child); 9151 } 9152 signal_id = g_signal_lookup (info->signal_name, TYPE_SENSOR_MATCH); 9153 g_value_init (&return_value, G_TYPE_BOOLEAN); 9154 g_signal_emitv (paramv, signal_id, 0, &return_value); 9155 if (!g_value_get_boolean (&return_value)) 9156 g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name); 9157 g_value_unset (&return_value); 9158 for (n = 0; n < num_params + num_extra; n++) 9159 g_value_unset (¶mv[n]); 9160 g_free (paramv); 9161 } 9162 9163 static GVariant * 9164 _sensor_match_skeleton_handle_get_property ( 9165 GDBusConnection *connection G_GNUC_UNUSED, 9166 const gchar *sender G_GNUC_UNUSED, 9167 const gchar *object_path G_GNUC_UNUSED, 9168 const gchar *interface_name G_GNUC_UNUSED, 9169 const gchar *property_name, 9170 GError **error, 9171 gpointer user_data) 9172 { 9173 SensorMatchSkeleton *skeleton = SENSOR_MATCH_SKELETON (user_data); 9174 GValue value = G_VALUE_INIT; 9175 GParamSpec *pspec; 9176 _ExtendedGDBusPropertyInfo *info; 9177 GVariant *ret; 9178 ret = NULL; 9179 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_sensor_match_interface_info.parent_struct, property_name); 9180 g_assert (info != NULL); 9181 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 9182 if (pspec == NULL) 9183 { 9184 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 9185 } 9186 else 9187 { 9188 g_value_init (&value, pspec->value_type); 9189 g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value); 9190 ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature)); 9191 g_value_unset (&value); 9192 } 9193 return ret; 9194 } 9195 9196 static gboolean 9197 _sensor_match_skeleton_handle_set_property ( 9198 GDBusConnection *connection G_GNUC_UNUSED, 9199 const gchar *sender G_GNUC_UNUSED, 9200 const gchar *object_path G_GNUC_UNUSED, 9201 const gchar *interface_name G_GNUC_UNUSED, 9202 const gchar *property_name, 9203 GVariant *variant, 9204 GError **error, 9205 gpointer user_data) 9206 { 9207 SensorMatchSkeleton *skeleton = SENSOR_MATCH_SKELETON (user_data); 9208 GValue value = G_VALUE_INIT; 9209 GParamSpec *pspec; 9210 _ExtendedGDBusPropertyInfo *info; 9211 gboolean ret; 9212 ret = FALSE; 9213 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_sensor_match_interface_info.parent_struct, property_name); 9214 g_assert (info != NULL); 9215 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 9216 if (pspec == NULL) 9217 { 9218 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 9219 } 9220 else 9221 { 9222 if (info->use_gvariant) 9223 g_value_set_variant (&value, variant); 9224 else 9225 g_dbus_gvariant_to_gvalue (variant, &value); 9226 g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value); 9227 g_value_unset (&value); 9228 ret = TRUE; 9229 } 9230 return ret; 9231 } 9232 9233 static const GDBusInterfaceVTable _sensor_match_skeleton_vtable = 9234 { 9235 _sensor_match_skeleton_handle_method_call, 9236 _sensor_match_skeleton_handle_get_property, 9237 _sensor_match_skeleton_handle_set_property, 9238 {NULL} 9239 }; 9240 9241 static GDBusInterfaceInfo * 9242 sensor_match_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 9243 { 9244 return sensor_match_interface_info (); 9245 } 9246 9247 static GDBusInterfaceVTable * 9248 sensor_match_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 9249 { 9250 return (GDBusInterfaceVTable *) &_sensor_match_skeleton_vtable; 9251 } 9252 9253 static GVariant * 9254 sensor_match_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton) 9255 { 9256 SensorMatchSkeleton *skeleton = SENSOR_MATCH_SKELETON (_skeleton); 9257 9258 GVariantBuilder builder; 9259 guint n; 9260 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 9261 if (_sensor_match_interface_info.parent_struct.properties == NULL) 9262 goto out; 9263 for (n = 0; _sensor_match_interface_info.parent_struct.properties[n] != NULL; n++) 9264 { 9265 GDBusPropertyInfo *info = _sensor_match_interface_info.parent_struct.properties[n]; 9266 if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE) 9267 { 9268 GVariant *value; 9269 value = _sensor_match_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.SensorMatch", info->name, NULL, skeleton); 9270 if (value != NULL) 9271 { 9272 g_variant_take_ref (value); 9273 g_variant_builder_add (&builder, "{sv}", info->name, value); 9274 g_variant_unref (value); 9275 } 9276 } 9277 } 9278 out: 9279 return g_variant_builder_end (&builder); 9280 } 9281 9282 static gboolean _sensor_match_emit_changed (gpointer user_data); 9283 9284 static void 9285 sensor_match_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton) 9286 { 9287 SensorMatchSkeleton *skeleton = SENSOR_MATCH_SKELETON (_skeleton); 9288 gboolean emit_changed = FALSE; 9289 9290 g_mutex_lock (&skeleton->priv->lock); 9291 if (skeleton->priv->changed_properties_idle_source != NULL) 9292 { 9293 g_source_destroy (skeleton->priv->changed_properties_idle_source); 9294 skeleton->priv->changed_properties_idle_source = NULL; 9295 emit_changed = TRUE; 9296 } 9297 g_mutex_unlock (&skeleton->priv->lock); 9298 9299 if (emit_changed) 9300 _sensor_match_emit_changed (skeleton); 9301 } 9302 9303 static void 9304 _sensor_match_on_signal_sensor_match ( 9305 SensorMatch *object, 9306 guchar arg_state) 9307 { 9308 SensorMatchSkeleton *skeleton = SENSOR_MATCH_SKELETON (object); 9309 9310 GList *connections, *l; 9311 GVariant *signal_variant; 9312 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 9313 9314 signal_variant = g_variant_ref_sink (g_variant_new ("(y)", 9315 arg_state)); 9316 for (l = connections; l != NULL; l = l->next) 9317 { 9318 GDBusConnection *connection = l->data; 9319 g_dbus_connection_emit_signal (connection, 9320 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.SensorMatch", "SensorMatch", 9321 signal_variant, NULL); 9322 } 9323 g_variant_unref (signal_variant); 9324 g_list_free_full (connections, g_object_unref); 9325 } 9326 9327 static void sensor_match_skeleton_iface_init (SensorMatchIface *iface); 9328 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 9329 G_DEFINE_TYPE_WITH_CODE (SensorMatchSkeleton, sensor_match_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 9330 G_ADD_PRIVATE (SensorMatchSkeleton) 9331 G_IMPLEMENT_INTERFACE (TYPE_SENSOR_MATCH, sensor_match_skeleton_iface_init)); 9332 9333 #else 9334 G_DEFINE_TYPE_WITH_CODE (SensorMatchSkeleton, sensor_match_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 9335 G_IMPLEMENT_INTERFACE (TYPE_SENSOR_MATCH, sensor_match_skeleton_iface_init)); 9336 9337 #endif 9338 static void 9339 sensor_match_skeleton_finalize (GObject *object) 9340 { 9341 SensorMatchSkeleton *skeleton = SENSOR_MATCH_SKELETON (object); 9342 guint n; 9343 for (n = 0; n < 2; n++) 9344 g_value_unset (&skeleton->priv->properties[n]); 9345 g_free (skeleton->priv->properties); 9346 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 9347 if (skeleton->priv->changed_properties_idle_source != NULL) 9348 g_source_destroy (skeleton->priv->changed_properties_idle_source); 9349 g_main_context_unref (skeleton->priv->context); 9350 g_mutex_clear (&skeleton->priv->lock); 9351 G_OBJECT_CLASS (sensor_match_skeleton_parent_class)->finalize (object); 9352 } 9353 9354 static void 9355 sensor_match_skeleton_get_property (GObject *object, 9356 guint prop_id, 9357 GValue *value, 9358 GParamSpec *pspec G_GNUC_UNUSED) 9359 { 9360 SensorMatchSkeleton *skeleton = SENSOR_MATCH_SKELETON (object); 9361 g_assert (prop_id != 0 && prop_id - 1 < 2); 9362 g_mutex_lock (&skeleton->priv->lock); 9363 g_value_copy (&skeleton->priv->properties[prop_id - 1], value); 9364 g_mutex_unlock (&skeleton->priv->lock); 9365 } 9366 9367 static gboolean 9368 _sensor_match_emit_changed (gpointer user_data) 9369 { 9370 SensorMatchSkeleton *skeleton = SENSOR_MATCH_SKELETON (user_data); 9371 GList *l; 9372 GVariantBuilder builder; 9373 GVariantBuilder invalidated_builder; 9374 guint num_changes; 9375 9376 g_mutex_lock (&skeleton->priv->lock); 9377 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 9378 g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as")); 9379 for (l = skeleton->priv->changed_properties, num_changes = 0; l != NULL; l = l->next) 9380 { 9381 ChangedProperty *cp = l->data; 9382 GVariant *variant; 9383 const GValue *cur_value; 9384 9385 cur_value = &skeleton->priv->properties[cp->prop_id - 1]; 9386 if (!_g_value_equal (cur_value, &cp->orig_value)) 9387 { 9388 variant = g_dbus_gvalue_to_gvariant (cur_value, G_VARIANT_TYPE (cp->info->parent_struct.signature)); 9389 g_variant_builder_add (&builder, "{sv}", cp->info->parent_struct.name, variant); 9390 g_variant_unref (variant); 9391 num_changes++; 9392 } 9393 } 9394 if (num_changes > 0) 9395 { 9396 GList *connections, *ll; 9397 GVariant *signal_variant; 9398 signal_variant = g_variant_ref_sink (g_variant_new ("(sa{sv}as)", "org.openbmc.SensorMatch", 9399 &builder, &invalidated_builder)); 9400 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 9401 for (ll = connections; ll != NULL; ll = ll->next) 9402 { 9403 GDBusConnection *connection = ll->data; 9404 9405 g_dbus_connection_emit_signal (connection, 9406 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), 9407 "org.freedesktop.DBus.Properties", 9408 "PropertiesChanged", 9409 signal_variant, 9410 NULL); 9411 } 9412 g_variant_unref (signal_variant); 9413 g_list_free_full (connections, g_object_unref); 9414 } 9415 else 9416 { 9417 g_variant_builder_clear (&builder); 9418 g_variant_builder_clear (&invalidated_builder); 9419 } 9420 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 9421 skeleton->priv->changed_properties = NULL; 9422 skeleton->priv->changed_properties_idle_source = NULL; 9423 g_mutex_unlock (&skeleton->priv->lock); 9424 return FALSE; 9425 } 9426 9427 static void 9428 _sensor_match_schedule_emit_changed (SensorMatchSkeleton *skeleton, const _ExtendedGDBusPropertyInfo *info, guint prop_id, const GValue *orig_value) 9429 { 9430 ChangedProperty *cp; 9431 GList *l; 9432 cp = NULL; 9433 for (l = skeleton->priv->changed_properties; l != NULL; l = l->next) 9434 { 9435 ChangedProperty *i_cp = l->data; 9436 if (i_cp->info == info) 9437 { 9438 cp = i_cp; 9439 break; 9440 } 9441 } 9442 if (cp == NULL) 9443 { 9444 cp = g_new0 (ChangedProperty, 1); 9445 cp->prop_id = prop_id; 9446 cp->info = info; 9447 skeleton->priv->changed_properties = g_list_prepend (skeleton->priv->changed_properties, cp); 9448 g_value_init (&cp->orig_value, G_VALUE_TYPE (orig_value)); 9449 g_value_copy (orig_value, &cp->orig_value); 9450 } 9451 } 9452 9453 static void 9454 sensor_match_skeleton_notify (GObject *object, 9455 GParamSpec *pspec G_GNUC_UNUSED) 9456 { 9457 SensorMatchSkeleton *skeleton = SENSOR_MATCH_SKELETON (object); 9458 g_mutex_lock (&skeleton->priv->lock); 9459 if (skeleton->priv->changed_properties != NULL && 9460 skeleton->priv->changed_properties_idle_source == NULL) 9461 { 9462 skeleton->priv->changed_properties_idle_source = g_idle_source_new (); 9463 g_source_set_priority (skeleton->priv->changed_properties_idle_source, G_PRIORITY_DEFAULT); 9464 g_source_set_callback (skeleton->priv->changed_properties_idle_source, _sensor_match_emit_changed, g_object_ref (skeleton), (GDestroyNotify) g_object_unref); 9465 g_source_set_name (skeleton->priv->changed_properties_idle_source, "[generated] _sensor_match_emit_changed"); 9466 g_source_attach (skeleton->priv->changed_properties_idle_source, skeleton->priv->context); 9467 g_source_unref (skeleton->priv->changed_properties_idle_source); 9468 } 9469 g_mutex_unlock (&skeleton->priv->lock); 9470 } 9471 9472 static void 9473 sensor_match_skeleton_set_property (GObject *object, 9474 guint prop_id, 9475 const GValue *value, 9476 GParamSpec *pspec) 9477 { 9478 SensorMatchSkeleton *skeleton = SENSOR_MATCH_SKELETON (object); 9479 g_assert (prop_id != 0 && prop_id - 1 < 2); 9480 g_mutex_lock (&skeleton->priv->lock); 9481 g_object_freeze_notify (object); 9482 if (!_g_value_equal (value, &skeleton->priv->properties[prop_id - 1])) 9483 { 9484 if (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)) != NULL) 9485 _sensor_match_schedule_emit_changed (skeleton, _sensor_match_property_info_pointers[prop_id - 1], prop_id, &skeleton->priv->properties[prop_id - 1]); 9486 g_value_copy (value, &skeleton->priv->properties[prop_id - 1]); 9487 g_object_notify_by_pspec (object, pspec); 9488 } 9489 g_mutex_unlock (&skeleton->priv->lock); 9490 g_object_thaw_notify (object); 9491 } 9492 9493 static void 9494 sensor_match_skeleton_init (SensorMatchSkeleton *skeleton) 9495 { 9496 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 9497 skeleton->priv = sensor_match_skeleton_get_instance_private (skeleton); 9498 #else 9499 skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, TYPE_SENSOR_MATCH_SKELETON, SensorMatchSkeletonPrivate); 9500 #endif 9501 9502 g_mutex_init (&skeleton->priv->lock); 9503 skeleton->priv->context = g_main_context_ref_thread_default (); 9504 skeleton->priv->properties = g_new0 (GValue, 2); 9505 g_value_init (&skeleton->priv->properties[0], G_TYPE_VARIANT); 9506 g_value_init (&skeleton->priv->properties[1], G_TYPE_UCHAR); 9507 } 9508 9509 static GVariant * 9510 sensor_match_skeleton_get_match_value (SensorMatch *object) 9511 { 9512 SensorMatchSkeleton *skeleton = SENSOR_MATCH_SKELETON (object); 9513 GVariant *value; 9514 g_mutex_lock (&skeleton->priv->lock); 9515 value = g_value_get_variant (&(skeleton->priv->properties[0])); 9516 g_mutex_unlock (&skeleton->priv->lock); 9517 return value; 9518 } 9519 9520 static guchar 9521 sensor_match_skeleton_get_state (SensorMatch *object) 9522 { 9523 SensorMatchSkeleton *skeleton = SENSOR_MATCH_SKELETON (object); 9524 guchar value; 9525 g_mutex_lock (&skeleton->priv->lock); 9526 value = g_value_get_uchar (&(skeleton->priv->properties[1])); 9527 g_mutex_unlock (&skeleton->priv->lock); 9528 return value; 9529 } 9530 9531 static void 9532 sensor_match_skeleton_class_init (SensorMatchSkeletonClass *klass) 9533 { 9534 GObjectClass *gobject_class; 9535 GDBusInterfaceSkeletonClass *skeleton_class; 9536 9537 gobject_class = G_OBJECT_CLASS (klass); 9538 gobject_class->finalize = sensor_match_skeleton_finalize; 9539 gobject_class->get_property = sensor_match_skeleton_get_property; 9540 gobject_class->set_property = sensor_match_skeleton_set_property; 9541 gobject_class->notify = sensor_match_skeleton_notify; 9542 9543 9544 sensor_match_override_properties (gobject_class, 1); 9545 9546 skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass); 9547 skeleton_class->get_info = sensor_match_skeleton_dbus_interface_get_info; 9548 skeleton_class->get_properties = sensor_match_skeleton_dbus_interface_get_properties; 9549 skeleton_class->flush = sensor_match_skeleton_dbus_interface_flush; 9550 skeleton_class->get_vtable = sensor_match_skeleton_dbus_interface_get_vtable; 9551 9552 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 9553 g_type_class_add_private (klass, sizeof (SensorMatchSkeletonPrivate)); 9554 #endif 9555 } 9556 9557 static void 9558 sensor_match_skeleton_iface_init (SensorMatchIface *iface) 9559 { 9560 iface->sensor_match = _sensor_match_on_signal_sensor_match; 9561 iface->get_match_value = sensor_match_skeleton_get_match_value; 9562 iface->get_state = sensor_match_skeleton_get_state; 9563 } 9564 9565 /** 9566 * sensor_match_skeleton_new: 9567 * 9568 * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorMatch.top_of_page">org.openbmc.SensorMatch</link>. 9569 * 9570 * Returns: (transfer full) (type SensorMatchSkeleton): The skeleton object. 9571 */ 9572 SensorMatch * 9573 sensor_match_skeleton_new (void) 9574 { 9575 return SENSOR_MATCH (g_object_new (TYPE_SENSOR_MATCH_SKELETON, NULL)); 9576 } 9577 9578 /* ------------------------------------------------------------------------ 9579 * Code for interface org.openbmc.Process 9580 * ------------------------------------------------------------------------ 9581 */ 9582 9583 /** 9584 * SECTION:Process 9585 * @title: Process 9586 * @short_description: Generated C code for the org.openbmc.Process D-Bus interface 9587 * 9588 * This section contains code for working with the <link linkend="gdbus-interface-org-openbmc-Process.top_of_page">org.openbmc.Process</link> D-Bus interface in C. 9589 */ 9590 9591 /* ---- Introspection data for org.openbmc.Process ---- */ 9592 9593 static const _ExtendedGDBusMethodInfo _process_method_info_stop = 9594 { 9595 { 9596 -1, 9597 (gchar *) "stop", 9598 NULL, 9599 NULL, 9600 NULL 9601 }, 9602 "handle-stop", 9603 FALSE 9604 }; 9605 9606 static const _ExtendedGDBusMethodInfo * const _process_method_info_pointers[] = 9607 { 9608 &_process_method_info_stop, 9609 NULL 9610 }; 9611 9612 static const _ExtendedGDBusInterfaceInfo _process_interface_info = 9613 { 9614 { 9615 -1, 9616 (gchar *) "org.openbmc.Process", 9617 (GDBusMethodInfo **) &_process_method_info_pointers, 9618 NULL, 9619 NULL, 9620 NULL 9621 }, 9622 "process", 9623 }; 9624 9625 9626 /** 9627 * process_interface_info: 9628 * 9629 * Gets a machine-readable description of the <link linkend="gdbus-interface-org-openbmc-Process.top_of_page">org.openbmc.Process</link> D-Bus interface. 9630 * 9631 * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free. 9632 */ 9633 GDBusInterfaceInfo * 9634 process_interface_info (void) 9635 { 9636 return (GDBusInterfaceInfo *) &_process_interface_info.parent_struct; 9637 } 9638 9639 /** 9640 * process_override_properties: 9641 * @klass: The class structure for a #GObject<!-- -->-derived class. 9642 * @property_id_begin: The property id to assign to the first overridden property. 9643 * 9644 * Overrides all #GObject properties in the #Process interface for a concrete class. 9645 * The properties are overridden in the order they are defined. 9646 * 9647 * Returns: The last property id. 9648 */ 9649 guint 9650 process_override_properties (GObjectClass *klass, guint property_id_begin) 9651 { 9652 return property_id_begin - 1; 9653 } 9654 9655 9656 9657 /** 9658 * Process: 9659 * 9660 * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Process.top_of_page">org.openbmc.Process</link>. 9661 */ 9662 9663 /** 9664 * ProcessIface: 9665 * @parent_iface: The parent interface. 9666 * @handle_stop: Handler for the #Process::handle-stop signal. 9667 * 9668 * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Process.top_of_page">org.openbmc.Process</link>. 9669 */ 9670 9671 typedef ProcessIface ProcessInterface; 9672 G_DEFINE_INTERFACE (Process, process, G_TYPE_OBJECT); 9673 9674 static void 9675 process_default_init (ProcessIface *iface) 9676 { 9677 /* GObject signals for incoming D-Bus method calls: */ 9678 /** 9679 * Process::handle-stop: 9680 * @object: A #Process. 9681 * @invocation: A #GDBusMethodInvocation. 9682 * 9683 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-Process.stop">stop()</link> D-Bus method. 9684 * 9685 * 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 process_complete_stop() 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. 9686 * 9687 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 9688 */ 9689 g_signal_new ("handle-stop", 9690 G_TYPE_FROM_INTERFACE (iface), 9691 G_SIGNAL_RUN_LAST, 9692 G_STRUCT_OFFSET (ProcessIface, handle_stop), 9693 g_signal_accumulator_true_handled, 9694 NULL, 9695 g_cclosure_marshal_generic, 9696 G_TYPE_BOOLEAN, 9697 1, 9698 G_TYPE_DBUS_METHOD_INVOCATION); 9699 9700 } 9701 9702 /** 9703 * process_call_stop: 9704 * @proxy: A #ProcessProxy. 9705 * @cancellable: (allow-none): A #GCancellable or %NULL. 9706 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 9707 * @user_data: User data to pass to @callback. 9708 * 9709 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-Process.stop">stop()</link> D-Bus method on @proxy. 9710 * 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. 9711 * You can then call process_call_stop_finish() to get the result of the operation. 9712 * 9713 * See process_call_stop_sync() for the synchronous, blocking version of this method. 9714 */ 9715 void 9716 process_call_stop ( 9717 Process *proxy, 9718 GCancellable *cancellable, 9719 GAsyncReadyCallback callback, 9720 gpointer user_data) 9721 { 9722 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 9723 "stop", 9724 g_variant_new ("()"), 9725 G_DBUS_CALL_FLAGS_NONE, 9726 -1, 9727 cancellable, 9728 callback, 9729 user_data); 9730 } 9731 9732 /** 9733 * process_call_stop_finish: 9734 * @proxy: A #ProcessProxy. 9735 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to process_call_stop(). 9736 * @error: Return location for error or %NULL. 9737 * 9738 * Finishes an operation started with process_call_stop(). 9739 * 9740 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 9741 */ 9742 gboolean 9743 process_call_stop_finish ( 9744 Process *proxy, 9745 GAsyncResult *res, 9746 GError **error) 9747 { 9748 GVariant *_ret; 9749 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 9750 if (_ret == NULL) 9751 goto _out; 9752 g_variant_get (_ret, 9753 "()"); 9754 g_variant_unref (_ret); 9755 _out: 9756 return _ret != NULL; 9757 } 9758 9759 /** 9760 * process_call_stop_sync: 9761 * @proxy: A #ProcessProxy. 9762 * @cancellable: (allow-none): A #GCancellable or %NULL. 9763 * @error: Return location for error or %NULL. 9764 * 9765 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-Process.stop">stop()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 9766 * 9767 * See process_call_stop() for the asynchronous version of this method. 9768 * 9769 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 9770 */ 9771 gboolean 9772 process_call_stop_sync ( 9773 Process *proxy, 9774 GCancellable *cancellable, 9775 GError **error) 9776 { 9777 GVariant *_ret; 9778 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 9779 "stop", 9780 g_variant_new ("()"), 9781 G_DBUS_CALL_FLAGS_NONE, 9782 -1, 9783 cancellable, 9784 error); 9785 if (_ret == NULL) 9786 goto _out; 9787 g_variant_get (_ret, 9788 "()"); 9789 g_variant_unref (_ret); 9790 _out: 9791 return _ret != NULL; 9792 } 9793 9794 /** 9795 * process_complete_stop: 9796 * @object: A #Process. 9797 * @invocation: (transfer full): A #GDBusMethodInvocation. 9798 * 9799 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-Process.stop">stop()</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. 9800 * 9801 * This method will free @invocation, you cannot use it afterwards. 9802 */ 9803 void 9804 process_complete_stop ( 9805 Process *object, 9806 GDBusMethodInvocation *invocation) 9807 { 9808 g_dbus_method_invocation_return_value (invocation, 9809 g_variant_new ("()")); 9810 } 9811 9812 /* ------------------------------------------------------------------------ */ 9813 9814 /** 9815 * ProcessProxy: 9816 * 9817 * The #ProcessProxy structure contains only private data and should only be accessed using the provided API. 9818 */ 9819 9820 /** 9821 * ProcessProxyClass: 9822 * @parent_class: The parent class. 9823 * 9824 * Class structure for #ProcessProxy. 9825 */ 9826 9827 struct _ProcessProxyPrivate 9828 { 9829 GData *qdata; 9830 }; 9831 9832 static void process_proxy_iface_init (ProcessIface *iface); 9833 9834 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 9835 G_DEFINE_TYPE_WITH_CODE (ProcessProxy, process_proxy, G_TYPE_DBUS_PROXY, 9836 G_ADD_PRIVATE (ProcessProxy) 9837 G_IMPLEMENT_INTERFACE (TYPE_PROCESS, process_proxy_iface_init)); 9838 9839 #else 9840 G_DEFINE_TYPE_WITH_CODE (ProcessProxy, process_proxy, G_TYPE_DBUS_PROXY, 9841 G_IMPLEMENT_INTERFACE (TYPE_PROCESS, process_proxy_iface_init)); 9842 9843 #endif 9844 static void 9845 process_proxy_finalize (GObject *object) 9846 { 9847 ProcessProxy *proxy = PROCESS_PROXY (object); 9848 g_datalist_clear (&proxy->priv->qdata); 9849 G_OBJECT_CLASS (process_proxy_parent_class)->finalize (object); 9850 } 9851 9852 static void 9853 process_proxy_get_property (GObject *object, 9854 guint prop_id, 9855 GValue *value, 9856 GParamSpec *pspec G_GNUC_UNUSED) 9857 { 9858 } 9859 9860 static void 9861 process_proxy_set_property (GObject *object, 9862 guint prop_id, 9863 const GValue *value, 9864 GParamSpec *pspec G_GNUC_UNUSED) 9865 { 9866 } 9867 9868 static void 9869 process_proxy_g_signal (GDBusProxy *proxy, 9870 const gchar *sender_name G_GNUC_UNUSED, 9871 const gchar *signal_name, 9872 GVariant *parameters) 9873 { 9874 _ExtendedGDBusSignalInfo *info; 9875 GVariantIter iter; 9876 GVariant *child; 9877 GValue *paramv; 9878 guint num_params; 9879 guint n; 9880 guint signal_id; 9881 info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_process_interface_info.parent_struct, signal_name); 9882 if (info == NULL) 9883 return; 9884 num_params = g_variant_n_children (parameters); 9885 paramv = g_new0 (GValue, num_params + 1); 9886 g_value_init (¶mv[0], TYPE_PROCESS); 9887 g_value_set_object (¶mv[0], proxy); 9888 g_variant_iter_init (&iter, parameters); 9889 n = 1; 9890 while ((child = g_variant_iter_next_value (&iter)) != NULL) 9891 { 9892 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1]; 9893 if (arg_info->use_gvariant) 9894 { 9895 g_value_init (¶mv[n], G_TYPE_VARIANT); 9896 g_value_set_variant (¶mv[n], child); 9897 n++; 9898 } 9899 else 9900 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 9901 g_variant_unref (child); 9902 } 9903 signal_id = g_signal_lookup (info->signal_name, TYPE_PROCESS); 9904 g_signal_emitv (paramv, signal_id, 0, NULL); 9905 for (n = 0; n < num_params + 1; n++) 9906 g_value_unset (¶mv[n]); 9907 g_free (paramv); 9908 } 9909 9910 static void 9911 process_proxy_g_properties_changed (GDBusProxy *_proxy, 9912 GVariant *changed_properties, 9913 const gchar *const *invalidated_properties) 9914 { 9915 ProcessProxy *proxy = PROCESS_PROXY (_proxy); 9916 guint n; 9917 const gchar *key; 9918 GVariantIter *iter; 9919 _ExtendedGDBusPropertyInfo *info; 9920 g_variant_get (changed_properties, "a{sv}", &iter); 9921 while (g_variant_iter_next (iter, "{&sv}", &key, NULL)) 9922 { 9923 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_process_interface_info.parent_struct, key); 9924 g_datalist_remove_data (&proxy->priv->qdata, key); 9925 if (info != NULL) 9926 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 9927 } 9928 g_variant_iter_free (iter); 9929 for (n = 0; invalidated_properties[n] != NULL; n++) 9930 { 9931 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_process_interface_info.parent_struct, invalidated_properties[n]); 9932 g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]); 9933 if (info != NULL) 9934 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 9935 } 9936 } 9937 9938 static void 9939 process_proxy_init (ProcessProxy *proxy) 9940 { 9941 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 9942 proxy->priv = process_proxy_get_instance_private (proxy); 9943 #else 9944 proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, TYPE_PROCESS_PROXY, ProcessProxyPrivate); 9945 #endif 9946 9947 g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), process_interface_info ()); 9948 } 9949 9950 static void 9951 process_proxy_class_init (ProcessProxyClass *klass) 9952 { 9953 GObjectClass *gobject_class; 9954 GDBusProxyClass *proxy_class; 9955 9956 gobject_class = G_OBJECT_CLASS (klass); 9957 gobject_class->finalize = process_proxy_finalize; 9958 gobject_class->get_property = process_proxy_get_property; 9959 gobject_class->set_property = process_proxy_set_property; 9960 9961 proxy_class = G_DBUS_PROXY_CLASS (klass); 9962 proxy_class->g_signal = process_proxy_g_signal; 9963 proxy_class->g_properties_changed = process_proxy_g_properties_changed; 9964 9965 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 9966 g_type_class_add_private (klass, sizeof (ProcessProxyPrivate)); 9967 #endif 9968 } 9969 9970 static void 9971 process_proxy_iface_init (ProcessIface *iface) 9972 { 9973 } 9974 9975 /** 9976 * process_proxy_new: 9977 * @connection: A #GDBusConnection. 9978 * @flags: Flags from the #GDBusProxyFlags enumeration. 9979 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 9980 * @object_path: An object path. 9981 * @cancellable: (allow-none): A #GCancellable or %NULL. 9982 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 9983 * @user_data: User data to pass to @callback. 9984 * 9985 * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Process.top_of_page">org.openbmc.Process</link>. See g_dbus_proxy_new() for more details. 9986 * 9987 * 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. 9988 * You can then call process_proxy_new_finish() to get the result of the operation. 9989 * 9990 * See process_proxy_new_sync() for the synchronous, blocking version of this constructor. 9991 */ 9992 void 9993 process_proxy_new ( 9994 GDBusConnection *connection, 9995 GDBusProxyFlags flags, 9996 const gchar *name, 9997 const gchar *object_path, 9998 GCancellable *cancellable, 9999 GAsyncReadyCallback callback, 10000 gpointer user_data) 10001 { 10002 g_async_initable_new_async (TYPE_PROCESS_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.Process", NULL); 10003 } 10004 10005 /** 10006 * process_proxy_new_finish: 10007 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to process_proxy_new(). 10008 * @error: Return location for error or %NULL 10009 * 10010 * Finishes an operation started with process_proxy_new(). 10011 * 10012 * Returns: (transfer full) (type ProcessProxy): The constructed proxy object or %NULL if @error is set. 10013 */ 10014 Process * 10015 process_proxy_new_finish ( 10016 GAsyncResult *res, 10017 GError **error) 10018 { 10019 GObject *ret; 10020 GObject *source_object; 10021 source_object = g_async_result_get_source_object (res); 10022 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 10023 g_object_unref (source_object); 10024 if (ret != NULL) 10025 return PROCESS (ret); 10026 else 10027 return NULL; 10028 } 10029 10030 /** 10031 * process_proxy_new_sync: 10032 * @connection: A #GDBusConnection. 10033 * @flags: Flags from the #GDBusProxyFlags enumeration. 10034 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 10035 * @object_path: An object path. 10036 * @cancellable: (allow-none): A #GCancellable or %NULL. 10037 * @error: Return location for error or %NULL 10038 * 10039 * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Process.top_of_page">org.openbmc.Process</link>. See g_dbus_proxy_new_sync() for more details. 10040 * 10041 * The calling thread is blocked until a reply is received. 10042 * 10043 * See process_proxy_new() for the asynchronous version of this constructor. 10044 * 10045 * Returns: (transfer full) (type ProcessProxy): The constructed proxy object or %NULL if @error is set. 10046 */ 10047 Process * 10048 process_proxy_new_sync ( 10049 GDBusConnection *connection, 10050 GDBusProxyFlags flags, 10051 const gchar *name, 10052 const gchar *object_path, 10053 GCancellable *cancellable, 10054 GError **error) 10055 { 10056 GInitable *ret; 10057 ret = g_initable_new (TYPE_PROCESS_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.Process", NULL); 10058 if (ret != NULL) 10059 return PROCESS (ret); 10060 else 10061 return NULL; 10062 } 10063 10064 10065 /** 10066 * process_proxy_new_for_bus: 10067 * @bus_type: A #GBusType. 10068 * @flags: Flags from the #GDBusProxyFlags enumeration. 10069 * @name: A bus name (well-known or unique). 10070 * @object_path: An object path. 10071 * @cancellable: (allow-none): A #GCancellable or %NULL. 10072 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 10073 * @user_data: User data to pass to @callback. 10074 * 10075 * Like process_proxy_new() but takes a #GBusType instead of a #GDBusConnection. 10076 * 10077 * 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. 10078 * You can then call process_proxy_new_for_bus_finish() to get the result of the operation. 10079 * 10080 * See process_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor. 10081 */ 10082 void 10083 process_proxy_new_for_bus ( 10084 GBusType bus_type, 10085 GDBusProxyFlags flags, 10086 const gchar *name, 10087 const gchar *object_path, 10088 GCancellable *cancellable, 10089 GAsyncReadyCallback callback, 10090 gpointer user_data) 10091 { 10092 g_async_initable_new_async (TYPE_PROCESS_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.Process", NULL); 10093 } 10094 10095 /** 10096 * process_proxy_new_for_bus_finish: 10097 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to process_proxy_new_for_bus(). 10098 * @error: Return location for error or %NULL 10099 * 10100 * Finishes an operation started with process_proxy_new_for_bus(). 10101 * 10102 * Returns: (transfer full) (type ProcessProxy): The constructed proxy object or %NULL if @error is set. 10103 */ 10104 Process * 10105 process_proxy_new_for_bus_finish ( 10106 GAsyncResult *res, 10107 GError **error) 10108 { 10109 GObject *ret; 10110 GObject *source_object; 10111 source_object = g_async_result_get_source_object (res); 10112 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 10113 g_object_unref (source_object); 10114 if (ret != NULL) 10115 return PROCESS (ret); 10116 else 10117 return NULL; 10118 } 10119 10120 /** 10121 * process_proxy_new_for_bus_sync: 10122 * @bus_type: A #GBusType. 10123 * @flags: Flags from the #GDBusProxyFlags enumeration. 10124 * @name: A bus name (well-known or unique). 10125 * @object_path: An object path. 10126 * @cancellable: (allow-none): A #GCancellable or %NULL. 10127 * @error: Return location for error or %NULL 10128 * 10129 * Like process_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection. 10130 * 10131 * The calling thread is blocked until a reply is received. 10132 * 10133 * See process_proxy_new_for_bus() for the asynchronous version of this constructor. 10134 * 10135 * Returns: (transfer full) (type ProcessProxy): The constructed proxy object or %NULL if @error is set. 10136 */ 10137 Process * 10138 process_proxy_new_for_bus_sync ( 10139 GBusType bus_type, 10140 GDBusProxyFlags flags, 10141 const gchar *name, 10142 const gchar *object_path, 10143 GCancellable *cancellable, 10144 GError **error) 10145 { 10146 GInitable *ret; 10147 ret = g_initable_new (TYPE_PROCESS_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.Process", NULL); 10148 if (ret != NULL) 10149 return PROCESS (ret); 10150 else 10151 return NULL; 10152 } 10153 10154 10155 /* ------------------------------------------------------------------------ */ 10156 10157 /** 10158 * ProcessSkeleton: 10159 * 10160 * The #ProcessSkeleton structure contains only private data and should only be accessed using the provided API. 10161 */ 10162 10163 /** 10164 * ProcessSkeletonClass: 10165 * @parent_class: The parent class. 10166 * 10167 * Class structure for #ProcessSkeleton. 10168 */ 10169 10170 struct _ProcessSkeletonPrivate 10171 { 10172 GValue *properties; 10173 GList *changed_properties; 10174 GSource *changed_properties_idle_source; 10175 GMainContext *context; 10176 GMutex lock; 10177 }; 10178 10179 static void 10180 _process_skeleton_handle_method_call ( 10181 GDBusConnection *connection G_GNUC_UNUSED, 10182 const gchar *sender G_GNUC_UNUSED, 10183 const gchar *object_path G_GNUC_UNUSED, 10184 const gchar *interface_name, 10185 const gchar *method_name, 10186 GVariant *parameters, 10187 GDBusMethodInvocation *invocation, 10188 gpointer user_data) 10189 { 10190 ProcessSkeleton *skeleton = PROCESS_SKELETON (user_data); 10191 _ExtendedGDBusMethodInfo *info; 10192 GVariantIter iter; 10193 GVariant *child; 10194 GValue *paramv; 10195 guint num_params; 10196 guint num_extra; 10197 guint n; 10198 guint signal_id; 10199 GValue return_value = G_VALUE_INIT; 10200 info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation); 10201 g_assert (info != NULL); 10202 num_params = g_variant_n_children (parameters); 10203 num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra); 10204 n = 0; 10205 g_value_init (¶mv[n], TYPE_PROCESS); 10206 g_value_set_object (¶mv[n++], skeleton); 10207 g_value_init (¶mv[n], G_TYPE_DBUS_METHOD_INVOCATION); 10208 g_value_set_object (¶mv[n++], invocation); 10209 if (info->pass_fdlist) 10210 { 10211 #ifdef G_OS_UNIX 10212 g_value_init (¶mv[n], G_TYPE_UNIX_FD_LIST); 10213 g_value_set_object (¶mv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation))); 10214 #else 10215 g_assert_not_reached (); 10216 #endif 10217 } 10218 g_variant_iter_init (&iter, parameters); 10219 while ((child = g_variant_iter_next_value (&iter)) != NULL) 10220 { 10221 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra]; 10222 if (arg_info->use_gvariant) 10223 { 10224 g_value_init (¶mv[n], G_TYPE_VARIANT); 10225 g_value_set_variant (¶mv[n], child); 10226 n++; 10227 } 10228 else 10229 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 10230 g_variant_unref (child); 10231 } 10232 signal_id = g_signal_lookup (info->signal_name, TYPE_PROCESS); 10233 g_value_init (&return_value, G_TYPE_BOOLEAN); 10234 g_signal_emitv (paramv, signal_id, 0, &return_value); 10235 if (!g_value_get_boolean (&return_value)) 10236 g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name); 10237 g_value_unset (&return_value); 10238 for (n = 0; n < num_params + num_extra; n++) 10239 g_value_unset (¶mv[n]); 10240 g_free (paramv); 10241 } 10242 10243 static GVariant * 10244 _process_skeleton_handle_get_property ( 10245 GDBusConnection *connection G_GNUC_UNUSED, 10246 const gchar *sender G_GNUC_UNUSED, 10247 const gchar *object_path G_GNUC_UNUSED, 10248 const gchar *interface_name G_GNUC_UNUSED, 10249 const gchar *property_name, 10250 GError **error, 10251 gpointer user_data) 10252 { 10253 ProcessSkeleton *skeleton = PROCESS_SKELETON (user_data); 10254 GValue value = G_VALUE_INIT; 10255 GParamSpec *pspec; 10256 _ExtendedGDBusPropertyInfo *info; 10257 GVariant *ret; 10258 ret = NULL; 10259 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_process_interface_info.parent_struct, property_name); 10260 g_assert (info != NULL); 10261 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 10262 if (pspec == NULL) 10263 { 10264 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 10265 } 10266 else 10267 { 10268 g_value_init (&value, pspec->value_type); 10269 g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value); 10270 ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature)); 10271 g_value_unset (&value); 10272 } 10273 return ret; 10274 } 10275 10276 static gboolean 10277 _process_skeleton_handle_set_property ( 10278 GDBusConnection *connection G_GNUC_UNUSED, 10279 const gchar *sender G_GNUC_UNUSED, 10280 const gchar *object_path G_GNUC_UNUSED, 10281 const gchar *interface_name G_GNUC_UNUSED, 10282 const gchar *property_name, 10283 GVariant *variant, 10284 GError **error, 10285 gpointer user_data) 10286 { 10287 ProcessSkeleton *skeleton = PROCESS_SKELETON (user_data); 10288 GValue value = G_VALUE_INIT; 10289 GParamSpec *pspec; 10290 _ExtendedGDBusPropertyInfo *info; 10291 gboolean ret; 10292 ret = FALSE; 10293 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_process_interface_info.parent_struct, property_name); 10294 g_assert (info != NULL); 10295 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 10296 if (pspec == NULL) 10297 { 10298 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 10299 } 10300 else 10301 { 10302 if (info->use_gvariant) 10303 g_value_set_variant (&value, variant); 10304 else 10305 g_dbus_gvariant_to_gvalue (variant, &value); 10306 g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value); 10307 g_value_unset (&value); 10308 ret = TRUE; 10309 } 10310 return ret; 10311 } 10312 10313 static const GDBusInterfaceVTable _process_skeleton_vtable = 10314 { 10315 _process_skeleton_handle_method_call, 10316 _process_skeleton_handle_get_property, 10317 _process_skeleton_handle_set_property, 10318 {NULL} 10319 }; 10320 10321 static GDBusInterfaceInfo * 10322 process_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 10323 { 10324 return process_interface_info (); 10325 } 10326 10327 static GDBusInterfaceVTable * 10328 process_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 10329 { 10330 return (GDBusInterfaceVTable *) &_process_skeleton_vtable; 10331 } 10332 10333 static GVariant * 10334 process_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton) 10335 { 10336 ProcessSkeleton *skeleton = PROCESS_SKELETON (_skeleton); 10337 10338 GVariantBuilder builder; 10339 guint n; 10340 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 10341 if (_process_interface_info.parent_struct.properties == NULL) 10342 goto out; 10343 for (n = 0; _process_interface_info.parent_struct.properties[n] != NULL; n++) 10344 { 10345 GDBusPropertyInfo *info = _process_interface_info.parent_struct.properties[n]; 10346 if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE) 10347 { 10348 GVariant *value; 10349 value = _process_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.Process", info->name, NULL, skeleton); 10350 if (value != NULL) 10351 { 10352 g_variant_take_ref (value); 10353 g_variant_builder_add (&builder, "{sv}", info->name, value); 10354 g_variant_unref (value); 10355 } 10356 } 10357 } 10358 out: 10359 return g_variant_builder_end (&builder); 10360 } 10361 10362 static void 10363 process_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton) 10364 { 10365 } 10366 10367 static void process_skeleton_iface_init (ProcessIface *iface); 10368 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 10369 G_DEFINE_TYPE_WITH_CODE (ProcessSkeleton, process_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 10370 G_ADD_PRIVATE (ProcessSkeleton) 10371 G_IMPLEMENT_INTERFACE (TYPE_PROCESS, process_skeleton_iface_init)); 10372 10373 #else 10374 G_DEFINE_TYPE_WITH_CODE (ProcessSkeleton, process_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 10375 G_IMPLEMENT_INTERFACE (TYPE_PROCESS, process_skeleton_iface_init)); 10376 10377 #endif 10378 static void 10379 process_skeleton_finalize (GObject *object) 10380 { 10381 ProcessSkeleton *skeleton = PROCESS_SKELETON (object); 10382 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 10383 if (skeleton->priv->changed_properties_idle_source != NULL) 10384 g_source_destroy (skeleton->priv->changed_properties_idle_source); 10385 g_main_context_unref (skeleton->priv->context); 10386 g_mutex_clear (&skeleton->priv->lock); 10387 G_OBJECT_CLASS (process_skeleton_parent_class)->finalize (object); 10388 } 10389 10390 static void 10391 process_skeleton_init (ProcessSkeleton *skeleton) 10392 { 10393 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 10394 skeleton->priv = process_skeleton_get_instance_private (skeleton); 10395 #else 10396 skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, TYPE_PROCESS_SKELETON, ProcessSkeletonPrivate); 10397 #endif 10398 10399 g_mutex_init (&skeleton->priv->lock); 10400 skeleton->priv->context = g_main_context_ref_thread_default (); 10401 } 10402 10403 static void 10404 process_skeleton_class_init (ProcessSkeletonClass *klass) 10405 { 10406 GObjectClass *gobject_class; 10407 GDBusInterfaceSkeletonClass *skeleton_class; 10408 10409 gobject_class = G_OBJECT_CLASS (klass); 10410 gobject_class->finalize = process_skeleton_finalize; 10411 10412 skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass); 10413 skeleton_class->get_info = process_skeleton_dbus_interface_get_info; 10414 skeleton_class->get_properties = process_skeleton_dbus_interface_get_properties; 10415 skeleton_class->flush = process_skeleton_dbus_interface_flush; 10416 skeleton_class->get_vtable = process_skeleton_dbus_interface_get_vtable; 10417 10418 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 10419 g_type_class_add_private (klass, sizeof (ProcessSkeletonPrivate)); 10420 #endif 10421 } 10422 10423 static void 10424 process_skeleton_iface_init (ProcessIface *iface) 10425 { 10426 } 10427 10428 /** 10429 * process_skeleton_new: 10430 * 10431 * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Process.top_of_page">org.openbmc.Process</link>. 10432 * 10433 * Returns: (transfer full) (type ProcessSkeleton): The skeleton object. 10434 */ 10435 Process * 10436 process_skeleton_new (void) 10437 { 10438 return PROCESS (g_object_new (TYPE_PROCESS_SKELETON, NULL)); 10439 } 10440 10441 /* ------------------------------------------------------------------------ 10442 * Code for interface org.openbmc.SharedResource 10443 * ------------------------------------------------------------------------ 10444 */ 10445 10446 /** 10447 * SECTION:SharedResource 10448 * @title: SharedResource 10449 * @short_description: Generated C code for the org.openbmc.SharedResource D-Bus interface 10450 * 10451 * This section contains code for working with the <link linkend="gdbus-interface-org-openbmc-SharedResource.top_of_page">org.openbmc.SharedResource</link> D-Bus interface in C. 10452 */ 10453 10454 /* ---- Introspection data for org.openbmc.SharedResource ---- */ 10455 10456 static const _ExtendedGDBusArgInfo _shared_resource_method_info_lock_IN_ARG_name = 10457 { 10458 { 10459 -1, 10460 (gchar *) "name", 10461 (gchar *) "s", 10462 NULL 10463 }, 10464 FALSE 10465 }; 10466 10467 static const _ExtendedGDBusArgInfo * const _shared_resource_method_info_lock_IN_ARG_pointers[] = 10468 { 10469 &_shared_resource_method_info_lock_IN_ARG_name, 10470 NULL 10471 }; 10472 10473 static const _ExtendedGDBusMethodInfo _shared_resource_method_info_lock = 10474 { 10475 { 10476 -1, 10477 (gchar *) "lock", 10478 (GDBusArgInfo **) &_shared_resource_method_info_lock_IN_ARG_pointers, 10479 NULL, 10480 NULL 10481 }, 10482 "handle-lock", 10483 FALSE 10484 }; 10485 10486 static const _ExtendedGDBusMethodInfo _shared_resource_method_info_unlock = 10487 { 10488 { 10489 -1, 10490 (gchar *) "unlock", 10491 NULL, 10492 NULL, 10493 NULL 10494 }, 10495 "handle-unlock", 10496 FALSE 10497 }; 10498 10499 static const _ExtendedGDBusArgInfo _shared_resource_method_info_is_locked_OUT_ARG_lock = 10500 { 10501 { 10502 -1, 10503 (gchar *) "lock", 10504 (gchar *) "b", 10505 NULL 10506 }, 10507 FALSE 10508 }; 10509 10510 static const _ExtendedGDBusArgInfo _shared_resource_method_info_is_locked_OUT_ARG_name = 10511 { 10512 { 10513 -1, 10514 (gchar *) "name", 10515 (gchar *) "s", 10516 NULL 10517 }, 10518 FALSE 10519 }; 10520 10521 static const _ExtendedGDBusArgInfo * const _shared_resource_method_info_is_locked_OUT_ARG_pointers[] = 10522 { 10523 &_shared_resource_method_info_is_locked_OUT_ARG_lock, 10524 &_shared_resource_method_info_is_locked_OUT_ARG_name, 10525 NULL 10526 }; 10527 10528 static const _ExtendedGDBusMethodInfo _shared_resource_method_info_is_locked = 10529 { 10530 { 10531 -1, 10532 (gchar *) "isLocked", 10533 NULL, 10534 (GDBusArgInfo **) &_shared_resource_method_info_is_locked_OUT_ARG_pointers, 10535 NULL 10536 }, 10537 "handle-is-locked", 10538 FALSE 10539 }; 10540 10541 static const _ExtendedGDBusMethodInfo * const _shared_resource_method_info_pointers[] = 10542 { 10543 &_shared_resource_method_info_lock, 10544 &_shared_resource_method_info_unlock, 10545 &_shared_resource_method_info_is_locked, 10546 NULL 10547 }; 10548 10549 static const _ExtendedGDBusPropertyInfo _shared_resource_property_info_lock = 10550 { 10551 { 10552 -1, 10553 (gchar *) "lock", 10554 (gchar *) "b", 10555 G_DBUS_PROPERTY_INFO_FLAGS_READABLE, 10556 NULL 10557 }, 10558 "lock", 10559 FALSE 10560 }; 10561 10562 static const _ExtendedGDBusPropertyInfo _shared_resource_property_info_name = 10563 { 10564 { 10565 -1, 10566 (gchar *) "name", 10567 (gchar *) "s", 10568 G_DBUS_PROPERTY_INFO_FLAGS_READABLE, 10569 NULL 10570 }, 10571 "name", 10572 FALSE 10573 }; 10574 10575 static const _ExtendedGDBusPropertyInfo * const _shared_resource_property_info_pointers[] = 10576 { 10577 &_shared_resource_property_info_lock, 10578 &_shared_resource_property_info_name, 10579 NULL 10580 }; 10581 10582 static const _ExtendedGDBusInterfaceInfo _shared_resource_interface_info = 10583 { 10584 { 10585 -1, 10586 (gchar *) "org.openbmc.SharedResource", 10587 (GDBusMethodInfo **) &_shared_resource_method_info_pointers, 10588 NULL, 10589 (GDBusPropertyInfo **) &_shared_resource_property_info_pointers, 10590 NULL 10591 }, 10592 "shared-resource", 10593 }; 10594 10595 10596 /** 10597 * shared_resource_interface_info: 10598 * 10599 * Gets a machine-readable description of the <link linkend="gdbus-interface-org-openbmc-SharedResource.top_of_page">org.openbmc.SharedResource</link> D-Bus interface. 10600 * 10601 * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free. 10602 */ 10603 GDBusInterfaceInfo * 10604 shared_resource_interface_info (void) 10605 { 10606 return (GDBusInterfaceInfo *) &_shared_resource_interface_info.parent_struct; 10607 } 10608 10609 /** 10610 * shared_resource_override_properties: 10611 * @klass: The class structure for a #GObject<!-- -->-derived class. 10612 * @property_id_begin: The property id to assign to the first overridden property. 10613 * 10614 * Overrides all #GObject properties in the #SharedResource interface for a concrete class. 10615 * The properties are overridden in the order they are defined. 10616 * 10617 * Returns: The last property id. 10618 */ 10619 guint 10620 shared_resource_override_properties (GObjectClass *klass, guint property_id_begin) 10621 { 10622 g_object_class_override_property (klass, property_id_begin++, "lock"); 10623 g_object_class_override_property (klass, property_id_begin++, "name"); 10624 return property_id_begin - 1; 10625 } 10626 10627 10628 10629 /** 10630 * SharedResource: 10631 * 10632 * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SharedResource.top_of_page">org.openbmc.SharedResource</link>. 10633 */ 10634 10635 /** 10636 * SharedResourceIface: 10637 * @parent_iface: The parent interface. 10638 * @handle_is_locked: Handler for the #SharedResource::handle-is-locked signal. 10639 * @handle_lock: Handler for the #SharedResource::handle-lock signal. 10640 * @handle_unlock: Handler for the #SharedResource::handle-unlock signal. 10641 * @get_lock: Getter for the #SharedResource:lock property. 10642 * @get_name: Getter for the #SharedResource:name property. 10643 * 10644 * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SharedResource.top_of_page">org.openbmc.SharedResource</link>. 10645 */ 10646 10647 typedef SharedResourceIface SharedResourceInterface; 10648 G_DEFINE_INTERFACE (SharedResource, shared_resource, G_TYPE_OBJECT); 10649 10650 static void 10651 shared_resource_default_init (SharedResourceIface *iface) 10652 { 10653 /* GObject signals for incoming D-Bus method calls: */ 10654 /** 10655 * SharedResource::handle-lock: 10656 * @object: A #SharedResource. 10657 * @invocation: A #GDBusMethodInvocation. 10658 * @arg_name: Argument passed by remote caller. 10659 * 10660 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-SharedResource.lock">lock()</link> D-Bus method. 10661 * 10662 * 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 shared_resource_complete_lock() 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. 10663 * 10664 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 10665 */ 10666 g_signal_new ("handle-lock", 10667 G_TYPE_FROM_INTERFACE (iface), 10668 G_SIGNAL_RUN_LAST, 10669 G_STRUCT_OFFSET (SharedResourceIface, handle_lock), 10670 g_signal_accumulator_true_handled, 10671 NULL, 10672 g_cclosure_marshal_generic, 10673 G_TYPE_BOOLEAN, 10674 2, 10675 G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING); 10676 10677 /** 10678 * SharedResource::handle-unlock: 10679 * @object: A #SharedResource. 10680 * @invocation: A #GDBusMethodInvocation. 10681 * 10682 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-SharedResource.unlock">unlock()</link> D-Bus method. 10683 * 10684 * 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 shared_resource_complete_unlock() 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. 10685 * 10686 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 10687 */ 10688 g_signal_new ("handle-unlock", 10689 G_TYPE_FROM_INTERFACE (iface), 10690 G_SIGNAL_RUN_LAST, 10691 G_STRUCT_OFFSET (SharedResourceIface, handle_unlock), 10692 g_signal_accumulator_true_handled, 10693 NULL, 10694 g_cclosure_marshal_generic, 10695 G_TYPE_BOOLEAN, 10696 1, 10697 G_TYPE_DBUS_METHOD_INVOCATION); 10698 10699 /** 10700 * SharedResource::handle-is-locked: 10701 * @object: A #SharedResource. 10702 * @invocation: A #GDBusMethodInvocation. 10703 * 10704 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-SharedResource.isLocked">isLocked()</link> D-Bus method. 10705 * 10706 * 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 shared_resource_complete_is_locked() 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. 10707 * 10708 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 10709 */ 10710 g_signal_new ("handle-is-locked", 10711 G_TYPE_FROM_INTERFACE (iface), 10712 G_SIGNAL_RUN_LAST, 10713 G_STRUCT_OFFSET (SharedResourceIface, handle_is_locked), 10714 g_signal_accumulator_true_handled, 10715 NULL, 10716 g_cclosure_marshal_generic, 10717 G_TYPE_BOOLEAN, 10718 1, 10719 G_TYPE_DBUS_METHOD_INVOCATION); 10720 10721 /* GObject properties for D-Bus properties: */ 10722 /** 10723 * SharedResource:lock: 10724 * 10725 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-SharedResource.lock">"lock"</link>. 10726 * 10727 * 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. 10728 */ 10729 g_object_interface_install_property (iface, 10730 g_param_spec_boolean ("lock", "lock", "lock", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 10731 /** 10732 * SharedResource:name: 10733 * 10734 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-SharedResource.name">"name"</link>. 10735 * 10736 * 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. 10737 */ 10738 g_object_interface_install_property (iface, 10739 g_param_spec_string ("name", "name", "name", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 10740 } 10741 10742 /** 10743 * shared_resource_get_lock: (skip) 10744 * @object: A #SharedResource. 10745 * 10746 * Gets the value of the <link linkend="gdbus-property-org-openbmc-SharedResource.lock">"lock"</link> D-Bus property. 10747 * 10748 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 10749 * 10750 * Returns: The property value. 10751 */ 10752 gboolean 10753 shared_resource_get_lock (SharedResource *object) 10754 { 10755 return SHARED_RESOURCE_GET_IFACE (object)->get_lock (object); 10756 } 10757 10758 /** 10759 * shared_resource_set_lock: (skip) 10760 * @object: A #SharedResource. 10761 * @value: The value to set. 10762 * 10763 * Sets the <link linkend="gdbus-property-org-openbmc-SharedResource.lock">"lock"</link> D-Bus property to @value. 10764 * 10765 * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side. 10766 */ 10767 void 10768 shared_resource_set_lock (SharedResource *object, gboolean value) 10769 { 10770 g_object_set (G_OBJECT (object), "lock", value, NULL); 10771 } 10772 10773 /** 10774 * shared_resource_get_name: (skip) 10775 * @object: A #SharedResource. 10776 * 10777 * Gets the value of the <link linkend="gdbus-property-org-openbmc-SharedResource.name">"name"</link> D-Bus property. 10778 * 10779 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 10780 * 10781 * <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 shared_resource_dup_name() if on another thread.</warning> 10782 * 10783 * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object. 10784 */ 10785 const gchar * 10786 shared_resource_get_name (SharedResource *object) 10787 { 10788 return SHARED_RESOURCE_GET_IFACE (object)->get_name (object); 10789 } 10790 10791 /** 10792 * shared_resource_dup_name: (skip) 10793 * @object: A #SharedResource. 10794 * 10795 * Gets a copy of the <link linkend="gdbus-property-org-openbmc-SharedResource.name">"name"</link> D-Bus property. 10796 * 10797 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 10798 * 10799 * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value should be freed with g_free(). 10800 */ 10801 gchar * 10802 shared_resource_dup_name (SharedResource *object) 10803 { 10804 gchar *value; 10805 g_object_get (G_OBJECT (object), "name", &value, NULL); 10806 return value; 10807 } 10808 10809 /** 10810 * shared_resource_set_name: (skip) 10811 * @object: A #SharedResource. 10812 * @value: The value to set. 10813 * 10814 * Sets the <link linkend="gdbus-property-org-openbmc-SharedResource.name">"name"</link> D-Bus property to @value. 10815 * 10816 * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side. 10817 */ 10818 void 10819 shared_resource_set_name (SharedResource *object, const gchar *value) 10820 { 10821 g_object_set (G_OBJECT (object), "name", value, NULL); 10822 } 10823 10824 /** 10825 * shared_resource_call_lock: 10826 * @proxy: A #SharedResourceProxy. 10827 * @arg_name: Argument to pass with the method invocation. 10828 * @cancellable: (allow-none): A #GCancellable or %NULL. 10829 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 10830 * @user_data: User data to pass to @callback. 10831 * 10832 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-SharedResource.lock">lock()</link> D-Bus method on @proxy. 10833 * 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. 10834 * You can then call shared_resource_call_lock_finish() to get the result of the operation. 10835 * 10836 * See shared_resource_call_lock_sync() for the synchronous, blocking version of this method. 10837 */ 10838 void 10839 shared_resource_call_lock ( 10840 SharedResource *proxy, 10841 const gchar *arg_name, 10842 GCancellable *cancellable, 10843 GAsyncReadyCallback callback, 10844 gpointer user_data) 10845 { 10846 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 10847 "lock", 10848 g_variant_new ("(s)", 10849 arg_name), 10850 G_DBUS_CALL_FLAGS_NONE, 10851 -1, 10852 cancellable, 10853 callback, 10854 user_data); 10855 } 10856 10857 /** 10858 * shared_resource_call_lock_finish: 10859 * @proxy: A #SharedResourceProxy. 10860 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to shared_resource_call_lock(). 10861 * @error: Return location for error or %NULL. 10862 * 10863 * Finishes an operation started with shared_resource_call_lock(). 10864 * 10865 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 10866 */ 10867 gboolean 10868 shared_resource_call_lock_finish ( 10869 SharedResource *proxy, 10870 GAsyncResult *res, 10871 GError **error) 10872 { 10873 GVariant *_ret; 10874 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 10875 if (_ret == NULL) 10876 goto _out; 10877 g_variant_get (_ret, 10878 "()"); 10879 g_variant_unref (_ret); 10880 _out: 10881 return _ret != NULL; 10882 } 10883 10884 /** 10885 * shared_resource_call_lock_sync: 10886 * @proxy: A #SharedResourceProxy. 10887 * @arg_name: Argument to pass with the method invocation. 10888 * @cancellable: (allow-none): A #GCancellable or %NULL. 10889 * @error: Return location for error or %NULL. 10890 * 10891 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-SharedResource.lock">lock()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 10892 * 10893 * See shared_resource_call_lock() for the asynchronous version of this method. 10894 * 10895 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 10896 */ 10897 gboolean 10898 shared_resource_call_lock_sync ( 10899 SharedResource *proxy, 10900 const gchar *arg_name, 10901 GCancellable *cancellable, 10902 GError **error) 10903 { 10904 GVariant *_ret; 10905 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 10906 "lock", 10907 g_variant_new ("(s)", 10908 arg_name), 10909 G_DBUS_CALL_FLAGS_NONE, 10910 -1, 10911 cancellable, 10912 error); 10913 if (_ret == NULL) 10914 goto _out; 10915 g_variant_get (_ret, 10916 "()"); 10917 g_variant_unref (_ret); 10918 _out: 10919 return _ret != NULL; 10920 } 10921 10922 /** 10923 * shared_resource_call_unlock: 10924 * @proxy: A #SharedResourceProxy. 10925 * @cancellable: (allow-none): A #GCancellable or %NULL. 10926 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 10927 * @user_data: User data to pass to @callback. 10928 * 10929 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-SharedResource.unlock">unlock()</link> D-Bus method on @proxy. 10930 * 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. 10931 * You can then call shared_resource_call_unlock_finish() to get the result of the operation. 10932 * 10933 * See shared_resource_call_unlock_sync() for the synchronous, blocking version of this method. 10934 */ 10935 void 10936 shared_resource_call_unlock ( 10937 SharedResource *proxy, 10938 GCancellable *cancellable, 10939 GAsyncReadyCallback callback, 10940 gpointer user_data) 10941 { 10942 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 10943 "unlock", 10944 g_variant_new ("()"), 10945 G_DBUS_CALL_FLAGS_NONE, 10946 -1, 10947 cancellable, 10948 callback, 10949 user_data); 10950 } 10951 10952 /** 10953 * shared_resource_call_unlock_finish: 10954 * @proxy: A #SharedResourceProxy. 10955 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to shared_resource_call_unlock(). 10956 * @error: Return location for error or %NULL. 10957 * 10958 * Finishes an operation started with shared_resource_call_unlock(). 10959 * 10960 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 10961 */ 10962 gboolean 10963 shared_resource_call_unlock_finish ( 10964 SharedResource *proxy, 10965 GAsyncResult *res, 10966 GError **error) 10967 { 10968 GVariant *_ret; 10969 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 10970 if (_ret == NULL) 10971 goto _out; 10972 g_variant_get (_ret, 10973 "()"); 10974 g_variant_unref (_ret); 10975 _out: 10976 return _ret != NULL; 10977 } 10978 10979 /** 10980 * shared_resource_call_unlock_sync: 10981 * @proxy: A #SharedResourceProxy. 10982 * @cancellable: (allow-none): A #GCancellable or %NULL. 10983 * @error: Return location for error or %NULL. 10984 * 10985 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-SharedResource.unlock">unlock()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 10986 * 10987 * See shared_resource_call_unlock() for the asynchronous version of this method. 10988 * 10989 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 10990 */ 10991 gboolean 10992 shared_resource_call_unlock_sync ( 10993 SharedResource *proxy, 10994 GCancellable *cancellable, 10995 GError **error) 10996 { 10997 GVariant *_ret; 10998 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 10999 "unlock", 11000 g_variant_new ("()"), 11001 G_DBUS_CALL_FLAGS_NONE, 11002 -1, 11003 cancellable, 11004 error); 11005 if (_ret == NULL) 11006 goto _out; 11007 g_variant_get (_ret, 11008 "()"); 11009 g_variant_unref (_ret); 11010 _out: 11011 return _ret != NULL; 11012 } 11013 11014 /** 11015 * shared_resource_call_is_locked: 11016 * @proxy: A #SharedResourceProxy. 11017 * @cancellable: (allow-none): A #GCancellable or %NULL. 11018 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 11019 * @user_data: User data to pass to @callback. 11020 * 11021 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-SharedResource.isLocked">isLocked()</link> D-Bus method on @proxy. 11022 * 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. 11023 * You can then call shared_resource_call_is_locked_finish() to get the result of the operation. 11024 * 11025 * See shared_resource_call_is_locked_sync() for the synchronous, blocking version of this method. 11026 */ 11027 void 11028 shared_resource_call_is_locked ( 11029 SharedResource *proxy, 11030 GCancellable *cancellable, 11031 GAsyncReadyCallback callback, 11032 gpointer user_data) 11033 { 11034 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 11035 "isLocked", 11036 g_variant_new ("()"), 11037 G_DBUS_CALL_FLAGS_NONE, 11038 -1, 11039 cancellable, 11040 callback, 11041 user_data); 11042 } 11043 11044 /** 11045 * shared_resource_call_is_locked_finish: 11046 * @proxy: A #SharedResourceProxy. 11047 * @out_lock: (out): Return location for return parameter or %NULL to ignore. 11048 * @out_name: (out): Return location for return parameter or %NULL to ignore. 11049 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to shared_resource_call_is_locked(). 11050 * @error: Return location for error or %NULL. 11051 * 11052 * Finishes an operation started with shared_resource_call_is_locked(). 11053 * 11054 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 11055 */ 11056 gboolean 11057 shared_resource_call_is_locked_finish ( 11058 SharedResource *proxy, 11059 gboolean *out_lock, 11060 gchar **out_name, 11061 GAsyncResult *res, 11062 GError **error) 11063 { 11064 GVariant *_ret; 11065 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 11066 if (_ret == NULL) 11067 goto _out; 11068 g_variant_get (_ret, 11069 "(bs)", 11070 out_lock, 11071 out_name); 11072 g_variant_unref (_ret); 11073 _out: 11074 return _ret != NULL; 11075 } 11076 11077 /** 11078 * shared_resource_call_is_locked_sync: 11079 * @proxy: A #SharedResourceProxy. 11080 * @out_lock: (out): Return location for return parameter or %NULL to ignore. 11081 * @out_name: (out): Return location for return parameter or %NULL to ignore. 11082 * @cancellable: (allow-none): A #GCancellable or %NULL. 11083 * @error: Return location for error or %NULL. 11084 * 11085 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-SharedResource.isLocked">isLocked()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 11086 * 11087 * See shared_resource_call_is_locked() for the asynchronous version of this method. 11088 * 11089 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 11090 */ 11091 gboolean 11092 shared_resource_call_is_locked_sync ( 11093 SharedResource *proxy, 11094 gboolean *out_lock, 11095 gchar **out_name, 11096 GCancellable *cancellable, 11097 GError **error) 11098 { 11099 GVariant *_ret; 11100 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 11101 "isLocked", 11102 g_variant_new ("()"), 11103 G_DBUS_CALL_FLAGS_NONE, 11104 -1, 11105 cancellable, 11106 error); 11107 if (_ret == NULL) 11108 goto _out; 11109 g_variant_get (_ret, 11110 "(bs)", 11111 out_lock, 11112 out_name); 11113 g_variant_unref (_ret); 11114 _out: 11115 return _ret != NULL; 11116 } 11117 11118 /** 11119 * shared_resource_complete_lock: 11120 * @object: A #SharedResource. 11121 * @invocation: (transfer full): A #GDBusMethodInvocation. 11122 * 11123 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-SharedResource.lock">lock()</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. 11124 * 11125 * This method will free @invocation, you cannot use it afterwards. 11126 */ 11127 void 11128 shared_resource_complete_lock ( 11129 SharedResource *object, 11130 GDBusMethodInvocation *invocation) 11131 { 11132 g_dbus_method_invocation_return_value (invocation, 11133 g_variant_new ("()")); 11134 } 11135 11136 /** 11137 * shared_resource_complete_unlock: 11138 * @object: A #SharedResource. 11139 * @invocation: (transfer full): A #GDBusMethodInvocation. 11140 * 11141 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-SharedResource.unlock">unlock()</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. 11142 * 11143 * This method will free @invocation, you cannot use it afterwards. 11144 */ 11145 void 11146 shared_resource_complete_unlock ( 11147 SharedResource *object, 11148 GDBusMethodInvocation *invocation) 11149 { 11150 g_dbus_method_invocation_return_value (invocation, 11151 g_variant_new ("()")); 11152 } 11153 11154 /** 11155 * shared_resource_complete_is_locked: 11156 * @object: A #SharedResource. 11157 * @invocation: (transfer full): A #GDBusMethodInvocation. 11158 * @lock: Parameter to return. 11159 * @name: Parameter to return. 11160 * 11161 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-SharedResource.isLocked">isLocked()</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. 11162 * 11163 * This method will free @invocation, you cannot use it afterwards. 11164 */ 11165 void 11166 shared_resource_complete_is_locked ( 11167 SharedResource *object, 11168 GDBusMethodInvocation *invocation, 11169 gboolean lock, 11170 const gchar *name) 11171 { 11172 g_dbus_method_invocation_return_value (invocation, 11173 g_variant_new ("(bs)", 11174 lock, 11175 name)); 11176 } 11177 11178 /* ------------------------------------------------------------------------ */ 11179 11180 /** 11181 * SharedResourceProxy: 11182 * 11183 * The #SharedResourceProxy structure contains only private data and should only be accessed using the provided API. 11184 */ 11185 11186 /** 11187 * SharedResourceProxyClass: 11188 * @parent_class: The parent class. 11189 * 11190 * Class structure for #SharedResourceProxy. 11191 */ 11192 11193 struct _SharedResourceProxyPrivate 11194 { 11195 GData *qdata; 11196 }; 11197 11198 static void shared_resource_proxy_iface_init (SharedResourceIface *iface); 11199 11200 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 11201 G_DEFINE_TYPE_WITH_CODE (SharedResourceProxy, shared_resource_proxy, G_TYPE_DBUS_PROXY, 11202 G_ADD_PRIVATE (SharedResourceProxy) 11203 G_IMPLEMENT_INTERFACE (TYPE_SHARED_RESOURCE, shared_resource_proxy_iface_init)); 11204 11205 #else 11206 G_DEFINE_TYPE_WITH_CODE (SharedResourceProxy, shared_resource_proxy, G_TYPE_DBUS_PROXY, 11207 G_IMPLEMENT_INTERFACE (TYPE_SHARED_RESOURCE, shared_resource_proxy_iface_init)); 11208 11209 #endif 11210 static void 11211 shared_resource_proxy_finalize (GObject *object) 11212 { 11213 SharedResourceProxy *proxy = SHARED_RESOURCE_PROXY (object); 11214 g_datalist_clear (&proxy->priv->qdata); 11215 G_OBJECT_CLASS (shared_resource_proxy_parent_class)->finalize (object); 11216 } 11217 11218 static void 11219 shared_resource_proxy_get_property (GObject *object, 11220 guint prop_id, 11221 GValue *value, 11222 GParamSpec *pspec G_GNUC_UNUSED) 11223 { 11224 const _ExtendedGDBusPropertyInfo *info; 11225 GVariant *variant; 11226 g_assert (prop_id != 0 && prop_id - 1 < 2); 11227 info = _shared_resource_property_info_pointers[prop_id - 1]; 11228 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (object), info->parent_struct.name); 11229 if (info->use_gvariant) 11230 { 11231 g_value_set_variant (value, variant); 11232 } 11233 else 11234 { 11235 if (variant != NULL) 11236 g_dbus_gvariant_to_gvalue (variant, value); 11237 } 11238 if (variant != NULL) 11239 g_variant_unref (variant); 11240 } 11241 11242 static void 11243 shared_resource_proxy_set_property_cb (GDBusProxy *proxy, 11244 GAsyncResult *res, 11245 gpointer user_data) 11246 { 11247 const _ExtendedGDBusPropertyInfo *info = user_data; 11248 GError *error; 11249 GVariant *_ret; 11250 error = NULL; 11251 _ret = g_dbus_proxy_call_finish (proxy, res, &error); 11252 if (!_ret) 11253 { 11254 g_warning ("Error setting property '%s' on interface org.openbmc.SharedResource: %s (%s, %d)", 11255 info->parent_struct.name, 11256 error->message, g_quark_to_string (error->domain), error->code); 11257 g_error_free (error); 11258 } 11259 else 11260 { 11261 g_variant_unref (_ret); 11262 } 11263 } 11264 11265 static void 11266 shared_resource_proxy_set_property (GObject *object, 11267 guint prop_id, 11268 const GValue *value, 11269 GParamSpec *pspec G_GNUC_UNUSED) 11270 { 11271 const _ExtendedGDBusPropertyInfo *info; 11272 GVariant *variant; 11273 g_assert (prop_id != 0 && prop_id - 1 < 2); 11274 info = _shared_resource_property_info_pointers[prop_id - 1]; 11275 variant = g_dbus_gvalue_to_gvariant (value, G_VARIANT_TYPE (info->parent_struct.signature)); 11276 g_dbus_proxy_call (G_DBUS_PROXY (object), 11277 "org.freedesktop.DBus.Properties.Set", 11278 g_variant_new ("(ssv)", "org.openbmc.SharedResource", info->parent_struct.name, variant), 11279 G_DBUS_CALL_FLAGS_NONE, 11280 -1, 11281 NULL, (GAsyncReadyCallback) shared_resource_proxy_set_property_cb, (GDBusPropertyInfo *) &info->parent_struct); 11282 g_variant_unref (variant); 11283 } 11284 11285 static void 11286 shared_resource_proxy_g_signal (GDBusProxy *proxy, 11287 const gchar *sender_name G_GNUC_UNUSED, 11288 const gchar *signal_name, 11289 GVariant *parameters) 11290 { 11291 _ExtendedGDBusSignalInfo *info; 11292 GVariantIter iter; 11293 GVariant *child; 11294 GValue *paramv; 11295 guint num_params; 11296 guint n; 11297 guint signal_id; 11298 info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_shared_resource_interface_info.parent_struct, signal_name); 11299 if (info == NULL) 11300 return; 11301 num_params = g_variant_n_children (parameters); 11302 paramv = g_new0 (GValue, num_params + 1); 11303 g_value_init (¶mv[0], TYPE_SHARED_RESOURCE); 11304 g_value_set_object (¶mv[0], proxy); 11305 g_variant_iter_init (&iter, parameters); 11306 n = 1; 11307 while ((child = g_variant_iter_next_value (&iter)) != NULL) 11308 { 11309 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1]; 11310 if (arg_info->use_gvariant) 11311 { 11312 g_value_init (¶mv[n], G_TYPE_VARIANT); 11313 g_value_set_variant (¶mv[n], child); 11314 n++; 11315 } 11316 else 11317 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 11318 g_variant_unref (child); 11319 } 11320 signal_id = g_signal_lookup (info->signal_name, TYPE_SHARED_RESOURCE); 11321 g_signal_emitv (paramv, signal_id, 0, NULL); 11322 for (n = 0; n < num_params + 1; n++) 11323 g_value_unset (¶mv[n]); 11324 g_free (paramv); 11325 } 11326 11327 static void 11328 shared_resource_proxy_g_properties_changed (GDBusProxy *_proxy, 11329 GVariant *changed_properties, 11330 const gchar *const *invalidated_properties) 11331 { 11332 SharedResourceProxy *proxy = SHARED_RESOURCE_PROXY (_proxy); 11333 guint n; 11334 const gchar *key; 11335 GVariantIter *iter; 11336 _ExtendedGDBusPropertyInfo *info; 11337 g_variant_get (changed_properties, "a{sv}", &iter); 11338 while (g_variant_iter_next (iter, "{&sv}", &key, NULL)) 11339 { 11340 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_shared_resource_interface_info.parent_struct, key); 11341 g_datalist_remove_data (&proxy->priv->qdata, key); 11342 if (info != NULL) 11343 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 11344 } 11345 g_variant_iter_free (iter); 11346 for (n = 0; invalidated_properties[n] != NULL; n++) 11347 { 11348 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_shared_resource_interface_info.parent_struct, invalidated_properties[n]); 11349 g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]); 11350 if (info != NULL) 11351 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 11352 } 11353 } 11354 11355 static gboolean 11356 shared_resource_proxy_get_lock (SharedResource *object) 11357 { 11358 SharedResourceProxy *proxy = SHARED_RESOURCE_PROXY (object); 11359 GVariant *variant; 11360 gboolean value = 0; 11361 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "lock"); 11362 if (variant != NULL) 11363 { 11364 value = g_variant_get_boolean (variant); 11365 g_variant_unref (variant); 11366 } 11367 return value; 11368 } 11369 11370 static const gchar * 11371 shared_resource_proxy_get_name (SharedResource *object) 11372 { 11373 SharedResourceProxy *proxy = SHARED_RESOURCE_PROXY (object); 11374 GVariant *variant; 11375 const gchar *value = NULL; 11376 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "name"); 11377 if (variant != NULL) 11378 { 11379 value = g_variant_get_string (variant, NULL); 11380 g_variant_unref (variant); 11381 } 11382 return value; 11383 } 11384 11385 static void 11386 shared_resource_proxy_init (SharedResourceProxy *proxy) 11387 { 11388 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 11389 proxy->priv = shared_resource_proxy_get_instance_private (proxy); 11390 #else 11391 proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, TYPE_SHARED_RESOURCE_PROXY, SharedResourceProxyPrivate); 11392 #endif 11393 11394 g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), shared_resource_interface_info ()); 11395 } 11396 11397 static void 11398 shared_resource_proxy_class_init (SharedResourceProxyClass *klass) 11399 { 11400 GObjectClass *gobject_class; 11401 GDBusProxyClass *proxy_class; 11402 11403 gobject_class = G_OBJECT_CLASS (klass); 11404 gobject_class->finalize = shared_resource_proxy_finalize; 11405 gobject_class->get_property = shared_resource_proxy_get_property; 11406 gobject_class->set_property = shared_resource_proxy_set_property; 11407 11408 proxy_class = G_DBUS_PROXY_CLASS (klass); 11409 proxy_class->g_signal = shared_resource_proxy_g_signal; 11410 proxy_class->g_properties_changed = shared_resource_proxy_g_properties_changed; 11411 11412 shared_resource_override_properties (gobject_class, 1); 11413 11414 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 11415 g_type_class_add_private (klass, sizeof (SharedResourceProxyPrivate)); 11416 #endif 11417 } 11418 11419 static void 11420 shared_resource_proxy_iface_init (SharedResourceIface *iface) 11421 { 11422 iface->get_lock = shared_resource_proxy_get_lock; 11423 iface->get_name = shared_resource_proxy_get_name; 11424 } 11425 11426 /** 11427 * shared_resource_proxy_new: 11428 * @connection: A #GDBusConnection. 11429 * @flags: Flags from the #GDBusProxyFlags enumeration. 11430 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 11431 * @object_path: An object path. 11432 * @cancellable: (allow-none): A #GCancellable or %NULL. 11433 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 11434 * @user_data: User data to pass to @callback. 11435 * 11436 * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SharedResource.top_of_page">org.openbmc.SharedResource</link>. See g_dbus_proxy_new() for more details. 11437 * 11438 * 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. 11439 * You can then call shared_resource_proxy_new_finish() to get the result of the operation. 11440 * 11441 * See shared_resource_proxy_new_sync() for the synchronous, blocking version of this constructor. 11442 */ 11443 void 11444 shared_resource_proxy_new ( 11445 GDBusConnection *connection, 11446 GDBusProxyFlags flags, 11447 const gchar *name, 11448 const gchar *object_path, 11449 GCancellable *cancellable, 11450 GAsyncReadyCallback callback, 11451 gpointer user_data) 11452 { 11453 g_async_initable_new_async (TYPE_SHARED_RESOURCE_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.SharedResource", NULL); 11454 } 11455 11456 /** 11457 * shared_resource_proxy_new_finish: 11458 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to shared_resource_proxy_new(). 11459 * @error: Return location for error or %NULL 11460 * 11461 * Finishes an operation started with shared_resource_proxy_new(). 11462 * 11463 * Returns: (transfer full) (type SharedResourceProxy): The constructed proxy object or %NULL if @error is set. 11464 */ 11465 SharedResource * 11466 shared_resource_proxy_new_finish ( 11467 GAsyncResult *res, 11468 GError **error) 11469 { 11470 GObject *ret; 11471 GObject *source_object; 11472 source_object = g_async_result_get_source_object (res); 11473 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 11474 g_object_unref (source_object); 11475 if (ret != NULL) 11476 return SHARED_RESOURCE (ret); 11477 else 11478 return NULL; 11479 } 11480 11481 /** 11482 * shared_resource_proxy_new_sync: 11483 * @connection: A #GDBusConnection. 11484 * @flags: Flags from the #GDBusProxyFlags enumeration. 11485 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 11486 * @object_path: An object path. 11487 * @cancellable: (allow-none): A #GCancellable or %NULL. 11488 * @error: Return location for error or %NULL 11489 * 11490 * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SharedResource.top_of_page">org.openbmc.SharedResource</link>. See g_dbus_proxy_new_sync() for more details. 11491 * 11492 * The calling thread is blocked until a reply is received. 11493 * 11494 * See shared_resource_proxy_new() for the asynchronous version of this constructor. 11495 * 11496 * Returns: (transfer full) (type SharedResourceProxy): The constructed proxy object or %NULL if @error is set. 11497 */ 11498 SharedResource * 11499 shared_resource_proxy_new_sync ( 11500 GDBusConnection *connection, 11501 GDBusProxyFlags flags, 11502 const gchar *name, 11503 const gchar *object_path, 11504 GCancellable *cancellable, 11505 GError **error) 11506 { 11507 GInitable *ret; 11508 ret = g_initable_new (TYPE_SHARED_RESOURCE_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.SharedResource", NULL); 11509 if (ret != NULL) 11510 return SHARED_RESOURCE (ret); 11511 else 11512 return NULL; 11513 } 11514 11515 11516 /** 11517 * shared_resource_proxy_new_for_bus: 11518 * @bus_type: A #GBusType. 11519 * @flags: Flags from the #GDBusProxyFlags enumeration. 11520 * @name: A bus name (well-known or unique). 11521 * @object_path: An object path. 11522 * @cancellable: (allow-none): A #GCancellable or %NULL. 11523 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 11524 * @user_data: User data to pass to @callback. 11525 * 11526 * Like shared_resource_proxy_new() but takes a #GBusType instead of a #GDBusConnection. 11527 * 11528 * 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. 11529 * You can then call shared_resource_proxy_new_for_bus_finish() to get the result of the operation. 11530 * 11531 * See shared_resource_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor. 11532 */ 11533 void 11534 shared_resource_proxy_new_for_bus ( 11535 GBusType bus_type, 11536 GDBusProxyFlags flags, 11537 const gchar *name, 11538 const gchar *object_path, 11539 GCancellable *cancellable, 11540 GAsyncReadyCallback callback, 11541 gpointer user_data) 11542 { 11543 g_async_initable_new_async (TYPE_SHARED_RESOURCE_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.SharedResource", NULL); 11544 } 11545 11546 /** 11547 * shared_resource_proxy_new_for_bus_finish: 11548 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to shared_resource_proxy_new_for_bus(). 11549 * @error: Return location for error or %NULL 11550 * 11551 * Finishes an operation started with shared_resource_proxy_new_for_bus(). 11552 * 11553 * Returns: (transfer full) (type SharedResourceProxy): The constructed proxy object or %NULL if @error is set. 11554 */ 11555 SharedResource * 11556 shared_resource_proxy_new_for_bus_finish ( 11557 GAsyncResult *res, 11558 GError **error) 11559 { 11560 GObject *ret; 11561 GObject *source_object; 11562 source_object = g_async_result_get_source_object (res); 11563 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 11564 g_object_unref (source_object); 11565 if (ret != NULL) 11566 return SHARED_RESOURCE (ret); 11567 else 11568 return NULL; 11569 } 11570 11571 /** 11572 * shared_resource_proxy_new_for_bus_sync: 11573 * @bus_type: A #GBusType. 11574 * @flags: Flags from the #GDBusProxyFlags enumeration. 11575 * @name: A bus name (well-known or unique). 11576 * @object_path: An object path. 11577 * @cancellable: (allow-none): A #GCancellable or %NULL. 11578 * @error: Return location for error or %NULL 11579 * 11580 * Like shared_resource_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection. 11581 * 11582 * The calling thread is blocked until a reply is received. 11583 * 11584 * See shared_resource_proxy_new_for_bus() for the asynchronous version of this constructor. 11585 * 11586 * Returns: (transfer full) (type SharedResourceProxy): The constructed proxy object or %NULL if @error is set. 11587 */ 11588 SharedResource * 11589 shared_resource_proxy_new_for_bus_sync ( 11590 GBusType bus_type, 11591 GDBusProxyFlags flags, 11592 const gchar *name, 11593 const gchar *object_path, 11594 GCancellable *cancellable, 11595 GError **error) 11596 { 11597 GInitable *ret; 11598 ret = g_initable_new (TYPE_SHARED_RESOURCE_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.SharedResource", NULL); 11599 if (ret != NULL) 11600 return SHARED_RESOURCE (ret); 11601 else 11602 return NULL; 11603 } 11604 11605 11606 /* ------------------------------------------------------------------------ */ 11607 11608 /** 11609 * SharedResourceSkeleton: 11610 * 11611 * The #SharedResourceSkeleton structure contains only private data and should only be accessed using the provided API. 11612 */ 11613 11614 /** 11615 * SharedResourceSkeletonClass: 11616 * @parent_class: The parent class. 11617 * 11618 * Class structure for #SharedResourceSkeleton. 11619 */ 11620 11621 struct _SharedResourceSkeletonPrivate 11622 { 11623 GValue *properties; 11624 GList *changed_properties; 11625 GSource *changed_properties_idle_source; 11626 GMainContext *context; 11627 GMutex lock; 11628 }; 11629 11630 static void 11631 _shared_resource_skeleton_handle_method_call ( 11632 GDBusConnection *connection G_GNUC_UNUSED, 11633 const gchar *sender G_GNUC_UNUSED, 11634 const gchar *object_path G_GNUC_UNUSED, 11635 const gchar *interface_name, 11636 const gchar *method_name, 11637 GVariant *parameters, 11638 GDBusMethodInvocation *invocation, 11639 gpointer user_data) 11640 { 11641 SharedResourceSkeleton *skeleton = SHARED_RESOURCE_SKELETON (user_data); 11642 _ExtendedGDBusMethodInfo *info; 11643 GVariantIter iter; 11644 GVariant *child; 11645 GValue *paramv; 11646 guint num_params; 11647 guint num_extra; 11648 guint n; 11649 guint signal_id; 11650 GValue return_value = G_VALUE_INIT; 11651 info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation); 11652 g_assert (info != NULL); 11653 num_params = g_variant_n_children (parameters); 11654 num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra); 11655 n = 0; 11656 g_value_init (¶mv[n], TYPE_SHARED_RESOURCE); 11657 g_value_set_object (¶mv[n++], skeleton); 11658 g_value_init (¶mv[n], G_TYPE_DBUS_METHOD_INVOCATION); 11659 g_value_set_object (¶mv[n++], invocation); 11660 if (info->pass_fdlist) 11661 { 11662 #ifdef G_OS_UNIX 11663 g_value_init (¶mv[n], G_TYPE_UNIX_FD_LIST); 11664 g_value_set_object (¶mv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation))); 11665 #else 11666 g_assert_not_reached (); 11667 #endif 11668 } 11669 g_variant_iter_init (&iter, parameters); 11670 while ((child = g_variant_iter_next_value (&iter)) != NULL) 11671 { 11672 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra]; 11673 if (arg_info->use_gvariant) 11674 { 11675 g_value_init (¶mv[n], G_TYPE_VARIANT); 11676 g_value_set_variant (¶mv[n], child); 11677 n++; 11678 } 11679 else 11680 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 11681 g_variant_unref (child); 11682 } 11683 signal_id = g_signal_lookup (info->signal_name, TYPE_SHARED_RESOURCE); 11684 g_value_init (&return_value, G_TYPE_BOOLEAN); 11685 g_signal_emitv (paramv, signal_id, 0, &return_value); 11686 if (!g_value_get_boolean (&return_value)) 11687 g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name); 11688 g_value_unset (&return_value); 11689 for (n = 0; n < num_params + num_extra; n++) 11690 g_value_unset (¶mv[n]); 11691 g_free (paramv); 11692 } 11693 11694 static GVariant * 11695 _shared_resource_skeleton_handle_get_property ( 11696 GDBusConnection *connection G_GNUC_UNUSED, 11697 const gchar *sender G_GNUC_UNUSED, 11698 const gchar *object_path G_GNUC_UNUSED, 11699 const gchar *interface_name G_GNUC_UNUSED, 11700 const gchar *property_name, 11701 GError **error, 11702 gpointer user_data) 11703 { 11704 SharedResourceSkeleton *skeleton = SHARED_RESOURCE_SKELETON (user_data); 11705 GValue value = G_VALUE_INIT; 11706 GParamSpec *pspec; 11707 _ExtendedGDBusPropertyInfo *info; 11708 GVariant *ret; 11709 ret = NULL; 11710 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_shared_resource_interface_info.parent_struct, property_name); 11711 g_assert (info != NULL); 11712 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 11713 if (pspec == NULL) 11714 { 11715 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 11716 } 11717 else 11718 { 11719 g_value_init (&value, pspec->value_type); 11720 g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value); 11721 ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature)); 11722 g_value_unset (&value); 11723 } 11724 return ret; 11725 } 11726 11727 static gboolean 11728 _shared_resource_skeleton_handle_set_property ( 11729 GDBusConnection *connection G_GNUC_UNUSED, 11730 const gchar *sender G_GNUC_UNUSED, 11731 const gchar *object_path G_GNUC_UNUSED, 11732 const gchar *interface_name G_GNUC_UNUSED, 11733 const gchar *property_name, 11734 GVariant *variant, 11735 GError **error, 11736 gpointer user_data) 11737 { 11738 SharedResourceSkeleton *skeleton = SHARED_RESOURCE_SKELETON (user_data); 11739 GValue value = G_VALUE_INIT; 11740 GParamSpec *pspec; 11741 _ExtendedGDBusPropertyInfo *info; 11742 gboolean ret; 11743 ret = FALSE; 11744 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_shared_resource_interface_info.parent_struct, property_name); 11745 g_assert (info != NULL); 11746 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 11747 if (pspec == NULL) 11748 { 11749 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 11750 } 11751 else 11752 { 11753 if (info->use_gvariant) 11754 g_value_set_variant (&value, variant); 11755 else 11756 g_dbus_gvariant_to_gvalue (variant, &value); 11757 g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value); 11758 g_value_unset (&value); 11759 ret = TRUE; 11760 } 11761 return ret; 11762 } 11763 11764 static const GDBusInterfaceVTable _shared_resource_skeleton_vtable = 11765 { 11766 _shared_resource_skeleton_handle_method_call, 11767 _shared_resource_skeleton_handle_get_property, 11768 _shared_resource_skeleton_handle_set_property, 11769 {NULL} 11770 }; 11771 11772 static GDBusInterfaceInfo * 11773 shared_resource_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 11774 { 11775 return shared_resource_interface_info (); 11776 } 11777 11778 static GDBusInterfaceVTable * 11779 shared_resource_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 11780 { 11781 return (GDBusInterfaceVTable *) &_shared_resource_skeleton_vtable; 11782 } 11783 11784 static GVariant * 11785 shared_resource_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton) 11786 { 11787 SharedResourceSkeleton *skeleton = SHARED_RESOURCE_SKELETON (_skeleton); 11788 11789 GVariantBuilder builder; 11790 guint n; 11791 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 11792 if (_shared_resource_interface_info.parent_struct.properties == NULL) 11793 goto out; 11794 for (n = 0; _shared_resource_interface_info.parent_struct.properties[n] != NULL; n++) 11795 { 11796 GDBusPropertyInfo *info = _shared_resource_interface_info.parent_struct.properties[n]; 11797 if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE) 11798 { 11799 GVariant *value; 11800 value = _shared_resource_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.SharedResource", info->name, NULL, skeleton); 11801 if (value != NULL) 11802 { 11803 g_variant_take_ref (value); 11804 g_variant_builder_add (&builder, "{sv}", info->name, value); 11805 g_variant_unref (value); 11806 } 11807 } 11808 } 11809 out: 11810 return g_variant_builder_end (&builder); 11811 } 11812 11813 static gboolean _shared_resource_emit_changed (gpointer user_data); 11814 11815 static void 11816 shared_resource_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton) 11817 { 11818 SharedResourceSkeleton *skeleton = SHARED_RESOURCE_SKELETON (_skeleton); 11819 gboolean emit_changed = FALSE; 11820 11821 g_mutex_lock (&skeleton->priv->lock); 11822 if (skeleton->priv->changed_properties_idle_source != NULL) 11823 { 11824 g_source_destroy (skeleton->priv->changed_properties_idle_source); 11825 skeleton->priv->changed_properties_idle_source = NULL; 11826 emit_changed = TRUE; 11827 } 11828 g_mutex_unlock (&skeleton->priv->lock); 11829 11830 if (emit_changed) 11831 _shared_resource_emit_changed (skeleton); 11832 } 11833 11834 static void shared_resource_skeleton_iface_init (SharedResourceIface *iface); 11835 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 11836 G_DEFINE_TYPE_WITH_CODE (SharedResourceSkeleton, shared_resource_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 11837 G_ADD_PRIVATE (SharedResourceSkeleton) 11838 G_IMPLEMENT_INTERFACE (TYPE_SHARED_RESOURCE, shared_resource_skeleton_iface_init)); 11839 11840 #else 11841 G_DEFINE_TYPE_WITH_CODE (SharedResourceSkeleton, shared_resource_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 11842 G_IMPLEMENT_INTERFACE (TYPE_SHARED_RESOURCE, shared_resource_skeleton_iface_init)); 11843 11844 #endif 11845 static void 11846 shared_resource_skeleton_finalize (GObject *object) 11847 { 11848 SharedResourceSkeleton *skeleton = SHARED_RESOURCE_SKELETON (object); 11849 guint n; 11850 for (n = 0; n < 2; n++) 11851 g_value_unset (&skeleton->priv->properties[n]); 11852 g_free (skeleton->priv->properties); 11853 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 11854 if (skeleton->priv->changed_properties_idle_source != NULL) 11855 g_source_destroy (skeleton->priv->changed_properties_idle_source); 11856 g_main_context_unref (skeleton->priv->context); 11857 g_mutex_clear (&skeleton->priv->lock); 11858 G_OBJECT_CLASS (shared_resource_skeleton_parent_class)->finalize (object); 11859 } 11860 11861 static void 11862 shared_resource_skeleton_get_property (GObject *object, 11863 guint prop_id, 11864 GValue *value, 11865 GParamSpec *pspec G_GNUC_UNUSED) 11866 { 11867 SharedResourceSkeleton *skeleton = SHARED_RESOURCE_SKELETON (object); 11868 g_assert (prop_id != 0 && prop_id - 1 < 2); 11869 g_mutex_lock (&skeleton->priv->lock); 11870 g_value_copy (&skeleton->priv->properties[prop_id - 1], value); 11871 g_mutex_unlock (&skeleton->priv->lock); 11872 } 11873 11874 static gboolean 11875 _shared_resource_emit_changed (gpointer user_data) 11876 { 11877 SharedResourceSkeleton *skeleton = SHARED_RESOURCE_SKELETON (user_data); 11878 GList *l; 11879 GVariantBuilder builder; 11880 GVariantBuilder invalidated_builder; 11881 guint num_changes; 11882 11883 g_mutex_lock (&skeleton->priv->lock); 11884 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 11885 g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as")); 11886 for (l = skeleton->priv->changed_properties, num_changes = 0; l != NULL; l = l->next) 11887 { 11888 ChangedProperty *cp = l->data; 11889 GVariant *variant; 11890 const GValue *cur_value; 11891 11892 cur_value = &skeleton->priv->properties[cp->prop_id - 1]; 11893 if (!_g_value_equal (cur_value, &cp->orig_value)) 11894 { 11895 variant = g_dbus_gvalue_to_gvariant (cur_value, G_VARIANT_TYPE (cp->info->parent_struct.signature)); 11896 g_variant_builder_add (&builder, "{sv}", cp->info->parent_struct.name, variant); 11897 g_variant_unref (variant); 11898 num_changes++; 11899 } 11900 } 11901 if (num_changes > 0) 11902 { 11903 GList *connections, *ll; 11904 GVariant *signal_variant; 11905 signal_variant = g_variant_ref_sink (g_variant_new ("(sa{sv}as)", "org.openbmc.SharedResource", 11906 &builder, &invalidated_builder)); 11907 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 11908 for (ll = connections; ll != NULL; ll = ll->next) 11909 { 11910 GDBusConnection *connection = ll->data; 11911 11912 g_dbus_connection_emit_signal (connection, 11913 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), 11914 "org.freedesktop.DBus.Properties", 11915 "PropertiesChanged", 11916 signal_variant, 11917 NULL); 11918 } 11919 g_variant_unref (signal_variant); 11920 g_list_free_full (connections, g_object_unref); 11921 } 11922 else 11923 { 11924 g_variant_builder_clear (&builder); 11925 g_variant_builder_clear (&invalidated_builder); 11926 } 11927 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 11928 skeleton->priv->changed_properties = NULL; 11929 skeleton->priv->changed_properties_idle_source = NULL; 11930 g_mutex_unlock (&skeleton->priv->lock); 11931 return FALSE; 11932 } 11933 11934 static void 11935 _shared_resource_schedule_emit_changed (SharedResourceSkeleton *skeleton, const _ExtendedGDBusPropertyInfo *info, guint prop_id, const GValue *orig_value) 11936 { 11937 ChangedProperty *cp; 11938 GList *l; 11939 cp = NULL; 11940 for (l = skeleton->priv->changed_properties; l != NULL; l = l->next) 11941 { 11942 ChangedProperty *i_cp = l->data; 11943 if (i_cp->info == info) 11944 { 11945 cp = i_cp; 11946 break; 11947 } 11948 } 11949 if (cp == NULL) 11950 { 11951 cp = g_new0 (ChangedProperty, 1); 11952 cp->prop_id = prop_id; 11953 cp->info = info; 11954 skeleton->priv->changed_properties = g_list_prepend (skeleton->priv->changed_properties, cp); 11955 g_value_init (&cp->orig_value, G_VALUE_TYPE (orig_value)); 11956 g_value_copy (orig_value, &cp->orig_value); 11957 } 11958 } 11959 11960 static void 11961 shared_resource_skeleton_notify (GObject *object, 11962 GParamSpec *pspec G_GNUC_UNUSED) 11963 { 11964 SharedResourceSkeleton *skeleton = SHARED_RESOURCE_SKELETON (object); 11965 g_mutex_lock (&skeleton->priv->lock); 11966 if (skeleton->priv->changed_properties != NULL && 11967 skeleton->priv->changed_properties_idle_source == NULL) 11968 { 11969 skeleton->priv->changed_properties_idle_source = g_idle_source_new (); 11970 g_source_set_priority (skeleton->priv->changed_properties_idle_source, G_PRIORITY_DEFAULT); 11971 g_source_set_callback (skeleton->priv->changed_properties_idle_source, _shared_resource_emit_changed, g_object_ref (skeleton), (GDestroyNotify) g_object_unref); 11972 g_source_set_name (skeleton->priv->changed_properties_idle_source, "[generated] _shared_resource_emit_changed"); 11973 g_source_attach (skeleton->priv->changed_properties_idle_source, skeleton->priv->context); 11974 g_source_unref (skeleton->priv->changed_properties_idle_source); 11975 } 11976 g_mutex_unlock (&skeleton->priv->lock); 11977 } 11978 11979 static void 11980 shared_resource_skeleton_set_property (GObject *object, 11981 guint prop_id, 11982 const GValue *value, 11983 GParamSpec *pspec) 11984 { 11985 SharedResourceSkeleton *skeleton = SHARED_RESOURCE_SKELETON (object); 11986 g_assert (prop_id != 0 && prop_id - 1 < 2); 11987 g_mutex_lock (&skeleton->priv->lock); 11988 g_object_freeze_notify (object); 11989 if (!_g_value_equal (value, &skeleton->priv->properties[prop_id - 1])) 11990 { 11991 if (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)) != NULL) 11992 _shared_resource_schedule_emit_changed (skeleton, _shared_resource_property_info_pointers[prop_id - 1], prop_id, &skeleton->priv->properties[prop_id - 1]); 11993 g_value_copy (value, &skeleton->priv->properties[prop_id - 1]); 11994 g_object_notify_by_pspec (object, pspec); 11995 } 11996 g_mutex_unlock (&skeleton->priv->lock); 11997 g_object_thaw_notify (object); 11998 } 11999 12000 static void 12001 shared_resource_skeleton_init (SharedResourceSkeleton *skeleton) 12002 { 12003 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 12004 skeleton->priv = shared_resource_skeleton_get_instance_private (skeleton); 12005 #else 12006 skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, TYPE_SHARED_RESOURCE_SKELETON, SharedResourceSkeletonPrivate); 12007 #endif 12008 12009 g_mutex_init (&skeleton->priv->lock); 12010 skeleton->priv->context = g_main_context_ref_thread_default (); 12011 skeleton->priv->properties = g_new0 (GValue, 2); 12012 g_value_init (&skeleton->priv->properties[0], G_TYPE_BOOLEAN); 12013 g_value_init (&skeleton->priv->properties[1], G_TYPE_STRING); 12014 } 12015 12016 static gboolean 12017 shared_resource_skeleton_get_lock (SharedResource *object) 12018 { 12019 SharedResourceSkeleton *skeleton = SHARED_RESOURCE_SKELETON (object); 12020 gboolean value; 12021 g_mutex_lock (&skeleton->priv->lock); 12022 value = g_value_get_boolean (&(skeleton->priv->properties[0])); 12023 g_mutex_unlock (&skeleton->priv->lock); 12024 return value; 12025 } 12026 12027 static const gchar * 12028 shared_resource_skeleton_get_name (SharedResource *object) 12029 { 12030 SharedResourceSkeleton *skeleton = SHARED_RESOURCE_SKELETON (object); 12031 const gchar *value; 12032 g_mutex_lock (&skeleton->priv->lock); 12033 value = g_value_get_string (&(skeleton->priv->properties[1])); 12034 g_mutex_unlock (&skeleton->priv->lock); 12035 return value; 12036 } 12037 12038 static void 12039 shared_resource_skeleton_class_init (SharedResourceSkeletonClass *klass) 12040 { 12041 GObjectClass *gobject_class; 12042 GDBusInterfaceSkeletonClass *skeleton_class; 12043 12044 gobject_class = G_OBJECT_CLASS (klass); 12045 gobject_class->finalize = shared_resource_skeleton_finalize; 12046 gobject_class->get_property = shared_resource_skeleton_get_property; 12047 gobject_class->set_property = shared_resource_skeleton_set_property; 12048 gobject_class->notify = shared_resource_skeleton_notify; 12049 12050 12051 shared_resource_override_properties (gobject_class, 1); 12052 12053 skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass); 12054 skeleton_class->get_info = shared_resource_skeleton_dbus_interface_get_info; 12055 skeleton_class->get_properties = shared_resource_skeleton_dbus_interface_get_properties; 12056 skeleton_class->flush = shared_resource_skeleton_dbus_interface_flush; 12057 skeleton_class->get_vtable = shared_resource_skeleton_dbus_interface_get_vtable; 12058 12059 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 12060 g_type_class_add_private (klass, sizeof (SharedResourceSkeletonPrivate)); 12061 #endif 12062 } 12063 12064 static void 12065 shared_resource_skeleton_iface_init (SharedResourceIface *iface) 12066 { 12067 iface->get_lock = shared_resource_skeleton_get_lock; 12068 iface->get_name = shared_resource_skeleton_get_name; 12069 } 12070 12071 /** 12072 * shared_resource_skeleton_new: 12073 * 12074 * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SharedResource.top_of_page">org.openbmc.SharedResource</link>. 12075 * 12076 * Returns: (transfer full) (type SharedResourceSkeleton): The skeleton object. 12077 */ 12078 SharedResource * 12079 shared_resource_skeleton_new (void) 12080 { 12081 return SHARED_RESOURCE (g_object_new (TYPE_SHARED_RESOURCE_SKELETON, NULL)); 12082 } 12083 12084 /* ------------------------------------------------------------------------ 12085 * Code for interface org.openbmc.Control 12086 * ------------------------------------------------------------------------ 12087 */ 12088 12089 /** 12090 * SECTION:Control 12091 * @title: Control 12092 * @short_description: Generated C code for the org.openbmc.Control D-Bus interface 12093 * 12094 * This section contains code for working with the <link linkend="gdbus-interface-org-openbmc-Control.top_of_page">org.openbmc.Control</link> D-Bus interface in C. 12095 */ 12096 12097 /* ---- Introspection data for org.openbmc.Control ---- */ 12098 12099 static const _ExtendedGDBusMethodInfo _control_method_info_init = 12100 { 12101 { 12102 -1, 12103 (gchar *) "init", 12104 NULL, 12105 NULL, 12106 NULL 12107 }, 12108 "handle-init", 12109 FALSE 12110 }; 12111 12112 static const _ExtendedGDBusMethodInfo * const _control_method_info_pointers[] = 12113 { 12114 &_control_method_info_init, 12115 NULL 12116 }; 12117 12118 static const _ExtendedGDBusArgInfo _control_signal_info_heartbeat_ARG_bus_name = 12119 { 12120 { 12121 -1, 12122 (gchar *) "bus_name", 12123 (gchar *) "s", 12124 NULL 12125 }, 12126 FALSE 12127 }; 12128 12129 static const _ExtendedGDBusArgInfo * const _control_signal_info_heartbeat_ARG_pointers[] = 12130 { 12131 &_control_signal_info_heartbeat_ARG_bus_name, 12132 NULL 12133 }; 12134 12135 static const _ExtendedGDBusSignalInfo _control_signal_info_heartbeat = 12136 { 12137 { 12138 -1, 12139 (gchar *) "Heartbeat", 12140 (GDBusArgInfo **) &_control_signal_info_heartbeat_ARG_pointers, 12141 NULL 12142 }, 12143 "heartbeat" 12144 }; 12145 12146 static const _ExtendedGDBusArgInfo _control_signal_info_goto_system_state_ARG_state_name = 12147 { 12148 { 12149 -1, 12150 (gchar *) "state_name", 12151 (gchar *) "s", 12152 NULL 12153 }, 12154 FALSE 12155 }; 12156 12157 static const _ExtendedGDBusArgInfo * const _control_signal_info_goto_system_state_ARG_pointers[] = 12158 { 12159 &_control_signal_info_goto_system_state_ARG_state_name, 12160 NULL 12161 }; 12162 12163 static const _ExtendedGDBusSignalInfo _control_signal_info_goto_system_state = 12164 { 12165 { 12166 -1, 12167 (gchar *) "GotoSystemState", 12168 (GDBusArgInfo **) &_control_signal_info_goto_system_state_ARG_pointers, 12169 NULL 12170 }, 12171 "goto-system-state" 12172 }; 12173 12174 static const _ExtendedGDBusSignalInfo _control_signal_info_started = 12175 { 12176 { 12177 -1, 12178 (gchar *) "Started", 12179 NULL, 12180 NULL 12181 }, 12182 "started" 12183 }; 12184 12185 static const _ExtendedGDBusSignalInfo * const _control_signal_info_pointers[] = 12186 { 12187 &_control_signal_info_heartbeat, 12188 &_control_signal_info_goto_system_state, 12189 &_control_signal_info_started, 12190 NULL 12191 }; 12192 12193 static const _ExtendedGDBusPropertyInfo _control_property_info_poll_interval = 12194 { 12195 { 12196 -1, 12197 (gchar *) "poll_interval", 12198 (gchar *) "i", 12199 G_DBUS_PROPERTY_INFO_FLAGS_READABLE | G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE, 12200 NULL 12201 }, 12202 "poll-interval", 12203 FALSE 12204 }; 12205 12206 static const _ExtendedGDBusPropertyInfo _control_property_info_heatbeat = 12207 { 12208 { 12209 -1, 12210 (gchar *) "heatbeat", 12211 (gchar *) "i", 12212 G_DBUS_PROPERTY_INFO_FLAGS_READABLE, 12213 NULL 12214 }, 12215 "heatbeat", 12216 FALSE 12217 }; 12218 12219 static const _ExtendedGDBusPropertyInfo * const _control_property_info_pointers[] = 12220 { 12221 &_control_property_info_poll_interval, 12222 &_control_property_info_heatbeat, 12223 NULL 12224 }; 12225 12226 static const _ExtendedGDBusInterfaceInfo _control_interface_info = 12227 { 12228 { 12229 -1, 12230 (gchar *) "org.openbmc.Control", 12231 (GDBusMethodInfo **) &_control_method_info_pointers, 12232 (GDBusSignalInfo **) &_control_signal_info_pointers, 12233 (GDBusPropertyInfo **) &_control_property_info_pointers, 12234 NULL 12235 }, 12236 "control", 12237 }; 12238 12239 12240 /** 12241 * control_interface_info: 12242 * 12243 * Gets a machine-readable description of the <link linkend="gdbus-interface-org-openbmc-Control.top_of_page">org.openbmc.Control</link> D-Bus interface. 12244 * 12245 * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free. 12246 */ 12247 GDBusInterfaceInfo * 12248 control_interface_info (void) 12249 { 12250 return (GDBusInterfaceInfo *) &_control_interface_info.parent_struct; 12251 } 12252 12253 /** 12254 * control_override_properties: 12255 * @klass: The class structure for a #GObject<!-- -->-derived class. 12256 * @property_id_begin: The property id to assign to the first overridden property. 12257 * 12258 * Overrides all #GObject properties in the #Control interface for a concrete class. 12259 * The properties are overridden in the order they are defined. 12260 * 12261 * Returns: The last property id. 12262 */ 12263 guint 12264 control_override_properties (GObjectClass *klass, guint property_id_begin) 12265 { 12266 g_object_class_override_property (klass, property_id_begin++, "poll-interval"); 12267 g_object_class_override_property (klass, property_id_begin++, "heatbeat"); 12268 return property_id_begin - 1; 12269 } 12270 12271 12272 12273 /** 12274 * Control: 12275 * 12276 * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Control.top_of_page">org.openbmc.Control</link>. 12277 */ 12278 12279 /** 12280 * ControlIface: 12281 * @parent_iface: The parent interface. 12282 * @handle_init: Handler for the #Control::handle-init signal. 12283 * @get_heatbeat: Getter for the #Control:heatbeat property. 12284 * @get_poll_interval: Getter for the #Control:poll-interval property. 12285 * @goto_system_state: Handler for the #Control::goto-system-state signal. 12286 * @heartbeat: Handler for the #Control::heartbeat signal. 12287 * @started: Handler for the #Control::started signal. 12288 * 12289 * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Control.top_of_page">org.openbmc.Control</link>. 12290 */ 12291 12292 typedef ControlIface ControlInterface; 12293 G_DEFINE_INTERFACE (Control, control, G_TYPE_OBJECT); 12294 12295 static void 12296 control_default_init (ControlIface *iface) 12297 { 12298 /* GObject signals for incoming D-Bus method calls: */ 12299 /** 12300 * Control::handle-init: 12301 * @object: A #Control. 12302 * @invocation: A #GDBusMethodInvocation. 12303 * 12304 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-Control.init">init()</link> D-Bus method. 12305 * 12306 * 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 control_complete_init() 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. 12307 * 12308 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 12309 */ 12310 g_signal_new ("handle-init", 12311 G_TYPE_FROM_INTERFACE (iface), 12312 G_SIGNAL_RUN_LAST, 12313 G_STRUCT_OFFSET (ControlIface, handle_init), 12314 g_signal_accumulator_true_handled, 12315 NULL, 12316 g_cclosure_marshal_generic, 12317 G_TYPE_BOOLEAN, 12318 1, 12319 G_TYPE_DBUS_METHOD_INVOCATION); 12320 12321 /* GObject signals for received D-Bus signals: */ 12322 /** 12323 * Control::heartbeat: 12324 * @object: A #Control. 12325 * @arg_bus_name: Argument. 12326 * 12327 * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-openbmc-Control.Heartbeat">"Heartbeat"</link> is received. 12328 * 12329 * 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. 12330 */ 12331 g_signal_new ("heartbeat", 12332 G_TYPE_FROM_INTERFACE (iface), 12333 G_SIGNAL_RUN_LAST, 12334 G_STRUCT_OFFSET (ControlIface, heartbeat), 12335 NULL, 12336 NULL, 12337 g_cclosure_marshal_generic, 12338 G_TYPE_NONE, 12339 1, G_TYPE_STRING); 12340 12341 /** 12342 * Control::goto-system-state: 12343 * @object: A #Control. 12344 * @arg_state_name: Argument. 12345 * 12346 * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-openbmc-Control.GotoSystemState">"GotoSystemState"</link> is received. 12347 * 12348 * 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. 12349 */ 12350 g_signal_new ("goto-system-state", 12351 G_TYPE_FROM_INTERFACE (iface), 12352 G_SIGNAL_RUN_LAST, 12353 G_STRUCT_OFFSET (ControlIface, goto_system_state), 12354 NULL, 12355 NULL, 12356 g_cclosure_marshal_generic, 12357 G_TYPE_NONE, 12358 1, G_TYPE_STRING); 12359 12360 /** 12361 * Control::started: 12362 * @object: A #Control. 12363 * 12364 * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-openbmc-Control.Started">"Started"</link> is received. 12365 * 12366 * 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. 12367 */ 12368 g_signal_new ("started", 12369 G_TYPE_FROM_INTERFACE (iface), 12370 G_SIGNAL_RUN_LAST, 12371 G_STRUCT_OFFSET (ControlIface, started), 12372 NULL, 12373 NULL, 12374 g_cclosure_marshal_generic, 12375 G_TYPE_NONE, 12376 0); 12377 12378 /* GObject properties for D-Bus properties: */ 12379 /** 12380 * Control:poll-interval: 12381 * 12382 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-Control.poll_interval">"poll_interval"</link>. 12383 * 12384 * 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. 12385 */ 12386 g_object_interface_install_property (iface, 12387 g_param_spec_int ("poll-interval", "poll_interval", "poll_interval", G_MININT32, G_MAXINT32, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 12388 /** 12389 * Control:heatbeat: 12390 * 12391 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-Control.heatbeat">"heatbeat"</link>. 12392 * 12393 * 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. 12394 */ 12395 g_object_interface_install_property (iface, 12396 g_param_spec_int ("heatbeat", "heatbeat", "heatbeat", G_MININT32, G_MAXINT32, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 12397 } 12398 12399 /** 12400 * control_get_poll_interval: (skip) 12401 * @object: A #Control. 12402 * 12403 * Gets the value of the <link linkend="gdbus-property-org-openbmc-Control.poll_interval">"poll_interval"</link> D-Bus property. 12404 * 12405 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 12406 * 12407 * Returns: The property value. 12408 */ 12409 gint 12410 control_get_poll_interval (Control *object) 12411 { 12412 return CONTROL_GET_IFACE (object)->get_poll_interval (object); 12413 } 12414 12415 /** 12416 * control_set_poll_interval: (skip) 12417 * @object: A #Control. 12418 * @value: The value to set. 12419 * 12420 * Sets the <link linkend="gdbus-property-org-openbmc-Control.poll_interval">"poll_interval"</link> D-Bus property to @value. 12421 * 12422 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 12423 */ 12424 void 12425 control_set_poll_interval (Control *object, gint value) 12426 { 12427 g_object_set (G_OBJECT (object), "poll-interval", value, NULL); 12428 } 12429 12430 /** 12431 * control_get_heatbeat: (skip) 12432 * @object: A #Control. 12433 * 12434 * Gets the value of the <link linkend="gdbus-property-org-openbmc-Control.heatbeat">"heatbeat"</link> D-Bus property. 12435 * 12436 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 12437 * 12438 * Returns: The property value. 12439 */ 12440 gint 12441 control_get_heatbeat (Control *object) 12442 { 12443 return CONTROL_GET_IFACE (object)->get_heatbeat (object); 12444 } 12445 12446 /** 12447 * control_set_heatbeat: (skip) 12448 * @object: A #Control. 12449 * @value: The value to set. 12450 * 12451 * Sets the <link linkend="gdbus-property-org-openbmc-Control.heatbeat">"heatbeat"</link> D-Bus property to @value. 12452 * 12453 * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side. 12454 */ 12455 void 12456 control_set_heatbeat (Control *object, gint value) 12457 { 12458 g_object_set (G_OBJECT (object), "heatbeat", value, NULL); 12459 } 12460 12461 /** 12462 * control_emit_heartbeat: 12463 * @object: A #Control. 12464 * @arg_bus_name: Argument to pass with the signal. 12465 * 12466 * Emits the <link linkend="gdbus-signal-org-openbmc-Control.Heartbeat">"Heartbeat"</link> D-Bus signal. 12467 */ 12468 void 12469 control_emit_heartbeat ( 12470 Control *object, 12471 const gchar *arg_bus_name) 12472 { 12473 g_signal_emit_by_name (object, "heartbeat", arg_bus_name); 12474 } 12475 12476 /** 12477 * control_emit_goto_system_state: 12478 * @object: A #Control. 12479 * @arg_state_name: Argument to pass with the signal. 12480 * 12481 * Emits the <link linkend="gdbus-signal-org-openbmc-Control.GotoSystemState">"GotoSystemState"</link> D-Bus signal. 12482 */ 12483 void 12484 control_emit_goto_system_state ( 12485 Control *object, 12486 const gchar *arg_state_name) 12487 { 12488 g_signal_emit_by_name (object, "goto-system-state", arg_state_name); 12489 } 12490 12491 /** 12492 * control_emit_started: 12493 * @object: A #Control. 12494 * 12495 * Emits the <link linkend="gdbus-signal-org-openbmc-Control.Started">"Started"</link> D-Bus signal. 12496 */ 12497 void 12498 control_emit_started ( 12499 Control *object) 12500 { 12501 g_signal_emit_by_name (object, "started"); 12502 } 12503 12504 /** 12505 * control_call_init: 12506 * @proxy: A #ControlProxy. 12507 * @cancellable: (allow-none): A #GCancellable or %NULL. 12508 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 12509 * @user_data: User data to pass to @callback. 12510 * 12511 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-Control.init">init()</link> D-Bus method on @proxy. 12512 * 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. 12513 * You can then call control_call_init_finish() to get the result of the operation. 12514 * 12515 * See control_call_init_sync() for the synchronous, blocking version of this method. 12516 */ 12517 void 12518 control_call_init ( 12519 Control *proxy, 12520 GCancellable *cancellable, 12521 GAsyncReadyCallback callback, 12522 gpointer user_data) 12523 { 12524 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 12525 "init", 12526 g_variant_new ("()"), 12527 G_DBUS_CALL_FLAGS_NONE, 12528 -1, 12529 cancellable, 12530 callback, 12531 user_data); 12532 } 12533 12534 /** 12535 * control_call_init_finish: 12536 * @proxy: A #ControlProxy. 12537 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to control_call_init(). 12538 * @error: Return location for error or %NULL. 12539 * 12540 * Finishes an operation started with control_call_init(). 12541 * 12542 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 12543 */ 12544 gboolean 12545 control_call_init_finish ( 12546 Control *proxy, 12547 GAsyncResult *res, 12548 GError **error) 12549 { 12550 GVariant *_ret; 12551 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 12552 if (_ret == NULL) 12553 goto _out; 12554 g_variant_get (_ret, 12555 "()"); 12556 g_variant_unref (_ret); 12557 _out: 12558 return _ret != NULL; 12559 } 12560 12561 /** 12562 * control_call_init_sync: 12563 * @proxy: A #ControlProxy. 12564 * @cancellable: (allow-none): A #GCancellable or %NULL. 12565 * @error: Return location for error or %NULL. 12566 * 12567 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-Control.init">init()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 12568 * 12569 * See control_call_init() for the asynchronous version of this method. 12570 * 12571 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 12572 */ 12573 gboolean 12574 control_call_init_sync ( 12575 Control *proxy, 12576 GCancellable *cancellable, 12577 GError **error) 12578 { 12579 GVariant *_ret; 12580 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 12581 "init", 12582 g_variant_new ("()"), 12583 G_DBUS_CALL_FLAGS_NONE, 12584 -1, 12585 cancellable, 12586 error); 12587 if (_ret == NULL) 12588 goto _out; 12589 g_variant_get (_ret, 12590 "()"); 12591 g_variant_unref (_ret); 12592 _out: 12593 return _ret != NULL; 12594 } 12595 12596 /** 12597 * control_complete_init: 12598 * @object: A #Control. 12599 * @invocation: (transfer full): A #GDBusMethodInvocation. 12600 * 12601 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-Control.init">init()</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. 12602 * 12603 * This method will free @invocation, you cannot use it afterwards. 12604 */ 12605 void 12606 control_complete_init ( 12607 Control *object, 12608 GDBusMethodInvocation *invocation) 12609 { 12610 g_dbus_method_invocation_return_value (invocation, 12611 g_variant_new ("()")); 12612 } 12613 12614 /* ------------------------------------------------------------------------ */ 12615 12616 /** 12617 * ControlProxy: 12618 * 12619 * The #ControlProxy structure contains only private data and should only be accessed using the provided API. 12620 */ 12621 12622 /** 12623 * ControlProxyClass: 12624 * @parent_class: The parent class. 12625 * 12626 * Class structure for #ControlProxy. 12627 */ 12628 12629 struct _ControlProxyPrivate 12630 { 12631 GData *qdata; 12632 }; 12633 12634 static void control_proxy_iface_init (ControlIface *iface); 12635 12636 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 12637 G_DEFINE_TYPE_WITH_CODE (ControlProxy, control_proxy, G_TYPE_DBUS_PROXY, 12638 G_ADD_PRIVATE (ControlProxy) 12639 G_IMPLEMENT_INTERFACE (TYPE_CONTROL, control_proxy_iface_init)); 12640 12641 #else 12642 G_DEFINE_TYPE_WITH_CODE (ControlProxy, control_proxy, G_TYPE_DBUS_PROXY, 12643 G_IMPLEMENT_INTERFACE (TYPE_CONTROL, control_proxy_iface_init)); 12644 12645 #endif 12646 static void 12647 control_proxy_finalize (GObject *object) 12648 { 12649 ControlProxy *proxy = CONTROL_PROXY (object); 12650 g_datalist_clear (&proxy->priv->qdata); 12651 G_OBJECT_CLASS (control_proxy_parent_class)->finalize (object); 12652 } 12653 12654 static void 12655 control_proxy_get_property (GObject *object, 12656 guint prop_id, 12657 GValue *value, 12658 GParamSpec *pspec G_GNUC_UNUSED) 12659 { 12660 const _ExtendedGDBusPropertyInfo *info; 12661 GVariant *variant; 12662 g_assert (prop_id != 0 && prop_id - 1 < 2); 12663 info = _control_property_info_pointers[prop_id - 1]; 12664 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (object), info->parent_struct.name); 12665 if (info->use_gvariant) 12666 { 12667 g_value_set_variant (value, variant); 12668 } 12669 else 12670 { 12671 if (variant != NULL) 12672 g_dbus_gvariant_to_gvalue (variant, value); 12673 } 12674 if (variant != NULL) 12675 g_variant_unref (variant); 12676 } 12677 12678 static void 12679 control_proxy_set_property_cb (GDBusProxy *proxy, 12680 GAsyncResult *res, 12681 gpointer user_data) 12682 { 12683 const _ExtendedGDBusPropertyInfo *info = user_data; 12684 GError *error; 12685 GVariant *_ret; 12686 error = NULL; 12687 _ret = g_dbus_proxy_call_finish (proxy, res, &error); 12688 if (!_ret) 12689 { 12690 g_warning ("Error setting property '%s' on interface org.openbmc.Control: %s (%s, %d)", 12691 info->parent_struct.name, 12692 error->message, g_quark_to_string (error->domain), error->code); 12693 g_error_free (error); 12694 } 12695 else 12696 { 12697 g_variant_unref (_ret); 12698 } 12699 } 12700 12701 static void 12702 control_proxy_set_property (GObject *object, 12703 guint prop_id, 12704 const GValue *value, 12705 GParamSpec *pspec G_GNUC_UNUSED) 12706 { 12707 const _ExtendedGDBusPropertyInfo *info; 12708 GVariant *variant; 12709 g_assert (prop_id != 0 && prop_id - 1 < 2); 12710 info = _control_property_info_pointers[prop_id - 1]; 12711 variant = g_dbus_gvalue_to_gvariant (value, G_VARIANT_TYPE (info->parent_struct.signature)); 12712 g_dbus_proxy_call (G_DBUS_PROXY (object), 12713 "org.freedesktop.DBus.Properties.Set", 12714 g_variant_new ("(ssv)", "org.openbmc.Control", info->parent_struct.name, variant), 12715 G_DBUS_CALL_FLAGS_NONE, 12716 -1, 12717 NULL, (GAsyncReadyCallback) control_proxy_set_property_cb, (GDBusPropertyInfo *) &info->parent_struct); 12718 g_variant_unref (variant); 12719 } 12720 12721 static void 12722 control_proxy_g_signal (GDBusProxy *proxy, 12723 const gchar *sender_name G_GNUC_UNUSED, 12724 const gchar *signal_name, 12725 GVariant *parameters) 12726 { 12727 _ExtendedGDBusSignalInfo *info; 12728 GVariantIter iter; 12729 GVariant *child; 12730 GValue *paramv; 12731 guint num_params; 12732 guint n; 12733 guint signal_id; 12734 info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_control_interface_info.parent_struct, signal_name); 12735 if (info == NULL) 12736 return; 12737 num_params = g_variant_n_children (parameters); 12738 paramv = g_new0 (GValue, num_params + 1); 12739 g_value_init (¶mv[0], TYPE_CONTROL); 12740 g_value_set_object (¶mv[0], proxy); 12741 g_variant_iter_init (&iter, parameters); 12742 n = 1; 12743 while ((child = g_variant_iter_next_value (&iter)) != NULL) 12744 { 12745 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1]; 12746 if (arg_info->use_gvariant) 12747 { 12748 g_value_init (¶mv[n], G_TYPE_VARIANT); 12749 g_value_set_variant (¶mv[n], child); 12750 n++; 12751 } 12752 else 12753 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 12754 g_variant_unref (child); 12755 } 12756 signal_id = g_signal_lookup (info->signal_name, TYPE_CONTROL); 12757 g_signal_emitv (paramv, signal_id, 0, NULL); 12758 for (n = 0; n < num_params + 1; n++) 12759 g_value_unset (¶mv[n]); 12760 g_free (paramv); 12761 } 12762 12763 static void 12764 control_proxy_g_properties_changed (GDBusProxy *_proxy, 12765 GVariant *changed_properties, 12766 const gchar *const *invalidated_properties) 12767 { 12768 ControlProxy *proxy = CONTROL_PROXY (_proxy); 12769 guint n; 12770 const gchar *key; 12771 GVariantIter *iter; 12772 _ExtendedGDBusPropertyInfo *info; 12773 g_variant_get (changed_properties, "a{sv}", &iter); 12774 while (g_variant_iter_next (iter, "{&sv}", &key, NULL)) 12775 { 12776 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_control_interface_info.parent_struct, key); 12777 g_datalist_remove_data (&proxy->priv->qdata, key); 12778 if (info != NULL) 12779 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 12780 } 12781 g_variant_iter_free (iter); 12782 for (n = 0; invalidated_properties[n] != NULL; n++) 12783 { 12784 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_control_interface_info.parent_struct, invalidated_properties[n]); 12785 g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]); 12786 if (info != NULL) 12787 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 12788 } 12789 } 12790 12791 static gint 12792 control_proxy_get_poll_interval (Control *object) 12793 { 12794 ControlProxy *proxy = CONTROL_PROXY (object); 12795 GVariant *variant; 12796 gint value = 0; 12797 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "poll_interval"); 12798 if (variant != NULL) 12799 { 12800 value = g_variant_get_int32 (variant); 12801 g_variant_unref (variant); 12802 } 12803 return value; 12804 } 12805 12806 static gint 12807 control_proxy_get_heatbeat (Control *object) 12808 { 12809 ControlProxy *proxy = CONTROL_PROXY (object); 12810 GVariant *variant; 12811 gint value = 0; 12812 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "heatbeat"); 12813 if (variant != NULL) 12814 { 12815 value = g_variant_get_int32 (variant); 12816 g_variant_unref (variant); 12817 } 12818 return value; 12819 } 12820 12821 static void 12822 control_proxy_init (ControlProxy *proxy) 12823 { 12824 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 12825 proxy->priv = control_proxy_get_instance_private (proxy); 12826 #else 12827 proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, TYPE_CONTROL_PROXY, ControlProxyPrivate); 12828 #endif 12829 12830 g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), control_interface_info ()); 12831 } 12832 12833 static void 12834 control_proxy_class_init (ControlProxyClass *klass) 12835 { 12836 GObjectClass *gobject_class; 12837 GDBusProxyClass *proxy_class; 12838 12839 gobject_class = G_OBJECT_CLASS (klass); 12840 gobject_class->finalize = control_proxy_finalize; 12841 gobject_class->get_property = control_proxy_get_property; 12842 gobject_class->set_property = control_proxy_set_property; 12843 12844 proxy_class = G_DBUS_PROXY_CLASS (klass); 12845 proxy_class->g_signal = control_proxy_g_signal; 12846 proxy_class->g_properties_changed = control_proxy_g_properties_changed; 12847 12848 control_override_properties (gobject_class, 1); 12849 12850 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 12851 g_type_class_add_private (klass, sizeof (ControlProxyPrivate)); 12852 #endif 12853 } 12854 12855 static void 12856 control_proxy_iface_init (ControlIface *iface) 12857 { 12858 iface->get_poll_interval = control_proxy_get_poll_interval; 12859 iface->get_heatbeat = control_proxy_get_heatbeat; 12860 } 12861 12862 /** 12863 * control_proxy_new: 12864 * @connection: A #GDBusConnection. 12865 * @flags: Flags from the #GDBusProxyFlags enumeration. 12866 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 12867 * @object_path: An object path. 12868 * @cancellable: (allow-none): A #GCancellable or %NULL. 12869 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 12870 * @user_data: User data to pass to @callback. 12871 * 12872 * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Control.top_of_page">org.openbmc.Control</link>. See g_dbus_proxy_new() for more details. 12873 * 12874 * 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. 12875 * You can then call control_proxy_new_finish() to get the result of the operation. 12876 * 12877 * See control_proxy_new_sync() for the synchronous, blocking version of this constructor. 12878 */ 12879 void 12880 control_proxy_new ( 12881 GDBusConnection *connection, 12882 GDBusProxyFlags flags, 12883 const gchar *name, 12884 const gchar *object_path, 12885 GCancellable *cancellable, 12886 GAsyncReadyCallback callback, 12887 gpointer user_data) 12888 { 12889 g_async_initable_new_async (TYPE_CONTROL_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.Control", NULL); 12890 } 12891 12892 /** 12893 * control_proxy_new_finish: 12894 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to control_proxy_new(). 12895 * @error: Return location for error or %NULL 12896 * 12897 * Finishes an operation started with control_proxy_new(). 12898 * 12899 * Returns: (transfer full) (type ControlProxy): The constructed proxy object or %NULL if @error is set. 12900 */ 12901 Control * 12902 control_proxy_new_finish ( 12903 GAsyncResult *res, 12904 GError **error) 12905 { 12906 GObject *ret; 12907 GObject *source_object; 12908 source_object = g_async_result_get_source_object (res); 12909 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 12910 g_object_unref (source_object); 12911 if (ret != NULL) 12912 return CONTROL (ret); 12913 else 12914 return NULL; 12915 } 12916 12917 /** 12918 * control_proxy_new_sync: 12919 * @connection: A #GDBusConnection. 12920 * @flags: Flags from the #GDBusProxyFlags enumeration. 12921 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 12922 * @object_path: An object path. 12923 * @cancellable: (allow-none): A #GCancellable or %NULL. 12924 * @error: Return location for error or %NULL 12925 * 12926 * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Control.top_of_page">org.openbmc.Control</link>. See g_dbus_proxy_new_sync() for more details. 12927 * 12928 * The calling thread is blocked until a reply is received. 12929 * 12930 * See control_proxy_new() for the asynchronous version of this constructor. 12931 * 12932 * Returns: (transfer full) (type ControlProxy): The constructed proxy object or %NULL if @error is set. 12933 */ 12934 Control * 12935 control_proxy_new_sync ( 12936 GDBusConnection *connection, 12937 GDBusProxyFlags flags, 12938 const gchar *name, 12939 const gchar *object_path, 12940 GCancellable *cancellable, 12941 GError **error) 12942 { 12943 GInitable *ret; 12944 ret = g_initable_new (TYPE_CONTROL_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.Control", NULL); 12945 if (ret != NULL) 12946 return CONTROL (ret); 12947 else 12948 return NULL; 12949 } 12950 12951 12952 /** 12953 * control_proxy_new_for_bus: 12954 * @bus_type: A #GBusType. 12955 * @flags: Flags from the #GDBusProxyFlags enumeration. 12956 * @name: A bus name (well-known or unique). 12957 * @object_path: An object path. 12958 * @cancellable: (allow-none): A #GCancellable or %NULL. 12959 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 12960 * @user_data: User data to pass to @callback. 12961 * 12962 * Like control_proxy_new() but takes a #GBusType instead of a #GDBusConnection. 12963 * 12964 * 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. 12965 * You can then call control_proxy_new_for_bus_finish() to get the result of the operation. 12966 * 12967 * See control_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor. 12968 */ 12969 void 12970 control_proxy_new_for_bus ( 12971 GBusType bus_type, 12972 GDBusProxyFlags flags, 12973 const gchar *name, 12974 const gchar *object_path, 12975 GCancellable *cancellable, 12976 GAsyncReadyCallback callback, 12977 gpointer user_data) 12978 { 12979 g_async_initable_new_async (TYPE_CONTROL_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.Control", NULL); 12980 } 12981 12982 /** 12983 * control_proxy_new_for_bus_finish: 12984 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to control_proxy_new_for_bus(). 12985 * @error: Return location for error or %NULL 12986 * 12987 * Finishes an operation started with control_proxy_new_for_bus(). 12988 * 12989 * Returns: (transfer full) (type ControlProxy): The constructed proxy object or %NULL if @error is set. 12990 */ 12991 Control * 12992 control_proxy_new_for_bus_finish ( 12993 GAsyncResult *res, 12994 GError **error) 12995 { 12996 GObject *ret; 12997 GObject *source_object; 12998 source_object = g_async_result_get_source_object (res); 12999 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 13000 g_object_unref (source_object); 13001 if (ret != NULL) 13002 return CONTROL (ret); 13003 else 13004 return NULL; 13005 } 13006 13007 /** 13008 * control_proxy_new_for_bus_sync: 13009 * @bus_type: A #GBusType. 13010 * @flags: Flags from the #GDBusProxyFlags enumeration. 13011 * @name: A bus name (well-known or unique). 13012 * @object_path: An object path. 13013 * @cancellable: (allow-none): A #GCancellable or %NULL. 13014 * @error: Return location for error or %NULL 13015 * 13016 * Like control_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection. 13017 * 13018 * The calling thread is blocked until a reply is received. 13019 * 13020 * See control_proxy_new_for_bus() for the asynchronous version of this constructor. 13021 * 13022 * Returns: (transfer full) (type ControlProxy): The constructed proxy object or %NULL if @error is set. 13023 */ 13024 Control * 13025 control_proxy_new_for_bus_sync ( 13026 GBusType bus_type, 13027 GDBusProxyFlags flags, 13028 const gchar *name, 13029 const gchar *object_path, 13030 GCancellable *cancellable, 13031 GError **error) 13032 { 13033 GInitable *ret; 13034 ret = g_initable_new (TYPE_CONTROL_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.Control", NULL); 13035 if (ret != NULL) 13036 return CONTROL (ret); 13037 else 13038 return NULL; 13039 } 13040 13041 13042 /* ------------------------------------------------------------------------ */ 13043 13044 /** 13045 * ControlSkeleton: 13046 * 13047 * The #ControlSkeleton structure contains only private data and should only be accessed using the provided API. 13048 */ 13049 13050 /** 13051 * ControlSkeletonClass: 13052 * @parent_class: The parent class. 13053 * 13054 * Class structure for #ControlSkeleton. 13055 */ 13056 13057 struct _ControlSkeletonPrivate 13058 { 13059 GValue *properties; 13060 GList *changed_properties; 13061 GSource *changed_properties_idle_source; 13062 GMainContext *context; 13063 GMutex lock; 13064 }; 13065 13066 static void 13067 _control_skeleton_handle_method_call ( 13068 GDBusConnection *connection G_GNUC_UNUSED, 13069 const gchar *sender G_GNUC_UNUSED, 13070 const gchar *object_path G_GNUC_UNUSED, 13071 const gchar *interface_name, 13072 const gchar *method_name, 13073 GVariant *parameters, 13074 GDBusMethodInvocation *invocation, 13075 gpointer user_data) 13076 { 13077 ControlSkeleton *skeleton = CONTROL_SKELETON (user_data); 13078 _ExtendedGDBusMethodInfo *info; 13079 GVariantIter iter; 13080 GVariant *child; 13081 GValue *paramv; 13082 guint num_params; 13083 guint num_extra; 13084 guint n; 13085 guint signal_id; 13086 GValue return_value = G_VALUE_INIT; 13087 info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation); 13088 g_assert (info != NULL); 13089 num_params = g_variant_n_children (parameters); 13090 num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra); 13091 n = 0; 13092 g_value_init (¶mv[n], TYPE_CONTROL); 13093 g_value_set_object (¶mv[n++], skeleton); 13094 g_value_init (¶mv[n], G_TYPE_DBUS_METHOD_INVOCATION); 13095 g_value_set_object (¶mv[n++], invocation); 13096 if (info->pass_fdlist) 13097 { 13098 #ifdef G_OS_UNIX 13099 g_value_init (¶mv[n], G_TYPE_UNIX_FD_LIST); 13100 g_value_set_object (¶mv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation))); 13101 #else 13102 g_assert_not_reached (); 13103 #endif 13104 } 13105 g_variant_iter_init (&iter, parameters); 13106 while ((child = g_variant_iter_next_value (&iter)) != NULL) 13107 { 13108 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra]; 13109 if (arg_info->use_gvariant) 13110 { 13111 g_value_init (¶mv[n], G_TYPE_VARIANT); 13112 g_value_set_variant (¶mv[n], child); 13113 n++; 13114 } 13115 else 13116 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 13117 g_variant_unref (child); 13118 } 13119 signal_id = g_signal_lookup (info->signal_name, TYPE_CONTROL); 13120 g_value_init (&return_value, G_TYPE_BOOLEAN); 13121 g_signal_emitv (paramv, signal_id, 0, &return_value); 13122 if (!g_value_get_boolean (&return_value)) 13123 g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name); 13124 g_value_unset (&return_value); 13125 for (n = 0; n < num_params + num_extra; n++) 13126 g_value_unset (¶mv[n]); 13127 g_free (paramv); 13128 } 13129 13130 static GVariant * 13131 _control_skeleton_handle_get_property ( 13132 GDBusConnection *connection G_GNUC_UNUSED, 13133 const gchar *sender G_GNUC_UNUSED, 13134 const gchar *object_path G_GNUC_UNUSED, 13135 const gchar *interface_name G_GNUC_UNUSED, 13136 const gchar *property_name, 13137 GError **error, 13138 gpointer user_data) 13139 { 13140 ControlSkeleton *skeleton = CONTROL_SKELETON (user_data); 13141 GValue value = G_VALUE_INIT; 13142 GParamSpec *pspec; 13143 _ExtendedGDBusPropertyInfo *info; 13144 GVariant *ret; 13145 ret = NULL; 13146 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_control_interface_info.parent_struct, property_name); 13147 g_assert (info != NULL); 13148 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 13149 if (pspec == NULL) 13150 { 13151 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 13152 } 13153 else 13154 { 13155 g_value_init (&value, pspec->value_type); 13156 g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value); 13157 ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature)); 13158 g_value_unset (&value); 13159 } 13160 return ret; 13161 } 13162 13163 static gboolean 13164 _control_skeleton_handle_set_property ( 13165 GDBusConnection *connection G_GNUC_UNUSED, 13166 const gchar *sender G_GNUC_UNUSED, 13167 const gchar *object_path G_GNUC_UNUSED, 13168 const gchar *interface_name G_GNUC_UNUSED, 13169 const gchar *property_name, 13170 GVariant *variant, 13171 GError **error, 13172 gpointer user_data) 13173 { 13174 ControlSkeleton *skeleton = CONTROL_SKELETON (user_data); 13175 GValue value = G_VALUE_INIT; 13176 GParamSpec *pspec; 13177 _ExtendedGDBusPropertyInfo *info; 13178 gboolean ret; 13179 ret = FALSE; 13180 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_control_interface_info.parent_struct, property_name); 13181 g_assert (info != NULL); 13182 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 13183 if (pspec == NULL) 13184 { 13185 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 13186 } 13187 else 13188 { 13189 if (info->use_gvariant) 13190 g_value_set_variant (&value, variant); 13191 else 13192 g_dbus_gvariant_to_gvalue (variant, &value); 13193 g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value); 13194 g_value_unset (&value); 13195 ret = TRUE; 13196 } 13197 return ret; 13198 } 13199 13200 static const GDBusInterfaceVTable _control_skeleton_vtable = 13201 { 13202 _control_skeleton_handle_method_call, 13203 _control_skeleton_handle_get_property, 13204 _control_skeleton_handle_set_property, 13205 {NULL} 13206 }; 13207 13208 static GDBusInterfaceInfo * 13209 control_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 13210 { 13211 return control_interface_info (); 13212 } 13213 13214 static GDBusInterfaceVTable * 13215 control_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 13216 { 13217 return (GDBusInterfaceVTable *) &_control_skeleton_vtable; 13218 } 13219 13220 static GVariant * 13221 control_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton) 13222 { 13223 ControlSkeleton *skeleton = CONTROL_SKELETON (_skeleton); 13224 13225 GVariantBuilder builder; 13226 guint n; 13227 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 13228 if (_control_interface_info.parent_struct.properties == NULL) 13229 goto out; 13230 for (n = 0; _control_interface_info.parent_struct.properties[n] != NULL; n++) 13231 { 13232 GDBusPropertyInfo *info = _control_interface_info.parent_struct.properties[n]; 13233 if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE) 13234 { 13235 GVariant *value; 13236 value = _control_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.Control", info->name, NULL, skeleton); 13237 if (value != NULL) 13238 { 13239 g_variant_take_ref (value); 13240 g_variant_builder_add (&builder, "{sv}", info->name, value); 13241 g_variant_unref (value); 13242 } 13243 } 13244 } 13245 out: 13246 return g_variant_builder_end (&builder); 13247 } 13248 13249 static gboolean _control_emit_changed (gpointer user_data); 13250 13251 static void 13252 control_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton) 13253 { 13254 ControlSkeleton *skeleton = CONTROL_SKELETON (_skeleton); 13255 gboolean emit_changed = FALSE; 13256 13257 g_mutex_lock (&skeleton->priv->lock); 13258 if (skeleton->priv->changed_properties_idle_source != NULL) 13259 { 13260 g_source_destroy (skeleton->priv->changed_properties_idle_source); 13261 skeleton->priv->changed_properties_idle_source = NULL; 13262 emit_changed = TRUE; 13263 } 13264 g_mutex_unlock (&skeleton->priv->lock); 13265 13266 if (emit_changed) 13267 _control_emit_changed (skeleton); 13268 } 13269 13270 static void 13271 _control_on_signal_heartbeat ( 13272 Control *object, 13273 const gchar *arg_bus_name) 13274 { 13275 ControlSkeleton *skeleton = CONTROL_SKELETON (object); 13276 13277 GList *connections, *l; 13278 GVariant *signal_variant; 13279 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 13280 13281 signal_variant = g_variant_ref_sink (g_variant_new ("(s)", 13282 arg_bus_name)); 13283 for (l = connections; l != NULL; l = l->next) 13284 { 13285 GDBusConnection *connection = l->data; 13286 g_dbus_connection_emit_signal (connection, 13287 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.Control", "Heartbeat", 13288 signal_variant, NULL); 13289 } 13290 g_variant_unref (signal_variant); 13291 g_list_free_full (connections, g_object_unref); 13292 } 13293 13294 static void 13295 _control_on_signal_goto_system_state ( 13296 Control *object, 13297 const gchar *arg_state_name) 13298 { 13299 ControlSkeleton *skeleton = CONTROL_SKELETON (object); 13300 13301 GList *connections, *l; 13302 GVariant *signal_variant; 13303 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 13304 13305 signal_variant = g_variant_ref_sink (g_variant_new ("(s)", 13306 arg_state_name)); 13307 for (l = connections; l != NULL; l = l->next) 13308 { 13309 GDBusConnection *connection = l->data; 13310 g_dbus_connection_emit_signal (connection, 13311 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.Control", "GotoSystemState", 13312 signal_variant, NULL); 13313 } 13314 g_variant_unref (signal_variant); 13315 g_list_free_full (connections, g_object_unref); 13316 } 13317 13318 static void 13319 _control_on_signal_started ( 13320 Control *object) 13321 { 13322 ControlSkeleton *skeleton = CONTROL_SKELETON (object); 13323 13324 GList *connections, *l; 13325 GVariant *signal_variant; 13326 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 13327 13328 signal_variant = g_variant_ref_sink (g_variant_new ("()")); 13329 for (l = connections; l != NULL; l = l->next) 13330 { 13331 GDBusConnection *connection = l->data; 13332 g_dbus_connection_emit_signal (connection, 13333 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.Control", "Started", 13334 signal_variant, NULL); 13335 } 13336 g_variant_unref (signal_variant); 13337 g_list_free_full (connections, g_object_unref); 13338 } 13339 13340 static void control_skeleton_iface_init (ControlIface *iface); 13341 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 13342 G_DEFINE_TYPE_WITH_CODE (ControlSkeleton, control_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 13343 G_ADD_PRIVATE (ControlSkeleton) 13344 G_IMPLEMENT_INTERFACE (TYPE_CONTROL, control_skeleton_iface_init)); 13345 13346 #else 13347 G_DEFINE_TYPE_WITH_CODE (ControlSkeleton, control_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 13348 G_IMPLEMENT_INTERFACE (TYPE_CONTROL, control_skeleton_iface_init)); 13349 13350 #endif 13351 static void 13352 control_skeleton_finalize (GObject *object) 13353 { 13354 ControlSkeleton *skeleton = CONTROL_SKELETON (object); 13355 guint n; 13356 for (n = 0; n < 2; n++) 13357 g_value_unset (&skeleton->priv->properties[n]); 13358 g_free (skeleton->priv->properties); 13359 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 13360 if (skeleton->priv->changed_properties_idle_source != NULL) 13361 g_source_destroy (skeleton->priv->changed_properties_idle_source); 13362 g_main_context_unref (skeleton->priv->context); 13363 g_mutex_clear (&skeleton->priv->lock); 13364 G_OBJECT_CLASS (control_skeleton_parent_class)->finalize (object); 13365 } 13366 13367 static void 13368 control_skeleton_get_property (GObject *object, 13369 guint prop_id, 13370 GValue *value, 13371 GParamSpec *pspec G_GNUC_UNUSED) 13372 { 13373 ControlSkeleton *skeleton = CONTROL_SKELETON (object); 13374 g_assert (prop_id != 0 && prop_id - 1 < 2); 13375 g_mutex_lock (&skeleton->priv->lock); 13376 g_value_copy (&skeleton->priv->properties[prop_id - 1], value); 13377 g_mutex_unlock (&skeleton->priv->lock); 13378 } 13379 13380 static gboolean 13381 _control_emit_changed (gpointer user_data) 13382 { 13383 ControlSkeleton *skeleton = CONTROL_SKELETON (user_data); 13384 GList *l; 13385 GVariantBuilder builder; 13386 GVariantBuilder invalidated_builder; 13387 guint num_changes; 13388 13389 g_mutex_lock (&skeleton->priv->lock); 13390 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 13391 g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as")); 13392 for (l = skeleton->priv->changed_properties, num_changes = 0; l != NULL; l = l->next) 13393 { 13394 ChangedProperty *cp = l->data; 13395 GVariant *variant; 13396 const GValue *cur_value; 13397 13398 cur_value = &skeleton->priv->properties[cp->prop_id - 1]; 13399 if (!_g_value_equal (cur_value, &cp->orig_value)) 13400 { 13401 variant = g_dbus_gvalue_to_gvariant (cur_value, G_VARIANT_TYPE (cp->info->parent_struct.signature)); 13402 g_variant_builder_add (&builder, "{sv}", cp->info->parent_struct.name, variant); 13403 g_variant_unref (variant); 13404 num_changes++; 13405 } 13406 } 13407 if (num_changes > 0) 13408 { 13409 GList *connections, *ll; 13410 GVariant *signal_variant; 13411 signal_variant = g_variant_ref_sink (g_variant_new ("(sa{sv}as)", "org.openbmc.Control", 13412 &builder, &invalidated_builder)); 13413 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 13414 for (ll = connections; ll != NULL; ll = ll->next) 13415 { 13416 GDBusConnection *connection = ll->data; 13417 13418 g_dbus_connection_emit_signal (connection, 13419 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), 13420 "org.freedesktop.DBus.Properties", 13421 "PropertiesChanged", 13422 signal_variant, 13423 NULL); 13424 } 13425 g_variant_unref (signal_variant); 13426 g_list_free_full (connections, g_object_unref); 13427 } 13428 else 13429 { 13430 g_variant_builder_clear (&builder); 13431 g_variant_builder_clear (&invalidated_builder); 13432 } 13433 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 13434 skeleton->priv->changed_properties = NULL; 13435 skeleton->priv->changed_properties_idle_source = NULL; 13436 g_mutex_unlock (&skeleton->priv->lock); 13437 return FALSE; 13438 } 13439 13440 static void 13441 _control_schedule_emit_changed (ControlSkeleton *skeleton, const _ExtendedGDBusPropertyInfo *info, guint prop_id, const GValue *orig_value) 13442 { 13443 ChangedProperty *cp; 13444 GList *l; 13445 cp = NULL; 13446 for (l = skeleton->priv->changed_properties; l != NULL; l = l->next) 13447 { 13448 ChangedProperty *i_cp = l->data; 13449 if (i_cp->info == info) 13450 { 13451 cp = i_cp; 13452 break; 13453 } 13454 } 13455 if (cp == NULL) 13456 { 13457 cp = g_new0 (ChangedProperty, 1); 13458 cp->prop_id = prop_id; 13459 cp->info = info; 13460 skeleton->priv->changed_properties = g_list_prepend (skeleton->priv->changed_properties, cp); 13461 g_value_init (&cp->orig_value, G_VALUE_TYPE (orig_value)); 13462 g_value_copy (orig_value, &cp->orig_value); 13463 } 13464 } 13465 13466 static void 13467 control_skeleton_notify (GObject *object, 13468 GParamSpec *pspec G_GNUC_UNUSED) 13469 { 13470 ControlSkeleton *skeleton = CONTROL_SKELETON (object); 13471 g_mutex_lock (&skeleton->priv->lock); 13472 if (skeleton->priv->changed_properties != NULL && 13473 skeleton->priv->changed_properties_idle_source == NULL) 13474 { 13475 skeleton->priv->changed_properties_idle_source = g_idle_source_new (); 13476 g_source_set_priority (skeleton->priv->changed_properties_idle_source, G_PRIORITY_DEFAULT); 13477 g_source_set_callback (skeleton->priv->changed_properties_idle_source, _control_emit_changed, g_object_ref (skeleton), (GDestroyNotify) g_object_unref); 13478 g_source_set_name (skeleton->priv->changed_properties_idle_source, "[generated] _control_emit_changed"); 13479 g_source_attach (skeleton->priv->changed_properties_idle_source, skeleton->priv->context); 13480 g_source_unref (skeleton->priv->changed_properties_idle_source); 13481 } 13482 g_mutex_unlock (&skeleton->priv->lock); 13483 } 13484 13485 static void 13486 control_skeleton_set_property (GObject *object, 13487 guint prop_id, 13488 const GValue *value, 13489 GParamSpec *pspec) 13490 { 13491 ControlSkeleton *skeleton = CONTROL_SKELETON (object); 13492 g_assert (prop_id != 0 && prop_id - 1 < 2); 13493 g_mutex_lock (&skeleton->priv->lock); 13494 g_object_freeze_notify (object); 13495 if (!_g_value_equal (value, &skeleton->priv->properties[prop_id - 1])) 13496 { 13497 if (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)) != NULL) 13498 _control_schedule_emit_changed (skeleton, _control_property_info_pointers[prop_id - 1], prop_id, &skeleton->priv->properties[prop_id - 1]); 13499 g_value_copy (value, &skeleton->priv->properties[prop_id - 1]); 13500 g_object_notify_by_pspec (object, pspec); 13501 } 13502 g_mutex_unlock (&skeleton->priv->lock); 13503 g_object_thaw_notify (object); 13504 } 13505 13506 static void 13507 control_skeleton_init (ControlSkeleton *skeleton) 13508 { 13509 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 13510 skeleton->priv = control_skeleton_get_instance_private (skeleton); 13511 #else 13512 skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, TYPE_CONTROL_SKELETON, ControlSkeletonPrivate); 13513 #endif 13514 13515 g_mutex_init (&skeleton->priv->lock); 13516 skeleton->priv->context = g_main_context_ref_thread_default (); 13517 skeleton->priv->properties = g_new0 (GValue, 2); 13518 g_value_init (&skeleton->priv->properties[0], G_TYPE_INT); 13519 g_value_init (&skeleton->priv->properties[1], G_TYPE_INT); 13520 } 13521 13522 static gint 13523 control_skeleton_get_poll_interval (Control *object) 13524 { 13525 ControlSkeleton *skeleton = CONTROL_SKELETON (object); 13526 gint value; 13527 g_mutex_lock (&skeleton->priv->lock); 13528 value = g_value_get_int (&(skeleton->priv->properties[0])); 13529 g_mutex_unlock (&skeleton->priv->lock); 13530 return value; 13531 } 13532 13533 static gint 13534 control_skeleton_get_heatbeat (Control *object) 13535 { 13536 ControlSkeleton *skeleton = CONTROL_SKELETON (object); 13537 gint value; 13538 g_mutex_lock (&skeleton->priv->lock); 13539 value = g_value_get_int (&(skeleton->priv->properties[1])); 13540 g_mutex_unlock (&skeleton->priv->lock); 13541 return value; 13542 } 13543 13544 static void 13545 control_skeleton_class_init (ControlSkeletonClass *klass) 13546 { 13547 GObjectClass *gobject_class; 13548 GDBusInterfaceSkeletonClass *skeleton_class; 13549 13550 gobject_class = G_OBJECT_CLASS (klass); 13551 gobject_class->finalize = control_skeleton_finalize; 13552 gobject_class->get_property = control_skeleton_get_property; 13553 gobject_class->set_property = control_skeleton_set_property; 13554 gobject_class->notify = control_skeleton_notify; 13555 13556 13557 control_override_properties (gobject_class, 1); 13558 13559 skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass); 13560 skeleton_class->get_info = control_skeleton_dbus_interface_get_info; 13561 skeleton_class->get_properties = control_skeleton_dbus_interface_get_properties; 13562 skeleton_class->flush = control_skeleton_dbus_interface_flush; 13563 skeleton_class->get_vtable = control_skeleton_dbus_interface_get_vtable; 13564 13565 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 13566 g_type_class_add_private (klass, sizeof (ControlSkeletonPrivate)); 13567 #endif 13568 } 13569 13570 static void 13571 control_skeleton_iface_init (ControlIface *iface) 13572 { 13573 iface->heartbeat = _control_on_signal_heartbeat; 13574 iface->goto_system_state = _control_on_signal_goto_system_state; 13575 iface->started = _control_on_signal_started; 13576 iface->get_poll_interval = control_skeleton_get_poll_interval; 13577 iface->get_heatbeat = control_skeleton_get_heatbeat; 13578 } 13579 13580 /** 13581 * control_skeleton_new: 13582 * 13583 * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Control.top_of_page">org.openbmc.Control</link>. 13584 * 13585 * Returns: (transfer full) (type ControlSkeleton): The skeleton object. 13586 */ 13587 Control * 13588 control_skeleton_new (void) 13589 { 13590 return CONTROL (g_object_new (TYPE_CONTROL_SKELETON, NULL)); 13591 } 13592 13593 /* ------------------------------------------------------------------------ 13594 * Code for interface org.openbmc.control.Bmc 13595 * ------------------------------------------------------------------------ 13596 */ 13597 13598 /** 13599 * SECTION:ControlBmc 13600 * @title: ControlBmc 13601 * @short_description: Generated C code for the org.openbmc.control.Bmc D-Bus interface 13602 * 13603 * This section contains code for working with the <link linkend="gdbus-interface-org-openbmc-control-Bmc.top_of_page">org.openbmc.control.Bmc</link> D-Bus interface in C. 13604 */ 13605 13606 /* ---- Introspection data for org.openbmc.control.Bmc ---- */ 13607 13608 static const _ExtendedGDBusMethodInfo _control_bmc_method_info_warm_reset = 13609 { 13610 { 13611 -1, 13612 (gchar *) "warmReset", 13613 NULL, 13614 NULL, 13615 NULL 13616 }, 13617 "handle-warm-reset", 13618 FALSE 13619 }; 13620 13621 static const _ExtendedGDBusMethodInfo * const _control_bmc_method_info_pointers[] = 13622 { 13623 &_control_bmc_method_info_warm_reset, 13624 NULL 13625 }; 13626 13627 static const _ExtendedGDBusInterfaceInfo _control_bmc_interface_info = 13628 { 13629 { 13630 -1, 13631 (gchar *) "org.openbmc.control.Bmc", 13632 (GDBusMethodInfo **) &_control_bmc_method_info_pointers, 13633 NULL, 13634 NULL, 13635 NULL 13636 }, 13637 "control-bmc", 13638 }; 13639 13640 13641 /** 13642 * control_bmc_interface_info: 13643 * 13644 * Gets a machine-readable description of the <link linkend="gdbus-interface-org-openbmc-control-Bmc.top_of_page">org.openbmc.control.Bmc</link> D-Bus interface. 13645 * 13646 * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free. 13647 */ 13648 GDBusInterfaceInfo * 13649 control_bmc_interface_info (void) 13650 { 13651 return (GDBusInterfaceInfo *) &_control_bmc_interface_info.parent_struct; 13652 } 13653 13654 /** 13655 * control_bmc_override_properties: 13656 * @klass: The class structure for a #GObject<!-- -->-derived class. 13657 * @property_id_begin: The property id to assign to the first overridden property. 13658 * 13659 * Overrides all #GObject properties in the #ControlBmc interface for a concrete class. 13660 * The properties are overridden in the order they are defined. 13661 * 13662 * Returns: The last property id. 13663 */ 13664 guint 13665 control_bmc_override_properties (GObjectClass *klass, guint property_id_begin) 13666 { 13667 return property_id_begin - 1; 13668 } 13669 13670 13671 13672 /** 13673 * ControlBmc: 13674 * 13675 * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Bmc.top_of_page">org.openbmc.control.Bmc</link>. 13676 */ 13677 13678 /** 13679 * ControlBmcIface: 13680 * @parent_iface: The parent interface. 13681 * @handle_warm_reset: Handler for the #ControlBmc::handle-warm-reset signal. 13682 * 13683 * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Bmc.top_of_page">org.openbmc.control.Bmc</link>. 13684 */ 13685 13686 typedef ControlBmcIface ControlBmcInterface; 13687 G_DEFINE_INTERFACE (ControlBmc, control_bmc, G_TYPE_OBJECT); 13688 13689 static void 13690 control_bmc_default_init (ControlBmcIface *iface) 13691 { 13692 /* GObject signals for incoming D-Bus method calls: */ 13693 /** 13694 * ControlBmc::handle-warm-reset: 13695 * @object: A #ControlBmc. 13696 * @invocation: A #GDBusMethodInvocation. 13697 * 13698 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-control-Bmc.warmReset">warmReset()</link> D-Bus method. 13699 * 13700 * 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 control_bmc_complete_warm_reset() 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. 13701 * 13702 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 13703 */ 13704 g_signal_new ("handle-warm-reset", 13705 G_TYPE_FROM_INTERFACE (iface), 13706 G_SIGNAL_RUN_LAST, 13707 G_STRUCT_OFFSET (ControlBmcIface, handle_warm_reset), 13708 g_signal_accumulator_true_handled, 13709 NULL, 13710 g_cclosure_marshal_generic, 13711 G_TYPE_BOOLEAN, 13712 1, 13713 G_TYPE_DBUS_METHOD_INVOCATION); 13714 13715 } 13716 13717 /** 13718 * control_bmc_call_warm_reset: 13719 * @proxy: A #ControlBmcProxy. 13720 * @cancellable: (allow-none): A #GCancellable or %NULL. 13721 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 13722 * @user_data: User data to pass to @callback. 13723 * 13724 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-control-Bmc.warmReset">warmReset()</link> D-Bus method on @proxy. 13725 * 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. 13726 * You can then call control_bmc_call_warm_reset_finish() to get the result of the operation. 13727 * 13728 * See control_bmc_call_warm_reset_sync() for the synchronous, blocking version of this method. 13729 */ 13730 void 13731 control_bmc_call_warm_reset ( 13732 ControlBmc *proxy, 13733 GCancellable *cancellable, 13734 GAsyncReadyCallback callback, 13735 gpointer user_data) 13736 { 13737 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 13738 "warmReset", 13739 g_variant_new ("()"), 13740 G_DBUS_CALL_FLAGS_NONE, 13741 -1, 13742 cancellable, 13743 callback, 13744 user_data); 13745 } 13746 13747 /** 13748 * control_bmc_call_warm_reset_finish: 13749 * @proxy: A #ControlBmcProxy. 13750 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to control_bmc_call_warm_reset(). 13751 * @error: Return location for error or %NULL. 13752 * 13753 * Finishes an operation started with control_bmc_call_warm_reset(). 13754 * 13755 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 13756 */ 13757 gboolean 13758 control_bmc_call_warm_reset_finish ( 13759 ControlBmc *proxy, 13760 GAsyncResult *res, 13761 GError **error) 13762 { 13763 GVariant *_ret; 13764 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 13765 if (_ret == NULL) 13766 goto _out; 13767 g_variant_get (_ret, 13768 "()"); 13769 g_variant_unref (_ret); 13770 _out: 13771 return _ret != NULL; 13772 } 13773 13774 /** 13775 * control_bmc_call_warm_reset_sync: 13776 * @proxy: A #ControlBmcProxy. 13777 * @cancellable: (allow-none): A #GCancellable or %NULL. 13778 * @error: Return location for error or %NULL. 13779 * 13780 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-control-Bmc.warmReset">warmReset()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 13781 * 13782 * See control_bmc_call_warm_reset() for the asynchronous version of this method. 13783 * 13784 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 13785 */ 13786 gboolean 13787 control_bmc_call_warm_reset_sync ( 13788 ControlBmc *proxy, 13789 GCancellable *cancellable, 13790 GError **error) 13791 { 13792 GVariant *_ret; 13793 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 13794 "warmReset", 13795 g_variant_new ("()"), 13796 G_DBUS_CALL_FLAGS_NONE, 13797 -1, 13798 cancellable, 13799 error); 13800 if (_ret == NULL) 13801 goto _out; 13802 g_variant_get (_ret, 13803 "()"); 13804 g_variant_unref (_ret); 13805 _out: 13806 return _ret != NULL; 13807 } 13808 13809 /** 13810 * control_bmc_complete_warm_reset: 13811 * @object: A #ControlBmc. 13812 * @invocation: (transfer full): A #GDBusMethodInvocation. 13813 * 13814 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-control-Bmc.warmReset">warmReset()</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. 13815 * 13816 * This method will free @invocation, you cannot use it afterwards. 13817 */ 13818 void 13819 control_bmc_complete_warm_reset ( 13820 ControlBmc *object, 13821 GDBusMethodInvocation *invocation) 13822 { 13823 g_dbus_method_invocation_return_value (invocation, 13824 g_variant_new ("()")); 13825 } 13826 13827 /* ------------------------------------------------------------------------ */ 13828 13829 /** 13830 * ControlBmcProxy: 13831 * 13832 * The #ControlBmcProxy structure contains only private data and should only be accessed using the provided API. 13833 */ 13834 13835 /** 13836 * ControlBmcProxyClass: 13837 * @parent_class: The parent class. 13838 * 13839 * Class structure for #ControlBmcProxy. 13840 */ 13841 13842 struct _ControlBmcProxyPrivate 13843 { 13844 GData *qdata; 13845 }; 13846 13847 static void control_bmc_proxy_iface_init (ControlBmcIface *iface); 13848 13849 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 13850 G_DEFINE_TYPE_WITH_CODE (ControlBmcProxy, control_bmc_proxy, G_TYPE_DBUS_PROXY, 13851 G_ADD_PRIVATE (ControlBmcProxy) 13852 G_IMPLEMENT_INTERFACE (TYPE_CONTROL_BMC, control_bmc_proxy_iface_init)); 13853 13854 #else 13855 G_DEFINE_TYPE_WITH_CODE (ControlBmcProxy, control_bmc_proxy, G_TYPE_DBUS_PROXY, 13856 G_IMPLEMENT_INTERFACE (TYPE_CONTROL_BMC, control_bmc_proxy_iface_init)); 13857 13858 #endif 13859 static void 13860 control_bmc_proxy_finalize (GObject *object) 13861 { 13862 ControlBmcProxy *proxy = CONTROL_BMC_PROXY (object); 13863 g_datalist_clear (&proxy->priv->qdata); 13864 G_OBJECT_CLASS (control_bmc_proxy_parent_class)->finalize (object); 13865 } 13866 13867 static void 13868 control_bmc_proxy_get_property (GObject *object, 13869 guint prop_id, 13870 GValue *value, 13871 GParamSpec *pspec G_GNUC_UNUSED) 13872 { 13873 } 13874 13875 static void 13876 control_bmc_proxy_set_property (GObject *object, 13877 guint prop_id, 13878 const GValue *value, 13879 GParamSpec *pspec G_GNUC_UNUSED) 13880 { 13881 } 13882 13883 static void 13884 control_bmc_proxy_g_signal (GDBusProxy *proxy, 13885 const gchar *sender_name G_GNUC_UNUSED, 13886 const gchar *signal_name, 13887 GVariant *parameters) 13888 { 13889 _ExtendedGDBusSignalInfo *info; 13890 GVariantIter iter; 13891 GVariant *child; 13892 GValue *paramv; 13893 guint num_params; 13894 guint n; 13895 guint signal_id; 13896 info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_control_bmc_interface_info.parent_struct, signal_name); 13897 if (info == NULL) 13898 return; 13899 num_params = g_variant_n_children (parameters); 13900 paramv = g_new0 (GValue, num_params + 1); 13901 g_value_init (¶mv[0], TYPE_CONTROL_BMC); 13902 g_value_set_object (¶mv[0], proxy); 13903 g_variant_iter_init (&iter, parameters); 13904 n = 1; 13905 while ((child = g_variant_iter_next_value (&iter)) != NULL) 13906 { 13907 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1]; 13908 if (arg_info->use_gvariant) 13909 { 13910 g_value_init (¶mv[n], G_TYPE_VARIANT); 13911 g_value_set_variant (¶mv[n], child); 13912 n++; 13913 } 13914 else 13915 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 13916 g_variant_unref (child); 13917 } 13918 signal_id = g_signal_lookup (info->signal_name, TYPE_CONTROL_BMC); 13919 g_signal_emitv (paramv, signal_id, 0, NULL); 13920 for (n = 0; n < num_params + 1; n++) 13921 g_value_unset (¶mv[n]); 13922 g_free (paramv); 13923 } 13924 13925 static void 13926 control_bmc_proxy_g_properties_changed (GDBusProxy *_proxy, 13927 GVariant *changed_properties, 13928 const gchar *const *invalidated_properties) 13929 { 13930 ControlBmcProxy *proxy = CONTROL_BMC_PROXY (_proxy); 13931 guint n; 13932 const gchar *key; 13933 GVariantIter *iter; 13934 _ExtendedGDBusPropertyInfo *info; 13935 g_variant_get (changed_properties, "a{sv}", &iter); 13936 while (g_variant_iter_next (iter, "{&sv}", &key, NULL)) 13937 { 13938 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_control_bmc_interface_info.parent_struct, key); 13939 g_datalist_remove_data (&proxy->priv->qdata, key); 13940 if (info != NULL) 13941 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 13942 } 13943 g_variant_iter_free (iter); 13944 for (n = 0; invalidated_properties[n] != NULL; n++) 13945 { 13946 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_control_bmc_interface_info.parent_struct, invalidated_properties[n]); 13947 g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]); 13948 if (info != NULL) 13949 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 13950 } 13951 } 13952 13953 static void 13954 control_bmc_proxy_init (ControlBmcProxy *proxy) 13955 { 13956 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 13957 proxy->priv = control_bmc_proxy_get_instance_private (proxy); 13958 #else 13959 proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, TYPE_CONTROL_BMC_PROXY, ControlBmcProxyPrivate); 13960 #endif 13961 13962 g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), control_bmc_interface_info ()); 13963 } 13964 13965 static void 13966 control_bmc_proxy_class_init (ControlBmcProxyClass *klass) 13967 { 13968 GObjectClass *gobject_class; 13969 GDBusProxyClass *proxy_class; 13970 13971 gobject_class = G_OBJECT_CLASS (klass); 13972 gobject_class->finalize = control_bmc_proxy_finalize; 13973 gobject_class->get_property = control_bmc_proxy_get_property; 13974 gobject_class->set_property = control_bmc_proxy_set_property; 13975 13976 proxy_class = G_DBUS_PROXY_CLASS (klass); 13977 proxy_class->g_signal = control_bmc_proxy_g_signal; 13978 proxy_class->g_properties_changed = control_bmc_proxy_g_properties_changed; 13979 13980 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 13981 g_type_class_add_private (klass, sizeof (ControlBmcProxyPrivate)); 13982 #endif 13983 } 13984 13985 static void 13986 control_bmc_proxy_iface_init (ControlBmcIface *iface) 13987 { 13988 } 13989 13990 /** 13991 * control_bmc_proxy_new: 13992 * @connection: A #GDBusConnection. 13993 * @flags: Flags from the #GDBusProxyFlags enumeration. 13994 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 13995 * @object_path: An object path. 13996 * @cancellable: (allow-none): A #GCancellable or %NULL. 13997 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 13998 * @user_data: User data to pass to @callback. 13999 * 14000 * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Bmc.top_of_page">org.openbmc.control.Bmc</link>. See g_dbus_proxy_new() for more details. 14001 * 14002 * 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. 14003 * You can then call control_bmc_proxy_new_finish() to get the result of the operation. 14004 * 14005 * See control_bmc_proxy_new_sync() for the synchronous, blocking version of this constructor. 14006 */ 14007 void 14008 control_bmc_proxy_new ( 14009 GDBusConnection *connection, 14010 GDBusProxyFlags flags, 14011 const gchar *name, 14012 const gchar *object_path, 14013 GCancellable *cancellable, 14014 GAsyncReadyCallback callback, 14015 gpointer user_data) 14016 { 14017 g_async_initable_new_async (TYPE_CONTROL_BMC_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.control.Bmc", NULL); 14018 } 14019 14020 /** 14021 * control_bmc_proxy_new_finish: 14022 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to control_bmc_proxy_new(). 14023 * @error: Return location for error or %NULL 14024 * 14025 * Finishes an operation started with control_bmc_proxy_new(). 14026 * 14027 * Returns: (transfer full) (type ControlBmcProxy): The constructed proxy object or %NULL if @error is set. 14028 */ 14029 ControlBmc * 14030 control_bmc_proxy_new_finish ( 14031 GAsyncResult *res, 14032 GError **error) 14033 { 14034 GObject *ret; 14035 GObject *source_object; 14036 source_object = g_async_result_get_source_object (res); 14037 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 14038 g_object_unref (source_object); 14039 if (ret != NULL) 14040 return CONTROL_BMC (ret); 14041 else 14042 return NULL; 14043 } 14044 14045 /** 14046 * control_bmc_proxy_new_sync: 14047 * @connection: A #GDBusConnection. 14048 * @flags: Flags from the #GDBusProxyFlags enumeration. 14049 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 14050 * @object_path: An object path. 14051 * @cancellable: (allow-none): A #GCancellable or %NULL. 14052 * @error: Return location for error or %NULL 14053 * 14054 * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Bmc.top_of_page">org.openbmc.control.Bmc</link>. See g_dbus_proxy_new_sync() for more details. 14055 * 14056 * The calling thread is blocked until a reply is received. 14057 * 14058 * See control_bmc_proxy_new() for the asynchronous version of this constructor. 14059 * 14060 * Returns: (transfer full) (type ControlBmcProxy): The constructed proxy object or %NULL if @error is set. 14061 */ 14062 ControlBmc * 14063 control_bmc_proxy_new_sync ( 14064 GDBusConnection *connection, 14065 GDBusProxyFlags flags, 14066 const gchar *name, 14067 const gchar *object_path, 14068 GCancellable *cancellable, 14069 GError **error) 14070 { 14071 GInitable *ret; 14072 ret = g_initable_new (TYPE_CONTROL_BMC_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.control.Bmc", NULL); 14073 if (ret != NULL) 14074 return CONTROL_BMC (ret); 14075 else 14076 return NULL; 14077 } 14078 14079 14080 /** 14081 * control_bmc_proxy_new_for_bus: 14082 * @bus_type: A #GBusType. 14083 * @flags: Flags from the #GDBusProxyFlags enumeration. 14084 * @name: A bus name (well-known or unique). 14085 * @object_path: An object path. 14086 * @cancellable: (allow-none): A #GCancellable or %NULL. 14087 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 14088 * @user_data: User data to pass to @callback. 14089 * 14090 * Like control_bmc_proxy_new() but takes a #GBusType instead of a #GDBusConnection. 14091 * 14092 * 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. 14093 * You can then call control_bmc_proxy_new_for_bus_finish() to get the result of the operation. 14094 * 14095 * See control_bmc_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor. 14096 */ 14097 void 14098 control_bmc_proxy_new_for_bus ( 14099 GBusType bus_type, 14100 GDBusProxyFlags flags, 14101 const gchar *name, 14102 const gchar *object_path, 14103 GCancellable *cancellable, 14104 GAsyncReadyCallback callback, 14105 gpointer user_data) 14106 { 14107 g_async_initable_new_async (TYPE_CONTROL_BMC_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.control.Bmc", NULL); 14108 } 14109 14110 /** 14111 * control_bmc_proxy_new_for_bus_finish: 14112 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to control_bmc_proxy_new_for_bus(). 14113 * @error: Return location for error or %NULL 14114 * 14115 * Finishes an operation started with control_bmc_proxy_new_for_bus(). 14116 * 14117 * Returns: (transfer full) (type ControlBmcProxy): The constructed proxy object or %NULL if @error is set. 14118 */ 14119 ControlBmc * 14120 control_bmc_proxy_new_for_bus_finish ( 14121 GAsyncResult *res, 14122 GError **error) 14123 { 14124 GObject *ret; 14125 GObject *source_object; 14126 source_object = g_async_result_get_source_object (res); 14127 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 14128 g_object_unref (source_object); 14129 if (ret != NULL) 14130 return CONTROL_BMC (ret); 14131 else 14132 return NULL; 14133 } 14134 14135 /** 14136 * control_bmc_proxy_new_for_bus_sync: 14137 * @bus_type: A #GBusType. 14138 * @flags: Flags from the #GDBusProxyFlags enumeration. 14139 * @name: A bus name (well-known or unique). 14140 * @object_path: An object path. 14141 * @cancellable: (allow-none): A #GCancellable or %NULL. 14142 * @error: Return location for error or %NULL 14143 * 14144 * Like control_bmc_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection. 14145 * 14146 * The calling thread is blocked until a reply is received. 14147 * 14148 * See control_bmc_proxy_new_for_bus() for the asynchronous version of this constructor. 14149 * 14150 * Returns: (transfer full) (type ControlBmcProxy): The constructed proxy object or %NULL if @error is set. 14151 */ 14152 ControlBmc * 14153 control_bmc_proxy_new_for_bus_sync ( 14154 GBusType bus_type, 14155 GDBusProxyFlags flags, 14156 const gchar *name, 14157 const gchar *object_path, 14158 GCancellable *cancellable, 14159 GError **error) 14160 { 14161 GInitable *ret; 14162 ret = g_initable_new (TYPE_CONTROL_BMC_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.control.Bmc", NULL); 14163 if (ret != NULL) 14164 return CONTROL_BMC (ret); 14165 else 14166 return NULL; 14167 } 14168 14169 14170 /* ------------------------------------------------------------------------ */ 14171 14172 /** 14173 * ControlBmcSkeleton: 14174 * 14175 * The #ControlBmcSkeleton structure contains only private data and should only be accessed using the provided API. 14176 */ 14177 14178 /** 14179 * ControlBmcSkeletonClass: 14180 * @parent_class: The parent class. 14181 * 14182 * Class structure for #ControlBmcSkeleton. 14183 */ 14184 14185 struct _ControlBmcSkeletonPrivate 14186 { 14187 GValue *properties; 14188 GList *changed_properties; 14189 GSource *changed_properties_idle_source; 14190 GMainContext *context; 14191 GMutex lock; 14192 }; 14193 14194 static void 14195 _control_bmc_skeleton_handle_method_call ( 14196 GDBusConnection *connection G_GNUC_UNUSED, 14197 const gchar *sender G_GNUC_UNUSED, 14198 const gchar *object_path G_GNUC_UNUSED, 14199 const gchar *interface_name, 14200 const gchar *method_name, 14201 GVariant *parameters, 14202 GDBusMethodInvocation *invocation, 14203 gpointer user_data) 14204 { 14205 ControlBmcSkeleton *skeleton = CONTROL_BMC_SKELETON (user_data); 14206 _ExtendedGDBusMethodInfo *info; 14207 GVariantIter iter; 14208 GVariant *child; 14209 GValue *paramv; 14210 guint num_params; 14211 guint num_extra; 14212 guint n; 14213 guint signal_id; 14214 GValue return_value = G_VALUE_INIT; 14215 info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation); 14216 g_assert (info != NULL); 14217 num_params = g_variant_n_children (parameters); 14218 num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra); 14219 n = 0; 14220 g_value_init (¶mv[n], TYPE_CONTROL_BMC); 14221 g_value_set_object (¶mv[n++], skeleton); 14222 g_value_init (¶mv[n], G_TYPE_DBUS_METHOD_INVOCATION); 14223 g_value_set_object (¶mv[n++], invocation); 14224 if (info->pass_fdlist) 14225 { 14226 #ifdef G_OS_UNIX 14227 g_value_init (¶mv[n], G_TYPE_UNIX_FD_LIST); 14228 g_value_set_object (¶mv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation))); 14229 #else 14230 g_assert_not_reached (); 14231 #endif 14232 } 14233 g_variant_iter_init (&iter, parameters); 14234 while ((child = g_variant_iter_next_value (&iter)) != NULL) 14235 { 14236 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra]; 14237 if (arg_info->use_gvariant) 14238 { 14239 g_value_init (¶mv[n], G_TYPE_VARIANT); 14240 g_value_set_variant (¶mv[n], child); 14241 n++; 14242 } 14243 else 14244 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 14245 g_variant_unref (child); 14246 } 14247 signal_id = g_signal_lookup (info->signal_name, TYPE_CONTROL_BMC); 14248 g_value_init (&return_value, G_TYPE_BOOLEAN); 14249 g_signal_emitv (paramv, signal_id, 0, &return_value); 14250 if (!g_value_get_boolean (&return_value)) 14251 g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name); 14252 g_value_unset (&return_value); 14253 for (n = 0; n < num_params + num_extra; n++) 14254 g_value_unset (¶mv[n]); 14255 g_free (paramv); 14256 } 14257 14258 static GVariant * 14259 _control_bmc_skeleton_handle_get_property ( 14260 GDBusConnection *connection G_GNUC_UNUSED, 14261 const gchar *sender G_GNUC_UNUSED, 14262 const gchar *object_path G_GNUC_UNUSED, 14263 const gchar *interface_name G_GNUC_UNUSED, 14264 const gchar *property_name, 14265 GError **error, 14266 gpointer user_data) 14267 { 14268 ControlBmcSkeleton *skeleton = CONTROL_BMC_SKELETON (user_data); 14269 GValue value = G_VALUE_INIT; 14270 GParamSpec *pspec; 14271 _ExtendedGDBusPropertyInfo *info; 14272 GVariant *ret; 14273 ret = NULL; 14274 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_control_bmc_interface_info.parent_struct, property_name); 14275 g_assert (info != NULL); 14276 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 14277 if (pspec == NULL) 14278 { 14279 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 14280 } 14281 else 14282 { 14283 g_value_init (&value, pspec->value_type); 14284 g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value); 14285 ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature)); 14286 g_value_unset (&value); 14287 } 14288 return ret; 14289 } 14290 14291 static gboolean 14292 _control_bmc_skeleton_handle_set_property ( 14293 GDBusConnection *connection G_GNUC_UNUSED, 14294 const gchar *sender G_GNUC_UNUSED, 14295 const gchar *object_path G_GNUC_UNUSED, 14296 const gchar *interface_name G_GNUC_UNUSED, 14297 const gchar *property_name, 14298 GVariant *variant, 14299 GError **error, 14300 gpointer user_data) 14301 { 14302 ControlBmcSkeleton *skeleton = CONTROL_BMC_SKELETON (user_data); 14303 GValue value = G_VALUE_INIT; 14304 GParamSpec *pspec; 14305 _ExtendedGDBusPropertyInfo *info; 14306 gboolean ret; 14307 ret = FALSE; 14308 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_control_bmc_interface_info.parent_struct, property_name); 14309 g_assert (info != NULL); 14310 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 14311 if (pspec == NULL) 14312 { 14313 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 14314 } 14315 else 14316 { 14317 if (info->use_gvariant) 14318 g_value_set_variant (&value, variant); 14319 else 14320 g_dbus_gvariant_to_gvalue (variant, &value); 14321 g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value); 14322 g_value_unset (&value); 14323 ret = TRUE; 14324 } 14325 return ret; 14326 } 14327 14328 static const GDBusInterfaceVTable _control_bmc_skeleton_vtable = 14329 { 14330 _control_bmc_skeleton_handle_method_call, 14331 _control_bmc_skeleton_handle_get_property, 14332 _control_bmc_skeleton_handle_set_property, 14333 {NULL} 14334 }; 14335 14336 static GDBusInterfaceInfo * 14337 control_bmc_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 14338 { 14339 return control_bmc_interface_info (); 14340 } 14341 14342 static GDBusInterfaceVTable * 14343 control_bmc_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 14344 { 14345 return (GDBusInterfaceVTable *) &_control_bmc_skeleton_vtable; 14346 } 14347 14348 static GVariant * 14349 control_bmc_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton) 14350 { 14351 ControlBmcSkeleton *skeleton = CONTROL_BMC_SKELETON (_skeleton); 14352 14353 GVariantBuilder builder; 14354 guint n; 14355 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 14356 if (_control_bmc_interface_info.parent_struct.properties == NULL) 14357 goto out; 14358 for (n = 0; _control_bmc_interface_info.parent_struct.properties[n] != NULL; n++) 14359 { 14360 GDBusPropertyInfo *info = _control_bmc_interface_info.parent_struct.properties[n]; 14361 if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE) 14362 { 14363 GVariant *value; 14364 value = _control_bmc_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.control.Bmc", info->name, NULL, skeleton); 14365 if (value != NULL) 14366 { 14367 g_variant_take_ref (value); 14368 g_variant_builder_add (&builder, "{sv}", info->name, value); 14369 g_variant_unref (value); 14370 } 14371 } 14372 } 14373 out: 14374 return g_variant_builder_end (&builder); 14375 } 14376 14377 static void 14378 control_bmc_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton) 14379 { 14380 } 14381 14382 static void control_bmc_skeleton_iface_init (ControlBmcIface *iface); 14383 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 14384 G_DEFINE_TYPE_WITH_CODE (ControlBmcSkeleton, control_bmc_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 14385 G_ADD_PRIVATE (ControlBmcSkeleton) 14386 G_IMPLEMENT_INTERFACE (TYPE_CONTROL_BMC, control_bmc_skeleton_iface_init)); 14387 14388 #else 14389 G_DEFINE_TYPE_WITH_CODE (ControlBmcSkeleton, control_bmc_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 14390 G_IMPLEMENT_INTERFACE (TYPE_CONTROL_BMC, control_bmc_skeleton_iface_init)); 14391 14392 #endif 14393 static void 14394 control_bmc_skeleton_finalize (GObject *object) 14395 { 14396 ControlBmcSkeleton *skeleton = CONTROL_BMC_SKELETON (object); 14397 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 14398 if (skeleton->priv->changed_properties_idle_source != NULL) 14399 g_source_destroy (skeleton->priv->changed_properties_idle_source); 14400 g_main_context_unref (skeleton->priv->context); 14401 g_mutex_clear (&skeleton->priv->lock); 14402 G_OBJECT_CLASS (control_bmc_skeleton_parent_class)->finalize (object); 14403 } 14404 14405 static void 14406 control_bmc_skeleton_init (ControlBmcSkeleton *skeleton) 14407 { 14408 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 14409 skeleton->priv = control_bmc_skeleton_get_instance_private (skeleton); 14410 #else 14411 skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, TYPE_CONTROL_BMC_SKELETON, ControlBmcSkeletonPrivate); 14412 #endif 14413 14414 g_mutex_init (&skeleton->priv->lock); 14415 skeleton->priv->context = g_main_context_ref_thread_default (); 14416 } 14417 14418 static void 14419 control_bmc_skeleton_class_init (ControlBmcSkeletonClass *klass) 14420 { 14421 GObjectClass *gobject_class; 14422 GDBusInterfaceSkeletonClass *skeleton_class; 14423 14424 gobject_class = G_OBJECT_CLASS (klass); 14425 gobject_class->finalize = control_bmc_skeleton_finalize; 14426 14427 skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass); 14428 skeleton_class->get_info = control_bmc_skeleton_dbus_interface_get_info; 14429 skeleton_class->get_properties = control_bmc_skeleton_dbus_interface_get_properties; 14430 skeleton_class->flush = control_bmc_skeleton_dbus_interface_flush; 14431 skeleton_class->get_vtable = control_bmc_skeleton_dbus_interface_get_vtable; 14432 14433 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 14434 g_type_class_add_private (klass, sizeof (ControlBmcSkeletonPrivate)); 14435 #endif 14436 } 14437 14438 static void 14439 control_bmc_skeleton_iface_init (ControlBmcIface *iface) 14440 { 14441 } 14442 14443 /** 14444 * control_bmc_skeleton_new: 14445 * 14446 * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Bmc.top_of_page">org.openbmc.control.Bmc</link>. 14447 * 14448 * Returns: (transfer full) (type ControlBmcSkeleton): The skeleton object. 14449 */ 14450 ControlBmc * 14451 control_bmc_skeleton_new (void) 14452 { 14453 return CONTROL_BMC (g_object_new (TYPE_CONTROL_BMC_SKELETON, NULL)); 14454 } 14455 14456 /* ------------------------------------------------------------------------ 14457 * Code for interface org.openbmc.control.Host 14458 * ------------------------------------------------------------------------ 14459 */ 14460 14461 /** 14462 * SECTION:ControlHost 14463 * @title: ControlHost 14464 * @short_description: Generated C code for the org.openbmc.control.Host D-Bus interface 14465 * 14466 * This section contains code for working with the <link linkend="gdbus-interface-org-openbmc-control-Host.top_of_page">org.openbmc.control.Host</link> D-Bus interface in C. 14467 */ 14468 14469 /* ---- Introspection data for org.openbmc.control.Host ---- */ 14470 14471 static const _ExtendedGDBusMethodInfo _control_host_method_info_boot = 14472 { 14473 { 14474 -1, 14475 (gchar *) "boot", 14476 NULL, 14477 NULL, 14478 NULL 14479 }, 14480 "handle-boot", 14481 FALSE 14482 }; 14483 14484 static const _ExtendedGDBusMethodInfo _control_host_method_info_shutdown = 14485 { 14486 { 14487 -1, 14488 (gchar *) "shutdown", 14489 NULL, 14490 NULL, 14491 NULL 14492 }, 14493 "handle-shutdown", 14494 FALSE 14495 }; 14496 14497 static const _ExtendedGDBusMethodInfo _control_host_method_info_reboot = 14498 { 14499 { 14500 -1, 14501 (gchar *) "reboot", 14502 NULL, 14503 NULL, 14504 NULL 14505 }, 14506 "handle-reboot", 14507 FALSE 14508 }; 14509 14510 static const _ExtendedGDBusMethodInfo * const _control_host_method_info_pointers[] = 14511 { 14512 &_control_host_method_info_boot, 14513 &_control_host_method_info_shutdown, 14514 &_control_host_method_info_reboot, 14515 NULL 14516 }; 14517 14518 static const _ExtendedGDBusSignalInfo _control_host_signal_info_booted = 14519 { 14520 { 14521 -1, 14522 (gchar *) "Booted", 14523 NULL, 14524 NULL 14525 }, 14526 "booted" 14527 }; 14528 14529 static const _ExtendedGDBusSignalInfo * const _control_host_signal_info_pointers[] = 14530 { 14531 &_control_host_signal_info_booted, 14532 NULL 14533 }; 14534 14535 static const _ExtendedGDBusPropertyInfo _control_host_property_info_debug_mode = 14536 { 14537 { 14538 -1, 14539 (gchar *) "debug_mode", 14540 (gchar *) "i", 14541 G_DBUS_PROPERTY_INFO_FLAGS_READABLE | G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE, 14542 NULL 14543 }, 14544 "debug-mode", 14545 FALSE 14546 }; 14547 14548 static const _ExtendedGDBusPropertyInfo _control_host_property_info_flash_side = 14549 { 14550 { 14551 -1, 14552 (gchar *) "flash_side", 14553 (gchar *) "s", 14554 G_DBUS_PROPERTY_INFO_FLAGS_READABLE | G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE, 14555 NULL 14556 }, 14557 "flash-side", 14558 FALSE 14559 }; 14560 14561 static const _ExtendedGDBusPropertyInfo * const _control_host_property_info_pointers[] = 14562 { 14563 &_control_host_property_info_debug_mode, 14564 &_control_host_property_info_flash_side, 14565 NULL 14566 }; 14567 14568 static const _ExtendedGDBusInterfaceInfo _control_host_interface_info = 14569 { 14570 { 14571 -1, 14572 (gchar *) "org.openbmc.control.Host", 14573 (GDBusMethodInfo **) &_control_host_method_info_pointers, 14574 (GDBusSignalInfo **) &_control_host_signal_info_pointers, 14575 (GDBusPropertyInfo **) &_control_host_property_info_pointers, 14576 NULL 14577 }, 14578 "control-host", 14579 }; 14580 14581 14582 /** 14583 * control_host_interface_info: 14584 * 14585 * Gets a machine-readable description of the <link linkend="gdbus-interface-org-openbmc-control-Host.top_of_page">org.openbmc.control.Host</link> D-Bus interface. 14586 * 14587 * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free. 14588 */ 14589 GDBusInterfaceInfo * 14590 control_host_interface_info (void) 14591 { 14592 return (GDBusInterfaceInfo *) &_control_host_interface_info.parent_struct; 14593 } 14594 14595 /** 14596 * control_host_override_properties: 14597 * @klass: The class structure for a #GObject<!-- -->-derived class. 14598 * @property_id_begin: The property id to assign to the first overridden property. 14599 * 14600 * Overrides all #GObject properties in the #ControlHost interface for a concrete class. 14601 * The properties are overridden in the order they are defined. 14602 * 14603 * Returns: The last property id. 14604 */ 14605 guint 14606 control_host_override_properties (GObjectClass *klass, guint property_id_begin) 14607 { 14608 g_object_class_override_property (klass, property_id_begin++, "debug-mode"); 14609 g_object_class_override_property (klass, property_id_begin++, "flash-side"); 14610 return property_id_begin - 1; 14611 } 14612 14613 14614 14615 /** 14616 * ControlHost: 14617 * 14618 * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Host.top_of_page">org.openbmc.control.Host</link>. 14619 */ 14620 14621 /** 14622 * ControlHostIface: 14623 * @parent_iface: The parent interface. 14624 * @handle_boot: Handler for the #ControlHost::handle-boot signal. 14625 * @handle_reboot: Handler for the #ControlHost::handle-reboot signal. 14626 * @handle_shutdown: Handler for the #ControlHost::handle-shutdown signal. 14627 * @get_debug_mode: Getter for the #ControlHost:debug-mode property. 14628 * @get_flash_side: Getter for the #ControlHost:flash-side property. 14629 * @booted: Handler for the #ControlHost::booted signal. 14630 * 14631 * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Host.top_of_page">org.openbmc.control.Host</link>. 14632 */ 14633 14634 typedef ControlHostIface ControlHostInterface; 14635 G_DEFINE_INTERFACE (ControlHost, control_host, G_TYPE_OBJECT); 14636 14637 static void 14638 control_host_default_init (ControlHostIface *iface) 14639 { 14640 /* GObject signals for incoming D-Bus method calls: */ 14641 /** 14642 * ControlHost::handle-boot: 14643 * @object: A #ControlHost. 14644 * @invocation: A #GDBusMethodInvocation. 14645 * 14646 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-control-Host.boot">boot()</link> D-Bus method. 14647 * 14648 * 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 control_host_complete_boot() 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. 14649 * 14650 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 14651 */ 14652 g_signal_new ("handle-boot", 14653 G_TYPE_FROM_INTERFACE (iface), 14654 G_SIGNAL_RUN_LAST, 14655 G_STRUCT_OFFSET (ControlHostIface, handle_boot), 14656 g_signal_accumulator_true_handled, 14657 NULL, 14658 g_cclosure_marshal_generic, 14659 G_TYPE_BOOLEAN, 14660 1, 14661 G_TYPE_DBUS_METHOD_INVOCATION); 14662 14663 /** 14664 * ControlHost::handle-shutdown: 14665 * @object: A #ControlHost. 14666 * @invocation: A #GDBusMethodInvocation. 14667 * 14668 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-control-Host.shutdown">shutdown()</link> D-Bus method. 14669 * 14670 * 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 control_host_complete_shutdown() 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. 14671 * 14672 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 14673 */ 14674 g_signal_new ("handle-shutdown", 14675 G_TYPE_FROM_INTERFACE (iface), 14676 G_SIGNAL_RUN_LAST, 14677 G_STRUCT_OFFSET (ControlHostIface, handle_shutdown), 14678 g_signal_accumulator_true_handled, 14679 NULL, 14680 g_cclosure_marshal_generic, 14681 G_TYPE_BOOLEAN, 14682 1, 14683 G_TYPE_DBUS_METHOD_INVOCATION); 14684 14685 /** 14686 * ControlHost::handle-reboot: 14687 * @object: A #ControlHost. 14688 * @invocation: A #GDBusMethodInvocation. 14689 * 14690 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-control-Host.reboot">reboot()</link> D-Bus method. 14691 * 14692 * 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 control_host_complete_reboot() 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. 14693 * 14694 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 14695 */ 14696 g_signal_new ("handle-reboot", 14697 G_TYPE_FROM_INTERFACE (iface), 14698 G_SIGNAL_RUN_LAST, 14699 G_STRUCT_OFFSET (ControlHostIface, handle_reboot), 14700 g_signal_accumulator_true_handled, 14701 NULL, 14702 g_cclosure_marshal_generic, 14703 G_TYPE_BOOLEAN, 14704 1, 14705 G_TYPE_DBUS_METHOD_INVOCATION); 14706 14707 /* GObject signals for received D-Bus signals: */ 14708 /** 14709 * ControlHost::booted: 14710 * @object: A #ControlHost. 14711 * 14712 * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-openbmc-control-Host.Booted">"Booted"</link> is received. 14713 * 14714 * 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. 14715 */ 14716 g_signal_new ("booted", 14717 G_TYPE_FROM_INTERFACE (iface), 14718 G_SIGNAL_RUN_LAST, 14719 G_STRUCT_OFFSET (ControlHostIface, booted), 14720 NULL, 14721 NULL, 14722 g_cclosure_marshal_generic, 14723 G_TYPE_NONE, 14724 0); 14725 14726 /* GObject properties for D-Bus properties: */ 14727 /** 14728 * ControlHost:debug-mode: 14729 * 14730 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-control-Host.debug_mode">"debug_mode"</link>. 14731 * 14732 * 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. 14733 */ 14734 g_object_interface_install_property (iface, 14735 g_param_spec_int ("debug-mode", "debug_mode", "debug_mode", G_MININT32, G_MAXINT32, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 14736 /** 14737 * ControlHost:flash-side: 14738 * 14739 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-control-Host.flash_side">"flash_side"</link>. 14740 * 14741 * 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. 14742 */ 14743 g_object_interface_install_property (iface, 14744 g_param_spec_string ("flash-side", "flash_side", "flash_side", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 14745 } 14746 14747 /** 14748 * control_host_get_debug_mode: (skip) 14749 * @object: A #ControlHost. 14750 * 14751 * Gets the value of the <link linkend="gdbus-property-org-openbmc-control-Host.debug_mode">"debug_mode"</link> D-Bus property. 14752 * 14753 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 14754 * 14755 * Returns: The property value. 14756 */ 14757 gint 14758 control_host_get_debug_mode (ControlHost *object) 14759 { 14760 return CONTROL_HOST_GET_IFACE (object)->get_debug_mode (object); 14761 } 14762 14763 /** 14764 * control_host_set_debug_mode: (skip) 14765 * @object: A #ControlHost. 14766 * @value: The value to set. 14767 * 14768 * Sets the <link linkend="gdbus-property-org-openbmc-control-Host.debug_mode">"debug_mode"</link> D-Bus property to @value. 14769 * 14770 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 14771 */ 14772 void 14773 control_host_set_debug_mode (ControlHost *object, gint value) 14774 { 14775 g_object_set (G_OBJECT (object), "debug-mode", value, NULL); 14776 } 14777 14778 /** 14779 * control_host_get_flash_side: (skip) 14780 * @object: A #ControlHost. 14781 * 14782 * Gets the value of the <link linkend="gdbus-property-org-openbmc-control-Host.flash_side">"flash_side"</link> D-Bus property. 14783 * 14784 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 14785 * 14786 * <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 control_host_dup_flash_side() if on another thread.</warning> 14787 * 14788 * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object. 14789 */ 14790 const gchar * 14791 control_host_get_flash_side (ControlHost *object) 14792 { 14793 return CONTROL_HOST_GET_IFACE (object)->get_flash_side (object); 14794 } 14795 14796 /** 14797 * control_host_dup_flash_side: (skip) 14798 * @object: A #ControlHost. 14799 * 14800 * Gets a copy of the <link linkend="gdbus-property-org-openbmc-control-Host.flash_side">"flash_side"</link> D-Bus property. 14801 * 14802 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 14803 * 14804 * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value should be freed with g_free(). 14805 */ 14806 gchar * 14807 control_host_dup_flash_side (ControlHost *object) 14808 { 14809 gchar *value; 14810 g_object_get (G_OBJECT (object), "flash-side", &value, NULL); 14811 return value; 14812 } 14813 14814 /** 14815 * control_host_set_flash_side: (skip) 14816 * @object: A #ControlHost. 14817 * @value: The value to set. 14818 * 14819 * Sets the <link linkend="gdbus-property-org-openbmc-control-Host.flash_side">"flash_side"</link> D-Bus property to @value. 14820 * 14821 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 14822 */ 14823 void 14824 control_host_set_flash_side (ControlHost *object, const gchar *value) 14825 { 14826 g_object_set (G_OBJECT (object), "flash-side", value, NULL); 14827 } 14828 14829 /** 14830 * control_host_emit_booted: 14831 * @object: A #ControlHost. 14832 * 14833 * Emits the <link linkend="gdbus-signal-org-openbmc-control-Host.Booted">"Booted"</link> D-Bus signal. 14834 */ 14835 void 14836 control_host_emit_booted ( 14837 ControlHost *object) 14838 { 14839 g_signal_emit_by_name (object, "booted"); 14840 } 14841 14842 /** 14843 * control_host_call_boot: 14844 * @proxy: A #ControlHostProxy. 14845 * @cancellable: (allow-none): A #GCancellable or %NULL. 14846 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 14847 * @user_data: User data to pass to @callback. 14848 * 14849 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-control-Host.boot">boot()</link> D-Bus method on @proxy. 14850 * 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. 14851 * You can then call control_host_call_boot_finish() to get the result of the operation. 14852 * 14853 * See control_host_call_boot_sync() for the synchronous, blocking version of this method. 14854 */ 14855 void 14856 control_host_call_boot ( 14857 ControlHost *proxy, 14858 GCancellable *cancellable, 14859 GAsyncReadyCallback callback, 14860 gpointer user_data) 14861 { 14862 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 14863 "boot", 14864 g_variant_new ("()"), 14865 G_DBUS_CALL_FLAGS_NONE, 14866 -1, 14867 cancellable, 14868 callback, 14869 user_data); 14870 } 14871 14872 /** 14873 * control_host_call_boot_finish: 14874 * @proxy: A #ControlHostProxy. 14875 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to control_host_call_boot(). 14876 * @error: Return location for error or %NULL. 14877 * 14878 * Finishes an operation started with control_host_call_boot(). 14879 * 14880 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 14881 */ 14882 gboolean 14883 control_host_call_boot_finish ( 14884 ControlHost *proxy, 14885 GAsyncResult *res, 14886 GError **error) 14887 { 14888 GVariant *_ret; 14889 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 14890 if (_ret == NULL) 14891 goto _out; 14892 g_variant_get (_ret, 14893 "()"); 14894 g_variant_unref (_ret); 14895 _out: 14896 return _ret != NULL; 14897 } 14898 14899 /** 14900 * control_host_call_boot_sync: 14901 * @proxy: A #ControlHostProxy. 14902 * @cancellable: (allow-none): A #GCancellable or %NULL. 14903 * @error: Return location for error or %NULL. 14904 * 14905 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-control-Host.boot">boot()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 14906 * 14907 * See control_host_call_boot() for the asynchronous version of this method. 14908 * 14909 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 14910 */ 14911 gboolean 14912 control_host_call_boot_sync ( 14913 ControlHost *proxy, 14914 GCancellable *cancellable, 14915 GError **error) 14916 { 14917 GVariant *_ret; 14918 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 14919 "boot", 14920 g_variant_new ("()"), 14921 G_DBUS_CALL_FLAGS_NONE, 14922 -1, 14923 cancellable, 14924 error); 14925 if (_ret == NULL) 14926 goto _out; 14927 g_variant_get (_ret, 14928 "()"); 14929 g_variant_unref (_ret); 14930 _out: 14931 return _ret != NULL; 14932 } 14933 14934 /** 14935 * control_host_call_shutdown: 14936 * @proxy: A #ControlHostProxy. 14937 * @cancellable: (allow-none): A #GCancellable or %NULL. 14938 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 14939 * @user_data: User data to pass to @callback. 14940 * 14941 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-control-Host.shutdown">shutdown()</link> D-Bus method on @proxy. 14942 * 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. 14943 * You can then call control_host_call_shutdown_finish() to get the result of the operation. 14944 * 14945 * See control_host_call_shutdown_sync() for the synchronous, blocking version of this method. 14946 */ 14947 void 14948 control_host_call_shutdown ( 14949 ControlHost *proxy, 14950 GCancellable *cancellable, 14951 GAsyncReadyCallback callback, 14952 gpointer user_data) 14953 { 14954 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 14955 "shutdown", 14956 g_variant_new ("()"), 14957 G_DBUS_CALL_FLAGS_NONE, 14958 -1, 14959 cancellable, 14960 callback, 14961 user_data); 14962 } 14963 14964 /** 14965 * control_host_call_shutdown_finish: 14966 * @proxy: A #ControlHostProxy. 14967 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to control_host_call_shutdown(). 14968 * @error: Return location for error or %NULL. 14969 * 14970 * Finishes an operation started with control_host_call_shutdown(). 14971 * 14972 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 14973 */ 14974 gboolean 14975 control_host_call_shutdown_finish ( 14976 ControlHost *proxy, 14977 GAsyncResult *res, 14978 GError **error) 14979 { 14980 GVariant *_ret; 14981 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 14982 if (_ret == NULL) 14983 goto _out; 14984 g_variant_get (_ret, 14985 "()"); 14986 g_variant_unref (_ret); 14987 _out: 14988 return _ret != NULL; 14989 } 14990 14991 /** 14992 * control_host_call_shutdown_sync: 14993 * @proxy: A #ControlHostProxy. 14994 * @cancellable: (allow-none): A #GCancellable or %NULL. 14995 * @error: Return location for error or %NULL. 14996 * 14997 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-control-Host.shutdown">shutdown()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 14998 * 14999 * See control_host_call_shutdown() for the asynchronous version of this method. 15000 * 15001 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 15002 */ 15003 gboolean 15004 control_host_call_shutdown_sync ( 15005 ControlHost *proxy, 15006 GCancellable *cancellable, 15007 GError **error) 15008 { 15009 GVariant *_ret; 15010 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 15011 "shutdown", 15012 g_variant_new ("()"), 15013 G_DBUS_CALL_FLAGS_NONE, 15014 -1, 15015 cancellable, 15016 error); 15017 if (_ret == NULL) 15018 goto _out; 15019 g_variant_get (_ret, 15020 "()"); 15021 g_variant_unref (_ret); 15022 _out: 15023 return _ret != NULL; 15024 } 15025 15026 /** 15027 * control_host_call_reboot: 15028 * @proxy: A #ControlHostProxy. 15029 * @cancellable: (allow-none): A #GCancellable or %NULL. 15030 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 15031 * @user_data: User data to pass to @callback. 15032 * 15033 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-control-Host.reboot">reboot()</link> D-Bus method on @proxy. 15034 * 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. 15035 * You can then call control_host_call_reboot_finish() to get the result of the operation. 15036 * 15037 * See control_host_call_reboot_sync() for the synchronous, blocking version of this method. 15038 */ 15039 void 15040 control_host_call_reboot ( 15041 ControlHost *proxy, 15042 GCancellable *cancellable, 15043 GAsyncReadyCallback callback, 15044 gpointer user_data) 15045 { 15046 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 15047 "reboot", 15048 g_variant_new ("()"), 15049 G_DBUS_CALL_FLAGS_NONE, 15050 -1, 15051 cancellable, 15052 callback, 15053 user_data); 15054 } 15055 15056 /** 15057 * control_host_call_reboot_finish: 15058 * @proxy: A #ControlHostProxy. 15059 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to control_host_call_reboot(). 15060 * @error: Return location for error or %NULL. 15061 * 15062 * Finishes an operation started with control_host_call_reboot(). 15063 * 15064 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 15065 */ 15066 gboolean 15067 control_host_call_reboot_finish ( 15068 ControlHost *proxy, 15069 GAsyncResult *res, 15070 GError **error) 15071 { 15072 GVariant *_ret; 15073 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 15074 if (_ret == NULL) 15075 goto _out; 15076 g_variant_get (_ret, 15077 "()"); 15078 g_variant_unref (_ret); 15079 _out: 15080 return _ret != NULL; 15081 } 15082 15083 /** 15084 * control_host_call_reboot_sync: 15085 * @proxy: A #ControlHostProxy. 15086 * @cancellable: (allow-none): A #GCancellable or %NULL. 15087 * @error: Return location for error or %NULL. 15088 * 15089 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-control-Host.reboot">reboot()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 15090 * 15091 * See control_host_call_reboot() for the asynchronous version of this method. 15092 * 15093 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 15094 */ 15095 gboolean 15096 control_host_call_reboot_sync ( 15097 ControlHost *proxy, 15098 GCancellable *cancellable, 15099 GError **error) 15100 { 15101 GVariant *_ret; 15102 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 15103 "reboot", 15104 g_variant_new ("()"), 15105 G_DBUS_CALL_FLAGS_NONE, 15106 -1, 15107 cancellable, 15108 error); 15109 if (_ret == NULL) 15110 goto _out; 15111 g_variant_get (_ret, 15112 "()"); 15113 g_variant_unref (_ret); 15114 _out: 15115 return _ret != NULL; 15116 } 15117 15118 /** 15119 * control_host_complete_boot: 15120 * @object: A #ControlHost. 15121 * @invocation: (transfer full): A #GDBusMethodInvocation. 15122 * 15123 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-control-Host.boot">boot()</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. 15124 * 15125 * This method will free @invocation, you cannot use it afterwards. 15126 */ 15127 void 15128 control_host_complete_boot ( 15129 ControlHost *object, 15130 GDBusMethodInvocation *invocation) 15131 { 15132 g_dbus_method_invocation_return_value (invocation, 15133 g_variant_new ("()")); 15134 } 15135 15136 /** 15137 * control_host_complete_shutdown: 15138 * @object: A #ControlHost. 15139 * @invocation: (transfer full): A #GDBusMethodInvocation. 15140 * 15141 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-control-Host.shutdown">shutdown()</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. 15142 * 15143 * This method will free @invocation, you cannot use it afterwards. 15144 */ 15145 void 15146 control_host_complete_shutdown ( 15147 ControlHost *object, 15148 GDBusMethodInvocation *invocation) 15149 { 15150 g_dbus_method_invocation_return_value (invocation, 15151 g_variant_new ("()")); 15152 } 15153 15154 /** 15155 * control_host_complete_reboot: 15156 * @object: A #ControlHost. 15157 * @invocation: (transfer full): A #GDBusMethodInvocation. 15158 * 15159 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-control-Host.reboot">reboot()</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. 15160 * 15161 * This method will free @invocation, you cannot use it afterwards. 15162 */ 15163 void 15164 control_host_complete_reboot ( 15165 ControlHost *object, 15166 GDBusMethodInvocation *invocation) 15167 { 15168 g_dbus_method_invocation_return_value (invocation, 15169 g_variant_new ("()")); 15170 } 15171 15172 /* ------------------------------------------------------------------------ */ 15173 15174 /** 15175 * ControlHostProxy: 15176 * 15177 * The #ControlHostProxy structure contains only private data and should only be accessed using the provided API. 15178 */ 15179 15180 /** 15181 * ControlHostProxyClass: 15182 * @parent_class: The parent class. 15183 * 15184 * Class structure for #ControlHostProxy. 15185 */ 15186 15187 struct _ControlHostProxyPrivate 15188 { 15189 GData *qdata; 15190 }; 15191 15192 static void control_host_proxy_iface_init (ControlHostIface *iface); 15193 15194 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 15195 G_DEFINE_TYPE_WITH_CODE (ControlHostProxy, control_host_proxy, G_TYPE_DBUS_PROXY, 15196 G_ADD_PRIVATE (ControlHostProxy) 15197 G_IMPLEMENT_INTERFACE (TYPE_CONTROL_HOST, control_host_proxy_iface_init)); 15198 15199 #else 15200 G_DEFINE_TYPE_WITH_CODE (ControlHostProxy, control_host_proxy, G_TYPE_DBUS_PROXY, 15201 G_IMPLEMENT_INTERFACE (TYPE_CONTROL_HOST, control_host_proxy_iface_init)); 15202 15203 #endif 15204 static void 15205 control_host_proxy_finalize (GObject *object) 15206 { 15207 ControlHostProxy *proxy = CONTROL_HOST_PROXY (object); 15208 g_datalist_clear (&proxy->priv->qdata); 15209 G_OBJECT_CLASS (control_host_proxy_parent_class)->finalize (object); 15210 } 15211 15212 static void 15213 control_host_proxy_get_property (GObject *object, 15214 guint prop_id, 15215 GValue *value, 15216 GParamSpec *pspec G_GNUC_UNUSED) 15217 { 15218 const _ExtendedGDBusPropertyInfo *info; 15219 GVariant *variant; 15220 g_assert (prop_id != 0 && prop_id - 1 < 2); 15221 info = _control_host_property_info_pointers[prop_id - 1]; 15222 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (object), info->parent_struct.name); 15223 if (info->use_gvariant) 15224 { 15225 g_value_set_variant (value, variant); 15226 } 15227 else 15228 { 15229 if (variant != NULL) 15230 g_dbus_gvariant_to_gvalue (variant, value); 15231 } 15232 if (variant != NULL) 15233 g_variant_unref (variant); 15234 } 15235 15236 static void 15237 control_host_proxy_set_property_cb (GDBusProxy *proxy, 15238 GAsyncResult *res, 15239 gpointer user_data) 15240 { 15241 const _ExtendedGDBusPropertyInfo *info = user_data; 15242 GError *error; 15243 GVariant *_ret; 15244 error = NULL; 15245 _ret = g_dbus_proxy_call_finish (proxy, res, &error); 15246 if (!_ret) 15247 { 15248 g_warning ("Error setting property '%s' on interface org.openbmc.control.Host: %s (%s, %d)", 15249 info->parent_struct.name, 15250 error->message, g_quark_to_string (error->domain), error->code); 15251 g_error_free (error); 15252 } 15253 else 15254 { 15255 g_variant_unref (_ret); 15256 } 15257 } 15258 15259 static void 15260 control_host_proxy_set_property (GObject *object, 15261 guint prop_id, 15262 const GValue *value, 15263 GParamSpec *pspec G_GNUC_UNUSED) 15264 { 15265 const _ExtendedGDBusPropertyInfo *info; 15266 GVariant *variant; 15267 g_assert (prop_id != 0 && prop_id - 1 < 2); 15268 info = _control_host_property_info_pointers[prop_id - 1]; 15269 variant = g_dbus_gvalue_to_gvariant (value, G_VARIANT_TYPE (info->parent_struct.signature)); 15270 g_dbus_proxy_call (G_DBUS_PROXY (object), 15271 "org.freedesktop.DBus.Properties.Set", 15272 g_variant_new ("(ssv)", "org.openbmc.control.Host", info->parent_struct.name, variant), 15273 G_DBUS_CALL_FLAGS_NONE, 15274 -1, 15275 NULL, (GAsyncReadyCallback) control_host_proxy_set_property_cb, (GDBusPropertyInfo *) &info->parent_struct); 15276 g_variant_unref (variant); 15277 } 15278 15279 static void 15280 control_host_proxy_g_signal (GDBusProxy *proxy, 15281 const gchar *sender_name G_GNUC_UNUSED, 15282 const gchar *signal_name, 15283 GVariant *parameters) 15284 { 15285 _ExtendedGDBusSignalInfo *info; 15286 GVariantIter iter; 15287 GVariant *child; 15288 GValue *paramv; 15289 guint num_params; 15290 guint n; 15291 guint signal_id; 15292 info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_control_host_interface_info.parent_struct, signal_name); 15293 if (info == NULL) 15294 return; 15295 num_params = g_variant_n_children (parameters); 15296 paramv = g_new0 (GValue, num_params + 1); 15297 g_value_init (¶mv[0], TYPE_CONTROL_HOST); 15298 g_value_set_object (¶mv[0], proxy); 15299 g_variant_iter_init (&iter, parameters); 15300 n = 1; 15301 while ((child = g_variant_iter_next_value (&iter)) != NULL) 15302 { 15303 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1]; 15304 if (arg_info->use_gvariant) 15305 { 15306 g_value_init (¶mv[n], G_TYPE_VARIANT); 15307 g_value_set_variant (¶mv[n], child); 15308 n++; 15309 } 15310 else 15311 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 15312 g_variant_unref (child); 15313 } 15314 signal_id = g_signal_lookup (info->signal_name, TYPE_CONTROL_HOST); 15315 g_signal_emitv (paramv, signal_id, 0, NULL); 15316 for (n = 0; n < num_params + 1; n++) 15317 g_value_unset (¶mv[n]); 15318 g_free (paramv); 15319 } 15320 15321 static void 15322 control_host_proxy_g_properties_changed (GDBusProxy *_proxy, 15323 GVariant *changed_properties, 15324 const gchar *const *invalidated_properties) 15325 { 15326 ControlHostProxy *proxy = CONTROL_HOST_PROXY (_proxy); 15327 guint n; 15328 const gchar *key; 15329 GVariantIter *iter; 15330 _ExtendedGDBusPropertyInfo *info; 15331 g_variant_get (changed_properties, "a{sv}", &iter); 15332 while (g_variant_iter_next (iter, "{&sv}", &key, NULL)) 15333 { 15334 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_control_host_interface_info.parent_struct, key); 15335 g_datalist_remove_data (&proxy->priv->qdata, key); 15336 if (info != NULL) 15337 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 15338 } 15339 g_variant_iter_free (iter); 15340 for (n = 0; invalidated_properties[n] != NULL; n++) 15341 { 15342 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_control_host_interface_info.parent_struct, invalidated_properties[n]); 15343 g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]); 15344 if (info != NULL) 15345 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 15346 } 15347 } 15348 15349 static gint 15350 control_host_proxy_get_debug_mode (ControlHost *object) 15351 { 15352 ControlHostProxy *proxy = CONTROL_HOST_PROXY (object); 15353 GVariant *variant; 15354 gint value = 0; 15355 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "debug_mode"); 15356 if (variant != NULL) 15357 { 15358 value = g_variant_get_int32 (variant); 15359 g_variant_unref (variant); 15360 } 15361 return value; 15362 } 15363 15364 static const gchar * 15365 control_host_proxy_get_flash_side (ControlHost *object) 15366 { 15367 ControlHostProxy *proxy = CONTROL_HOST_PROXY (object); 15368 GVariant *variant; 15369 const gchar *value = NULL; 15370 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "flash_side"); 15371 if (variant != NULL) 15372 { 15373 value = g_variant_get_string (variant, NULL); 15374 g_variant_unref (variant); 15375 } 15376 return value; 15377 } 15378 15379 static void 15380 control_host_proxy_init (ControlHostProxy *proxy) 15381 { 15382 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 15383 proxy->priv = control_host_proxy_get_instance_private (proxy); 15384 #else 15385 proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, TYPE_CONTROL_HOST_PROXY, ControlHostProxyPrivate); 15386 #endif 15387 15388 g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), control_host_interface_info ()); 15389 } 15390 15391 static void 15392 control_host_proxy_class_init (ControlHostProxyClass *klass) 15393 { 15394 GObjectClass *gobject_class; 15395 GDBusProxyClass *proxy_class; 15396 15397 gobject_class = G_OBJECT_CLASS (klass); 15398 gobject_class->finalize = control_host_proxy_finalize; 15399 gobject_class->get_property = control_host_proxy_get_property; 15400 gobject_class->set_property = control_host_proxy_set_property; 15401 15402 proxy_class = G_DBUS_PROXY_CLASS (klass); 15403 proxy_class->g_signal = control_host_proxy_g_signal; 15404 proxy_class->g_properties_changed = control_host_proxy_g_properties_changed; 15405 15406 control_host_override_properties (gobject_class, 1); 15407 15408 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 15409 g_type_class_add_private (klass, sizeof (ControlHostProxyPrivate)); 15410 #endif 15411 } 15412 15413 static void 15414 control_host_proxy_iface_init (ControlHostIface *iface) 15415 { 15416 iface->get_debug_mode = control_host_proxy_get_debug_mode; 15417 iface->get_flash_side = control_host_proxy_get_flash_side; 15418 } 15419 15420 /** 15421 * control_host_proxy_new: 15422 * @connection: A #GDBusConnection. 15423 * @flags: Flags from the #GDBusProxyFlags enumeration. 15424 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 15425 * @object_path: An object path. 15426 * @cancellable: (allow-none): A #GCancellable or %NULL. 15427 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 15428 * @user_data: User data to pass to @callback. 15429 * 15430 * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Host.top_of_page">org.openbmc.control.Host</link>. See g_dbus_proxy_new() for more details. 15431 * 15432 * 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. 15433 * You can then call control_host_proxy_new_finish() to get the result of the operation. 15434 * 15435 * See control_host_proxy_new_sync() for the synchronous, blocking version of this constructor. 15436 */ 15437 void 15438 control_host_proxy_new ( 15439 GDBusConnection *connection, 15440 GDBusProxyFlags flags, 15441 const gchar *name, 15442 const gchar *object_path, 15443 GCancellable *cancellable, 15444 GAsyncReadyCallback callback, 15445 gpointer user_data) 15446 { 15447 g_async_initable_new_async (TYPE_CONTROL_HOST_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.control.Host", NULL); 15448 } 15449 15450 /** 15451 * control_host_proxy_new_finish: 15452 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to control_host_proxy_new(). 15453 * @error: Return location for error or %NULL 15454 * 15455 * Finishes an operation started with control_host_proxy_new(). 15456 * 15457 * Returns: (transfer full) (type ControlHostProxy): The constructed proxy object or %NULL if @error is set. 15458 */ 15459 ControlHost * 15460 control_host_proxy_new_finish ( 15461 GAsyncResult *res, 15462 GError **error) 15463 { 15464 GObject *ret; 15465 GObject *source_object; 15466 source_object = g_async_result_get_source_object (res); 15467 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 15468 g_object_unref (source_object); 15469 if (ret != NULL) 15470 return CONTROL_HOST (ret); 15471 else 15472 return NULL; 15473 } 15474 15475 /** 15476 * control_host_proxy_new_sync: 15477 * @connection: A #GDBusConnection. 15478 * @flags: Flags from the #GDBusProxyFlags enumeration. 15479 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 15480 * @object_path: An object path. 15481 * @cancellable: (allow-none): A #GCancellable or %NULL. 15482 * @error: Return location for error or %NULL 15483 * 15484 * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Host.top_of_page">org.openbmc.control.Host</link>. See g_dbus_proxy_new_sync() for more details. 15485 * 15486 * The calling thread is blocked until a reply is received. 15487 * 15488 * See control_host_proxy_new() for the asynchronous version of this constructor. 15489 * 15490 * Returns: (transfer full) (type ControlHostProxy): The constructed proxy object or %NULL if @error is set. 15491 */ 15492 ControlHost * 15493 control_host_proxy_new_sync ( 15494 GDBusConnection *connection, 15495 GDBusProxyFlags flags, 15496 const gchar *name, 15497 const gchar *object_path, 15498 GCancellable *cancellable, 15499 GError **error) 15500 { 15501 GInitable *ret; 15502 ret = g_initable_new (TYPE_CONTROL_HOST_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.control.Host", NULL); 15503 if (ret != NULL) 15504 return CONTROL_HOST (ret); 15505 else 15506 return NULL; 15507 } 15508 15509 15510 /** 15511 * control_host_proxy_new_for_bus: 15512 * @bus_type: A #GBusType. 15513 * @flags: Flags from the #GDBusProxyFlags enumeration. 15514 * @name: A bus name (well-known or unique). 15515 * @object_path: An object path. 15516 * @cancellable: (allow-none): A #GCancellable or %NULL. 15517 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 15518 * @user_data: User data to pass to @callback. 15519 * 15520 * Like control_host_proxy_new() but takes a #GBusType instead of a #GDBusConnection. 15521 * 15522 * 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. 15523 * You can then call control_host_proxy_new_for_bus_finish() to get the result of the operation. 15524 * 15525 * See control_host_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor. 15526 */ 15527 void 15528 control_host_proxy_new_for_bus ( 15529 GBusType bus_type, 15530 GDBusProxyFlags flags, 15531 const gchar *name, 15532 const gchar *object_path, 15533 GCancellable *cancellable, 15534 GAsyncReadyCallback callback, 15535 gpointer user_data) 15536 { 15537 g_async_initable_new_async (TYPE_CONTROL_HOST_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.control.Host", NULL); 15538 } 15539 15540 /** 15541 * control_host_proxy_new_for_bus_finish: 15542 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to control_host_proxy_new_for_bus(). 15543 * @error: Return location for error or %NULL 15544 * 15545 * Finishes an operation started with control_host_proxy_new_for_bus(). 15546 * 15547 * Returns: (transfer full) (type ControlHostProxy): The constructed proxy object or %NULL if @error is set. 15548 */ 15549 ControlHost * 15550 control_host_proxy_new_for_bus_finish ( 15551 GAsyncResult *res, 15552 GError **error) 15553 { 15554 GObject *ret; 15555 GObject *source_object; 15556 source_object = g_async_result_get_source_object (res); 15557 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 15558 g_object_unref (source_object); 15559 if (ret != NULL) 15560 return CONTROL_HOST (ret); 15561 else 15562 return NULL; 15563 } 15564 15565 /** 15566 * control_host_proxy_new_for_bus_sync: 15567 * @bus_type: A #GBusType. 15568 * @flags: Flags from the #GDBusProxyFlags enumeration. 15569 * @name: A bus name (well-known or unique). 15570 * @object_path: An object path. 15571 * @cancellable: (allow-none): A #GCancellable or %NULL. 15572 * @error: Return location for error or %NULL 15573 * 15574 * Like control_host_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection. 15575 * 15576 * The calling thread is blocked until a reply is received. 15577 * 15578 * See control_host_proxy_new_for_bus() for the asynchronous version of this constructor. 15579 * 15580 * Returns: (transfer full) (type ControlHostProxy): The constructed proxy object or %NULL if @error is set. 15581 */ 15582 ControlHost * 15583 control_host_proxy_new_for_bus_sync ( 15584 GBusType bus_type, 15585 GDBusProxyFlags flags, 15586 const gchar *name, 15587 const gchar *object_path, 15588 GCancellable *cancellable, 15589 GError **error) 15590 { 15591 GInitable *ret; 15592 ret = g_initable_new (TYPE_CONTROL_HOST_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.control.Host", NULL); 15593 if (ret != NULL) 15594 return CONTROL_HOST (ret); 15595 else 15596 return NULL; 15597 } 15598 15599 15600 /* ------------------------------------------------------------------------ */ 15601 15602 /** 15603 * ControlHostSkeleton: 15604 * 15605 * The #ControlHostSkeleton structure contains only private data and should only be accessed using the provided API. 15606 */ 15607 15608 /** 15609 * ControlHostSkeletonClass: 15610 * @parent_class: The parent class. 15611 * 15612 * Class structure for #ControlHostSkeleton. 15613 */ 15614 15615 struct _ControlHostSkeletonPrivate 15616 { 15617 GValue *properties; 15618 GList *changed_properties; 15619 GSource *changed_properties_idle_source; 15620 GMainContext *context; 15621 GMutex lock; 15622 }; 15623 15624 static void 15625 _control_host_skeleton_handle_method_call ( 15626 GDBusConnection *connection G_GNUC_UNUSED, 15627 const gchar *sender G_GNUC_UNUSED, 15628 const gchar *object_path G_GNUC_UNUSED, 15629 const gchar *interface_name, 15630 const gchar *method_name, 15631 GVariant *parameters, 15632 GDBusMethodInvocation *invocation, 15633 gpointer user_data) 15634 { 15635 ControlHostSkeleton *skeleton = CONTROL_HOST_SKELETON (user_data); 15636 _ExtendedGDBusMethodInfo *info; 15637 GVariantIter iter; 15638 GVariant *child; 15639 GValue *paramv; 15640 guint num_params; 15641 guint num_extra; 15642 guint n; 15643 guint signal_id; 15644 GValue return_value = G_VALUE_INIT; 15645 info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation); 15646 g_assert (info != NULL); 15647 num_params = g_variant_n_children (parameters); 15648 num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra); 15649 n = 0; 15650 g_value_init (¶mv[n], TYPE_CONTROL_HOST); 15651 g_value_set_object (¶mv[n++], skeleton); 15652 g_value_init (¶mv[n], G_TYPE_DBUS_METHOD_INVOCATION); 15653 g_value_set_object (¶mv[n++], invocation); 15654 if (info->pass_fdlist) 15655 { 15656 #ifdef G_OS_UNIX 15657 g_value_init (¶mv[n], G_TYPE_UNIX_FD_LIST); 15658 g_value_set_object (¶mv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation))); 15659 #else 15660 g_assert_not_reached (); 15661 #endif 15662 } 15663 g_variant_iter_init (&iter, parameters); 15664 while ((child = g_variant_iter_next_value (&iter)) != NULL) 15665 { 15666 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra]; 15667 if (arg_info->use_gvariant) 15668 { 15669 g_value_init (¶mv[n], G_TYPE_VARIANT); 15670 g_value_set_variant (¶mv[n], child); 15671 n++; 15672 } 15673 else 15674 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 15675 g_variant_unref (child); 15676 } 15677 signal_id = g_signal_lookup (info->signal_name, TYPE_CONTROL_HOST); 15678 g_value_init (&return_value, G_TYPE_BOOLEAN); 15679 g_signal_emitv (paramv, signal_id, 0, &return_value); 15680 if (!g_value_get_boolean (&return_value)) 15681 g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name); 15682 g_value_unset (&return_value); 15683 for (n = 0; n < num_params + num_extra; n++) 15684 g_value_unset (¶mv[n]); 15685 g_free (paramv); 15686 } 15687 15688 static GVariant * 15689 _control_host_skeleton_handle_get_property ( 15690 GDBusConnection *connection G_GNUC_UNUSED, 15691 const gchar *sender G_GNUC_UNUSED, 15692 const gchar *object_path G_GNUC_UNUSED, 15693 const gchar *interface_name G_GNUC_UNUSED, 15694 const gchar *property_name, 15695 GError **error, 15696 gpointer user_data) 15697 { 15698 ControlHostSkeleton *skeleton = CONTROL_HOST_SKELETON (user_data); 15699 GValue value = G_VALUE_INIT; 15700 GParamSpec *pspec; 15701 _ExtendedGDBusPropertyInfo *info; 15702 GVariant *ret; 15703 ret = NULL; 15704 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_control_host_interface_info.parent_struct, property_name); 15705 g_assert (info != NULL); 15706 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 15707 if (pspec == NULL) 15708 { 15709 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 15710 } 15711 else 15712 { 15713 g_value_init (&value, pspec->value_type); 15714 g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value); 15715 ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature)); 15716 g_value_unset (&value); 15717 } 15718 return ret; 15719 } 15720 15721 static gboolean 15722 _control_host_skeleton_handle_set_property ( 15723 GDBusConnection *connection G_GNUC_UNUSED, 15724 const gchar *sender G_GNUC_UNUSED, 15725 const gchar *object_path G_GNUC_UNUSED, 15726 const gchar *interface_name G_GNUC_UNUSED, 15727 const gchar *property_name, 15728 GVariant *variant, 15729 GError **error, 15730 gpointer user_data) 15731 { 15732 ControlHostSkeleton *skeleton = CONTROL_HOST_SKELETON (user_data); 15733 GValue value = G_VALUE_INIT; 15734 GParamSpec *pspec; 15735 _ExtendedGDBusPropertyInfo *info; 15736 gboolean ret; 15737 ret = FALSE; 15738 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_control_host_interface_info.parent_struct, property_name); 15739 g_assert (info != NULL); 15740 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 15741 if (pspec == NULL) 15742 { 15743 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 15744 } 15745 else 15746 { 15747 if (info->use_gvariant) 15748 g_value_set_variant (&value, variant); 15749 else 15750 g_dbus_gvariant_to_gvalue (variant, &value); 15751 g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value); 15752 g_value_unset (&value); 15753 ret = TRUE; 15754 } 15755 return ret; 15756 } 15757 15758 static const GDBusInterfaceVTable _control_host_skeleton_vtable = 15759 { 15760 _control_host_skeleton_handle_method_call, 15761 _control_host_skeleton_handle_get_property, 15762 _control_host_skeleton_handle_set_property, 15763 {NULL} 15764 }; 15765 15766 static GDBusInterfaceInfo * 15767 control_host_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 15768 { 15769 return control_host_interface_info (); 15770 } 15771 15772 static GDBusInterfaceVTable * 15773 control_host_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 15774 { 15775 return (GDBusInterfaceVTable *) &_control_host_skeleton_vtable; 15776 } 15777 15778 static GVariant * 15779 control_host_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton) 15780 { 15781 ControlHostSkeleton *skeleton = CONTROL_HOST_SKELETON (_skeleton); 15782 15783 GVariantBuilder builder; 15784 guint n; 15785 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 15786 if (_control_host_interface_info.parent_struct.properties == NULL) 15787 goto out; 15788 for (n = 0; _control_host_interface_info.parent_struct.properties[n] != NULL; n++) 15789 { 15790 GDBusPropertyInfo *info = _control_host_interface_info.parent_struct.properties[n]; 15791 if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE) 15792 { 15793 GVariant *value; 15794 value = _control_host_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.control.Host", info->name, NULL, skeleton); 15795 if (value != NULL) 15796 { 15797 g_variant_take_ref (value); 15798 g_variant_builder_add (&builder, "{sv}", info->name, value); 15799 g_variant_unref (value); 15800 } 15801 } 15802 } 15803 out: 15804 return g_variant_builder_end (&builder); 15805 } 15806 15807 static gboolean _control_host_emit_changed (gpointer user_data); 15808 15809 static void 15810 control_host_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton) 15811 { 15812 ControlHostSkeleton *skeleton = CONTROL_HOST_SKELETON (_skeleton); 15813 gboolean emit_changed = FALSE; 15814 15815 g_mutex_lock (&skeleton->priv->lock); 15816 if (skeleton->priv->changed_properties_idle_source != NULL) 15817 { 15818 g_source_destroy (skeleton->priv->changed_properties_idle_source); 15819 skeleton->priv->changed_properties_idle_source = NULL; 15820 emit_changed = TRUE; 15821 } 15822 g_mutex_unlock (&skeleton->priv->lock); 15823 15824 if (emit_changed) 15825 _control_host_emit_changed (skeleton); 15826 } 15827 15828 static void 15829 _control_host_on_signal_booted ( 15830 ControlHost *object) 15831 { 15832 ControlHostSkeleton *skeleton = CONTROL_HOST_SKELETON (object); 15833 15834 GList *connections, *l; 15835 GVariant *signal_variant; 15836 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 15837 15838 signal_variant = g_variant_ref_sink (g_variant_new ("()")); 15839 for (l = connections; l != NULL; l = l->next) 15840 { 15841 GDBusConnection *connection = l->data; 15842 g_dbus_connection_emit_signal (connection, 15843 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.control.Host", "Booted", 15844 signal_variant, NULL); 15845 } 15846 g_variant_unref (signal_variant); 15847 g_list_free_full (connections, g_object_unref); 15848 } 15849 15850 static void control_host_skeleton_iface_init (ControlHostIface *iface); 15851 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 15852 G_DEFINE_TYPE_WITH_CODE (ControlHostSkeleton, control_host_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 15853 G_ADD_PRIVATE (ControlHostSkeleton) 15854 G_IMPLEMENT_INTERFACE (TYPE_CONTROL_HOST, control_host_skeleton_iface_init)); 15855 15856 #else 15857 G_DEFINE_TYPE_WITH_CODE (ControlHostSkeleton, control_host_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 15858 G_IMPLEMENT_INTERFACE (TYPE_CONTROL_HOST, control_host_skeleton_iface_init)); 15859 15860 #endif 15861 static void 15862 control_host_skeleton_finalize (GObject *object) 15863 { 15864 ControlHostSkeleton *skeleton = CONTROL_HOST_SKELETON (object); 15865 guint n; 15866 for (n = 0; n < 2; n++) 15867 g_value_unset (&skeleton->priv->properties[n]); 15868 g_free (skeleton->priv->properties); 15869 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 15870 if (skeleton->priv->changed_properties_idle_source != NULL) 15871 g_source_destroy (skeleton->priv->changed_properties_idle_source); 15872 g_main_context_unref (skeleton->priv->context); 15873 g_mutex_clear (&skeleton->priv->lock); 15874 G_OBJECT_CLASS (control_host_skeleton_parent_class)->finalize (object); 15875 } 15876 15877 static void 15878 control_host_skeleton_get_property (GObject *object, 15879 guint prop_id, 15880 GValue *value, 15881 GParamSpec *pspec G_GNUC_UNUSED) 15882 { 15883 ControlHostSkeleton *skeleton = CONTROL_HOST_SKELETON (object); 15884 g_assert (prop_id != 0 && prop_id - 1 < 2); 15885 g_mutex_lock (&skeleton->priv->lock); 15886 g_value_copy (&skeleton->priv->properties[prop_id - 1], value); 15887 g_mutex_unlock (&skeleton->priv->lock); 15888 } 15889 15890 static gboolean 15891 _control_host_emit_changed (gpointer user_data) 15892 { 15893 ControlHostSkeleton *skeleton = CONTROL_HOST_SKELETON (user_data); 15894 GList *l; 15895 GVariantBuilder builder; 15896 GVariantBuilder invalidated_builder; 15897 guint num_changes; 15898 15899 g_mutex_lock (&skeleton->priv->lock); 15900 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 15901 g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as")); 15902 for (l = skeleton->priv->changed_properties, num_changes = 0; l != NULL; l = l->next) 15903 { 15904 ChangedProperty *cp = l->data; 15905 GVariant *variant; 15906 const GValue *cur_value; 15907 15908 cur_value = &skeleton->priv->properties[cp->prop_id - 1]; 15909 if (!_g_value_equal (cur_value, &cp->orig_value)) 15910 { 15911 variant = g_dbus_gvalue_to_gvariant (cur_value, G_VARIANT_TYPE (cp->info->parent_struct.signature)); 15912 g_variant_builder_add (&builder, "{sv}", cp->info->parent_struct.name, variant); 15913 g_variant_unref (variant); 15914 num_changes++; 15915 } 15916 } 15917 if (num_changes > 0) 15918 { 15919 GList *connections, *ll; 15920 GVariant *signal_variant; 15921 signal_variant = g_variant_ref_sink (g_variant_new ("(sa{sv}as)", "org.openbmc.control.Host", 15922 &builder, &invalidated_builder)); 15923 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 15924 for (ll = connections; ll != NULL; ll = ll->next) 15925 { 15926 GDBusConnection *connection = ll->data; 15927 15928 g_dbus_connection_emit_signal (connection, 15929 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), 15930 "org.freedesktop.DBus.Properties", 15931 "PropertiesChanged", 15932 signal_variant, 15933 NULL); 15934 } 15935 g_variant_unref (signal_variant); 15936 g_list_free_full (connections, g_object_unref); 15937 } 15938 else 15939 { 15940 g_variant_builder_clear (&builder); 15941 g_variant_builder_clear (&invalidated_builder); 15942 } 15943 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 15944 skeleton->priv->changed_properties = NULL; 15945 skeleton->priv->changed_properties_idle_source = NULL; 15946 g_mutex_unlock (&skeleton->priv->lock); 15947 return FALSE; 15948 } 15949 15950 static void 15951 _control_host_schedule_emit_changed (ControlHostSkeleton *skeleton, const _ExtendedGDBusPropertyInfo *info, guint prop_id, const GValue *orig_value) 15952 { 15953 ChangedProperty *cp; 15954 GList *l; 15955 cp = NULL; 15956 for (l = skeleton->priv->changed_properties; l != NULL; l = l->next) 15957 { 15958 ChangedProperty *i_cp = l->data; 15959 if (i_cp->info == info) 15960 { 15961 cp = i_cp; 15962 break; 15963 } 15964 } 15965 if (cp == NULL) 15966 { 15967 cp = g_new0 (ChangedProperty, 1); 15968 cp->prop_id = prop_id; 15969 cp->info = info; 15970 skeleton->priv->changed_properties = g_list_prepend (skeleton->priv->changed_properties, cp); 15971 g_value_init (&cp->orig_value, G_VALUE_TYPE (orig_value)); 15972 g_value_copy (orig_value, &cp->orig_value); 15973 } 15974 } 15975 15976 static void 15977 control_host_skeleton_notify (GObject *object, 15978 GParamSpec *pspec G_GNUC_UNUSED) 15979 { 15980 ControlHostSkeleton *skeleton = CONTROL_HOST_SKELETON (object); 15981 g_mutex_lock (&skeleton->priv->lock); 15982 if (skeleton->priv->changed_properties != NULL && 15983 skeleton->priv->changed_properties_idle_source == NULL) 15984 { 15985 skeleton->priv->changed_properties_idle_source = g_idle_source_new (); 15986 g_source_set_priority (skeleton->priv->changed_properties_idle_source, G_PRIORITY_DEFAULT); 15987 g_source_set_callback (skeleton->priv->changed_properties_idle_source, _control_host_emit_changed, g_object_ref (skeleton), (GDestroyNotify) g_object_unref); 15988 g_source_set_name (skeleton->priv->changed_properties_idle_source, "[generated] _control_host_emit_changed"); 15989 g_source_attach (skeleton->priv->changed_properties_idle_source, skeleton->priv->context); 15990 g_source_unref (skeleton->priv->changed_properties_idle_source); 15991 } 15992 g_mutex_unlock (&skeleton->priv->lock); 15993 } 15994 15995 static void 15996 control_host_skeleton_set_property (GObject *object, 15997 guint prop_id, 15998 const GValue *value, 15999 GParamSpec *pspec) 16000 { 16001 ControlHostSkeleton *skeleton = CONTROL_HOST_SKELETON (object); 16002 g_assert (prop_id != 0 && prop_id - 1 < 2); 16003 g_mutex_lock (&skeleton->priv->lock); 16004 g_object_freeze_notify (object); 16005 if (!_g_value_equal (value, &skeleton->priv->properties[prop_id - 1])) 16006 { 16007 if (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)) != NULL) 16008 _control_host_schedule_emit_changed (skeleton, _control_host_property_info_pointers[prop_id - 1], prop_id, &skeleton->priv->properties[prop_id - 1]); 16009 g_value_copy (value, &skeleton->priv->properties[prop_id - 1]); 16010 g_object_notify_by_pspec (object, pspec); 16011 } 16012 g_mutex_unlock (&skeleton->priv->lock); 16013 g_object_thaw_notify (object); 16014 } 16015 16016 static void 16017 control_host_skeleton_init (ControlHostSkeleton *skeleton) 16018 { 16019 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 16020 skeleton->priv = control_host_skeleton_get_instance_private (skeleton); 16021 #else 16022 skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, TYPE_CONTROL_HOST_SKELETON, ControlHostSkeletonPrivate); 16023 #endif 16024 16025 g_mutex_init (&skeleton->priv->lock); 16026 skeleton->priv->context = g_main_context_ref_thread_default (); 16027 skeleton->priv->properties = g_new0 (GValue, 2); 16028 g_value_init (&skeleton->priv->properties[0], G_TYPE_INT); 16029 g_value_init (&skeleton->priv->properties[1], G_TYPE_STRING); 16030 } 16031 16032 static gint 16033 control_host_skeleton_get_debug_mode (ControlHost *object) 16034 { 16035 ControlHostSkeleton *skeleton = CONTROL_HOST_SKELETON (object); 16036 gint value; 16037 g_mutex_lock (&skeleton->priv->lock); 16038 value = g_value_get_int (&(skeleton->priv->properties[0])); 16039 g_mutex_unlock (&skeleton->priv->lock); 16040 return value; 16041 } 16042 16043 static const gchar * 16044 control_host_skeleton_get_flash_side (ControlHost *object) 16045 { 16046 ControlHostSkeleton *skeleton = CONTROL_HOST_SKELETON (object); 16047 const gchar *value; 16048 g_mutex_lock (&skeleton->priv->lock); 16049 value = g_value_get_string (&(skeleton->priv->properties[1])); 16050 g_mutex_unlock (&skeleton->priv->lock); 16051 return value; 16052 } 16053 16054 static void 16055 control_host_skeleton_class_init (ControlHostSkeletonClass *klass) 16056 { 16057 GObjectClass *gobject_class; 16058 GDBusInterfaceSkeletonClass *skeleton_class; 16059 16060 gobject_class = G_OBJECT_CLASS (klass); 16061 gobject_class->finalize = control_host_skeleton_finalize; 16062 gobject_class->get_property = control_host_skeleton_get_property; 16063 gobject_class->set_property = control_host_skeleton_set_property; 16064 gobject_class->notify = control_host_skeleton_notify; 16065 16066 16067 control_host_override_properties (gobject_class, 1); 16068 16069 skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass); 16070 skeleton_class->get_info = control_host_skeleton_dbus_interface_get_info; 16071 skeleton_class->get_properties = control_host_skeleton_dbus_interface_get_properties; 16072 skeleton_class->flush = control_host_skeleton_dbus_interface_flush; 16073 skeleton_class->get_vtable = control_host_skeleton_dbus_interface_get_vtable; 16074 16075 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 16076 g_type_class_add_private (klass, sizeof (ControlHostSkeletonPrivate)); 16077 #endif 16078 } 16079 16080 static void 16081 control_host_skeleton_iface_init (ControlHostIface *iface) 16082 { 16083 iface->booted = _control_host_on_signal_booted; 16084 iface->get_debug_mode = control_host_skeleton_get_debug_mode; 16085 iface->get_flash_side = control_host_skeleton_get_flash_side; 16086 } 16087 16088 /** 16089 * control_host_skeleton_new: 16090 * 16091 * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Host.top_of_page">org.openbmc.control.Host</link>. 16092 * 16093 * Returns: (transfer full) (type ControlHostSkeleton): The skeleton object. 16094 */ 16095 ControlHost * 16096 control_host_skeleton_new (void) 16097 { 16098 return CONTROL_HOST (g_object_new (TYPE_CONTROL_HOST_SKELETON, NULL)); 16099 } 16100 16101 /* ------------------------------------------------------------------------ 16102 * Code for interface org.openbmc.control.Power 16103 * ------------------------------------------------------------------------ 16104 */ 16105 16106 /** 16107 * SECTION:ControlPower 16108 * @title: ControlPower 16109 * @short_description: Generated C code for the org.openbmc.control.Power D-Bus interface 16110 * 16111 * This section contains code for working with the <link linkend="gdbus-interface-org-openbmc-control-Power.top_of_page">org.openbmc.control.Power</link> D-Bus interface in C. 16112 */ 16113 16114 /* ---- Introspection data for org.openbmc.control.Power ---- */ 16115 16116 static const _ExtendedGDBusArgInfo _control_power_method_info_set_power_state_IN_ARG_state = 16117 { 16118 { 16119 -1, 16120 (gchar *) "state", 16121 (gchar *) "i", 16122 NULL 16123 }, 16124 FALSE 16125 }; 16126 16127 static const _ExtendedGDBusArgInfo * const _control_power_method_info_set_power_state_IN_ARG_pointers[] = 16128 { 16129 &_control_power_method_info_set_power_state_IN_ARG_state, 16130 NULL 16131 }; 16132 16133 static const _ExtendedGDBusMethodInfo _control_power_method_info_set_power_state = 16134 { 16135 { 16136 -1, 16137 (gchar *) "setPowerState", 16138 (GDBusArgInfo **) &_control_power_method_info_set_power_state_IN_ARG_pointers, 16139 NULL, 16140 NULL 16141 }, 16142 "handle-set-power-state", 16143 FALSE 16144 }; 16145 16146 static const _ExtendedGDBusArgInfo _control_power_method_info_get_power_state_OUT_ARG_state = 16147 { 16148 { 16149 -1, 16150 (gchar *) "state", 16151 (gchar *) "i", 16152 NULL 16153 }, 16154 FALSE 16155 }; 16156 16157 static const _ExtendedGDBusArgInfo * const _control_power_method_info_get_power_state_OUT_ARG_pointers[] = 16158 { 16159 &_control_power_method_info_get_power_state_OUT_ARG_state, 16160 NULL 16161 }; 16162 16163 static const _ExtendedGDBusMethodInfo _control_power_method_info_get_power_state = 16164 { 16165 { 16166 -1, 16167 (gchar *) "getPowerState", 16168 NULL, 16169 (GDBusArgInfo **) &_control_power_method_info_get_power_state_OUT_ARG_pointers, 16170 NULL 16171 }, 16172 "handle-get-power-state", 16173 FALSE 16174 }; 16175 16176 static const _ExtendedGDBusMethodInfo * const _control_power_method_info_pointers[] = 16177 { 16178 &_control_power_method_info_set_power_state, 16179 &_control_power_method_info_get_power_state, 16180 NULL 16181 }; 16182 16183 static const _ExtendedGDBusSignalInfo _control_power_signal_info_power_good = 16184 { 16185 { 16186 -1, 16187 (gchar *) "PowerGood", 16188 NULL, 16189 NULL 16190 }, 16191 "power-good" 16192 }; 16193 16194 static const _ExtendedGDBusSignalInfo _control_power_signal_info_power_lost = 16195 { 16196 { 16197 -1, 16198 (gchar *) "PowerLost", 16199 NULL, 16200 NULL 16201 }, 16202 "power-lost" 16203 }; 16204 16205 static const _ExtendedGDBusSignalInfo * const _control_power_signal_info_pointers[] = 16206 { 16207 &_control_power_signal_info_power_good, 16208 &_control_power_signal_info_power_lost, 16209 NULL 16210 }; 16211 16212 static const _ExtendedGDBusPropertyInfo _control_power_property_info_pgood = 16213 { 16214 { 16215 -1, 16216 (gchar *) "pgood", 16217 (gchar *) "i", 16218 G_DBUS_PROPERTY_INFO_FLAGS_READABLE, 16219 NULL 16220 }, 16221 "pgood", 16222 FALSE 16223 }; 16224 16225 static const _ExtendedGDBusPropertyInfo _control_power_property_info_state = 16226 { 16227 { 16228 -1, 16229 (gchar *) "state", 16230 (gchar *) "i", 16231 G_DBUS_PROPERTY_INFO_FLAGS_READABLE, 16232 NULL 16233 }, 16234 "state", 16235 FALSE 16236 }; 16237 16238 static const _ExtendedGDBusPropertyInfo _control_power_property_info_pgood_timeout = 16239 { 16240 { 16241 -1, 16242 (gchar *) "pgood_timeout", 16243 (gchar *) "i", 16244 G_DBUS_PROPERTY_INFO_FLAGS_READABLE | G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE, 16245 NULL 16246 }, 16247 "pgood-timeout", 16248 FALSE 16249 }; 16250 16251 static const _ExtendedGDBusPropertyInfo * const _control_power_property_info_pointers[] = 16252 { 16253 &_control_power_property_info_pgood, 16254 &_control_power_property_info_state, 16255 &_control_power_property_info_pgood_timeout, 16256 NULL 16257 }; 16258 16259 static const _ExtendedGDBusInterfaceInfo _control_power_interface_info = 16260 { 16261 { 16262 -1, 16263 (gchar *) "org.openbmc.control.Power", 16264 (GDBusMethodInfo **) &_control_power_method_info_pointers, 16265 (GDBusSignalInfo **) &_control_power_signal_info_pointers, 16266 (GDBusPropertyInfo **) &_control_power_property_info_pointers, 16267 NULL 16268 }, 16269 "control-power", 16270 }; 16271 16272 16273 /** 16274 * control_power_interface_info: 16275 * 16276 * Gets a machine-readable description of the <link linkend="gdbus-interface-org-openbmc-control-Power.top_of_page">org.openbmc.control.Power</link> D-Bus interface. 16277 * 16278 * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free. 16279 */ 16280 GDBusInterfaceInfo * 16281 control_power_interface_info (void) 16282 { 16283 return (GDBusInterfaceInfo *) &_control_power_interface_info.parent_struct; 16284 } 16285 16286 /** 16287 * control_power_override_properties: 16288 * @klass: The class structure for a #GObject<!-- -->-derived class. 16289 * @property_id_begin: The property id to assign to the first overridden property. 16290 * 16291 * Overrides all #GObject properties in the #ControlPower interface for a concrete class. 16292 * The properties are overridden in the order they are defined. 16293 * 16294 * Returns: The last property id. 16295 */ 16296 guint 16297 control_power_override_properties (GObjectClass *klass, guint property_id_begin) 16298 { 16299 g_object_class_override_property (klass, property_id_begin++, "pgood"); 16300 g_object_class_override_property (klass, property_id_begin++, "state"); 16301 g_object_class_override_property (klass, property_id_begin++, "pgood-timeout"); 16302 return property_id_begin - 1; 16303 } 16304 16305 16306 16307 /** 16308 * ControlPower: 16309 * 16310 * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Power.top_of_page">org.openbmc.control.Power</link>. 16311 */ 16312 16313 /** 16314 * ControlPowerIface: 16315 * @parent_iface: The parent interface. 16316 * @handle_get_power_state: Handler for the #ControlPower::handle-get-power-state signal. 16317 * @handle_set_power_state: Handler for the #ControlPower::handle-set-power-state signal. 16318 * @get_pgood: Getter for the #ControlPower:pgood property. 16319 * @get_pgood_timeout: Getter for the #ControlPower:pgood-timeout property. 16320 * @get_state: Getter for the #ControlPower:state property. 16321 * @power_good: Handler for the #ControlPower::power-good signal. 16322 * @power_lost: Handler for the #ControlPower::power-lost signal. 16323 * 16324 * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Power.top_of_page">org.openbmc.control.Power</link>. 16325 */ 16326 16327 typedef ControlPowerIface ControlPowerInterface; 16328 G_DEFINE_INTERFACE (ControlPower, control_power, G_TYPE_OBJECT); 16329 16330 static void 16331 control_power_default_init (ControlPowerIface *iface) 16332 { 16333 /* GObject signals for incoming D-Bus method calls: */ 16334 /** 16335 * ControlPower::handle-set-power-state: 16336 * @object: A #ControlPower. 16337 * @invocation: A #GDBusMethodInvocation. 16338 * @arg_state: Argument passed by remote caller. 16339 * 16340 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-control-Power.setPowerState">setPowerState()</link> D-Bus method. 16341 * 16342 * 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 control_power_complete_set_power_state() 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. 16343 * 16344 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 16345 */ 16346 g_signal_new ("handle-set-power-state", 16347 G_TYPE_FROM_INTERFACE (iface), 16348 G_SIGNAL_RUN_LAST, 16349 G_STRUCT_OFFSET (ControlPowerIface, handle_set_power_state), 16350 g_signal_accumulator_true_handled, 16351 NULL, 16352 g_cclosure_marshal_generic, 16353 G_TYPE_BOOLEAN, 16354 2, 16355 G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_INT); 16356 16357 /** 16358 * ControlPower::handle-get-power-state: 16359 * @object: A #ControlPower. 16360 * @invocation: A #GDBusMethodInvocation. 16361 * 16362 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-control-Power.getPowerState">getPowerState()</link> D-Bus method. 16363 * 16364 * 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 control_power_complete_get_power_state() 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. 16365 * 16366 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 16367 */ 16368 g_signal_new ("handle-get-power-state", 16369 G_TYPE_FROM_INTERFACE (iface), 16370 G_SIGNAL_RUN_LAST, 16371 G_STRUCT_OFFSET (ControlPowerIface, handle_get_power_state), 16372 g_signal_accumulator_true_handled, 16373 NULL, 16374 g_cclosure_marshal_generic, 16375 G_TYPE_BOOLEAN, 16376 1, 16377 G_TYPE_DBUS_METHOD_INVOCATION); 16378 16379 /* GObject signals for received D-Bus signals: */ 16380 /** 16381 * ControlPower::power-good: 16382 * @object: A #ControlPower. 16383 * 16384 * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-openbmc-control-Power.PowerGood">"PowerGood"</link> is received. 16385 * 16386 * 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. 16387 */ 16388 g_signal_new ("power-good", 16389 G_TYPE_FROM_INTERFACE (iface), 16390 G_SIGNAL_RUN_LAST, 16391 G_STRUCT_OFFSET (ControlPowerIface, power_good), 16392 NULL, 16393 NULL, 16394 g_cclosure_marshal_generic, 16395 G_TYPE_NONE, 16396 0); 16397 16398 /** 16399 * ControlPower::power-lost: 16400 * @object: A #ControlPower. 16401 * 16402 * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-openbmc-control-Power.PowerLost">"PowerLost"</link> is received. 16403 * 16404 * 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. 16405 */ 16406 g_signal_new ("power-lost", 16407 G_TYPE_FROM_INTERFACE (iface), 16408 G_SIGNAL_RUN_LAST, 16409 G_STRUCT_OFFSET (ControlPowerIface, power_lost), 16410 NULL, 16411 NULL, 16412 g_cclosure_marshal_generic, 16413 G_TYPE_NONE, 16414 0); 16415 16416 /* GObject properties for D-Bus properties: */ 16417 /** 16418 * ControlPower:pgood: 16419 * 16420 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-control-Power.pgood">"pgood"</link>. 16421 * 16422 * 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. 16423 */ 16424 g_object_interface_install_property (iface, 16425 g_param_spec_int ("pgood", "pgood", "pgood", G_MININT32, G_MAXINT32, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 16426 /** 16427 * ControlPower:state: 16428 * 16429 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-control-Power.state">"state"</link>. 16430 * 16431 * 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. 16432 */ 16433 g_object_interface_install_property (iface, 16434 g_param_spec_int ("state", "state", "state", G_MININT32, G_MAXINT32, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 16435 /** 16436 * ControlPower:pgood-timeout: 16437 * 16438 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-control-Power.pgood_timeout">"pgood_timeout"</link>. 16439 * 16440 * 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. 16441 */ 16442 g_object_interface_install_property (iface, 16443 g_param_spec_int ("pgood-timeout", "pgood_timeout", "pgood_timeout", G_MININT32, G_MAXINT32, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 16444 } 16445 16446 /** 16447 * control_power_get_pgood: (skip) 16448 * @object: A #ControlPower. 16449 * 16450 * Gets the value of the <link linkend="gdbus-property-org-openbmc-control-Power.pgood">"pgood"</link> D-Bus property. 16451 * 16452 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 16453 * 16454 * Returns: The property value. 16455 */ 16456 gint 16457 control_power_get_pgood (ControlPower *object) 16458 { 16459 return CONTROL_POWER_GET_IFACE (object)->get_pgood (object); 16460 } 16461 16462 /** 16463 * control_power_set_pgood: (skip) 16464 * @object: A #ControlPower. 16465 * @value: The value to set. 16466 * 16467 * Sets the <link linkend="gdbus-property-org-openbmc-control-Power.pgood">"pgood"</link> D-Bus property to @value. 16468 * 16469 * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side. 16470 */ 16471 void 16472 control_power_set_pgood (ControlPower *object, gint value) 16473 { 16474 g_object_set (G_OBJECT (object), "pgood", value, NULL); 16475 } 16476 16477 /** 16478 * control_power_get_state: (skip) 16479 * @object: A #ControlPower. 16480 * 16481 * Gets the value of the <link linkend="gdbus-property-org-openbmc-control-Power.state">"state"</link> D-Bus property. 16482 * 16483 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 16484 * 16485 * Returns: The property value. 16486 */ 16487 gint 16488 control_power_get_state (ControlPower *object) 16489 { 16490 return CONTROL_POWER_GET_IFACE (object)->get_state (object); 16491 } 16492 16493 /** 16494 * control_power_set_state: (skip) 16495 * @object: A #ControlPower. 16496 * @value: The value to set. 16497 * 16498 * Sets the <link linkend="gdbus-property-org-openbmc-control-Power.state">"state"</link> D-Bus property to @value. 16499 * 16500 * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side. 16501 */ 16502 void 16503 control_power_set_state (ControlPower *object, gint value) 16504 { 16505 g_object_set (G_OBJECT (object), "state", value, NULL); 16506 } 16507 16508 /** 16509 * control_power_get_pgood_timeout: (skip) 16510 * @object: A #ControlPower. 16511 * 16512 * Gets the value of the <link linkend="gdbus-property-org-openbmc-control-Power.pgood_timeout">"pgood_timeout"</link> D-Bus property. 16513 * 16514 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 16515 * 16516 * Returns: The property value. 16517 */ 16518 gint 16519 control_power_get_pgood_timeout (ControlPower *object) 16520 { 16521 return CONTROL_POWER_GET_IFACE (object)->get_pgood_timeout (object); 16522 } 16523 16524 /** 16525 * control_power_set_pgood_timeout: (skip) 16526 * @object: A #ControlPower. 16527 * @value: The value to set. 16528 * 16529 * Sets the <link linkend="gdbus-property-org-openbmc-control-Power.pgood_timeout">"pgood_timeout"</link> D-Bus property to @value. 16530 * 16531 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 16532 */ 16533 void 16534 control_power_set_pgood_timeout (ControlPower *object, gint value) 16535 { 16536 g_object_set (G_OBJECT (object), "pgood-timeout", value, NULL); 16537 } 16538 16539 /** 16540 * control_power_emit_power_good: 16541 * @object: A #ControlPower. 16542 * 16543 * Emits the <link linkend="gdbus-signal-org-openbmc-control-Power.PowerGood">"PowerGood"</link> D-Bus signal. 16544 */ 16545 void 16546 control_power_emit_power_good ( 16547 ControlPower *object) 16548 { 16549 g_signal_emit_by_name (object, "power-good"); 16550 } 16551 16552 /** 16553 * control_power_emit_power_lost: 16554 * @object: A #ControlPower. 16555 * 16556 * Emits the <link linkend="gdbus-signal-org-openbmc-control-Power.PowerLost">"PowerLost"</link> D-Bus signal. 16557 */ 16558 void 16559 control_power_emit_power_lost ( 16560 ControlPower *object) 16561 { 16562 g_signal_emit_by_name (object, "power-lost"); 16563 } 16564 16565 /** 16566 * control_power_call_set_power_state: 16567 * @proxy: A #ControlPowerProxy. 16568 * @arg_state: Argument to pass with the method invocation. 16569 * @cancellable: (allow-none): A #GCancellable or %NULL. 16570 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 16571 * @user_data: User data to pass to @callback. 16572 * 16573 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-control-Power.setPowerState">setPowerState()</link> D-Bus method on @proxy. 16574 * 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. 16575 * You can then call control_power_call_set_power_state_finish() to get the result of the operation. 16576 * 16577 * See control_power_call_set_power_state_sync() for the synchronous, blocking version of this method. 16578 */ 16579 void 16580 control_power_call_set_power_state ( 16581 ControlPower *proxy, 16582 gint arg_state, 16583 GCancellable *cancellable, 16584 GAsyncReadyCallback callback, 16585 gpointer user_data) 16586 { 16587 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 16588 "setPowerState", 16589 g_variant_new ("(i)", 16590 arg_state), 16591 G_DBUS_CALL_FLAGS_NONE, 16592 -1, 16593 cancellable, 16594 callback, 16595 user_data); 16596 } 16597 16598 /** 16599 * control_power_call_set_power_state_finish: 16600 * @proxy: A #ControlPowerProxy. 16601 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to control_power_call_set_power_state(). 16602 * @error: Return location for error or %NULL. 16603 * 16604 * Finishes an operation started with control_power_call_set_power_state(). 16605 * 16606 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 16607 */ 16608 gboolean 16609 control_power_call_set_power_state_finish ( 16610 ControlPower *proxy, 16611 GAsyncResult *res, 16612 GError **error) 16613 { 16614 GVariant *_ret; 16615 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 16616 if (_ret == NULL) 16617 goto _out; 16618 g_variant_get (_ret, 16619 "()"); 16620 g_variant_unref (_ret); 16621 _out: 16622 return _ret != NULL; 16623 } 16624 16625 /** 16626 * control_power_call_set_power_state_sync: 16627 * @proxy: A #ControlPowerProxy. 16628 * @arg_state: Argument to pass with the method invocation. 16629 * @cancellable: (allow-none): A #GCancellable or %NULL. 16630 * @error: Return location for error or %NULL. 16631 * 16632 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-control-Power.setPowerState">setPowerState()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 16633 * 16634 * See control_power_call_set_power_state() for the asynchronous version of this method. 16635 * 16636 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 16637 */ 16638 gboolean 16639 control_power_call_set_power_state_sync ( 16640 ControlPower *proxy, 16641 gint arg_state, 16642 GCancellable *cancellable, 16643 GError **error) 16644 { 16645 GVariant *_ret; 16646 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 16647 "setPowerState", 16648 g_variant_new ("(i)", 16649 arg_state), 16650 G_DBUS_CALL_FLAGS_NONE, 16651 -1, 16652 cancellable, 16653 error); 16654 if (_ret == NULL) 16655 goto _out; 16656 g_variant_get (_ret, 16657 "()"); 16658 g_variant_unref (_ret); 16659 _out: 16660 return _ret != NULL; 16661 } 16662 16663 /** 16664 * control_power_call_get_power_state: 16665 * @proxy: A #ControlPowerProxy. 16666 * @cancellable: (allow-none): A #GCancellable or %NULL. 16667 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 16668 * @user_data: User data to pass to @callback. 16669 * 16670 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-control-Power.getPowerState">getPowerState()</link> D-Bus method on @proxy. 16671 * 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. 16672 * You can then call control_power_call_get_power_state_finish() to get the result of the operation. 16673 * 16674 * See control_power_call_get_power_state_sync() for the synchronous, blocking version of this method. 16675 */ 16676 void 16677 control_power_call_get_power_state ( 16678 ControlPower *proxy, 16679 GCancellable *cancellable, 16680 GAsyncReadyCallback callback, 16681 gpointer user_data) 16682 { 16683 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 16684 "getPowerState", 16685 g_variant_new ("()"), 16686 G_DBUS_CALL_FLAGS_NONE, 16687 -1, 16688 cancellable, 16689 callback, 16690 user_data); 16691 } 16692 16693 /** 16694 * control_power_call_get_power_state_finish: 16695 * @proxy: A #ControlPowerProxy. 16696 * @out_state: (out): Return location for return parameter or %NULL to ignore. 16697 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to control_power_call_get_power_state(). 16698 * @error: Return location for error or %NULL. 16699 * 16700 * Finishes an operation started with control_power_call_get_power_state(). 16701 * 16702 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 16703 */ 16704 gboolean 16705 control_power_call_get_power_state_finish ( 16706 ControlPower *proxy, 16707 gint *out_state, 16708 GAsyncResult *res, 16709 GError **error) 16710 { 16711 GVariant *_ret; 16712 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 16713 if (_ret == NULL) 16714 goto _out; 16715 g_variant_get (_ret, 16716 "(i)", 16717 out_state); 16718 g_variant_unref (_ret); 16719 _out: 16720 return _ret != NULL; 16721 } 16722 16723 /** 16724 * control_power_call_get_power_state_sync: 16725 * @proxy: A #ControlPowerProxy. 16726 * @out_state: (out): Return location for return parameter or %NULL to ignore. 16727 * @cancellable: (allow-none): A #GCancellable or %NULL. 16728 * @error: Return location for error or %NULL. 16729 * 16730 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-control-Power.getPowerState">getPowerState()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 16731 * 16732 * See control_power_call_get_power_state() for the asynchronous version of this method. 16733 * 16734 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 16735 */ 16736 gboolean 16737 control_power_call_get_power_state_sync ( 16738 ControlPower *proxy, 16739 gint *out_state, 16740 GCancellable *cancellable, 16741 GError **error) 16742 { 16743 GVariant *_ret; 16744 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 16745 "getPowerState", 16746 g_variant_new ("()"), 16747 G_DBUS_CALL_FLAGS_NONE, 16748 -1, 16749 cancellable, 16750 error); 16751 if (_ret == NULL) 16752 goto _out; 16753 g_variant_get (_ret, 16754 "(i)", 16755 out_state); 16756 g_variant_unref (_ret); 16757 _out: 16758 return _ret != NULL; 16759 } 16760 16761 /** 16762 * control_power_complete_set_power_state: 16763 * @object: A #ControlPower. 16764 * @invocation: (transfer full): A #GDBusMethodInvocation. 16765 * 16766 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-control-Power.setPowerState">setPowerState()</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. 16767 * 16768 * This method will free @invocation, you cannot use it afterwards. 16769 */ 16770 void 16771 control_power_complete_set_power_state ( 16772 ControlPower *object, 16773 GDBusMethodInvocation *invocation) 16774 { 16775 g_dbus_method_invocation_return_value (invocation, 16776 g_variant_new ("()")); 16777 } 16778 16779 /** 16780 * control_power_complete_get_power_state: 16781 * @object: A #ControlPower. 16782 * @invocation: (transfer full): A #GDBusMethodInvocation. 16783 * @state: Parameter to return. 16784 * 16785 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-control-Power.getPowerState">getPowerState()</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. 16786 * 16787 * This method will free @invocation, you cannot use it afterwards. 16788 */ 16789 void 16790 control_power_complete_get_power_state ( 16791 ControlPower *object, 16792 GDBusMethodInvocation *invocation, 16793 gint state) 16794 { 16795 g_dbus_method_invocation_return_value (invocation, 16796 g_variant_new ("(i)", 16797 state)); 16798 } 16799 16800 /* ------------------------------------------------------------------------ */ 16801 16802 /** 16803 * ControlPowerProxy: 16804 * 16805 * The #ControlPowerProxy structure contains only private data and should only be accessed using the provided API. 16806 */ 16807 16808 /** 16809 * ControlPowerProxyClass: 16810 * @parent_class: The parent class. 16811 * 16812 * Class structure for #ControlPowerProxy. 16813 */ 16814 16815 struct _ControlPowerProxyPrivate 16816 { 16817 GData *qdata; 16818 }; 16819 16820 static void control_power_proxy_iface_init (ControlPowerIface *iface); 16821 16822 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 16823 G_DEFINE_TYPE_WITH_CODE (ControlPowerProxy, control_power_proxy, G_TYPE_DBUS_PROXY, 16824 G_ADD_PRIVATE (ControlPowerProxy) 16825 G_IMPLEMENT_INTERFACE (TYPE_CONTROL_POWER, control_power_proxy_iface_init)); 16826 16827 #else 16828 G_DEFINE_TYPE_WITH_CODE (ControlPowerProxy, control_power_proxy, G_TYPE_DBUS_PROXY, 16829 G_IMPLEMENT_INTERFACE (TYPE_CONTROL_POWER, control_power_proxy_iface_init)); 16830 16831 #endif 16832 static void 16833 control_power_proxy_finalize (GObject *object) 16834 { 16835 ControlPowerProxy *proxy = CONTROL_POWER_PROXY (object); 16836 g_datalist_clear (&proxy->priv->qdata); 16837 G_OBJECT_CLASS (control_power_proxy_parent_class)->finalize (object); 16838 } 16839 16840 static void 16841 control_power_proxy_get_property (GObject *object, 16842 guint prop_id, 16843 GValue *value, 16844 GParamSpec *pspec G_GNUC_UNUSED) 16845 { 16846 const _ExtendedGDBusPropertyInfo *info; 16847 GVariant *variant; 16848 g_assert (prop_id != 0 && prop_id - 1 < 3); 16849 info = _control_power_property_info_pointers[prop_id - 1]; 16850 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (object), info->parent_struct.name); 16851 if (info->use_gvariant) 16852 { 16853 g_value_set_variant (value, variant); 16854 } 16855 else 16856 { 16857 if (variant != NULL) 16858 g_dbus_gvariant_to_gvalue (variant, value); 16859 } 16860 if (variant != NULL) 16861 g_variant_unref (variant); 16862 } 16863 16864 static void 16865 control_power_proxy_set_property_cb (GDBusProxy *proxy, 16866 GAsyncResult *res, 16867 gpointer user_data) 16868 { 16869 const _ExtendedGDBusPropertyInfo *info = user_data; 16870 GError *error; 16871 GVariant *_ret; 16872 error = NULL; 16873 _ret = g_dbus_proxy_call_finish (proxy, res, &error); 16874 if (!_ret) 16875 { 16876 g_warning ("Error setting property '%s' on interface org.openbmc.control.Power: %s (%s, %d)", 16877 info->parent_struct.name, 16878 error->message, g_quark_to_string (error->domain), error->code); 16879 g_error_free (error); 16880 } 16881 else 16882 { 16883 g_variant_unref (_ret); 16884 } 16885 } 16886 16887 static void 16888 control_power_proxy_set_property (GObject *object, 16889 guint prop_id, 16890 const GValue *value, 16891 GParamSpec *pspec G_GNUC_UNUSED) 16892 { 16893 const _ExtendedGDBusPropertyInfo *info; 16894 GVariant *variant; 16895 g_assert (prop_id != 0 && prop_id - 1 < 3); 16896 info = _control_power_property_info_pointers[prop_id - 1]; 16897 variant = g_dbus_gvalue_to_gvariant (value, G_VARIANT_TYPE (info->parent_struct.signature)); 16898 g_dbus_proxy_call (G_DBUS_PROXY (object), 16899 "org.freedesktop.DBus.Properties.Set", 16900 g_variant_new ("(ssv)", "org.openbmc.control.Power", info->parent_struct.name, variant), 16901 G_DBUS_CALL_FLAGS_NONE, 16902 -1, 16903 NULL, (GAsyncReadyCallback) control_power_proxy_set_property_cb, (GDBusPropertyInfo *) &info->parent_struct); 16904 g_variant_unref (variant); 16905 } 16906 16907 static void 16908 control_power_proxy_g_signal (GDBusProxy *proxy, 16909 const gchar *sender_name G_GNUC_UNUSED, 16910 const gchar *signal_name, 16911 GVariant *parameters) 16912 { 16913 _ExtendedGDBusSignalInfo *info; 16914 GVariantIter iter; 16915 GVariant *child; 16916 GValue *paramv; 16917 guint num_params; 16918 guint n; 16919 guint signal_id; 16920 info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_control_power_interface_info.parent_struct, signal_name); 16921 if (info == NULL) 16922 return; 16923 num_params = g_variant_n_children (parameters); 16924 paramv = g_new0 (GValue, num_params + 1); 16925 g_value_init (¶mv[0], TYPE_CONTROL_POWER); 16926 g_value_set_object (¶mv[0], proxy); 16927 g_variant_iter_init (&iter, parameters); 16928 n = 1; 16929 while ((child = g_variant_iter_next_value (&iter)) != NULL) 16930 { 16931 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1]; 16932 if (arg_info->use_gvariant) 16933 { 16934 g_value_init (¶mv[n], G_TYPE_VARIANT); 16935 g_value_set_variant (¶mv[n], child); 16936 n++; 16937 } 16938 else 16939 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 16940 g_variant_unref (child); 16941 } 16942 signal_id = g_signal_lookup (info->signal_name, TYPE_CONTROL_POWER); 16943 g_signal_emitv (paramv, signal_id, 0, NULL); 16944 for (n = 0; n < num_params + 1; n++) 16945 g_value_unset (¶mv[n]); 16946 g_free (paramv); 16947 } 16948 16949 static void 16950 control_power_proxy_g_properties_changed (GDBusProxy *_proxy, 16951 GVariant *changed_properties, 16952 const gchar *const *invalidated_properties) 16953 { 16954 ControlPowerProxy *proxy = CONTROL_POWER_PROXY (_proxy); 16955 guint n; 16956 const gchar *key; 16957 GVariantIter *iter; 16958 _ExtendedGDBusPropertyInfo *info; 16959 g_variant_get (changed_properties, "a{sv}", &iter); 16960 while (g_variant_iter_next (iter, "{&sv}", &key, NULL)) 16961 { 16962 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_control_power_interface_info.parent_struct, key); 16963 g_datalist_remove_data (&proxy->priv->qdata, key); 16964 if (info != NULL) 16965 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 16966 } 16967 g_variant_iter_free (iter); 16968 for (n = 0; invalidated_properties[n] != NULL; n++) 16969 { 16970 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_control_power_interface_info.parent_struct, invalidated_properties[n]); 16971 g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]); 16972 if (info != NULL) 16973 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 16974 } 16975 } 16976 16977 static gint 16978 control_power_proxy_get_pgood (ControlPower *object) 16979 { 16980 ControlPowerProxy *proxy = CONTROL_POWER_PROXY (object); 16981 GVariant *variant; 16982 gint value = 0; 16983 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "pgood"); 16984 if (variant != NULL) 16985 { 16986 value = g_variant_get_int32 (variant); 16987 g_variant_unref (variant); 16988 } 16989 return value; 16990 } 16991 16992 static gint 16993 control_power_proxy_get_state (ControlPower *object) 16994 { 16995 ControlPowerProxy *proxy = CONTROL_POWER_PROXY (object); 16996 GVariant *variant; 16997 gint value = 0; 16998 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "state"); 16999 if (variant != NULL) 17000 { 17001 value = g_variant_get_int32 (variant); 17002 g_variant_unref (variant); 17003 } 17004 return value; 17005 } 17006 17007 static gint 17008 control_power_proxy_get_pgood_timeout (ControlPower *object) 17009 { 17010 ControlPowerProxy *proxy = CONTROL_POWER_PROXY (object); 17011 GVariant *variant; 17012 gint value = 0; 17013 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "pgood_timeout"); 17014 if (variant != NULL) 17015 { 17016 value = g_variant_get_int32 (variant); 17017 g_variant_unref (variant); 17018 } 17019 return value; 17020 } 17021 17022 static void 17023 control_power_proxy_init (ControlPowerProxy *proxy) 17024 { 17025 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 17026 proxy->priv = control_power_proxy_get_instance_private (proxy); 17027 #else 17028 proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, TYPE_CONTROL_POWER_PROXY, ControlPowerProxyPrivate); 17029 #endif 17030 17031 g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), control_power_interface_info ()); 17032 } 17033 17034 static void 17035 control_power_proxy_class_init (ControlPowerProxyClass *klass) 17036 { 17037 GObjectClass *gobject_class; 17038 GDBusProxyClass *proxy_class; 17039 17040 gobject_class = G_OBJECT_CLASS (klass); 17041 gobject_class->finalize = control_power_proxy_finalize; 17042 gobject_class->get_property = control_power_proxy_get_property; 17043 gobject_class->set_property = control_power_proxy_set_property; 17044 17045 proxy_class = G_DBUS_PROXY_CLASS (klass); 17046 proxy_class->g_signal = control_power_proxy_g_signal; 17047 proxy_class->g_properties_changed = control_power_proxy_g_properties_changed; 17048 17049 control_power_override_properties (gobject_class, 1); 17050 17051 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 17052 g_type_class_add_private (klass, sizeof (ControlPowerProxyPrivate)); 17053 #endif 17054 } 17055 17056 static void 17057 control_power_proxy_iface_init (ControlPowerIface *iface) 17058 { 17059 iface->get_pgood = control_power_proxy_get_pgood; 17060 iface->get_state = control_power_proxy_get_state; 17061 iface->get_pgood_timeout = control_power_proxy_get_pgood_timeout; 17062 } 17063 17064 /** 17065 * control_power_proxy_new: 17066 * @connection: A #GDBusConnection. 17067 * @flags: Flags from the #GDBusProxyFlags enumeration. 17068 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 17069 * @object_path: An object path. 17070 * @cancellable: (allow-none): A #GCancellable or %NULL. 17071 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 17072 * @user_data: User data to pass to @callback. 17073 * 17074 * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Power.top_of_page">org.openbmc.control.Power</link>. See g_dbus_proxy_new() for more details. 17075 * 17076 * 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. 17077 * You can then call control_power_proxy_new_finish() to get the result of the operation. 17078 * 17079 * See control_power_proxy_new_sync() for the synchronous, blocking version of this constructor. 17080 */ 17081 void 17082 control_power_proxy_new ( 17083 GDBusConnection *connection, 17084 GDBusProxyFlags flags, 17085 const gchar *name, 17086 const gchar *object_path, 17087 GCancellable *cancellable, 17088 GAsyncReadyCallback callback, 17089 gpointer user_data) 17090 { 17091 g_async_initable_new_async (TYPE_CONTROL_POWER_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.control.Power", NULL); 17092 } 17093 17094 /** 17095 * control_power_proxy_new_finish: 17096 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to control_power_proxy_new(). 17097 * @error: Return location for error or %NULL 17098 * 17099 * Finishes an operation started with control_power_proxy_new(). 17100 * 17101 * Returns: (transfer full) (type ControlPowerProxy): The constructed proxy object or %NULL if @error is set. 17102 */ 17103 ControlPower * 17104 control_power_proxy_new_finish ( 17105 GAsyncResult *res, 17106 GError **error) 17107 { 17108 GObject *ret; 17109 GObject *source_object; 17110 source_object = g_async_result_get_source_object (res); 17111 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 17112 g_object_unref (source_object); 17113 if (ret != NULL) 17114 return CONTROL_POWER (ret); 17115 else 17116 return NULL; 17117 } 17118 17119 /** 17120 * control_power_proxy_new_sync: 17121 * @connection: A #GDBusConnection. 17122 * @flags: Flags from the #GDBusProxyFlags enumeration. 17123 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 17124 * @object_path: An object path. 17125 * @cancellable: (allow-none): A #GCancellable or %NULL. 17126 * @error: Return location for error or %NULL 17127 * 17128 * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Power.top_of_page">org.openbmc.control.Power</link>. See g_dbus_proxy_new_sync() for more details. 17129 * 17130 * The calling thread is blocked until a reply is received. 17131 * 17132 * See control_power_proxy_new() for the asynchronous version of this constructor. 17133 * 17134 * Returns: (transfer full) (type ControlPowerProxy): The constructed proxy object or %NULL if @error is set. 17135 */ 17136 ControlPower * 17137 control_power_proxy_new_sync ( 17138 GDBusConnection *connection, 17139 GDBusProxyFlags flags, 17140 const gchar *name, 17141 const gchar *object_path, 17142 GCancellable *cancellable, 17143 GError **error) 17144 { 17145 GInitable *ret; 17146 ret = g_initable_new (TYPE_CONTROL_POWER_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.control.Power", NULL); 17147 if (ret != NULL) 17148 return CONTROL_POWER (ret); 17149 else 17150 return NULL; 17151 } 17152 17153 17154 /** 17155 * control_power_proxy_new_for_bus: 17156 * @bus_type: A #GBusType. 17157 * @flags: Flags from the #GDBusProxyFlags enumeration. 17158 * @name: A bus name (well-known or unique). 17159 * @object_path: An object path. 17160 * @cancellable: (allow-none): A #GCancellable or %NULL. 17161 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 17162 * @user_data: User data to pass to @callback. 17163 * 17164 * Like control_power_proxy_new() but takes a #GBusType instead of a #GDBusConnection. 17165 * 17166 * 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. 17167 * You can then call control_power_proxy_new_for_bus_finish() to get the result of the operation. 17168 * 17169 * See control_power_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor. 17170 */ 17171 void 17172 control_power_proxy_new_for_bus ( 17173 GBusType bus_type, 17174 GDBusProxyFlags flags, 17175 const gchar *name, 17176 const gchar *object_path, 17177 GCancellable *cancellable, 17178 GAsyncReadyCallback callback, 17179 gpointer user_data) 17180 { 17181 g_async_initable_new_async (TYPE_CONTROL_POWER_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.control.Power", NULL); 17182 } 17183 17184 /** 17185 * control_power_proxy_new_for_bus_finish: 17186 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to control_power_proxy_new_for_bus(). 17187 * @error: Return location for error or %NULL 17188 * 17189 * Finishes an operation started with control_power_proxy_new_for_bus(). 17190 * 17191 * Returns: (transfer full) (type ControlPowerProxy): The constructed proxy object or %NULL if @error is set. 17192 */ 17193 ControlPower * 17194 control_power_proxy_new_for_bus_finish ( 17195 GAsyncResult *res, 17196 GError **error) 17197 { 17198 GObject *ret; 17199 GObject *source_object; 17200 source_object = g_async_result_get_source_object (res); 17201 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 17202 g_object_unref (source_object); 17203 if (ret != NULL) 17204 return CONTROL_POWER (ret); 17205 else 17206 return NULL; 17207 } 17208 17209 /** 17210 * control_power_proxy_new_for_bus_sync: 17211 * @bus_type: A #GBusType. 17212 * @flags: Flags from the #GDBusProxyFlags enumeration. 17213 * @name: A bus name (well-known or unique). 17214 * @object_path: An object path. 17215 * @cancellable: (allow-none): A #GCancellable or %NULL. 17216 * @error: Return location for error or %NULL 17217 * 17218 * Like control_power_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection. 17219 * 17220 * The calling thread is blocked until a reply is received. 17221 * 17222 * See control_power_proxy_new_for_bus() for the asynchronous version of this constructor. 17223 * 17224 * Returns: (transfer full) (type ControlPowerProxy): The constructed proxy object or %NULL if @error is set. 17225 */ 17226 ControlPower * 17227 control_power_proxy_new_for_bus_sync ( 17228 GBusType bus_type, 17229 GDBusProxyFlags flags, 17230 const gchar *name, 17231 const gchar *object_path, 17232 GCancellable *cancellable, 17233 GError **error) 17234 { 17235 GInitable *ret; 17236 ret = g_initable_new (TYPE_CONTROL_POWER_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.control.Power", NULL); 17237 if (ret != NULL) 17238 return CONTROL_POWER (ret); 17239 else 17240 return NULL; 17241 } 17242 17243 17244 /* ------------------------------------------------------------------------ */ 17245 17246 /** 17247 * ControlPowerSkeleton: 17248 * 17249 * The #ControlPowerSkeleton structure contains only private data and should only be accessed using the provided API. 17250 */ 17251 17252 /** 17253 * ControlPowerSkeletonClass: 17254 * @parent_class: The parent class. 17255 * 17256 * Class structure for #ControlPowerSkeleton. 17257 */ 17258 17259 struct _ControlPowerSkeletonPrivate 17260 { 17261 GValue *properties; 17262 GList *changed_properties; 17263 GSource *changed_properties_idle_source; 17264 GMainContext *context; 17265 GMutex lock; 17266 }; 17267 17268 static void 17269 _control_power_skeleton_handle_method_call ( 17270 GDBusConnection *connection G_GNUC_UNUSED, 17271 const gchar *sender G_GNUC_UNUSED, 17272 const gchar *object_path G_GNUC_UNUSED, 17273 const gchar *interface_name, 17274 const gchar *method_name, 17275 GVariant *parameters, 17276 GDBusMethodInvocation *invocation, 17277 gpointer user_data) 17278 { 17279 ControlPowerSkeleton *skeleton = CONTROL_POWER_SKELETON (user_data); 17280 _ExtendedGDBusMethodInfo *info; 17281 GVariantIter iter; 17282 GVariant *child; 17283 GValue *paramv; 17284 guint num_params; 17285 guint num_extra; 17286 guint n; 17287 guint signal_id; 17288 GValue return_value = G_VALUE_INIT; 17289 info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation); 17290 g_assert (info != NULL); 17291 num_params = g_variant_n_children (parameters); 17292 num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra); 17293 n = 0; 17294 g_value_init (¶mv[n], TYPE_CONTROL_POWER); 17295 g_value_set_object (¶mv[n++], skeleton); 17296 g_value_init (¶mv[n], G_TYPE_DBUS_METHOD_INVOCATION); 17297 g_value_set_object (¶mv[n++], invocation); 17298 if (info->pass_fdlist) 17299 { 17300 #ifdef G_OS_UNIX 17301 g_value_init (¶mv[n], G_TYPE_UNIX_FD_LIST); 17302 g_value_set_object (¶mv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation))); 17303 #else 17304 g_assert_not_reached (); 17305 #endif 17306 } 17307 g_variant_iter_init (&iter, parameters); 17308 while ((child = g_variant_iter_next_value (&iter)) != NULL) 17309 { 17310 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra]; 17311 if (arg_info->use_gvariant) 17312 { 17313 g_value_init (¶mv[n], G_TYPE_VARIANT); 17314 g_value_set_variant (¶mv[n], child); 17315 n++; 17316 } 17317 else 17318 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 17319 g_variant_unref (child); 17320 } 17321 signal_id = g_signal_lookup (info->signal_name, TYPE_CONTROL_POWER); 17322 g_value_init (&return_value, G_TYPE_BOOLEAN); 17323 g_signal_emitv (paramv, signal_id, 0, &return_value); 17324 if (!g_value_get_boolean (&return_value)) 17325 g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name); 17326 g_value_unset (&return_value); 17327 for (n = 0; n < num_params + num_extra; n++) 17328 g_value_unset (¶mv[n]); 17329 g_free (paramv); 17330 } 17331 17332 static GVariant * 17333 _control_power_skeleton_handle_get_property ( 17334 GDBusConnection *connection G_GNUC_UNUSED, 17335 const gchar *sender G_GNUC_UNUSED, 17336 const gchar *object_path G_GNUC_UNUSED, 17337 const gchar *interface_name G_GNUC_UNUSED, 17338 const gchar *property_name, 17339 GError **error, 17340 gpointer user_data) 17341 { 17342 ControlPowerSkeleton *skeleton = CONTROL_POWER_SKELETON (user_data); 17343 GValue value = G_VALUE_INIT; 17344 GParamSpec *pspec; 17345 _ExtendedGDBusPropertyInfo *info; 17346 GVariant *ret; 17347 ret = NULL; 17348 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_control_power_interface_info.parent_struct, property_name); 17349 g_assert (info != NULL); 17350 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 17351 if (pspec == NULL) 17352 { 17353 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 17354 } 17355 else 17356 { 17357 g_value_init (&value, pspec->value_type); 17358 g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value); 17359 ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature)); 17360 g_value_unset (&value); 17361 } 17362 return ret; 17363 } 17364 17365 static gboolean 17366 _control_power_skeleton_handle_set_property ( 17367 GDBusConnection *connection G_GNUC_UNUSED, 17368 const gchar *sender G_GNUC_UNUSED, 17369 const gchar *object_path G_GNUC_UNUSED, 17370 const gchar *interface_name G_GNUC_UNUSED, 17371 const gchar *property_name, 17372 GVariant *variant, 17373 GError **error, 17374 gpointer user_data) 17375 { 17376 ControlPowerSkeleton *skeleton = CONTROL_POWER_SKELETON (user_data); 17377 GValue value = G_VALUE_INIT; 17378 GParamSpec *pspec; 17379 _ExtendedGDBusPropertyInfo *info; 17380 gboolean ret; 17381 ret = FALSE; 17382 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_control_power_interface_info.parent_struct, property_name); 17383 g_assert (info != NULL); 17384 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 17385 if (pspec == NULL) 17386 { 17387 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 17388 } 17389 else 17390 { 17391 if (info->use_gvariant) 17392 g_value_set_variant (&value, variant); 17393 else 17394 g_dbus_gvariant_to_gvalue (variant, &value); 17395 g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value); 17396 g_value_unset (&value); 17397 ret = TRUE; 17398 } 17399 return ret; 17400 } 17401 17402 static const GDBusInterfaceVTable _control_power_skeleton_vtable = 17403 { 17404 _control_power_skeleton_handle_method_call, 17405 _control_power_skeleton_handle_get_property, 17406 _control_power_skeleton_handle_set_property, 17407 {NULL} 17408 }; 17409 17410 static GDBusInterfaceInfo * 17411 control_power_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 17412 { 17413 return control_power_interface_info (); 17414 } 17415 17416 static GDBusInterfaceVTable * 17417 control_power_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 17418 { 17419 return (GDBusInterfaceVTable *) &_control_power_skeleton_vtable; 17420 } 17421 17422 static GVariant * 17423 control_power_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton) 17424 { 17425 ControlPowerSkeleton *skeleton = CONTROL_POWER_SKELETON (_skeleton); 17426 17427 GVariantBuilder builder; 17428 guint n; 17429 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 17430 if (_control_power_interface_info.parent_struct.properties == NULL) 17431 goto out; 17432 for (n = 0; _control_power_interface_info.parent_struct.properties[n] != NULL; n++) 17433 { 17434 GDBusPropertyInfo *info = _control_power_interface_info.parent_struct.properties[n]; 17435 if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE) 17436 { 17437 GVariant *value; 17438 value = _control_power_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.control.Power", info->name, NULL, skeleton); 17439 if (value != NULL) 17440 { 17441 g_variant_take_ref (value); 17442 g_variant_builder_add (&builder, "{sv}", info->name, value); 17443 g_variant_unref (value); 17444 } 17445 } 17446 } 17447 out: 17448 return g_variant_builder_end (&builder); 17449 } 17450 17451 static gboolean _control_power_emit_changed (gpointer user_data); 17452 17453 static void 17454 control_power_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton) 17455 { 17456 ControlPowerSkeleton *skeleton = CONTROL_POWER_SKELETON (_skeleton); 17457 gboolean emit_changed = FALSE; 17458 17459 g_mutex_lock (&skeleton->priv->lock); 17460 if (skeleton->priv->changed_properties_idle_source != NULL) 17461 { 17462 g_source_destroy (skeleton->priv->changed_properties_idle_source); 17463 skeleton->priv->changed_properties_idle_source = NULL; 17464 emit_changed = TRUE; 17465 } 17466 g_mutex_unlock (&skeleton->priv->lock); 17467 17468 if (emit_changed) 17469 _control_power_emit_changed (skeleton); 17470 } 17471 17472 static void 17473 _control_power_on_signal_power_good ( 17474 ControlPower *object) 17475 { 17476 ControlPowerSkeleton *skeleton = CONTROL_POWER_SKELETON (object); 17477 17478 GList *connections, *l; 17479 GVariant *signal_variant; 17480 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 17481 17482 signal_variant = g_variant_ref_sink (g_variant_new ("()")); 17483 for (l = connections; l != NULL; l = l->next) 17484 { 17485 GDBusConnection *connection = l->data; 17486 g_dbus_connection_emit_signal (connection, 17487 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.control.Power", "PowerGood", 17488 signal_variant, NULL); 17489 } 17490 g_variant_unref (signal_variant); 17491 g_list_free_full (connections, g_object_unref); 17492 } 17493 17494 static void 17495 _control_power_on_signal_power_lost ( 17496 ControlPower *object) 17497 { 17498 ControlPowerSkeleton *skeleton = CONTROL_POWER_SKELETON (object); 17499 17500 GList *connections, *l; 17501 GVariant *signal_variant; 17502 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 17503 17504 signal_variant = g_variant_ref_sink (g_variant_new ("()")); 17505 for (l = connections; l != NULL; l = l->next) 17506 { 17507 GDBusConnection *connection = l->data; 17508 g_dbus_connection_emit_signal (connection, 17509 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.control.Power", "PowerLost", 17510 signal_variant, NULL); 17511 } 17512 g_variant_unref (signal_variant); 17513 g_list_free_full (connections, g_object_unref); 17514 } 17515 17516 static void control_power_skeleton_iface_init (ControlPowerIface *iface); 17517 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 17518 G_DEFINE_TYPE_WITH_CODE (ControlPowerSkeleton, control_power_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 17519 G_ADD_PRIVATE (ControlPowerSkeleton) 17520 G_IMPLEMENT_INTERFACE (TYPE_CONTROL_POWER, control_power_skeleton_iface_init)); 17521 17522 #else 17523 G_DEFINE_TYPE_WITH_CODE (ControlPowerSkeleton, control_power_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 17524 G_IMPLEMENT_INTERFACE (TYPE_CONTROL_POWER, control_power_skeleton_iface_init)); 17525 17526 #endif 17527 static void 17528 control_power_skeleton_finalize (GObject *object) 17529 { 17530 ControlPowerSkeleton *skeleton = CONTROL_POWER_SKELETON (object); 17531 guint n; 17532 for (n = 0; n < 3; n++) 17533 g_value_unset (&skeleton->priv->properties[n]); 17534 g_free (skeleton->priv->properties); 17535 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 17536 if (skeleton->priv->changed_properties_idle_source != NULL) 17537 g_source_destroy (skeleton->priv->changed_properties_idle_source); 17538 g_main_context_unref (skeleton->priv->context); 17539 g_mutex_clear (&skeleton->priv->lock); 17540 G_OBJECT_CLASS (control_power_skeleton_parent_class)->finalize (object); 17541 } 17542 17543 static void 17544 control_power_skeleton_get_property (GObject *object, 17545 guint prop_id, 17546 GValue *value, 17547 GParamSpec *pspec G_GNUC_UNUSED) 17548 { 17549 ControlPowerSkeleton *skeleton = CONTROL_POWER_SKELETON (object); 17550 g_assert (prop_id != 0 && prop_id - 1 < 3); 17551 g_mutex_lock (&skeleton->priv->lock); 17552 g_value_copy (&skeleton->priv->properties[prop_id - 1], value); 17553 g_mutex_unlock (&skeleton->priv->lock); 17554 } 17555 17556 static gboolean 17557 _control_power_emit_changed (gpointer user_data) 17558 { 17559 ControlPowerSkeleton *skeleton = CONTROL_POWER_SKELETON (user_data); 17560 GList *l; 17561 GVariantBuilder builder; 17562 GVariantBuilder invalidated_builder; 17563 guint num_changes; 17564 17565 g_mutex_lock (&skeleton->priv->lock); 17566 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 17567 g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as")); 17568 for (l = skeleton->priv->changed_properties, num_changes = 0; l != NULL; l = l->next) 17569 { 17570 ChangedProperty *cp = l->data; 17571 GVariant *variant; 17572 const GValue *cur_value; 17573 17574 cur_value = &skeleton->priv->properties[cp->prop_id - 1]; 17575 if (!_g_value_equal (cur_value, &cp->orig_value)) 17576 { 17577 variant = g_dbus_gvalue_to_gvariant (cur_value, G_VARIANT_TYPE (cp->info->parent_struct.signature)); 17578 g_variant_builder_add (&builder, "{sv}", cp->info->parent_struct.name, variant); 17579 g_variant_unref (variant); 17580 num_changes++; 17581 } 17582 } 17583 if (num_changes > 0) 17584 { 17585 GList *connections, *ll; 17586 GVariant *signal_variant; 17587 signal_variant = g_variant_ref_sink (g_variant_new ("(sa{sv}as)", "org.openbmc.control.Power", 17588 &builder, &invalidated_builder)); 17589 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 17590 for (ll = connections; ll != NULL; ll = ll->next) 17591 { 17592 GDBusConnection *connection = ll->data; 17593 17594 g_dbus_connection_emit_signal (connection, 17595 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), 17596 "org.freedesktop.DBus.Properties", 17597 "PropertiesChanged", 17598 signal_variant, 17599 NULL); 17600 } 17601 g_variant_unref (signal_variant); 17602 g_list_free_full (connections, g_object_unref); 17603 } 17604 else 17605 { 17606 g_variant_builder_clear (&builder); 17607 g_variant_builder_clear (&invalidated_builder); 17608 } 17609 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 17610 skeleton->priv->changed_properties = NULL; 17611 skeleton->priv->changed_properties_idle_source = NULL; 17612 g_mutex_unlock (&skeleton->priv->lock); 17613 return FALSE; 17614 } 17615 17616 static void 17617 _control_power_schedule_emit_changed (ControlPowerSkeleton *skeleton, const _ExtendedGDBusPropertyInfo *info, guint prop_id, const GValue *orig_value) 17618 { 17619 ChangedProperty *cp; 17620 GList *l; 17621 cp = NULL; 17622 for (l = skeleton->priv->changed_properties; l != NULL; l = l->next) 17623 { 17624 ChangedProperty *i_cp = l->data; 17625 if (i_cp->info == info) 17626 { 17627 cp = i_cp; 17628 break; 17629 } 17630 } 17631 if (cp == NULL) 17632 { 17633 cp = g_new0 (ChangedProperty, 1); 17634 cp->prop_id = prop_id; 17635 cp->info = info; 17636 skeleton->priv->changed_properties = g_list_prepend (skeleton->priv->changed_properties, cp); 17637 g_value_init (&cp->orig_value, G_VALUE_TYPE (orig_value)); 17638 g_value_copy (orig_value, &cp->orig_value); 17639 } 17640 } 17641 17642 static void 17643 control_power_skeleton_notify (GObject *object, 17644 GParamSpec *pspec G_GNUC_UNUSED) 17645 { 17646 ControlPowerSkeleton *skeleton = CONTROL_POWER_SKELETON (object); 17647 g_mutex_lock (&skeleton->priv->lock); 17648 if (skeleton->priv->changed_properties != NULL && 17649 skeleton->priv->changed_properties_idle_source == NULL) 17650 { 17651 skeleton->priv->changed_properties_idle_source = g_idle_source_new (); 17652 g_source_set_priority (skeleton->priv->changed_properties_idle_source, G_PRIORITY_DEFAULT); 17653 g_source_set_callback (skeleton->priv->changed_properties_idle_source, _control_power_emit_changed, g_object_ref (skeleton), (GDestroyNotify) g_object_unref); 17654 g_source_set_name (skeleton->priv->changed_properties_idle_source, "[generated] _control_power_emit_changed"); 17655 g_source_attach (skeleton->priv->changed_properties_idle_source, skeleton->priv->context); 17656 g_source_unref (skeleton->priv->changed_properties_idle_source); 17657 } 17658 g_mutex_unlock (&skeleton->priv->lock); 17659 } 17660 17661 static void 17662 control_power_skeleton_set_property (GObject *object, 17663 guint prop_id, 17664 const GValue *value, 17665 GParamSpec *pspec) 17666 { 17667 ControlPowerSkeleton *skeleton = CONTROL_POWER_SKELETON (object); 17668 g_assert (prop_id != 0 && prop_id - 1 < 3); 17669 g_mutex_lock (&skeleton->priv->lock); 17670 g_object_freeze_notify (object); 17671 if (!_g_value_equal (value, &skeleton->priv->properties[prop_id - 1])) 17672 { 17673 if (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)) != NULL) 17674 _control_power_schedule_emit_changed (skeleton, _control_power_property_info_pointers[prop_id - 1], prop_id, &skeleton->priv->properties[prop_id - 1]); 17675 g_value_copy (value, &skeleton->priv->properties[prop_id - 1]); 17676 g_object_notify_by_pspec (object, pspec); 17677 } 17678 g_mutex_unlock (&skeleton->priv->lock); 17679 g_object_thaw_notify (object); 17680 } 17681 17682 static void 17683 control_power_skeleton_init (ControlPowerSkeleton *skeleton) 17684 { 17685 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 17686 skeleton->priv = control_power_skeleton_get_instance_private (skeleton); 17687 #else 17688 skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, TYPE_CONTROL_POWER_SKELETON, ControlPowerSkeletonPrivate); 17689 #endif 17690 17691 g_mutex_init (&skeleton->priv->lock); 17692 skeleton->priv->context = g_main_context_ref_thread_default (); 17693 skeleton->priv->properties = g_new0 (GValue, 3); 17694 g_value_init (&skeleton->priv->properties[0], G_TYPE_INT); 17695 g_value_init (&skeleton->priv->properties[1], G_TYPE_INT); 17696 g_value_init (&skeleton->priv->properties[2], G_TYPE_INT); 17697 } 17698 17699 static gint 17700 control_power_skeleton_get_pgood (ControlPower *object) 17701 { 17702 ControlPowerSkeleton *skeleton = CONTROL_POWER_SKELETON (object); 17703 gint value; 17704 g_mutex_lock (&skeleton->priv->lock); 17705 value = g_value_get_int (&(skeleton->priv->properties[0])); 17706 g_mutex_unlock (&skeleton->priv->lock); 17707 return value; 17708 } 17709 17710 static gint 17711 control_power_skeleton_get_state (ControlPower *object) 17712 { 17713 ControlPowerSkeleton *skeleton = CONTROL_POWER_SKELETON (object); 17714 gint value; 17715 g_mutex_lock (&skeleton->priv->lock); 17716 value = g_value_get_int (&(skeleton->priv->properties[1])); 17717 g_mutex_unlock (&skeleton->priv->lock); 17718 return value; 17719 } 17720 17721 static gint 17722 control_power_skeleton_get_pgood_timeout (ControlPower *object) 17723 { 17724 ControlPowerSkeleton *skeleton = CONTROL_POWER_SKELETON (object); 17725 gint value; 17726 g_mutex_lock (&skeleton->priv->lock); 17727 value = g_value_get_int (&(skeleton->priv->properties[2])); 17728 g_mutex_unlock (&skeleton->priv->lock); 17729 return value; 17730 } 17731 17732 static void 17733 control_power_skeleton_class_init (ControlPowerSkeletonClass *klass) 17734 { 17735 GObjectClass *gobject_class; 17736 GDBusInterfaceSkeletonClass *skeleton_class; 17737 17738 gobject_class = G_OBJECT_CLASS (klass); 17739 gobject_class->finalize = control_power_skeleton_finalize; 17740 gobject_class->get_property = control_power_skeleton_get_property; 17741 gobject_class->set_property = control_power_skeleton_set_property; 17742 gobject_class->notify = control_power_skeleton_notify; 17743 17744 17745 control_power_override_properties (gobject_class, 1); 17746 17747 skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass); 17748 skeleton_class->get_info = control_power_skeleton_dbus_interface_get_info; 17749 skeleton_class->get_properties = control_power_skeleton_dbus_interface_get_properties; 17750 skeleton_class->flush = control_power_skeleton_dbus_interface_flush; 17751 skeleton_class->get_vtable = control_power_skeleton_dbus_interface_get_vtable; 17752 17753 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 17754 g_type_class_add_private (klass, sizeof (ControlPowerSkeletonPrivate)); 17755 #endif 17756 } 17757 17758 static void 17759 control_power_skeleton_iface_init (ControlPowerIface *iface) 17760 { 17761 iface->power_good = _control_power_on_signal_power_good; 17762 iface->power_lost = _control_power_on_signal_power_lost; 17763 iface->get_pgood = control_power_skeleton_get_pgood; 17764 iface->get_state = control_power_skeleton_get_state; 17765 iface->get_pgood_timeout = control_power_skeleton_get_pgood_timeout; 17766 } 17767 17768 /** 17769 * control_power_skeleton_new: 17770 * 17771 * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Power.top_of_page">org.openbmc.control.Power</link>. 17772 * 17773 * Returns: (transfer full) (type ControlPowerSkeleton): The skeleton object. 17774 */ 17775 ControlPower * 17776 control_power_skeleton_new (void) 17777 { 17778 return CONTROL_POWER (g_object_new (TYPE_CONTROL_POWER_SKELETON, NULL)); 17779 } 17780 17781 /* ------------------------------------------------------------------------ 17782 * Code for interface org.openbmc.control.Checkstop 17783 * ------------------------------------------------------------------------ 17784 */ 17785 17786 /** 17787 * SECTION:ControlCheckstop 17788 * @title: ControlCheckstop 17789 * @short_description: Generated C code for the org.openbmc.control.Checkstop D-Bus interface 17790 * 17791 * This section contains code for working with the <link linkend="gdbus-interface-org-openbmc-control-Checkstop.top_of_page">org.openbmc.control.Checkstop</link> D-Bus interface in C. 17792 */ 17793 17794 /* ---- Introspection data for org.openbmc.control.Checkstop ---- */ 17795 17796 static const _ExtendedGDBusInterfaceInfo _control_checkstop_interface_info = 17797 { 17798 { 17799 -1, 17800 (gchar *) "org.openbmc.control.Checkstop", 17801 NULL, 17802 NULL, 17803 NULL, 17804 NULL 17805 }, 17806 "control-checkstop", 17807 }; 17808 17809 17810 /** 17811 * control_checkstop_interface_info: 17812 * 17813 * Gets a machine-readable description of the <link linkend="gdbus-interface-org-openbmc-control-Checkstop.top_of_page">org.openbmc.control.Checkstop</link> D-Bus interface. 17814 * 17815 * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free. 17816 */ 17817 GDBusInterfaceInfo * 17818 control_checkstop_interface_info (void) 17819 { 17820 return (GDBusInterfaceInfo *) &_control_checkstop_interface_info.parent_struct; 17821 } 17822 17823 /** 17824 * control_checkstop_override_properties: 17825 * @klass: The class structure for a #GObject<!-- -->-derived class. 17826 * @property_id_begin: The property id to assign to the first overridden property. 17827 * 17828 * Overrides all #GObject properties in the #ControlCheckstop interface for a concrete class. 17829 * The properties are overridden in the order they are defined. 17830 * 17831 * Returns: The last property id. 17832 */ 17833 guint 17834 control_checkstop_override_properties (GObjectClass *klass, guint property_id_begin) 17835 { 17836 return property_id_begin - 1; 17837 } 17838 17839 17840 17841 /** 17842 * ControlCheckstop: 17843 * 17844 * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Checkstop.top_of_page">org.openbmc.control.Checkstop</link>. 17845 */ 17846 17847 /** 17848 * ControlCheckstopIface: 17849 * @parent_iface: The parent interface. 17850 * 17851 * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Checkstop.top_of_page">org.openbmc.control.Checkstop</link>. 17852 */ 17853 17854 typedef ControlCheckstopIface ControlCheckstopInterface; 17855 G_DEFINE_INTERFACE (ControlCheckstop, control_checkstop, G_TYPE_OBJECT); 17856 17857 static void 17858 control_checkstop_default_init (ControlCheckstopIface *iface) 17859 { 17860 } 17861 17862 /* ------------------------------------------------------------------------ */ 17863 17864 /** 17865 * ControlCheckstopProxy: 17866 * 17867 * The #ControlCheckstopProxy structure contains only private data and should only be accessed using the provided API. 17868 */ 17869 17870 /** 17871 * ControlCheckstopProxyClass: 17872 * @parent_class: The parent class. 17873 * 17874 * Class structure for #ControlCheckstopProxy. 17875 */ 17876 17877 struct _ControlCheckstopProxyPrivate 17878 { 17879 GData *qdata; 17880 }; 17881 17882 static void control_checkstop_proxy_iface_init (ControlCheckstopIface *iface); 17883 17884 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 17885 G_DEFINE_TYPE_WITH_CODE (ControlCheckstopProxy, control_checkstop_proxy, G_TYPE_DBUS_PROXY, 17886 G_ADD_PRIVATE (ControlCheckstopProxy) 17887 G_IMPLEMENT_INTERFACE (TYPE_CONTROL_CHECKSTOP, control_checkstop_proxy_iface_init)); 17888 17889 #else 17890 G_DEFINE_TYPE_WITH_CODE (ControlCheckstopProxy, control_checkstop_proxy, G_TYPE_DBUS_PROXY, 17891 G_IMPLEMENT_INTERFACE (TYPE_CONTROL_CHECKSTOP, control_checkstop_proxy_iface_init)); 17892 17893 #endif 17894 static void 17895 control_checkstop_proxy_finalize (GObject *object) 17896 { 17897 ControlCheckstopProxy *proxy = CONTROL_CHECKSTOP_PROXY (object); 17898 g_datalist_clear (&proxy->priv->qdata); 17899 G_OBJECT_CLASS (control_checkstop_proxy_parent_class)->finalize (object); 17900 } 17901 17902 static void 17903 control_checkstop_proxy_get_property (GObject *object, 17904 guint prop_id, 17905 GValue *value, 17906 GParamSpec *pspec G_GNUC_UNUSED) 17907 { 17908 } 17909 17910 static void 17911 control_checkstop_proxy_set_property (GObject *object, 17912 guint prop_id, 17913 const GValue *value, 17914 GParamSpec *pspec G_GNUC_UNUSED) 17915 { 17916 } 17917 17918 static void 17919 control_checkstop_proxy_g_signal (GDBusProxy *proxy, 17920 const gchar *sender_name G_GNUC_UNUSED, 17921 const gchar *signal_name, 17922 GVariant *parameters) 17923 { 17924 _ExtendedGDBusSignalInfo *info; 17925 GVariantIter iter; 17926 GVariant *child; 17927 GValue *paramv; 17928 guint num_params; 17929 guint n; 17930 guint signal_id; 17931 info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_control_checkstop_interface_info.parent_struct, signal_name); 17932 if (info == NULL) 17933 return; 17934 num_params = g_variant_n_children (parameters); 17935 paramv = g_new0 (GValue, num_params + 1); 17936 g_value_init (¶mv[0], TYPE_CONTROL_CHECKSTOP); 17937 g_value_set_object (¶mv[0], proxy); 17938 g_variant_iter_init (&iter, parameters); 17939 n = 1; 17940 while ((child = g_variant_iter_next_value (&iter)) != NULL) 17941 { 17942 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1]; 17943 if (arg_info->use_gvariant) 17944 { 17945 g_value_init (¶mv[n], G_TYPE_VARIANT); 17946 g_value_set_variant (¶mv[n], child); 17947 n++; 17948 } 17949 else 17950 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 17951 g_variant_unref (child); 17952 } 17953 signal_id = g_signal_lookup (info->signal_name, TYPE_CONTROL_CHECKSTOP); 17954 g_signal_emitv (paramv, signal_id, 0, NULL); 17955 for (n = 0; n < num_params + 1; n++) 17956 g_value_unset (¶mv[n]); 17957 g_free (paramv); 17958 } 17959 17960 static void 17961 control_checkstop_proxy_g_properties_changed (GDBusProxy *_proxy, 17962 GVariant *changed_properties, 17963 const gchar *const *invalidated_properties) 17964 { 17965 ControlCheckstopProxy *proxy = CONTROL_CHECKSTOP_PROXY (_proxy); 17966 guint n; 17967 const gchar *key; 17968 GVariantIter *iter; 17969 _ExtendedGDBusPropertyInfo *info; 17970 g_variant_get (changed_properties, "a{sv}", &iter); 17971 while (g_variant_iter_next (iter, "{&sv}", &key, NULL)) 17972 { 17973 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_control_checkstop_interface_info.parent_struct, key); 17974 g_datalist_remove_data (&proxy->priv->qdata, key); 17975 if (info != NULL) 17976 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 17977 } 17978 g_variant_iter_free (iter); 17979 for (n = 0; invalidated_properties[n] != NULL; n++) 17980 { 17981 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_control_checkstop_interface_info.parent_struct, invalidated_properties[n]); 17982 g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]); 17983 if (info != NULL) 17984 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 17985 } 17986 } 17987 17988 static void 17989 control_checkstop_proxy_init (ControlCheckstopProxy *proxy) 17990 { 17991 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 17992 proxy->priv = control_checkstop_proxy_get_instance_private (proxy); 17993 #else 17994 proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, TYPE_CONTROL_CHECKSTOP_PROXY, ControlCheckstopProxyPrivate); 17995 #endif 17996 17997 g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), control_checkstop_interface_info ()); 17998 } 17999 18000 static void 18001 control_checkstop_proxy_class_init (ControlCheckstopProxyClass *klass) 18002 { 18003 GObjectClass *gobject_class; 18004 GDBusProxyClass *proxy_class; 18005 18006 gobject_class = G_OBJECT_CLASS (klass); 18007 gobject_class->finalize = control_checkstop_proxy_finalize; 18008 gobject_class->get_property = control_checkstop_proxy_get_property; 18009 gobject_class->set_property = control_checkstop_proxy_set_property; 18010 18011 proxy_class = G_DBUS_PROXY_CLASS (klass); 18012 proxy_class->g_signal = control_checkstop_proxy_g_signal; 18013 proxy_class->g_properties_changed = control_checkstop_proxy_g_properties_changed; 18014 18015 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 18016 g_type_class_add_private (klass, sizeof (ControlCheckstopProxyPrivate)); 18017 #endif 18018 } 18019 18020 static void 18021 control_checkstop_proxy_iface_init (ControlCheckstopIface *iface) 18022 { 18023 } 18024 18025 /** 18026 * control_checkstop_proxy_new: 18027 * @connection: A #GDBusConnection. 18028 * @flags: Flags from the #GDBusProxyFlags enumeration. 18029 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 18030 * @object_path: An object path. 18031 * @cancellable: (allow-none): A #GCancellable or %NULL. 18032 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 18033 * @user_data: User data to pass to @callback. 18034 * 18035 * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Checkstop.top_of_page">org.openbmc.control.Checkstop</link>. See g_dbus_proxy_new() for more details. 18036 * 18037 * 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. 18038 * You can then call control_checkstop_proxy_new_finish() to get the result of the operation. 18039 * 18040 * See control_checkstop_proxy_new_sync() for the synchronous, blocking version of this constructor. 18041 */ 18042 void 18043 control_checkstop_proxy_new ( 18044 GDBusConnection *connection, 18045 GDBusProxyFlags flags, 18046 const gchar *name, 18047 const gchar *object_path, 18048 GCancellable *cancellable, 18049 GAsyncReadyCallback callback, 18050 gpointer user_data) 18051 { 18052 g_async_initable_new_async (TYPE_CONTROL_CHECKSTOP_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.control.Checkstop", NULL); 18053 } 18054 18055 /** 18056 * control_checkstop_proxy_new_finish: 18057 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to control_checkstop_proxy_new(). 18058 * @error: Return location for error or %NULL 18059 * 18060 * Finishes an operation started with control_checkstop_proxy_new(). 18061 * 18062 * Returns: (transfer full) (type ControlCheckstopProxy): The constructed proxy object or %NULL if @error is set. 18063 */ 18064 ControlCheckstop * 18065 control_checkstop_proxy_new_finish ( 18066 GAsyncResult *res, 18067 GError **error) 18068 { 18069 GObject *ret; 18070 GObject *source_object; 18071 source_object = g_async_result_get_source_object (res); 18072 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 18073 g_object_unref (source_object); 18074 if (ret != NULL) 18075 return CONTROL_CHECKSTOP (ret); 18076 else 18077 return NULL; 18078 } 18079 18080 /** 18081 * control_checkstop_proxy_new_sync: 18082 * @connection: A #GDBusConnection. 18083 * @flags: Flags from the #GDBusProxyFlags enumeration. 18084 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 18085 * @object_path: An object path. 18086 * @cancellable: (allow-none): A #GCancellable or %NULL. 18087 * @error: Return location for error or %NULL 18088 * 18089 * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Checkstop.top_of_page">org.openbmc.control.Checkstop</link>. See g_dbus_proxy_new_sync() for more details. 18090 * 18091 * The calling thread is blocked until a reply is received. 18092 * 18093 * See control_checkstop_proxy_new() for the asynchronous version of this constructor. 18094 * 18095 * Returns: (transfer full) (type ControlCheckstopProxy): The constructed proxy object or %NULL if @error is set. 18096 */ 18097 ControlCheckstop * 18098 control_checkstop_proxy_new_sync ( 18099 GDBusConnection *connection, 18100 GDBusProxyFlags flags, 18101 const gchar *name, 18102 const gchar *object_path, 18103 GCancellable *cancellable, 18104 GError **error) 18105 { 18106 GInitable *ret; 18107 ret = g_initable_new (TYPE_CONTROL_CHECKSTOP_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.control.Checkstop", NULL); 18108 if (ret != NULL) 18109 return CONTROL_CHECKSTOP (ret); 18110 else 18111 return NULL; 18112 } 18113 18114 18115 /** 18116 * control_checkstop_proxy_new_for_bus: 18117 * @bus_type: A #GBusType. 18118 * @flags: Flags from the #GDBusProxyFlags enumeration. 18119 * @name: A bus name (well-known or unique). 18120 * @object_path: An object path. 18121 * @cancellable: (allow-none): A #GCancellable or %NULL. 18122 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 18123 * @user_data: User data to pass to @callback. 18124 * 18125 * Like control_checkstop_proxy_new() but takes a #GBusType instead of a #GDBusConnection. 18126 * 18127 * 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. 18128 * You can then call control_checkstop_proxy_new_for_bus_finish() to get the result of the operation. 18129 * 18130 * See control_checkstop_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor. 18131 */ 18132 void 18133 control_checkstop_proxy_new_for_bus ( 18134 GBusType bus_type, 18135 GDBusProxyFlags flags, 18136 const gchar *name, 18137 const gchar *object_path, 18138 GCancellable *cancellable, 18139 GAsyncReadyCallback callback, 18140 gpointer user_data) 18141 { 18142 g_async_initable_new_async (TYPE_CONTROL_CHECKSTOP_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.control.Checkstop", NULL); 18143 } 18144 18145 /** 18146 * control_checkstop_proxy_new_for_bus_finish: 18147 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to control_checkstop_proxy_new_for_bus(). 18148 * @error: Return location for error or %NULL 18149 * 18150 * Finishes an operation started with control_checkstop_proxy_new_for_bus(). 18151 * 18152 * Returns: (transfer full) (type ControlCheckstopProxy): The constructed proxy object or %NULL if @error is set. 18153 */ 18154 ControlCheckstop * 18155 control_checkstop_proxy_new_for_bus_finish ( 18156 GAsyncResult *res, 18157 GError **error) 18158 { 18159 GObject *ret; 18160 GObject *source_object; 18161 source_object = g_async_result_get_source_object (res); 18162 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 18163 g_object_unref (source_object); 18164 if (ret != NULL) 18165 return CONTROL_CHECKSTOP (ret); 18166 else 18167 return NULL; 18168 } 18169 18170 /** 18171 * control_checkstop_proxy_new_for_bus_sync: 18172 * @bus_type: A #GBusType. 18173 * @flags: Flags from the #GDBusProxyFlags enumeration. 18174 * @name: A bus name (well-known or unique). 18175 * @object_path: An object path. 18176 * @cancellable: (allow-none): A #GCancellable or %NULL. 18177 * @error: Return location for error or %NULL 18178 * 18179 * Like control_checkstop_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection. 18180 * 18181 * The calling thread is blocked until a reply is received. 18182 * 18183 * See control_checkstop_proxy_new_for_bus() for the asynchronous version of this constructor. 18184 * 18185 * Returns: (transfer full) (type ControlCheckstopProxy): The constructed proxy object or %NULL if @error is set. 18186 */ 18187 ControlCheckstop * 18188 control_checkstop_proxy_new_for_bus_sync ( 18189 GBusType bus_type, 18190 GDBusProxyFlags flags, 18191 const gchar *name, 18192 const gchar *object_path, 18193 GCancellable *cancellable, 18194 GError **error) 18195 { 18196 GInitable *ret; 18197 ret = g_initable_new (TYPE_CONTROL_CHECKSTOP_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.control.Checkstop", NULL); 18198 if (ret != NULL) 18199 return CONTROL_CHECKSTOP (ret); 18200 else 18201 return NULL; 18202 } 18203 18204 18205 /* ------------------------------------------------------------------------ */ 18206 18207 /** 18208 * ControlCheckstopSkeleton: 18209 * 18210 * The #ControlCheckstopSkeleton structure contains only private data and should only be accessed using the provided API. 18211 */ 18212 18213 /** 18214 * ControlCheckstopSkeletonClass: 18215 * @parent_class: The parent class. 18216 * 18217 * Class structure for #ControlCheckstopSkeleton. 18218 */ 18219 18220 struct _ControlCheckstopSkeletonPrivate 18221 { 18222 GValue *properties; 18223 GList *changed_properties; 18224 GSource *changed_properties_idle_source; 18225 GMainContext *context; 18226 GMutex lock; 18227 }; 18228 18229 static void 18230 _control_checkstop_skeleton_handle_method_call ( 18231 GDBusConnection *connection G_GNUC_UNUSED, 18232 const gchar *sender G_GNUC_UNUSED, 18233 const gchar *object_path G_GNUC_UNUSED, 18234 const gchar *interface_name, 18235 const gchar *method_name, 18236 GVariant *parameters, 18237 GDBusMethodInvocation *invocation, 18238 gpointer user_data) 18239 { 18240 ControlCheckstopSkeleton *skeleton = CONTROL_CHECKSTOP_SKELETON (user_data); 18241 _ExtendedGDBusMethodInfo *info; 18242 GVariantIter iter; 18243 GVariant *child; 18244 GValue *paramv; 18245 guint num_params; 18246 guint num_extra; 18247 guint n; 18248 guint signal_id; 18249 GValue return_value = G_VALUE_INIT; 18250 info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation); 18251 g_assert (info != NULL); 18252 num_params = g_variant_n_children (parameters); 18253 num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra); 18254 n = 0; 18255 g_value_init (¶mv[n], TYPE_CONTROL_CHECKSTOP); 18256 g_value_set_object (¶mv[n++], skeleton); 18257 g_value_init (¶mv[n], G_TYPE_DBUS_METHOD_INVOCATION); 18258 g_value_set_object (¶mv[n++], invocation); 18259 if (info->pass_fdlist) 18260 { 18261 #ifdef G_OS_UNIX 18262 g_value_init (¶mv[n], G_TYPE_UNIX_FD_LIST); 18263 g_value_set_object (¶mv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation))); 18264 #else 18265 g_assert_not_reached (); 18266 #endif 18267 } 18268 g_variant_iter_init (&iter, parameters); 18269 while ((child = g_variant_iter_next_value (&iter)) != NULL) 18270 { 18271 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra]; 18272 if (arg_info->use_gvariant) 18273 { 18274 g_value_init (¶mv[n], G_TYPE_VARIANT); 18275 g_value_set_variant (¶mv[n], child); 18276 n++; 18277 } 18278 else 18279 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 18280 g_variant_unref (child); 18281 } 18282 signal_id = g_signal_lookup (info->signal_name, TYPE_CONTROL_CHECKSTOP); 18283 g_value_init (&return_value, G_TYPE_BOOLEAN); 18284 g_signal_emitv (paramv, signal_id, 0, &return_value); 18285 if (!g_value_get_boolean (&return_value)) 18286 g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name); 18287 g_value_unset (&return_value); 18288 for (n = 0; n < num_params + num_extra; n++) 18289 g_value_unset (¶mv[n]); 18290 g_free (paramv); 18291 } 18292 18293 static GVariant * 18294 _control_checkstop_skeleton_handle_get_property ( 18295 GDBusConnection *connection G_GNUC_UNUSED, 18296 const gchar *sender G_GNUC_UNUSED, 18297 const gchar *object_path G_GNUC_UNUSED, 18298 const gchar *interface_name G_GNUC_UNUSED, 18299 const gchar *property_name, 18300 GError **error, 18301 gpointer user_data) 18302 { 18303 ControlCheckstopSkeleton *skeleton = CONTROL_CHECKSTOP_SKELETON (user_data); 18304 GValue value = G_VALUE_INIT; 18305 GParamSpec *pspec; 18306 _ExtendedGDBusPropertyInfo *info; 18307 GVariant *ret; 18308 ret = NULL; 18309 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_control_checkstop_interface_info.parent_struct, property_name); 18310 g_assert (info != NULL); 18311 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 18312 if (pspec == NULL) 18313 { 18314 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 18315 } 18316 else 18317 { 18318 g_value_init (&value, pspec->value_type); 18319 g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value); 18320 ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature)); 18321 g_value_unset (&value); 18322 } 18323 return ret; 18324 } 18325 18326 static gboolean 18327 _control_checkstop_skeleton_handle_set_property ( 18328 GDBusConnection *connection G_GNUC_UNUSED, 18329 const gchar *sender G_GNUC_UNUSED, 18330 const gchar *object_path G_GNUC_UNUSED, 18331 const gchar *interface_name G_GNUC_UNUSED, 18332 const gchar *property_name, 18333 GVariant *variant, 18334 GError **error, 18335 gpointer user_data) 18336 { 18337 ControlCheckstopSkeleton *skeleton = CONTROL_CHECKSTOP_SKELETON (user_data); 18338 GValue value = G_VALUE_INIT; 18339 GParamSpec *pspec; 18340 _ExtendedGDBusPropertyInfo *info; 18341 gboolean ret; 18342 ret = FALSE; 18343 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_control_checkstop_interface_info.parent_struct, property_name); 18344 g_assert (info != NULL); 18345 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 18346 if (pspec == NULL) 18347 { 18348 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 18349 } 18350 else 18351 { 18352 if (info->use_gvariant) 18353 g_value_set_variant (&value, variant); 18354 else 18355 g_dbus_gvariant_to_gvalue (variant, &value); 18356 g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value); 18357 g_value_unset (&value); 18358 ret = TRUE; 18359 } 18360 return ret; 18361 } 18362 18363 static const GDBusInterfaceVTable _control_checkstop_skeleton_vtable = 18364 { 18365 _control_checkstop_skeleton_handle_method_call, 18366 _control_checkstop_skeleton_handle_get_property, 18367 _control_checkstop_skeleton_handle_set_property, 18368 {NULL} 18369 }; 18370 18371 static GDBusInterfaceInfo * 18372 control_checkstop_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 18373 { 18374 return control_checkstop_interface_info (); 18375 } 18376 18377 static GDBusInterfaceVTable * 18378 control_checkstop_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 18379 { 18380 return (GDBusInterfaceVTable *) &_control_checkstop_skeleton_vtable; 18381 } 18382 18383 static GVariant * 18384 control_checkstop_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton) 18385 { 18386 ControlCheckstopSkeleton *skeleton = CONTROL_CHECKSTOP_SKELETON (_skeleton); 18387 18388 GVariantBuilder builder; 18389 guint n; 18390 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 18391 if (_control_checkstop_interface_info.parent_struct.properties == NULL) 18392 goto out; 18393 for (n = 0; _control_checkstop_interface_info.parent_struct.properties[n] != NULL; n++) 18394 { 18395 GDBusPropertyInfo *info = _control_checkstop_interface_info.parent_struct.properties[n]; 18396 if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE) 18397 { 18398 GVariant *value; 18399 value = _control_checkstop_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.control.Checkstop", info->name, NULL, skeleton); 18400 if (value != NULL) 18401 { 18402 g_variant_take_ref (value); 18403 g_variant_builder_add (&builder, "{sv}", info->name, value); 18404 g_variant_unref (value); 18405 } 18406 } 18407 } 18408 out: 18409 return g_variant_builder_end (&builder); 18410 } 18411 18412 static void 18413 control_checkstop_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton) 18414 { 18415 } 18416 18417 static void control_checkstop_skeleton_iface_init (ControlCheckstopIface *iface); 18418 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 18419 G_DEFINE_TYPE_WITH_CODE (ControlCheckstopSkeleton, control_checkstop_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 18420 G_ADD_PRIVATE (ControlCheckstopSkeleton) 18421 G_IMPLEMENT_INTERFACE (TYPE_CONTROL_CHECKSTOP, control_checkstop_skeleton_iface_init)); 18422 18423 #else 18424 G_DEFINE_TYPE_WITH_CODE (ControlCheckstopSkeleton, control_checkstop_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 18425 G_IMPLEMENT_INTERFACE (TYPE_CONTROL_CHECKSTOP, control_checkstop_skeleton_iface_init)); 18426 18427 #endif 18428 static void 18429 control_checkstop_skeleton_finalize (GObject *object) 18430 { 18431 ControlCheckstopSkeleton *skeleton = CONTROL_CHECKSTOP_SKELETON (object); 18432 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 18433 if (skeleton->priv->changed_properties_idle_source != NULL) 18434 g_source_destroy (skeleton->priv->changed_properties_idle_source); 18435 g_main_context_unref (skeleton->priv->context); 18436 g_mutex_clear (&skeleton->priv->lock); 18437 G_OBJECT_CLASS (control_checkstop_skeleton_parent_class)->finalize (object); 18438 } 18439 18440 static void 18441 control_checkstop_skeleton_init (ControlCheckstopSkeleton *skeleton) 18442 { 18443 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 18444 skeleton->priv = control_checkstop_skeleton_get_instance_private (skeleton); 18445 #else 18446 skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, TYPE_CONTROL_CHECKSTOP_SKELETON, ControlCheckstopSkeletonPrivate); 18447 #endif 18448 18449 g_mutex_init (&skeleton->priv->lock); 18450 skeleton->priv->context = g_main_context_ref_thread_default (); 18451 } 18452 18453 static void 18454 control_checkstop_skeleton_class_init (ControlCheckstopSkeletonClass *klass) 18455 { 18456 GObjectClass *gobject_class; 18457 GDBusInterfaceSkeletonClass *skeleton_class; 18458 18459 gobject_class = G_OBJECT_CLASS (klass); 18460 gobject_class->finalize = control_checkstop_skeleton_finalize; 18461 18462 skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass); 18463 skeleton_class->get_info = control_checkstop_skeleton_dbus_interface_get_info; 18464 skeleton_class->get_properties = control_checkstop_skeleton_dbus_interface_get_properties; 18465 skeleton_class->flush = control_checkstop_skeleton_dbus_interface_flush; 18466 skeleton_class->get_vtable = control_checkstop_skeleton_dbus_interface_get_vtable; 18467 18468 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 18469 g_type_class_add_private (klass, sizeof (ControlCheckstopSkeletonPrivate)); 18470 #endif 18471 } 18472 18473 static void 18474 control_checkstop_skeleton_iface_init (ControlCheckstopIface *iface) 18475 { 18476 } 18477 18478 /** 18479 * control_checkstop_skeleton_new: 18480 * 18481 * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Checkstop.top_of_page">org.openbmc.control.Checkstop</link>. 18482 * 18483 * Returns: (transfer full) (type ControlCheckstopSkeleton): The skeleton object. 18484 */ 18485 ControlCheckstop * 18486 control_checkstop_skeleton_new (void) 18487 { 18488 return CONTROL_CHECKSTOP (g_object_new (TYPE_CONTROL_CHECKSTOP_SKELETON, NULL)); 18489 } 18490 18491 /* ------------------------------------------------------------------------ 18492 * Code for interface org.openbmc.Watchdog 18493 * ------------------------------------------------------------------------ 18494 */ 18495 18496 /** 18497 * SECTION:Watchdog 18498 * @title: Watchdog 18499 * @short_description: Generated C code for the org.openbmc.Watchdog D-Bus interface 18500 * 18501 * This section contains code for working with the <link linkend="gdbus-interface-org-openbmc-Watchdog.top_of_page">org.openbmc.Watchdog</link> D-Bus interface in C. 18502 */ 18503 18504 /* ---- Introspection data for org.openbmc.Watchdog ---- */ 18505 18506 static const _ExtendedGDBusMethodInfo _watchdog_method_info_start = 18507 { 18508 { 18509 -1, 18510 (gchar *) "start", 18511 NULL, 18512 NULL, 18513 NULL 18514 }, 18515 "handle-start", 18516 FALSE 18517 }; 18518 18519 static const _ExtendedGDBusMethodInfo _watchdog_method_info_poke = 18520 { 18521 { 18522 -1, 18523 (gchar *) "poke", 18524 NULL, 18525 NULL, 18526 NULL 18527 }, 18528 "handle-poke", 18529 FALSE 18530 }; 18531 18532 static const _ExtendedGDBusMethodInfo _watchdog_method_info_stop = 18533 { 18534 { 18535 -1, 18536 (gchar *) "stop", 18537 NULL, 18538 NULL, 18539 NULL 18540 }, 18541 "handle-stop", 18542 FALSE 18543 }; 18544 18545 static const _ExtendedGDBusArgInfo _watchdog_method_info_set_IN_ARG_interval = 18546 { 18547 { 18548 -1, 18549 (gchar *) "interval", 18550 (gchar *) "i", 18551 NULL 18552 }, 18553 FALSE 18554 }; 18555 18556 static const _ExtendedGDBusArgInfo * const _watchdog_method_info_set_IN_ARG_pointers[] = 18557 { 18558 &_watchdog_method_info_set_IN_ARG_interval, 18559 NULL 18560 }; 18561 18562 static const _ExtendedGDBusMethodInfo _watchdog_method_info_set = 18563 { 18564 { 18565 -1, 18566 (gchar *) "set", 18567 (GDBusArgInfo **) &_watchdog_method_info_set_IN_ARG_pointers, 18568 NULL, 18569 NULL 18570 }, 18571 "handle-set", 18572 FALSE 18573 }; 18574 18575 static const _ExtendedGDBusMethodInfo * const _watchdog_method_info_pointers[] = 18576 { 18577 &_watchdog_method_info_start, 18578 &_watchdog_method_info_poke, 18579 &_watchdog_method_info_stop, 18580 &_watchdog_method_info_set, 18581 NULL 18582 }; 18583 18584 static const _ExtendedGDBusSignalInfo _watchdog_signal_info_watchdog_error = 18585 { 18586 { 18587 -1, 18588 (gchar *) "WatchdogError", 18589 NULL, 18590 NULL 18591 }, 18592 "watchdog-error" 18593 }; 18594 18595 static const _ExtendedGDBusSignalInfo * const _watchdog_signal_info_pointers[] = 18596 { 18597 &_watchdog_signal_info_watchdog_error, 18598 NULL 18599 }; 18600 18601 static const _ExtendedGDBusPropertyInfo _watchdog_property_info_watchdog = 18602 { 18603 { 18604 -1, 18605 (gchar *) "watchdog", 18606 (gchar *) "i", 18607 G_DBUS_PROPERTY_INFO_FLAGS_READABLE | G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE, 18608 NULL 18609 }, 18610 "watchdog", 18611 FALSE 18612 }; 18613 18614 static const _ExtendedGDBusPropertyInfo _watchdog_property_info_poll_interval = 18615 { 18616 { 18617 -1, 18618 (gchar *) "poll_interval", 18619 (gchar *) "i", 18620 G_DBUS_PROPERTY_INFO_FLAGS_READABLE | G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE, 18621 NULL 18622 }, 18623 "poll-interval", 18624 FALSE 18625 }; 18626 18627 static const _ExtendedGDBusPropertyInfo * const _watchdog_property_info_pointers[] = 18628 { 18629 &_watchdog_property_info_watchdog, 18630 &_watchdog_property_info_poll_interval, 18631 NULL 18632 }; 18633 18634 static const _ExtendedGDBusInterfaceInfo _watchdog_interface_info = 18635 { 18636 { 18637 -1, 18638 (gchar *) "org.openbmc.Watchdog", 18639 (GDBusMethodInfo **) &_watchdog_method_info_pointers, 18640 (GDBusSignalInfo **) &_watchdog_signal_info_pointers, 18641 (GDBusPropertyInfo **) &_watchdog_property_info_pointers, 18642 NULL 18643 }, 18644 "watchdog", 18645 }; 18646 18647 18648 /** 18649 * watchdog_interface_info: 18650 * 18651 * Gets a machine-readable description of the <link linkend="gdbus-interface-org-openbmc-Watchdog.top_of_page">org.openbmc.Watchdog</link> D-Bus interface. 18652 * 18653 * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free. 18654 */ 18655 GDBusInterfaceInfo * 18656 watchdog_interface_info (void) 18657 { 18658 return (GDBusInterfaceInfo *) &_watchdog_interface_info.parent_struct; 18659 } 18660 18661 /** 18662 * watchdog_override_properties: 18663 * @klass: The class structure for a #GObject<!-- -->-derived class. 18664 * @property_id_begin: The property id to assign to the first overridden property. 18665 * 18666 * Overrides all #GObject properties in the #Watchdog interface for a concrete class. 18667 * The properties are overridden in the order they are defined. 18668 * 18669 * Returns: The last property id. 18670 */ 18671 guint 18672 watchdog_override_properties (GObjectClass *klass, guint property_id_begin) 18673 { 18674 g_object_class_override_property (klass, property_id_begin++, "watchdog"); 18675 g_object_class_override_property (klass, property_id_begin++, "poll-interval"); 18676 return property_id_begin - 1; 18677 } 18678 18679 18680 18681 /** 18682 * Watchdog: 18683 * 18684 * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Watchdog.top_of_page">org.openbmc.Watchdog</link>. 18685 */ 18686 18687 /** 18688 * WatchdogIface: 18689 * @parent_iface: The parent interface. 18690 * @handle_poke: Handler for the #Watchdog::handle-poke signal. 18691 * @handle_set: Handler for the #Watchdog::handle-set signal. 18692 * @handle_start: Handler for the #Watchdog::handle-start signal. 18693 * @handle_stop: Handler for the #Watchdog::handle-stop signal. 18694 * @get_poll_interval: Getter for the #Watchdog:poll-interval property. 18695 * @get_watchdog: Getter for the #Watchdog:watchdog property. 18696 * @watchdog_error: Handler for the #Watchdog::watchdog-error signal. 18697 * 18698 * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Watchdog.top_of_page">org.openbmc.Watchdog</link>. 18699 */ 18700 18701 typedef WatchdogIface WatchdogInterface; 18702 G_DEFINE_INTERFACE (Watchdog, watchdog, G_TYPE_OBJECT); 18703 18704 static void 18705 watchdog_default_init (WatchdogIface *iface) 18706 { 18707 /* GObject signals for incoming D-Bus method calls: */ 18708 /** 18709 * Watchdog::handle-start: 18710 * @object: A #Watchdog. 18711 * @invocation: A #GDBusMethodInvocation. 18712 * 18713 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-Watchdog.start">start()</link> D-Bus method. 18714 * 18715 * 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 watchdog_complete_start() 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. 18716 * 18717 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 18718 */ 18719 g_signal_new ("handle-start", 18720 G_TYPE_FROM_INTERFACE (iface), 18721 G_SIGNAL_RUN_LAST, 18722 G_STRUCT_OFFSET (WatchdogIface, handle_start), 18723 g_signal_accumulator_true_handled, 18724 NULL, 18725 g_cclosure_marshal_generic, 18726 G_TYPE_BOOLEAN, 18727 1, 18728 G_TYPE_DBUS_METHOD_INVOCATION); 18729 18730 /** 18731 * Watchdog::handle-poke: 18732 * @object: A #Watchdog. 18733 * @invocation: A #GDBusMethodInvocation. 18734 * 18735 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-Watchdog.poke">poke()</link> D-Bus method. 18736 * 18737 * 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 watchdog_complete_poke() 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. 18738 * 18739 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 18740 */ 18741 g_signal_new ("handle-poke", 18742 G_TYPE_FROM_INTERFACE (iface), 18743 G_SIGNAL_RUN_LAST, 18744 G_STRUCT_OFFSET (WatchdogIface, handle_poke), 18745 g_signal_accumulator_true_handled, 18746 NULL, 18747 g_cclosure_marshal_generic, 18748 G_TYPE_BOOLEAN, 18749 1, 18750 G_TYPE_DBUS_METHOD_INVOCATION); 18751 18752 /** 18753 * Watchdog::handle-stop: 18754 * @object: A #Watchdog. 18755 * @invocation: A #GDBusMethodInvocation. 18756 * 18757 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-Watchdog.stop">stop()</link> D-Bus method. 18758 * 18759 * 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 watchdog_complete_stop() 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. 18760 * 18761 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 18762 */ 18763 g_signal_new ("handle-stop", 18764 G_TYPE_FROM_INTERFACE (iface), 18765 G_SIGNAL_RUN_LAST, 18766 G_STRUCT_OFFSET (WatchdogIface, handle_stop), 18767 g_signal_accumulator_true_handled, 18768 NULL, 18769 g_cclosure_marshal_generic, 18770 G_TYPE_BOOLEAN, 18771 1, 18772 G_TYPE_DBUS_METHOD_INVOCATION); 18773 18774 /** 18775 * Watchdog::handle-set: 18776 * @object: A #Watchdog. 18777 * @invocation: A #GDBusMethodInvocation. 18778 * @arg_interval: Argument passed by remote caller. 18779 * 18780 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-Watchdog.set">set()</link> D-Bus method. 18781 * 18782 * 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 watchdog_complete_set() 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. 18783 * 18784 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 18785 */ 18786 g_signal_new ("handle-set", 18787 G_TYPE_FROM_INTERFACE (iface), 18788 G_SIGNAL_RUN_LAST, 18789 G_STRUCT_OFFSET (WatchdogIface, handle_set), 18790 g_signal_accumulator_true_handled, 18791 NULL, 18792 g_cclosure_marshal_generic, 18793 G_TYPE_BOOLEAN, 18794 2, 18795 G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_INT); 18796 18797 /* GObject signals for received D-Bus signals: */ 18798 /** 18799 * Watchdog::watchdog-error: 18800 * @object: A #Watchdog. 18801 * 18802 * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-openbmc-Watchdog.WatchdogError">"WatchdogError"</link> is received. 18803 * 18804 * 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. 18805 */ 18806 g_signal_new ("watchdog-error", 18807 G_TYPE_FROM_INTERFACE (iface), 18808 G_SIGNAL_RUN_LAST, 18809 G_STRUCT_OFFSET (WatchdogIface, watchdog_error), 18810 NULL, 18811 NULL, 18812 g_cclosure_marshal_generic, 18813 G_TYPE_NONE, 18814 0); 18815 18816 /* GObject properties for D-Bus properties: */ 18817 /** 18818 * Watchdog:watchdog: 18819 * 18820 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-Watchdog.watchdog">"watchdog"</link>. 18821 * 18822 * 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. 18823 */ 18824 g_object_interface_install_property (iface, 18825 g_param_spec_int ("watchdog", "watchdog", "watchdog", G_MININT32, G_MAXINT32, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 18826 /** 18827 * Watchdog:poll-interval: 18828 * 18829 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-Watchdog.poll_interval">"poll_interval"</link>. 18830 * 18831 * 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. 18832 */ 18833 g_object_interface_install_property (iface, 18834 g_param_spec_int ("poll-interval", "poll_interval", "poll_interval", G_MININT32, G_MAXINT32, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 18835 } 18836 18837 /** 18838 * watchdog_get_watchdog: (skip) 18839 * @object: A #Watchdog. 18840 * 18841 * Gets the value of the <link linkend="gdbus-property-org-openbmc-Watchdog.watchdog">"watchdog"</link> D-Bus property. 18842 * 18843 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 18844 * 18845 * Returns: The property value. 18846 */ 18847 gint 18848 watchdog_get_watchdog (Watchdog *object) 18849 { 18850 return WATCHDOG_GET_IFACE (object)->get_watchdog (object); 18851 } 18852 18853 /** 18854 * watchdog_set_watchdog: (skip) 18855 * @object: A #Watchdog. 18856 * @value: The value to set. 18857 * 18858 * Sets the <link linkend="gdbus-property-org-openbmc-Watchdog.watchdog">"watchdog"</link> D-Bus property to @value. 18859 * 18860 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 18861 */ 18862 void 18863 watchdog_set_watchdog (Watchdog *object, gint value) 18864 { 18865 g_object_set (G_OBJECT (object), "watchdog", value, NULL); 18866 } 18867 18868 /** 18869 * watchdog_get_poll_interval: (skip) 18870 * @object: A #Watchdog. 18871 * 18872 * Gets the value of the <link linkend="gdbus-property-org-openbmc-Watchdog.poll_interval">"poll_interval"</link> D-Bus property. 18873 * 18874 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 18875 * 18876 * Returns: The property value. 18877 */ 18878 gint 18879 watchdog_get_poll_interval (Watchdog *object) 18880 { 18881 return WATCHDOG_GET_IFACE (object)->get_poll_interval (object); 18882 } 18883 18884 /** 18885 * watchdog_set_poll_interval: (skip) 18886 * @object: A #Watchdog. 18887 * @value: The value to set. 18888 * 18889 * Sets the <link linkend="gdbus-property-org-openbmc-Watchdog.poll_interval">"poll_interval"</link> D-Bus property to @value. 18890 * 18891 * Since this D-Bus property is both readable and writable, it is meaningful to use this function on both the client- and service-side. 18892 */ 18893 void 18894 watchdog_set_poll_interval (Watchdog *object, gint value) 18895 { 18896 g_object_set (G_OBJECT (object), "poll-interval", value, NULL); 18897 } 18898 18899 /** 18900 * watchdog_emit_watchdog_error: 18901 * @object: A #Watchdog. 18902 * 18903 * Emits the <link linkend="gdbus-signal-org-openbmc-Watchdog.WatchdogError">"WatchdogError"</link> D-Bus signal. 18904 */ 18905 void 18906 watchdog_emit_watchdog_error ( 18907 Watchdog *object) 18908 { 18909 g_signal_emit_by_name (object, "watchdog-error"); 18910 } 18911 18912 /** 18913 * watchdog_call_start: 18914 * @proxy: A #WatchdogProxy. 18915 * @cancellable: (allow-none): A #GCancellable or %NULL. 18916 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 18917 * @user_data: User data to pass to @callback. 18918 * 18919 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-Watchdog.start">start()</link> D-Bus method on @proxy. 18920 * 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. 18921 * You can then call watchdog_call_start_finish() to get the result of the operation. 18922 * 18923 * See watchdog_call_start_sync() for the synchronous, blocking version of this method. 18924 */ 18925 void 18926 watchdog_call_start ( 18927 Watchdog *proxy, 18928 GCancellable *cancellable, 18929 GAsyncReadyCallback callback, 18930 gpointer user_data) 18931 { 18932 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 18933 "start", 18934 g_variant_new ("()"), 18935 G_DBUS_CALL_FLAGS_NONE, 18936 -1, 18937 cancellable, 18938 callback, 18939 user_data); 18940 } 18941 18942 /** 18943 * watchdog_call_start_finish: 18944 * @proxy: A #WatchdogProxy. 18945 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to watchdog_call_start(). 18946 * @error: Return location for error or %NULL. 18947 * 18948 * Finishes an operation started with watchdog_call_start(). 18949 * 18950 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 18951 */ 18952 gboolean 18953 watchdog_call_start_finish ( 18954 Watchdog *proxy, 18955 GAsyncResult *res, 18956 GError **error) 18957 { 18958 GVariant *_ret; 18959 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 18960 if (_ret == NULL) 18961 goto _out; 18962 g_variant_get (_ret, 18963 "()"); 18964 g_variant_unref (_ret); 18965 _out: 18966 return _ret != NULL; 18967 } 18968 18969 /** 18970 * watchdog_call_start_sync: 18971 * @proxy: A #WatchdogProxy. 18972 * @cancellable: (allow-none): A #GCancellable or %NULL. 18973 * @error: Return location for error or %NULL. 18974 * 18975 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-Watchdog.start">start()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 18976 * 18977 * See watchdog_call_start() for the asynchronous version of this method. 18978 * 18979 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 18980 */ 18981 gboolean 18982 watchdog_call_start_sync ( 18983 Watchdog *proxy, 18984 GCancellable *cancellable, 18985 GError **error) 18986 { 18987 GVariant *_ret; 18988 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 18989 "start", 18990 g_variant_new ("()"), 18991 G_DBUS_CALL_FLAGS_NONE, 18992 -1, 18993 cancellable, 18994 error); 18995 if (_ret == NULL) 18996 goto _out; 18997 g_variant_get (_ret, 18998 "()"); 18999 g_variant_unref (_ret); 19000 _out: 19001 return _ret != NULL; 19002 } 19003 19004 /** 19005 * watchdog_call_poke: 19006 * @proxy: A #WatchdogProxy. 19007 * @cancellable: (allow-none): A #GCancellable or %NULL. 19008 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 19009 * @user_data: User data to pass to @callback. 19010 * 19011 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-Watchdog.poke">poke()</link> D-Bus method on @proxy. 19012 * 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. 19013 * You can then call watchdog_call_poke_finish() to get the result of the operation. 19014 * 19015 * See watchdog_call_poke_sync() for the synchronous, blocking version of this method. 19016 */ 19017 void 19018 watchdog_call_poke ( 19019 Watchdog *proxy, 19020 GCancellable *cancellable, 19021 GAsyncReadyCallback callback, 19022 gpointer user_data) 19023 { 19024 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 19025 "poke", 19026 g_variant_new ("()"), 19027 G_DBUS_CALL_FLAGS_NONE, 19028 -1, 19029 cancellable, 19030 callback, 19031 user_data); 19032 } 19033 19034 /** 19035 * watchdog_call_poke_finish: 19036 * @proxy: A #WatchdogProxy. 19037 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to watchdog_call_poke(). 19038 * @error: Return location for error or %NULL. 19039 * 19040 * Finishes an operation started with watchdog_call_poke(). 19041 * 19042 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 19043 */ 19044 gboolean 19045 watchdog_call_poke_finish ( 19046 Watchdog *proxy, 19047 GAsyncResult *res, 19048 GError **error) 19049 { 19050 GVariant *_ret; 19051 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 19052 if (_ret == NULL) 19053 goto _out; 19054 g_variant_get (_ret, 19055 "()"); 19056 g_variant_unref (_ret); 19057 _out: 19058 return _ret != NULL; 19059 } 19060 19061 /** 19062 * watchdog_call_poke_sync: 19063 * @proxy: A #WatchdogProxy. 19064 * @cancellable: (allow-none): A #GCancellable or %NULL. 19065 * @error: Return location for error or %NULL. 19066 * 19067 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-Watchdog.poke">poke()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 19068 * 19069 * See watchdog_call_poke() for the asynchronous version of this method. 19070 * 19071 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 19072 */ 19073 gboolean 19074 watchdog_call_poke_sync ( 19075 Watchdog *proxy, 19076 GCancellable *cancellable, 19077 GError **error) 19078 { 19079 GVariant *_ret; 19080 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 19081 "poke", 19082 g_variant_new ("()"), 19083 G_DBUS_CALL_FLAGS_NONE, 19084 -1, 19085 cancellable, 19086 error); 19087 if (_ret == NULL) 19088 goto _out; 19089 g_variant_get (_ret, 19090 "()"); 19091 g_variant_unref (_ret); 19092 _out: 19093 return _ret != NULL; 19094 } 19095 19096 /** 19097 * watchdog_call_stop: 19098 * @proxy: A #WatchdogProxy. 19099 * @cancellable: (allow-none): A #GCancellable or %NULL. 19100 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 19101 * @user_data: User data to pass to @callback. 19102 * 19103 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-Watchdog.stop">stop()</link> D-Bus method on @proxy. 19104 * 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. 19105 * You can then call watchdog_call_stop_finish() to get the result of the operation. 19106 * 19107 * See watchdog_call_stop_sync() for the synchronous, blocking version of this method. 19108 */ 19109 void 19110 watchdog_call_stop ( 19111 Watchdog *proxy, 19112 GCancellable *cancellable, 19113 GAsyncReadyCallback callback, 19114 gpointer user_data) 19115 { 19116 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 19117 "stop", 19118 g_variant_new ("()"), 19119 G_DBUS_CALL_FLAGS_NONE, 19120 -1, 19121 cancellable, 19122 callback, 19123 user_data); 19124 } 19125 19126 /** 19127 * watchdog_call_stop_finish: 19128 * @proxy: A #WatchdogProxy. 19129 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to watchdog_call_stop(). 19130 * @error: Return location for error or %NULL. 19131 * 19132 * Finishes an operation started with watchdog_call_stop(). 19133 * 19134 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 19135 */ 19136 gboolean 19137 watchdog_call_stop_finish ( 19138 Watchdog *proxy, 19139 GAsyncResult *res, 19140 GError **error) 19141 { 19142 GVariant *_ret; 19143 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 19144 if (_ret == NULL) 19145 goto _out; 19146 g_variant_get (_ret, 19147 "()"); 19148 g_variant_unref (_ret); 19149 _out: 19150 return _ret != NULL; 19151 } 19152 19153 /** 19154 * watchdog_call_stop_sync: 19155 * @proxy: A #WatchdogProxy. 19156 * @cancellable: (allow-none): A #GCancellable or %NULL. 19157 * @error: Return location for error or %NULL. 19158 * 19159 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-Watchdog.stop">stop()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 19160 * 19161 * See watchdog_call_stop() for the asynchronous version of this method. 19162 * 19163 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 19164 */ 19165 gboolean 19166 watchdog_call_stop_sync ( 19167 Watchdog *proxy, 19168 GCancellable *cancellable, 19169 GError **error) 19170 { 19171 GVariant *_ret; 19172 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 19173 "stop", 19174 g_variant_new ("()"), 19175 G_DBUS_CALL_FLAGS_NONE, 19176 -1, 19177 cancellable, 19178 error); 19179 if (_ret == NULL) 19180 goto _out; 19181 g_variant_get (_ret, 19182 "()"); 19183 g_variant_unref (_ret); 19184 _out: 19185 return _ret != NULL; 19186 } 19187 19188 /** 19189 * watchdog_call_set: 19190 * @proxy: A #WatchdogProxy. 19191 * @arg_interval: Argument to pass with the method invocation. 19192 * @cancellable: (allow-none): A #GCancellable or %NULL. 19193 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 19194 * @user_data: User data to pass to @callback. 19195 * 19196 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-Watchdog.set">set()</link> D-Bus method on @proxy. 19197 * 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. 19198 * You can then call watchdog_call_set_finish() to get the result of the operation. 19199 * 19200 * See watchdog_call_set_sync() for the synchronous, blocking version of this method. 19201 */ 19202 void 19203 watchdog_call_set ( 19204 Watchdog *proxy, 19205 gint arg_interval, 19206 GCancellable *cancellable, 19207 GAsyncReadyCallback callback, 19208 gpointer user_data) 19209 { 19210 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 19211 "set", 19212 g_variant_new ("(i)", 19213 arg_interval), 19214 G_DBUS_CALL_FLAGS_NONE, 19215 -1, 19216 cancellable, 19217 callback, 19218 user_data); 19219 } 19220 19221 /** 19222 * watchdog_call_set_finish: 19223 * @proxy: A #WatchdogProxy. 19224 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to watchdog_call_set(). 19225 * @error: Return location for error or %NULL. 19226 * 19227 * Finishes an operation started with watchdog_call_set(). 19228 * 19229 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 19230 */ 19231 gboolean 19232 watchdog_call_set_finish ( 19233 Watchdog *proxy, 19234 GAsyncResult *res, 19235 GError **error) 19236 { 19237 GVariant *_ret; 19238 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 19239 if (_ret == NULL) 19240 goto _out; 19241 g_variant_get (_ret, 19242 "()"); 19243 g_variant_unref (_ret); 19244 _out: 19245 return _ret != NULL; 19246 } 19247 19248 /** 19249 * watchdog_call_set_sync: 19250 * @proxy: A #WatchdogProxy. 19251 * @arg_interval: Argument to pass with the method invocation. 19252 * @cancellable: (allow-none): A #GCancellable or %NULL. 19253 * @error: Return location for error or %NULL. 19254 * 19255 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-Watchdog.set">set()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 19256 * 19257 * See watchdog_call_set() for the asynchronous version of this method. 19258 * 19259 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 19260 */ 19261 gboolean 19262 watchdog_call_set_sync ( 19263 Watchdog *proxy, 19264 gint arg_interval, 19265 GCancellable *cancellable, 19266 GError **error) 19267 { 19268 GVariant *_ret; 19269 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 19270 "set", 19271 g_variant_new ("(i)", 19272 arg_interval), 19273 G_DBUS_CALL_FLAGS_NONE, 19274 -1, 19275 cancellable, 19276 error); 19277 if (_ret == NULL) 19278 goto _out; 19279 g_variant_get (_ret, 19280 "()"); 19281 g_variant_unref (_ret); 19282 _out: 19283 return _ret != NULL; 19284 } 19285 19286 /** 19287 * watchdog_complete_start: 19288 * @object: A #Watchdog. 19289 * @invocation: (transfer full): A #GDBusMethodInvocation. 19290 * 19291 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-Watchdog.start">start()</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. 19292 * 19293 * This method will free @invocation, you cannot use it afterwards. 19294 */ 19295 void 19296 watchdog_complete_start ( 19297 Watchdog *object, 19298 GDBusMethodInvocation *invocation) 19299 { 19300 g_dbus_method_invocation_return_value (invocation, 19301 g_variant_new ("()")); 19302 } 19303 19304 /** 19305 * watchdog_complete_poke: 19306 * @object: A #Watchdog. 19307 * @invocation: (transfer full): A #GDBusMethodInvocation. 19308 * 19309 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-Watchdog.poke">poke()</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. 19310 * 19311 * This method will free @invocation, you cannot use it afterwards. 19312 */ 19313 void 19314 watchdog_complete_poke ( 19315 Watchdog *object, 19316 GDBusMethodInvocation *invocation) 19317 { 19318 g_dbus_method_invocation_return_value (invocation, 19319 g_variant_new ("()")); 19320 } 19321 19322 /** 19323 * watchdog_complete_stop: 19324 * @object: A #Watchdog. 19325 * @invocation: (transfer full): A #GDBusMethodInvocation. 19326 * 19327 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-Watchdog.stop">stop()</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. 19328 * 19329 * This method will free @invocation, you cannot use it afterwards. 19330 */ 19331 void 19332 watchdog_complete_stop ( 19333 Watchdog *object, 19334 GDBusMethodInvocation *invocation) 19335 { 19336 g_dbus_method_invocation_return_value (invocation, 19337 g_variant_new ("()")); 19338 } 19339 19340 /** 19341 * watchdog_complete_set: 19342 * @object: A #Watchdog. 19343 * @invocation: (transfer full): A #GDBusMethodInvocation. 19344 * 19345 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-Watchdog.set">set()</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. 19346 * 19347 * This method will free @invocation, you cannot use it afterwards. 19348 */ 19349 void 19350 watchdog_complete_set ( 19351 Watchdog *object, 19352 GDBusMethodInvocation *invocation) 19353 { 19354 g_dbus_method_invocation_return_value (invocation, 19355 g_variant_new ("()")); 19356 } 19357 19358 /* ------------------------------------------------------------------------ */ 19359 19360 /** 19361 * WatchdogProxy: 19362 * 19363 * The #WatchdogProxy structure contains only private data and should only be accessed using the provided API. 19364 */ 19365 19366 /** 19367 * WatchdogProxyClass: 19368 * @parent_class: The parent class. 19369 * 19370 * Class structure for #WatchdogProxy. 19371 */ 19372 19373 struct _WatchdogProxyPrivate 19374 { 19375 GData *qdata; 19376 }; 19377 19378 static void watchdog_proxy_iface_init (WatchdogIface *iface); 19379 19380 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 19381 G_DEFINE_TYPE_WITH_CODE (WatchdogProxy, watchdog_proxy, G_TYPE_DBUS_PROXY, 19382 G_ADD_PRIVATE (WatchdogProxy) 19383 G_IMPLEMENT_INTERFACE (TYPE_WATCHDOG, watchdog_proxy_iface_init)); 19384 19385 #else 19386 G_DEFINE_TYPE_WITH_CODE (WatchdogProxy, watchdog_proxy, G_TYPE_DBUS_PROXY, 19387 G_IMPLEMENT_INTERFACE (TYPE_WATCHDOG, watchdog_proxy_iface_init)); 19388 19389 #endif 19390 static void 19391 watchdog_proxy_finalize (GObject *object) 19392 { 19393 WatchdogProxy *proxy = WATCHDOG_PROXY (object); 19394 g_datalist_clear (&proxy->priv->qdata); 19395 G_OBJECT_CLASS (watchdog_proxy_parent_class)->finalize (object); 19396 } 19397 19398 static void 19399 watchdog_proxy_get_property (GObject *object, 19400 guint prop_id, 19401 GValue *value, 19402 GParamSpec *pspec G_GNUC_UNUSED) 19403 { 19404 const _ExtendedGDBusPropertyInfo *info; 19405 GVariant *variant; 19406 g_assert (prop_id != 0 && prop_id - 1 < 2); 19407 info = _watchdog_property_info_pointers[prop_id - 1]; 19408 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (object), info->parent_struct.name); 19409 if (info->use_gvariant) 19410 { 19411 g_value_set_variant (value, variant); 19412 } 19413 else 19414 { 19415 if (variant != NULL) 19416 g_dbus_gvariant_to_gvalue (variant, value); 19417 } 19418 if (variant != NULL) 19419 g_variant_unref (variant); 19420 } 19421 19422 static void 19423 watchdog_proxy_set_property_cb (GDBusProxy *proxy, 19424 GAsyncResult *res, 19425 gpointer user_data) 19426 { 19427 const _ExtendedGDBusPropertyInfo *info = user_data; 19428 GError *error; 19429 GVariant *_ret; 19430 error = NULL; 19431 _ret = g_dbus_proxy_call_finish (proxy, res, &error); 19432 if (!_ret) 19433 { 19434 g_warning ("Error setting property '%s' on interface org.openbmc.Watchdog: %s (%s, %d)", 19435 info->parent_struct.name, 19436 error->message, g_quark_to_string (error->domain), error->code); 19437 g_error_free (error); 19438 } 19439 else 19440 { 19441 g_variant_unref (_ret); 19442 } 19443 } 19444 19445 static void 19446 watchdog_proxy_set_property (GObject *object, 19447 guint prop_id, 19448 const GValue *value, 19449 GParamSpec *pspec G_GNUC_UNUSED) 19450 { 19451 const _ExtendedGDBusPropertyInfo *info; 19452 GVariant *variant; 19453 g_assert (prop_id != 0 && prop_id - 1 < 2); 19454 info = _watchdog_property_info_pointers[prop_id - 1]; 19455 variant = g_dbus_gvalue_to_gvariant (value, G_VARIANT_TYPE (info->parent_struct.signature)); 19456 g_dbus_proxy_call (G_DBUS_PROXY (object), 19457 "org.freedesktop.DBus.Properties.Set", 19458 g_variant_new ("(ssv)", "org.openbmc.Watchdog", info->parent_struct.name, variant), 19459 G_DBUS_CALL_FLAGS_NONE, 19460 -1, 19461 NULL, (GAsyncReadyCallback) watchdog_proxy_set_property_cb, (GDBusPropertyInfo *) &info->parent_struct); 19462 g_variant_unref (variant); 19463 } 19464 19465 static void 19466 watchdog_proxy_g_signal (GDBusProxy *proxy, 19467 const gchar *sender_name G_GNUC_UNUSED, 19468 const gchar *signal_name, 19469 GVariant *parameters) 19470 { 19471 _ExtendedGDBusSignalInfo *info; 19472 GVariantIter iter; 19473 GVariant *child; 19474 GValue *paramv; 19475 guint num_params; 19476 guint n; 19477 guint signal_id; 19478 info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_watchdog_interface_info.parent_struct, signal_name); 19479 if (info == NULL) 19480 return; 19481 num_params = g_variant_n_children (parameters); 19482 paramv = g_new0 (GValue, num_params + 1); 19483 g_value_init (¶mv[0], TYPE_WATCHDOG); 19484 g_value_set_object (¶mv[0], proxy); 19485 g_variant_iter_init (&iter, parameters); 19486 n = 1; 19487 while ((child = g_variant_iter_next_value (&iter)) != NULL) 19488 { 19489 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1]; 19490 if (arg_info->use_gvariant) 19491 { 19492 g_value_init (¶mv[n], G_TYPE_VARIANT); 19493 g_value_set_variant (¶mv[n], child); 19494 n++; 19495 } 19496 else 19497 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 19498 g_variant_unref (child); 19499 } 19500 signal_id = g_signal_lookup (info->signal_name, TYPE_WATCHDOG); 19501 g_signal_emitv (paramv, signal_id, 0, NULL); 19502 for (n = 0; n < num_params + 1; n++) 19503 g_value_unset (¶mv[n]); 19504 g_free (paramv); 19505 } 19506 19507 static void 19508 watchdog_proxy_g_properties_changed (GDBusProxy *_proxy, 19509 GVariant *changed_properties, 19510 const gchar *const *invalidated_properties) 19511 { 19512 WatchdogProxy *proxy = WATCHDOG_PROXY (_proxy); 19513 guint n; 19514 const gchar *key; 19515 GVariantIter *iter; 19516 _ExtendedGDBusPropertyInfo *info; 19517 g_variant_get (changed_properties, "a{sv}", &iter); 19518 while (g_variant_iter_next (iter, "{&sv}", &key, NULL)) 19519 { 19520 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_watchdog_interface_info.parent_struct, key); 19521 g_datalist_remove_data (&proxy->priv->qdata, key); 19522 if (info != NULL) 19523 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 19524 } 19525 g_variant_iter_free (iter); 19526 for (n = 0; invalidated_properties[n] != NULL; n++) 19527 { 19528 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_watchdog_interface_info.parent_struct, invalidated_properties[n]); 19529 g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]); 19530 if (info != NULL) 19531 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 19532 } 19533 } 19534 19535 static gint 19536 watchdog_proxy_get_watchdog (Watchdog *object) 19537 { 19538 WatchdogProxy *proxy = WATCHDOG_PROXY (object); 19539 GVariant *variant; 19540 gint value = 0; 19541 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "watchdog"); 19542 if (variant != NULL) 19543 { 19544 value = g_variant_get_int32 (variant); 19545 g_variant_unref (variant); 19546 } 19547 return value; 19548 } 19549 19550 static gint 19551 watchdog_proxy_get_poll_interval (Watchdog *object) 19552 { 19553 WatchdogProxy *proxy = WATCHDOG_PROXY (object); 19554 GVariant *variant; 19555 gint value = 0; 19556 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "poll_interval"); 19557 if (variant != NULL) 19558 { 19559 value = g_variant_get_int32 (variant); 19560 g_variant_unref (variant); 19561 } 19562 return value; 19563 } 19564 19565 static void 19566 watchdog_proxy_init (WatchdogProxy *proxy) 19567 { 19568 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 19569 proxy->priv = watchdog_proxy_get_instance_private (proxy); 19570 #else 19571 proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, TYPE_WATCHDOG_PROXY, WatchdogProxyPrivate); 19572 #endif 19573 19574 g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), watchdog_interface_info ()); 19575 } 19576 19577 static void 19578 watchdog_proxy_class_init (WatchdogProxyClass *klass) 19579 { 19580 GObjectClass *gobject_class; 19581 GDBusProxyClass *proxy_class; 19582 19583 gobject_class = G_OBJECT_CLASS (klass); 19584 gobject_class->finalize = watchdog_proxy_finalize; 19585 gobject_class->get_property = watchdog_proxy_get_property; 19586 gobject_class->set_property = watchdog_proxy_set_property; 19587 19588 proxy_class = G_DBUS_PROXY_CLASS (klass); 19589 proxy_class->g_signal = watchdog_proxy_g_signal; 19590 proxy_class->g_properties_changed = watchdog_proxy_g_properties_changed; 19591 19592 watchdog_override_properties (gobject_class, 1); 19593 19594 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 19595 g_type_class_add_private (klass, sizeof (WatchdogProxyPrivate)); 19596 #endif 19597 } 19598 19599 static void 19600 watchdog_proxy_iface_init (WatchdogIface *iface) 19601 { 19602 iface->get_watchdog = watchdog_proxy_get_watchdog; 19603 iface->get_poll_interval = watchdog_proxy_get_poll_interval; 19604 } 19605 19606 /** 19607 * watchdog_proxy_new: 19608 * @connection: A #GDBusConnection. 19609 * @flags: Flags from the #GDBusProxyFlags enumeration. 19610 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 19611 * @object_path: An object path. 19612 * @cancellable: (allow-none): A #GCancellable or %NULL. 19613 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 19614 * @user_data: User data to pass to @callback. 19615 * 19616 * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Watchdog.top_of_page">org.openbmc.Watchdog</link>. See g_dbus_proxy_new() for more details. 19617 * 19618 * 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. 19619 * You can then call watchdog_proxy_new_finish() to get the result of the operation. 19620 * 19621 * See watchdog_proxy_new_sync() for the synchronous, blocking version of this constructor. 19622 */ 19623 void 19624 watchdog_proxy_new ( 19625 GDBusConnection *connection, 19626 GDBusProxyFlags flags, 19627 const gchar *name, 19628 const gchar *object_path, 19629 GCancellable *cancellable, 19630 GAsyncReadyCallback callback, 19631 gpointer user_data) 19632 { 19633 g_async_initable_new_async (TYPE_WATCHDOG_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.Watchdog", NULL); 19634 } 19635 19636 /** 19637 * watchdog_proxy_new_finish: 19638 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to watchdog_proxy_new(). 19639 * @error: Return location for error or %NULL 19640 * 19641 * Finishes an operation started with watchdog_proxy_new(). 19642 * 19643 * Returns: (transfer full) (type WatchdogProxy): The constructed proxy object or %NULL if @error is set. 19644 */ 19645 Watchdog * 19646 watchdog_proxy_new_finish ( 19647 GAsyncResult *res, 19648 GError **error) 19649 { 19650 GObject *ret; 19651 GObject *source_object; 19652 source_object = g_async_result_get_source_object (res); 19653 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 19654 g_object_unref (source_object); 19655 if (ret != NULL) 19656 return WATCHDOG (ret); 19657 else 19658 return NULL; 19659 } 19660 19661 /** 19662 * watchdog_proxy_new_sync: 19663 * @connection: A #GDBusConnection. 19664 * @flags: Flags from the #GDBusProxyFlags enumeration. 19665 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 19666 * @object_path: An object path. 19667 * @cancellable: (allow-none): A #GCancellable or %NULL. 19668 * @error: Return location for error or %NULL 19669 * 19670 * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Watchdog.top_of_page">org.openbmc.Watchdog</link>. See g_dbus_proxy_new_sync() for more details. 19671 * 19672 * The calling thread is blocked until a reply is received. 19673 * 19674 * See watchdog_proxy_new() for the asynchronous version of this constructor. 19675 * 19676 * Returns: (transfer full) (type WatchdogProxy): The constructed proxy object or %NULL if @error is set. 19677 */ 19678 Watchdog * 19679 watchdog_proxy_new_sync ( 19680 GDBusConnection *connection, 19681 GDBusProxyFlags flags, 19682 const gchar *name, 19683 const gchar *object_path, 19684 GCancellable *cancellable, 19685 GError **error) 19686 { 19687 GInitable *ret; 19688 ret = g_initable_new (TYPE_WATCHDOG_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.Watchdog", NULL); 19689 if (ret != NULL) 19690 return WATCHDOG (ret); 19691 else 19692 return NULL; 19693 } 19694 19695 19696 /** 19697 * watchdog_proxy_new_for_bus: 19698 * @bus_type: A #GBusType. 19699 * @flags: Flags from the #GDBusProxyFlags enumeration. 19700 * @name: A bus name (well-known or unique). 19701 * @object_path: An object path. 19702 * @cancellable: (allow-none): A #GCancellable or %NULL. 19703 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 19704 * @user_data: User data to pass to @callback. 19705 * 19706 * Like watchdog_proxy_new() but takes a #GBusType instead of a #GDBusConnection. 19707 * 19708 * 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. 19709 * You can then call watchdog_proxy_new_for_bus_finish() to get the result of the operation. 19710 * 19711 * See watchdog_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor. 19712 */ 19713 void 19714 watchdog_proxy_new_for_bus ( 19715 GBusType bus_type, 19716 GDBusProxyFlags flags, 19717 const gchar *name, 19718 const gchar *object_path, 19719 GCancellable *cancellable, 19720 GAsyncReadyCallback callback, 19721 gpointer user_data) 19722 { 19723 g_async_initable_new_async (TYPE_WATCHDOG_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.Watchdog", NULL); 19724 } 19725 19726 /** 19727 * watchdog_proxy_new_for_bus_finish: 19728 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to watchdog_proxy_new_for_bus(). 19729 * @error: Return location for error or %NULL 19730 * 19731 * Finishes an operation started with watchdog_proxy_new_for_bus(). 19732 * 19733 * Returns: (transfer full) (type WatchdogProxy): The constructed proxy object or %NULL if @error is set. 19734 */ 19735 Watchdog * 19736 watchdog_proxy_new_for_bus_finish ( 19737 GAsyncResult *res, 19738 GError **error) 19739 { 19740 GObject *ret; 19741 GObject *source_object; 19742 source_object = g_async_result_get_source_object (res); 19743 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 19744 g_object_unref (source_object); 19745 if (ret != NULL) 19746 return WATCHDOG (ret); 19747 else 19748 return NULL; 19749 } 19750 19751 /** 19752 * watchdog_proxy_new_for_bus_sync: 19753 * @bus_type: A #GBusType. 19754 * @flags: Flags from the #GDBusProxyFlags enumeration. 19755 * @name: A bus name (well-known or unique). 19756 * @object_path: An object path. 19757 * @cancellable: (allow-none): A #GCancellable or %NULL. 19758 * @error: Return location for error or %NULL 19759 * 19760 * Like watchdog_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection. 19761 * 19762 * The calling thread is blocked until a reply is received. 19763 * 19764 * See watchdog_proxy_new_for_bus() for the asynchronous version of this constructor. 19765 * 19766 * Returns: (transfer full) (type WatchdogProxy): The constructed proxy object or %NULL if @error is set. 19767 */ 19768 Watchdog * 19769 watchdog_proxy_new_for_bus_sync ( 19770 GBusType bus_type, 19771 GDBusProxyFlags flags, 19772 const gchar *name, 19773 const gchar *object_path, 19774 GCancellable *cancellable, 19775 GError **error) 19776 { 19777 GInitable *ret; 19778 ret = g_initable_new (TYPE_WATCHDOG_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.Watchdog", NULL); 19779 if (ret != NULL) 19780 return WATCHDOG (ret); 19781 else 19782 return NULL; 19783 } 19784 19785 19786 /* ------------------------------------------------------------------------ */ 19787 19788 /** 19789 * WatchdogSkeleton: 19790 * 19791 * The #WatchdogSkeleton structure contains only private data and should only be accessed using the provided API. 19792 */ 19793 19794 /** 19795 * WatchdogSkeletonClass: 19796 * @parent_class: The parent class. 19797 * 19798 * Class structure for #WatchdogSkeleton. 19799 */ 19800 19801 struct _WatchdogSkeletonPrivate 19802 { 19803 GValue *properties; 19804 GList *changed_properties; 19805 GSource *changed_properties_idle_source; 19806 GMainContext *context; 19807 GMutex lock; 19808 }; 19809 19810 static void 19811 _watchdog_skeleton_handle_method_call ( 19812 GDBusConnection *connection G_GNUC_UNUSED, 19813 const gchar *sender G_GNUC_UNUSED, 19814 const gchar *object_path G_GNUC_UNUSED, 19815 const gchar *interface_name, 19816 const gchar *method_name, 19817 GVariant *parameters, 19818 GDBusMethodInvocation *invocation, 19819 gpointer user_data) 19820 { 19821 WatchdogSkeleton *skeleton = WATCHDOG_SKELETON (user_data); 19822 _ExtendedGDBusMethodInfo *info; 19823 GVariantIter iter; 19824 GVariant *child; 19825 GValue *paramv; 19826 guint num_params; 19827 guint num_extra; 19828 guint n; 19829 guint signal_id; 19830 GValue return_value = G_VALUE_INIT; 19831 info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation); 19832 g_assert (info != NULL); 19833 num_params = g_variant_n_children (parameters); 19834 num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra); 19835 n = 0; 19836 g_value_init (¶mv[n], TYPE_WATCHDOG); 19837 g_value_set_object (¶mv[n++], skeleton); 19838 g_value_init (¶mv[n], G_TYPE_DBUS_METHOD_INVOCATION); 19839 g_value_set_object (¶mv[n++], invocation); 19840 if (info->pass_fdlist) 19841 { 19842 #ifdef G_OS_UNIX 19843 g_value_init (¶mv[n], G_TYPE_UNIX_FD_LIST); 19844 g_value_set_object (¶mv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation))); 19845 #else 19846 g_assert_not_reached (); 19847 #endif 19848 } 19849 g_variant_iter_init (&iter, parameters); 19850 while ((child = g_variant_iter_next_value (&iter)) != NULL) 19851 { 19852 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra]; 19853 if (arg_info->use_gvariant) 19854 { 19855 g_value_init (¶mv[n], G_TYPE_VARIANT); 19856 g_value_set_variant (¶mv[n], child); 19857 n++; 19858 } 19859 else 19860 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 19861 g_variant_unref (child); 19862 } 19863 signal_id = g_signal_lookup (info->signal_name, TYPE_WATCHDOG); 19864 g_value_init (&return_value, G_TYPE_BOOLEAN); 19865 g_signal_emitv (paramv, signal_id, 0, &return_value); 19866 if (!g_value_get_boolean (&return_value)) 19867 g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name); 19868 g_value_unset (&return_value); 19869 for (n = 0; n < num_params + num_extra; n++) 19870 g_value_unset (¶mv[n]); 19871 g_free (paramv); 19872 } 19873 19874 static GVariant * 19875 _watchdog_skeleton_handle_get_property ( 19876 GDBusConnection *connection G_GNUC_UNUSED, 19877 const gchar *sender G_GNUC_UNUSED, 19878 const gchar *object_path G_GNUC_UNUSED, 19879 const gchar *interface_name G_GNUC_UNUSED, 19880 const gchar *property_name, 19881 GError **error, 19882 gpointer user_data) 19883 { 19884 WatchdogSkeleton *skeleton = WATCHDOG_SKELETON (user_data); 19885 GValue value = G_VALUE_INIT; 19886 GParamSpec *pspec; 19887 _ExtendedGDBusPropertyInfo *info; 19888 GVariant *ret; 19889 ret = NULL; 19890 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_watchdog_interface_info.parent_struct, property_name); 19891 g_assert (info != NULL); 19892 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 19893 if (pspec == NULL) 19894 { 19895 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 19896 } 19897 else 19898 { 19899 g_value_init (&value, pspec->value_type); 19900 g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value); 19901 ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature)); 19902 g_value_unset (&value); 19903 } 19904 return ret; 19905 } 19906 19907 static gboolean 19908 _watchdog_skeleton_handle_set_property ( 19909 GDBusConnection *connection G_GNUC_UNUSED, 19910 const gchar *sender G_GNUC_UNUSED, 19911 const gchar *object_path G_GNUC_UNUSED, 19912 const gchar *interface_name G_GNUC_UNUSED, 19913 const gchar *property_name, 19914 GVariant *variant, 19915 GError **error, 19916 gpointer user_data) 19917 { 19918 WatchdogSkeleton *skeleton = WATCHDOG_SKELETON (user_data); 19919 GValue value = G_VALUE_INIT; 19920 GParamSpec *pspec; 19921 _ExtendedGDBusPropertyInfo *info; 19922 gboolean ret; 19923 ret = FALSE; 19924 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_watchdog_interface_info.parent_struct, property_name); 19925 g_assert (info != NULL); 19926 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 19927 if (pspec == NULL) 19928 { 19929 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 19930 } 19931 else 19932 { 19933 if (info->use_gvariant) 19934 g_value_set_variant (&value, variant); 19935 else 19936 g_dbus_gvariant_to_gvalue (variant, &value); 19937 g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value); 19938 g_value_unset (&value); 19939 ret = TRUE; 19940 } 19941 return ret; 19942 } 19943 19944 static const GDBusInterfaceVTable _watchdog_skeleton_vtable = 19945 { 19946 _watchdog_skeleton_handle_method_call, 19947 _watchdog_skeleton_handle_get_property, 19948 _watchdog_skeleton_handle_set_property, 19949 {NULL} 19950 }; 19951 19952 static GDBusInterfaceInfo * 19953 watchdog_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 19954 { 19955 return watchdog_interface_info (); 19956 } 19957 19958 static GDBusInterfaceVTable * 19959 watchdog_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 19960 { 19961 return (GDBusInterfaceVTable *) &_watchdog_skeleton_vtable; 19962 } 19963 19964 static GVariant * 19965 watchdog_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton) 19966 { 19967 WatchdogSkeleton *skeleton = WATCHDOG_SKELETON (_skeleton); 19968 19969 GVariantBuilder builder; 19970 guint n; 19971 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 19972 if (_watchdog_interface_info.parent_struct.properties == NULL) 19973 goto out; 19974 for (n = 0; _watchdog_interface_info.parent_struct.properties[n] != NULL; n++) 19975 { 19976 GDBusPropertyInfo *info = _watchdog_interface_info.parent_struct.properties[n]; 19977 if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE) 19978 { 19979 GVariant *value; 19980 value = _watchdog_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.Watchdog", info->name, NULL, skeleton); 19981 if (value != NULL) 19982 { 19983 g_variant_take_ref (value); 19984 g_variant_builder_add (&builder, "{sv}", info->name, value); 19985 g_variant_unref (value); 19986 } 19987 } 19988 } 19989 out: 19990 return g_variant_builder_end (&builder); 19991 } 19992 19993 static gboolean _watchdog_emit_changed (gpointer user_data); 19994 19995 static void 19996 watchdog_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton) 19997 { 19998 WatchdogSkeleton *skeleton = WATCHDOG_SKELETON (_skeleton); 19999 gboolean emit_changed = FALSE; 20000 20001 g_mutex_lock (&skeleton->priv->lock); 20002 if (skeleton->priv->changed_properties_idle_source != NULL) 20003 { 20004 g_source_destroy (skeleton->priv->changed_properties_idle_source); 20005 skeleton->priv->changed_properties_idle_source = NULL; 20006 emit_changed = TRUE; 20007 } 20008 g_mutex_unlock (&skeleton->priv->lock); 20009 20010 if (emit_changed) 20011 _watchdog_emit_changed (skeleton); 20012 } 20013 20014 static void 20015 _watchdog_on_signal_watchdog_error ( 20016 Watchdog *object) 20017 { 20018 WatchdogSkeleton *skeleton = WATCHDOG_SKELETON (object); 20019 20020 GList *connections, *l; 20021 GVariant *signal_variant; 20022 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 20023 20024 signal_variant = g_variant_ref_sink (g_variant_new ("()")); 20025 for (l = connections; l != NULL; l = l->next) 20026 { 20027 GDBusConnection *connection = l->data; 20028 g_dbus_connection_emit_signal (connection, 20029 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.Watchdog", "WatchdogError", 20030 signal_variant, NULL); 20031 } 20032 g_variant_unref (signal_variant); 20033 g_list_free_full (connections, g_object_unref); 20034 } 20035 20036 static void watchdog_skeleton_iface_init (WatchdogIface *iface); 20037 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 20038 G_DEFINE_TYPE_WITH_CODE (WatchdogSkeleton, watchdog_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 20039 G_ADD_PRIVATE (WatchdogSkeleton) 20040 G_IMPLEMENT_INTERFACE (TYPE_WATCHDOG, watchdog_skeleton_iface_init)); 20041 20042 #else 20043 G_DEFINE_TYPE_WITH_CODE (WatchdogSkeleton, watchdog_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 20044 G_IMPLEMENT_INTERFACE (TYPE_WATCHDOG, watchdog_skeleton_iface_init)); 20045 20046 #endif 20047 static void 20048 watchdog_skeleton_finalize (GObject *object) 20049 { 20050 WatchdogSkeleton *skeleton = WATCHDOG_SKELETON (object); 20051 guint n; 20052 for (n = 0; n < 2; n++) 20053 g_value_unset (&skeleton->priv->properties[n]); 20054 g_free (skeleton->priv->properties); 20055 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 20056 if (skeleton->priv->changed_properties_idle_source != NULL) 20057 g_source_destroy (skeleton->priv->changed_properties_idle_source); 20058 g_main_context_unref (skeleton->priv->context); 20059 g_mutex_clear (&skeleton->priv->lock); 20060 G_OBJECT_CLASS (watchdog_skeleton_parent_class)->finalize (object); 20061 } 20062 20063 static void 20064 watchdog_skeleton_get_property (GObject *object, 20065 guint prop_id, 20066 GValue *value, 20067 GParamSpec *pspec G_GNUC_UNUSED) 20068 { 20069 WatchdogSkeleton *skeleton = WATCHDOG_SKELETON (object); 20070 g_assert (prop_id != 0 && prop_id - 1 < 2); 20071 g_mutex_lock (&skeleton->priv->lock); 20072 g_value_copy (&skeleton->priv->properties[prop_id - 1], value); 20073 g_mutex_unlock (&skeleton->priv->lock); 20074 } 20075 20076 static gboolean 20077 _watchdog_emit_changed (gpointer user_data) 20078 { 20079 WatchdogSkeleton *skeleton = WATCHDOG_SKELETON (user_data); 20080 GList *l; 20081 GVariantBuilder builder; 20082 GVariantBuilder invalidated_builder; 20083 guint num_changes; 20084 20085 g_mutex_lock (&skeleton->priv->lock); 20086 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 20087 g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as")); 20088 for (l = skeleton->priv->changed_properties, num_changes = 0; l != NULL; l = l->next) 20089 { 20090 ChangedProperty *cp = l->data; 20091 GVariant *variant; 20092 const GValue *cur_value; 20093 20094 cur_value = &skeleton->priv->properties[cp->prop_id - 1]; 20095 if (!_g_value_equal (cur_value, &cp->orig_value)) 20096 { 20097 variant = g_dbus_gvalue_to_gvariant (cur_value, G_VARIANT_TYPE (cp->info->parent_struct.signature)); 20098 g_variant_builder_add (&builder, "{sv}", cp->info->parent_struct.name, variant); 20099 g_variant_unref (variant); 20100 num_changes++; 20101 } 20102 } 20103 if (num_changes > 0) 20104 { 20105 GList *connections, *ll; 20106 GVariant *signal_variant; 20107 signal_variant = g_variant_ref_sink (g_variant_new ("(sa{sv}as)", "org.openbmc.Watchdog", 20108 &builder, &invalidated_builder)); 20109 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 20110 for (ll = connections; ll != NULL; ll = ll->next) 20111 { 20112 GDBusConnection *connection = ll->data; 20113 20114 g_dbus_connection_emit_signal (connection, 20115 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), 20116 "org.freedesktop.DBus.Properties", 20117 "PropertiesChanged", 20118 signal_variant, 20119 NULL); 20120 } 20121 g_variant_unref (signal_variant); 20122 g_list_free_full (connections, g_object_unref); 20123 } 20124 else 20125 { 20126 g_variant_builder_clear (&builder); 20127 g_variant_builder_clear (&invalidated_builder); 20128 } 20129 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 20130 skeleton->priv->changed_properties = NULL; 20131 skeleton->priv->changed_properties_idle_source = NULL; 20132 g_mutex_unlock (&skeleton->priv->lock); 20133 return FALSE; 20134 } 20135 20136 static void 20137 _watchdog_schedule_emit_changed (WatchdogSkeleton *skeleton, const _ExtendedGDBusPropertyInfo *info, guint prop_id, const GValue *orig_value) 20138 { 20139 ChangedProperty *cp; 20140 GList *l; 20141 cp = NULL; 20142 for (l = skeleton->priv->changed_properties; l != NULL; l = l->next) 20143 { 20144 ChangedProperty *i_cp = l->data; 20145 if (i_cp->info == info) 20146 { 20147 cp = i_cp; 20148 break; 20149 } 20150 } 20151 if (cp == NULL) 20152 { 20153 cp = g_new0 (ChangedProperty, 1); 20154 cp->prop_id = prop_id; 20155 cp->info = info; 20156 skeleton->priv->changed_properties = g_list_prepend (skeleton->priv->changed_properties, cp); 20157 g_value_init (&cp->orig_value, G_VALUE_TYPE (orig_value)); 20158 g_value_copy (orig_value, &cp->orig_value); 20159 } 20160 } 20161 20162 static void 20163 watchdog_skeleton_notify (GObject *object, 20164 GParamSpec *pspec G_GNUC_UNUSED) 20165 { 20166 WatchdogSkeleton *skeleton = WATCHDOG_SKELETON (object); 20167 g_mutex_lock (&skeleton->priv->lock); 20168 if (skeleton->priv->changed_properties != NULL && 20169 skeleton->priv->changed_properties_idle_source == NULL) 20170 { 20171 skeleton->priv->changed_properties_idle_source = g_idle_source_new (); 20172 g_source_set_priority (skeleton->priv->changed_properties_idle_source, G_PRIORITY_DEFAULT); 20173 g_source_set_callback (skeleton->priv->changed_properties_idle_source, _watchdog_emit_changed, g_object_ref (skeleton), (GDestroyNotify) g_object_unref); 20174 g_source_set_name (skeleton->priv->changed_properties_idle_source, "[generated] _watchdog_emit_changed"); 20175 g_source_attach (skeleton->priv->changed_properties_idle_source, skeleton->priv->context); 20176 g_source_unref (skeleton->priv->changed_properties_idle_source); 20177 } 20178 g_mutex_unlock (&skeleton->priv->lock); 20179 } 20180 20181 static void 20182 watchdog_skeleton_set_property (GObject *object, 20183 guint prop_id, 20184 const GValue *value, 20185 GParamSpec *pspec) 20186 { 20187 WatchdogSkeleton *skeleton = WATCHDOG_SKELETON (object); 20188 g_assert (prop_id != 0 && prop_id - 1 < 2); 20189 g_mutex_lock (&skeleton->priv->lock); 20190 g_object_freeze_notify (object); 20191 if (!_g_value_equal (value, &skeleton->priv->properties[prop_id - 1])) 20192 { 20193 if (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)) != NULL) 20194 _watchdog_schedule_emit_changed (skeleton, _watchdog_property_info_pointers[prop_id - 1], prop_id, &skeleton->priv->properties[prop_id - 1]); 20195 g_value_copy (value, &skeleton->priv->properties[prop_id - 1]); 20196 g_object_notify_by_pspec (object, pspec); 20197 } 20198 g_mutex_unlock (&skeleton->priv->lock); 20199 g_object_thaw_notify (object); 20200 } 20201 20202 static void 20203 watchdog_skeleton_init (WatchdogSkeleton *skeleton) 20204 { 20205 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 20206 skeleton->priv = watchdog_skeleton_get_instance_private (skeleton); 20207 #else 20208 skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, TYPE_WATCHDOG_SKELETON, WatchdogSkeletonPrivate); 20209 #endif 20210 20211 g_mutex_init (&skeleton->priv->lock); 20212 skeleton->priv->context = g_main_context_ref_thread_default (); 20213 skeleton->priv->properties = g_new0 (GValue, 2); 20214 g_value_init (&skeleton->priv->properties[0], G_TYPE_INT); 20215 g_value_init (&skeleton->priv->properties[1], G_TYPE_INT); 20216 } 20217 20218 static gint 20219 watchdog_skeleton_get_watchdog (Watchdog *object) 20220 { 20221 WatchdogSkeleton *skeleton = WATCHDOG_SKELETON (object); 20222 gint value; 20223 g_mutex_lock (&skeleton->priv->lock); 20224 value = g_value_get_int (&(skeleton->priv->properties[0])); 20225 g_mutex_unlock (&skeleton->priv->lock); 20226 return value; 20227 } 20228 20229 static gint 20230 watchdog_skeleton_get_poll_interval (Watchdog *object) 20231 { 20232 WatchdogSkeleton *skeleton = WATCHDOG_SKELETON (object); 20233 gint value; 20234 g_mutex_lock (&skeleton->priv->lock); 20235 value = g_value_get_int (&(skeleton->priv->properties[1])); 20236 g_mutex_unlock (&skeleton->priv->lock); 20237 return value; 20238 } 20239 20240 static void 20241 watchdog_skeleton_class_init (WatchdogSkeletonClass *klass) 20242 { 20243 GObjectClass *gobject_class; 20244 GDBusInterfaceSkeletonClass *skeleton_class; 20245 20246 gobject_class = G_OBJECT_CLASS (klass); 20247 gobject_class->finalize = watchdog_skeleton_finalize; 20248 gobject_class->get_property = watchdog_skeleton_get_property; 20249 gobject_class->set_property = watchdog_skeleton_set_property; 20250 gobject_class->notify = watchdog_skeleton_notify; 20251 20252 20253 watchdog_override_properties (gobject_class, 1); 20254 20255 skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass); 20256 skeleton_class->get_info = watchdog_skeleton_dbus_interface_get_info; 20257 skeleton_class->get_properties = watchdog_skeleton_dbus_interface_get_properties; 20258 skeleton_class->flush = watchdog_skeleton_dbus_interface_flush; 20259 skeleton_class->get_vtable = watchdog_skeleton_dbus_interface_get_vtable; 20260 20261 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 20262 g_type_class_add_private (klass, sizeof (WatchdogSkeletonPrivate)); 20263 #endif 20264 } 20265 20266 static void 20267 watchdog_skeleton_iface_init (WatchdogIface *iface) 20268 { 20269 iface->watchdog_error = _watchdog_on_signal_watchdog_error; 20270 iface->get_watchdog = watchdog_skeleton_get_watchdog; 20271 iface->get_poll_interval = watchdog_skeleton_get_poll_interval; 20272 } 20273 20274 /** 20275 * watchdog_skeleton_new: 20276 * 20277 * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Watchdog.top_of_page">org.openbmc.Watchdog</link>. 20278 * 20279 * Returns: (transfer full) (type WatchdogSkeleton): The skeleton object. 20280 */ 20281 Watchdog * 20282 watchdog_skeleton_new (void) 20283 { 20284 return WATCHDOG (g_object_new (TYPE_WATCHDOG_SKELETON, NULL)); 20285 } 20286 20287 /* ------------------------------------------------------------------------ 20288 * Code for interface org.openbmc.EventLog 20289 * ------------------------------------------------------------------------ 20290 */ 20291 20292 /** 20293 * SECTION:EventLog 20294 * @title: EventLog 20295 * @short_description: Generated C code for the org.openbmc.EventLog D-Bus interface 20296 * 20297 * This section contains code for working with the <link linkend="gdbus-interface-org-openbmc-EventLog.top_of_page">org.openbmc.EventLog</link> D-Bus interface in C. 20298 */ 20299 20300 /* ---- Introspection data for org.openbmc.EventLog ---- */ 20301 20302 static const _ExtendedGDBusArgInfo _event_log_method_info_get_event_log_OUT_ARG_log = 20303 { 20304 { 20305 -1, 20306 (gchar *) "log", 20307 (gchar *) "a(s)", 20308 NULL 20309 }, 20310 FALSE 20311 }; 20312 20313 static const _ExtendedGDBusArgInfo * const _event_log_method_info_get_event_log_OUT_ARG_pointers[] = 20314 { 20315 &_event_log_method_info_get_event_log_OUT_ARG_log, 20316 NULL 20317 }; 20318 20319 static const _ExtendedGDBusMethodInfo _event_log_method_info_get_event_log = 20320 { 20321 { 20322 -1, 20323 (gchar *) "getEventLog", 20324 NULL, 20325 (GDBusArgInfo **) &_event_log_method_info_get_event_log_OUT_ARG_pointers, 20326 NULL 20327 }, 20328 "handle-get-event-log", 20329 FALSE 20330 }; 20331 20332 static const _ExtendedGDBusMethodInfo * const _event_log_method_info_pointers[] = 20333 { 20334 &_event_log_method_info_get_event_log, 20335 NULL 20336 }; 20337 20338 static const _ExtendedGDBusArgInfo _event_log_signal_info_event_log_ARG_priority = 20339 { 20340 { 20341 -1, 20342 (gchar *) "priority", 20343 (gchar *) "i", 20344 NULL 20345 }, 20346 FALSE 20347 }; 20348 20349 static const _ExtendedGDBusArgInfo _event_log_signal_info_event_log_ARG_message = 20350 { 20351 { 20352 -1, 20353 (gchar *) "message", 20354 (gchar *) "s", 20355 NULL 20356 }, 20357 FALSE 20358 }; 20359 20360 static const _ExtendedGDBusArgInfo _event_log_signal_info_event_log_ARG_rc = 20361 { 20362 { 20363 -1, 20364 (gchar *) "rc", 20365 (gchar *) "i", 20366 NULL 20367 }, 20368 FALSE 20369 }; 20370 20371 static const _ExtendedGDBusArgInfo * const _event_log_signal_info_event_log_ARG_pointers[] = 20372 { 20373 &_event_log_signal_info_event_log_ARG_priority, 20374 &_event_log_signal_info_event_log_ARG_message, 20375 &_event_log_signal_info_event_log_ARG_rc, 20376 NULL 20377 }; 20378 20379 static const _ExtendedGDBusSignalInfo _event_log_signal_info_event_log = 20380 { 20381 { 20382 -1, 20383 (gchar *) "EventLog", 20384 (GDBusArgInfo **) &_event_log_signal_info_event_log_ARG_pointers, 20385 NULL 20386 }, 20387 "event-log" 20388 }; 20389 20390 static const _ExtendedGDBusSignalInfo * const _event_log_signal_info_pointers[] = 20391 { 20392 &_event_log_signal_info_event_log, 20393 NULL 20394 }; 20395 20396 static const _ExtendedGDBusInterfaceInfo _event_log_interface_info = 20397 { 20398 { 20399 -1, 20400 (gchar *) "org.openbmc.EventLog", 20401 (GDBusMethodInfo **) &_event_log_method_info_pointers, 20402 (GDBusSignalInfo **) &_event_log_signal_info_pointers, 20403 NULL, 20404 NULL 20405 }, 20406 "event-log", 20407 }; 20408 20409 20410 /** 20411 * event_log_interface_info: 20412 * 20413 * Gets a machine-readable description of the <link linkend="gdbus-interface-org-openbmc-EventLog.top_of_page">org.openbmc.EventLog</link> D-Bus interface. 20414 * 20415 * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free. 20416 */ 20417 GDBusInterfaceInfo * 20418 event_log_interface_info (void) 20419 { 20420 return (GDBusInterfaceInfo *) &_event_log_interface_info.parent_struct; 20421 } 20422 20423 /** 20424 * event_log_override_properties: 20425 * @klass: The class structure for a #GObject<!-- -->-derived class. 20426 * @property_id_begin: The property id to assign to the first overridden property. 20427 * 20428 * Overrides all #GObject properties in the #EventLog interface for a concrete class. 20429 * The properties are overridden in the order they are defined. 20430 * 20431 * Returns: The last property id. 20432 */ 20433 guint 20434 event_log_override_properties (GObjectClass *klass, guint property_id_begin) 20435 { 20436 return property_id_begin - 1; 20437 } 20438 20439 20440 20441 /** 20442 * EventLog: 20443 * 20444 * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-EventLog.top_of_page">org.openbmc.EventLog</link>. 20445 */ 20446 20447 /** 20448 * EventLogIface: 20449 * @parent_iface: The parent interface. 20450 * @handle_get_event_log: Handler for the #EventLog::handle-get-event-log signal. 20451 * @event_log: Handler for the #EventLog::event-log signal. 20452 * 20453 * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-EventLog.top_of_page">org.openbmc.EventLog</link>. 20454 */ 20455 20456 typedef EventLogIface EventLogInterface; 20457 G_DEFINE_INTERFACE (EventLog, event_log, G_TYPE_OBJECT); 20458 20459 static void 20460 event_log_default_init (EventLogIface *iface) 20461 { 20462 /* GObject signals for incoming D-Bus method calls: */ 20463 /** 20464 * EventLog::handle-get-event-log: 20465 * @object: A #EventLog. 20466 * @invocation: A #GDBusMethodInvocation. 20467 * 20468 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-EventLog.getEventLog">getEventLog()</link> D-Bus method. 20469 * 20470 * 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_event_log() 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. 20471 * 20472 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 20473 */ 20474 g_signal_new ("handle-get-event-log", 20475 G_TYPE_FROM_INTERFACE (iface), 20476 G_SIGNAL_RUN_LAST, 20477 G_STRUCT_OFFSET (EventLogIface, handle_get_event_log), 20478 g_signal_accumulator_true_handled, 20479 NULL, 20480 g_cclosure_marshal_generic, 20481 G_TYPE_BOOLEAN, 20482 1, 20483 G_TYPE_DBUS_METHOD_INVOCATION); 20484 20485 /* GObject signals for received D-Bus signals: */ 20486 /** 20487 * EventLog::event-log: 20488 * @object: A #EventLog. 20489 * @arg_priority: Argument. 20490 * @arg_message: Argument. 20491 * @arg_rc: Argument. 20492 * 20493 * 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. 20494 * 20495 * 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. 20496 */ 20497 g_signal_new ("event-log", 20498 G_TYPE_FROM_INTERFACE (iface), 20499 G_SIGNAL_RUN_LAST, 20500 G_STRUCT_OFFSET (EventLogIface, event_log), 20501 NULL, 20502 NULL, 20503 g_cclosure_marshal_generic, 20504 G_TYPE_NONE, 20505 3, G_TYPE_INT, G_TYPE_STRING, G_TYPE_INT); 20506 20507 } 20508 20509 /** 20510 * event_log_emit_event_log: 20511 * @object: A #EventLog. 20512 * @arg_priority: Argument to pass with the signal. 20513 * @arg_message: Argument to pass with the signal. 20514 * @arg_rc: Argument to pass with the signal. 20515 * 20516 * Emits the <link linkend="gdbus-signal-org-openbmc-EventLog.EventLog">"EventLog"</link> D-Bus signal. 20517 */ 20518 void 20519 event_log_emit_event_log ( 20520 EventLog *object, 20521 gint arg_priority, 20522 const gchar *arg_message, 20523 gint arg_rc) 20524 { 20525 g_signal_emit_by_name (object, "event-log", arg_priority, arg_message, arg_rc); 20526 } 20527 20528 /** 20529 * event_log_call_get_event_log: 20530 * @proxy: A #EventLogProxy. 20531 * @cancellable: (allow-none): A #GCancellable or %NULL. 20532 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 20533 * @user_data: User data to pass to @callback. 20534 * 20535 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-EventLog.getEventLog">getEventLog()</link> D-Bus method on @proxy. 20536 * 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. 20537 * You can then call event_log_call_get_event_log_finish() to get the result of the operation. 20538 * 20539 * See event_log_call_get_event_log_sync() for the synchronous, blocking version of this method. 20540 */ 20541 void 20542 event_log_call_get_event_log ( 20543 EventLog *proxy, 20544 GCancellable *cancellable, 20545 GAsyncReadyCallback callback, 20546 gpointer user_data) 20547 { 20548 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 20549 "getEventLog", 20550 g_variant_new ("()"), 20551 G_DBUS_CALL_FLAGS_NONE, 20552 -1, 20553 cancellable, 20554 callback, 20555 user_data); 20556 } 20557 20558 /** 20559 * event_log_call_get_event_log_finish: 20560 * @proxy: A #EventLogProxy. 20561 * @out_log: (out): Return location for return parameter or %NULL to ignore. 20562 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to event_log_call_get_event_log(). 20563 * @error: Return location for error or %NULL. 20564 * 20565 * Finishes an operation started with event_log_call_get_event_log(). 20566 * 20567 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 20568 */ 20569 gboolean 20570 event_log_call_get_event_log_finish ( 20571 EventLog *proxy, 20572 GVariant **out_log, 20573 GAsyncResult *res, 20574 GError **error) 20575 { 20576 GVariant *_ret; 20577 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 20578 if (_ret == NULL) 20579 goto _out; 20580 g_variant_get (_ret, 20581 "(@a(s))", 20582 out_log); 20583 g_variant_unref (_ret); 20584 _out: 20585 return _ret != NULL; 20586 } 20587 20588 /** 20589 * event_log_call_get_event_log_sync: 20590 * @proxy: A #EventLogProxy. 20591 * @out_log: (out): Return location for return parameter or %NULL to ignore. 20592 * @cancellable: (allow-none): A #GCancellable or %NULL. 20593 * @error: Return location for error or %NULL. 20594 * 20595 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-EventLog.getEventLog">getEventLog()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 20596 * 20597 * See event_log_call_get_event_log() for the asynchronous version of this method. 20598 * 20599 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 20600 */ 20601 gboolean 20602 event_log_call_get_event_log_sync ( 20603 EventLog *proxy, 20604 GVariant **out_log, 20605 GCancellable *cancellable, 20606 GError **error) 20607 { 20608 GVariant *_ret; 20609 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 20610 "getEventLog", 20611 g_variant_new ("()"), 20612 G_DBUS_CALL_FLAGS_NONE, 20613 -1, 20614 cancellable, 20615 error); 20616 if (_ret == NULL) 20617 goto _out; 20618 g_variant_get (_ret, 20619 "(@a(s))", 20620 out_log); 20621 g_variant_unref (_ret); 20622 _out: 20623 return _ret != NULL; 20624 } 20625 20626 /** 20627 * event_log_complete_get_event_log: 20628 * @object: A #EventLog. 20629 * @invocation: (transfer full): A #GDBusMethodInvocation. 20630 * @log: Parameter to return. 20631 * 20632 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-EventLog.getEventLog">getEventLog()</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. 20633 * 20634 * This method will free @invocation, you cannot use it afterwards. 20635 */ 20636 void 20637 event_log_complete_get_event_log ( 20638 EventLog *object, 20639 GDBusMethodInvocation *invocation, 20640 GVariant *log) 20641 { 20642 g_dbus_method_invocation_return_value (invocation, 20643 g_variant_new ("(@a(s))", 20644 log)); 20645 } 20646 20647 /* ------------------------------------------------------------------------ */ 20648 20649 /** 20650 * EventLogProxy: 20651 * 20652 * The #EventLogProxy structure contains only private data and should only be accessed using the provided API. 20653 */ 20654 20655 /** 20656 * EventLogProxyClass: 20657 * @parent_class: The parent class. 20658 * 20659 * Class structure for #EventLogProxy. 20660 */ 20661 20662 struct _EventLogProxyPrivate 20663 { 20664 GData *qdata; 20665 }; 20666 20667 static void event_log_proxy_iface_init (EventLogIface *iface); 20668 20669 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 20670 G_DEFINE_TYPE_WITH_CODE (EventLogProxy, event_log_proxy, G_TYPE_DBUS_PROXY, 20671 G_ADD_PRIVATE (EventLogProxy) 20672 G_IMPLEMENT_INTERFACE (TYPE_EVENT_LOG, event_log_proxy_iface_init)); 20673 20674 #else 20675 G_DEFINE_TYPE_WITH_CODE (EventLogProxy, event_log_proxy, G_TYPE_DBUS_PROXY, 20676 G_IMPLEMENT_INTERFACE (TYPE_EVENT_LOG, event_log_proxy_iface_init)); 20677 20678 #endif 20679 static void 20680 event_log_proxy_finalize (GObject *object) 20681 { 20682 EventLogProxy *proxy = EVENT_LOG_PROXY (object); 20683 g_datalist_clear (&proxy->priv->qdata); 20684 G_OBJECT_CLASS (event_log_proxy_parent_class)->finalize (object); 20685 } 20686 20687 static void 20688 event_log_proxy_get_property (GObject *object, 20689 guint prop_id, 20690 GValue *value, 20691 GParamSpec *pspec G_GNUC_UNUSED) 20692 { 20693 } 20694 20695 static void 20696 event_log_proxy_set_property (GObject *object, 20697 guint prop_id, 20698 const GValue *value, 20699 GParamSpec *pspec G_GNUC_UNUSED) 20700 { 20701 } 20702 20703 static void 20704 event_log_proxy_g_signal (GDBusProxy *proxy, 20705 const gchar *sender_name G_GNUC_UNUSED, 20706 const gchar *signal_name, 20707 GVariant *parameters) 20708 { 20709 _ExtendedGDBusSignalInfo *info; 20710 GVariantIter iter; 20711 GVariant *child; 20712 GValue *paramv; 20713 guint num_params; 20714 guint n; 20715 guint signal_id; 20716 info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_event_log_interface_info.parent_struct, signal_name); 20717 if (info == NULL) 20718 return; 20719 num_params = g_variant_n_children (parameters); 20720 paramv = g_new0 (GValue, num_params + 1); 20721 g_value_init (¶mv[0], TYPE_EVENT_LOG); 20722 g_value_set_object (¶mv[0], proxy); 20723 g_variant_iter_init (&iter, parameters); 20724 n = 1; 20725 while ((child = g_variant_iter_next_value (&iter)) != NULL) 20726 { 20727 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1]; 20728 if (arg_info->use_gvariant) 20729 { 20730 g_value_init (¶mv[n], G_TYPE_VARIANT); 20731 g_value_set_variant (¶mv[n], child); 20732 n++; 20733 } 20734 else 20735 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 20736 g_variant_unref (child); 20737 } 20738 signal_id = g_signal_lookup (info->signal_name, TYPE_EVENT_LOG); 20739 g_signal_emitv (paramv, signal_id, 0, NULL); 20740 for (n = 0; n < num_params + 1; n++) 20741 g_value_unset (¶mv[n]); 20742 g_free (paramv); 20743 } 20744 20745 static void 20746 event_log_proxy_g_properties_changed (GDBusProxy *_proxy, 20747 GVariant *changed_properties, 20748 const gchar *const *invalidated_properties) 20749 { 20750 EventLogProxy *proxy = EVENT_LOG_PROXY (_proxy); 20751 guint n; 20752 const gchar *key; 20753 GVariantIter *iter; 20754 _ExtendedGDBusPropertyInfo *info; 20755 g_variant_get (changed_properties, "a{sv}", &iter); 20756 while (g_variant_iter_next (iter, "{&sv}", &key, NULL)) 20757 { 20758 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_event_log_interface_info.parent_struct, key); 20759 g_datalist_remove_data (&proxy->priv->qdata, key); 20760 if (info != NULL) 20761 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 20762 } 20763 g_variant_iter_free (iter); 20764 for (n = 0; invalidated_properties[n] != NULL; n++) 20765 { 20766 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_event_log_interface_info.parent_struct, invalidated_properties[n]); 20767 g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]); 20768 if (info != NULL) 20769 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 20770 } 20771 } 20772 20773 static void 20774 event_log_proxy_init (EventLogProxy *proxy) 20775 { 20776 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 20777 proxy->priv = event_log_proxy_get_instance_private (proxy); 20778 #else 20779 proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, TYPE_EVENT_LOG_PROXY, EventLogProxyPrivate); 20780 #endif 20781 20782 g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), event_log_interface_info ()); 20783 } 20784 20785 static void 20786 event_log_proxy_class_init (EventLogProxyClass *klass) 20787 { 20788 GObjectClass *gobject_class; 20789 GDBusProxyClass *proxy_class; 20790 20791 gobject_class = G_OBJECT_CLASS (klass); 20792 gobject_class->finalize = event_log_proxy_finalize; 20793 gobject_class->get_property = event_log_proxy_get_property; 20794 gobject_class->set_property = event_log_proxy_set_property; 20795 20796 proxy_class = G_DBUS_PROXY_CLASS (klass); 20797 proxy_class->g_signal = event_log_proxy_g_signal; 20798 proxy_class->g_properties_changed = event_log_proxy_g_properties_changed; 20799 20800 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 20801 g_type_class_add_private (klass, sizeof (EventLogProxyPrivate)); 20802 #endif 20803 } 20804 20805 static void 20806 event_log_proxy_iface_init (EventLogIface *iface) 20807 { 20808 } 20809 20810 /** 20811 * event_log_proxy_new: 20812 * @connection: A #GDBusConnection. 20813 * @flags: Flags from the #GDBusProxyFlags enumeration. 20814 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 20815 * @object_path: An object path. 20816 * @cancellable: (allow-none): A #GCancellable or %NULL. 20817 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 20818 * @user_data: User data to pass to @callback. 20819 * 20820 * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-EventLog.top_of_page">org.openbmc.EventLog</link>. See g_dbus_proxy_new() for more details. 20821 * 20822 * 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. 20823 * You can then call event_log_proxy_new_finish() to get the result of the operation. 20824 * 20825 * See event_log_proxy_new_sync() for the synchronous, blocking version of this constructor. 20826 */ 20827 void 20828 event_log_proxy_new ( 20829 GDBusConnection *connection, 20830 GDBusProxyFlags flags, 20831 const gchar *name, 20832 const gchar *object_path, 20833 GCancellable *cancellable, 20834 GAsyncReadyCallback callback, 20835 gpointer user_data) 20836 { 20837 g_async_initable_new_async (TYPE_EVENT_LOG_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.EventLog", NULL); 20838 } 20839 20840 /** 20841 * event_log_proxy_new_finish: 20842 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to event_log_proxy_new(). 20843 * @error: Return location for error or %NULL 20844 * 20845 * Finishes an operation started with event_log_proxy_new(). 20846 * 20847 * Returns: (transfer full) (type EventLogProxy): The constructed proxy object or %NULL if @error is set. 20848 */ 20849 EventLog * 20850 event_log_proxy_new_finish ( 20851 GAsyncResult *res, 20852 GError **error) 20853 { 20854 GObject *ret; 20855 GObject *source_object; 20856 source_object = g_async_result_get_source_object (res); 20857 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 20858 g_object_unref (source_object); 20859 if (ret != NULL) 20860 return EVENT_LOG (ret); 20861 else 20862 return NULL; 20863 } 20864 20865 /** 20866 * event_log_proxy_new_sync: 20867 * @connection: A #GDBusConnection. 20868 * @flags: Flags from the #GDBusProxyFlags enumeration. 20869 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 20870 * @object_path: An object path. 20871 * @cancellable: (allow-none): A #GCancellable or %NULL. 20872 * @error: Return location for error or %NULL 20873 * 20874 * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-EventLog.top_of_page">org.openbmc.EventLog</link>. See g_dbus_proxy_new_sync() for more details. 20875 * 20876 * The calling thread is blocked until a reply is received. 20877 * 20878 * See event_log_proxy_new() for the asynchronous version of this constructor. 20879 * 20880 * Returns: (transfer full) (type EventLogProxy): The constructed proxy object or %NULL if @error is set. 20881 */ 20882 EventLog * 20883 event_log_proxy_new_sync ( 20884 GDBusConnection *connection, 20885 GDBusProxyFlags flags, 20886 const gchar *name, 20887 const gchar *object_path, 20888 GCancellable *cancellable, 20889 GError **error) 20890 { 20891 GInitable *ret; 20892 ret = g_initable_new (TYPE_EVENT_LOG_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.EventLog", NULL); 20893 if (ret != NULL) 20894 return EVENT_LOG (ret); 20895 else 20896 return NULL; 20897 } 20898 20899 20900 /** 20901 * event_log_proxy_new_for_bus: 20902 * @bus_type: A #GBusType. 20903 * @flags: Flags from the #GDBusProxyFlags enumeration. 20904 * @name: A bus name (well-known or unique). 20905 * @object_path: An object path. 20906 * @cancellable: (allow-none): A #GCancellable or %NULL. 20907 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 20908 * @user_data: User data to pass to @callback. 20909 * 20910 * Like event_log_proxy_new() but takes a #GBusType instead of a #GDBusConnection. 20911 * 20912 * 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. 20913 * You can then call event_log_proxy_new_for_bus_finish() to get the result of the operation. 20914 * 20915 * See event_log_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor. 20916 */ 20917 void 20918 event_log_proxy_new_for_bus ( 20919 GBusType bus_type, 20920 GDBusProxyFlags flags, 20921 const gchar *name, 20922 const gchar *object_path, 20923 GCancellable *cancellable, 20924 GAsyncReadyCallback callback, 20925 gpointer user_data) 20926 { 20927 g_async_initable_new_async (TYPE_EVENT_LOG_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.EventLog", NULL); 20928 } 20929 20930 /** 20931 * event_log_proxy_new_for_bus_finish: 20932 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to event_log_proxy_new_for_bus(). 20933 * @error: Return location for error or %NULL 20934 * 20935 * Finishes an operation started with event_log_proxy_new_for_bus(). 20936 * 20937 * Returns: (transfer full) (type EventLogProxy): The constructed proxy object or %NULL if @error is set. 20938 */ 20939 EventLog * 20940 event_log_proxy_new_for_bus_finish ( 20941 GAsyncResult *res, 20942 GError **error) 20943 { 20944 GObject *ret; 20945 GObject *source_object; 20946 source_object = g_async_result_get_source_object (res); 20947 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 20948 g_object_unref (source_object); 20949 if (ret != NULL) 20950 return EVENT_LOG (ret); 20951 else 20952 return NULL; 20953 } 20954 20955 /** 20956 * event_log_proxy_new_for_bus_sync: 20957 * @bus_type: A #GBusType. 20958 * @flags: Flags from the #GDBusProxyFlags enumeration. 20959 * @name: A bus name (well-known or unique). 20960 * @object_path: An object path. 20961 * @cancellable: (allow-none): A #GCancellable or %NULL. 20962 * @error: Return location for error or %NULL 20963 * 20964 * Like event_log_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection. 20965 * 20966 * The calling thread is blocked until a reply is received. 20967 * 20968 * See event_log_proxy_new_for_bus() for the asynchronous version of this constructor. 20969 * 20970 * Returns: (transfer full) (type EventLogProxy): The constructed proxy object or %NULL if @error is set. 20971 */ 20972 EventLog * 20973 event_log_proxy_new_for_bus_sync ( 20974 GBusType bus_type, 20975 GDBusProxyFlags flags, 20976 const gchar *name, 20977 const gchar *object_path, 20978 GCancellable *cancellable, 20979 GError **error) 20980 { 20981 GInitable *ret; 20982 ret = g_initable_new (TYPE_EVENT_LOG_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.EventLog", NULL); 20983 if (ret != NULL) 20984 return EVENT_LOG (ret); 20985 else 20986 return NULL; 20987 } 20988 20989 20990 /* ------------------------------------------------------------------------ */ 20991 20992 /** 20993 * EventLogSkeleton: 20994 * 20995 * The #EventLogSkeleton structure contains only private data and should only be accessed using the provided API. 20996 */ 20997 20998 /** 20999 * EventLogSkeletonClass: 21000 * @parent_class: The parent class. 21001 * 21002 * Class structure for #EventLogSkeleton. 21003 */ 21004 21005 struct _EventLogSkeletonPrivate 21006 { 21007 GValue *properties; 21008 GList *changed_properties; 21009 GSource *changed_properties_idle_source; 21010 GMainContext *context; 21011 GMutex lock; 21012 }; 21013 21014 static void 21015 _event_log_skeleton_handle_method_call ( 21016 GDBusConnection *connection G_GNUC_UNUSED, 21017 const gchar *sender G_GNUC_UNUSED, 21018 const gchar *object_path G_GNUC_UNUSED, 21019 const gchar *interface_name, 21020 const gchar *method_name, 21021 GVariant *parameters, 21022 GDBusMethodInvocation *invocation, 21023 gpointer user_data) 21024 { 21025 EventLogSkeleton *skeleton = EVENT_LOG_SKELETON (user_data); 21026 _ExtendedGDBusMethodInfo *info; 21027 GVariantIter iter; 21028 GVariant *child; 21029 GValue *paramv; 21030 guint num_params; 21031 guint num_extra; 21032 guint n; 21033 guint signal_id; 21034 GValue return_value = G_VALUE_INIT; 21035 info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation); 21036 g_assert (info != NULL); 21037 num_params = g_variant_n_children (parameters); 21038 num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra); 21039 n = 0; 21040 g_value_init (¶mv[n], TYPE_EVENT_LOG); 21041 g_value_set_object (¶mv[n++], skeleton); 21042 g_value_init (¶mv[n], G_TYPE_DBUS_METHOD_INVOCATION); 21043 g_value_set_object (¶mv[n++], invocation); 21044 if (info->pass_fdlist) 21045 { 21046 #ifdef G_OS_UNIX 21047 g_value_init (¶mv[n], G_TYPE_UNIX_FD_LIST); 21048 g_value_set_object (¶mv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation))); 21049 #else 21050 g_assert_not_reached (); 21051 #endif 21052 } 21053 g_variant_iter_init (&iter, parameters); 21054 while ((child = g_variant_iter_next_value (&iter)) != NULL) 21055 { 21056 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra]; 21057 if (arg_info->use_gvariant) 21058 { 21059 g_value_init (¶mv[n], G_TYPE_VARIANT); 21060 g_value_set_variant (¶mv[n], child); 21061 n++; 21062 } 21063 else 21064 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 21065 g_variant_unref (child); 21066 } 21067 signal_id = g_signal_lookup (info->signal_name, TYPE_EVENT_LOG); 21068 g_value_init (&return_value, G_TYPE_BOOLEAN); 21069 g_signal_emitv (paramv, signal_id, 0, &return_value); 21070 if (!g_value_get_boolean (&return_value)) 21071 g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name); 21072 g_value_unset (&return_value); 21073 for (n = 0; n < num_params + num_extra; n++) 21074 g_value_unset (¶mv[n]); 21075 g_free (paramv); 21076 } 21077 21078 static GVariant * 21079 _event_log_skeleton_handle_get_property ( 21080 GDBusConnection *connection G_GNUC_UNUSED, 21081 const gchar *sender G_GNUC_UNUSED, 21082 const gchar *object_path G_GNUC_UNUSED, 21083 const gchar *interface_name G_GNUC_UNUSED, 21084 const gchar *property_name, 21085 GError **error, 21086 gpointer user_data) 21087 { 21088 EventLogSkeleton *skeleton = EVENT_LOG_SKELETON (user_data); 21089 GValue value = G_VALUE_INIT; 21090 GParamSpec *pspec; 21091 _ExtendedGDBusPropertyInfo *info; 21092 GVariant *ret; 21093 ret = NULL; 21094 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_event_log_interface_info.parent_struct, property_name); 21095 g_assert (info != NULL); 21096 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 21097 if (pspec == NULL) 21098 { 21099 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 21100 } 21101 else 21102 { 21103 g_value_init (&value, pspec->value_type); 21104 g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value); 21105 ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature)); 21106 g_value_unset (&value); 21107 } 21108 return ret; 21109 } 21110 21111 static gboolean 21112 _event_log_skeleton_handle_set_property ( 21113 GDBusConnection *connection G_GNUC_UNUSED, 21114 const gchar *sender G_GNUC_UNUSED, 21115 const gchar *object_path G_GNUC_UNUSED, 21116 const gchar *interface_name G_GNUC_UNUSED, 21117 const gchar *property_name, 21118 GVariant *variant, 21119 GError **error, 21120 gpointer user_data) 21121 { 21122 EventLogSkeleton *skeleton = EVENT_LOG_SKELETON (user_data); 21123 GValue value = G_VALUE_INIT; 21124 GParamSpec *pspec; 21125 _ExtendedGDBusPropertyInfo *info; 21126 gboolean ret; 21127 ret = FALSE; 21128 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_event_log_interface_info.parent_struct, property_name); 21129 g_assert (info != NULL); 21130 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 21131 if (pspec == NULL) 21132 { 21133 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 21134 } 21135 else 21136 { 21137 if (info->use_gvariant) 21138 g_value_set_variant (&value, variant); 21139 else 21140 g_dbus_gvariant_to_gvalue (variant, &value); 21141 g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value); 21142 g_value_unset (&value); 21143 ret = TRUE; 21144 } 21145 return ret; 21146 } 21147 21148 static const GDBusInterfaceVTable _event_log_skeleton_vtable = 21149 { 21150 _event_log_skeleton_handle_method_call, 21151 _event_log_skeleton_handle_get_property, 21152 _event_log_skeleton_handle_set_property, 21153 {NULL} 21154 }; 21155 21156 static GDBusInterfaceInfo * 21157 event_log_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 21158 { 21159 return event_log_interface_info (); 21160 } 21161 21162 static GDBusInterfaceVTable * 21163 event_log_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 21164 { 21165 return (GDBusInterfaceVTable *) &_event_log_skeleton_vtable; 21166 } 21167 21168 static GVariant * 21169 event_log_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton) 21170 { 21171 EventLogSkeleton *skeleton = EVENT_LOG_SKELETON (_skeleton); 21172 21173 GVariantBuilder builder; 21174 guint n; 21175 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 21176 if (_event_log_interface_info.parent_struct.properties == NULL) 21177 goto out; 21178 for (n = 0; _event_log_interface_info.parent_struct.properties[n] != NULL; n++) 21179 { 21180 GDBusPropertyInfo *info = _event_log_interface_info.parent_struct.properties[n]; 21181 if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE) 21182 { 21183 GVariant *value; 21184 value = _event_log_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.EventLog", info->name, NULL, skeleton); 21185 if (value != NULL) 21186 { 21187 g_variant_take_ref (value); 21188 g_variant_builder_add (&builder, "{sv}", info->name, value); 21189 g_variant_unref (value); 21190 } 21191 } 21192 } 21193 out: 21194 return g_variant_builder_end (&builder); 21195 } 21196 21197 static void 21198 event_log_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton) 21199 { 21200 } 21201 21202 static void 21203 _event_log_on_signal_event_log ( 21204 EventLog *object, 21205 gint arg_priority, 21206 const gchar *arg_message, 21207 gint arg_rc) 21208 { 21209 EventLogSkeleton *skeleton = EVENT_LOG_SKELETON (object); 21210 21211 GList *connections, *l; 21212 GVariant *signal_variant; 21213 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 21214 21215 signal_variant = g_variant_ref_sink (g_variant_new ("(isi)", 21216 arg_priority, 21217 arg_message, 21218 arg_rc)); 21219 for (l = connections; l != NULL; l = l->next) 21220 { 21221 GDBusConnection *connection = l->data; 21222 g_dbus_connection_emit_signal (connection, 21223 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.EventLog", "EventLog", 21224 signal_variant, NULL); 21225 } 21226 g_variant_unref (signal_variant); 21227 g_list_free_full (connections, g_object_unref); 21228 } 21229 21230 static void event_log_skeleton_iface_init (EventLogIface *iface); 21231 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 21232 G_DEFINE_TYPE_WITH_CODE (EventLogSkeleton, event_log_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 21233 G_ADD_PRIVATE (EventLogSkeleton) 21234 G_IMPLEMENT_INTERFACE (TYPE_EVENT_LOG, event_log_skeleton_iface_init)); 21235 21236 #else 21237 G_DEFINE_TYPE_WITH_CODE (EventLogSkeleton, event_log_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 21238 G_IMPLEMENT_INTERFACE (TYPE_EVENT_LOG, event_log_skeleton_iface_init)); 21239 21240 #endif 21241 static void 21242 event_log_skeleton_finalize (GObject *object) 21243 { 21244 EventLogSkeleton *skeleton = EVENT_LOG_SKELETON (object); 21245 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 21246 if (skeleton->priv->changed_properties_idle_source != NULL) 21247 g_source_destroy (skeleton->priv->changed_properties_idle_source); 21248 g_main_context_unref (skeleton->priv->context); 21249 g_mutex_clear (&skeleton->priv->lock); 21250 G_OBJECT_CLASS (event_log_skeleton_parent_class)->finalize (object); 21251 } 21252 21253 static void 21254 event_log_skeleton_init (EventLogSkeleton *skeleton) 21255 { 21256 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 21257 skeleton->priv = event_log_skeleton_get_instance_private (skeleton); 21258 #else 21259 skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, TYPE_EVENT_LOG_SKELETON, EventLogSkeletonPrivate); 21260 #endif 21261 21262 g_mutex_init (&skeleton->priv->lock); 21263 skeleton->priv->context = g_main_context_ref_thread_default (); 21264 } 21265 21266 static void 21267 event_log_skeleton_class_init (EventLogSkeletonClass *klass) 21268 { 21269 GObjectClass *gobject_class; 21270 GDBusInterfaceSkeletonClass *skeleton_class; 21271 21272 gobject_class = G_OBJECT_CLASS (klass); 21273 gobject_class->finalize = event_log_skeleton_finalize; 21274 21275 skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass); 21276 skeleton_class->get_info = event_log_skeleton_dbus_interface_get_info; 21277 skeleton_class->get_properties = event_log_skeleton_dbus_interface_get_properties; 21278 skeleton_class->flush = event_log_skeleton_dbus_interface_flush; 21279 skeleton_class->get_vtable = event_log_skeleton_dbus_interface_get_vtable; 21280 21281 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 21282 g_type_class_add_private (klass, sizeof (EventLogSkeletonPrivate)); 21283 #endif 21284 } 21285 21286 static void 21287 event_log_skeleton_iface_init (EventLogIface *iface) 21288 { 21289 iface->event_log = _event_log_on_signal_event_log; 21290 } 21291 21292 /** 21293 * event_log_skeleton_new: 21294 * 21295 * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-EventLog.top_of_page">org.openbmc.EventLog</link>. 21296 * 21297 * Returns: (transfer full) (type EventLogSkeleton): The skeleton object. 21298 */ 21299 EventLog * 21300 event_log_skeleton_new (void) 21301 { 21302 return EVENT_LOG (g_object_new (TYPE_EVENT_LOG_SKELETON, NULL)); 21303 } 21304 21305 /* ------------------------------------------------------------------------ 21306 * Code for interface org.openbmc.Flash 21307 * ------------------------------------------------------------------------ 21308 */ 21309 21310 /** 21311 * SECTION:Flash 21312 * @title: Flash 21313 * @short_description: Generated C code for the org.openbmc.Flash D-Bus interface 21314 * 21315 * This section contains code for working with the <link linkend="gdbus-interface-org-openbmc-Flash.top_of_page">org.openbmc.Flash</link> D-Bus interface in C. 21316 */ 21317 21318 /* ---- Introspection data for org.openbmc.Flash ---- */ 21319 21320 static const _ExtendedGDBusArgInfo _flash_method_info_update_IN_ARG_filename = 21321 { 21322 { 21323 -1, 21324 (gchar *) "filename", 21325 (gchar *) "s", 21326 NULL 21327 }, 21328 FALSE 21329 }; 21330 21331 static const _ExtendedGDBusArgInfo * const _flash_method_info_update_IN_ARG_pointers[] = 21332 { 21333 &_flash_method_info_update_IN_ARG_filename, 21334 NULL 21335 }; 21336 21337 static const _ExtendedGDBusMethodInfo _flash_method_info_update = 21338 { 21339 { 21340 -1, 21341 (gchar *) "update", 21342 (GDBusArgInfo **) &_flash_method_info_update_IN_ARG_pointers, 21343 NULL, 21344 NULL 21345 }, 21346 "handle-update", 21347 FALSE 21348 }; 21349 21350 static const _ExtendedGDBusArgInfo _flash_method_info_error_IN_ARG_message = 21351 { 21352 { 21353 -1, 21354 (gchar *) "message", 21355 (gchar *) "s", 21356 NULL 21357 }, 21358 FALSE 21359 }; 21360 21361 static const _ExtendedGDBusArgInfo * const _flash_method_info_error_IN_ARG_pointers[] = 21362 { 21363 &_flash_method_info_error_IN_ARG_message, 21364 NULL 21365 }; 21366 21367 static const _ExtendedGDBusMethodInfo _flash_method_info_error = 21368 { 21369 { 21370 -1, 21371 (gchar *) "error", 21372 (GDBusArgInfo **) &_flash_method_info_error_IN_ARG_pointers, 21373 NULL, 21374 NULL 21375 }, 21376 "handle-error", 21377 FALSE 21378 }; 21379 21380 static const _ExtendedGDBusMethodInfo _flash_method_info_done = 21381 { 21382 { 21383 -1, 21384 (gchar *) "done", 21385 NULL, 21386 NULL, 21387 NULL 21388 }, 21389 "handle-done", 21390 FALSE 21391 }; 21392 21393 static const _ExtendedGDBusArgInfo _flash_method_info_update_via_tftp_IN_ARG_url = 21394 { 21395 { 21396 -1, 21397 (gchar *) "url", 21398 (gchar *) "s", 21399 NULL 21400 }, 21401 FALSE 21402 }; 21403 21404 static const _ExtendedGDBusArgInfo _flash_method_info_update_via_tftp_IN_ARG_filename = 21405 { 21406 { 21407 -1, 21408 (gchar *) "filename", 21409 (gchar *) "s", 21410 NULL 21411 }, 21412 FALSE 21413 }; 21414 21415 static const _ExtendedGDBusArgInfo * const _flash_method_info_update_via_tftp_IN_ARG_pointers[] = 21416 { 21417 &_flash_method_info_update_via_tftp_IN_ARG_url, 21418 &_flash_method_info_update_via_tftp_IN_ARG_filename, 21419 NULL 21420 }; 21421 21422 static const _ExtendedGDBusMethodInfo _flash_method_info_update_via_tftp = 21423 { 21424 { 21425 -1, 21426 (gchar *) "updateViaTftp", 21427 (GDBusArgInfo **) &_flash_method_info_update_via_tftp_IN_ARG_pointers, 21428 NULL, 21429 NULL 21430 }, 21431 "handle-update-via-tftp", 21432 FALSE 21433 }; 21434 21435 static const _ExtendedGDBusMethodInfo _flash_method_info_init = 21436 { 21437 { 21438 -1, 21439 (gchar *) "init", 21440 NULL, 21441 NULL, 21442 NULL 21443 }, 21444 "handle-init", 21445 FALSE 21446 }; 21447 21448 static const _ExtendedGDBusMethodInfo * const _flash_method_info_pointers[] = 21449 { 21450 &_flash_method_info_update, 21451 &_flash_method_info_error, 21452 &_flash_method_info_done, 21453 &_flash_method_info_update_via_tftp, 21454 &_flash_method_info_init, 21455 NULL 21456 }; 21457 21458 static const _ExtendedGDBusSignalInfo _flash_signal_info_updated = 21459 { 21460 { 21461 -1, 21462 (gchar *) "Updated", 21463 NULL, 21464 NULL 21465 }, 21466 "updated" 21467 }; 21468 21469 static const _ExtendedGDBusArgInfo _flash_signal_info_download_ARG_url = 21470 { 21471 { 21472 -1, 21473 (gchar *) "url", 21474 (gchar *) "s", 21475 NULL 21476 }, 21477 FALSE 21478 }; 21479 21480 static const _ExtendedGDBusArgInfo _flash_signal_info_download_ARG_filename = 21481 { 21482 { 21483 -1, 21484 (gchar *) "filename", 21485 (gchar *) "s", 21486 NULL 21487 }, 21488 FALSE 21489 }; 21490 21491 static const _ExtendedGDBusArgInfo * const _flash_signal_info_download_ARG_pointers[] = 21492 { 21493 &_flash_signal_info_download_ARG_url, 21494 &_flash_signal_info_download_ARG_filename, 21495 NULL 21496 }; 21497 21498 static const _ExtendedGDBusSignalInfo _flash_signal_info_download = 21499 { 21500 { 21501 -1, 21502 (gchar *) "Download", 21503 (GDBusArgInfo **) &_flash_signal_info_download_ARG_pointers, 21504 NULL 21505 }, 21506 "download" 21507 }; 21508 21509 static const _ExtendedGDBusSignalInfo * const _flash_signal_info_pointers[] = 21510 { 21511 &_flash_signal_info_updated, 21512 &_flash_signal_info_download, 21513 NULL 21514 }; 21515 21516 static const _ExtendedGDBusPropertyInfo _flash_property_info_filename = 21517 { 21518 { 21519 -1, 21520 (gchar *) "filename", 21521 (gchar *) "s", 21522 G_DBUS_PROPERTY_INFO_FLAGS_READABLE, 21523 NULL 21524 }, 21525 "filename", 21526 FALSE 21527 }; 21528 21529 static const _ExtendedGDBusPropertyInfo _flash_property_info_flasher_path = 21530 { 21531 { 21532 -1, 21533 (gchar *) "flasher_path", 21534 (gchar *) "s", 21535 G_DBUS_PROPERTY_INFO_FLAGS_READABLE, 21536 NULL 21537 }, 21538 "flasher-path", 21539 FALSE 21540 }; 21541 21542 static const _ExtendedGDBusPropertyInfo _flash_property_info_flasher_name = 21543 { 21544 { 21545 -1, 21546 (gchar *) "flasher_name", 21547 (gchar *) "s", 21548 G_DBUS_PROPERTY_INFO_FLAGS_READABLE, 21549 NULL 21550 }, 21551 "flasher-name", 21552 FALSE 21553 }; 21554 21555 static const _ExtendedGDBusPropertyInfo _flash_property_info_flasher_instance = 21556 { 21557 { 21558 -1, 21559 (gchar *) "flasher_instance", 21560 (gchar *) "s", 21561 G_DBUS_PROPERTY_INFO_FLAGS_READABLE, 21562 NULL 21563 }, 21564 "flasher-instance", 21565 FALSE 21566 }; 21567 21568 static const _ExtendedGDBusPropertyInfo _flash_property_info_status = 21569 { 21570 { 21571 -1, 21572 (gchar *) "status", 21573 (gchar *) "s", 21574 G_DBUS_PROPERTY_INFO_FLAGS_READABLE, 21575 NULL 21576 }, 21577 "status", 21578 FALSE 21579 }; 21580 21581 static const _ExtendedGDBusPropertyInfo * const _flash_property_info_pointers[] = 21582 { 21583 &_flash_property_info_filename, 21584 &_flash_property_info_flasher_path, 21585 &_flash_property_info_flasher_name, 21586 &_flash_property_info_flasher_instance, 21587 &_flash_property_info_status, 21588 NULL 21589 }; 21590 21591 static const _ExtendedGDBusInterfaceInfo _flash_interface_info = 21592 { 21593 { 21594 -1, 21595 (gchar *) "org.openbmc.Flash", 21596 (GDBusMethodInfo **) &_flash_method_info_pointers, 21597 (GDBusSignalInfo **) &_flash_signal_info_pointers, 21598 (GDBusPropertyInfo **) &_flash_property_info_pointers, 21599 NULL 21600 }, 21601 "flash", 21602 }; 21603 21604 21605 /** 21606 * flash_interface_info: 21607 * 21608 * Gets a machine-readable description of the <link linkend="gdbus-interface-org-openbmc-Flash.top_of_page">org.openbmc.Flash</link> D-Bus interface. 21609 * 21610 * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free. 21611 */ 21612 GDBusInterfaceInfo * 21613 flash_interface_info (void) 21614 { 21615 return (GDBusInterfaceInfo *) &_flash_interface_info.parent_struct; 21616 } 21617 21618 /** 21619 * flash_override_properties: 21620 * @klass: The class structure for a #GObject<!-- -->-derived class. 21621 * @property_id_begin: The property id to assign to the first overridden property. 21622 * 21623 * Overrides all #GObject properties in the #Flash interface for a concrete class. 21624 * The properties are overridden in the order they are defined. 21625 * 21626 * Returns: The last property id. 21627 */ 21628 guint 21629 flash_override_properties (GObjectClass *klass, guint property_id_begin) 21630 { 21631 g_object_class_override_property (klass, property_id_begin++, "filename"); 21632 g_object_class_override_property (klass, property_id_begin++, "flasher-path"); 21633 g_object_class_override_property (klass, property_id_begin++, "flasher-name"); 21634 g_object_class_override_property (klass, property_id_begin++, "flasher-instance"); 21635 g_object_class_override_property (klass, property_id_begin++, "status"); 21636 return property_id_begin - 1; 21637 } 21638 21639 21640 21641 /** 21642 * Flash: 21643 * 21644 * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Flash.top_of_page">org.openbmc.Flash</link>. 21645 */ 21646 21647 /** 21648 * FlashIface: 21649 * @parent_iface: The parent interface. 21650 * @handle_done: Handler for the #Flash::handle-done signal. 21651 * @handle_error: Handler for the #Flash::handle-error signal. 21652 * @handle_init: Handler for the #Flash::handle-init signal. 21653 * @handle_update: Handler for the #Flash::handle-update signal. 21654 * @handle_update_via_tftp: Handler for the #Flash::handle-update-via-tftp signal. 21655 * @get_filename: Getter for the #Flash:filename property. 21656 * @get_flasher_instance: Getter for the #Flash:flasher-instance property. 21657 * @get_flasher_name: Getter for the #Flash:flasher-name property. 21658 * @get_flasher_path: Getter for the #Flash:flasher-path property. 21659 * @get_status: Getter for the #Flash:status property. 21660 * @download: Handler for the #Flash::download signal. 21661 * @updated: Handler for the #Flash::updated signal. 21662 * 21663 * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Flash.top_of_page">org.openbmc.Flash</link>. 21664 */ 21665 21666 typedef FlashIface FlashInterface; 21667 G_DEFINE_INTERFACE (Flash, flash, G_TYPE_OBJECT); 21668 21669 static void 21670 flash_default_init (FlashIface *iface) 21671 { 21672 /* GObject signals for incoming D-Bus method calls: */ 21673 /** 21674 * Flash::handle-update: 21675 * @object: A #Flash. 21676 * @invocation: A #GDBusMethodInvocation. 21677 * @arg_filename: Argument passed by remote caller. 21678 * 21679 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-Flash.update">update()</link> D-Bus method. 21680 * 21681 * 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 flash_complete_update() 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. 21682 * 21683 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 21684 */ 21685 g_signal_new ("handle-update", 21686 G_TYPE_FROM_INTERFACE (iface), 21687 G_SIGNAL_RUN_LAST, 21688 G_STRUCT_OFFSET (FlashIface, handle_update), 21689 g_signal_accumulator_true_handled, 21690 NULL, 21691 g_cclosure_marshal_generic, 21692 G_TYPE_BOOLEAN, 21693 2, 21694 G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING); 21695 21696 /** 21697 * Flash::handle-error: 21698 * @object: A #Flash. 21699 * @invocation: A #GDBusMethodInvocation. 21700 * @arg_message: Argument passed by remote caller. 21701 * 21702 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-Flash.error">error()</link> D-Bus method. 21703 * 21704 * 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 flash_complete_error() 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. 21705 * 21706 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 21707 */ 21708 g_signal_new ("handle-error", 21709 G_TYPE_FROM_INTERFACE (iface), 21710 G_SIGNAL_RUN_LAST, 21711 G_STRUCT_OFFSET (FlashIface, handle_error), 21712 g_signal_accumulator_true_handled, 21713 NULL, 21714 g_cclosure_marshal_generic, 21715 G_TYPE_BOOLEAN, 21716 2, 21717 G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING); 21718 21719 /** 21720 * Flash::handle-done: 21721 * @object: A #Flash. 21722 * @invocation: A #GDBusMethodInvocation. 21723 * 21724 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-Flash.done">done()</link> D-Bus method. 21725 * 21726 * 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 flash_complete_done() 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. 21727 * 21728 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 21729 */ 21730 g_signal_new ("handle-done", 21731 G_TYPE_FROM_INTERFACE (iface), 21732 G_SIGNAL_RUN_LAST, 21733 G_STRUCT_OFFSET (FlashIface, handle_done), 21734 g_signal_accumulator_true_handled, 21735 NULL, 21736 g_cclosure_marshal_generic, 21737 G_TYPE_BOOLEAN, 21738 1, 21739 G_TYPE_DBUS_METHOD_INVOCATION); 21740 21741 /** 21742 * Flash::handle-update-via-tftp: 21743 * @object: A #Flash. 21744 * @invocation: A #GDBusMethodInvocation. 21745 * @arg_url: Argument passed by remote caller. 21746 * @arg_filename: Argument passed by remote caller. 21747 * 21748 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-Flash.updateViaTftp">updateViaTftp()</link> D-Bus method. 21749 * 21750 * 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 flash_complete_update_via_tftp() 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. 21751 * 21752 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 21753 */ 21754 g_signal_new ("handle-update-via-tftp", 21755 G_TYPE_FROM_INTERFACE (iface), 21756 G_SIGNAL_RUN_LAST, 21757 G_STRUCT_OFFSET (FlashIface, handle_update_via_tftp), 21758 g_signal_accumulator_true_handled, 21759 NULL, 21760 g_cclosure_marshal_generic, 21761 G_TYPE_BOOLEAN, 21762 3, 21763 G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING, G_TYPE_STRING); 21764 21765 /** 21766 * Flash::handle-init: 21767 * @object: A #Flash. 21768 * @invocation: A #GDBusMethodInvocation. 21769 * 21770 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-Flash.init">init()</link> D-Bus method. 21771 * 21772 * 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 flash_complete_init() 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. 21773 * 21774 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 21775 */ 21776 g_signal_new ("handle-init", 21777 G_TYPE_FROM_INTERFACE (iface), 21778 G_SIGNAL_RUN_LAST, 21779 G_STRUCT_OFFSET (FlashIface, handle_init), 21780 g_signal_accumulator_true_handled, 21781 NULL, 21782 g_cclosure_marshal_generic, 21783 G_TYPE_BOOLEAN, 21784 1, 21785 G_TYPE_DBUS_METHOD_INVOCATION); 21786 21787 /* GObject signals for received D-Bus signals: */ 21788 /** 21789 * Flash::updated: 21790 * @object: A #Flash. 21791 * 21792 * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-openbmc-Flash.Updated">"Updated"</link> is received. 21793 * 21794 * 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. 21795 */ 21796 g_signal_new ("updated", 21797 G_TYPE_FROM_INTERFACE (iface), 21798 G_SIGNAL_RUN_LAST, 21799 G_STRUCT_OFFSET (FlashIface, updated), 21800 NULL, 21801 NULL, 21802 g_cclosure_marshal_generic, 21803 G_TYPE_NONE, 21804 0); 21805 21806 /** 21807 * Flash::download: 21808 * @object: A #Flash. 21809 * @arg_url: Argument. 21810 * @arg_filename: Argument. 21811 * 21812 * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-openbmc-Flash.Download">"Download"</link> is received. 21813 * 21814 * 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. 21815 */ 21816 g_signal_new ("download", 21817 G_TYPE_FROM_INTERFACE (iface), 21818 G_SIGNAL_RUN_LAST, 21819 G_STRUCT_OFFSET (FlashIface, download), 21820 NULL, 21821 NULL, 21822 g_cclosure_marshal_generic, 21823 G_TYPE_NONE, 21824 2, G_TYPE_STRING, G_TYPE_STRING); 21825 21826 /* GObject properties for D-Bus properties: */ 21827 /** 21828 * Flash:filename: 21829 * 21830 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-Flash.filename">"filename"</link>. 21831 * 21832 * 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. 21833 */ 21834 g_object_interface_install_property (iface, 21835 g_param_spec_string ("filename", "filename", "filename", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 21836 /** 21837 * Flash:flasher-path: 21838 * 21839 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-Flash.flasher_path">"flasher_path"</link>. 21840 * 21841 * 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. 21842 */ 21843 g_object_interface_install_property (iface, 21844 g_param_spec_string ("flasher-path", "flasher_path", "flasher_path", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 21845 /** 21846 * Flash:flasher-name: 21847 * 21848 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-Flash.flasher_name">"flasher_name"</link>. 21849 * 21850 * 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. 21851 */ 21852 g_object_interface_install_property (iface, 21853 g_param_spec_string ("flasher-name", "flasher_name", "flasher_name", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 21854 /** 21855 * Flash:flasher-instance: 21856 * 21857 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-Flash.flasher_instance">"flasher_instance"</link>. 21858 * 21859 * 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. 21860 */ 21861 g_object_interface_install_property (iface, 21862 g_param_spec_string ("flasher-instance", "flasher_instance", "flasher_instance", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 21863 /** 21864 * Flash:status: 21865 * 21866 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-Flash.status">"status"</link>. 21867 * 21868 * 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. 21869 */ 21870 g_object_interface_install_property (iface, 21871 g_param_spec_string ("status", "status", "status", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 21872 } 21873 21874 /** 21875 * flash_get_filename: (skip) 21876 * @object: A #Flash. 21877 * 21878 * Gets the value of the <link linkend="gdbus-property-org-openbmc-Flash.filename">"filename"</link> D-Bus property. 21879 * 21880 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 21881 * 21882 * <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 flash_dup_filename() if on another thread.</warning> 21883 * 21884 * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object. 21885 */ 21886 const gchar * 21887 flash_get_filename (Flash *object) 21888 { 21889 return FLASH_GET_IFACE (object)->get_filename (object); 21890 } 21891 21892 /** 21893 * flash_dup_filename: (skip) 21894 * @object: A #Flash. 21895 * 21896 * Gets a copy of the <link linkend="gdbus-property-org-openbmc-Flash.filename">"filename"</link> D-Bus property. 21897 * 21898 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 21899 * 21900 * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value should be freed with g_free(). 21901 */ 21902 gchar * 21903 flash_dup_filename (Flash *object) 21904 { 21905 gchar *value; 21906 g_object_get (G_OBJECT (object), "filename", &value, NULL); 21907 return value; 21908 } 21909 21910 /** 21911 * flash_set_filename: (skip) 21912 * @object: A #Flash. 21913 * @value: The value to set. 21914 * 21915 * Sets the <link linkend="gdbus-property-org-openbmc-Flash.filename">"filename"</link> D-Bus property to @value. 21916 * 21917 * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side. 21918 */ 21919 void 21920 flash_set_filename (Flash *object, const gchar *value) 21921 { 21922 g_object_set (G_OBJECT (object), "filename", value, NULL); 21923 } 21924 21925 /** 21926 * flash_get_flasher_path: (skip) 21927 * @object: A #Flash. 21928 * 21929 * Gets the value of the <link linkend="gdbus-property-org-openbmc-Flash.flasher_path">"flasher_path"</link> D-Bus property. 21930 * 21931 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 21932 * 21933 * <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 flash_dup_flasher_path() if on another thread.</warning> 21934 * 21935 * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object. 21936 */ 21937 const gchar * 21938 flash_get_flasher_path (Flash *object) 21939 { 21940 return FLASH_GET_IFACE (object)->get_flasher_path (object); 21941 } 21942 21943 /** 21944 * flash_dup_flasher_path: (skip) 21945 * @object: A #Flash. 21946 * 21947 * Gets a copy of the <link linkend="gdbus-property-org-openbmc-Flash.flasher_path">"flasher_path"</link> D-Bus property. 21948 * 21949 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 21950 * 21951 * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value should be freed with g_free(). 21952 */ 21953 gchar * 21954 flash_dup_flasher_path (Flash *object) 21955 { 21956 gchar *value; 21957 g_object_get (G_OBJECT (object), "flasher-path", &value, NULL); 21958 return value; 21959 } 21960 21961 /** 21962 * flash_set_flasher_path: (skip) 21963 * @object: A #Flash. 21964 * @value: The value to set. 21965 * 21966 * Sets the <link linkend="gdbus-property-org-openbmc-Flash.flasher_path">"flasher_path"</link> D-Bus property to @value. 21967 * 21968 * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side. 21969 */ 21970 void 21971 flash_set_flasher_path (Flash *object, const gchar *value) 21972 { 21973 g_object_set (G_OBJECT (object), "flasher-path", value, NULL); 21974 } 21975 21976 /** 21977 * flash_get_flasher_name: (skip) 21978 * @object: A #Flash. 21979 * 21980 * Gets the value of the <link linkend="gdbus-property-org-openbmc-Flash.flasher_name">"flasher_name"</link> D-Bus property. 21981 * 21982 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 21983 * 21984 * <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 flash_dup_flasher_name() if on another thread.</warning> 21985 * 21986 * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object. 21987 */ 21988 const gchar * 21989 flash_get_flasher_name (Flash *object) 21990 { 21991 return FLASH_GET_IFACE (object)->get_flasher_name (object); 21992 } 21993 21994 /** 21995 * flash_dup_flasher_name: (skip) 21996 * @object: A #Flash. 21997 * 21998 * Gets a copy of the <link linkend="gdbus-property-org-openbmc-Flash.flasher_name">"flasher_name"</link> D-Bus property. 21999 * 22000 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 22001 * 22002 * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value should be freed with g_free(). 22003 */ 22004 gchar * 22005 flash_dup_flasher_name (Flash *object) 22006 { 22007 gchar *value; 22008 g_object_get (G_OBJECT (object), "flasher-name", &value, NULL); 22009 return value; 22010 } 22011 22012 /** 22013 * flash_set_flasher_name: (skip) 22014 * @object: A #Flash. 22015 * @value: The value to set. 22016 * 22017 * Sets the <link linkend="gdbus-property-org-openbmc-Flash.flasher_name">"flasher_name"</link> D-Bus property to @value. 22018 * 22019 * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side. 22020 */ 22021 void 22022 flash_set_flasher_name (Flash *object, const gchar *value) 22023 { 22024 g_object_set (G_OBJECT (object), "flasher-name", value, NULL); 22025 } 22026 22027 /** 22028 * flash_get_flasher_instance: (skip) 22029 * @object: A #Flash. 22030 * 22031 * Gets the value of the <link linkend="gdbus-property-org-openbmc-Flash.flasher_instance">"flasher_instance"</link> D-Bus property. 22032 * 22033 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 22034 * 22035 * <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 flash_dup_flasher_instance() if on another thread.</warning> 22036 * 22037 * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object. 22038 */ 22039 const gchar * 22040 flash_get_flasher_instance (Flash *object) 22041 { 22042 return FLASH_GET_IFACE (object)->get_flasher_instance (object); 22043 } 22044 22045 /** 22046 * flash_dup_flasher_instance: (skip) 22047 * @object: A #Flash. 22048 * 22049 * Gets a copy of the <link linkend="gdbus-property-org-openbmc-Flash.flasher_instance">"flasher_instance"</link> D-Bus property. 22050 * 22051 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 22052 * 22053 * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value should be freed with g_free(). 22054 */ 22055 gchar * 22056 flash_dup_flasher_instance (Flash *object) 22057 { 22058 gchar *value; 22059 g_object_get (G_OBJECT (object), "flasher-instance", &value, NULL); 22060 return value; 22061 } 22062 22063 /** 22064 * flash_set_flasher_instance: (skip) 22065 * @object: A #Flash. 22066 * @value: The value to set. 22067 * 22068 * Sets the <link linkend="gdbus-property-org-openbmc-Flash.flasher_instance">"flasher_instance"</link> D-Bus property to @value. 22069 * 22070 * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side. 22071 */ 22072 void 22073 flash_set_flasher_instance (Flash *object, const gchar *value) 22074 { 22075 g_object_set (G_OBJECT (object), "flasher-instance", value, NULL); 22076 } 22077 22078 /** 22079 * flash_get_status: (skip) 22080 * @object: A #Flash. 22081 * 22082 * Gets the value of the <link linkend="gdbus-property-org-openbmc-Flash.status">"status"</link> D-Bus property. 22083 * 22084 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 22085 * 22086 * <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 flash_dup_status() if on another thread.</warning> 22087 * 22088 * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object. 22089 */ 22090 const gchar * 22091 flash_get_status (Flash *object) 22092 { 22093 return FLASH_GET_IFACE (object)->get_status (object); 22094 } 22095 22096 /** 22097 * flash_dup_status: (skip) 22098 * @object: A #Flash. 22099 * 22100 * Gets a copy of the <link linkend="gdbus-property-org-openbmc-Flash.status">"status"</link> D-Bus property. 22101 * 22102 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 22103 * 22104 * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value should be freed with g_free(). 22105 */ 22106 gchar * 22107 flash_dup_status (Flash *object) 22108 { 22109 gchar *value; 22110 g_object_get (G_OBJECT (object), "status", &value, NULL); 22111 return value; 22112 } 22113 22114 /** 22115 * flash_set_status: (skip) 22116 * @object: A #Flash. 22117 * @value: The value to set. 22118 * 22119 * Sets the <link linkend="gdbus-property-org-openbmc-Flash.status">"status"</link> D-Bus property to @value. 22120 * 22121 * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side. 22122 */ 22123 void 22124 flash_set_status (Flash *object, const gchar *value) 22125 { 22126 g_object_set (G_OBJECT (object), "status", value, NULL); 22127 } 22128 22129 /** 22130 * flash_emit_updated: 22131 * @object: A #Flash. 22132 * 22133 * Emits the <link linkend="gdbus-signal-org-openbmc-Flash.Updated">"Updated"</link> D-Bus signal. 22134 */ 22135 void 22136 flash_emit_updated ( 22137 Flash *object) 22138 { 22139 g_signal_emit_by_name (object, "updated"); 22140 } 22141 22142 /** 22143 * flash_emit_download: 22144 * @object: A #Flash. 22145 * @arg_url: Argument to pass with the signal. 22146 * @arg_filename: Argument to pass with the signal. 22147 * 22148 * Emits the <link linkend="gdbus-signal-org-openbmc-Flash.Download">"Download"</link> D-Bus signal. 22149 */ 22150 void 22151 flash_emit_download ( 22152 Flash *object, 22153 const gchar *arg_url, 22154 const gchar *arg_filename) 22155 { 22156 g_signal_emit_by_name (object, "download", arg_url, arg_filename); 22157 } 22158 22159 /** 22160 * flash_call_update: 22161 * @proxy: A #FlashProxy. 22162 * @arg_filename: Argument to pass with the method invocation. 22163 * @cancellable: (allow-none): A #GCancellable or %NULL. 22164 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 22165 * @user_data: User data to pass to @callback. 22166 * 22167 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-Flash.update">update()</link> D-Bus method on @proxy. 22168 * 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. 22169 * You can then call flash_call_update_finish() to get the result of the operation. 22170 * 22171 * See flash_call_update_sync() for the synchronous, blocking version of this method. 22172 */ 22173 void 22174 flash_call_update ( 22175 Flash *proxy, 22176 const gchar *arg_filename, 22177 GCancellable *cancellable, 22178 GAsyncReadyCallback callback, 22179 gpointer user_data) 22180 { 22181 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 22182 "update", 22183 g_variant_new ("(s)", 22184 arg_filename), 22185 G_DBUS_CALL_FLAGS_NONE, 22186 -1, 22187 cancellable, 22188 callback, 22189 user_data); 22190 } 22191 22192 /** 22193 * flash_call_update_finish: 22194 * @proxy: A #FlashProxy. 22195 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to flash_call_update(). 22196 * @error: Return location for error or %NULL. 22197 * 22198 * Finishes an operation started with flash_call_update(). 22199 * 22200 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 22201 */ 22202 gboolean 22203 flash_call_update_finish ( 22204 Flash *proxy, 22205 GAsyncResult *res, 22206 GError **error) 22207 { 22208 GVariant *_ret; 22209 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 22210 if (_ret == NULL) 22211 goto _out; 22212 g_variant_get (_ret, 22213 "()"); 22214 g_variant_unref (_ret); 22215 _out: 22216 return _ret != NULL; 22217 } 22218 22219 /** 22220 * flash_call_update_sync: 22221 * @proxy: A #FlashProxy. 22222 * @arg_filename: Argument to pass with the method invocation. 22223 * @cancellable: (allow-none): A #GCancellable or %NULL. 22224 * @error: Return location for error or %NULL. 22225 * 22226 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-Flash.update">update()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 22227 * 22228 * See flash_call_update() for the asynchronous version of this method. 22229 * 22230 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 22231 */ 22232 gboolean 22233 flash_call_update_sync ( 22234 Flash *proxy, 22235 const gchar *arg_filename, 22236 GCancellable *cancellable, 22237 GError **error) 22238 { 22239 GVariant *_ret; 22240 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 22241 "update", 22242 g_variant_new ("(s)", 22243 arg_filename), 22244 G_DBUS_CALL_FLAGS_NONE, 22245 -1, 22246 cancellable, 22247 error); 22248 if (_ret == NULL) 22249 goto _out; 22250 g_variant_get (_ret, 22251 "()"); 22252 g_variant_unref (_ret); 22253 _out: 22254 return _ret != NULL; 22255 } 22256 22257 /** 22258 * flash_call_error: 22259 * @proxy: A #FlashProxy. 22260 * @arg_message: Argument to pass with the method invocation. 22261 * @cancellable: (allow-none): A #GCancellable or %NULL. 22262 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 22263 * @user_data: User data to pass to @callback. 22264 * 22265 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-Flash.error">error()</link> D-Bus method on @proxy. 22266 * 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. 22267 * You can then call flash_call_error_finish() to get the result of the operation. 22268 * 22269 * See flash_call_error_sync() for the synchronous, blocking version of this method. 22270 */ 22271 void 22272 flash_call_error ( 22273 Flash *proxy, 22274 const gchar *arg_message, 22275 GCancellable *cancellable, 22276 GAsyncReadyCallback callback, 22277 gpointer user_data) 22278 { 22279 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 22280 "error", 22281 g_variant_new ("(s)", 22282 arg_message), 22283 G_DBUS_CALL_FLAGS_NONE, 22284 -1, 22285 cancellable, 22286 callback, 22287 user_data); 22288 } 22289 22290 /** 22291 * flash_call_error_finish: 22292 * @proxy: A #FlashProxy. 22293 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to flash_call_error(). 22294 * @error: Return location for error or %NULL. 22295 * 22296 * Finishes an operation started with flash_call_error(). 22297 * 22298 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 22299 */ 22300 gboolean 22301 flash_call_error_finish ( 22302 Flash *proxy, 22303 GAsyncResult *res, 22304 GError **error) 22305 { 22306 GVariant *_ret; 22307 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 22308 if (_ret == NULL) 22309 goto _out; 22310 g_variant_get (_ret, 22311 "()"); 22312 g_variant_unref (_ret); 22313 _out: 22314 return _ret != NULL; 22315 } 22316 22317 /** 22318 * flash_call_error_sync: 22319 * @proxy: A #FlashProxy. 22320 * @arg_message: Argument to pass with the method invocation. 22321 * @cancellable: (allow-none): A #GCancellable or %NULL. 22322 * @error: Return location for error or %NULL. 22323 * 22324 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-Flash.error">error()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 22325 * 22326 * See flash_call_error() for the asynchronous version of this method. 22327 * 22328 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 22329 */ 22330 gboolean 22331 flash_call_error_sync ( 22332 Flash *proxy, 22333 const gchar *arg_message, 22334 GCancellable *cancellable, 22335 GError **error) 22336 { 22337 GVariant *_ret; 22338 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 22339 "error", 22340 g_variant_new ("(s)", 22341 arg_message), 22342 G_DBUS_CALL_FLAGS_NONE, 22343 -1, 22344 cancellable, 22345 error); 22346 if (_ret == NULL) 22347 goto _out; 22348 g_variant_get (_ret, 22349 "()"); 22350 g_variant_unref (_ret); 22351 _out: 22352 return _ret != NULL; 22353 } 22354 22355 /** 22356 * flash_call_done: 22357 * @proxy: A #FlashProxy. 22358 * @cancellable: (allow-none): A #GCancellable or %NULL. 22359 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 22360 * @user_data: User data to pass to @callback. 22361 * 22362 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-Flash.done">done()</link> D-Bus method on @proxy. 22363 * 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. 22364 * You can then call flash_call_done_finish() to get the result of the operation. 22365 * 22366 * See flash_call_done_sync() for the synchronous, blocking version of this method. 22367 */ 22368 void 22369 flash_call_done ( 22370 Flash *proxy, 22371 GCancellable *cancellable, 22372 GAsyncReadyCallback callback, 22373 gpointer user_data) 22374 { 22375 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 22376 "done", 22377 g_variant_new ("()"), 22378 G_DBUS_CALL_FLAGS_NONE, 22379 -1, 22380 cancellable, 22381 callback, 22382 user_data); 22383 } 22384 22385 /** 22386 * flash_call_done_finish: 22387 * @proxy: A #FlashProxy. 22388 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to flash_call_done(). 22389 * @error: Return location for error or %NULL. 22390 * 22391 * Finishes an operation started with flash_call_done(). 22392 * 22393 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 22394 */ 22395 gboolean 22396 flash_call_done_finish ( 22397 Flash *proxy, 22398 GAsyncResult *res, 22399 GError **error) 22400 { 22401 GVariant *_ret; 22402 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 22403 if (_ret == NULL) 22404 goto _out; 22405 g_variant_get (_ret, 22406 "()"); 22407 g_variant_unref (_ret); 22408 _out: 22409 return _ret != NULL; 22410 } 22411 22412 /** 22413 * flash_call_done_sync: 22414 * @proxy: A #FlashProxy. 22415 * @cancellable: (allow-none): A #GCancellable or %NULL. 22416 * @error: Return location for error or %NULL. 22417 * 22418 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-Flash.done">done()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 22419 * 22420 * See flash_call_done() for the asynchronous version of this method. 22421 * 22422 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 22423 */ 22424 gboolean 22425 flash_call_done_sync ( 22426 Flash *proxy, 22427 GCancellable *cancellable, 22428 GError **error) 22429 { 22430 GVariant *_ret; 22431 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 22432 "done", 22433 g_variant_new ("()"), 22434 G_DBUS_CALL_FLAGS_NONE, 22435 -1, 22436 cancellable, 22437 error); 22438 if (_ret == NULL) 22439 goto _out; 22440 g_variant_get (_ret, 22441 "()"); 22442 g_variant_unref (_ret); 22443 _out: 22444 return _ret != NULL; 22445 } 22446 22447 /** 22448 * flash_call_update_via_tftp: 22449 * @proxy: A #FlashProxy. 22450 * @arg_url: Argument to pass with the method invocation. 22451 * @arg_filename: Argument to pass with the method invocation. 22452 * @cancellable: (allow-none): A #GCancellable or %NULL. 22453 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 22454 * @user_data: User data to pass to @callback. 22455 * 22456 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-Flash.updateViaTftp">updateViaTftp()</link> D-Bus method on @proxy. 22457 * 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. 22458 * You can then call flash_call_update_via_tftp_finish() to get the result of the operation. 22459 * 22460 * See flash_call_update_via_tftp_sync() for the synchronous, blocking version of this method. 22461 */ 22462 void 22463 flash_call_update_via_tftp ( 22464 Flash *proxy, 22465 const gchar *arg_url, 22466 const gchar *arg_filename, 22467 GCancellable *cancellable, 22468 GAsyncReadyCallback callback, 22469 gpointer user_data) 22470 { 22471 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 22472 "updateViaTftp", 22473 g_variant_new ("(ss)", 22474 arg_url, 22475 arg_filename), 22476 G_DBUS_CALL_FLAGS_NONE, 22477 -1, 22478 cancellable, 22479 callback, 22480 user_data); 22481 } 22482 22483 /** 22484 * flash_call_update_via_tftp_finish: 22485 * @proxy: A #FlashProxy. 22486 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to flash_call_update_via_tftp(). 22487 * @error: Return location for error or %NULL. 22488 * 22489 * Finishes an operation started with flash_call_update_via_tftp(). 22490 * 22491 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 22492 */ 22493 gboolean 22494 flash_call_update_via_tftp_finish ( 22495 Flash *proxy, 22496 GAsyncResult *res, 22497 GError **error) 22498 { 22499 GVariant *_ret; 22500 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 22501 if (_ret == NULL) 22502 goto _out; 22503 g_variant_get (_ret, 22504 "()"); 22505 g_variant_unref (_ret); 22506 _out: 22507 return _ret != NULL; 22508 } 22509 22510 /** 22511 * flash_call_update_via_tftp_sync: 22512 * @proxy: A #FlashProxy. 22513 * @arg_url: Argument to pass with the method invocation. 22514 * @arg_filename: Argument to pass with the method invocation. 22515 * @cancellable: (allow-none): A #GCancellable or %NULL. 22516 * @error: Return location for error or %NULL. 22517 * 22518 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-Flash.updateViaTftp">updateViaTftp()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 22519 * 22520 * See flash_call_update_via_tftp() for the asynchronous version of this method. 22521 * 22522 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 22523 */ 22524 gboolean 22525 flash_call_update_via_tftp_sync ( 22526 Flash *proxy, 22527 const gchar *arg_url, 22528 const gchar *arg_filename, 22529 GCancellable *cancellable, 22530 GError **error) 22531 { 22532 GVariant *_ret; 22533 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 22534 "updateViaTftp", 22535 g_variant_new ("(ss)", 22536 arg_url, 22537 arg_filename), 22538 G_DBUS_CALL_FLAGS_NONE, 22539 -1, 22540 cancellable, 22541 error); 22542 if (_ret == NULL) 22543 goto _out; 22544 g_variant_get (_ret, 22545 "()"); 22546 g_variant_unref (_ret); 22547 _out: 22548 return _ret != NULL; 22549 } 22550 22551 /** 22552 * flash_call_init: 22553 * @proxy: A #FlashProxy. 22554 * @cancellable: (allow-none): A #GCancellable or %NULL. 22555 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 22556 * @user_data: User data to pass to @callback. 22557 * 22558 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-Flash.init">init()</link> D-Bus method on @proxy. 22559 * 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. 22560 * You can then call flash_call_init_finish() to get the result of the operation. 22561 * 22562 * See flash_call_init_sync() for the synchronous, blocking version of this method. 22563 */ 22564 void 22565 flash_call_init ( 22566 Flash *proxy, 22567 GCancellable *cancellable, 22568 GAsyncReadyCallback callback, 22569 gpointer user_data) 22570 { 22571 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 22572 "init", 22573 g_variant_new ("()"), 22574 G_DBUS_CALL_FLAGS_NONE, 22575 -1, 22576 cancellable, 22577 callback, 22578 user_data); 22579 } 22580 22581 /** 22582 * flash_call_init_finish: 22583 * @proxy: A #FlashProxy. 22584 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to flash_call_init(). 22585 * @error: Return location for error or %NULL. 22586 * 22587 * Finishes an operation started with flash_call_init(). 22588 * 22589 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 22590 */ 22591 gboolean 22592 flash_call_init_finish ( 22593 Flash *proxy, 22594 GAsyncResult *res, 22595 GError **error) 22596 { 22597 GVariant *_ret; 22598 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 22599 if (_ret == NULL) 22600 goto _out; 22601 g_variant_get (_ret, 22602 "()"); 22603 g_variant_unref (_ret); 22604 _out: 22605 return _ret != NULL; 22606 } 22607 22608 /** 22609 * flash_call_init_sync: 22610 * @proxy: A #FlashProxy. 22611 * @cancellable: (allow-none): A #GCancellable or %NULL. 22612 * @error: Return location for error or %NULL. 22613 * 22614 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-Flash.init">init()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 22615 * 22616 * See flash_call_init() for the asynchronous version of this method. 22617 * 22618 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 22619 */ 22620 gboolean 22621 flash_call_init_sync ( 22622 Flash *proxy, 22623 GCancellable *cancellable, 22624 GError **error) 22625 { 22626 GVariant *_ret; 22627 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 22628 "init", 22629 g_variant_new ("()"), 22630 G_DBUS_CALL_FLAGS_NONE, 22631 -1, 22632 cancellable, 22633 error); 22634 if (_ret == NULL) 22635 goto _out; 22636 g_variant_get (_ret, 22637 "()"); 22638 g_variant_unref (_ret); 22639 _out: 22640 return _ret != NULL; 22641 } 22642 22643 /** 22644 * flash_complete_update: 22645 * @object: A #Flash. 22646 * @invocation: (transfer full): A #GDBusMethodInvocation. 22647 * 22648 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-Flash.update">update()</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. 22649 * 22650 * This method will free @invocation, you cannot use it afterwards. 22651 */ 22652 void 22653 flash_complete_update ( 22654 Flash *object, 22655 GDBusMethodInvocation *invocation) 22656 { 22657 g_dbus_method_invocation_return_value (invocation, 22658 g_variant_new ("()")); 22659 } 22660 22661 /** 22662 * flash_complete_error: 22663 * @object: A #Flash. 22664 * @invocation: (transfer full): A #GDBusMethodInvocation. 22665 * 22666 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-Flash.error">error()</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. 22667 * 22668 * This method will free @invocation, you cannot use it afterwards. 22669 */ 22670 void 22671 flash_complete_error ( 22672 Flash *object, 22673 GDBusMethodInvocation *invocation) 22674 { 22675 g_dbus_method_invocation_return_value (invocation, 22676 g_variant_new ("()")); 22677 } 22678 22679 /** 22680 * flash_complete_done: 22681 * @object: A #Flash. 22682 * @invocation: (transfer full): A #GDBusMethodInvocation. 22683 * 22684 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-Flash.done">done()</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. 22685 * 22686 * This method will free @invocation, you cannot use it afterwards. 22687 */ 22688 void 22689 flash_complete_done ( 22690 Flash *object, 22691 GDBusMethodInvocation *invocation) 22692 { 22693 g_dbus_method_invocation_return_value (invocation, 22694 g_variant_new ("()")); 22695 } 22696 22697 /** 22698 * flash_complete_update_via_tftp: 22699 * @object: A #Flash. 22700 * @invocation: (transfer full): A #GDBusMethodInvocation. 22701 * 22702 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-Flash.updateViaTftp">updateViaTftp()</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. 22703 * 22704 * This method will free @invocation, you cannot use it afterwards. 22705 */ 22706 void 22707 flash_complete_update_via_tftp ( 22708 Flash *object, 22709 GDBusMethodInvocation *invocation) 22710 { 22711 g_dbus_method_invocation_return_value (invocation, 22712 g_variant_new ("()")); 22713 } 22714 22715 /** 22716 * flash_complete_init: 22717 * @object: A #Flash. 22718 * @invocation: (transfer full): A #GDBusMethodInvocation. 22719 * 22720 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-Flash.init">init()</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. 22721 * 22722 * This method will free @invocation, you cannot use it afterwards. 22723 */ 22724 void 22725 flash_complete_init ( 22726 Flash *object, 22727 GDBusMethodInvocation *invocation) 22728 { 22729 g_dbus_method_invocation_return_value (invocation, 22730 g_variant_new ("()")); 22731 } 22732 22733 /* ------------------------------------------------------------------------ */ 22734 22735 /** 22736 * FlashProxy: 22737 * 22738 * The #FlashProxy structure contains only private data and should only be accessed using the provided API. 22739 */ 22740 22741 /** 22742 * FlashProxyClass: 22743 * @parent_class: The parent class. 22744 * 22745 * Class structure for #FlashProxy. 22746 */ 22747 22748 struct _FlashProxyPrivate 22749 { 22750 GData *qdata; 22751 }; 22752 22753 static void flash_proxy_iface_init (FlashIface *iface); 22754 22755 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 22756 G_DEFINE_TYPE_WITH_CODE (FlashProxy, flash_proxy, G_TYPE_DBUS_PROXY, 22757 G_ADD_PRIVATE (FlashProxy) 22758 G_IMPLEMENT_INTERFACE (TYPE_FLASH, flash_proxy_iface_init)); 22759 22760 #else 22761 G_DEFINE_TYPE_WITH_CODE (FlashProxy, flash_proxy, G_TYPE_DBUS_PROXY, 22762 G_IMPLEMENT_INTERFACE (TYPE_FLASH, flash_proxy_iface_init)); 22763 22764 #endif 22765 static void 22766 flash_proxy_finalize (GObject *object) 22767 { 22768 FlashProxy *proxy = FLASH_PROXY (object); 22769 g_datalist_clear (&proxy->priv->qdata); 22770 G_OBJECT_CLASS (flash_proxy_parent_class)->finalize (object); 22771 } 22772 22773 static void 22774 flash_proxy_get_property (GObject *object, 22775 guint prop_id, 22776 GValue *value, 22777 GParamSpec *pspec G_GNUC_UNUSED) 22778 { 22779 const _ExtendedGDBusPropertyInfo *info; 22780 GVariant *variant; 22781 g_assert (prop_id != 0 && prop_id - 1 < 5); 22782 info = _flash_property_info_pointers[prop_id - 1]; 22783 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (object), info->parent_struct.name); 22784 if (info->use_gvariant) 22785 { 22786 g_value_set_variant (value, variant); 22787 } 22788 else 22789 { 22790 if (variant != NULL) 22791 g_dbus_gvariant_to_gvalue (variant, value); 22792 } 22793 if (variant != NULL) 22794 g_variant_unref (variant); 22795 } 22796 22797 static void 22798 flash_proxy_set_property_cb (GDBusProxy *proxy, 22799 GAsyncResult *res, 22800 gpointer user_data) 22801 { 22802 const _ExtendedGDBusPropertyInfo *info = user_data; 22803 GError *error; 22804 GVariant *_ret; 22805 error = NULL; 22806 _ret = g_dbus_proxy_call_finish (proxy, res, &error); 22807 if (!_ret) 22808 { 22809 g_warning ("Error setting property '%s' on interface org.openbmc.Flash: %s (%s, %d)", 22810 info->parent_struct.name, 22811 error->message, g_quark_to_string (error->domain), error->code); 22812 g_error_free (error); 22813 } 22814 else 22815 { 22816 g_variant_unref (_ret); 22817 } 22818 } 22819 22820 static void 22821 flash_proxy_set_property (GObject *object, 22822 guint prop_id, 22823 const GValue *value, 22824 GParamSpec *pspec G_GNUC_UNUSED) 22825 { 22826 const _ExtendedGDBusPropertyInfo *info; 22827 GVariant *variant; 22828 g_assert (prop_id != 0 && prop_id - 1 < 5); 22829 info = _flash_property_info_pointers[prop_id - 1]; 22830 variant = g_dbus_gvalue_to_gvariant (value, G_VARIANT_TYPE (info->parent_struct.signature)); 22831 g_dbus_proxy_call (G_DBUS_PROXY (object), 22832 "org.freedesktop.DBus.Properties.Set", 22833 g_variant_new ("(ssv)", "org.openbmc.Flash", info->parent_struct.name, variant), 22834 G_DBUS_CALL_FLAGS_NONE, 22835 -1, 22836 NULL, (GAsyncReadyCallback) flash_proxy_set_property_cb, (GDBusPropertyInfo *) &info->parent_struct); 22837 g_variant_unref (variant); 22838 } 22839 22840 static void 22841 flash_proxy_g_signal (GDBusProxy *proxy, 22842 const gchar *sender_name G_GNUC_UNUSED, 22843 const gchar *signal_name, 22844 GVariant *parameters) 22845 { 22846 _ExtendedGDBusSignalInfo *info; 22847 GVariantIter iter; 22848 GVariant *child; 22849 GValue *paramv; 22850 guint num_params; 22851 guint n; 22852 guint signal_id; 22853 info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_flash_interface_info.parent_struct, signal_name); 22854 if (info == NULL) 22855 return; 22856 num_params = g_variant_n_children (parameters); 22857 paramv = g_new0 (GValue, num_params + 1); 22858 g_value_init (¶mv[0], TYPE_FLASH); 22859 g_value_set_object (¶mv[0], proxy); 22860 g_variant_iter_init (&iter, parameters); 22861 n = 1; 22862 while ((child = g_variant_iter_next_value (&iter)) != NULL) 22863 { 22864 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1]; 22865 if (arg_info->use_gvariant) 22866 { 22867 g_value_init (¶mv[n], G_TYPE_VARIANT); 22868 g_value_set_variant (¶mv[n], child); 22869 n++; 22870 } 22871 else 22872 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 22873 g_variant_unref (child); 22874 } 22875 signal_id = g_signal_lookup (info->signal_name, TYPE_FLASH); 22876 g_signal_emitv (paramv, signal_id, 0, NULL); 22877 for (n = 0; n < num_params + 1; n++) 22878 g_value_unset (¶mv[n]); 22879 g_free (paramv); 22880 } 22881 22882 static void 22883 flash_proxy_g_properties_changed (GDBusProxy *_proxy, 22884 GVariant *changed_properties, 22885 const gchar *const *invalidated_properties) 22886 { 22887 FlashProxy *proxy = FLASH_PROXY (_proxy); 22888 guint n; 22889 const gchar *key; 22890 GVariantIter *iter; 22891 _ExtendedGDBusPropertyInfo *info; 22892 g_variant_get (changed_properties, "a{sv}", &iter); 22893 while (g_variant_iter_next (iter, "{&sv}", &key, NULL)) 22894 { 22895 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_flash_interface_info.parent_struct, key); 22896 g_datalist_remove_data (&proxy->priv->qdata, key); 22897 if (info != NULL) 22898 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 22899 } 22900 g_variant_iter_free (iter); 22901 for (n = 0; invalidated_properties[n] != NULL; n++) 22902 { 22903 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_flash_interface_info.parent_struct, invalidated_properties[n]); 22904 g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]); 22905 if (info != NULL) 22906 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 22907 } 22908 } 22909 22910 static const gchar * 22911 flash_proxy_get_filename (Flash *object) 22912 { 22913 FlashProxy *proxy = FLASH_PROXY (object); 22914 GVariant *variant; 22915 const gchar *value = NULL; 22916 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "filename"); 22917 if (variant != NULL) 22918 { 22919 value = g_variant_get_string (variant, NULL); 22920 g_variant_unref (variant); 22921 } 22922 return value; 22923 } 22924 22925 static const gchar * 22926 flash_proxy_get_flasher_path (Flash *object) 22927 { 22928 FlashProxy *proxy = FLASH_PROXY (object); 22929 GVariant *variant; 22930 const gchar *value = NULL; 22931 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "flasher_path"); 22932 if (variant != NULL) 22933 { 22934 value = g_variant_get_string (variant, NULL); 22935 g_variant_unref (variant); 22936 } 22937 return value; 22938 } 22939 22940 static const gchar * 22941 flash_proxy_get_flasher_name (Flash *object) 22942 { 22943 FlashProxy *proxy = FLASH_PROXY (object); 22944 GVariant *variant; 22945 const gchar *value = NULL; 22946 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "flasher_name"); 22947 if (variant != NULL) 22948 { 22949 value = g_variant_get_string (variant, NULL); 22950 g_variant_unref (variant); 22951 } 22952 return value; 22953 } 22954 22955 static const gchar * 22956 flash_proxy_get_flasher_instance (Flash *object) 22957 { 22958 FlashProxy *proxy = FLASH_PROXY (object); 22959 GVariant *variant; 22960 const gchar *value = NULL; 22961 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "flasher_instance"); 22962 if (variant != NULL) 22963 { 22964 value = g_variant_get_string (variant, NULL); 22965 g_variant_unref (variant); 22966 } 22967 return value; 22968 } 22969 22970 static const gchar * 22971 flash_proxy_get_status (Flash *object) 22972 { 22973 FlashProxy *proxy = FLASH_PROXY (object); 22974 GVariant *variant; 22975 const gchar *value = NULL; 22976 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "status"); 22977 if (variant != NULL) 22978 { 22979 value = g_variant_get_string (variant, NULL); 22980 g_variant_unref (variant); 22981 } 22982 return value; 22983 } 22984 22985 static void 22986 flash_proxy_init (FlashProxy *proxy) 22987 { 22988 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 22989 proxy->priv = flash_proxy_get_instance_private (proxy); 22990 #else 22991 proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, TYPE_FLASH_PROXY, FlashProxyPrivate); 22992 #endif 22993 22994 g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), flash_interface_info ()); 22995 } 22996 22997 static void 22998 flash_proxy_class_init (FlashProxyClass *klass) 22999 { 23000 GObjectClass *gobject_class; 23001 GDBusProxyClass *proxy_class; 23002 23003 gobject_class = G_OBJECT_CLASS (klass); 23004 gobject_class->finalize = flash_proxy_finalize; 23005 gobject_class->get_property = flash_proxy_get_property; 23006 gobject_class->set_property = flash_proxy_set_property; 23007 23008 proxy_class = G_DBUS_PROXY_CLASS (klass); 23009 proxy_class->g_signal = flash_proxy_g_signal; 23010 proxy_class->g_properties_changed = flash_proxy_g_properties_changed; 23011 23012 flash_override_properties (gobject_class, 1); 23013 23014 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 23015 g_type_class_add_private (klass, sizeof (FlashProxyPrivate)); 23016 #endif 23017 } 23018 23019 static void 23020 flash_proxy_iface_init (FlashIface *iface) 23021 { 23022 iface->get_filename = flash_proxy_get_filename; 23023 iface->get_flasher_path = flash_proxy_get_flasher_path; 23024 iface->get_flasher_name = flash_proxy_get_flasher_name; 23025 iface->get_flasher_instance = flash_proxy_get_flasher_instance; 23026 iface->get_status = flash_proxy_get_status; 23027 } 23028 23029 /** 23030 * flash_proxy_new: 23031 * @connection: A #GDBusConnection. 23032 * @flags: Flags from the #GDBusProxyFlags enumeration. 23033 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 23034 * @object_path: An object path. 23035 * @cancellable: (allow-none): A #GCancellable or %NULL. 23036 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 23037 * @user_data: User data to pass to @callback. 23038 * 23039 * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Flash.top_of_page">org.openbmc.Flash</link>. See g_dbus_proxy_new() for more details. 23040 * 23041 * 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. 23042 * You can then call flash_proxy_new_finish() to get the result of the operation. 23043 * 23044 * See flash_proxy_new_sync() for the synchronous, blocking version of this constructor. 23045 */ 23046 void 23047 flash_proxy_new ( 23048 GDBusConnection *connection, 23049 GDBusProxyFlags flags, 23050 const gchar *name, 23051 const gchar *object_path, 23052 GCancellable *cancellable, 23053 GAsyncReadyCallback callback, 23054 gpointer user_data) 23055 { 23056 g_async_initable_new_async (TYPE_FLASH_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.Flash", NULL); 23057 } 23058 23059 /** 23060 * flash_proxy_new_finish: 23061 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to flash_proxy_new(). 23062 * @error: Return location for error or %NULL 23063 * 23064 * Finishes an operation started with flash_proxy_new(). 23065 * 23066 * Returns: (transfer full) (type FlashProxy): The constructed proxy object or %NULL if @error is set. 23067 */ 23068 Flash * 23069 flash_proxy_new_finish ( 23070 GAsyncResult *res, 23071 GError **error) 23072 { 23073 GObject *ret; 23074 GObject *source_object; 23075 source_object = g_async_result_get_source_object (res); 23076 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 23077 g_object_unref (source_object); 23078 if (ret != NULL) 23079 return FLASH (ret); 23080 else 23081 return NULL; 23082 } 23083 23084 /** 23085 * flash_proxy_new_sync: 23086 * @connection: A #GDBusConnection. 23087 * @flags: Flags from the #GDBusProxyFlags enumeration. 23088 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 23089 * @object_path: An object path. 23090 * @cancellable: (allow-none): A #GCancellable or %NULL. 23091 * @error: Return location for error or %NULL 23092 * 23093 * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Flash.top_of_page">org.openbmc.Flash</link>. See g_dbus_proxy_new_sync() for more details. 23094 * 23095 * The calling thread is blocked until a reply is received. 23096 * 23097 * See flash_proxy_new() for the asynchronous version of this constructor. 23098 * 23099 * Returns: (transfer full) (type FlashProxy): The constructed proxy object or %NULL if @error is set. 23100 */ 23101 Flash * 23102 flash_proxy_new_sync ( 23103 GDBusConnection *connection, 23104 GDBusProxyFlags flags, 23105 const gchar *name, 23106 const gchar *object_path, 23107 GCancellable *cancellable, 23108 GError **error) 23109 { 23110 GInitable *ret; 23111 ret = g_initable_new (TYPE_FLASH_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.Flash", NULL); 23112 if (ret != NULL) 23113 return FLASH (ret); 23114 else 23115 return NULL; 23116 } 23117 23118 23119 /** 23120 * flash_proxy_new_for_bus: 23121 * @bus_type: A #GBusType. 23122 * @flags: Flags from the #GDBusProxyFlags enumeration. 23123 * @name: A bus name (well-known or unique). 23124 * @object_path: An object path. 23125 * @cancellable: (allow-none): A #GCancellable or %NULL. 23126 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 23127 * @user_data: User data to pass to @callback. 23128 * 23129 * Like flash_proxy_new() but takes a #GBusType instead of a #GDBusConnection. 23130 * 23131 * 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. 23132 * You can then call flash_proxy_new_for_bus_finish() to get the result of the operation. 23133 * 23134 * See flash_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor. 23135 */ 23136 void 23137 flash_proxy_new_for_bus ( 23138 GBusType bus_type, 23139 GDBusProxyFlags flags, 23140 const gchar *name, 23141 const gchar *object_path, 23142 GCancellable *cancellable, 23143 GAsyncReadyCallback callback, 23144 gpointer user_data) 23145 { 23146 g_async_initable_new_async (TYPE_FLASH_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.Flash", NULL); 23147 } 23148 23149 /** 23150 * flash_proxy_new_for_bus_finish: 23151 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to flash_proxy_new_for_bus(). 23152 * @error: Return location for error or %NULL 23153 * 23154 * Finishes an operation started with flash_proxy_new_for_bus(). 23155 * 23156 * Returns: (transfer full) (type FlashProxy): The constructed proxy object or %NULL if @error is set. 23157 */ 23158 Flash * 23159 flash_proxy_new_for_bus_finish ( 23160 GAsyncResult *res, 23161 GError **error) 23162 { 23163 GObject *ret; 23164 GObject *source_object; 23165 source_object = g_async_result_get_source_object (res); 23166 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 23167 g_object_unref (source_object); 23168 if (ret != NULL) 23169 return FLASH (ret); 23170 else 23171 return NULL; 23172 } 23173 23174 /** 23175 * flash_proxy_new_for_bus_sync: 23176 * @bus_type: A #GBusType. 23177 * @flags: Flags from the #GDBusProxyFlags enumeration. 23178 * @name: A bus name (well-known or unique). 23179 * @object_path: An object path. 23180 * @cancellable: (allow-none): A #GCancellable or %NULL. 23181 * @error: Return location for error or %NULL 23182 * 23183 * Like flash_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection. 23184 * 23185 * The calling thread is blocked until a reply is received. 23186 * 23187 * See flash_proxy_new_for_bus() for the asynchronous version of this constructor. 23188 * 23189 * Returns: (transfer full) (type FlashProxy): The constructed proxy object or %NULL if @error is set. 23190 */ 23191 Flash * 23192 flash_proxy_new_for_bus_sync ( 23193 GBusType bus_type, 23194 GDBusProxyFlags flags, 23195 const gchar *name, 23196 const gchar *object_path, 23197 GCancellable *cancellable, 23198 GError **error) 23199 { 23200 GInitable *ret; 23201 ret = g_initable_new (TYPE_FLASH_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.Flash", NULL); 23202 if (ret != NULL) 23203 return FLASH (ret); 23204 else 23205 return NULL; 23206 } 23207 23208 23209 /* ------------------------------------------------------------------------ */ 23210 23211 /** 23212 * FlashSkeleton: 23213 * 23214 * The #FlashSkeleton structure contains only private data and should only be accessed using the provided API. 23215 */ 23216 23217 /** 23218 * FlashSkeletonClass: 23219 * @parent_class: The parent class. 23220 * 23221 * Class structure for #FlashSkeleton. 23222 */ 23223 23224 struct _FlashSkeletonPrivate 23225 { 23226 GValue *properties; 23227 GList *changed_properties; 23228 GSource *changed_properties_idle_source; 23229 GMainContext *context; 23230 GMutex lock; 23231 }; 23232 23233 static void 23234 _flash_skeleton_handle_method_call ( 23235 GDBusConnection *connection G_GNUC_UNUSED, 23236 const gchar *sender G_GNUC_UNUSED, 23237 const gchar *object_path G_GNUC_UNUSED, 23238 const gchar *interface_name, 23239 const gchar *method_name, 23240 GVariant *parameters, 23241 GDBusMethodInvocation *invocation, 23242 gpointer user_data) 23243 { 23244 FlashSkeleton *skeleton = FLASH_SKELETON (user_data); 23245 _ExtendedGDBusMethodInfo *info; 23246 GVariantIter iter; 23247 GVariant *child; 23248 GValue *paramv; 23249 guint num_params; 23250 guint num_extra; 23251 guint n; 23252 guint signal_id; 23253 GValue return_value = G_VALUE_INIT; 23254 info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation); 23255 g_assert (info != NULL); 23256 num_params = g_variant_n_children (parameters); 23257 num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra); 23258 n = 0; 23259 g_value_init (¶mv[n], TYPE_FLASH); 23260 g_value_set_object (¶mv[n++], skeleton); 23261 g_value_init (¶mv[n], G_TYPE_DBUS_METHOD_INVOCATION); 23262 g_value_set_object (¶mv[n++], invocation); 23263 if (info->pass_fdlist) 23264 { 23265 #ifdef G_OS_UNIX 23266 g_value_init (¶mv[n], G_TYPE_UNIX_FD_LIST); 23267 g_value_set_object (¶mv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation))); 23268 #else 23269 g_assert_not_reached (); 23270 #endif 23271 } 23272 g_variant_iter_init (&iter, parameters); 23273 while ((child = g_variant_iter_next_value (&iter)) != NULL) 23274 { 23275 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra]; 23276 if (arg_info->use_gvariant) 23277 { 23278 g_value_init (¶mv[n], G_TYPE_VARIANT); 23279 g_value_set_variant (¶mv[n], child); 23280 n++; 23281 } 23282 else 23283 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 23284 g_variant_unref (child); 23285 } 23286 signal_id = g_signal_lookup (info->signal_name, TYPE_FLASH); 23287 g_value_init (&return_value, G_TYPE_BOOLEAN); 23288 g_signal_emitv (paramv, signal_id, 0, &return_value); 23289 if (!g_value_get_boolean (&return_value)) 23290 g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name); 23291 g_value_unset (&return_value); 23292 for (n = 0; n < num_params + num_extra; n++) 23293 g_value_unset (¶mv[n]); 23294 g_free (paramv); 23295 } 23296 23297 static GVariant * 23298 _flash_skeleton_handle_get_property ( 23299 GDBusConnection *connection G_GNUC_UNUSED, 23300 const gchar *sender G_GNUC_UNUSED, 23301 const gchar *object_path G_GNUC_UNUSED, 23302 const gchar *interface_name G_GNUC_UNUSED, 23303 const gchar *property_name, 23304 GError **error, 23305 gpointer user_data) 23306 { 23307 FlashSkeleton *skeleton = FLASH_SKELETON (user_data); 23308 GValue value = G_VALUE_INIT; 23309 GParamSpec *pspec; 23310 _ExtendedGDBusPropertyInfo *info; 23311 GVariant *ret; 23312 ret = NULL; 23313 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_flash_interface_info.parent_struct, property_name); 23314 g_assert (info != NULL); 23315 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 23316 if (pspec == NULL) 23317 { 23318 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 23319 } 23320 else 23321 { 23322 g_value_init (&value, pspec->value_type); 23323 g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value); 23324 ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature)); 23325 g_value_unset (&value); 23326 } 23327 return ret; 23328 } 23329 23330 static gboolean 23331 _flash_skeleton_handle_set_property ( 23332 GDBusConnection *connection G_GNUC_UNUSED, 23333 const gchar *sender G_GNUC_UNUSED, 23334 const gchar *object_path G_GNUC_UNUSED, 23335 const gchar *interface_name G_GNUC_UNUSED, 23336 const gchar *property_name, 23337 GVariant *variant, 23338 GError **error, 23339 gpointer user_data) 23340 { 23341 FlashSkeleton *skeleton = FLASH_SKELETON (user_data); 23342 GValue value = G_VALUE_INIT; 23343 GParamSpec *pspec; 23344 _ExtendedGDBusPropertyInfo *info; 23345 gboolean ret; 23346 ret = FALSE; 23347 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_flash_interface_info.parent_struct, property_name); 23348 g_assert (info != NULL); 23349 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 23350 if (pspec == NULL) 23351 { 23352 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 23353 } 23354 else 23355 { 23356 if (info->use_gvariant) 23357 g_value_set_variant (&value, variant); 23358 else 23359 g_dbus_gvariant_to_gvalue (variant, &value); 23360 g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value); 23361 g_value_unset (&value); 23362 ret = TRUE; 23363 } 23364 return ret; 23365 } 23366 23367 static const GDBusInterfaceVTable _flash_skeleton_vtable = 23368 { 23369 _flash_skeleton_handle_method_call, 23370 _flash_skeleton_handle_get_property, 23371 _flash_skeleton_handle_set_property, 23372 {NULL} 23373 }; 23374 23375 static GDBusInterfaceInfo * 23376 flash_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 23377 { 23378 return flash_interface_info (); 23379 } 23380 23381 static GDBusInterfaceVTable * 23382 flash_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 23383 { 23384 return (GDBusInterfaceVTable *) &_flash_skeleton_vtable; 23385 } 23386 23387 static GVariant * 23388 flash_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton) 23389 { 23390 FlashSkeleton *skeleton = FLASH_SKELETON (_skeleton); 23391 23392 GVariantBuilder builder; 23393 guint n; 23394 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 23395 if (_flash_interface_info.parent_struct.properties == NULL) 23396 goto out; 23397 for (n = 0; _flash_interface_info.parent_struct.properties[n] != NULL; n++) 23398 { 23399 GDBusPropertyInfo *info = _flash_interface_info.parent_struct.properties[n]; 23400 if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE) 23401 { 23402 GVariant *value; 23403 value = _flash_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.Flash", info->name, NULL, skeleton); 23404 if (value != NULL) 23405 { 23406 g_variant_take_ref (value); 23407 g_variant_builder_add (&builder, "{sv}", info->name, value); 23408 g_variant_unref (value); 23409 } 23410 } 23411 } 23412 out: 23413 return g_variant_builder_end (&builder); 23414 } 23415 23416 static gboolean _flash_emit_changed (gpointer user_data); 23417 23418 static void 23419 flash_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton) 23420 { 23421 FlashSkeleton *skeleton = FLASH_SKELETON (_skeleton); 23422 gboolean emit_changed = FALSE; 23423 23424 g_mutex_lock (&skeleton->priv->lock); 23425 if (skeleton->priv->changed_properties_idle_source != NULL) 23426 { 23427 g_source_destroy (skeleton->priv->changed_properties_idle_source); 23428 skeleton->priv->changed_properties_idle_source = NULL; 23429 emit_changed = TRUE; 23430 } 23431 g_mutex_unlock (&skeleton->priv->lock); 23432 23433 if (emit_changed) 23434 _flash_emit_changed (skeleton); 23435 } 23436 23437 static void 23438 _flash_on_signal_updated ( 23439 Flash *object) 23440 { 23441 FlashSkeleton *skeleton = FLASH_SKELETON (object); 23442 23443 GList *connections, *l; 23444 GVariant *signal_variant; 23445 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 23446 23447 signal_variant = g_variant_ref_sink (g_variant_new ("()")); 23448 for (l = connections; l != NULL; l = l->next) 23449 { 23450 GDBusConnection *connection = l->data; 23451 g_dbus_connection_emit_signal (connection, 23452 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.Flash", "Updated", 23453 signal_variant, NULL); 23454 } 23455 g_variant_unref (signal_variant); 23456 g_list_free_full (connections, g_object_unref); 23457 } 23458 23459 static void 23460 _flash_on_signal_download ( 23461 Flash *object, 23462 const gchar *arg_url, 23463 const gchar *arg_filename) 23464 { 23465 FlashSkeleton *skeleton = FLASH_SKELETON (object); 23466 23467 GList *connections, *l; 23468 GVariant *signal_variant; 23469 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 23470 23471 signal_variant = g_variant_ref_sink (g_variant_new ("(ss)", 23472 arg_url, 23473 arg_filename)); 23474 for (l = connections; l != NULL; l = l->next) 23475 { 23476 GDBusConnection *connection = l->data; 23477 g_dbus_connection_emit_signal (connection, 23478 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.Flash", "Download", 23479 signal_variant, NULL); 23480 } 23481 g_variant_unref (signal_variant); 23482 g_list_free_full (connections, g_object_unref); 23483 } 23484 23485 static void flash_skeleton_iface_init (FlashIface *iface); 23486 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 23487 G_DEFINE_TYPE_WITH_CODE (FlashSkeleton, flash_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 23488 G_ADD_PRIVATE (FlashSkeleton) 23489 G_IMPLEMENT_INTERFACE (TYPE_FLASH, flash_skeleton_iface_init)); 23490 23491 #else 23492 G_DEFINE_TYPE_WITH_CODE (FlashSkeleton, flash_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 23493 G_IMPLEMENT_INTERFACE (TYPE_FLASH, flash_skeleton_iface_init)); 23494 23495 #endif 23496 static void 23497 flash_skeleton_finalize (GObject *object) 23498 { 23499 FlashSkeleton *skeleton = FLASH_SKELETON (object); 23500 guint n; 23501 for (n = 0; n < 5; n++) 23502 g_value_unset (&skeleton->priv->properties[n]); 23503 g_free (skeleton->priv->properties); 23504 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 23505 if (skeleton->priv->changed_properties_idle_source != NULL) 23506 g_source_destroy (skeleton->priv->changed_properties_idle_source); 23507 g_main_context_unref (skeleton->priv->context); 23508 g_mutex_clear (&skeleton->priv->lock); 23509 G_OBJECT_CLASS (flash_skeleton_parent_class)->finalize (object); 23510 } 23511 23512 static void 23513 flash_skeleton_get_property (GObject *object, 23514 guint prop_id, 23515 GValue *value, 23516 GParamSpec *pspec G_GNUC_UNUSED) 23517 { 23518 FlashSkeleton *skeleton = FLASH_SKELETON (object); 23519 g_assert (prop_id != 0 && prop_id - 1 < 5); 23520 g_mutex_lock (&skeleton->priv->lock); 23521 g_value_copy (&skeleton->priv->properties[prop_id - 1], value); 23522 g_mutex_unlock (&skeleton->priv->lock); 23523 } 23524 23525 static gboolean 23526 _flash_emit_changed (gpointer user_data) 23527 { 23528 FlashSkeleton *skeleton = FLASH_SKELETON (user_data); 23529 GList *l; 23530 GVariantBuilder builder; 23531 GVariantBuilder invalidated_builder; 23532 guint num_changes; 23533 23534 g_mutex_lock (&skeleton->priv->lock); 23535 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 23536 g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as")); 23537 for (l = skeleton->priv->changed_properties, num_changes = 0; l != NULL; l = l->next) 23538 { 23539 ChangedProperty *cp = l->data; 23540 GVariant *variant; 23541 const GValue *cur_value; 23542 23543 cur_value = &skeleton->priv->properties[cp->prop_id - 1]; 23544 if (!_g_value_equal (cur_value, &cp->orig_value)) 23545 { 23546 variant = g_dbus_gvalue_to_gvariant (cur_value, G_VARIANT_TYPE (cp->info->parent_struct.signature)); 23547 g_variant_builder_add (&builder, "{sv}", cp->info->parent_struct.name, variant); 23548 g_variant_unref (variant); 23549 num_changes++; 23550 } 23551 } 23552 if (num_changes > 0) 23553 { 23554 GList *connections, *ll; 23555 GVariant *signal_variant; 23556 signal_variant = g_variant_ref_sink (g_variant_new ("(sa{sv}as)", "org.openbmc.Flash", 23557 &builder, &invalidated_builder)); 23558 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 23559 for (ll = connections; ll != NULL; ll = ll->next) 23560 { 23561 GDBusConnection *connection = ll->data; 23562 23563 g_dbus_connection_emit_signal (connection, 23564 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), 23565 "org.freedesktop.DBus.Properties", 23566 "PropertiesChanged", 23567 signal_variant, 23568 NULL); 23569 } 23570 g_variant_unref (signal_variant); 23571 g_list_free_full (connections, g_object_unref); 23572 } 23573 else 23574 { 23575 g_variant_builder_clear (&builder); 23576 g_variant_builder_clear (&invalidated_builder); 23577 } 23578 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 23579 skeleton->priv->changed_properties = NULL; 23580 skeleton->priv->changed_properties_idle_source = NULL; 23581 g_mutex_unlock (&skeleton->priv->lock); 23582 return FALSE; 23583 } 23584 23585 static void 23586 _flash_schedule_emit_changed (FlashSkeleton *skeleton, const _ExtendedGDBusPropertyInfo *info, guint prop_id, const GValue *orig_value) 23587 { 23588 ChangedProperty *cp; 23589 GList *l; 23590 cp = NULL; 23591 for (l = skeleton->priv->changed_properties; l != NULL; l = l->next) 23592 { 23593 ChangedProperty *i_cp = l->data; 23594 if (i_cp->info == info) 23595 { 23596 cp = i_cp; 23597 break; 23598 } 23599 } 23600 if (cp == NULL) 23601 { 23602 cp = g_new0 (ChangedProperty, 1); 23603 cp->prop_id = prop_id; 23604 cp->info = info; 23605 skeleton->priv->changed_properties = g_list_prepend (skeleton->priv->changed_properties, cp); 23606 g_value_init (&cp->orig_value, G_VALUE_TYPE (orig_value)); 23607 g_value_copy (orig_value, &cp->orig_value); 23608 } 23609 } 23610 23611 static void 23612 flash_skeleton_notify (GObject *object, 23613 GParamSpec *pspec G_GNUC_UNUSED) 23614 { 23615 FlashSkeleton *skeleton = FLASH_SKELETON (object); 23616 g_mutex_lock (&skeleton->priv->lock); 23617 if (skeleton->priv->changed_properties != NULL && 23618 skeleton->priv->changed_properties_idle_source == NULL) 23619 { 23620 skeleton->priv->changed_properties_idle_source = g_idle_source_new (); 23621 g_source_set_priority (skeleton->priv->changed_properties_idle_source, G_PRIORITY_DEFAULT); 23622 g_source_set_callback (skeleton->priv->changed_properties_idle_source, _flash_emit_changed, g_object_ref (skeleton), (GDestroyNotify) g_object_unref); 23623 g_source_set_name (skeleton->priv->changed_properties_idle_source, "[generated] _flash_emit_changed"); 23624 g_source_attach (skeleton->priv->changed_properties_idle_source, skeleton->priv->context); 23625 g_source_unref (skeleton->priv->changed_properties_idle_source); 23626 } 23627 g_mutex_unlock (&skeleton->priv->lock); 23628 } 23629 23630 static void 23631 flash_skeleton_set_property (GObject *object, 23632 guint prop_id, 23633 const GValue *value, 23634 GParamSpec *pspec) 23635 { 23636 FlashSkeleton *skeleton = FLASH_SKELETON (object); 23637 g_assert (prop_id != 0 && prop_id - 1 < 5); 23638 g_mutex_lock (&skeleton->priv->lock); 23639 g_object_freeze_notify (object); 23640 if (!_g_value_equal (value, &skeleton->priv->properties[prop_id - 1])) 23641 { 23642 if (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)) != NULL) 23643 _flash_schedule_emit_changed (skeleton, _flash_property_info_pointers[prop_id - 1], prop_id, &skeleton->priv->properties[prop_id - 1]); 23644 g_value_copy (value, &skeleton->priv->properties[prop_id - 1]); 23645 g_object_notify_by_pspec (object, pspec); 23646 } 23647 g_mutex_unlock (&skeleton->priv->lock); 23648 g_object_thaw_notify (object); 23649 } 23650 23651 static void 23652 flash_skeleton_init (FlashSkeleton *skeleton) 23653 { 23654 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 23655 skeleton->priv = flash_skeleton_get_instance_private (skeleton); 23656 #else 23657 skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, TYPE_FLASH_SKELETON, FlashSkeletonPrivate); 23658 #endif 23659 23660 g_mutex_init (&skeleton->priv->lock); 23661 skeleton->priv->context = g_main_context_ref_thread_default (); 23662 skeleton->priv->properties = g_new0 (GValue, 5); 23663 g_value_init (&skeleton->priv->properties[0], G_TYPE_STRING); 23664 g_value_init (&skeleton->priv->properties[1], G_TYPE_STRING); 23665 g_value_init (&skeleton->priv->properties[2], G_TYPE_STRING); 23666 g_value_init (&skeleton->priv->properties[3], G_TYPE_STRING); 23667 g_value_init (&skeleton->priv->properties[4], G_TYPE_STRING); 23668 } 23669 23670 static const gchar * 23671 flash_skeleton_get_filename (Flash *object) 23672 { 23673 FlashSkeleton *skeleton = FLASH_SKELETON (object); 23674 const gchar *value; 23675 g_mutex_lock (&skeleton->priv->lock); 23676 value = g_value_get_string (&(skeleton->priv->properties[0])); 23677 g_mutex_unlock (&skeleton->priv->lock); 23678 return value; 23679 } 23680 23681 static const gchar * 23682 flash_skeleton_get_flasher_path (Flash *object) 23683 { 23684 FlashSkeleton *skeleton = FLASH_SKELETON (object); 23685 const gchar *value; 23686 g_mutex_lock (&skeleton->priv->lock); 23687 value = g_value_get_string (&(skeleton->priv->properties[1])); 23688 g_mutex_unlock (&skeleton->priv->lock); 23689 return value; 23690 } 23691 23692 static const gchar * 23693 flash_skeleton_get_flasher_name (Flash *object) 23694 { 23695 FlashSkeleton *skeleton = FLASH_SKELETON (object); 23696 const gchar *value; 23697 g_mutex_lock (&skeleton->priv->lock); 23698 value = g_value_get_string (&(skeleton->priv->properties[2])); 23699 g_mutex_unlock (&skeleton->priv->lock); 23700 return value; 23701 } 23702 23703 static const gchar * 23704 flash_skeleton_get_flasher_instance (Flash *object) 23705 { 23706 FlashSkeleton *skeleton = FLASH_SKELETON (object); 23707 const gchar *value; 23708 g_mutex_lock (&skeleton->priv->lock); 23709 value = g_value_get_string (&(skeleton->priv->properties[3])); 23710 g_mutex_unlock (&skeleton->priv->lock); 23711 return value; 23712 } 23713 23714 static const gchar * 23715 flash_skeleton_get_status (Flash *object) 23716 { 23717 FlashSkeleton *skeleton = FLASH_SKELETON (object); 23718 const gchar *value; 23719 g_mutex_lock (&skeleton->priv->lock); 23720 value = g_value_get_string (&(skeleton->priv->properties[4])); 23721 g_mutex_unlock (&skeleton->priv->lock); 23722 return value; 23723 } 23724 23725 static void 23726 flash_skeleton_class_init (FlashSkeletonClass *klass) 23727 { 23728 GObjectClass *gobject_class; 23729 GDBusInterfaceSkeletonClass *skeleton_class; 23730 23731 gobject_class = G_OBJECT_CLASS (klass); 23732 gobject_class->finalize = flash_skeleton_finalize; 23733 gobject_class->get_property = flash_skeleton_get_property; 23734 gobject_class->set_property = flash_skeleton_set_property; 23735 gobject_class->notify = flash_skeleton_notify; 23736 23737 23738 flash_override_properties (gobject_class, 1); 23739 23740 skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass); 23741 skeleton_class->get_info = flash_skeleton_dbus_interface_get_info; 23742 skeleton_class->get_properties = flash_skeleton_dbus_interface_get_properties; 23743 skeleton_class->flush = flash_skeleton_dbus_interface_flush; 23744 skeleton_class->get_vtable = flash_skeleton_dbus_interface_get_vtable; 23745 23746 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 23747 g_type_class_add_private (klass, sizeof (FlashSkeletonPrivate)); 23748 #endif 23749 } 23750 23751 static void 23752 flash_skeleton_iface_init (FlashIface *iface) 23753 { 23754 iface->updated = _flash_on_signal_updated; 23755 iface->download = _flash_on_signal_download; 23756 iface->get_filename = flash_skeleton_get_filename; 23757 iface->get_flasher_path = flash_skeleton_get_flasher_path; 23758 iface->get_flasher_name = flash_skeleton_get_flasher_name; 23759 iface->get_flasher_instance = flash_skeleton_get_flasher_instance; 23760 iface->get_status = flash_skeleton_get_status; 23761 } 23762 23763 /** 23764 * flash_skeleton_new: 23765 * 23766 * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Flash.top_of_page">org.openbmc.Flash</link>. 23767 * 23768 * Returns: (transfer full) (type FlashSkeleton): The skeleton object. 23769 */ 23770 Flash * 23771 flash_skeleton_new (void) 23772 { 23773 return FLASH (g_object_new (TYPE_FLASH_SKELETON, NULL)); 23774 } 23775 23776 /* ------------------------------------------------------------------------ 23777 * Code for interface org.openbmc.FlashControl 23778 * ------------------------------------------------------------------------ 23779 */ 23780 23781 /** 23782 * SECTION:FlashControl 23783 * @title: FlashControl 23784 * @short_description: Generated C code for the org.openbmc.FlashControl D-Bus interface 23785 * 23786 * This section contains code for working with the <link linkend="gdbus-interface-org-openbmc-FlashControl.top_of_page">org.openbmc.FlashControl</link> D-Bus interface in C. 23787 */ 23788 23789 /* ---- Introspection data for org.openbmc.FlashControl ---- */ 23790 23791 static const _ExtendedGDBusArgInfo _flash_control_method_info_flash_IN_ARG_type = 23792 { 23793 { 23794 -1, 23795 (gchar *) "type", 23796 (gchar *) "s", 23797 NULL 23798 }, 23799 FALSE 23800 }; 23801 23802 static const _ExtendedGDBusArgInfo _flash_control_method_info_flash_IN_ARG_filename = 23803 { 23804 { 23805 -1, 23806 (gchar *) "filename", 23807 (gchar *) "s", 23808 NULL 23809 }, 23810 FALSE 23811 }; 23812 23813 static const _ExtendedGDBusArgInfo * const _flash_control_method_info_flash_IN_ARG_pointers[] = 23814 { 23815 &_flash_control_method_info_flash_IN_ARG_type, 23816 &_flash_control_method_info_flash_IN_ARG_filename, 23817 NULL 23818 }; 23819 23820 static const _ExtendedGDBusMethodInfo _flash_control_method_info_flash = 23821 { 23822 { 23823 -1, 23824 (gchar *) "flash", 23825 (GDBusArgInfo **) &_flash_control_method_info_flash_IN_ARG_pointers, 23826 NULL, 23827 NULL 23828 }, 23829 "handle-flash", 23830 FALSE 23831 }; 23832 23833 static const _ExtendedGDBusMethodInfo * const _flash_control_method_info_pointers[] = 23834 { 23835 &_flash_control_method_info_flash, 23836 NULL 23837 }; 23838 23839 static const _ExtendedGDBusArgInfo _flash_control_signal_info_done_ARG_filename = 23840 { 23841 { 23842 -1, 23843 (gchar *) "filename", 23844 (gchar *) "s", 23845 NULL 23846 }, 23847 FALSE 23848 }; 23849 23850 static const _ExtendedGDBusArgInfo * const _flash_control_signal_info_done_ARG_pointers[] = 23851 { 23852 &_flash_control_signal_info_done_ARG_filename, 23853 NULL 23854 }; 23855 23856 static const _ExtendedGDBusSignalInfo _flash_control_signal_info_done = 23857 { 23858 { 23859 -1, 23860 (gchar *) "Done", 23861 (GDBusArgInfo **) &_flash_control_signal_info_done_ARG_pointers, 23862 NULL 23863 }, 23864 "done" 23865 }; 23866 23867 static const _ExtendedGDBusArgInfo _flash_control_signal_info_error_ARG_filename = 23868 { 23869 { 23870 -1, 23871 (gchar *) "filename", 23872 (gchar *) "s", 23873 NULL 23874 }, 23875 FALSE 23876 }; 23877 23878 static const _ExtendedGDBusArgInfo * const _flash_control_signal_info_error_ARG_pointers[] = 23879 { 23880 &_flash_control_signal_info_error_ARG_filename, 23881 NULL 23882 }; 23883 23884 static const _ExtendedGDBusSignalInfo _flash_control_signal_info_error = 23885 { 23886 { 23887 -1, 23888 (gchar *) "Error", 23889 (GDBusArgInfo **) &_flash_control_signal_info_error_ARG_pointers, 23890 NULL 23891 }, 23892 "error" 23893 }; 23894 23895 static const _ExtendedGDBusArgInfo _flash_control_signal_info_progress_ARG_filename = 23896 { 23897 { 23898 -1, 23899 (gchar *) "filename", 23900 (gchar *) "s", 23901 NULL 23902 }, 23903 FALSE 23904 }; 23905 23906 static const _ExtendedGDBusArgInfo _flash_control_signal_info_progress_ARG_progress = 23907 { 23908 { 23909 -1, 23910 (gchar *) "progress", 23911 (gchar *) "y", 23912 NULL 23913 }, 23914 FALSE 23915 }; 23916 23917 static const _ExtendedGDBusArgInfo * const _flash_control_signal_info_progress_ARG_pointers[] = 23918 { 23919 &_flash_control_signal_info_progress_ARG_filename, 23920 &_flash_control_signal_info_progress_ARG_progress, 23921 NULL 23922 }; 23923 23924 static const _ExtendedGDBusSignalInfo _flash_control_signal_info_progress = 23925 { 23926 { 23927 -1, 23928 (gchar *) "Progress", 23929 (GDBusArgInfo **) &_flash_control_signal_info_progress_ARG_pointers, 23930 NULL 23931 }, 23932 "progress" 23933 }; 23934 23935 static const _ExtendedGDBusSignalInfo * const _flash_control_signal_info_pointers[] = 23936 { 23937 &_flash_control_signal_info_done, 23938 &_flash_control_signal_info_error, 23939 &_flash_control_signal_info_progress, 23940 NULL 23941 }; 23942 23943 static const _ExtendedGDBusPropertyInfo _flash_control_property_info_filename = 23944 { 23945 { 23946 -1, 23947 (gchar *) "filename", 23948 (gchar *) "s", 23949 G_DBUS_PROPERTY_INFO_FLAGS_READABLE, 23950 NULL 23951 }, 23952 "filename", 23953 FALSE 23954 }; 23955 23956 static const _ExtendedGDBusPropertyInfo _flash_control_property_info_type_ = 23957 { 23958 { 23959 -1, 23960 (gchar *) "type", 23961 (gchar *) "s", 23962 G_DBUS_PROPERTY_INFO_FLAGS_READABLE, 23963 NULL 23964 }, 23965 "type", 23966 FALSE 23967 }; 23968 23969 static const _ExtendedGDBusPropertyInfo * const _flash_control_property_info_pointers[] = 23970 { 23971 &_flash_control_property_info_filename, 23972 &_flash_control_property_info_type_, 23973 NULL 23974 }; 23975 23976 static const _ExtendedGDBusInterfaceInfo _flash_control_interface_info = 23977 { 23978 { 23979 -1, 23980 (gchar *) "org.openbmc.FlashControl", 23981 (GDBusMethodInfo **) &_flash_control_method_info_pointers, 23982 (GDBusSignalInfo **) &_flash_control_signal_info_pointers, 23983 (GDBusPropertyInfo **) &_flash_control_property_info_pointers, 23984 NULL 23985 }, 23986 "flash-control", 23987 }; 23988 23989 23990 /** 23991 * flash_control_interface_info: 23992 * 23993 * Gets a machine-readable description of the <link linkend="gdbus-interface-org-openbmc-FlashControl.top_of_page">org.openbmc.FlashControl</link> D-Bus interface. 23994 * 23995 * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free. 23996 */ 23997 GDBusInterfaceInfo * 23998 flash_control_interface_info (void) 23999 { 24000 return (GDBusInterfaceInfo *) &_flash_control_interface_info.parent_struct; 24001 } 24002 24003 /** 24004 * flash_control_override_properties: 24005 * @klass: The class structure for a #GObject<!-- -->-derived class. 24006 * @property_id_begin: The property id to assign to the first overridden property. 24007 * 24008 * Overrides all #GObject properties in the #FlashControl interface for a concrete class. 24009 * The properties are overridden in the order they are defined. 24010 * 24011 * Returns: The last property id. 24012 */ 24013 guint 24014 flash_control_override_properties (GObjectClass *klass, guint property_id_begin) 24015 { 24016 g_object_class_override_property (klass, property_id_begin++, "filename"); 24017 g_object_class_override_property (klass, property_id_begin++, "type"); 24018 return property_id_begin - 1; 24019 } 24020 24021 24022 24023 /** 24024 * FlashControl: 24025 * 24026 * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-FlashControl.top_of_page">org.openbmc.FlashControl</link>. 24027 */ 24028 24029 /** 24030 * FlashControlIface: 24031 * @parent_iface: The parent interface. 24032 * @handle_flash: Handler for the #FlashControl::handle-flash signal. 24033 * @get_filename: Getter for the #FlashControl:filename property. 24034 * @get_type_: Getter for the #FlashControl:type property. 24035 * @done: Handler for the #FlashControl::done signal. 24036 * @error: Handler for the #FlashControl::error signal. 24037 * @progress: Handler for the #FlashControl::progress signal. 24038 * 24039 * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-FlashControl.top_of_page">org.openbmc.FlashControl</link>. 24040 */ 24041 24042 typedef FlashControlIface FlashControlInterface; 24043 G_DEFINE_INTERFACE (FlashControl, flash_control, G_TYPE_OBJECT); 24044 24045 static void 24046 flash_control_default_init (FlashControlIface *iface) 24047 { 24048 /* GObject signals for incoming D-Bus method calls: */ 24049 /** 24050 * FlashControl::handle-flash: 24051 * @object: A #FlashControl. 24052 * @invocation: A #GDBusMethodInvocation. 24053 * @arg_type: Argument passed by remote caller. 24054 * @arg_filename: Argument passed by remote caller. 24055 * 24056 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-FlashControl.flash">flash()</link> D-Bus method. 24057 * 24058 * 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 flash_control_complete_flash() 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. 24059 * 24060 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 24061 */ 24062 g_signal_new ("handle-flash", 24063 G_TYPE_FROM_INTERFACE (iface), 24064 G_SIGNAL_RUN_LAST, 24065 G_STRUCT_OFFSET (FlashControlIface, handle_flash), 24066 g_signal_accumulator_true_handled, 24067 NULL, 24068 g_cclosure_marshal_generic, 24069 G_TYPE_BOOLEAN, 24070 3, 24071 G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING, G_TYPE_STRING); 24072 24073 /* GObject signals for received D-Bus signals: */ 24074 /** 24075 * FlashControl::done: 24076 * @object: A #FlashControl. 24077 * @arg_filename: Argument. 24078 * 24079 * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-openbmc-FlashControl.Done">"Done"</link> is received. 24080 * 24081 * 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. 24082 */ 24083 g_signal_new ("done", 24084 G_TYPE_FROM_INTERFACE (iface), 24085 G_SIGNAL_RUN_LAST, 24086 G_STRUCT_OFFSET (FlashControlIface, done), 24087 NULL, 24088 NULL, 24089 g_cclosure_marshal_generic, 24090 G_TYPE_NONE, 24091 1, G_TYPE_STRING); 24092 24093 /** 24094 * FlashControl::error: 24095 * @object: A #FlashControl. 24096 * @arg_filename: Argument. 24097 * 24098 * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-openbmc-FlashControl.Error">"Error"</link> is received. 24099 * 24100 * 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. 24101 */ 24102 g_signal_new ("error", 24103 G_TYPE_FROM_INTERFACE (iface), 24104 G_SIGNAL_RUN_LAST, 24105 G_STRUCT_OFFSET (FlashControlIface, error), 24106 NULL, 24107 NULL, 24108 g_cclosure_marshal_generic, 24109 G_TYPE_NONE, 24110 1, G_TYPE_STRING); 24111 24112 /** 24113 * FlashControl::progress: 24114 * @object: A #FlashControl. 24115 * @arg_filename: Argument. 24116 * @arg_progress: Argument. 24117 * 24118 * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-openbmc-FlashControl.Progress">"Progress"</link> is received. 24119 * 24120 * 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. 24121 */ 24122 g_signal_new ("progress", 24123 G_TYPE_FROM_INTERFACE (iface), 24124 G_SIGNAL_RUN_LAST, 24125 G_STRUCT_OFFSET (FlashControlIface, progress), 24126 NULL, 24127 NULL, 24128 g_cclosure_marshal_generic, 24129 G_TYPE_NONE, 24130 2, G_TYPE_STRING, G_TYPE_UCHAR); 24131 24132 /* GObject properties for D-Bus properties: */ 24133 /** 24134 * FlashControl:filename: 24135 * 24136 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-FlashControl.filename">"filename"</link>. 24137 * 24138 * 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. 24139 */ 24140 g_object_interface_install_property (iface, 24141 g_param_spec_string ("filename", "filename", "filename", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 24142 /** 24143 * FlashControl:type: 24144 * 24145 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-FlashControl.type">"type"</link>. 24146 * 24147 * 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. 24148 */ 24149 g_object_interface_install_property (iface, 24150 g_param_spec_string ("type", "type", "type", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 24151 } 24152 24153 /** 24154 * flash_control_get_filename: (skip) 24155 * @object: A #FlashControl. 24156 * 24157 * Gets the value of the <link linkend="gdbus-property-org-openbmc-FlashControl.filename">"filename"</link> D-Bus property. 24158 * 24159 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 24160 * 24161 * <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 flash_control_dup_filename() if on another thread.</warning> 24162 * 24163 * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object. 24164 */ 24165 const gchar * 24166 flash_control_get_filename (FlashControl *object) 24167 { 24168 return FLASH_CONTROL_GET_IFACE (object)->get_filename (object); 24169 } 24170 24171 /** 24172 * flash_control_dup_filename: (skip) 24173 * @object: A #FlashControl. 24174 * 24175 * Gets a copy of the <link linkend="gdbus-property-org-openbmc-FlashControl.filename">"filename"</link> D-Bus property. 24176 * 24177 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 24178 * 24179 * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value should be freed with g_free(). 24180 */ 24181 gchar * 24182 flash_control_dup_filename (FlashControl *object) 24183 { 24184 gchar *value; 24185 g_object_get (G_OBJECT (object), "filename", &value, NULL); 24186 return value; 24187 } 24188 24189 /** 24190 * flash_control_set_filename: (skip) 24191 * @object: A #FlashControl. 24192 * @value: The value to set. 24193 * 24194 * Sets the <link linkend="gdbus-property-org-openbmc-FlashControl.filename">"filename"</link> D-Bus property to @value. 24195 * 24196 * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side. 24197 */ 24198 void 24199 flash_control_set_filename (FlashControl *object, const gchar *value) 24200 { 24201 g_object_set (G_OBJECT (object), "filename", value, NULL); 24202 } 24203 24204 /** 24205 * flash_control_get_type_: (skip) 24206 * @object: A #FlashControl. 24207 * 24208 * Gets the value of the <link linkend="gdbus-property-org-openbmc-FlashControl.type">"type"</link> D-Bus property. 24209 * 24210 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 24211 * 24212 * <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 flash_control_dup_type_() if on another thread.</warning> 24213 * 24214 * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object. 24215 */ 24216 const gchar * 24217 flash_control_get_type_ (FlashControl *object) 24218 { 24219 return FLASH_CONTROL_GET_IFACE (object)->get_type_ (object); 24220 } 24221 24222 /** 24223 * flash_control_dup_type_: (skip) 24224 * @object: A #FlashControl. 24225 * 24226 * Gets a copy of the <link linkend="gdbus-property-org-openbmc-FlashControl.type">"type"</link> D-Bus property. 24227 * 24228 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 24229 * 24230 * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value should be freed with g_free(). 24231 */ 24232 gchar * 24233 flash_control_dup_type_ (FlashControl *object) 24234 { 24235 gchar *value; 24236 g_object_get (G_OBJECT (object), "type", &value, NULL); 24237 return value; 24238 } 24239 24240 /** 24241 * flash_control_set_type_: (skip) 24242 * @object: A #FlashControl. 24243 * @value: The value to set. 24244 * 24245 * Sets the <link linkend="gdbus-property-org-openbmc-FlashControl.type">"type"</link> D-Bus property to @value. 24246 * 24247 * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side. 24248 */ 24249 void 24250 flash_control_set_type_ (FlashControl *object, const gchar *value) 24251 { 24252 g_object_set (G_OBJECT (object), "type", value, NULL); 24253 } 24254 24255 /** 24256 * flash_control_emit_done: 24257 * @object: A #FlashControl. 24258 * @arg_filename: Argument to pass with the signal. 24259 * 24260 * Emits the <link linkend="gdbus-signal-org-openbmc-FlashControl.Done">"Done"</link> D-Bus signal. 24261 */ 24262 void 24263 flash_control_emit_done ( 24264 FlashControl *object, 24265 const gchar *arg_filename) 24266 { 24267 g_signal_emit_by_name (object, "done", arg_filename); 24268 } 24269 24270 /** 24271 * flash_control_emit_error: 24272 * @object: A #FlashControl. 24273 * @arg_filename: Argument to pass with the signal. 24274 * 24275 * Emits the <link linkend="gdbus-signal-org-openbmc-FlashControl.Error">"Error"</link> D-Bus signal. 24276 */ 24277 void 24278 flash_control_emit_error ( 24279 FlashControl *object, 24280 const gchar *arg_filename) 24281 { 24282 g_signal_emit_by_name (object, "error", arg_filename); 24283 } 24284 24285 /** 24286 * flash_control_emit_progress: 24287 * @object: A #FlashControl. 24288 * @arg_filename: Argument to pass with the signal. 24289 * @arg_progress: Argument to pass with the signal. 24290 * 24291 * Emits the <link linkend="gdbus-signal-org-openbmc-FlashControl.Progress">"Progress"</link> D-Bus signal. 24292 */ 24293 void 24294 flash_control_emit_progress ( 24295 FlashControl *object, 24296 const gchar *arg_filename, 24297 guchar arg_progress) 24298 { 24299 g_signal_emit_by_name (object, "progress", arg_filename, arg_progress); 24300 } 24301 24302 /** 24303 * flash_control_call_flash: 24304 * @proxy: A #FlashControlProxy. 24305 * @arg_type: Argument to pass with the method invocation. 24306 * @arg_filename: Argument to pass with the method invocation. 24307 * @cancellable: (allow-none): A #GCancellable or %NULL. 24308 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 24309 * @user_data: User data to pass to @callback. 24310 * 24311 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-FlashControl.flash">flash()</link> D-Bus method on @proxy. 24312 * 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. 24313 * You can then call flash_control_call_flash_finish() to get the result of the operation. 24314 * 24315 * See flash_control_call_flash_sync() for the synchronous, blocking version of this method. 24316 */ 24317 void 24318 flash_control_call_flash ( 24319 FlashControl *proxy, 24320 const gchar *arg_type, 24321 const gchar *arg_filename, 24322 GCancellable *cancellable, 24323 GAsyncReadyCallback callback, 24324 gpointer user_data) 24325 { 24326 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 24327 "flash", 24328 g_variant_new ("(ss)", 24329 arg_type, 24330 arg_filename), 24331 G_DBUS_CALL_FLAGS_NONE, 24332 -1, 24333 cancellable, 24334 callback, 24335 user_data); 24336 } 24337 24338 /** 24339 * flash_control_call_flash_finish: 24340 * @proxy: A #FlashControlProxy. 24341 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to flash_control_call_flash(). 24342 * @error: Return location for error or %NULL. 24343 * 24344 * Finishes an operation started with flash_control_call_flash(). 24345 * 24346 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 24347 */ 24348 gboolean 24349 flash_control_call_flash_finish ( 24350 FlashControl *proxy, 24351 GAsyncResult *res, 24352 GError **error) 24353 { 24354 GVariant *_ret; 24355 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 24356 if (_ret == NULL) 24357 goto _out; 24358 g_variant_get (_ret, 24359 "()"); 24360 g_variant_unref (_ret); 24361 _out: 24362 return _ret != NULL; 24363 } 24364 24365 /** 24366 * flash_control_call_flash_sync: 24367 * @proxy: A #FlashControlProxy. 24368 * @arg_type: Argument to pass with the method invocation. 24369 * @arg_filename: Argument to pass with the method invocation. 24370 * @cancellable: (allow-none): A #GCancellable or %NULL. 24371 * @error: Return location for error or %NULL. 24372 * 24373 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-FlashControl.flash">flash()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 24374 * 24375 * See flash_control_call_flash() for the asynchronous version of this method. 24376 * 24377 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 24378 */ 24379 gboolean 24380 flash_control_call_flash_sync ( 24381 FlashControl *proxy, 24382 const gchar *arg_type, 24383 const gchar *arg_filename, 24384 GCancellable *cancellable, 24385 GError **error) 24386 { 24387 GVariant *_ret; 24388 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 24389 "flash", 24390 g_variant_new ("(ss)", 24391 arg_type, 24392 arg_filename), 24393 G_DBUS_CALL_FLAGS_NONE, 24394 -1, 24395 cancellable, 24396 error); 24397 if (_ret == NULL) 24398 goto _out; 24399 g_variant_get (_ret, 24400 "()"); 24401 g_variant_unref (_ret); 24402 _out: 24403 return _ret != NULL; 24404 } 24405 24406 /** 24407 * flash_control_complete_flash: 24408 * @object: A #FlashControl. 24409 * @invocation: (transfer full): A #GDBusMethodInvocation. 24410 * 24411 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-FlashControl.flash">flash()</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. 24412 * 24413 * This method will free @invocation, you cannot use it afterwards. 24414 */ 24415 void 24416 flash_control_complete_flash ( 24417 FlashControl *object, 24418 GDBusMethodInvocation *invocation) 24419 { 24420 g_dbus_method_invocation_return_value (invocation, 24421 g_variant_new ("()")); 24422 } 24423 24424 /* ------------------------------------------------------------------------ */ 24425 24426 /** 24427 * FlashControlProxy: 24428 * 24429 * The #FlashControlProxy structure contains only private data and should only be accessed using the provided API. 24430 */ 24431 24432 /** 24433 * FlashControlProxyClass: 24434 * @parent_class: The parent class. 24435 * 24436 * Class structure for #FlashControlProxy. 24437 */ 24438 24439 struct _FlashControlProxyPrivate 24440 { 24441 GData *qdata; 24442 }; 24443 24444 static void flash_control_proxy_iface_init (FlashControlIface *iface); 24445 24446 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 24447 G_DEFINE_TYPE_WITH_CODE (FlashControlProxy, flash_control_proxy, G_TYPE_DBUS_PROXY, 24448 G_ADD_PRIVATE (FlashControlProxy) 24449 G_IMPLEMENT_INTERFACE (TYPE_FLASH_CONTROL, flash_control_proxy_iface_init)); 24450 24451 #else 24452 G_DEFINE_TYPE_WITH_CODE (FlashControlProxy, flash_control_proxy, G_TYPE_DBUS_PROXY, 24453 G_IMPLEMENT_INTERFACE (TYPE_FLASH_CONTROL, flash_control_proxy_iface_init)); 24454 24455 #endif 24456 static void 24457 flash_control_proxy_finalize (GObject *object) 24458 { 24459 FlashControlProxy *proxy = FLASH_CONTROL_PROXY (object); 24460 g_datalist_clear (&proxy->priv->qdata); 24461 G_OBJECT_CLASS (flash_control_proxy_parent_class)->finalize (object); 24462 } 24463 24464 static void 24465 flash_control_proxy_get_property (GObject *object, 24466 guint prop_id, 24467 GValue *value, 24468 GParamSpec *pspec G_GNUC_UNUSED) 24469 { 24470 const _ExtendedGDBusPropertyInfo *info; 24471 GVariant *variant; 24472 g_assert (prop_id != 0 && prop_id - 1 < 2); 24473 info = _flash_control_property_info_pointers[prop_id - 1]; 24474 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (object), info->parent_struct.name); 24475 if (info->use_gvariant) 24476 { 24477 g_value_set_variant (value, variant); 24478 } 24479 else 24480 { 24481 if (variant != NULL) 24482 g_dbus_gvariant_to_gvalue (variant, value); 24483 } 24484 if (variant != NULL) 24485 g_variant_unref (variant); 24486 } 24487 24488 static void 24489 flash_control_proxy_set_property_cb (GDBusProxy *proxy, 24490 GAsyncResult *res, 24491 gpointer user_data) 24492 { 24493 const _ExtendedGDBusPropertyInfo *info = user_data; 24494 GError *error; 24495 GVariant *_ret; 24496 error = NULL; 24497 _ret = g_dbus_proxy_call_finish (proxy, res, &error); 24498 if (!_ret) 24499 { 24500 g_warning ("Error setting property '%s' on interface org.openbmc.FlashControl: %s (%s, %d)", 24501 info->parent_struct.name, 24502 error->message, g_quark_to_string (error->domain), error->code); 24503 g_error_free (error); 24504 } 24505 else 24506 { 24507 g_variant_unref (_ret); 24508 } 24509 } 24510 24511 static void 24512 flash_control_proxy_set_property (GObject *object, 24513 guint prop_id, 24514 const GValue *value, 24515 GParamSpec *pspec G_GNUC_UNUSED) 24516 { 24517 const _ExtendedGDBusPropertyInfo *info; 24518 GVariant *variant; 24519 g_assert (prop_id != 0 && prop_id - 1 < 2); 24520 info = _flash_control_property_info_pointers[prop_id - 1]; 24521 variant = g_dbus_gvalue_to_gvariant (value, G_VARIANT_TYPE (info->parent_struct.signature)); 24522 g_dbus_proxy_call (G_DBUS_PROXY (object), 24523 "org.freedesktop.DBus.Properties.Set", 24524 g_variant_new ("(ssv)", "org.openbmc.FlashControl", info->parent_struct.name, variant), 24525 G_DBUS_CALL_FLAGS_NONE, 24526 -1, 24527 NULL, (GAsyncReadyCallback) flash_control_proxy_set_property_cb, (GDBusPropertyInfo *) &info->parent_struct); 24528 g_variant_unref (variant); 24529 } 24530 24531 static void 24532 flash_control_proxy_g_signal (GDBusProxy *proxy, 24533 const gchar *sender_name G_GNUC_UNUSED, 24534 const gchar *signal_name, 24535 GVariant *parameters) 24536 { 24537 _ExtendedGDBusSignalInfo *info; 24538 GVariantIter iter; 24539 GVariant *child; 24540 GValue *paramv; 24541 guint num_params; 24542 guint n; 24543 guint signal_id; 24544 info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_flash_control_interface_info.parent_struct, signal_name); 24545 if (info == NULL) 24546 return; 24547 num_params = g_variant_n_children (parameters); 24548 paramv = g_new0 (GValue, num_params + 1); 24549 g_value_init (¶mv[0], TYPE_FLASH_CONTROL); 24550 g_value_set_object (¶mv[0], proxy); 24551 g_variant_iter_init (&iter, parameters); 24552 n = 1; 24553 while ((child = g_variant_iter_next_value (&iter)) != NULL) 24554 { 24555 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1]; 24556 if (arg_info->use_gvariant) 24557 { 24558 g_value_init (¶mv[n], G_TYPE_VARIANT); 24559 g_value_set_variant (¶mv[n], child); 24560 n++; 24561 } 24562 else 24563 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 24564 g_variant_unref (child); 24565 } 24566 signal_id = g_signal_lookup (info->signal_name, TYPE_FLASH_CONTROL); 24567 g_signal_emitv (paramv, signal_id, 0, NULL); 24568 for (n = 0; n < num_params + 1; n++) 24569 g_value_unset (¶mv[n]); 24570 g_free (paramv); 24571 } 24572 24573 static void 24574 flash_control_proxy_g_properties_changed (GDBusProxy *_proxy, 24575 GVariant *changed_properties, 24576 const gchar *const *invalidated_properties) 24577 { 24578 FlashControlProxy *proxy = FLASH_CONTROL_PROXY (_proxy); 24579 guint n; 24580 const gchar *key; 24581 GVariantIter *iter; 24582 _ExtendedGDBusPropertyInfo *info; 24583 g_variant_get (changed_properties, "a{sv}", &iter); 24584 while (g_variant_iter_next (iter, "{&sv}", &key, NULL)) 24585 { 24586 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_flash_control_interface_info.parent_struct, key); 24587 g_datalist_remove_data (&proxy->priv->qdata, key); 24588 if (info != NULL) 24589 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 24590 } 24591 g_variant_iter_free (iter); 24592 for (n = 0; invalidated_properties[n] != NULL; n++) 24593 { 24594 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_flash_control_interface_info.parent_struct, invalidated_properties[n]); 24595 g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]); 24596 if (info != NULL) 24597 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 24598 } 24599 } 24600 24601 static const gchar * 24602 flash_control_proxy_get_filename (FlashControl *object) 24603 { 24604 FlashControlProxy *proxy = FLASH_CONTROL_PROXY (object); 24605 GVariant *variant; 24606 const gchar *value = NULL; 24607 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "filename"); 24608 if (variant != NULL) 24609 { 24610 value = g_variant_get_string (variant, NULL); 24611 g_variant_unref (variant); 24612 } 24613 return value; 24614 } 24615 24616 static const gchar * 24617 flash_control_proxy_get_type_ (FlashControl *object) 24618 { 24619 FlashControlProxy *proxy = FLASH_CONTROL_PROXY (object); 24620 GVariant *variant; 24621 const gchar *value = NULL; 24622 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "type"); 24623 if (variant != NULL) 24624 { 24625 value = g_variant_get_string (variant, NULL); 24626 g_variant_unref (variant); 24627 } 24628 return value; 24629 } 24630 24631 static void 24632 flash_control_proxy_init (FlashControlProxy *proxy) 24633 { 24634 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 24635 proxy->priv = flash_control_proxy_get_instance_private (proxy); 24636 #else 24637 proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, TYPE_FLASH_CONTROL_PROXY, FlashControlProxyPrivate); 24638 #endif 24639 24640 g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), flash_control_interface_info ()); 24641 } 24642 24643 static void 24644 flash_control_proxy_class_init (FlashControlProxyClass *klass) 24645 { 24646 GObjectClass *gobject_class; 24647 GDBusProxyClass *proxy_class; 24648 24649 gobject_class = G_OBJECT_CLASS (klass); 24650 gobject_class->finalize = flash_control_proxy_finalize; 24651 gobject_class->get_property = flash_control_proxy_get_property; 24652 gobject_class->set_property = flash_control_proxy_set_property; 24653 24654 proxy_class = G_DBUS_PROXY_CLASS (klass); 24655 proxy_class->g_signal = flash_control_proxy_g_signal; 24656 proxy_class->g_properties_changed = flash_control_proxy_g_properties_changed; 24657 24658 flash_control_override_properties (gobject_class, 1); 24659 24660 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 24661 g_type_class_add_private (klass, sizeof (FlashControlProxyPrivate)); 24662 #endif 24663 } 24664 24665 static void 24666 flash_control_proxy_iface_init (FlashControlIface *iface) 24667 { 24668 iface->get_filename = flash_control_proxy_get_filename; 24669 iface->get_type_ = flash_control_proxy_get_type_; 24670 } 24671 24672 /** 24673 * flash_control_proxy_new: 24674 * @connection: A #GDBusConnection. 24675 * @flags: Flags from the #GDBusProxyFlags enumeration. 24676 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 24677 * @object_path: An object path. 24678 * @cancellable: (allow-none): A #GCancellable or %NULL. 24679 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 24680 * @user_data: User data to pass to @callback. 24681 * 24682 * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-FlashControl.top_of_page">org.openbmc.FlashControl</link>. See g_dbus_proxy_new() for more details. 24683 * 24684 * 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. 24685 * You can then call flash_control_proxy_new_finish() to get the result of the operation. 24686 * 24687 * See flash_control_proxy_new_sync() for the synchronous, blocking version of this constructor. 24688 */ 24689 void 24690 flash_control_proxy_new ( 24691 GDBusConnection *connection, 24692 GDBusProxyFlags flags, 24693 const gchar *name, 24694 const gchar *object_path, 24695 GCancellable *cancellable, 24696 GAsyncReadyCallback callback, 24697 gpointer user_data) 24698 { 24699 g_async_initable_new_async (TYPE_FLASH_CONTROL_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.FlashControl", NULL); 24700 } 24701 24702 /** 24703 * flash_control_proxy_new_finish: 24704 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to flash_control_proxy_new(). 24705 * @error: Return location for error or %NULL 24706 * 24707 * Finishes an operation started with flash_control_proxy_new(). 24708 * 24709 * Returns: (transfer full) (type FlashControlProxy): The constructed proxy object or %NULL if @error is set. 24710 */ 24711 FlashControl * 24712 flash_control_proxy_new_finish ( 24713 GAsyncResult *res, 24714 GError **error) 24715 { 24716 GObject *ret; 24717 GObject *source_object; 24718 source_object = g_async_result_get_source_object (res); 24719 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 24720 g_object_unref (source_object); 24721 if (ret != NULL) 24722 return FLASH_CONTROL (ret); 24723 else 24724 return NULL; 24725 } 24726 24727 /** 24728 * flash_control_proxy_new_sync: 24729 * @connection: A #GDBusConnection. 24730 * @flags: Flags from the #GDBusProxyFlags enumeration. 24731 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 24732 * @object_path: An object path. 24733 * @cancellable: (allow-none): A #GCancellable or %NULL. 24734 * @error: Return location for error or %NULL 24735 * 24736 * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-FlashControl.top_of_page">org.openbmc.FlashControl</link>. See g_dbus_proxy_new_sync() for more details. 24737 * 24738 * The calling thread is blocked until a reply is received. 24739 * 24740 * See flash_control_proxy_new() for the asynchronous version of this constructor. 24741 * 24742 * Returns: (transfer full) (type FlashControlProxy): The constructed proxy object or %NULL if @error is set. 24743 */ 24744 FlashControl * 24745 flash_control_proxy_new_sync ( 24746 GDBusConnection *connection, 24747 GDBusProxyFlags flags, 24748 const gchar *name, 24749 const gchar *object_path, 24750 GCancellable *cancellable, 24751 GError **error) 24752 { 24753 GInitable *ret; 24754 ret = g_initable_new (TYPE_FLASH_CONTROL_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.FlashControl", NULL); 24755 if (ret != NULL) 24756 return FLASH_CONTROL (ret); 24757 else 24758 return NULL; 24759 } 24760 24761 24762 /** 24763 * flash_control_proxy_new_for_bus: 24764 * @bus_type: A #GBusType. 24765 * @flags: Flags from the #GDBusProxyFlags enumeration. 24766 * @name: A bus name (well-known or unique). 24767 * @object_path: An object path. 24768 * @cancellable: (allow-none): A #GCancellable or %NULL. 24769 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 24770 * @user_data: User data to pass to @callback. 24771 * 24772 * Like flash_control_proxy_new() but takes a #GBusType instead of a #GDBusConnection. 24773 * 24774 * 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. 24775 * You can then call flash_control_proxy_new_for_bus_finish() to get the result of the operation. 24776 * 24777 * See flash_control_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor. 24778 */ 24779 void 24780 flash_control_proxy_new_for_bus ( 24781 GBusType bus_type, 24782 GDBusProxyFlags flags, 24783 const gchar *name, 24784 const gchar *object_path, 24785 GCancellable *cancellable, 24786 GAsyncReadyCallback callback, 24787 gpointer user_data) 24788 { 24789 g_async_initable_new_async (TYPE_FLASH_CONTROL_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.FlashControl", NULL); 24790 } 24791 24792 /** 24793 * flash_control_proxy_new_for_bus_finish: 24794 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to flash_control_proxy_new_for_bus(). 24795 * @error: Return location for error or %NULL 24796 * 24797 * Finishes an operation started with flash_control_proxy_new_for_bus(). 24798 * 24799 * Returns: (transfer full) (type FlashControlProxy): The constructed proxy object or %NULL if @error is set. 24800 */ 24801 FlashControl * 24802 flash_control_proxy_new_for_bus_finish ( 24803 GAsyncResult *res, 24804 GError **error) 24805 { 24806 GObject *ret; 24807 GObject *source_object; 24808 source_object = g_async_result_get_source_object (res); 24809 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 24810 g_object_unref (source_object); 24811 if (ret != NULL) 24812 return FLASH_CONTROL (ret); 24813 else 24814 return NULL; 24815 } 24816 24817 /** 24818 * flash_control_proxy_new_for_bus_sync: 24819 * @bus_type: A #GBusType. 24820 * @flags: Flags from the #GDBusProxyFlags enumeration. 24821 * @name: A bus name (well-known or unique). 24822 * @object_path: An object path. 24823 * @cancellable: (allow-none): A #GCancellable or %NULL. 24824 * @error: Return location for error or %NULL 24825 * 24826 * Like flash_control_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection. 24827 * 24828 * The calling thread is blocked until a reply is received. 24829 * 24830 * See flash_control_proxy_new_for_bus() for the asynchronous version of this constructor. 24831 * 24832 * Returns: (transfer full) (type FlashControlProxy): The constructed proxy object or %NULL if @error is set. 24833 */ 24834 FlashControl * 24835 flash_control_proxy_new_for_bus_sync ( 24836 GBusType bus_type, 24837 GDBusProxyFlags flags, 24838 const gchar *name, 24839 const gchar *object_path, 24840 GCancellable *cancellable, 24841 GError **error) 24842 { 24843 GInitable *ret; 24844 ret = g_initable_new (TYPE_FLASH_CONTROL_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.FlashControl", NULL); 24845 if (ret != NULL) 24846 return FLASH_CONTROL (ret); 24847 else 24848 return NULL; 24849 } 24850 24851 24852 /* ------------------------------------------------------------------------ */ 24853 24854 /** 24855 * FlashControlSkeleton: 24856 * 24857 * The #FlashControlSkeleton structure contains only private data and should only be accessed using the provided API. 24858 */ 24859 24860 /** 24861 * FlashControlSkeletonClass: 24862 * @parent_class: The parent class. 24863 * 24864 * Class structure for #FlashControlSkeleton. 24865 */ 24866 24867 struct _FlashControlSkeletonPrivate 24868 { 24869 GValue *properties; 24870 GList *changed_properties; 24871 GSource *changed_properties_idle_source; 24872 GMainContext *context; 24873 GMutex lock; 24874 }; 24875 24876 static void 24877 _flash_control_skeleton_handle_method_call ( 24878 GDBusConnection *connection G_GNUC_UNUSED, 24879 const gchar *sender G_GNUC_UNUSED, 24880 const gchar *object_path G_GNUC_UNUSED, 24881 const gchar *interface_name, 24882 const gchar *method_name, 24883 GVariant *parameters, 24884 GDBusMethodInvocation *invocation, 24885 gpointer user_data) 24886 { 24887 FlashControlSkeleton *skeleton = FLASH_CONTROL_SKELETON (user_data); 24888 _ExtendedGDBusMethodInfo *info; 24889 GVariantIter iter; 24890 GVariant *child; 24891 GValue *paramv; 24892 guint num_params; 24893 guint num_extra; 24894 guint n; 24895 guint signal_id; 24896 GValue return_value = G_VALUE_INIT; 24897 info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation); 24898 g_assert (info != NULL); 24899 num_params = g_variant_n_children (parameters); 24900 num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra); 24901 n = 0; 24902 g_value_init (¶mv[n], TYPE_FLASH_CONTROL); 24903 g_value_set_object (¶mv[n++], skeleton); 24904 g_value_init (¶mv[n], G_TYPE_DBUS_METHOD_INVOCATION); 24905 g_value_set_object (¶mv[n++], invocation); 24906 if (info->pass_fdlist) 24907 { 24908 #ifdef G_OS_UNIX 24909 g_value_init (¶mv[n], G_TYPE_UNIX_FD_LIST); 24910 g_value_set_object (¶mv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation))); 24911 #else 24912 g_assert_not_reached (); 24913 #endif 24914 } 24915 g_variant_iter_init (&iter, parameters); 24916 while ((child = g_variant_iter_next_value (&iter)) != NULL) 24917 { 24918 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra]; 24919 if (arg_info->use_gvariant) 24920 { 24921 g_value_init (¶mv[n], G_TYPE_VARIANT); 24922 g_value_set_variant (¶mv[n], child); 24923 n++; 24924 } 24925 else 24926 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 24927 g_variant_unref (child); 24928 } 24929 signal_id = g_signal_lookup (info->signal_name, TYPE_FLASH_CONTROL); 24930 g_value_init (&return_value, G_TYPE_BOOLEAN); 24931 g_signal_emitv (paramv, signal_id, 0, &return_value); 24932 if (!g_value_get_boolean (&return_value)) 24933 g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name); 24934 g_value_unset (&return_value); 24935 for (n = 0; n < num_params + num_extra; n++) 24936 g_value_unset (¶mv[n]); 24937 g_free (paramv); 24938 } 24939 24940 static GVariant * 24941 _flash_control_skeleton_handle_get_property ( 24942 GDBusConnection *connection G_GNUC_UNUSED, 24943 const gchar *sender G_GNUC_UNUSED, 24944 const gchar *object_path G_GNUC_UNUSED, 24945 const gchar *interface_name G_GNUC_UNUSED, 24946 const gchar *property_name, 24947 GError **error, 24948 gpointer user_data) 24949 { 24950 FlashControlSkeleton *skeleton = FLASH_CONTROL_SKELETON (user_data); 24951 GValue value = G_VALUE_INIT; 24952 GParamSpec *pspec; 24953 _ExtendedGDBusPropertyInfo *info; 24954 GVariant *ret; 24955 ret = NULL; 24956 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_flash_control_interface_info.parent_struct, property_name); 24957 g_assert (info != NULL); 24958 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 24959 if (pspec == NULL) 24960 { 24961 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 24962 } 24963 else 24964 { 24965 g_value_init (&value, pspec->value_type); 24966 g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value); 24967 ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature)); 24968 g_value_unset (&value); 24969 } 24970 return ret; 24971 } 24972 24973 static gboolean 24974 _flash_control_skeleton_handle_set_property ( 24975 GDBusConnection *connection G_GNUC_UNUSED, 24976 const gchar *sender G_GNUC_UNUSED, 24977 const gchar *object_path G_GNUC_UNUSED, 24978 const gchar *interface_name G_GNUC_UNUSED, 24979 const gchar *property_name, 24980 GVariant *variant, 24981 GError **error, 24982 gpointer user_data) 24983 { 24984 FlashControlSkeleton *skeleton = FLASH_CONTROL_SKELETON (user_data); 24985 GValue value = G_VALUE_INIT; 24986 GParamSpec *pspec; 24987 _ExtendedGDBusPropertyInfo *info; 24988 gboolean ret; 24989 ret = FALSE; 24990 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_flash_control_interface_info.parent_struct, property_name); 24991 g_assert (info != NULL); 24992 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 24993 if (pspec == NULL) 24994 { 24995 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 24996 } 24997 else 24998 { 24999 if (info->use_gvariant) 25000 g_value_set_variant (&value, variant); 25001 else 25002 g_dbus_gvariant_to_gvalue (variant, &value); 25003 g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value); 25004 g_value_unset (&value); 25005 ret = TRUE; 25006 } 25007 return ret; 25008 } 25009 25010 static const GDBusInterfaceVTable _flash_control_skeleton_vtable = 25011 { 25012 _flash_control_skeleton_handle_method_call, 25013 _flash_control_skeleton_handle_get_property, 25014 _flash_control_skeleton_handle_set_property, 25015 {NULL} 25016 }; 25017 25018 static GDBusInterfaceInfo * 25019 flash_control_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 25020 { 25021 return flash_control_interface_info (); 25022 } 25023 25024 static GDBusInterfaceVTable * 25025 flash_control_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 25026 { 25027 return (GDBusInterfaceVTable *) &_flash_control_skeleton_vtable; 25028 } 25029 25030 static GVariant * 25031 flash_control_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton) 25032 { 25033 FlashControlSkeleton *skeleton = FLASH_CONTROL_SKELETON (_skeleton); 25034 25035 GVariantBuilder builder; 25036 guint n; 25037 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 25038 if (_flash_control_interface_info.parent_struct.properties == NULL) 25039 goto out; 25040 for (n = 0; _flash_control_interface_info.parent_struct.properties[n] != NULL; n++) 25041 { 25042 GDBusPropertyInfo *info = _flash_control_interface_info.parent_struct.properties[n]; 25043 if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE) 25044 { 25045 GVariant *value; 25046 value = _flash_control_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.FlashControl", info->name, NULL, skeleton); 25047 if (value != NULL) 25048 { 25049 g_variant_take_ref (value); 25050 g_variant_builder_add (&builder, "{sv}", info->name, value); 25051 g_variant_unref (value); 25052 } 25053 } 25054 } 25055 out: 25056 return g_variant_builder_end (&builder); 25057 } 25058 25059 static gboolean _flash_control_emit_changed (gpointer user_data); 25060 25061 static void 25062 flash_control_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton) 25063 { 25064 FlashControlSkeleton *skeleton = FLASH_CONTROL_SKELETON (_skeleton); 25065 gboolean emit_changed = FALSE; 25066 25067 g_mutex_lock (&skeleton->priv->lock); 25068 if (skeleton->priv->changed_properties_idle_source != NULL) 25069 { 25070 g_source_destroy (skeleton->priv->changed_properties_idle_source); 25071 skeleton->priv->changed_properties_idle_source = NULL; 25072 emit_changed = TRUE; 25073 } 25074 g_mutex_unlock (&skeleton->priv->lock); 25075 25076 if (emit_changed) 25077 _flash_control_emit_changed (skeleton); 25078 } 25079 25080 static void 25081 _flash_control_on_signal_done ( 25082 FlashControl *object, 25083 const gchar *arg_filename) 25084 { 25085 FlashControlSkeleton *skeleton = FLASH_CONTROL_SKELETON (object); 25086 25087 GList *connections, *l; 25088 GVariant *signal_variant; 25089 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 25090 25091 signal_variant = g_variant_ref_sink (g_variant_new ("(s)", 25092 arg_filename)); 25093 for (l = connections; l != NULL; l = l->next) 25094 { 25095 GDBusConnection *connection = l->data; 25096 g_dbus_connection_emit_signal (connection, 25097 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.FlashControl", "Done", 25098 signal_variant, NULL); 25099 } 25100 g_variant_unref (signal_variant); 25101 g_list_free_full (connections, g_object_unref); 25102 } 25103 25104 static void 25105 _flash_control_on_signal_error ( 25106 FlashControl *object, 25107 const gchar *arg_filename) 25108 { 25109 FlashControlSkeleton *skeleton = FLASH_CONTROL_SKELETON (object); 25110 25111 GList *connections, *l; 25112 GVariant *signal_variant; 25113 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 25114 25115 signal_variant = g_variant_ref_sink (g_variant_new ("(s)", 25116 arg_filename)); 25117 for (l = connections; l != NULL; l = l->next) 25118 { 25119 GDBusConnection *connection = l->data; 25120 g_dbus_connection_emit_signal (connection, 25121 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.FlashControl", "Error", 25122 signal_variant, NULL); 25123 } 25124 g_variant_unref (signal_variant); 25125 g_list_free_full (connections, g_object_unref); 25126 } 25127 25128 static void 25129 _flash_control_on_signal_progress ( 25130 FlashControl *object, 25131 const gchar *arg_filename, 25132 guchar arg_progress) 25133 { 25134 FlashControlSkeleton *skeleton = FLASH_CONTROL_SKELETON (object); 25135 25136 GList *connections, *l; 25137 GVariant *signal_variant; 25138 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 25139 25140 signal_variant = g_variant_ref_sink (g_variant_new ("(sy)", 25141 arg_filename, 25142 arg_progress)); 25143 for (l = connections; l != NULL; l = l->next) 25144 { 25145 GDBusConnection *connection = l->data; 25146 g_dbus_connection_emit_signal (connection, 25147 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.FlashControl", "Progress", 25148 signal_variant, NULL); 25149 } 25150 g_variant_unref (signal_variant); 25151 g_list_free_full (connections, g_object_unref); 25152 } 25153 25154 static void flash_control_skeleton_iface_init (FlashControlIface *iface); 25155 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 25156 G_DEFINE_TYPE_WITH_CODE (FlashControlSkeleton, flash_control_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 25157 G_ADD_PRIVATE (FlashControlSkeleton) 25158 G_IMPLEMENT_INTERFACE (TYPE_FLASH_CONTROL, flash_control_skeleton_iface_init)); 25159 25160 #else 25161 G_DEFINE_TYPE_WITH_CODE (FlashControlSkeleton, flash_control_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 25162 G_IMPLEMENT_INTERFACE (TYPE_FLASH_CONTROL, flash_control_skeleton_iface_init)); 25163 25164 #endif 25165 static void 25166 flash_control_skeleton_finalize (GObject *object) 25167 { 25168 FlashControlSkeleton *skeleton = FLASH_CONTROL_SKELETON (object); 25169 guint n; 25170 for (n = 0; n < 2; n++) 25171 g_value_unset (&skeleton->priv->properties[n]); 25172 g_free (skeleton->priv->properties); 25173 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 25174 if (skeleton->priv->changed_properties_idle_source != NULL) 25175 g_source_destroy (skeleton->priv->changed_properties_idle_source); 25176 g_main_context_unref (skeleton->priv->context); 25177 g_mutex_clear (&skeleton->priv->lock); 25178 G_OBJECT_CLASS (flash_control_skeleton_parent_class)->finalize (object); 25179 } 25180 25181 static void 25182 flash_control_skeleton_get_property (GObject *object, 25183 guint prop_id, 25184 GValue *value, 25185 GParamSpec *pspec G_GNUC_UNUSED) 25186 { 25187 FlashControlSkeleton *skeleton = FLASH_CONTROL_SKELETON (object); 25188 g_assert (prop_id != 0 && prop_id - 1 < 2); 25189 g_mutex_lock (&skeleton->priv->lock); 25190 g_value_copy (&skeleton->priv->properties[prop_id - 1], value); 25191 g_mutex_unlock (&skeleton->priv->lock); 25192 } 25193 25194 static gboolean 25195 _flash_control_emit_changed (gpointer user_data) 25196 { 25197 FlashControlSkeleton *skeleton = FLASH_CONTROL_SKELETON (user_data); 25198 GList *l; 25199 GVariantBuilder builder; 25200 GVariantBuilder invalidated_builder; 25201 guint num_changes; 25202 25203 g_mutex_lock (&skeleton->priv->lock); 25204 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 25205 g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as")); 25206 for (l = skeleton->priv->changed_properties, num_changes = 0; l != NULL; l = l->next) 25207 { 25208 ChangedProperty *cp = l->data; 25209 GVariant *variant; 25210 const GValue *cur_value; 25211 25212 cur_value = &skeleton->priv->properties[cp->prop_id - 1]; 25213 if (!_g_value_equal (cur_value, &cp->orig_value)) 25214 { 25215 variant = g_dbus_gvalue_to_gvariant (cur_value, G_VARIANT_TYPE (cp->info->parent_struct.signature)); 25216 g_variant_builder_add (&builder, "{sv}", cp->info->parent_struct.name, variant); 25217 g_variant_unref (variant); 25218 num_changes++; 25219 } 25220 } 25221 if (num_changes > 0) 25222 { 25223 GList *connections, *ll; 25224 GVariant *signal_variant; 25225 signal_variant = g_variant_ref_sink (g_variant_new ("(sa{sv}as)", "org.openbmc.FlashControl", 25226 &builder, &invalidated_builder)); 25227 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 25228 for (ll = connections; ll != NULL; ll = ll->next) 25229 { 25230 GDBusConnection *connection = ll->data; 25231 25232 g_dbus_connection_emit_signal (connection, 25233 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), 25234 "org.freedesktop.DBus.Properties", 25235 "PropertiesChanged", 25236 signal_variant, 25237 NULL); 25238 } 25239 g_variant_unref (signal_variant); 25240 g_list_free_full (connections, g_object_unref); 25241 } 25242 else 25243 { 25244 g_variant_builder_clear (&builder); 25245 g_variant_builder_clear (&invalidated_builder); 25246 } 25247 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 25248 skeleton->priv->changed_properties = NULL; 25249 skeleton->priv->changed_properties_idle_source = NULL; 25250 g_mutex_unlock (&skeleton->priv->lock); 25251 return FALSE; 25252 } 25253 25254 static void 25255 _flash_control_schedule_emit_changed (FlashControlSkeleton *skeleton, const _ExtendedGDBusPropertyInfo *info, guint prop_id, const GValue *orig_value) 25256 { 25257 ChangedProperty *cp; 25258 GList *l; 25259 cp = NULL; 25260 for (l = skeleton->priv->changed_properties; l != NULL; l = l->next) 25261 { 25262 ChangedProperty *i_cp = l->data; 25263 if (i_cp->info == info) 25264 { 25265 cp = i_cp; 25266 break; 25267 } 25268 } 25269 if (cp == NULL) 25270 { 25271 cp = g_new0 (ChangedProperty, 1); 25272 cp->prop_id = prop_id; 25273 cp->info = info; 25274 skeleton->priv->changed_properties = g_list_prepend (skeleton->priv->changed_properties, cp); 25275 g_value_init (&cp->orig_value, G_VALUE_TYPE (orig_value)); 25276 g_value_copy (orig_value, &cp->orig_value); 25277 } 25278 } 25279 25280 static void 25281 flash_control_skeleton_notify (GObject *object, 25282 GParamSpec *pspec G_GNUC_UNUSED) 25283 { 25284 FlashControlSkeleton *skeleton = FLASH_CONTROL_SKELETON (object); 25285 g_mutex_lock (&skeleton->priv->lock); 25286 if (skeleton->priv->changed_properties != NULL && 25287 skeleton->priv->changed_properties_idle_source == NULL) 25288 { 25289 skeleton->priv->changed_properties_idle_source = g_idle_source_new (); 25290 g_source_set_priority (skeleton->priv->changed_properties_idle_source, G_PRIORITY_DEFAULT); 25291 g_source_set_callback (skeleton->priv->changed_properties_idle_source, _flash_control_emit_changed, g_object_ref (skeleton), (GDestroyNotify) g_object_unref); 25292 g_source_set_name (skeleton->priv->changed_properties_idle_source, "[generated] _flash_control_emit_changed"); 25293 g_source_attach (skeleton->priv->changed_properties_idle_source, skeleton->priv->context); 25294 g_source_unref (skeleton->priv->changed_properties_idle_source); 25295 } 25296 g_mutex_unlock (&skeleton->priv->lock); 25297 } 25298 25299 static void 25300 flash_control_skeleton_set_property (GObject *object, 25301 guint prop_id, 25302 const GValue *value, 25303 GParamSpec *pspec) 25304 { 25305 FlashControlSkeleton *skeleton = FLASH_CONTROL_SKELETON (object); 25306 g_assert (prop_id != 0 && prop_id - 1 < 2); 25307 g_mutex_lock (&skeleton->priv->lock); 25308 g_object_freeze_notify (object); 25309 if (!_g_value_equal (value, &skeleton->priv->properties[prop_id - 1])) 25310 { 25311 if (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)) != NULL) 25312 _flash_control_schedule_emit_changed (skeleton, _flash_control_property_info_pointers[prop_id - 1], prop_id, &skeleton->priv->properties[prop_id - 1]); 25313 g_value_copy (value, &skeleton->priv->properties[prop_id - 1]); 25314 g_object_notify_by_pspec (object, pspec); 25315 } 25316 g_mutex_unlock (&skeleton->priv->lock); 25317 g_object_thaw_notify (object); 25318 } 25319 25320 static void 25321 flash_control_skeleton_init (FlashControlSkeleton *skeleton) 25322 { 25323 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 25324 skeleton->priv = flash_control_skeleton_get_instance_private (skeleton); 25325 #else 25326 skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, TYPE_FLASH_CONTROL_SKELETON, FlashControlSkeletonPrivate); 25327 #endif 25328 25329 g_mutex_init (&skeleton->priv->lock); 25330 skeleton->priv->context = g_main_context_ref_thread_default (); 25331 skeleton->priv->properties = g_new0 (GValue, 2); 25332 g_value_init (&skeleton->priv->properties[0], G_TYPE_STRING); 25333 g_value_init (&skeleton->priv->properties[1], G_TYPE_STRING); 25334 } 25335 25336 static const gchar * 25337 flash_control_skeleton_get_filename (FlashControl *object) 25338 { 25339 FlashControlSkeleton *skeleton = FLASH_CONTROL_SKELETON (object); 25340 const gchar *value; 25341 g_mutex_lock (&skeleton->priv->lock); 25342 value = g_value_get_string (&(skeleton->priv->properties[0])); 25343 g_mutex_unlock (&skeleton->priv->lock); 25344 return value; 25345 } 25346 25347 static const gchar * 25348 flash_control_skeleton_get_type_ (FlashControl *object) 25349 { 25350 FlashControlSkeleton *skeleton = FLASH_CONTROL_SKELETON (object); 25351 const gchar *value; 25352 g_mutex_lock (&skeleton->priv->lock); 25353 value = g_value_get_string (&(skeleton->priv->properties[1])); 25354 g_mutex_unlock (&skeleton->priv->lock); 25355 return value; 25356 } 25357 25358 static void 25359 flash_control_skeleton_class_init (FlashControlSkeletonClass *klass) 25360 { 25361 GObjectClass *gobject_class; 25362 GDBusInterfaceSkeletonClass *skeleton_class; 25363 25364 gobject_class = G_OBJECT_CLASS (klass); 25365 gobject_class->finalize = flash_control_skeleton_finalize; 25366 gobject_class->get_property = flash_control_skeleton_get_property; 25367 gobject_class->set_property = flash_control_skeleton_set_property; 25368 gobject_class->notify = flash_control_skeleton_notify; 25369 25370 25371 flash_control_override_properties (gobject_class, 1); 25372 25373 skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass); 25374 skeleton_class->get_info = flash_control_skeleton_dbus_interface_get_info; 25375 skeleton_class->get_properties = flash_control_skeleton_dbus_interface_get_properties; 25376 skeleton_class->flush = flash_control_skeleton_dbus_interface_flush; 25377 skeleton_class->get_vtable = flash_control_skeleton_dbus_interface_get_vtable; 25378 25379 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 25380 g_type_class_add_private (klass, sizeof (FlashControlSkeletonPrivate)); 25381 #endif 25382 } 25383 25384 static void 25385 flash_control_skeleton_iface_init (FlashControlIface *iface) 25386 { 25387 iface->done = _flash_control_on_signal_done; 25388 iface->error = _flash_control_on_signal_error; 25389 iface->progress = _flash_control_on_signal_progress; 25390 iface->get_filename = flash_control_skeleton_get_filename; 25391 iface->get_type_ = flash_control_skeleton_get_type_; 25392 } 25393 25394 /** 25395 * flash_control_skeleton_new: 25396 * 25397 * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-FlashControl.top_of_page">org.openbmc.FlashControl</link>. 25398 * 25399 * Returns: (transfer full) (type FlashControlSkeleton): The skeleton object. 25400 */ 25401 FlashControl * 25402 flash_control_skeleton_new (void) 25403 { 25404 return FLASH_CONTROL (g_object_new (TYPE_FLASH_CONTROL_SKELETON, NULL)); 25405 } 25406 25407 /* ------------------------------------------------------------------------ 25408 * Code for interface org.openbmc.Button 25409 * ------------------------------------------------------------------------ 25410 */ 25411 25412 /** 25413 * SECTION:Button 25414 * @title: Button 25415 * @short_description: Generated C code for the org.openbmc.Button D-Bus interface 25416 * 25417 * This section contains code for working with the <link linkend="gdbus-interface-org-openbmc-Button.top_of_page">org.openbmc.Button</link> D-Bus interface in C. 25418 */ 25419 25420 /* ---- Introspection data for org.openbmc.Button ---- */ 25421 25422 static const _ExtendedGDBusArgInfo _button_method_info_is_on_OUT_ARG_state = 25423 { 25424 { 25425 -1, 25426 (gchar *) "state", 25427 (gchar *) "b", 25428 NULL 25429 }, 25430 FALSE 25431 }; 25432 25433 static const _ExtendedGDBusArgInfo * const _button_method_info_is_on_OUT_ARG_pointers[] = 25434 { 25435 &_button_method_info_is_on_OUT_ARG_state, 25436 NULL 25437 }; 25438 25439 static const _ExtendedGDBusMethodInfo _button_method_info_is_on = 25440 { 25441 { 25442 -1, 25443 (gchar *) "isOn", 25444 NULL, 25445 (GDBusArgInfo **) &_button_method_info_is_on_OUT_ARG_pointers, 25446 NULL 25447 }, 25448 "handle-is-on", 25449 FALSE 25450 }; 25451 25452 static const _ExtendedGDBusMethodInfo _button_method_info_sim_press = 25453 { 25454 { 25455 -1, 25456 (gchar *) "simPress", 25457 NULL, 25458 NULL, 25459 NULL 25460 }, 25461 "handle-sim-press", 25462 FALSE 25463 }; 25464 25465 static const _ExtendedGDBusMethodInfo _button_method_info_sim_long_press = 25466 { 25467 { 25468 -1, 25469 (gchar *) "simLongPress", 25470 NULL, 25471 NULL, 25472 NULL 25473 }, 25474 "handle-sim-long-press", 25475 FALSE 25476 }; 25477 25478 static const _ExtendedGDBusMethodInfo * const _button_method_info_pointers[] = 25479 { 25480 &_button_method_info_is_on, 25481 &_button_method_info_sim_press, 25482 &_button_method_info_sim_long_press, 25483 NULL 25484 }; 25485 25486 static const _ExtendedGDBusSignalInfo _button_signal_info_released = 25487 { 25488 { 25489 -1, 25490 (gchar *) "Released", 25491 NULL, 25492 NULL 25493 }, 25494 "released" 25495 }; 25496 25497 static const _ExtendedGDBusSignalInfo _button_signal_info_pressed = 25498 { 25499 { 25500 -1, 25501 (gchar *) "Pressed", 25502 NULL, 25503 NULL 25504 }, 25505 "pressed" 25506 }; 25507 25508 static const _ExtendedGDBusSignalInfo _button_signal_info_pressed_long = 25509 { 25510 { 25511 -1, 25512 (gchar *) "PressedLong", 25513 NULL, 25514 NULL 25515 }, 25516 "pressed-long" 25517 }; 25518 25519 static const _ExtendedGDBusSignalInfo * const _button_signal_info_pointers[] = 25520 { 25521 &_button_signal_info_released, 25522 &_button_signal_info_pressed, 25523 &_button_signal_info_pressed_long, 25524 NULL 25525 }; 25526 25527 static const _ExtendedGDBusPropertyInfo _button_property_info_state = 25528 { 25529 { 25530 -1, 25531 (gchar *) "state", 25532 (gchar *) "b", 25533 G_DBUS_PROPERTY_INFO_FLAGS_READABLE, 25534 NULL 25535 }, 25536 "state", 25537 FALSE 25538 }; 25539 25540 static const _ExtendedGDBusPropertyInfo _button_property_info_timer = 25541 { 25542 { 25543 -1, 25544 (gchar *) "timer", 25545 (gchar *) "t", 25546 G_DBUS_PROPERTY_INFO_FLAGS_READABLE, 25547 NULL 25548 }, 25549 "timer", 25550 FALSE 25551 }; 25552 25553 static const _ExtendedGDBusPropertyInfo * const _button_property_info_pointers[] = 25554 { 25555 &_button_property_info_state, 25556 &_button_property_info_timer, 25557 NULL 25558 }; 25559 25560 static const _ExtendedGDBusInterfaceInfo _button_interface_info = 25561 { 25562 { 25563 -1, 25564 (gchar *) "org.openbmc.Button", 25565 (GDBusMethodInfo **) &_button_method_info_pointers, 25566 (GDBusSignalInfo **) &_button_signal_info_pointers, 25567 (GDBusPropertyInfo **) &_button_property_info_pointers, 25568 NULL 25569 }, 25570 "button", 25571 }; 25572 25573 25574 /** 25575 * button_interface_info: 25576 * 25577 * Gets a machine-readable description of the <link linkend="gdbus-interface-org-openbmc-Button.top_of_page">org.openbmc.Button</link> D-Bus interface. 25578 * 25579 * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free. 25580 */ 25581 GDBusInterfaceInfo * 25582 button_interface_info (void) 25583 { 25584 return (GDBusInterfaceInfo *) &_button_interface_info.parent_struct; 25585 } 25586 25587 /** 25588 * button_override_properties: 25589 * @klass: The class structure for a #GObject<!-- -->-derived class. 25590 * @property_id_begin: The property id to assign to the first overridden property. 25591 * 25592 * Overrides all #GObject properties in the #Button interface for a concrete class. 25593 * The properties are overridden in the order they are defined. 25594 * 25595 * Returns: The last property id. 25596 */ 25597 guint 25598 button_override_properties (GObjectClass *klass, guint property_id_begin) 25599 { 25600 g_object_class_override_property (klass, property_id_begin++, "state"); 25601 g_object_class_override_property (klass, property_id_begin++, "timer"); 25602 return property_id_begin - 1; 25603 } 25604 25605 25606 25607 /** 25608 * Button: 25609 * 25610 * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Button.top_of_page">org.openbmc.Button</link>. 25611 */ 25612 25613 /** 25614 * ButtonIface: 25615 * @parent_iface: The parent interface. 25616 * @handle_is_on: Handler for the #Button::handle-is-on signal. 25617 * @handle_sim_long_press: Handler for the #Button::handle-sim-long-press signal. 25618 * @handle_sim_press: Handler for the #Button::handle-sim-press signal. 25619 * @get_state: Getter for the #Button:state property. 25620 * @get_timer: Getter for the #Button:timer property. 25621 * @pressed: Handler for the #Button::pressed signal. 25622 * @pressed_long: Handler for the #Button::pressed-long signal. 25623 * @released: Handler for the #Button::released signal. 25624 * 25625 * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Button.top_of_page">org.openbmc.Button</link>. 25626 */ 25627 25628 typedef ButtonIface ButtonInterface; 25629 G_DEFINE_INTERFACE (Button, button, G_TYPE_OBJECT); 25630 25631 static void 25632 button_default_init (ButtonIface *iface) 25633 { 25634 /* GObject signals for incoming D-Bus method calls: */ 25635 /** 25636 * Button::handle-is-on: 25637 * @object: A #Button. 25638 * @invocation: A #GDBusMethodInvocation. 25639 * 25640 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-Button.isOn">isOn()</link> D-Bus method. 25641 * 25642 * 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 button_complete_is_on() 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. 25643 * 25644 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 25645 */ 25646 g_signal_new ("handle-is-on", 25647 G_TYPE_FROM_INTERFACE (iface), 25648 G_SIGNAL_RUN_LAST, 25649 G_STRUCT_OFFSET (ButtonIface, handle_is_on), 25650 g_signal_accumulator_true_handled, 25651 NULL, 25652 g_cclosure_marshal_generic, 25653 G_TYPE_BOOLEAN, 25654 1, 25655 G_TYPE_DBUS_METHOD_INVOCATION); 25656 25657 /** 25658 * Button::handle-sim-press: 25659 * @object: A #Button. 25660 * @invocation: A #GDBusMethodInvocation. 25661 * 25662 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-Button.simPress">simPress()</link> D-Bus method. 25663 * 25664 * 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 button_complete_sim_press() 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. 25665 * 25666 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 25667 */ 25668 g_signal_new ("handle-sim-press", 25669 G_TYPE_FROM_INTERFACE (iface), 25670 G_SIGNAL_RUN_LAST, 25671 G_STRUCT_OFFSET (ButtonIface, handle_sim_press), 25672 g_signal_accumulator_true_handled, 25673 NULL, 25674 g_cclosure_marshal_generic, 25675 G_TYPE_BOOLEAN, 25676 1, 25677 G_TYPE_DBUS_METHOD_INVOCATION); 25678 25679 /** 25680 * Button::handle-sim-long-press: 25681 * @object: A #Button. 25682 * @invocation: A #GDBusMethodInvocation. 25683 * 25684 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-Button.simLongPress">simLongPress()</link> D-Bus method. 25685 * 25686 * 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 button_complete_sim_long_press() 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. 25687 * 25688 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 25689 */ 25690 g_signal_new ("handle-sim-long-press", 25691 G_TYPE_FROM_INTERFACE (iface), 25692 G_SIGNAL_RUN_LAST, 25693 G_STRUCT_OFFSET (ButtonIface, handle_sim_long_press), 25694 g_signal_accumulator_true_handled, 25695 NULL, 25696 g_cclosure_marshal_generic, 25697 G_TYPE_BOOLEAN, 25698 1, 25699 G_TYPE_DBUS_METHOD_INVOCATION); 25700 25701 /* GObject signals for received D-Bus signals: */ 25702 /** 25703 * Button::released: 25704 * @object: A #Button. 25705 * 25706 * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-openbmc-Button.Released">"Released"</link> is received. 25707 * 25708 * 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. 25709 */ 25710 g_signal_new ("released", 25711 G_TYPE_FROM_INTERFACE (iface), 25712 G_SIGNAL_RUN_LAST, 25713 G_STRUCT_OFFSET (ButtonIface, released), 25714 NULL, 25715 NULL, 25716 g_cclosure_marshal_generic, 25717 G_TYPE_NONE, 25718 0); 25719 25720 /** 25721 * Button::pressed: 25722 * @object: A #Button. 25723 * 25724 * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-openbmc-Button.Pressed">"Pressed"</link> is received. 25725 * 25726 * 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. 25727 */ 25728 g_signal_new ("pressed", 25729 G_TYPE_FROM_INTERFACE (iface), 25730 G_SIGNAL_RUN_LAST, 25731 G_STRUCT_OFFSET (ButtonIface, pressed), 25732 NULL, 25733 NULL, 25734 g_cclosure_marshal_generic, 25735 G_TYPE_NONE, 25736 0); 25737 25738 /** 25739 * Button::pressed-long: 25740 * @object: A #Button. 25741 * 25742 * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-openbmc-Button.PressedLong">"PressedLong"</link> is received. 25743 * 25744 * 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. 25745 */ 25746 g_signal_new ("pressed-long", 25747 G_TYPE_FROM_INTERFACE (iface), 25748 G_SIGNAL_RUN_LAST, 25749 G_STRUCT_OFFSET (ButtonIface, pressed_long), 25750 NULL, 25751 NULL, 25752 g_cclosure_marshal_generic, 25753 G_TYPE_NONE, 25754 0); 25755 25756 /* GObject properties for D-Bus properties: */ 25757 /** 25758 * Button:state: 25759 * 25760 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-Button.state">"state"</link>. 25761 * 25762 * 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. 25763 */ 25764 g_object_interface_install_property (iface, 25765 g_param_spec_boolean ("state", "state", "state", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 25766 /** 25767 * Button:timer: 25768 * 25769 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-Button.timer">"timer"</link>. 25770 * 25771 * 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. 25772 */ 25773 g_object_interface_install_property (iface, 25774 g_param_spec_uint64 ("timer", "timer", "timer", 0, G_MAXUINT64, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 25775 } 25776 25777 /** 25778 * button_get_state: (skip) 25779 * @object: A #Button. 25780 * 25781 * Gets the value of the <link linkend="gdbus-property-org-openbmc-Button.state">"state"</link> D-Bus property. 25782 * 25783 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 25784 * 25785 * Returns: The property value. 25786 */ 25787 gboolean 25788 button_get_state (Button *object) 25789 { 25790 return BUTTON_GET_IFACE (object)->get_state (object); 25791 } 25792 25793 /** 25794 * button_set_state: (skip) 25795 * @object: A #Button. 25796 * @value: The value to set. 25797 * 25798 * Sets the <link linkend="gdbus-property-org-openbmc-Button.state">"state"</link> D-Bus property to @value. 25799 * 25800 * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side. 25801 */ 25802 void 25803 button_set_state (Button *object, gboolean value) 25804 { 25805 g_object_set (G_OBJECT (object), "state", value, NULL); 25806 } 25807 25808 /** 25809 * button_get_timer: (skip) 25810 * @object: A #Button. 25811 * 25812 * Gets the value of the <link linkend="gdbus-property-org-openbmc-Button.timer">"timer"</link> D-Bus property. 25813 * 25814 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 25815 * 25816 * Returns: The property value. 25817 */ 25818 guint64 25819 button_get_timer (Button *object) 25820 { 25821 return BUTTON_GET_IFACE (object)->get_timer (object); 25822 } 25823 25824 /** 25825 * button_set_timer: (skip) 25826 * @object: A #Button. 25827 * @value: The value to set. 25828 * 25829 * Sets the <link linkend="gdbus-property-org-openbmc-Button.timer">"timer"</link> D-Bus property to @value. 25830 * 25831 * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side. 25832 */ 25833 void 25834 button_set_timer (Button *object, guint64 value) 25835 { 25836 g_object_set (G_OBJECT (object), "timer", value, NULL); 25837 } 25838 25839 /** 25840 * button_emit_released: 25841 * @object: A #Button. 25842 * 25843 * Emits the <link linkend="gdbus-signal-org-openbmc-Button.Released">"Released"</link> D-Bus signal. 25844 */ 25845 void 25846 button_emit_released ( 25847 Button *object) 25848 { 25849 g_signal_emit_by_name (object, "released"); 25850 } 25851 25852 /** 25853 * button_emit_pressed: 25854 * @object: A #Button. 25855 * 25856 * Emits the <link linkend="gdbus-signal-org-openbmc-Button.Pressed">"Pressed"</link> D-Bus signal. 25857 */ 25858 void 25859 button_emit_pressed ( 25860 Button *object) 25861 { 25862 g_signal_emit_by_name (object, "pressed"); 25863 } 25864 25865 /** 25866 * button_emit_pressed_long: 25867 * @object: A #Button. 25868 * 25869 * Emits the <link linkend="gdbus-signal-org-openbmc-Button.PressedLong">"PressedLong"</link> D-Bus signal. 25870 */ 25871 void 25872 button_emit_pressed_long ( 25873 Button *object) 25874 { 25875 g_signal_emit_by_name (object, "pressed-long"); 25876 } 25877 25878 /** 25879 * button_call_is_on: 25880 * @proxy: A #ButtonProxy. 25881 * @cancellable: (allow-none): A #GCancellable or %NULL. 25882 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 25883 * @user_data: User data to pass to @callback. 25884 * 25885 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-Button.isOn">isOn()</link> D-Bus method on @proxy. 25886 * 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. 25887 * You can then call button_call_is_on_finish() to get the result of the operation. 25888 * 25889 * See button_call_is_on_sync() for the synchronous, blocking version of this method. 25890 */ 25891 void 25892 button_call_is_on ( 25893 Button *proxy, 25894 GCancellable *cancellable, 25895 GAsyncReadyCallback callback, 25896 gpointer user_data) 25897 { 25898 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 25899 "isOn", 25900 g_variant_new ("()"), 25901 G_DBUS_CALL_FLAGS_NONE, 25902 -1, 25903 cancellable, 25904 callback, 25905 user_data); 25906 } 25907 25908 /** 25909 * button_call_is_on_finish: 25910 * @proxy: A #ButtonProxy. 25911 * @out_state: (out): Return location for return parameter or %NULL to ignore. 25912 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to button_call_is_on(). 25913 * @error: Return location for error or %NULL. 25914 * 25915 * Finishes an operation started with button_call_is_on(). 25916 * 25917 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 25918 */ 25919 gboolean 25920 button_call_is_on_finish ( 25921 Button *proxy, 25922 gboolean *out_state, 25923 GAsyncResult *res, 25924 GError **error) 25925 { 25926 GVariant *_ret; 25927 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 25928 if (_ret == NULL) 25929 goto _out; 25930 g_variant_get (_ret, 25931 "(b)", 25932 out_state); 25933 g_variant_unref (_ret); 25934 _out: 25935 return _ret != NULL; 25936 } 25937 25938 /** 25939 * button_call_is_on_sync: 25940 * @proxy: A #ButtonProxy. 25941 * @out_state: (out): Return location for return parameter or %NULL to ignore. 25942 * @cancellable: (allow-none): A #GCancellable or %NULL. 25943 * @error: Return location for error or %NULL. 25944 * 25945 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-Button.isOn">isOn()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 25946 * 25947 * See button_call_is_on() for the asynchronous version of this method. 25948 * 25949 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 25950 */ 25951 gboolean 25952 button_call_is_on_sync ( 25953 Button *proxy, 25954 gboolean *out_state, 25955 GCancellable *cancellable, 25956 GError **error) 25957 { 25958 GVariant *_ret; 25959 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 25960 "isOn", 25961 g_variant_new ("()"), 25962 G_DBUS_CALL_FLAGS_NONE, 25963 -1, 25964 cancellable, 25965 error); 25966 if (_ret == NULL) 25967 goto _out; 25968 g_variant_get (_ret, 25969 "(b)", 25970 out_state); 25971 g_variant_unref (_ret); 25972 _out: 25973 return _ret != NULL; 25974 } 25975 25976 /** 25977 * button_call_sim_press: 25978 * @proxy: A #ButtonProxy. 25979 * @cancellable: (allow-none): A #GCancellable or %NULL. 25980 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 25981 * @user_data: User data to pass to @callback. 25982 * 25983 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-Button.simPress">simPress()</link> D-Bus method on @proxy. 25984 * 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. 25985 * You can then call button_call_sim_press_finish() to get the result of the operation. 25986 * 25987 * See button_call_sim_press_sync() for the synchronous, blocking version of this method. 25988 */ 25989 void 25990 button_call_sim_press ( 25991 Button *proxy, 25992 GCancellable *cancellable, 25993 GAsyncReadyCallback callback, 25994 gpointer user_data) 25995 { 25996 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 25997 "simPress", 25998 g_variant_new ("()"), 25999 G_DBUS_CALL_FLAGS_NONE, 26000 -1, 26001 cancellable, 26002 callback, 26003 user_data); 26004 } 26005 26006 /** 26007 * button_call_sim_press_finish: 26008 * @proxy: A #ButtonProxy. 26009 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to button_call_sim_press(). 26010 * @error: Return location for error or %NULL. 26011 * 26012 * Finishes an operation started with button_call_sim_press(). 26013 * 26014 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 26015 */ 26016 gboolean 26017 button_call_sim_press_finish ( 26018 Button *proxy, 26019 GAsyncResult *res, 26020 GError **error) 26021 { 26022 GVariant *_ret; 26023 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 26024 if (_ret == NULL) 26025 goto _out; 26026 g_variant_get (_ret, 26027 "()"); 26028 g_variant_unref (_ret); 26029 _out: 26030 return _ret != NULL; 26031 } 26032 26033 /** 26034 * button_call_sim_press_sync: 26035 * @proxy: A #ButtonProxy. 26036 * @cancellable: (allow-none): A #GCancellable or %NULL. 26037 * @error: Return location for error or %NULL. 26038 * 26039 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-Button.simPress">simPress()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 26040 * 26041 * See button_call_sim_press() for the asynchronous version of this method. 26042 * 26043 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 26044 */ 26045 gboolean 26046 button_call_sim_press_sync ( 26047 Button *proxy, 26048 GCancellable *cancellable, 26049 GError **error) 26050 { 26051 GVariant *_ret; 26052 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 26053 "simPress", 26054 g_variant_new ("()"), 26055 G_DBUS_CALL_FLAGS_NONE, 26056 -1, 26057 cancellable, 26058 error); 26059 if (_ret == NULL) 26060 goto _out; 26061 g_variant_get (_ret, 26062 "()"); 26063 g_variant_unref (_ret); 26064 _out: 26065 return _ret != NULL; 26066 } 26067 26068 /** 26069 * button_call_sim_long_press: 26070 * @proxy: A #ButtonProxy. 26071 * @cancellable: (allow-none): A #GCancellable or %NULL. 26072 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 26073 * @user_data: User data to pass to @callback. 26074 * 26075 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-Button.simLongPress">simLongPress()</link> D-Bus method on @proxy. 26076 * 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. 26077 * You can then call button_call_sim_long_press_finish() to get the result of the operation. 26078 * 26079 * See button_call_sim_long_press_sync() for the synchronous, blocking version of this method. 26080 */ 26081 void 26082 button_call_sim_long_press ( 26083 Button *proxy, 26084 GCancellable *cancellable, 26085 GAsyncReadyCallback callback, 26086 gpointer user_data) 26087 { 26088 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 26089 "simLongPress", 26090 g_variant_new ("()"), 26091 G_DBUS_CALL_FLAGS_NONE, 26092 -1, 26093 cancellable, 26094 callback, 26095 user_data); 26096 } 26097 26098 /** 26099 * button_call_sim_long_press_finish: 26100 * @proxy: A #ButtonProxy. 26101 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to button_call_sim_long_press(). 26102 * @error: Return location for error or %NULL. 26103 * 26104 * Finishes an operation started with button_call_sim_long_press(). 26105 * 26106 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 26107 */ 26108 gboolean 26109 button_call_sim_long_press_finish ( 26110 Button *proxy, 26111 GAsyncResult *res, 26112 GError **error) 26113 { 26114 GVariant *_ret; 26115 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 26116 if (_ret == NULL) 26117 goto _out; 26118 g_variant_get (_ret, 26119 "()"); 26120 g_variant_unref (_ret); 26121 _out: 26122 return _ret != NULL; 26123 } 26124 26125 /** 26126 * button_call_sim_long_press_sync: 26127 * @proxy: A #ButtonProxy. 26128 * @cancellable: (allow-none): A #GCancellable or %NULL. 26129 * @error: Return location for error or %NULL. 26130 * 26131 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-Button.simLongPress">simLongPress()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 26132 * 26133 * See button_call_sim_long_press() for the asynchronous version of this method. 26134 * 26135 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 26136 */ 26137 gboolean 26138 button_call_sim_long_press_sync ( 26139 Button *proxy, 26140 GCancellable *cancellable, 26141 GError **error) 26142 { 26143 GVariant *_ret; 26144 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 26145 "simLongPress", 26146 g_variant_new ("()"), 26147 G_DBUS_CALL_FLAGS_NONE, 26148 -1, 26149 cancellable, 26150 error); 26151 if (_ret == NULL) 26152 goto _out; 26153 g_variant_get (_ret, 26154 "()"); 26155 g_variant_unref (_ret); 26156 _out: 26157 return _ret != NULL; 26158 } 26159 26160 /** 26161 * button_complete_is_on: 26162 * @object: A #Button. 26163 * @invocation: (transfer full): A #GDBusMethodInvocation. 26164 * @state: Parameter to return. 26165 * 26166 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-Button.isOn">isOn()</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. 26167 * 26168 * This method will free @invocation, you cannot use it afterwards. 26169 */ 26170 void 26171 button_complete_is_on ( 26172 Button *object, 26173 GDBusMethodInvocation *invocation, 26174 gboolean state) 26175 { 26176 g_dbus_method_invocation_return_value (invocation, 26177 g_variant_new ("(b)", 26178 state)); 26179 } 26180 26181 /** 26182 * button_complete_sim_press: 26183 * @object: A #Button. 26184 * @invocation: (transfer full): A #GDBusMethodInvocation. 26185 * 26186 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-Button.simPress">simPress()</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. 26187 * 26188 * This method will free @invocation, you cannot use it afterwards. 26189 */ 26190 void 26191 button_complete_sim_press ( 26192 Button *object, 26193 GDBusMethodInvocation *invocation) 26194 { 26195 g_dbus_method_invocation_return_value (invocation, 26196 g_variant_new ("()")); 26197 } 26198 26199 /** 26200 * button_complete_sim_long_press: 26201 * @object: A #Button. 26202 * @invocation: (transfer full): A #GDBusMethodInvocation. 26203 * 26204 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-Button.simLongPress">simLongPress()</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. 26205 * 26206 * This method will free @invocation, you cannot use it afterwards. 26207 */ 26208 void 26209 button_complete_sim_long_press ( 26210 Button *object, 26211 GDBusMethodInvocation *invocation) 26212 { 26213 g_dbus_method_invocation_return_value (invocation, 26214 g_variant_new ("()")); 26215 } 26216 26217 /* ------------------------------------------------------------------------ */ 26218 26219 /** 26220 * ButtonProxy: 26221 * 26222 * The #ButtonProxy structure contains only private data and should only be accessed using the provided API. 26223 */ 26224 26225 /** 26226 * ButtonProxyClass: 26227 * @parent_class: The parent class. 26228 * 26229 * Class structure for #ButtonProxy. 26230 */ 26231 26232 struct _ButtonProxyPrivate 26233 { 26234 GData *qdata; 26235 }; 26236 26237 static void button_proxy_iface_init (ButtonIface *iface); 26238 26239 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 26240 G_DEFINE_TYPE_WITH_CODE (ButtonProxy, button_proxy, G_TYPE_DBUS_PROXY, 26241 G_ADD_PRIVATE (ButtonProxy) 26242 G_IMPLEMENT_INTERFACE (TYPE_BUTTON, button_proxy_iface_init)); 26243 26244 #else 26245 G_DEFINE_TYPE_WITH_CODE (ButtonProxy, button_proxy, G_TYPE_DBUS_PROXY, 26246 G_IMPLEMENT_INTERFACE (TYPE_BUTTON, button_proxy_iface_init)); 26247 26248 #endif 26249 static void 26250 button_proxy_finalize (GObject *object) 26251 { 26252 ButtonProxy *proxy = BUTTON_PROXY (object); 26253 g_datalist_clear (&proxy->priv->qdata); 26254 G_OBJECT_CLASS (button_proxy_parent_class)->finalize (object); 26255 } 26256 26257 static void 26258 button_proxy_get_property (GObject *object, 26259 guint prop_id, 26260 GValue *value, 26261 GParamSpec *pspec G_GNUC_UNUSED) 26262 { 26263 const _ExtendedGDBusPropertyInfo *info; 26264 GVariant *variant; 26265 g_assert (prop_id != 0 && prop_id - 1 < 2); 26266 info = _button_property_info_pointers[prop_id - 1]; 26267 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (object), info->parent_struct.name); 26268 if (info->use_gvariant) 26269 { 26270 g_value_set_variant (value, variant); 26271 } 26272 else 26273 { 26274 if (variant != NULL) 26275 g_dbus_gvariant_to_gvalue (variant, value); 26276 } 26277 if (variant != NULL) 26278 g_variant_unref (variant); 26279 } 26280 26281 static void 26282 button_proxy_set_property_cb (GDBusProxy *proxy, 26283 GAsyncResult *res, 26284 gpointer user_data) 26285 { 26286 const _ExtendedGDBusPropertyInfo *info = user_data; 26287 GError *error; 26288 GVariant *_ret; 26289 error = NULL; 26290 _ret = g_dbus_proxy_call_finish (proxy, res, &error); 26291 if (!_ret) 26292 { 26293 g_warning ("Error setting property '%s' on interface org.openbmc.Button: %s (%s, %d)", 26294 info->parent_struct.name, 26295 error->message, g_quark_to_string (error->domain), error->code); 26296 g_error_free (error); 26297 } 26298 else 26299 { 26300 g_variant_unref (_ret); 26301 } 26302 } 26303 26304 static void 26305 button_proxy_set_property (GObject *object, 26306 guint prop_id, 26307 const GValue *value, 26308 GParamSpec *pspec G_GNUC_UNUSED) 26309 { 26310 const _ExtendedGDBusPropertyInfo *info; 26311 GVariant *variant; 26312 g_assert (prop_id != 0 && prop_id - 1 < 2); 26313 info = _button_property_info_pointers[prop_id - 1]; 26314 variant = g_dbus_gvalue_to_gvariant (value, G_VARIANT_TYPE (info->parent_struct.signature)); 26315 g_dbus_proxy_call (G_DBUS_PROXY (object), 26316 "org.freedesktop.DBus.Properties.Set", 26317 g_variant_new ("(ssv)", "org.openbmc.Button", info->parent_struct.name, variant), 26318 G_DBUS_CALL_FLAGS_NONE, 26319 -1, 26320 NULL, (GAsyncReadyCallback) button_proxy_set_property_cb, (GDBusPropertyInfo *) &info->parent_struct); 26321 g_variant_unref (variant); 26322 } 26323 26324 static void 26325 button_proxy_g_signal (GDBusProxy *proxy, 26326 const gchar *sender_name G_GNUC_UNUSED, 26327 const gchar *signal_name, 26328 GVariant *parameters) 26329 { 26330 _ExtendedGDBusSignalInfo *info; 26331 GVariantIter iter; 26332 GVariant *child; 26333 GValue *paramv; 26334 guint num_params; 26335 guint n; 26336 guint signal_id; 26337 info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_button_interface_info.parent_struct, signal_name); 26338 if (info == NULL) 26339 return; 26340 num_params = g_variant_n_children (parameters); 26341 paramv = g_new0 (GValue, num_params + 1); 26342 g_value_init (¶mv[0], TYPE_BUTTON); 26343 g_value_set_object (¶mv[0], proxy); 26344 g_variant_iter_init (&iter, parameters); 26345 n = 1; 26346 while ((child = g_variant_iter_next_value (&iter)) != NULL) 26347 { 26348 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1]; 26349 if (arg_info->use_gvariant) 26350 { 26351 g_value_init (¶mv[n], G_TYPE_VARIANT); 26352 g_value_set_variant (¶mv[n], child); 26353 n++; 26354 } 26355 else 26356 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 26357 g_variant_unref (child); 26358 } 26359 signal_id = g_signal_lookup (info->signal_name, TYPE_BUTTON); 26360 g_signal_emitv (paramv, signal_id, 0, NULL); 26361 for (n = 0; n < num_params + 1; n++) 26362 g_value_unset (¶mv[n]); 26363 g_free (paramv); 26364 } 26365 26366 static void 26367 button_proxy_g_properties_changed (GDBusProxy *_proxy, 26368 GVariant *changed_properties, 26369 const gchar *const *invalidated_properties) 26370 { 26371 ButtonProxy *proxy = BUTTON_PROXY (_proxy); 26372 guint n; 26373 const gchar *key; 26374 GVariantIter *iter; 26375 _ExtendedGDBusPropertyInfo *info; 26376 g_variant_get (changed_properties, "a{sv}", &iter); 26377 while (g_variant_iter_next (iter, "{&sv}", &key, NULL)) 26378 { 26379 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_button_interface_info.parent_struct, key); 26380 g_datalist_remove_data (&proxy->priv->qdata, key); 26381 if (info != NULL) 26382 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 26383 } 26384 g_variant_iter_free (iter); 26385 for (n = 0; invalidated_properties[n] != NULL; n++) 26386 { 26387 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_button_interface_info.parent_struct, invalidated_properties[n]); 26388 g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]); 26389 if (info != NULL) 26390 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 26391 } 26392 } 26393 26394 static gboolean 26395 button_proxy_get_state (Button *object) 26396 { 26397 ButtonProxy *proxy = BUTTON_PROXY (object); 26398 GVariant *variant; 26399 gboolean value = 0; 26400 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "state"); 26401 if (variant != NULL) 26402 { 26403 value = g_variant_get_boolean (variant); 26404 g_variant_unref (variant); 26405 } 26406 return value; 26407 } 26408 26409 static guint64 26410 button_proxy_get_timer (Button *object) 26411 { 26412 ButtonProxy *proxy = BUTTON_PROXY (object); 26413 GVariant *variant; 26414 guint64 value = 0; 26415 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "timer"); 26416 if (variant != NULL) 26417 { 26418 value = g_variant_get_uint64 (variant); 26419 g_variant_unref (variant); 26420 } 26421 return value; 26422 } 26423 26424 static void 26425 button_proxy_init (ButtonProxy *proxy) 26426 { 26427 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 26428 proxy->priv = button_proxy_get_instance_private (proxy); 26429 #else 26430 proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, TYPE_BUTTON_PROXY, ButtonProxyPrivate); 26431 #endif 26432 26433 g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), button_interface_info ()); 26434 } 26435 26436 static void 26437 button_proxy_class_init (ButtonProxyClass *klass) 26438 { 26439 GObjectClass *gobject_class; 26440 GDBusProxyClass *proxy_class; 26441 26442 gobject_class = G_OBJECT_CLASS (klass); 26443 gobject_class->finalize = button_proxy_finalize; 26444 gobject_class->get_property = button_proxy_get_property; 26445 gobject_class->set_property = button_proxy_set_property; 26446 26447 proxy_class = G_DBUS_PROXY_CLASS (klass); 26448 proxy_class->g_signal = button_proxy_g_signal; 26449 proxy_class->g_properties_changed = button_proxy_g_properties_changed; 26450 26451 button_override_properties (gobject_class, 1); 26452 26453 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 26454 g_type_class_add_private (klass, sizeof (ButtonProxyPrivate)); 26455 #endif 26456 } 26457 26458 static void 26459 button_proxy_iface_init (ButtonIface *iface) 26460 { 26461 iface->get_state = button_proxy_get_state; 26462 iface->get_timer = button_proxy_get_timer; 26463 } 26464 26465 /** 26466 * button_proxy_new: 26467 * @connection: A #GDBusConnection. 26468 * @flags: Flags from the #GDBusProxyFlags enumeration. 26469 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 26470 * @object_path: An object path. 26471 * @cancellable: (allow-none): A #GCancellable or %NULL. 26472 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 26473 * @user_data: User data to pass to @callback. 26474 * 26475 * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Button.top_of_page">org.openbmc.Button</link>. See g_dbus_proxy_new() for more details. 26476 * 26477 * 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. 26478 * You can then call button_proxy_new_finish() to get the result of the operation. 26479 * 26480 * See button_proxy_new_sync() for the synchronous, blocking version of this constructor. 26481 */ 26482 void 26483 button_proxy_new ( 26484 GDBusConnection *connection, 26485 GDBusProxyFlags flags, 26486 const gchar *name, 26487 const gchar *object_path, 26488 GCancellable *cancellable, 26489 GAsyncReadyCallback callback, 26490 gpointer user_data) 26491 { 26492 g_async_initable_new_async (TYPE_BUTTON_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.Button", NULL); 26493 } 26494 26495 /** 26496 * button_proxy_new_finish: 26497 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to button_proxy_new(). 26498 * @error: Return location for error or %NULL 26499 * 26500 * Finishes an operation started with button_proxy_new(). 26501 * 26502 * Returns: (transfer full) (type ButtonProxy): The constructed proxy object or %NULL if @error is set. 26503 */ 26504 Button * 26505 button_proxy_new_finish ( 26506 GAsyncResult *res, 26507 GError **error) 26508 { 26509 GObject *ret; 26510 GObject *source_object; 26511 source_object = g_async_result_get_source_object (res); 26512 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 26513 g_object_unref (source_object); 26514 if (ret != NULL) 26515 return BUTTON (ret); 26516 else 26517 return NULL; 26518 } 26519 26520 /** 26521 * button_proxy_new_sync: 26522 * @connection: A #GDBusConnection. 26523 * @flags: Flags from the #GDBusProxyFlags enumeration. 26524 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 26525 * @object_path: An object path. 26526 * @cancellable: (allow-none): A #GCancellable or %NULL. 26527 * @error: Return location for error or %NULL 26528 * 26529 * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Button.top_of_page">org.openbmc.Button</link>. See g_dbus_proxy_new_sync() for more details. 26530 * 26531 * The calling thread is blocked until a reply is received. 26532 * 26533 * See button_proxy_new() for the asynchronous version of this constructor. 26534 * 26535 * Returns: (transfer full) (type ButtonProxy): The constructed proxy object or %NULL if @error is set. 26536 */ 26537 Button * 26538 button_proxy_new_sync ( 26539 GDBusConnection *connection, 26540 GDBusProxyFlags flags, 26541 const gchar *name, 26542 const gchar *object_path, 26543 GCancellable *cancellable, 26544 GError **error) 26545 { 26546 GInitable *ret; 26547 ret = g_initable_new (TYPE_BUTTON_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.Button", NULL); 26548 if (ret != NULL) 26549 return BUTTON (ret); 26550 else 26551 return NULL; 26552 } 26553 26554 26555 /** 26556 * button_proxy_new_for_bus: 26557 * @bus_type: A #GBusType. 26558 * @flags: Flags from the #GDBusProxyFlags enumeration. 26559 * @name: A bus name (well-known or unique). 26560 * @object_path: An object path. 26561 * @cancellable: (allow-none): A #GCancellable or %NULL. 26562 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 26563 * @user_data: User data to pass to @callback. 26564 * 26565 * Like button_proxy_new() but takes a #GBusType instead of a #GDBusConnection. 26566 * 26567 * 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. 26568 * You can then call button_proxy_new_for_bus_finish() to get the result of the operation. 26569 * 26570 * See button_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor. 26571 */ 26572 void 26573 button_proxy_new_for_bus ( 26574 GBusType bus_type, 26575 GDBusProxyFlags flags, 26576 const gchar *name, 26577 const gchar *object_path, 26578 GCancellable *cancellable, 26579 GAsyncReadyCallback callback, 26580 gpointer user_data) 26581 { 26582 g_async_initable_new_async (TYPE_BUTTON_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.Button", NULL); 26583 } 26584 26585 /** 26586 * button_proxy_new_for_bus_finish: 26587 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to button_proxy_new_for_bus(). 26588 * @error: Return location for error or %NULL 26589 * 26590 * Finishes an operation started with button_proxy_new_for_bus(). 26591 * 26592 * Returns: (transfer full) (type ButtonProxy): The constructed proxy object or %NULL if @error is set. 26593 */ 26594 Button * 26595 button_proxy_new_for_bus_finish ( 26596 GAsyncResult *res, 26597 GError **error) 26598 { 26599 GObject *ret; 26600 GObject *source_object; 26601 source_object = g_async_result_get_source_object (res); 26602 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 26603 g_object_unref (source_object); 26604 if (ret != NULL) 26605 return BUTTON (ret); 26606 else 26607 return NULL; 26608 } 26609 26610 /** 26611 * button_proxy_new_for_bus_sync: 26612 * @bus_type: A #GBusType. 26613 * @flags: Flags from the #GDBusProxyFlags enumeration. 26614 * @name: A bus name (well-known or unique). 26615 * @object_path: An object path. 26616 * @cancellable: (allow-none): A #GCancellable or %NULL. 26617 * @error: Return location for error or %NULL 26618 * 26619 * Like button_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection. 26620 * 26621 * The calling thread is blocked until a reply is received. 26622 * 26623 * See button_proxy_new_for_bus() for the asynchronous version of this constructor. 26624 * 26625 * Returns: (transfer full) (type ButtonProxy): The constructed proxy object or %NULL if @error is set. 26626 */ 26627 Button * 26628 button_proxy_new_for_bus_sync ( 26629 GBusType bus_type, 26630 GDBusProxyFlags flags, 26631 const gchar *name, 26632 const gchar *object_path, 26633 GCancellable *cancellable, 26634 GError **error) 26635 { 26636 GInitable *ret; 26637 ret = g_initable_new (TYPE_BUTTON_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.Button", NULL); 26638 if (ret != NULL) 26639 return BUTTON (ret); 26640 else 26641 return NULL; 26642 } 26643 26644 26645 /* ------------------------------------------------------------------------ */ 26646 26647 /** 26648 * ButtonSkeleton: 26649 * 26650 * The #ButtonSkeleton structure contains only private data and should only be accessed using the provided API. 26651 */ 26652 26653 /** 26654 * ButtonSkeletonClass: 26655 * @parent_class: The parent class. 26656 * 26657 * Class structure for #ButtonSkeleton. 26658 */ 26659 26660 struct _ButtonSkeletonPrivate 26661 { 26662 GValue *properties; 26663 GList *changed_properties; 26664 GSource *changed_properties_idle_source; 26665 GMainContext *context; 26666 GMutex lock; 26667 }; 26668 26669 static void 26670 _button_skeleton_handle_method_call ( 26671 GDBusConnection *connection G_GNUC_UNUSED, 26672 const gchar *sender G_GNUC_UNUSED, 26673 const gchar *object_path G_GNUC_UNUSED, 26674 const gchar *interface_name, 26675 const gchar *method_name, 26676 GVariant *parameters, 26677 GDBusMethodInvocation *invocation, 26678 gpointer user_data) 26679 { 26680 ButtonSkeleton *skeleton = BUTTON_SKELETON (user_data); 26681 _ExtendedGDBusMethodInfo *info; 26682 GVariantIter iter; 26683 GVariant *child; 26684 GValue *paramv; 26685 guint num_params; 26686 guint num_extra; 26687 guint n; 26688 guint signal_id; 26689 GValue return_value = G_VALUE_INIT; 26690 info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation); 26691 g_assert (info != NULL); 26692 num_params = g_variant_n_children (parameters); 26693 num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra); 26694 n = 0; 26695 g_value_init (¶mv[n], TYPE_BUTTON); 26696 g_value_set_object (¶mv[n++], skeleton); 26697 g_value_init (¶mv[n], G_TYPE_DBUS_METHOD_INVOCATION); 26698 g_value_set_object (¶mv[n++], invocation); 26699 if (info->pass_fdlist) 26700 { 26701 #ifdef G_OS_UNIX 26702 g_value_init (¶mv[n], G_TYPE_UNIX_FD_LIST); 26703 g_value_set_object (¶mv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation))); 26704 #else 26705 g_assert_not_reached (); 26706 #endif 26707 } 26708 g_variant_iter_init (&iter, parameters); 26709 while ((child = g_variant_iter_next_value (&iter)) != NULL) 26710 { 26711 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra]; 26712 if (arg_info->use_gvariant) 26713 { 26714 g_value_init (¶mv[n], G_TYPE_VARIANT); 26715 g_value_set_variant (¶mv[n], child); 26716 n++; 26717 } 26718 else 26719 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 26720 g_variant_unref (child); 26721 } 26722 signal_id = g_signal_lookup (info->signal_name, TYPE_BUTTON); 26723 g_value_init (&return_value, G_TYPE_BOOLEAN); 26724 g_signal_emitv (paramv, signal_id, 0, &return_value); 26725 if (!g_value_get_boolean (&return_value)) 26726 g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name); 26727 g_value_unset (&return_value); 26728 for (n = 0; n < num_params + num_extra; n++) 26729 g_value_unset (¶mv[n]); 26730 g_free (paramv); 26731 } 26732 26733 static GVariant * 26734 _button_skeleton_handle_get_property ( 26735 GDBusConnection *connection G_GNUC_UNUSED, 26736 const gchar *sender G_GNUC_UNUSED, 26737 const gchar *object_path G_GNUC_UNUSED, 26738 const gchar *interface_name G_GNUC_UNUSED, 26739 const gchar *property_name, 26740 GError **error, 26741 gpointer user_data) 26742 { 26743 ButtonSkeleton *skeleton = BUTTON_SKELETON (user_data); 26744 GValue value = G_VALUE_INIT; 26745 GParamSpec *pspec; 26746 _ExtendedGDBusPropertyInfo *info; 26747 GVariant *ret; 26748 ret = NULL; 26749 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_button_interface_info.parent_struct, property_name); 26750 g_assert (info != NULL); 26751 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 26752 if (pspec == NULL) 26753 { 26754 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 26755 } 26756 else 26757 { 26758 g_value_init (&value, pspec->value_type); 26759 g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value); 26760 ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature)); 26761 g_value_unset (&value); 26762 } 26763 return ret; 26764 } 26765 26766 static gboolean 26767 _button_skeleton_handle_set_property ( 26768 GDBusConnection *connection G_GNUC_UNUSED, 26769 const gchar *sender G_GNUC_UNUSED, 26770 const gchar *object_path G_GNUC_UNUSED, 26771 const gchar *interface_name G_GNUC_UNUSED, 26772 const gchar *property_name, 26773 GVariant *variant, 26774 GError **error, 26775 gpointer user_data) 26776 { 26777 ButtonSkeleton *skeleton = BUTTON_SKELETON (user_data); 26778 GValue value = G_VALUE_INIT; 26779 GParamSpec *pspec; 26780 _ExtendedGDBusPropertyInfo *info; 26781 gboolean ret; 26782 ret = FALSE; 26783 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_button_interface_info.parent_struct, property_name); 26784 g_assert (info != NULL); 26785 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 26786 if (pspec == NULL) 26787 { 26788 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 26789 } 26790 else 26791 { 26792 if (info->use_gvariant) 26793 g_value_set_variant (&value, variant); 26794 else 26795 g_dbus_gvariant_to_gvalue (variant, &value); 26796 g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value); 26797 g_value_unset (&value); 26798 ret = TRUE; 26799 } 26800 return ret; 26801 } 26802 26803 static const GDBusInterfaceVTable _button_skeleton_vtable = 26804 { 26805 _button_skeleton_handle_method_call, 26806 _button_skeleton_handle_get_property, 26807 _button_skeleton_handle_set_property, 26808 {NULL} 26809 }; 26810 26811 static GDBusInterfaceInfo * 26812 button_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 26813 { 26814 return button_interface_info (); 26815 } 26816 26817 static GDBusInterfaceVTable * 26818 button_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 26819 { 26820 return (GDBusInterfaceVTable *) &_button_skeleton_vtable; 26821 } 26822 26823 static GVariant * 26824 button_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton) 26825 { 26826 ButtonSkeleton *skeleton = BUTTON_SKELETON (_skeleton); 26827 26828 GVariantBuilder builder; 26829 guint n; 26830 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 26831 if (_button_interface_info.parent_struct.properties == NULL) 26832 goto out; 26833 for (n = 0; _button_interface_info.parent_struct.properties[n] != NULL; n++) 26834 { 26835 GDBusPropertyInfo *info = _button_interface_info.parent_struct.properties[n]; 26836 if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE) 26837 { 26838 GVariant *value; 26839 value = _button_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.Button", info->name, NULL, skeleton); 26840 if (value != NULL) 26841 { 26842 g_variant_take_ref (value); 26843 g_variant_builder_add (&builder, "{sv}", info->name, value); 26844 g_variant_unref (value); 26845 } 26846 } 26847 } 26848 out: 26849 return g_variant_builder_end (&builder); 26850 } 26851 26852 static gboolean _button_emit_changed (gpointer user_data); 26853 26854 static void 26855 button_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton) 26856 { 26857 ButtonSkeleton *skeleton = BUTTON_SKELETON (_skeleton); 26858 gboolean emit_changed = FALSE; 26859 26860 g_mutex_lock (&skeleton->priv->lock); 26861 if (skeleton->priv->changed_properties_idle_source != NULL) 26862 { 26863 g_source_destroy (skeleton->priv->changed_properties_idle_source); 26864 skeleton->priv->changed_properties_idle_source = NULL; 26865 emit_changed = TRUE; 26866 } 26867 g_mutex_unlock (&skeleton->priv->lock); 26868 26869 if (emit_changed) 26870 _button_emit_changed (skeleton); 26871 } 26872 26873 static void 26874 _button_on_signal_released ( 26875 Button *object) 26876 { 26877 ButtonSkeleton *skeleton = BUTTON_SKELETON (object); 26878 26879 GList *connections, *l; 26880 GVariant *signal_variant; 26881 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 26882 26883 signal_variant = g_variant_ref_sink (g_variant_new ("()")); 26884 for (l = connections; l != NULL; l = l->next) 26885 { 26886 GDBusConnection *connection = l->data; 26887 g_dbus_connection_emit_signal (connection, 26888 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.Button", "Released", 26889 signal_variant, NULL); 26890 } 26891 g_variant_unref (signal_variant); 26892 g_list_free_full (connections, g_object_unref); 26893 } 26894 26895 static void 26896 _button_on_signal_pressed ( 26897 Button *object) 26898 { 26899 ButtonSkeleton *skeleton = BUTTON_SKELETON (object); 26900 26901 GList *connections, *l; 26902 GVariant *signal_variant; 26903 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 26904 26905 signal_variant = g_variant_ref_sink (g_variant_new ("()")); 26906 for (l = connections; l != NULL; l = l->next) 26907 { 26908 GDBusConnection *connection = l->data; 26909 g_dbus_connection_emit_signal (connection, 26910 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.Button", "Pressed", 26911 signal_variant, NULL); 26912 } 26913 g_variant_unref (signal_variant); 26914 g_list_free_full (connections, g_object_unref); 26915 } 26916 26917 static void 26918 _button_on_signal_pressed_long ( 26919 Button *object) 26920 { 26921 ButtonSkeleton *skeleton = BUTTON_SKELETON (object); 26922 26923 GList *connections, *l; 26924 GVariant *signal_variant; 26925 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 26926 26927 signal_variant = g_variant_ref_sink (g_variant_new ("()")); 26928 for (l = connections; l != NULL; l = l->next) 26929 { 26930 GDBusConnection *connection = l->data; 26931 g_dbus_connection_emit_signal (connection, 26932 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.Button", "PressedLong", 26933 signal_variant, NULL); 26934 } 26935 g_variant_unref (signal_variant); 26936 g_list_free_full (connections, g_object_unref); 26937 } 26938 26939 static void button_skeleton_iface_init (ButtonIface *iface); 26940 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 26941 G_DEFINE_TYPE_WITH_CODE (ButtonSkeleton, button_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 26942 G_ADD_PRIVATE (ButtonSkeleton) 26943 G_IMPLEMENT_INTERFACE (TYPE_BUTTON, button_skeleton_iface_init)); 26944 26945 #else 26946 G_DEFINE_TYPE_WITH_CODE (ButtonSkeleton, button_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 26947 G_IMPLEMENT_INTERFACE (TYPE_BUTTON, button_skeleton_iface_init)); 26948 26949 #endif 26950 static void 26951 button_skeleton_finalize (GObject *object) 26952 { 26953 ButtonSkeleton *skeleton = BUTTON_SKELETON (object); 26954 guint n; 26955 for (n = 0; n < 2; n++) 26956 g_value_unset (&skeleton->priv->properties[n]); 26957 g_free (skeleton->priv->properties); 26958 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 26959 if (skeleton->priv->changed_properties_idle_source != NULL) 26960 g_source_destroy (skeleton->priv->changed_properties_idle_source); 26961 g_main_context_unref (skeleton->priv->context); 26962 g_mutex_clear (&skeleton->priv->lock); 26963 G_OBJECT_CLASS (button_skeleton_parent_class)->finalize (object); 26964 } 26965 26966 static void 26967 button_skeleton_get_property (GObject *object, 26968 guint prop_id, 26969 GValue *value, 26970 GParamSpec *pspec G_GNUC_UNUSED) 26971 { 26972 ButtonSkeleton *skeleton = BUTTON_SKELETON (object); 26973 g_assert (prop_id != 0 && prop_id - 1 < 2); 26974 g_mutex_lock (&skeleton->priv->lock); 26975 g_value_copy (&skeleton->priv->properties[prop_id - 1], value); 26976 g_mutex_unlock (&skeleton->priv->lock); 26977 } 26978 26979 static gboolean 26980 _button_emit_changed (gpointer user_data) 26981 { 26982 ButtonSkeleton *skeleton = BUTTON_SKELETON (user_data); 26983 GList *l; 26984 GVariantBuilder builder; 26985 GVariantBuilder invalidated_builder; 26986 guint num_changes; 26987 26988 g_mutex_lock (&skeleton->priv->lock); 26989 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 26990 g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as")); 26991 for (l = skeleton->priv->changed_properties, num_changes = 0; l != NULL; l = l->next) 26992 { 26993 ChangedProperty *cp = l->data; 26994 GVariant *variant; 26995 const GValue *cur_value; 26996 26997 cur_value = &skeleton->priv->properties[cp->prop_id - 1]; 26998 if (!_g_value_equal (cur_value, &cp->orig_value)) 26999 { 27000 variant = g_dbus_gvalue_to_gvariant (cur_value, G_VARIANT_TYPE (cp->info->parent_struct.signature)); 27001 g_variant_builder_add (&builder, "{sv}", cp->info->parent_struct.name, variant); 27002 g_variant_unref (variant); 27003 num_changes++; 27004 } 27005 } 27006 if (num_changes > 0) 27007 { 27008 GList *connections, *ll; 27009 GVariant *signal_variant; 27010 signal_variant = g_variant_ref_sink (g_variant_new ("(sa{sv}as)", "org.openbmc.Button", 27011 &builder, &invalidated_builder)); 27012 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 27013 for (ll = connections; ll != NULL; ll = ll->next) 27014 { 27015 GDBusConnection *connection = ll->data; 27016 27017 g_dbus_connection_emit_signal (connection, 27018 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), 27019 "org.freedesktop.DBus.Properties", 27020 "PropertiesChanged", 27021 signal_variant, 27022 NULL); 27023 } 27024 g_variant_unref (signal_variant); 27025 g_list_free_full (connections, g_object_unref); 27026 } 27027 else 27028 { 27029 g_variant_builder_clear (&builder); 27030 g_variant_builder_clear (&invalidated_builder); 27031 } 27032 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 27033 skeleton->priv->changed_properties = NULL; 27034 skeleton->priv->changed_properties_idle_source = NULL; 27035 g_mutex_unlock (&skeleton->priv->lock); 27036 return FALSE; 27037 } 27038 27039 static void 27040 _button_schedule_emit_changed (ButtonSkeleton *skeleton, const _ExtendedGDBusPropertyInfo *info, guint prop_id, const GValue *orig_value) 27041 { 27042 ChangedProperty *cp; 27043 GList *l; 27044 cp = NULL; 27045 for (l = skeleton->priv->changed_properties; l != NULL; l = l->next) 27046 { 27047 ChangedProperty *i_cp = l->data; 27048 if (i_cp->info == info) 27049 { 27050 cp = i_cp; 27051 break; 27052 } 27053 } 27054 if (cp == NULL) 27055 { 27056 cp = g_new0 (ChangedProperty, 1); 27057 cp->prop_id = prop_id; 27058 cp->info = info; 27059 skeleton->priv->changed_properties = g_list_prepend (skeleton->priv->changed_properties, cp); 27060 g_value_init (&cp->orig_value, G_VALUE_TYPE (orig_value)); 27061 g_value_copy (orig_value, &cp->orig_value); 27062 } 27063 } 27064 27065 static void 27066 button_skeleton_notify (GObject *object, 27067 GParamSpec *pspec G_GNUC_UNUSED) 27068 { 27069 ButtonSkeleton *skeleton = BUTTON_SKELETON (object); 27070 g_mutex_lock (&skeleton->priv->lock); 27071 if (skeleton->priv->changed_properties != NULL && 27072 skeleton->priv->changed_properties_idle_source == NULL) 27073 { 27074 skeleton->priv->changed_properties_idle_source = g_idle_source_new (); 27075 g_source_set_priority (skeleton->priv->changed_properties_idle_source, G_PRIORITY_DEFAULT); 27076 g_source_set_callback (skeleton->priv->changed_properties_idle_source, _button_emit_changed, g_object_ref (skeleton), (GDestroyNotify) g_object_unref); 27077 g_source_set_name (skeleton->priv->changed_properties_idle_source, "[generated] _button_emit_changed"); 27078 g_source_attach (skeleton->priv->changed_properties_idle_source, skeleton->priv->context); 27079 g_source_unref (skeleton->priv->changed_properties_idle_source); 27080 } 27081 g_mutex_unlock (&skeleton->priv->lock); 27082 } 27083 27084 static void 27085 button_skeleton_set_property (GObject *object, 27086 guint prop_id, 27087 const GValue *value, 27088 GParamSpec *pspec) 27089 { 27090 ButtonSkeleton *skeleton = BUTTON_SKELETON (object); 27091 g_assert (prop_id != 0 && prop_id - 1 < 2); 27092 g_mutex_lock (&skeleton->priv->lock); 27093 g_object_freeze_notify (object); 27094 if (!_g_value_equal (value, &skeleton->priv->properties[prop_id - 1])) 27095 { 27096 if (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)) != NULL) 27097 _button_schedule_emit_changed (skeleton, _button_property_info_pointers[prop_id - 1], prop_id, &skeleton->priv->properties[prop_id - 1]); 27098 g_value_copy (value, &skeleton->priv->properties[prop_id - 1]); 27099 g_object_notify_by_pspec (object, pspec); 27100 } 27101 g_mutex_unlock (&skeleton->priv->lock); 27102 g_object_thaw_notify (object); 27103 } 27104 27105 static void 27106 button_skeleton_init (ButtonSkeleton *skeleton) 27107 { 27108 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 27109 skeleton->priv = button_skeleton_get_instance_private (skeleton); 27110 #else 27111 skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, TYPE_BUTTON_SKELETON, ButtonSkeletonPrivate); 27112 #endif 27113 27114 g_mutex_init (&skeleton->priv->lock); 27115 skeleton->priv->context = g_main_context_ref_thread_default (); 27116 skeleton->priv->properties = g_new0 (GValue, 2); 27117 g_value_init (&skeleton->priv->properties[0], G_TYPE_BOOLEAN); 27118 g_value_init (&skeleton->priv->properties[1], G_TYPE_UINT64); 27119 } 27120 27121 static gboolean 27122 button_skeleton_get_state (Button *object) 27123 { 27124 ButtonSkeleton *skeleton = BUTTON_SKELETON (object); 27125 gboolean value; 27126 g_mutex_lock (&skeleton->priv->lock); 27127 value = g_value_get_boolean (&(skeleton->priv->properties[0])); 27128 g_mutex_unlock (&skeleton->priv->lock); 27129 return value; 27130 } 27131 27132 static guint64 27133 button_skeleton_get_timer (Button *object) 27134 { 27135 ButtonSkeleton *skeleton = BUTTON_SKELETON (object); 27136 guint64 value; 27137 g_mutex_lock (&skeleton->priv->lock); 27138 value = g_value_get_uint64 (&(skeleton->priv->properties[1])); 27139 g_mutex_unlock (&skeleton->priv->lock); 27140 return value; 27141 } 27142 27143 static void 27144 button_skeleton_class_init (ButtonSkeletonClass *klass) 27145 { 27146 GObjectClass *gobject_class; 27147 GDBusInterfaceSkeletonClass *skeleton_class; 27148 27149 gobject_class = G_OBJECT_CLASS (klass); 27150 gobject_class->finalize = button_skeleton_finalize; 27151 gobject_class->get_property = button_skeleton_get_property; 27152 gobject_class->set_property = button_skeleton_set_property; 27153 gobject_class->notify = button_skeleton_notify; 27154 27155 27156 button_override_properties (gobject_class, 1); 27157 27158 skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass); 27159 skeleton_class->get_info = button_skeleton_dbus_interface_get_info; 27160 skeleton_class->get_properties = button_skeleton_dbus_interface_get_properties; 27161 skeleton_class->flush = button_skeleton_dbus_interface_flush; 27162 skeleton_class->get_vtable = button_skeleton_dbus_interface_get_vtable; 27163 27164 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 27165 g_type_class_add_private (klass, sizeof (ButtonSkeletonPrivate)); 27166 #endif 27167 } 27168 27169 static void 27170 button_skeleton_iface_init (ButtonIface *iface) 27171 { 27172 iface->released = _button_on_signal_released; 27173 iface->pressed = _button_on_signal_pressed; 27174 iface->pressed_long = _button_on_signal_pressed_long; 27175 iface->get_state = button_skeleton_get_state; 27176 iface->get_timer = button_skeleton_get_timer; 27177 } 27178 27179 /** 27180 * button_skeleton_new: 27181 * 27182 * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Button.top_of_page">org.openbmc.Button</link>. 27183 * 27184 * Returns: (transfer full) (type ButtonSkeleton): The skeleton object. 27185 */ 27186 Button * 27187 button_skeleton_new (void) 27188 { 27189 return BUTTON (g_object_new (TYPE_BUTTON_SKELETON, NULL)); 27190 } 27191 27192 /* ------------------------------------------------------------------------ 27193 * Code for interface org.openbmc.Led 27194 * ------------------------------------------------------------------------ 27195 */ 27196 27197 /** 27198 * SECTION:Led 27199 * @title: Led 27200 * @short_description: Generated C code for the org.openbmc.Led D-Bus interface 27201 * 27202 * This section contains code for working with the <link linkend="gdbus-interface-org-openbmc-Led.top_of_page">org.openbmc.Led</link> D-Bus interface in C. 27203 */ 27204 27205 /* ---- Introspection data for org.openbmc.Led ---- */ 27206 27207 static const _ExtendedGDBusMethodInfo _led_method_info_set_on = 27208 { 27209 { 27210 -1, 27211 (gchar *) "setOn", 27212 NULL, 27213 NULL, 27214 NULL 27215 }, 27216 "handle-set-on", 27217 FALSE 27218 }; 27219 27220 static const _ExtendedGDBusMethodInfo _led_method_info_set_off = 27221 { 27222 { 27223 -1, 27224 (gchar *) "setOff", 27225 NULL, 27226 NULL, 27227 NULL 27228 }, 27229 "handle-set-off", 27230 FALSE 27231 }; 27232 27233 static const _ExtendedGDBusMethodInfo _led_method_info_set_blink_slow = 27234 { 27235 { 27236 -1, 27237 (gchar *) "setBlinkSlow", 27238 NULL, 27239 NULL, 27240 NULL 27241 }, 27242 "handle-set-blink-slow", 27243 FALSE 27244 }; 27245 27246 static const _ExtendedGDBusMethodInfo _led_method_info_set_blink_fast = 27247 { 27248 { 27249 -1, 27250 (gchar *) "setBlinkFast", 27251 NULL, 27252 NULL, 27253 NULL 27254 }, 27255 "handle-set-blink-fast", 27256 FALSE 27257 }; 27258 27259 static const _ExtendedGDBusMethodInfo * const _led_method_info_pointers[] = 27260 { 27261 &_led_method_info_set_on, 27262 &_led_method_info_set_off, 27263 &_led_method_info_set_blink_slow, 27264 &_led_method_info_set_blink_fast, 27265 NULL 27266 }; 27267 27268 static const _ExtendedGDBusPropertyInfo _led_property_info_color = 27269 { 27270 { 27271 -1, 27272 (gchar *) "color", 27273 (gchar *) "i", 27274 G_DBUS_PROPERTY_INFO_FLAGS_READABLE, 27275 NULL 27276 }, 27277 "color", 27278 FALSE 27279 }; 27280 27281 static const _ExtendedGDBusPropertyInfo _led_property_info_function = 27282 { 27283 { 27284 -1, 27285 (gchar *) "function", 27286 (gchar *) "s", 27287 G_DBUS_PROPERTY_INFO_FLAGS_READABLE, 27288 NULL 27289 }, 27290 "function", 27291 FALSE 27292 }; 27293 27294 static const _ExtendedGDBusPropertyInfo _led_property_info_state = 27295 { 27296 { 27297 -1, 27298 (gchar *) "state", 27299 (gchar *) "s", 27300 G_DBUS_PROPERTY_INFO_FLAGS_READABLE, 27301 NULL 27302 }, 27303 "state", 27304 FALSE 27305 }; 27306 27307 static const _ExtendedGDBusPropertyInfo * const _led_property_info_pointers[] = 27308 { 27309 &_led_property_info_color, 27310 &_led_property_info_function, 27311 &_led_property_info_state, 27312 NULL 27313 }; 27314 27315 static const _ExtendedGDBusInterfaceInfo _led_interface_info = 27316 { 27317 { 27318 -1, 27319 (gchar *) "org.openbmc.Led", 27320 (GDBusMethodInfo **) &_led_method_info_pointers, 27321 NULL, 27322 (GDBusPropertyInfo **) &_led_property_info_pointers, 27323 NULL 27324 }, 27325 "led", 27326 }; 27327 27328 27329 /** 27330 * led_interface_info: 27331 * 27332 * Gets a machine-readable description of the <link linkend="gdbus-interface-org-openbmc-Led.top_of_page">org.openbmc.Led</link> D-Bus interface. 27333 * 27334 * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free. 27335 */ 27336 GDBusInterfaceInfo * 27337 led_interface_info (void) 27338 { 27339 return (GDBusInterfaceInfo *) &_led_interface_info.parent_struct; 27340 } 27341 27342 /** 27343 * led_override_properties: 27344 * @klass: The class structure for a #GObject<!-- -->-derived class. 27345 * @property_id_begin: The property id to assign to the first overridden property. 27346 * 27347 * Overrides all #GObject properties in the #Led interface for a concrete class. 27348 * The properties are overridden in the order they are defined. 27349 * 27350 * Returns: The last property id. 27351 */ 27352 guint 27353 led_override_properties (GObjectClass *klass, guint property_id_begin) 27354 { 27355 g_object_class_override_property (klass, property_id_begin++, "color"); 27356 g_object_class_override_property (klass, property_id_begin++, "function"); 27357 g_object_class_override_property (klass, property_id_begin++, "state"); 27358 return property_id_begin - 1; 27359 } 27360 27361 27362 27363 /** 27364 * Led: 27365 * 27366 * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Led.top_of_page">org.openbmc.Led</link>. 27367 */ 27368 27369 /** 27370 * LedIface: 27371 * @parent_iface: The parent interface. 27372 * @handle_set_blink_fast: Handler for the #Led::handle-set-blink-fast signal. 27373 * @handle_set_blink_slow: Handler for the #Led::handle-set-blink-slow signal. 27374 * @handle_set_off: Handler for the #Led::handle-set-off signal. 27375 * @handle_set_on: Handler for the #Led::handle-set-on signal. 27376 * @get_color: Getter for the #Led:color property. 27377 * @get_function: Getter for the #Led:function property. 27378 * @get_state: Getter for the #Led:state property. 27379 * 27380 * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Led.top_of_page">org.openbmc.Led</link>. 27381 */ 27382 27383 typedef LedIface LedInterface; 27384 G_DEFINE_INTERFACE (Led, led, G_TYPE_OBJECT); 27385 27386 static void 27387 led_default_init (LedIface *iface) 27388 { 27389 /* GObject signals for incoming D-Bus method calls: */ 27390 /** 27391 * Led::handle-set-on: 27392 * @object: A #Led. 27393 * @invocation: A #GDBusMethodInvocation. 27394 * 27395 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-Led.setOn">setOn()</link> D-Bus method. 27396 * 27397 * 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 led_complete_set_on() 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. 27398 * 27399 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 27400 */ 27401 g_signal_new ("handle-set-on", 27402 G_TYPE_FROM_INTERFACE (iface), 27403 G_SIGNAL_RUN_LAST, 27404 G_STRUCT_OFFSET (LedIface, handle_set_on), 27405 g_signal_accumulator_true_handled, 27406 NULL, 27407 g_cclosure_marshal_generic, 27408 G_TYPE_BOOLEAN, 27409 1, 27410 G_TYPE_DBUS_METHOD_INVOCATION); 27411 27412 /** 27413 * Led::handle-set-off: 27414 * @object: A #Led. 27415 * @invocation: A #GDBusMethodInvocation. 27416 * 27417 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-Led.setOff">setOff()</link> D-Bus method. 27418 * 27419 * 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 led_complete_set_off() 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. 27420 * 27421 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 27422 */ 27423 g_signal_new ("handle-set-off", 27424 G_TYPE_FROM_INTERFACE (iface), 27425 G_SIGNAL_RUN_LAST, 27426 G_STRUCT_OFFSET (LedIface, handle_set_off), 27427 g_signal_accumulator_true_handled, 27428 NULL, 27429 g_cclosure_marshal_generic, 27430 G_TYPE_BOOLEAN, 27431 1, 27432 G_TYPE_DBUS_METHOD_INVOCATION); 27433 27434 /** 27435 * Led::handle-set-blink-slow: 27436 * @object: A #Led. 27437 * @invocation: A #GDBusMethodInvocation. 27438 * 27439 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-Led.setBlinkSlow">setBlinkSlow()</link> D-Bus method. 27440 * 27441 * 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 led_complete_set_blink_slow() 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. 27442 * 27443 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 27444 */ 27445 g_signal_new ("handle-set-blink-slow", 27446 G_TYPE_FROM_INTERFACE (iface), 27447 G_SIGNAL_RUN_LAST, 27448 G_STRUCT_OFFSET (LedIface, handle_set_blink_slow), 27449 g_signal_accumulator_true_handled, 27450 NULL, 27451 g_cclosure_marshal_generic, 27452 G_TYPE_BOOLEAN, 27453 1, 27454 G_TYPE_DBUS_METHOD_INVOCATION); 27455 27456 /** 27457 * Led::handle-set-blink-fast: 27458 * @object: A #Led. 27459 * @invocation: A #GDBusMethodInvocation. 27460 * 27461 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-Led.setBlinkFast">setBlinkFast()</link> D-Bus method. 27462 * 27463 * 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 led_complete_set_blink_fast() 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. 27464 * 27465 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 27466 */ 27467 g_signal_new ("handle-set-blink-fast", 27468 G_TYPE_FROM_INTERFACE (iface), 27469 G_SIGNAL_RUN_LAST, 27470 G_STRUCT_OFFSET (LedIface, handle_set_blink_fast), 27471 g_signal_accumulator_true_handled, 27472 NULL, 27473 g_cclosure_marshal_generic, 27474 G_TYPE_BOOLEAN, 27475 1, 27476 G_TYPE_DBUS_METHOD_INVOCATION); 27477 27478 /* GObject properties for D-Bus properties: */ 27479 /** 27480 * Led:color: 27481 * 27482 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-Led.color">"color"</link>. 27483 * 27484 * 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. 27485 */ 27486 g_object_interface_install_property (iface, 27487 g_param_spec_int ("color", "color", "color", G_MININT32, G_MAXINT32, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 27488 /** 27489 * Led:function: 27490 * 27491 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-Led.function">"function"</link>. 27492 * 27493 * 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. 27494 */ 27495 g_object_interface_install_property (iface, 27496 g_param_spec_string ("function", "function", "function", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 27497 /** 27498 * Led:state: 27499 * 27500 * Represents the D-Bus property <link linkend="gdbus-property-org-openbmc-Led.state">"state"</link>. 27501 * 27502 * 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. 27503 */ 27504 g_object_interface_install_property (iface, 27505 g_param_spec_string ("state", "state", "state", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); 27506 } 27507 27508 /** 27509 * led_get_color: (skip) 27510 * @object: A #Led. 27511 * 27512 * Gets the value of the <link linkend="gdbus-property-org-openbmc-Led.color">"color"</link> D-Bus property. 27513 * 27514 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 27515 * 27516 * Returns: The property value. 27517 */ 27518 gint 27519 led_get_color (Led *object) 27520 { 27521 return LED_GET_IFACE (object)->get_color (object); 27522 } 27523 27524 /** 27525 * led_set_color: (skip) 27526 * @object: A #Led. 27527 * @value: The value to set. 27528 * 27529 * Sets the <link linkend="gdbus-property-org-openbmc-Led.color">"color"</link> D-Bus property to @value. 27530 * 27531 * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side. 27532 */ 27533 void 27534 led_set_color (Led *object, gint value) 27535 { 27536 g_object_set (G_OBJECT (object), "color", value, NULL); 27537 } 27538 27539 /** 27540 * led_get_function: (skip) 27541 * @object: A #Led. 27542 * 27543 * Gets the value of the <link linkend="gdbus-property-org-openbmc-Led.function">"function"</link> D-Bus property. 27544 * 27545 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 27546 * 27547 * <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 led_dup_function() if on another thread.</warning> 27548 * 27549 * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object. 27550 */ 27551 const gchar * 27552 led_get_function (Led *object) 27553 { 27554 return LED_GET_IFACE (object)->get_function (object); 27555 } 27556 27557 /** 27558 * led_dup_function: (skip) 27559 * @object: A #Led. 27560 * 27561 * Gets a copy of the <link linkend="gdbus-property-org-openbmc-Led.function">"function"</link> D-Bus property. 27562 * 27563 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 27564 * 27565 * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value should be freed with g_free(). 27566 */ 27567 gchar * 27568 led_dup_function (Led *object) 27569 { 27570 gchar *value; 27571 g_object_get (G_OBJECT (object), "function", &value, NULL); 27572 return value; 27573 } 27574 27575 /** 27576 * led_set_function: (skip) 27577 * @object: A #Led. 27578 * @value: The value to set. 27579 * 27580 * Sets the <link linkend="gdbus-property-org-openbmc-Led.function">"function"</link> D-Bus property to @value. 27581 * 27582 * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side. 27583 */ 27584 void 27585 led_set_function (Led *object, const gchar *value) 27586 { 27587 g_object_set (G_OBJECT (object), "function", value, NULL); 27588 } 27589 27590 /** 27591 * led_get_state: (skip) 27592 * @object: A #Led. 27593 * 27594 * Gets the value of the <link linkend="gdbus-property-org-openbmc-Led.state">"state"</link> D-Bus property. 27595 * 27596 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 27597 * 27598 * <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 led_dup_state() if on another thread.</warning> 27599 * 27600 * Returns: (transfer none): The property value or %NULL if the property is not set. Do not free the returned value, it belongs to @object. 27601 */ 27602 const gchar * 27603 led_get_state (Led *object) 27604 { 27605 return LED_GET_IFACE (object)->get_state (object); 27606 } 27607 27608 /** 27609 * led_dup_state: (skip) 27610 * @object: A #Led. 27611 * 27612 * Gets a copy of the <link linkend="gdbus-property-org-openbmc-Led.state">"state"</link> D-Bus property. 27613 * 27614 * Since this D-Bus property is readable, it is meaningful to use this function on both the client- and service-side. 27615 * 27616 * Returns: (transfer full): The property value or %NULL if the property is not set. The returned value should be freed with g_free(). 27617 */ 27618 gchar * 27619 led_dup_state (Led *object) 27620 { 27621 gchar *value; 27622 g_object_get (G_OBJECT (object), "state", &value, NULL); 27623 return value; 27624 } 27625 27626 /** 27627 * led_set_state: (skip) 27628 * @object: A #Led. 27629 * @value: The value to set. 27630 * 27631 * Sets the <link linkend="gdbus-property-org-openbmc-Led.state">"state"</link> D-Bus property to @value. 27632 * 27633 * Since this D-Bus property is not writable, it is only meaningful to use this function on the service-side. 27634 */ 27635 void 27636 led_set_state (Led *object, const gchar *value) 27637 { 27638 g_object_set (G_OBJECT (object), "state", value, NULL); 27639 } 27640 27641 /** 27642 * led_call_set_on: 27643 * @proxy: A #LedProxy. 27644 * @cancellable: (allow-none): A #GCancellable or %NULL. 27645 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 27646 * @user_data: User data to pass to @callback. 27647 * 27648 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-Led.setOn">setOn()</link> D-Bus method on @proxy. 27649 * 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. 27650 * You can then call led_call_set_on_finish() to get the result of the operation. 27651 * 27652 * See led_call_set_on_sync() for the synchronous, blocking version of this method. 27653 */ 27654 void 27655 led_call_set_on ( 27656 Led *proxy, 27657 GCancellable *cancellable, 27658 GAsyncReadyCallback callback, 27659 gpointer user_data) 27660 { 27661 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 27662 "setOn", 27663 g_variant_new ("()"), 27664 G_DBUS_CALL_FLAGS_NONE, 27665 -1, 27666 cancellable, 27667 callback, 27668 user_data); 27669 } 27670 27671 /** 27672 * led_call_set_on_finish: 27673 * @proxy: A #LedProxy. 27674 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to led_call_set_on(). 27675 * @error: Return location for error or %NULL. 27676 * 27677 * Finishes an operation started with led_call_set_on(). 27678 * 27679 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 27680 */ 27681 gboolean 27682 led_call_set_on_finish ( 27683 Led *proxy, 27684 GAsyncResult *res, 27685 GError **error) 27686 { 27687 GVariant *_ret; 27688 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 27689 if (_ret == NULL) 27690 goto _out; 27691 g_variant_get (_ret, 27692 "()"); 27693 g_variant_unref (_ret); 27694 _out: 27695 return _ret != NULL; 27696 } 27697 27698 /** 27699 * led_call_set_on_sync: 27700 * @proxy: A #LedProxy. 27701 * @cancellable: (allow-none): A #GCancellable or %NULL. 27702 * @error: Return location for error or %NULL. 27703 * 27704 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-Led.setOn">setOn()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 27705 * 27706 * See led_call_set_on() for the asynchronous version of this method. 27707 * 27708 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 27709 */ 27710 gboolean 27711 led_call_set_on_sync ( 27712 Led *proxy, 27713 GCancellable *cancellable, 27714 GError **error) 27715 { 27716 GVariant *_ret; 27717 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 27718 "setOn", 27719 g_variant_new ("()"), 27720 G_DBUS_CALL_FLAGS_NONE, 27721 -1, 27722 cancellable, 27723 error); 27724 if (_ret == NULL) 27725 goto _out; 27726 g_variant_get (_ret, 27727 "()"); 27728 g_variant_unref (_ret); 27729 _out: 27730 return _ret != NULL; 27731 } 27732 27733 /** 27734 * led_call_set_off: 27735 * @proxy: A #LedProxy. 27736 * @cancellable: (allow-none): A #GCancellable or %NULL. 27737 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 27738 * @user_data: User data to pass to @callback. 27739 * 27740 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-Led.setOff">setOff()</link> D-Bus method on @proxy. 27741 * 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. 27742 * You can then call led_call_set_off_finish() to get the result of the operation. 27743 * 27744 * See led_call_set_off_sync() for the synchronous, blocking version of this method. 27745 */ 27746 void 27747 led_call_set_off ( 27748 Led *proxy, 27749 GCancellable *cancellable, 27750 GAsyncReadyCallback callback, 27751 gpointer user_data) 27752 { 27753 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 27754 "setOff", 27755 g_variant_new ("()"), 27756 G_DBUS_CALL_FLAGS_NONE, 27757 -1, 27758 cancellable, 27759 callback, 27760 user_data); 27761 } 27762 27763 /** 27764 * led_call_set_off_finish: 27765 * @proxy: A #LedProxy. 27766 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to led_call_set_off(). 27767 * @error: Return location for error or %NULL. 27768 * 27769 * Finishes an operation started with led_call_set_off(). 27770 * 27771 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 27772 */ 27773 gboolean 27774 led_call_set_off_finish ( 27775 Led *proxy, 27776 GAsyncResult *res, 27777 GError **error) 27778 { 27779 GVariant *_ret; 27780 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 27781 if (_ret == NULL) 27782 goto _out; 27783 g_variant_get (_ret, 27784 "()"); 27785 g_variant_unref (_ret); 27786 _out: 27787 return _ret != NULL; 27788 } 27789 27790 /** 27791 * led_call_set_off_sync: 27792 * @proxy: A #LedProxy. 27793 * @cancellable: (allow-none): A #GCancellable or %NULL. 27794 * @error: Return location for error or %NULL. 27795 * 27796 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-Led.setOff">setOff()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 27797 * 27798 * See led_call_set_off() for the asynchronous version of this method. 27799 * 27800 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 27801 */ 27802 gboolean 27803 led_call_set_off_sync ( 27804 Led *proxy, 27805 GCancellable *cancellable, 27806 GError **error) 27807 { 27808 GVariant *_ret; 27809 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 27810 "setOff", 27811 g_variant_new ("()"), 27812 G_DBUS_CALL_FLAGS_NONE, 27813 -1, 27814 cancellable, 27815 error); 27816 if (_ret == NULL) 27817 goto _out; 27818 g_variant_get (_ret, 27819 "()"); 27820 g_variant_unref (_ret); 27821 _out: 27822 return _ret != NULL; 27823 } 27824 27825 /** 27826 * led_call_set_blink_slow: 27827 * @proxy: A #LedProxy. 27828 * @cancellable: (allow-none): A #GCancellable or %NULL. 27829 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 27830 * @user_data: User data to pass to @callback. 27831 * 27832 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-Led.setBlinkSlow">setBlinkSlow()</link> D-Bus method on @proxy. 27833 * 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. 27834 * You can then call led_call_set_blink_slow_finish() to get the result of the operation. 27835 * 27836 * See led_call_set_blink_slow_sync() for the synchronous, blocking version of this method. 27837 */ 27838 void 27839 led_call_set_blink_slow ( 27840 Led *proxy, 27841 GCancellable *cancellable, 27842 GAsyncReadyCallback callback, 27843 gpointer user_data) 27844 { 27845 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 27846 "setBlinkSlow", 27847 g_variant_new ("()"), 27848 G_DBUS_CALL_FLAGS_NONE, 27849 -1, 27850 cancellable, 27851 callback, 27852 user_data); 27853 } 27854 27855 /** 27856 * led_call_set_blink_slow_finish: 27857 * @proxy: A #LedProxy. 27858 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to led_call_set_blink_slow(). 27859 * @error: Return location for error or %NULL. 27860 * 27861 * Finishes an operation started with led_call_set_blink_slow(). 27862 * 27863 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 27864 */ 27865 gboolean 27866 led_call_set_blink_slow_finish ( 27867 Led *proxy, 27868 GAsyncResult *res, 27869 GError **error) 27870 { 27871 GVariant *_ret; 27872 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 27873 if (_ret == NULL) 27874 goto _out; 27875 g_variant_get (_ret, 27876 "()"); 27877 g_variant_unref (_ret); 27878 _out: 27879 return _ret != NULL; 27880 } 27881 27882 /** 27883 * led_call_set_blink_slow_sync: 27884 * @proxy: A #LedProxy. 27885 * @cancellable: (allow-none): A #GCancellable or %NULL. 27886 * @error: Return location for error or %NULL. 27887 * 27888 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-Led.setBlinkSlow">setBlinkSlow()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 27889 * 27890 * See led_call_set_blink_slow() for the asynchronous version of this method. 27891 * 27892 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 27893 */ 27894 gboolean 27895 led_call_set_blink_slow_sync ( 27896 Led *proxy, 27897 GCancellable *cancellable, 27898 GError **error) 27899 { 27900 GVariant *_ret; 27901 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 27902 "setBlinkSlow", 27903 g_variant_new ("()"), 27904 G_DBUS_CALL_FLAGS_NONE, 27905 -1, 27906 cancellable, 27907 error); 27908 if (_ret == NULL) 27909 goto _out; 27910 g_variant_get (_ret, 27911 "()"); 27912 g_variant_unref (_ret); 27913 _out: 27914 return _ret != NULL; 27915 } 27916 27917 /** 27918 * led_call_set_blink_fast: 27919 * @proxy: A #LedProxy. 27920 * @cancellable: (allow-none): A #GCancellable or %NULL. 27921 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 27922 * @user_data: User data to pass to @callback. 27923 * 27924 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-Led.setBlinkFast">setBlinkFast()</link> D-Bus method on @proxy. 27925 * 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. 27926 * You can then call led_call_set_blink_fast_finish() to get the result of the operation. 27927 * 27928 * See led_call_set_blink_fast_sync() for the synchronous, blocking version of this method. 27929 */ 27930 void 27931 led_call_set_blink_fast ( 27932 Led *proxy, 27933 GCancellable *cancellable, 27934 GAsyncReadyCallback callback, 27935 gpointer user_data) 27936 { 27937 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 27938 "setBlinkFast", 27939 g_variant_new ("()"), 27940 G_DBUS_CALL_FLAGS_NONE, 27941 -1, 27942 cancellable, 27943 callback, 27944 user_data); 27945 } 27946 27947 /** 27948 * led_call_set_blink_fast_finish: 27949 * @proxy: A #LedProxy. 27950 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to led_call_set_blink_fast(). 27951 * @error: Return location for error or %NULL. 27952 * 27953 * Finishes an operation started with led_call_set_blink_fast(). 27954 * 27955 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 27956 */ 27957 gboolean 27958 led_call_set_blink_fast_finish ( 27959 Led *proxy, 27960 GAsyncResult *res, 27961 GError **error) 27962 { 27963 GVariant *_ret; 27964 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 27965 if (_ret == NULL) 27966 goto _out; 27967 g_variant_get (_ret, 27968 "()"); 27969 g_variant_unref (_ret); 27970 _out: 27971 return _ret != NULL; 27972 } 27973 27974 /** 27975 * led_call_set_blink_fast_sync: 27976 * @proxy: A #LedProxy. 27977 * @cancellable: (allow-none): A #GCancellable or %NULL. 27978 * @error: Return location for error or %NULL. 27979 * 27980 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-Led.setBlinkFast">setBlinkFast()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 27981 * 27982 * See led_call_set_blink_fast() for the asynchronous version of this method. 27983 * 27984 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 27985 */ 27986 gboolean 27987 led_call_set_blink_fast_sync ( 27988 Led *proxy, 27989 GCancellable *cancellable, 27990 GError **error) 27991 { 27992 GVariant *_ret; 27993 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 27994 "setBlinkFast", 27995 g_variant_new ("()"), 27996 G_DBUS_CALL_FLAGS_NONE, 27997 -1, 27998 cancellable, 27999 error); 28000 if (_ret == NULL) 28001 goto _out; 28002 g_variant_get (_ret, 28003 "()"); 28004 g_variant_unref (_ret); 28005 _out: 28006 return _ret != NULL; 28007 } 28008 28009 /** 28010 * led_complete_set_on: 28011 * @object: A #Led. 28012 * @invocation: (transfer full): A #GDBusMethodInvocation. 28013 * 28014 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-Led.setOn">setOn()</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. 28015 * 28016 * This method will free @invocation, you cannot use it afterwards. 28017 */ 28018 void 28019 led_complete_set_on ( 28020 Led *object, 28021 GDBusMethodInvocation *invocation) 28022 { 28023 g_dbus_method_invocation_return_value (invocation, 28024 g_variant_new ("()")); 28025 } 28026 28027 /** 28028 * led_complete_set_off: 28029 * @object: A #Led. 28030 * @invocation: (transfer full): A #GDBusMethodInvocation. 28031 * 28032 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-Led.setOff">setOff()</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. 28033 * 28034 * This method will free @invocation, you cannot use it afterwards. 28035 */ 28036 void 28037 led_complete_set_off ( 28038 Led *object, 28039 GDBusMethodInvocation *invocation) 28040 { 28041 g_dbus_method_invocation_return_value (invocation, 28042 g_variant_new ("()")); 28043 } 28044 28045 /** 28046 * led_complete_set_blink_slow: 28047 * @object: A #Led. 28048 * @invocation: (transfer full): A #GDBusMethodInvocation. 28049 * 28050 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-Led.setBlinkSlow">setBlinkSlow()</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. 28051 * 28052 * This method will free @invocation, you cannot use it afterwards. 28053 */ 28054 void 28055 led_complete_set_blink_slow ( 28056 Led *object, 28057 GDBusMethodInvocation *invocation) 28058 { 28059 g_dbus_method_invocation_return_value (invocation, 28060 g_variant_new ("()")); 28061 } 28062 28063 /** 28064 * led_complete_set_blink_fast: 28065 * @object: A #Led. 28066 * @invocation: (transfer full): A #GDBusMethodInvocation. 28067 * 28068 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-Led.setBlinkFast">setBlinkFast()</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. 28069 * 28070 * This method will free @invocation, you cannot use it afterwards. 28071 */ 28072 void 28073 led_complete_set_blink_fast ( 28074 Led *object, 28075 GDBusMethodInvocation *invocation) 28076 { 28077 g_dbus_method_invocation_return_value (invocation, 28078 g_variant_new ("()")); 28079 } 28080 28081 /* ------------------------------------------------------------------------ */ 28082 28083 /** 28084 * LedProxy: 28085 * 28086 * The #LedProxy structure contains only private data and should only be accessed using the provided API. 28087 */ 28088 28089 /** 28090 * LedProxyClass: 28091 * @parent_class: The parent class. 28092 * 28093 * Class structure for #LedProxy. 28094 */ 28095 28096 struct _LedProxyPrivate 28097 { 28098 GData *qdata; 28099 }; 28100 28101 static void led_proxy_iface_init (LedIface *iface); 28102 28103 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 28104 G_DEFINE_TYPE_WITH_CODE (LedProxy, led_proxy, G_TYPE_DBUS_PROXY, 28105 G_ADD_PRIVATE (LedProxy) 28106 G_IMPLEMENT_INTERFACE (TYPE_LED, led_proxy_iface_init)); 28107 28108 #else 28109 G_DEFINE_TYPE_WITH_CODE (LedProxy, led_proxy, G_TYPE_DBUS_PROXY, 28110 G_IMPLEMENT_INTERFACE (TYPE_LED, led_proxy_iface_init)); 28111 28112 #endif 28113 static void 28114 led_proxy_finalize (GObject *object) 28115 { 28116 LedProxy *proxy = LED_PROXY (object); 28117 g_datalist_clear (&proxy->priv->qdata); 28118 G_OBJECT_CLASS (led_proxy_parent_class)->finalize (object); 28119 } 28120 28121 static void 28122 led_proxy_get_property (GObject *object, 28123 guint prop_id, 28124 GValue *value, 28125 GParamSpec *pspec G_GNUC_UNUSED) 28126 { 28127 const _ExtendedGDBusPropertyInfo *info; 28128 GVariant *variant; 28129 g_assert (prop_id != 0 && prop_id - 1 < 3); 28130 info = _led_property_info_pointers[prop_id - 1]; 28131 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (object), info->parent_struct.name); 28132 if (info->use_gvariant) 28133 { 28134 g_value_set_variant (value, variant); 28135 } 28136 else 28137 { 28138 if (variant != NULL) 28139 g_dbus_gvariant_to_gvalue (variant, value); 28140 } 28141 if (variant != NULL) 28142 g_variant_unref (variant); 28143 } 28144 28145 static void 28146 led_proxy_set_property_cb (GDBusProxy *proxy, 28147 GAsyncResult *res, 28148 gpointer user_data) 28149 { 28150 const _ExtendedGDBusPropertyInfo *info = user_data; 28151 GError *error; 28152 GVariant *_ret; 28153 error = NULL; 28154 _ret = g_dbus_proxy_call_finish (proxy, res, &error); 28155 if (!_ret) 28156 { 28157 g_warning ("Error setting property '%s' on interface org.openbmc.Led: %s (%s, %d)", 28158 info->parent_struct.name, 28159 error->message, g_quark_to_string (error->domain), error->code); 28160 g_error_free (error); 28161 } 28162 else 28163 { 28164 g_variant_unref (_ret); 28165 } 28166 } 28167 28168 static void 28169 led_proxy_set_property (GObject *object, 28170 guint prop_id, 28171 const GValue *value, 28172 GParamSpec *pspec G_GNUC_UNUSED) 28173 { 28174 const _ExtendedGDBusPropertyInfo *info; 28175 GVariant *variant; 28176 g_assert (prop_id != 0 && prop_id - 1 < 3); 28177 info = _led_property_info_pointers[prop_id - 1]; 28178 variant = g_dbus_gvalue_to_gvariant (value, G_VARIANT_TYPE (info->parent_struct.signature)); 28179 g_dbus_proxy_call (G_DBUS_PROXY (object), 28180 "org.freedesktop.DBus.Properties.Set", 28181 g_variant_new ("(ssv)", "org.openbmc.Led", info->parent_struct.name, variant), 28182 G_DBUS_CALL_FLAGS_NONE, 28183 -1, 28184 NULL, (GAsyncReadyCallback) led_proxy_set_property_cb, (GDBusPropertyInfo *) &info->parent_struct); 28185 g_variant_unref (variant); 28186 } 28187 28188 static void 28189 led_proxy_g_signal (GDBusProxy *proxy, 28190 const gchar *sender_name G_GNUC_UNUSED, 28191 const gchar *signal_name, 28192 GVariant *parameters) 28193 { 28194 _ExtendedGDBusSignalInfo *info; 28195 GVariantIter iter; 28196 GVariant *child; 28197 GValue *paramv; 28198 guint num_params; 28199 guint n; 28200 guint signal_id; 28201 info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_led_interface_info.parent_struct, signal_name); 28202 if (info == NULL) 28203 return; 28204 num_params = g_variant_n_children (parameters); 28205 paramv = g_new0 (GValue, num_params + 1); 28206 g_value_init (¶mv[0], TYPE_LED); 28207 g_value_set_object (¶mv[0], proxy); 28208 g_variant_iter_init (&iter, parameters); 28209 n = 1; 28210 while ((child = g_variant_iter_next_value (&iter)) != NULL) 28211 { 28212 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1]; 28213 if (arg_info->use_gvariant) 28214 { 28215 g_value_init (¶mv[n], G_TYPE_VARIANT); 28216 g_value_set_variant (¶mv[n], child); 28217 n++; 28218 } 28219 else 28220 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 28221 g_variant_unref (child); 28222 } 28223 signal_id = g_signal_lookup (info->signal_name, TYPE_LED); 28224 g_signal_emitv (paramv, signal_id, 0, NULL); 28225 for (n = 0; n < num_params + 1; n++) 28226 g_value_unset (¶mv[n]); 28227 g_free (paramv); 28228 } 28229 28230 static void 28231 led_proxy_g_properties_changed (GDBusProxy *_proxy, 28232 GVariant *changed_properties, 28233 const gchar *const *invalidated_properties) 28234 { 28235 LedProxy *proxy = LED_PROXY (_proxy); 28236 guint n; 28237 const gchar *key; 28238 GVariantIter *iter; 28239 _ExtendedGDBusPropertyInfo *info; 28240 g_variant_get (changed_properties, "a{sv}", &iter); 28241 while (g_variant_iter_next (iter, "{&sv}", &key, NULL)) 28242 { 28243 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_led_interface_info.parent_struct, key); 28244 g_datalist_remove_data (&proxy->priv->qdata, key); 28245 if (info != NULL) 28246 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 28247 } 28248 g_variant_iter_free (iter); 28249 for (n = 0; invalidated_properties[n] != NULL; n++) 28250 { 28251 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_led_interface_info.parent_struct, invalidated_properties[n]); 28252 g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]); 28253 if (info != NULL) 28254 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 28255 } 28256 } 28257 28258 static gint 28259 led_proxy_get_color (Led *object) 28260 { 28261 LedProxy *proxy = LED_PROXY (object); 28262 GVariant *variant; 28263 gint value = 0; 28264 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "color"); 28265 if (variant != NULL) 28266 { 28267 value = g_variant_get_int32 (variant); 28268 g_variant_unref (variant); 28269 } 28270 return value; 28271 } 28272 28273 static const gchar * 28274 led_proxy_get_function (Led *object) 28275 { 28276 LedProxy *proxy = LED_PROXY (object); 28277 GVariant *variant; 28278 const gchar *value = NULL; 28279 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "function"); 28280 if (variant != NULL) 28281 { 28282 value = g_variant_get_string (variant, NULL); 28283 g_variant_unref (variant); 28284 } 28285 return value; 28286 } 28287 28288 static const gchar * 28289 led_proxy_get_state (Led *object) 28290 { 28291 LedProxy *proxy = LED_PROXY (object); 28292 GVariant *variant; 28293 const gchar *value = NULL; 28294 variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), "state"); 28295 if (variant != NULL) 28296 { 28297 value = g_variant_get_string (variant, NULL); 28298 g_variant_unref (variant); 28299 } 28300 return value; 28301 } 28302 28303 static void 28304 led_proxy_init (LedProxy *proxy) 28305 { 28306 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 28307 proxy->priv = led_proxy_get_instance_private (proxy); 28308 #else 28309 proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, TYPE_LED_PROXY, LedProxyPrivate); 28310 #endif 28311 28312 g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), led_interface_info ()); 28313 } 28314 28315 static void 28316 led_proxy_class_init (LedProxyClass *klass) 28317 { 28318 GObjectClass *gobject_class; 28319 GDBusProxyClass *proxy_class; 28320 28321 gobject_class = G_OBJECT_CLASS (klass); 28322 gobject_class->finalize = led_proxy_finalize; 28323 gobject_class->get_property = led_proxy_get_property; 28324 gobject_class->set_property = led_proxy_set_property; 28325 28326 proxy_class = G_DBUS_PROXY_CLASS (klass); 28327 proxy_class->g_signal = led_proxy_g_signal; 28328 proxy_class->g_properties_changed = led_proxy_g_properties_changed; 28329 28330 led_override_properties (gobject_class, 1); 28331 28332 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 28333 g_type_class_add_private (klass, sizeof (LedProxyPrivate)); 28334 #endif 28335 } 28336 28337 static void 28338 led_proxy_iface_init (LedIface *iface) 28339 { 28340 iface->get_color = led_proxy_get_color; 28341 iface->get_function = led_proxy_get_function; 28342 iface->get_state = led_proxy_get_state; 28343 } 28344 28345 /** 28346 * led_proxy_new: 28347 * @connection: A #GDBusConnection. 28348 * @flags: Flags from the #GDBusProxyFlags enumeration. 28349 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 28350 * @object_path: An object path. 28351 * @cancellable: (allow-none): A #GCancellable or %NULL. 28352 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 28353 * @user_data: User data to pass to @callback. 28354 * 28355 * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Led.top_of_page">org.openbmc.Led</link>. See g_dbus_proxy_new() for more details. 28356 * 28357 * 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. 28358 * You can then call led_proxy_new_finish() to get the result of the operation. 28359 * 28360 * See led_proxy_new_sync() for the synchronous, blocking version of this constructor. 28361 */ 28362 void 28363 led_proxy_new ( 28364 GDBusConnection *connection, 28365 GDBusProxyFlags flags, 28366 const gchar *name, 28367 const gchar *object_path, 28368 GCancellable *cancellable, 28369 GAsyncReadyCallback callback, 28370 gpointer user_data) 28371 { 28372 g_async_initable_new_async (TYPE_LED_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.Led", NULL); 28373 } 28374 28375 /** 28376 * led_proxy_new_finish: 28377 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to led_proxy_new(). 28378 * @error: Return location for error or %NULL 28379 * 28380 * Finishes an operation started with led_proxy_new(). 28381 * 28382 * Returns: (transfer full) (type LedProxy): The constructed proxy object or %NULL if @error is set. 28383 */ 28384 Led * 28385 led_proxy_new_finish ( 28386 GAsyncResult *res, 28387 GError **error) 28388 { 28389 GObject *ret; 28390 GObject *source_object; 28391 source_object = g_async_result_get_source_object (res); 28392 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 28393 g_object_unref (source_object); 28394 if (ret != NULL) 28395 return LED (ret); 28396 else 28397 return NULL; 28398 } 28399 28400 /** 28401 * led_proxy_new_sync: 28402 * @connection: A #GDBusConnection. 28403 * @flags: Flags from the #GDBusProxyFlags enumeration. 28404 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 28405 * @object_path: An object path. 28406 * @cancellable: (allow-none): A #GCancellable or %NULL. 28407 * @error: Return location for error or %NULL 28408 * 28409 * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Led.top_of_page">org.openbmc.Led</link>. See g_dbus_proxy_new_sync() for more details. 28410 * 28411 * The calling thread is blocked until a reply is received. 28412 * 28413 * See led_proxy_new() for the asynchronous version of this constructor. 28414 * 28415 * Returns: (transfer full) (type LedProxy): The constructed proxy object or %NULL if @error is set. 28416 */ 28417 Led * 28418 led_proxy_new_sync ( 28419 GDBusConnection *connection, 28420 GDBusProxyFlags flags, 28421 const gchar *name, 28422 const gchar *object_path, 28423 GCancellable *cancellable, 28424 GError **error) 28425 { 28426 GInitable *ret; 28427 ret = g_initable_new (TYPE_LED_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.Led", NULL); 28428 if (ret != NULL) 28429 return LED (ret); 28430 else 28431 return NULL; 28432 } 28433 28434 28435 /** 28436 * led_proxy_new_for_bus: 28437 * @bus_type: A #GBusType. 28438 * @flags: Flags from the #GDBusProxyFlags enumeration. 28439 * @name: A bus name (well-known or unique). 28440 * @object_path: An object path. 28441 * @cancellable: (allow-none): A #GCancellable or %NULL. 28442 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 28443 * @user_data: User data to pass to @callback. 28444 * 28445 * Like led_proxy_new() but takes a #GBusType instead of a #GDBusConnection. 28446 * 28447 * 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. 28448 * You can then call led_proxy_new_for_bus_finish() to get the result of the operation. 28449 * 28450 * See led_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor. 28451 */ 28452 void 28453 led_proxy_new_for_bus ( 28454 GBusType bus_type, 28455 GDBusProxyFlags flags, 28456 const gchar *name, 28457 const gchar *object_path, 28458 GCancellable *cancellable, 28459 GAsyncReadyCallback callback, 28460 gpointer user_data) 28461 { 28462 g_async_initable_new_async (TYPE_LED_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.Led", NULL); 28463 } 28464 28465 /** 28466 * led_proxy_new_for_bus_finish: 28467 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to led_proxy_new_for_bus(). 28468 * @error: Return location for error or %NULL 28469 * 28470 * Finishes an operation started with led_proxy_new_for_bus(). 28471 * 28472 * Returns: (transfer full) (type LedProxy): The constructed proxy object or %NULL if @error is set. 28473 */ 28474 Led * 28475 led_proxy_new_for_bus_finish ( 28476 GAsyncResult *res, 28477 GError **error) 28478 { 28479 GObject *ret; 28480 GObject *source_object; 28481 source_object = g_async_result_get_source_object (res); 28482 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 28483 g_object_unref (source_object); 28484 if (ret != NULL) 28485 return LED (ret); 28486 else 28487 return NULL; 28488 } 28489 28490 /** 28491 * led_proxy_new_for_bus_sync: 28492 * @bus_type: A #GBusType. 28493 * @flags: Flags from the #GDBusProxyFlags enumeration. 28494 * @name: A bus name (well-known or unique). 28495 * @object_path: An object path. 28496 * @cancellable: (allow-none): A #GCancellable or %NULL. 28497 * @error: Return location for error or %NULL 28498 * 28499 * Like led_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection. 28500 * 28501 * The calling thread is blocked until a reply is received. 28502 * 28503 * See led_proxy_new_for_bus() for the asynchronous version of this constructor. 28504 * 28505 * Returns: (transfer full) (type LedProxy): The constructed proxy object or %NULL if @error is set. 28506 */ 28507 Led * 28508 led_proxy_new_for_bus_sync ( 28509 GBusType bus_type, 28510 GDBusProxyFlags flags, 28511 const gchar *name, 28512 const gchar *object_path, 28513 GCancellable *cancellable, 28514 GError **error) 28515 { 28516 GInitable *ret; 28517 ret = g_initable_new (TYPE_LED_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.Led", NULL); 28518 if (ret != NULL) 28519 return LED (ret); 28520 else 28521 return NULL; 28522 } 28523 28524 28525 /* ------------------------------------------------------------------------ */ 28526 28527 /** 28528 * LedSkeleton: 28529 * 28530 * The #LedSkeleton structure contains only private data and should only be accessed using the provided API. 28531 */ 28532 28533 /** 28534 * LedSkeletonClass: 28535 * @parent_class: The parent class. 28536 * 28537 * Class structure for #LedSkeleton. 28538 */ 28539 28540 struct _LedSkeletonPrivate 28541 { 28542 GValue *properties; 28543 GList *changed_properties; 28544 GSource *changed_properties_idle_source; 28545 GMainContext *context; 28546 GMutex lock; 28547 }; 28548 28549 static void 28550 _led_skeleton_handle_method_call ( 28551 GDBusConnection *connection G_GNUC_UNUSED, 28552 const gchar *sender G_GNUC_UNUSED, 28553 const gchar *object_path G_GNUC_UNUSED, 28554 const gchar *interface_name, 28555 const gchar *method_name, 28556 GVariant *parameters, 28557 GDBusMethodInvocation *invocation, 28558 gpointer user_data) 28559 { 28560 LedSkeleton *skeleton = LED_SKELETON (user_data); 28561 _ExtendedGDBusMethodInfo *info; 28562 GVariantIter iter; 28563 GVariant *child; 28564 GValue *paramv; 28565 guint num_params; 28566 guint num_extra; 28567 guint n; 28568 guint signal_id; 28569 GValue return_value = G_VALUE_INIT; 28570 info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation); 28571 g_assert (info != NULL); 28572 num_params = g_variant_n_children (parameters); 28573 num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra); 28574 n = 0; 28575 g_value_init (¶mv[n], TYPE_LED); 28576 g_value_set_object (¶mv[n++], skeleton); 28577 g_value_init (¶mv[n], G_TYPE_DBUS_METHOD_INVOCATION); 28578 g_value_set_object (¶mv[n++], invocation); 28579 if (info->pass_fdlist) 28580 { 28581 #ifdef G_OS_UNIX 28582 g_value_init (¶mv[n], G_TYPE_UNIX_FD_LIST); 28583 g_value_set_object (¶mv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation))); 28584 #else 28585 g_assert_not_reached (); 28586 #endif 28587 } 28588 g_variant_iter_init (&iter, parameters); 28589 while ((child = g_variant_iter_next_value (&iter)) != NULL) 28590 { 28591 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra]; 28592 if (arg_info->use_gvariant) 28593 { 28594 g_value_init (¶mv[n], G_TYPE_VARIANT); 28595 g_value_set_variant (¶mv[n], child); 28596 n++; 28597 } 28598 else 28599 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 28600 g_variant_unref (child); 28601 } 28602 signal_id = g_signal_lookup (info->signal_name, TYPE_LED); 28603 g_value_init (&return_value, G_TYPE_BOOLEAN); 28604 g_signal_emitv (paramv, signal_id, 0, &return_value); 28605 if (!g_value_get_boolean (&return_value)) 28606 g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name); 28607 g_value_unset (&return_value); 28608 for (n = 0; n < num_params + num_extra; n++) 28609 g_value_unset (¶mv[n]); 28610 g_free (paramv); 28611 } 28612 28613 static GVariant * 28614 _led_skeleton_handle_get_property ( 28615 GDBusConnection *connection G_GNUC_UNUSED, 28616 const gchar *sender G_GNUC_UNUSED, 28617 const gchar *object_path G_GNUC_UNUSED, 28618 const gchar *interface_name G_GNUC_UNUSED, 28619 const gchar *property_name, 28620 GError **error, 28621 gpointer user_data) 28622 { 28623 LedSkeleton *skeleton = LED_SKELETON (user_data); 28624 GValue value = G_VALUE_INIT; 28625 GParamSpec *pspec; 28626 _ExtendedGDBusPropertyInfo *info; 28627 GVariant *ret; 28628 ret = NULL; 28629 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_led_interface_info.parent_struct, property_name); 28630 g_assert (info != NULL); 28631 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 28632 if (pspec == NULL) 28633 { 28634 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 28635 } 28636 else 28637 { 28638 g_value_init (&value, pspec->value_type); 28639 g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value); 28640 ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature)); 28641 g_value_unset (&value); 28642 } 28643 return ret; 28644 } 28645 28646 static gboolean 28647 _led_skeleton_handle_set_property ( 28648 GDBusConnection *connection G_GNUC_UNUSED, 28649 const gchar *sender G_GNUC_UNUSED, 28650 const gchar *object_path G_GNUC_UNUSED, 28651 const gchar *interface_name G_GNUC_UNUSED, 28652 const gchar *property_name, 28653 GVariant *variant, 28654 GError **error, 28655 gpointer user_data) 28656 { 28657 LedSkeleton *skeleton = LED_SKELETON (user_data); 28658 GValue value = G_VALUE_INIT; 28659 GParamSpec *pspec; 28660 _ExtendedGDBusPropertyInfo *info; 28661 gboolean ret; 28662 ret = FALSE; 28663 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_led_interface_info.parent_struct, property_name); 28664 g_assert (info != NULL); 28665 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 28666 if (pspec == NULL) 28667 { 28668 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 28669 } 28670 else 28671 { 28672 if (info->use_gvariant) 28673 g_value_set_variant (&value, variant); 28674 else 28675 g_dbus_gvariant_to_gvalue (variant, &value); 28676 g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value); 28677 g_value_unset (&value); 28678 ret = TRUE; 28679 } 28680 return ret; 28681 } 28682 28683 static const GDBusInterfaceVTable _led_skeleton_vtable = 28684 { 28685 _led_skeleton_handle_method_call, 28686 _led_skeleton_handle_get_property, 28687 _led_skeleton_handle_set_property, 28688 {NULL} 28689 }; 28690 28691 static GDBusInterfaceInfo * 28692 led_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 28693 { 28694 return led_interface_info (); 28695 } 28696 28697 static GDBusInterfaceVTable * 28698 led_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 28699 { 28700 return (GDBusInterfaceVTable *) &_led_skeleton_vtable; 28701 } 28702 28703 static GVariant * 28704 led_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton) 28705 { 28706 LedSkeleton *skeleton = LED_SKELETON (_skeleton); 28707 28708 GVariantBuilder builder; 28709 guint n; 28710 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 28711 if (_led_interface_info.parent_struct.properties == NULL) 28712 goto out; 28713 for (n = 0; _led_interface_info.parent_struct.properties[n] != NULL; n++) 28714 { 28715 GDBusPropertyInfo *info = _led_interface_info.parent_struct.properties[n]; 28716 if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE) 28717 { 28718 GVariant *value; 28719 value = _led_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.Led", info->name, NULL, skeleton); 28720 if (value != NULL) 28721 { 28722 g_variant_take_ref (value); 28723 g_variant_builder_add (&builder, "{sv}", info->name, value); 28724 g_variant_unref (value); 28725 } 28726 } 28727 } 28728 out: 28729 return g_variant_builder_end (&builder); 28730 } 28731 28732 static gboolean _led_emit_changed (gpointer user_data); 28733 28734 static void 28735 led_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton) 28736 { 28737 LedSkeleton *skeleton = LED_SKELETON (_skeleton); 28738 gboolean emit_changed = FALSE; 28739 28740 g_mutex_lock (&skeleton->priv->lock); 28741 if (skeleton->priv->changed_properties_idle_source != NULL) 28742 { 28743 g_source_destroy (skeleton->priv->changed_properties_idle_source); 28744 skeleton->priv->changed_properties_idle_source = NULL; 28745 emit_changed = TRUE; 28746 } 28747 g_mutex_unlock (&skeleton->priv->lock); 28748 28749 if (emit_changed) 28750 _led_emit_changed (skeleton); 28751 } 28752 28753 static void led_skeleton_iface_init (LedIface *iface); 28754 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 28755 G_DEFINE_TYPE_WITH_CODE (LedSkeleton, led_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 28756 G_ADD_PRIVATE (LedSkeleton) 28757 G_IMPLEMENT_INTERFACE (TYPE_LED, led_skeleton_iface_init)); 28758 28759 #else 28760 G_DEFINE_TYPE_WITH_CODE (LedSkeleton, led_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 28761 G_IMPLEMENT_INTERFACE (TYPE_LED, led_skeleton_iface_init)); 28762 28763 #endif 28764 static void 28765 led_skeleton_finalize (GObject *object) 28766 { 28767 LedSkeleton *skeleton = LED_SKELETON (object); 28768 guint n; 28769 for (n = 0; n < 3; n++) 28770 g_value_unset (&skeleton->priv->properties[n]); 28771 g_free (skeleton->priv->properties); 28772 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 28773 if (skeleton->priv->changed_properties_idle_source != NULL) 28774 g_source_destroy (skeleton->priv->changed_properties_idle_source); 28775 g_main_context_unref (skeleton->priv->context); 28776 g_mutex_clear (&skeleton->priv->lock); 28777 G_OBJECT_CLASS (led_skeleton_parent_class)->finalize (object); 28778 } 28779 28780 static void 28781 led_skeleton_get_property (GObject *object, 28782 guint prop_id, 28783 GValue *value, 28784 GParamSpec *pspec G_GNUC_UNUSED) 28785 { 28786 LedSkeleton *skeleton = LED_SKELETON (object); 28787 g_assert (prop_id != 0 && prop_id - 1 < 3); 28788 g_mutex_lock (&skeleton->priv->lock); 28789 g_value_copy (&skeleton->priv->properties[prop_id - 1], value); 28790 g_mutex_unlock (&skeleton->priv->lock); 28791 } 28792 28793 static gboolean 28794 _led_emit_changed (gpointer user_data) 28795 { 28796 LedSkeleton *skeleton = LED_SKELETON (user_data); 28797 GList *l; 28798 GVariantBuilder builder; 28799 GVariantBuilder invalidated_builder; 28800 guint num_changes; 28801 28802 g_mutex_lock (&skeleton->priv->lock); 28803 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 28804 g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as")); 28805 for (l = skeleton->priv->changed_properties, num_changes = 0; l != NULL; l = l->next) 28806 { 28807 ChangedProperty *cp = l->data; 28808 GVariant *variant; 28809 const GValue *cur_value; 28810 28811 cur_value = &skeleton->priv->properties[cp->prop_id - 1]; 28812 if (!_g_value_equal (cur_value, &cp->orig_value)) 28813 { 28814 variant = g_dbus_gvalue_to_gvariant (cur_value, G_VARIANT_TYPE (cp->info->parent_struct.signature)); 28815 g_variant_builder_add (&builder, "{sv}", cp->info->parent_struct.name, variant); 28816 g_variant_unref (variant); 28817 num_changes++; 28818 } 28819 } 28820 if (num_changes > 0) 28821 { 28822 GList *connections, *ll; 28823 GVariant *signal_variant; 28824 signal_variant = g_variant_ref_sink (g_variant_new ("(sa{sv}as)", "org.openbmc.Led", 28825 &builder, &invalidated_builder)); 28826 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 28827 for (ll = connections; ll != NULL; ll = ll->next) 28828 { 28829 GDBusConnection *connection = ll->data; 28830 28831 g_dbus_connection_emit_signal (connection, 28832 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), 28833 "org.freedesktop.DBus.Properties", 28834 "PropertiesChanged", 28835 signal_variant, 28836 NULL); 28837 } 28838 g_variant_unref (signal_variant); 28839 g_list_free_full (connections, g_object_unref); 28840 } 28841 else 28842 { 28843 g_variant_builder_clear (&builder); 28844 g_variant_builder_clear (&invalidated_builder); 28845 } 28846 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 28847 skeleton->priv->changed_properties = NULL; 28848 skeleton->priv->changed_properties_idle_source = NULL; 28849 g_mutex_unlock (&skeleton->priv->lock); 28850 return FALSE; 28851 } 28852 28853 static void 28854 _led_schedule_emit_changed (LedSkeleton *skeleton, const _ExtendedGDBusPropertyInfo *info, guint prop_id, const GValue *orig_value) 28855 { 28856 ChangedProperty *cp; 28857 GList *l; 28858 cp = NULL; 28859 for (l = skeleton->priv->changed_properties; l != NULL; l = l->next) 28860 { 28861 ChangedProperty *i_cp = l->data; 28862 if (i_cp->info == info) 28863 { 28864 cp = i_cp; 28865 break; 28866 } 28867 } 28868 if (cp == NULL) 28869 { 28870 cp = g_new0 (ChangedProperty, 1); 28871 cp->prop_id = prop_id; 28872 cp->info = info; 28873 skeleton->priv->changed_properties = g_list_prepend (skeleton->priv->changed_properties, cp); 28874 g_value_init (&cp->orig_value, G_VALUE_TYPE (orig_value)); 28875 g_value_copy (orig_value, &cp->orig_value); 28876 } 28877 } 28878 28879 static void 28880 led_skeleton_notify (GObject *object, 28881 GParamSpec *pspec G_GNUC_UNUSED) 28882 { 28883 LedSkeleton *skeleton = LED_SKELETON (object); 28884 g_mutex_lock (&skeleton->priv->lock); 28885 if (skeleton->priv->changed_properties != NULL && 28886 skeleton->priv->changed_properties_idle_source == NULL) 28887 { 28888 skeleton->priv->changed_properties_idle_source = g_idle_source_new (); 28889 g_source_set_priority (skeleton->priv->changed_properties_idle_source, G_PRIORITY_DEFAULT); 28890 g_source_set_callback (skeleton->priv->changed_properties_idle_source, _led_emit_changed, g_object_ref (skeleton), (GDestroyNotify) g_object_unref); 28891 g_source_set_name (skeleton->priv->changed_properties_idle_source, "[generated] _led_emit_changed"); 28892 g_source_attach (skeleton->priv->changed_properties_idle_source, skeleton->priv->context); 28893 g_source_unref (skeleton->priv->changed_properties_idle_source); 28894 } 28895 g_mutex_unlock (&skeleton->priv->lock); 28896 } 28897 28898 static void 28899 led_skeleton_set_property (GObject *object, 28900 guint prop_id, 28901 const GValue *value, 28902 GParamSpec *pspec) 28903 { 28904 LedSkeleton *skeleton = LED_SKELETON (object); 28905 g_assert (prop_id != 0 && prop_id - 1 < 3); 28906 g_mutex_lock (&skeleton->priv->lock); 28907 g_object_freeze_notify (object); 28908 if (!_g_value_equal (value, &skeleton->priv->properties[prop_id - 1])) 28909 { 28910 if (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)) != NULL) 28911 _led_schedule_emit_changed (skeleton, _led_property_info_pointers[prop_id - 1], prop_id, &skeleton->priv->properties[prop_id - 1]); 28912 g_value_copy (value, &skeleton->priv->properties[prop_id - 1]); 28913 g_object_notify_by_pspec (object, pspec); 28914 } 28915 g_mutex_unlock (&skeleton->priv->lock); 28916 g_object_thaw_notify (object); 28917 } 28918 28919 static void 28920 led_skeleton_init (LedSkeleton *skeleton) 28921 { 28922 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 28923 skeleton->priv = led_skeleton_get_instance_private (skeleton); 28924 #else 28925 skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, TYPE_LED_SKELETON, LedSkeletonPrivate); 28926 #endif 28927 28928 g_mutex_init (&skeleton->priv->lock); 28929 skeleton->priv->context = g_main_context_ref_thread_default (); 28930 skeleton->priv->properties = g_new0 (GValue, 3); 28931 g_value_init (&skeleton->priv->properties[0], G_TYPE_INT); 28932 g_value_init (&skeleton->priv->properties[1], G_TYPE_STRING); 28933 g_value_init (&skeleton->priv->properties[2], G_TYPE_STRING); 28934 } 28935 28936 static gint 28937 led_skeleton_get_color (Led *object) 28938 { 28939 LedSkeleton *skeleton = LED_SKELETON (object); 28940 gint value; 28941 g_mutex_lock (&skeleton->priv->lock); 28942 value = g_value_get_int (&(skeleton->priv->properties[0])); 28943 g_mutex_unlock (&skeleton->priv->lock); 28944 return value; 28945 } 28946 28947 static const gchar * 28948 led_skeleton_get_function (Led *object) 28949 { 28950 LedSkeleton *skeleton = LED_SKELETON (object); 28951 const gchar *value; 28952 g_mutex_lock (&skeleton->priv->lock); 28953 value = g_value_get_string (&(skeleton->priv->properties[1])); 28954 g_mutex_unlock (&skeleton->priv->lock); 28955 return value; 28956 } 28957 28958 static const gchar * 28959 led_skeleton_get_state (Led *object) 28960 { 28961 LedSkeleton *skeleton = LED_SKELETON (object); 28962 const gchar *value; 28963 g_mutex_lock (&skeleton->priv->lock); 28964 value = g_value_get_string (&(skeleton->priv->properties[2])); 28965 g_mutex_unlock (&skeleton->priv->lock); 28966 return value; 28967 } 28968 28969 static void 28970 led_skeleton_class_init (LedSkeletonClass *klass) 28971 { 28972 GObjectClass *gobject_class; 28973 GDBusInterfaceSkeletonClass *skeleton_class; 28974 28975 gobject_class = G_OBJECT_CLASS (klass); 28976 gobject_class->finalize = led_skeleton_finalize; 28977 gobject_class->get_property = led_skeleton_get_property; 28978 gobject_class->set_property = led_skeleton_set_property; 28979 gobject_class->notify = led_skeleton_notify; 28980 28981 28982 led_override_properties (gobject_class, 1); 28983 28984 skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass); 28985 skeleton_class->get_info = led_skeleton_dbus_interface_get_info; 28986 skeleton_class->get_properties = led_skeleton_dbus_interface_get_properties; 28987 skeleton_class->flush = led_skeleton_dbus_interface_flush; 28988 skeleton_class->get_vtable = led_skeleton_dbus_interface_get_vtable; 28989 28990 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 28991 g_type_class_add_private (klass, sizeof (LedSkeletonPrivate)); 28992 #endif 28993 } 28994 28995 static void 28996 led_skeleton_iface_init (LedIface *iface) 28997 { 28998 iface->get_color = led_skeleton_get_color; 28999 iface->get_function = led_skeleton_get_function; 29000 iface->get_state = led_skeleton_get_state; 29001 } 29002 29003 /** 29004 * led_skeleton_new: 29005 * 29006 * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Led.top_of_page">org.openbmc.Led</link>. 29007 * 29008 * Returns: (transfer full) (type LedSkeleton): The skeleton object. 29009 */ 29010 Led * 29011 led_skeleton_new (void) 29012 { 29013 return LED (g_object_new (TYPE_LED_SKELETON, NULL)); 29014 } 29015 29016 /* ------------------------------------------------------------------------ 29017 * Code for interface org.openbmc.HostIpmi 29018 * ------------------------------------------------------------------------ 29019 */ 29020 29021 /** 29022 * SECTION:HostIpmi 29023 * @title: HostIpmi 29024 * @short_description: Generated C code for the org.openbmc.HostIpmi D-Bus interface 29025 * 29026 * This section contains code for working with the <link linkend="gdbus-interface-org-openbmc-HostIpmi.top_of_page">org.openbmc.HostIpmi</link> D-Bus interface in C. 29027 */ 29028 29029 /* ---- Introspection data for org.openbmc.HostIpmi ---- */ 29030 29031 static const _ExtendedGDBusArgInfo _host_ipmi_method_info_send_message_IN_ARG_seq = 29032 { 29033 { 29034 -1, 29035 (gchar *) "seq", 29036 (gchar *) "y", 29037 NULL 29038 }, 29039 FALSE 29040 }; 29041 29042 static const _ExtendedGDBusArgInfo _host_ipmi_method_info_send_message_IN_ARG_netfn = 29043 { 29044 { 29045 -1, 29046 (gchar *) "netfn", 29047 (gchar *) "y", 29048 NULL 29049 }, 29050 FALSE 29051 }; 29052 29053 static const _ExtendedGDBusArgInfo _host_ipmi_method_info_send_message_IN_ARG_cmd = 29054 { 29055 { 29056 -1, 29057 (gchar *) "cmd", 29058 (gchar *) "y", 29059 NULL 29060 }, 29061 FALSE 29062 }; 29063 29064 static const _ExtendedGDBusArgInfo _host_ipmi_method_info_send_message_IN_ARG_data = 29065 { 29066 { 29067 -1, 29068 (gchar *) "data", 29069 (gchar *) "ay", 29070 NULL 29071 }, 29072 FALSE 29073 }; 29074 29075 static const _ExtendedGDBusArgInfo * const _host_ipmi_method_info_send_message_IN_ARG_pointers[] = 29076 { 29077 &_host_ipmi_method_info_send_message_IN_ARG_seq, 29078 &_host_ipmi_method_info_send_message_IN_ARG_netfn, 29079 &_host_ipmi_method_info_send_message_IN_ARG_cmd, 29080 &_host_ipmi_method_info_send_message_IN_ARG_data, 29081 NULL 29082 }; 29083 29084 static const _ExtendedGDBusArgInfo _host_ipmi_method_info_send_message_OUT_ARG_unnamed_arg4 = 29085 { 29086 { 29087 -1, 29088 (gchar *) "unnamed_arg4", 29089 (gchar *) "x", 29090 NULL 29091 }, 29092 FALSE 29093 }; 29094 29095 static const _ExtendedGDBusArgInfo * const _host_ipmi_method_info_send_message_OUT_ARG_pointers[] = 29096 { 29097 &_host_ipmi_method_info_send_message_OUT_ARG_unnamed_arg4, 29098 NULL 29099 }; 29100 29101 static const _ExtendedGDBusMethodInfo _host_ipmi_method_info_send_message = 29102 { 29103 { 29104 -1, 29105 (gchar *) "sendMessage", 29106 (GDBusArgInfo **) &_host_ipmi_method_info_send_message_IN_ARG_pointers, 29107 (GDBusArgInfo **) &_host_ipmi_method_info_send_message_OUT_ARG_pointers, 29108 NULL 29109 }, 29110 "handle-send-message", 29111 FALSE 29112 }; 29113 29114 static const _ExtendedGDBusMethodInfo * const _host_ipmi_method_info_pointers[] = 29115 { 29116 &_host_ipmi_method_info_send_message, 29117 NULL 29118 }; 29119 29120 static const _ExtendedGDBusArgInfo _host_ipmi_signal_info_received_message_ARG_seq = 29121 { 29122 { 29123 -1, 29124 (gchar *) "seq", 29125 (gchar *) "y", 29126 NULL 29127 }, 29128 FALSE 29129 }; 29130 29131 static const _ExtendedGDBusArgInfo _host_ipmi_signal_info_received_message_ARG_netfn = 29132 { 29133 { 29134 -1, 29135 (gchar *) "netfn", 29136 (gchar *) "y", 29137 NULL 29138 }, 29139 FALSE 29140 }; 29141 29142 static const _ExtendedGDBusArgInfo _host_ipmi_signal_info_received_message_ARG_cmd = 29143 { 29144 { 29145 -1, 29146 (gchar *) "cmd", 29147 (gchar *) "y", 29148 NULL 29149 }, 29150 FALSE 29151 }; 29152 29153 static const _ExtendedGDBusArgInfo _host_ipmi_signal_info_received_message_ARG_data = 29154 { 29155 { 29156 -1, 29157 (gchar *) "data", 29158 (gchar *) "ay", 29159 NULL 29160 }, 29161 FALSE 29162 }; 29163 29164 static const _ExtendedGDBusArgInfo * const _host_ipmi_signal_info_received_message_ARG_pointers[] = 29165 { 29166 &_host_ipmi_signal_info_received_message_ARG_seq, 29167 &_host_ipmi_signal_info_received_message_ARG_netfn, 29168 &_host_ipmi_signal_info_received_message_ARG_cmd, 29169 &_host_ipmi_signal_info_received_message_ARG_data, 29170 NULL 29171 }; 29172 29173 static const _ExtendedGDBusSignalInfo _host_ipmi_signal_info_received_message = 29174 { 29175 { 29176 -1, 29177 (gchar *) "ReceivedMessage", 29178 (GDBusArgInfo **) &_host_ipmi_signal_info_received_message_ARG_pointers, 29179 NULL 29180 }, 29181 "received-message" 29182 }; 29183 29184 static const _ExtendedGDBusSignalInfo * const _host_ipmi_signal_info_pointers[] = 29185 { 29186 &_host_ipmi_signal_info_received_message, 29187 NULL 29188 }; 29189 29190 static const _ExtendedGDBusInterfaceInfo _host_ipmi_interface_info = 29191 { 29192 { 29193 -1, 29194 (gchar *) "org.openbmc.HostIpmi", 29195 (GDBusMethodInfo **) &_host_ipmi_method_info_pointers, 29196 (GDBusSignalInfo **) &_host_ipmi_signal_info_pointers, 29197 NULL, 29198 NULL 29199 }, 29200 "host-ipmi", 29201 }; 29202 29203 29204 /** 29205 * host_ipmi_interface_info: 29206 * 29207 * Gets a machine-readable description of the <link linkend="gdbus-interface-org-openbmc-HostIpmi.top_of_page">org.openbmc.HostIpmi</link> D-Bus interface. 29208 * 29209 * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free. 29210 */ 29211 GDBusInterfaceInfo * 29212 host_ipmi_interface_info (void) 29213 { 29214 return (GDBusInterfaceInfo *) &_host_ipmi_interface_info.parent_struct; 29215 } 29216 29217 /** 29218 * host_ipmi_override_properties: 29219 * @klass: The class structure for a #GObject<!-- -->-derived class. 29220 * @property_id_begin: The property id to assign to the first overridden property. 29221 * 29222 * Overrides all #GObject properties in the #HostIpmi interface for a concrete class. 29223 * The properties are overridden in the order they are defined. 29224 * 29225 * Returns: The last property id. 29226 */ 29227 guint 29228 host_ipmi_override_properties (GObjectClass *klass, guint property_id_begin) 29229 { 29230 return property_id_begin - 1; 29231 } 29232 29233 29234 29235 /** 29236 * HostIpmi: 29237 * 29238 * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-HostIpmi.top_of_page">org.openbmc.HostIpmi</link>. 29239 */ 29240 29241 /** 29242 * HostIpmiIface: 29243 * @parent_iface: The parent interface. 29244 * @handle_send_message: Handler for the #HostIpmi::handle-send-message signal. 29245 * @received_message: Handler for the #HostIpmi::received-message signal. 29246 * 29247 * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-HostIpmi.top_of_page">org.openbmc.HostIpmi</link>. 29248 */ 29249 29250 typedef HostIpmiIface HostIpmiInterface; 29251 G_DEFINE_INTERFACE (HostIpmi, host_ipmi, G_TYPE_OBJECT); 29252 29253 static void 29254 host_ipmi_default_init (HostIpmiIface *iface) 29255 { 29256 /* GObject signals for incoming D-Bus method calls: */ 29257 /** 29258 * HostIpmi::handle-send-message: 29259 * @object: A #HostIpmi. 29260 * @invocation: A #GDBusMethodInvocation. 29261 * @arg_seq: Argument passed by remote caller. 29262 * @arg_netfn: Argument passed by remote caller. 29263 * @arg_cmd: Argument passed by remote caller. 29264 * @arg_data: Argument passed by remote caller. 29265 * 29266 * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-openbmc-HostIpmi.sendMessage">sendMessage()</link> D-Bus method. 29267 * 29268 * 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 host_ipmi_complete_send_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. 29269 * 29270 * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run. 29271 */ 29272 g_signal_new ("handle-send-message", 29273 G_TYPE_FROM_INTERFACE (iface), 29274 G_SIGNAL_RUN_LAST, 29275 G_STRUCT_OFFSET (HostIpmiIface, handle_send_message), 29276 g_signal_accumulator_true_handled, 29277 NULL, 29278 g_cclosure_marshal_generic, 29279 G_TYPE_BOOLEAN, 29280 5, 29281 G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UCHAR, G_TYPE_UCHAR, G_TYPE_UCHAR, G_TYPE_STRING); 29282 29283 /* GObject signals for received D-Bus signals: */ 29284 /** 29285 * HostIpmi::received-message: 29286 * @object: A #HostIpmi. 29287 * @arg_seq: Argument. 29288 * @arg_netfn: Argument. 29289 * @arg_cmd: Argument. 29290 * @arg_data: Argument. 29291 * 29292 * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-openbmc-HostIpmi.ReceivedMessage">"ReceivedMessage"</link> is received. 29293 * 29294 * 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. 29295 */ 29296 g_signal_new ("received-message", 29297 G_TYPE_FROM_INTERFACE (iface), 29298 G_SIGNAL_RUN_LAST, 29299 G_STRUCT_OFFSET (HostIpmiIface, received_message), 29300 NULL, 29301 NULL, 29302 g_cclosure_marshal_generic, 29303 G_TYPE_NONE, 29304 4, G_TYPE_UCHAR, G_TYPE_UCHAR, G_TYPE_UCHAR, G_TYPE_STRING); 29305 29306 } 29307 29308 /** 29309 * host_ipmi_emit_received_message: 29310 * @object: A #HostIpmi. 29311 * @arg_seq: Argument to pass with the signal. 29312 * @arg_netfn: Argument to pass with the signal. 29313 * @arg_cmd: Argument to pass with the signal. 29314 * @arg_data: Argument to pass with the signal. 29315 * 29316 * Emits the <link linkend="gdbus-signal-org-openbmc-HostIpmi.ReceivedMessage">"ReceivedMessage"</link> D-Bus signal. 29317 */ 29318 void 29319 host_ipmi_emit_received_message ( 29320 HostIpmi *object, 29321 guchar arg_seq, 29322 guchar arg_netfn, 29323 guchar arg_cmd, 29324 const gchar *arg_data) 29325 { 29326 g_signal_emit_by_name (object, "received-message", arg_seq, arg_netfn, arg_cmd, arg_data); 29327 } 29328 29329 /** 29330 * host_ipmi_call_send_message: 29331 * @proxy: A #HostIpmiProxy. 29332 * @arg_seq: Argument to pass with the method invocation. 29333 * @arg_netfn: Argument to pass with the method invocation. 29334 * @arg_cmd: Argument to pass with the method invocation. 29335 * @arg_data: Argument to pass with the method invocation. 29336 * @cancellable: (allow-none): A #GCancellable or %NULL. 29337 * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL. 29338 * @user_data: User data to pass to @callback. 29339 * 29340 * Asynchronously invokes the <link linkend="gdbus-method-org-openbmc-HostIpmi.sendMessage">sendMessage()</link> D-Bus method on @proxy. 29341 * 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. 29342 * You can then call host_ipmi_call_send_message_finish() to get the result of the operation. 29343 * 29344 * See host_ipmi_call_send_message_sync() for the synchronous, blocking version of this method. 29345 */ 29346 void 29347 host_ipmi_call_send_message ( 29348 HostIpmi *proxy, 29349 guchar arg_seq, 29350 guchar arg_netfn, 29351 guchar arg_cmd, 29352 const gchar *arg_data, 29353 GCancellable *cancellable, 29354 GAsyncReadyCallback callback, 29355 gpointer user_data) 29356 { 29357 g_dbus_proxy_call (G_DBUS_PROXY (proxy), 29358 "sendMessage", 29359 g_variant_new ("(yyy^ay)", 29360 arg_seq, 29361 arg_netfn, 29362 arg_cmd, 29363 arg_data), 29364 G_DBUS_CALL_FLAGS_NONE, 29365 -1, 29366 cancellable, 29367 callback, 29368 user_data); 29369 } 29370 29371 /** 29372 * host_ipmi_call_send_message_finish: 29373 * @proxy: A #HostIpmiProxy. 29374 * @out_unnamed_arg4: (out): Return location for return parameter or %NULL to ignore. 29375 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to host_ipmi_call_send_message(). 29376 * @error: Return location for error or %NULL. 29377 * 29378 * Finishes an operation started with host_ipmi_call_send_message(). 29379 * 29380 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 29381 */ 29382 gboolean 29383 host_ipmi_call_send_message_finish ( 29384 HostIpmi *proxy, 29385 gint64 *out_unnamed_arg4, 29386 GAsyncResult *res, 29387 GError **error) 29388 { 29389 GVariant *_ret; 29390 _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error); 29391 if (_ret == NULL) 29392 goto _out; 29393 g_variant_get (_ret, 29394 "(x)", 29395 out_unnamed_arg4); 29396 g_variant_unref (_ret); 29397 _out: 29398 return _ret != NULL; 29399 } 29400 29401 /** 29402 * host_ipmi_call_send_message_sync: 29403 * @proxy: A #HostIpmiProxy. 29404 * @arg_seq: Argument to pass with the method invocation. 29405 * @arg_netfn: Argument to pass with the method invocation. 29406 * @arg_cmd: Argument to pass with the method invocation. 29407 * @arg_data: Argument to pass with the method invocation. 29408 * @out_unnamed_arg4: (out): Return location for return parameter or %NULL to ignore. 29409 * @cancellable: (allow-none): A #GCancellable or %NULL. 29410 * @error: Return location for error or %NULL. 29411 * 29412 * Synchronously invokes the <link linkend="gdbus-method-org-openbmc-HostIpmi.sendMessage">sendMessage()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received. 29413 * 29414 * See host_ipmi_call_send_message() for the asynchronous version of this method. 29415 * 29416 * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set. 29417 */ 29418 gboolean 29419 host_ipmi_call_send_message_sync ( 29420 HostIpmi *proxy, 29421 guchar arg_seq, 29422 guchar arg_netfn, 29423 guchar arg_cmd, 29424 const gchar *arg_data, 29425 gint64 *out_unnamed_arg4, 29426 GCancellable *cancellable, 29427 GError **error) 29428 { 29429 GVariant *_ret; 29430 _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy), 29431 "sendMessage", 29432 g_variant_new ("(yyy^ay)", 29433 arg_seq, 29434 arg_netfn, 29435 arg_cmd, 29436 arg_data), 29437 G_DBUS_CALL_FLAGS_NONE, 29438 -1, 29439 cancellable, 29440 error); 29441 if (_ret == NULL) 29442 goto _out; 29443 g_variant_get (_ret, 29444 "(x)", 29445 out_unnamed_arg4); 29446 g_variant_unref (_ret); 29447 _out: 29448 return _ret != NULL; 29449 } 29450 29451 /** 29452 * host_ipmi_complete_send_message: 29453 * @object: A #HostIpmi. 29454 * @invocation: (transfer full): A #GDBusMethodInvocation. 29455 * @unnamed_arg4: Parameter to return. 29456 * 29457 * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-openbmc-HostIpmi.sendMessage">sendMessage()</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. 29458 * 29459 * This method will free @invocation, you cannot use it afterwards. 29460 */ 29461 void 29462 host_ipmi_complete_send_message ( 29463 HostIpmi *object, 29464 GDBusMethodInvocation *invocation, 29465 gint64 unnamed_arg4) 29466 { 29467 g_dbus_method_invocation_return_value (invocation, 29468 g_variant_new ("(x)", 29469 unnamed_arg4)); 29470 } 29471 29472 /* ------------------------------------------------------------------------ */ 29473 29474 /** 29475 * HostIpmiProxy: 29476 * 29477 * The #HostIpmiProxy structure contains only private data and should only be accessed using the provided API. 29478 */ 29479 29480 /** 29481 * HostIpmiProxyClass: 29482 * @parent_class: The parent class. 29483 * 29484 * Class structure for #HostIpmiProxy. 29485 */ 29486 29487 struct _HostIpmiProxyPrivate 29488 { 29489 GData *qdata; 29490 }; 29491 29492 static void host_ipmi_proxy_iface_init (HostIpmiIface *iface); 29493 29494 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 29495 G_DEFINE_TYPE_WITH_CODE (HostIpmiProxy, host_ipmi_proxy, G_TYPE_DBUS_PROXY, 29496 G_ADD_PRIVATE (HostIpmiProxy) 29497 G_IMPLEMENT_INTERFACE (TYPE_HOST_IPMI, host_ipmi_proxy_iface_init)); 29498 29499 #else 29500 G_DEFINE_TYPE_WITH_CODE (HostIpmiProxy, host_ipmi_proxy, G_TYPE_DBUS_PROXY, 29501 G_IMPLEMENT_INTERFACE (TYPE_HOST_IPMI, host_ipmi_proxy_iface_init)); 29502 29503 #endif 29504 static void 29505 host_ipmi_proxy_finalize (GObject *object) 29506 { 29507 HostIpmiProxy *proxy = HOST_IPMI_PROXY (object); 29508 g_datalist_clear (&proxy->priv->qdata); 29509 G_OBJECT_CLASS (host_ipmi_proxy_parent_class)->finalize (object); 29510 } 29511 29512 static void 29513 host_ipmi_proxy_get_property (GObject *object, 29514 guint prop_id, 29515 GValue *value, 29516 GParamSpec *pspec G_GNUC_UNUSED) 29517 { 29518 } 29519 29520 static void 29521 host_ipmi_proxy_set_property (GObject *object, 29522 guint prop_id, 29523 const GValue *value, 29524 GParamSpec *pspec G_GNUC_UNUSED) 29525 { 29526 } 29527 29528 static void 29529 host_ipmi_proxy_g_signal (GDBusProxy *proxy, 29530 const gchar *sender_name G_GNUC_UNUSED, 29531 const gchar *signal_name, 29532 GVariant *parameters) 29533 { 29534 _ExtendedGDBusSignalInfo *info; 29535 GVariantIter iter; 29536 GVariant *child; 29537 GValue *paramv; 29538 guint num_params; 29539 guint n; 29540 guint signal_id; 29541 info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_host_ipmi_interface_info.parent_struct, signal_name); 29542 if (info == NULL) 29543 return; 29544 num_params = g_variant_n_children (parameters); 29545 paramv = g_new0 (GValue, num_params + 1); 29546 g_value_init (¶mv[0], TYPE_HOST_IPMI); 29547 g_value_set_object (¶mv[0], proxy); 29548 g_variant_iter_init (&iter, parameters); 29549 n = 1; 29550 while ((child = g_variant_iter_next_value (&iter)) != NULL) 29551 { 29552 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1]; 29553 if (arg_info->use_gvariant) 29554 { 29555 g_value_init (¶mv[n], G_TYPE_VARIANT); 29556 g_value_set_variant (¶mv[n], child); 29557 n++; 29558 } 29559 else 29560 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 29561 g_variant_unref (child); 29562 } 29563 signal_id = g_signal_lookup (info->signal_name, TYPE_HOST_IPMI); 29564 g_signal_emitv (paramv, signal_id, 0, NULL); 29565 for (n = 0; n < num_params + 1; n++) 29566 g_value_unset (¶mv[n]); 29567 g_free (paramv); 29568 } 29569 29570 static void 29571 host_ipmi_proxy_g_properties_changed (GDBusProxy *_proxy, 29572 GVariant *changed_properties, 29573 const gchar *const *invalidated_properties) 29574 { 29575 HostIpmiProxy *proxy = HOST_IPMI_PROXY (_proxy); 29576 guint n; 29577 const gchar *key; 29578 GVariantIter *iter; 29579 _ExtendedGDBusPropertyInfo *info; 29580 g_variant_get (changed_properties, "a{sv}", &iter); 29581 while (g_variant_iter_next (iter, "{&sv}", &key, NULL)) 29582 { 29583 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_host_ipmi_interface_info.parent_struct, key); 29584 g_datalist_remove_data (&proxy->priv->qdata, key); 29585 if (info != NULL) 29586 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 29587 } 29588 g_variant_iter_free (iter); 29589 for (n = 0; invalidated_properties[n] != NULL; n++) 29590 { 29591 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_host_ipmi_interface_info.parent_struct, invalidated_properties[n]); 29592 g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]); 29593 if (info != NULL) 29594 g_object_notify (G_OBJECT (proxy), info->hyphen_name); 29595 } 29596 } 29597 29598 static void 29599 host_ipmi_proxy_init (HostIpmiProxy *proxy) 29600 { 29601 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 29602 proxy->priv = host_ipmi_proxy_get_instance_private (proxy); 29603 #else 29604 proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, TYPE_HOST_IPMI_PROXY, HostIpmiProxyPrivate); 29605 #endif 29606 29607 g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), host_ipmi_interface_info ()); 29608 } 29609 29610 static void 29611 host_ipmi_proxy_class_init (HostIpmiProxyClass *klass) 29612 { 29613 GObjectClass *gobject_class; 29614 GDBusProxyClass *proxy_class; 29615 29616 gobject_class = G_OBJECT_CLASS (klass); 29617 gobject_class->finalize = host_ipmi_proxy_finalize; 29618 gobject_class->get_property = host_ipmi_proxy_get_property; 29619 gobject_class->set_property = host_ipmi_proxy_set_property; 29620 29621 proxy_class = G_DBUS_PROXY_CLASS (klass); 29622 proxy_class->g_signal = host_ipmi_proxy_g_signal; 29623 proxy_class->g_properties_changed = host_ipmi_proxy_g_properties_changed; 29624 29625 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 29626 g_type_class_add_private (klass, sizeof (HostIpmiProxyPrivate)); 29627 #endif 29628 } 29629 29630 static void 29631 host_ipmi_proxy_iface_init (HostIpmiIface *iface) 29632 { 29633 } 29634 29635 /** 29636 * host_ipmi_proxy_new: 29637 * @connection: A #GDBusConnection. 29638 * @flags: Flags from the #GDBusProxyFlags enumeration. 29639 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 29640 * @object_path: An object path. 29641 * @cancellable: (allow-none): A #GCancellable or %NULL. 29642 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 29643 * @user_data: User data to pass to @callback. 29644 * 29645 * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-HostIpmi.top_of_page">org.openbmc.HostIpmi</link>. See g_dbus_proxy_new() for more details. 29646 * 29647 * 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. 29648 * You can then call host_ipmi_proxy_new_finish() to get the result of the operation. 29649 * 29650 * See host_ipmi_proxy_new_sync() for the synchronous, blocking version of this constructor. 29651 */ 29652 void 29653 host_ipmi_proxy_new ( 29654 GDBusConnection *connection, 29655 GDBusProxyFlags flags, 29656 const gchar *name, 29657 const gchar *object_path, 29658 GCancellable *cancellable, 29659 GAsyncReadyCallback callback, 29660 gpointer user_data) 29661 { 29662 g_async_initable_new_async (TYPE_HOST_IPMI_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.HostIpmi", NULL); 29663 } 29664 29665 /** 29666 * host_ipmi_proxy_new_finish: 29667 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to host_ipmi_proxy_new(). 29668 * @error: Return location for error or %NULL 29669 * 29670 * Finishes an operation started with host_ipmi_proxy_new(). 29671 * 29672 * Returns: (transfer full) (type HostIpmiProxy): The constructed proxy object or %NULL if @error is set. 29673 */ 29674 HostIpmi * 29675 host_ipmi_proxy_new_finish ( 29676 GAsyncResult *res, 29677 GError **error) 29678 { 29679 GObject *ret; 29680 GObject *source_object; 29681 source_object = g_async_result_get_source_object (res); 29682 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 29683 g_object_unref (source_object); 29684 if (ret != NULL) 29685 return HOST_IPMI (ret); 29686 else 29687 return NULL; 29688 } 29689 29690 /** 29691 * host_ipmi_proxy_new_sync: 29692 * @connection: A #GDBusConnection. 29693 * @flags: Flags from the #GDBusProxyFlags enumeration. 29694 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 29695 * @object_path: An object path. 29696 * @cancellable: (allow-none): A #GCancellable or %NULL. 29697 * @error: Return location for error or %NULL 29698 * 29699 * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-HostIpmi.top_of_page">org.openbmc.HostIpmi</link>. See g_dbus_proxy_new_sync() for more details. 29700 * 29701 * The calling thread is blocked until a reply is received. 29702 * 29703 * See host_ipmi_proxy_new() for the asynchronous version of this constructor. 29704 * 29705 * Returns: (transfer full) (type HostIpmiProxy): The constructed proxy object or %NULL if @error is set. 29706 */ 29707 HostIpmi * 29708 host_ipmi_proxy_new_sync ( 29709 GDBusConnection *connection, 29710 GDBusProxyFlags flags, 29711 const gchar *name, 29712 const gchar *object_path, 29713 GCancellable *cancellable, 29714 GError **error) 29715 { 29716 GInitable *ret; 29717 ret = g_initable_new (TYPE_HOST_IPMI_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.openbmc.HostIpmi", NULL); 29718 if (ret != NULL) 29719 return HOST_IPMI (ret); 29720 else 29721 return NULL; 29722 } 29723 29724 29725 /** 29726 * host_ipmi_proxy_new_for_bus: 29727 * @bus_type: A #GBusType. 29728 * @flags: Flags from the #GDBusProxyFlags enumeration. 29729 * @name: A bus name (well-known or unique). 29730 * @object_path: An object path. 29731 * @cancellable: (allow-none): A #GCancellable or %NULL. 29732 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 29733 * @user_data: User data to pass to @callback. 29734 * 29735 * Like host_ipmi_proxy_new() but takes a #GBusType instead of a #GDBusConnection. 29736 * 29737 * 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. 29738 * You can then call host_ipmi_proxy_new_for_bus_finish() to get the result of the operation. 29739 * 29740 * See host_ipmi_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor. 29741 */ 29742 void 29743 host_ipmi_proxy_new_for_bus ( 29744 GBusType bus_type, 29745 GDBusProxyFlags flags, 29746 const gchar *name, 29747 const gchar *object_path, 29748 GCancellable *cancellable, 29749 GAsyncReadyCallback callback, 29750 gpointer user_data) 29751 { 29752 g_async_initable_new_async (TYPE_HOST_IPMI_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.HostIpmi", NULL); 29753 } 29754 29755 /** 29756 * host_ipmi_proxy_new_for_bus_finish: 29757 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to host_ipmi_proxy_new_for_bus(). 29758 * @error: Return location for error or %NULL 29759 * 29760 * Finishes an operation started with host_ipmi_proxy_new_for_bus(). 29761 * 29762 * Returns: (transfer full) (type HostIpmiProxy): The constructed proxy object or %NULL if @error is set. 29763 */ 29764 HostIpmi * 29765 host_ipmi_proxy_new_for_bus_finish ( 29766 GAsyncResult *res, 29767 GError **error) 29768 { 29769 GObject *ret; 29770 GObject *source_object; 29771 source_object = g_async_result_get_source_object (res); 29772 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 29773 g_object_unref (source_object); 29774 if (ret != NULL) 29775 return HOST_IPMI (ret); 29776 else 29777 return NULL; 29778 } 29779 29780 /** 29781 * host_ipmi_proxy_new_for_bus_sync: 29782 * @bus_type: A #GBusType. 29783 * @flags: Flags from the #GDBusProxyFlags enumeration. 29784 * @name: A bus name (well-known or unique). 29785 * @object_path: An object path. 29786 * @cancellable: (allow-none): A #GCancellable or %NULL. 29787 * @error: Return location for error or %NULL 29788 * 29789 * Like host_ipmi_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection. 29790 * 29791 * The calling thread is blocked until a reply is received. 29792 * 29793 * See host_ipmi_proxy_new_for_bus() for the asynchronous version of this constructor. 29794 * 29795 * Returns: (transfer full) (type HostIpmiProxy): The constructed proxy object or %NULL if @error is set. 29796 */ 29797 HostIpmi * 29798 host_ipmi_proxy_new_for_bus_sync ( 29799 GBusType bus_type, 29800 GDBusProxyFlags flags, 29801 const gchar *name, 29802 const gchar *object_path, 29803 GCancellable *cancellable, 29804 GError **error) 29805 { 29806 GInitable *ret; 29807 ret = g_initable_new (TYPE_HOST_IPMI_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.openbmc.HostIpmi", NULL); 29808 if (ret != NULL) 29809 return HOST_IPMI (ret); 29810 else 29811 return NULL; 29812 } 29813 29814 29815 /* ------------------------------------------------------------------------ */ 29816 29817 /** 29818 * HostIpmiSkeleton: 29819 * 29820 * The #HostIpmiSkeleton structure contains only private data and should only be accessed using the provided API. 29821 */ 29822 29823 /** 29824 * HostIpmiSkeletonClass: 29825 * @parent_class: The parent class. 29826 * 29827 * Class structure for #HostIpmiSkeleton. 29828 */ 29829 29830 struct _HostIpmiSkeletonPrivate 29831 { 29832 GValue *properties; 29833 GList *changed_properties; 29834 GSource *changed_properties_idle_source; 29835 GMainContext *context; 29836 GMutex lock; 29837 }; 29838 29839 static void 29840 _host_ipmi_skeleton_handle_method_call ( 29841 GDBusConnection *connection G_GNUC_UNUSED, 29842 const gchar *sender G_GNUC_UNUSED, 29843 const gchar *object_path G_GNUC_UNUSED, 29844 const gchar *interface_name, 29845 const gchar *method_name, 29846 GVariant *parameters, 29847 GDBusMethodInvocation *invocation, 29848 gpointer user_data) 29849 { 29850 HostIpmiSkeleton *skeleton = HOST_IPMI_SKELETON (user_data); 29851 _ExtendedGDBusMethodInfo *info; 29852 GVariantIter iter; 29853 GVariant *child; 29854 GValue *paramv; 29855 guint num_params; 29856 guint num_extra; 29857 guint n; 29858 guint signal_id; 29859 GValue return_value = G_VALUE_INIT; 29860 info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation); 29861 g_assert (info != NULL); 29862 num_params = g_variant_n_children (parameters); 29863 num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra); 29864 n = 0; 29865 g_value_init (¶mv[n], TYPE_HOST_IPMI); 29866 g_value_set_object (¶mv[n++], skeleton); 29867 g_value_init (¶mv[n], G_TYPE_DBUS_METHOD_INVOCATION); 29868 g_value_set_object (¶mv[n++], invocation); 29869 if (info->pass_fdlist) 29870 { 29871 #ifdef G_OS_UNIX 29872 g_value_init (¶mv[n], G_TYPE_UNIX_FD_LIST); 29873 g_value_set_object (¶mv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation))); 29874 #else 29875 g_assert_not_reached (); 29876 #endif 29877 } 29878 g_variant_iter_init (&iter, parameters); 29879 while ((child = g_variant_iter_next_value (&iter)) != NULL) 29880 { 29881 _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra]; 29882 if (arg_info->use_gvariant) 29883 { 29884 g_value_init (¶mv[n], G_TYPE_VARIANT); 29885 g_value_set_variant (¶mv[n], child); 29886 n++; 29887 } 29888 else 29889 g_dbus_gvariant_to_gvalue (child, ¶mv[n++]); 29890 g_variant_unref (child); 29891 } 29892 signal_id = g_signal_lookup (info->signal_name, TYPE_HOST_IPMI); 29893 g_value_init (&return_value, G_TYPE_BOOLEAN); 29894 g_signal_emitv (paramv, signal_id, 0, &return_value); 29895 if (!g_value_get_boolean (&return_value)) 29896 g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name); 29897 g_value_unset (&return_value); 29898 for (n = 0; n < num_params + num_extra; n++) 29899 g_value_unset (¶mv[n]); 29900 g_free (paramv); 29901 } 29902 29903 static GVariant * 29904 _host_ipmi_skeleton_handle_get_property ( 29905 GDBusConnection *connection G_GNUC_UNUSED, 29906 const gchar *sender G_GNUC_UNUSED, 29907 const gchar *object_path G_GNUC_UNUSED, 29908 const gchar *interface_name G_GNUC_UNUSED, 29909 const gchar *property_name, 29910 GError **error, 29911 gpointer user_data) 29912 { 29913 HostIpmiSkeleton *skeleton = HOST_IPMI_SKELETON (user_data); 29914 GValue value = G_VALUE_INIT; 29915 GParamSpec *pspec; 29916 _ExtendedGDBusPropertyInfo *info; 29917 GVariant *ret; 29918 ret = NULL; 29919 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_host_ipmi_interface_info.parent_struct, property_name); 29920 g_assert (info != NULL); 29921 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 29922 if (pspec == NULL) 29923 { 29924 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 29925 } 29926 else 29927 { 29928 g_value_init (&value, pspec->value_type); 29929 g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value); 29930 ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature)); 29931 g_value_unset (&value); 29932 } 29933 return ret; 29934 } 29935 29936 static gboolean 29937 _host_ipmi_skeleton_handle_set_property ( 29938 GDBusConnection *connection G_GNUC_UNUSED, 29939 const gchar *sender G_GNUC_UNUSED, 29940 const gchar *object_path G_GNUC_UNUSED, 29941 const gchar *interface_name G_GNUC_UNUSED, 29942 const gchar *property_name, 29943 GVariant *variant, 29944 GError **error, 29945 gpointer user_data) 29946 { 29947 HostIpmiSkeleton *skeleton = HOST_IPMI_SKELETON (user_data); 29948 GValue value = G_VALUE_INIT; 29949 GParamSpec *pspec; 29950 _ExtendedGDBusPropertyInfo *info; 29951 gboolean ret; 29952 ret = FALSE; 29953 info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_host_ipmi_interface_info.parent_struct, property_name); 29954 g_assert (info != NULL); 29955 pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name); 29956 if (pspec == NULL) 29957 { 29958 g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name); 29959 } 29960 else 29961 { 29962 if (info->use_gvariant) 29963 g_value_set_variant (&value, variant); 29964 else 29965 g_dbus_gvariant_to_gvalue (variant, &value); 29966 g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value); 29967 g_value_unset (&value); 29968 ret = TRUE; 29969 } 29970 return ret; 29971 } 29972 29973 static const GDBusInterfaceVTable _host_ipmi_skeleton_vtable = 29974 { 29975 _host_ipmi_skeleton_handle_method_call, 29976 _host_ipmi_skeleton_handle_get_property, 29977 _host_ipmi_skeleton_handle_set_property, 29978 {NULL} 29979 }; 29980 29981 static GDBusInterfaceInfo * 29982 host_ipmi_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 29983 { 29984 return host_ipmi_interface_info (); 29985 } 29986 29987 static GDBusInterfaceVTable * 29988 host_ipmi_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED) 29989 { 29990 return (GDBusInterfaceVTable *) &_host_ipmi_skeleton_vtable; 29991 } 29992 29993 static GVariant * 29994 host_ipmi_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton) 29995 { 29996 HostIpmiSkeleton *skeleton = HOST_IPMI_SKELETON (_skeleton); 29997 29998 GVariantBuilder builder; 29999 guint n; 30000 g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); 30001 if (_host_ipmi_interface_info.parent_struct.properties == NULL) 30002 goto out; 30003 for (n = 0; _host_ipmi_interface_info.parent_struct.properties[n] != NULL; n++) 30004 { 30005 GDBusPropertyInfo *info = _host_ipmi_interface_info.parent_struct.properties[n]; 30006 if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE) 30007 { 30008 GVariant *value; 30009 value = _host_ipmi_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.HostIpmi", info->name, NULL, skeleton); 30010 if (value != NULL) 30011 { 30012 g_variant_take_ref (value); 30013 g_variant_builder_add (&builder, "{sv}", info->name, value); 30014 g_variant_unref (value); 30015 } 30016 } 30017 } 30018 out: 30019 return g_variant_builder_end (&builder); 30020 } 30021 30022 static void 30023 host_ipmi_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton) 30024 { 30025 } 30026 30027 static void 30028 _host_ipmi_on_signal_received_message ( 30029 HostIpmi *object, 30030 guchar arg_seq, 30031 guchar arg_netfn, 30032 guchar arg_cmd, 30033 const gchar *arg_data) 30034 { 30035 HostIpmiSkeleton *skeleton = HOST_IPMI_SKELETON (object); 30036 30037 GList *connections, *l; 30038 GVariant *signal_variant; 30039 connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton)); 30040 30041 signal_variant = g_variant_ref_sink (g_variant_new ("(yyy^ay)", 30042 arg_seq, 30043 arg_netfn, 30044 arg_cmd, 30045 arg_data)); 30046 for (l = connections; l != NULL; l = l->next) 30047 { 30048 GDBusConnection *connection = l->data; 30049 g_dbus_connection_emit_signal (connection, 30050 NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.openbmc.HostIpmi", "ReceivedMessage", 30051 signal_variant, NULL); 30052 } 30053 g_variant_unref (signal_variant); 30054 g_list_free_full (connections, g_object_unref); 30055 } 30056 30057 static void host_ipmi_skeleton_iface_init (HostIpmiIface *iface); 30058 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 30059 G_DEFINE_TYPE_WITH_CODE (HostIpmiSkeleton, host_ipmi_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 30060 G_ADD_PRIVATE (HostIpmiSkeleton) 30061 G_IMPLEMENT_INTERFACE (TYPE_HOST_IPMI, host_ipmi_skeleton_iface_init)); 30062 30063 #else 30064 G_DEFINE_TYPE_WITH_CODE (HostIpmiSkeleton, host_ipmi_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON, 30065 G_IMPLEMENT_INTERFACE (TYPE_HOST_IPMI, host_ipmi_skeleton_iface_init)); 30066 30067 #endif 30068 static void 30069 host_ipmi_skeleton_finalize (GObject *object) 30070 { 30071 HostIpmiSkeleton *skeleton = HOST_IPMI_SKELETON (object); 30072 g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free); 30073 if (skeleton->priv->changed_properties_idle_source != NULL) 30074 g_source_destroy (skeleton->priv->changed_properties_idle_source); 30075 g_main_context_unref (skeleton->priv->context); 30076 g_mutex_clear (&skeleton->priv->lock); 30077 G_OBJECT_CLASS (host_ipmi_skeleton_parent_class)->finalize (object); 30078 } 30079 30080 static void 30081 host_ipmi_skeleton_init (HostIpmiSkeleton *skeleton) 30082 { 30083 #if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38 30084 skeleton->priv = host_ipmi_skeleton_get_instance_private (skeleton); 30085 #else 30086 skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, TYPE_HOST_IPMI_SKELETON, HostIpmiSkeletonPrivate); 30087 #endif 30088 30089 g_mutex_init (&skeleton->priv->lock); 30090 skeleton->priv->context = g_main_context_ref_thread_default (); 30091 } 30092 30093 static void 30094 host_ipmi_skeleton_class_init (HostIpmiSkeletonClass *klass) 30095 { 30096 GObjectClass *gobject_class; 30097 GDBusInterfaceSkeletonClass *skeleton_class; 30098 30099 gobject_class = G_OBJECT_CLASS (klass); 30100 gobject_class->finalize = host_ipmi_skeleton_finalize; 30101 30102 skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass); 30103 skeleton_class->get_info = host_ipmi_skeleton_dbus_interface_get_info; 30104 skeleton_class->get_properties = host_ipmi_skeleton_dbus_interface_get_properties; 30105 skeleton_class->flush = host_ipmi_skeleton_dbus_interface_flush; 30106 skeleton_class->get_vtable = host_ipmi_skeleton_dbus_interface_get_vtable; 30107 30108 #if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38 30109 g_type_class_add_private (klass, sizeof (HostIpmiSkeletonPrivate)); 30110 #endif 30111 } 30112 30113 static void 30114 host_ipmi_skeleton_iface_init (HostIpmiIface *iface) 30115 { 30116 iface->received_message = _host_ipmi_on_signal_received_message; 30117 } 30118 30119 /** 30120 * host_ipmi_skeleton_new: 30121 * 30122 * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-HostIpmi.top_of_page">org.openbmc.HostIpmi</link>. 30123 * 30124 * Returns: (transfer full) (type HostIpmiSkeleton): The skeleton object. 30125 */ 30126 HostIpmi * 30127 host_ipmi_skeleton_new (void) 30128 { 30129 return HOST_IPMI (g_object_new (TYPE_HOST_IPMI_SKELETON, NULL)); 30130 } 30131 30132 /* ------------------------------------------------------------------------ 30133 * Code for Object, ObjectProxy and ObjectSkeleton 30134 * ------------------------------------------------------------------------ 30135 */ 30136 30137 /** 30138 * SECTION:Object 30139 * @title: Object 30140 * @short_description: Specialized GDBusObject types 30141 * 30142 * This section contains the #Object, #ObjectProxy, and #ObjectSkeleton types which make it easier to work with objects implementing generated types for D-Bus interfaces. 30143 */ 30144 30145 /** 30146 * Object: 30147 * 30148 * The #Object type is a specialized container of interfaces. 30149 */ 30150 30151 /** 30152 * ObjectIface: 30153 * @parent_iface: The parent interface. 30154 * 30155 * Virtual table for the #Object interface. 30156 */ 30157 30158 typedef ObjectIface ObjectInterface; 30159 G_DEFINE_INTERFACE_WITH_CODE (Object, object, G_TYPE_OBJECT, g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_DBUS_OBJECT)); 30160 30161 static void 30162 object_default_init (ObjectIface *iface) 30163 { 30164 /** 30165 * Object:hwmon: 30166 * 30167 * The #Hwmon instance corresponding to the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Hwmon.top_of_page">org.openbmc.Hwmon</link>, if any. 30168 * 30169 * Connect to the #GObject::notify signal to get informed of property changes. 30170 */ 30171 g_object_interface_install_property (iface, g_param_spec_object ("hwmon", "hwmon", "hwmon", TYPE_HWMON, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS)); 30172 30173 /** 30174 * Object:fan: 30175 * 30176 * The #Fan instance corresponding to the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Fan.top_of_page">org.openbmc.Fan</link>, if any. 30177 * 30178 * Connect to the #GObject::notify signal to get informed of property changes. 30179 */ 30180 g_object_interface_install_property (iface, g_param_spec_object ("fan", "fan", "fan", TYPE_FAN, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS)); 30181 30182 /** 30183 * Object:sensor-value: 30184 * 30185 * The #SensorValue instance corresponding to the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorValue.top_of_page">org.openbmc.SensorValue</link>, if any. 30186 * 30187 * Connect to the #GObject::notify signal to get informed of property changes. 30188 */ 30189 g_object_interface_install_property (iface, g_param_spec_object ("sensor-value", "sensor-value", "sensor-value", TYPE_SENSOR_VALUE, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS)); 30190 30191 /** 30192 * Object:sensor-threshold: 30193 * 30194 * The #SensorThreshold instance corresponding to the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorThreshold.top_of_page">org.openbmc.SensorThreshold</link>, if any. 30195 * 30196 * Connect to the #GObject::notify signal to get informed of property changes. 30197 */ 30198 g_object_interface_install_property (iface, g_param_spec_object ("sensor-threshold", "sensor-threshold", "sensor-threshold", TYPE_SENSOR_THRESHOLD, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS)); 30199 30200 /** 30201 * Object:sensor-i2c: 30202 * 30203 * The #SensorI2c instance corresponding to the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorI2c.top_of_page">org.openbmc.SensorI2c</link>, if any. 30204 * 30205 * Connect to the #GObject::notify signal to get informed of property changes. 30206 */ 30207 g_object_interface_install_property (iface, g_param_spec_object ("sensor-i2c", "sensor-i2c", "sensor-i2c", TYPE_SENSOR_I2C, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS)); 30208 30209 /** 30210 * Object:sensor-match: 30211 * 30212 * The #SensorMatch instance corresponding to the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorMatch.top_of_page">org.openbmc.SensorMatch</link>, if any. 30213 * 30214 * Connect to the #GObject::notify signal to get informed of property changes. 30215 */ 30216 g_object_interface_install_property (iface, g_param_spec_object ("sensor-match", "sensor-match", "sensor-match", TYPE_SENSOR_MATCH, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS)); 30217 30218 /** 30219 * Object:process: 30220 * 30221 * The #Process instance corresponding to the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Process.top_of_page">org.openbmc.Process</link>, if any. 30222 * 30223 * Connect to the #GObject::notify signal to get informed of property changes. 30224 */ 30225 g_object_interface_install_property (iface, g_param_spec_object ("process", "process", "process", TYPE_PROCESS, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS)); 30226 30227 /** 30228 * Object:shared-resource: 30229 * 30230 * The #SharedResource instance corresponding to the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SharedResource.top_of_page">org.openbmc.SharedResource</link>, if any. 30231 * 30232 * Connect to the #GObject::notify signal to get informed of property changes. 30233 */ 30234 g_object_interface_install_property (iface, g_param_spec_object ("shared-resource", "shared-resource", "shared-resource", TYPE_SHARED_RESOURCE, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS)); 30235 30236 /** 30237 * Object:control: 30238 * 30239 * The #Control instance corresponding to the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Control.top_of_page">org.openbmc.Control</link>, if any. 30240 * 30241 * Connect to the #GObject::notify signal to get informed of property changes. 30242 */ 30243 g_object_interface_install_property (iface, g_param_spec_object ("control", "control", "control", TYPE_CONTROL, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS)); 30244 30245 /** 30246 * Object:control-bmc: 30247 * 30248 * The #ControlBmc instance corresponding to the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Bmc.top_of_page">org.openbmc.control.Bmc</link>, if any. 30249 * 30250 * Connect to the #GObject::notify signal to get informed of property changes. 30251 */ 30252 g_object_interface_install_property (iface, g_param_spec_object ("control-bmc", "control-bmc", "control-bmc", TYPE_CONTROL_BMC, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS)); 30253 30254 /** 30255 * Object:control-host: 30256 * 30257 * The #ControlHost instance corresponding to the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Host.top_of_page">org.openbmc.control.Host</link>, if any. 30258 * 30259 * Connect to the #GObject::notify signal to get informed of property changes. 30260 */ 30261 g_object_interface_install_property (iface, g_param_spec_object ("control-host", "control-host", "control-host", TYPE_CONTROL_HOST, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS)); 30262 30263 /** 30264 * Object:control-power: 30265 * 30266 * The #ControlPower instance corresponding to the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Power.top_of_page">org.openbmc.control.Power</link>, if any. 30267 * 30268 * Connect to the #GObject::notify signal to get informed of property changes. 30269 */ 30270 g_object_interface_install_property (iface, g_param_spec_object ("control-power", "control-power", "control-power", TYPE_CONTROL_POWER, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS)); 30271 30272 /** 30273 * Object:control-checkstop: 30274 * 30275 * The #ControlCheckstop instance corresponding to the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Checkstop.top_of_page">org.openbmc.control.Checkstop</link>, if any. 30276 * 30277 * Connect to the #GObject::notify signal to get informed of property changes. 30278 */ 30279 g_object_interface_install_property (iface, g_param_spec_object ("control-checkstop", "control-checkstop", "control-checkstop", TYPE_CONTROL_CHECKSTOP, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS)); 30280 30281 /** 30282 * Object:watchdog: 30283 * 30284 * The #Watchdog instance corresponding to the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Watchdog.top_of_page">org.openbmc.Watchdog</link>, if any. 30285 * 30286 * Connect to the #GObject::notify signal to get informed of property changes. 30287 */ 30288 g_object_interface_install_property (iface, g_param_spec_object ("watchdog", "watchdog", "watchdog", TYPE_WATCHDOG, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS)); 30289 30290 /** 30291 * Object:event-log: 30292 * 30293 * The #EventLog instance corresponding to the D-Bus interface <link linkend="gdbus-interface-org-openbmc-EventLog.top_of_page">org.openbmc.EventLog</link>, if any. 30294 * 30295 * Connect to the #GObject::notify signal to get informed of property changes. 30296 */ 30297 g_object_interface_install_property (iface, g_param_spec_object ("event-log", "event-log", "event-log", TYPE_EVENT_LOG, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS)); 30298 30299 /** 30300 * Object:flash: 30301 * 30302 * The #Flash instance corresponding to the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Flash.top_of_page">org.openbmc.Flash</link>, if any. 30303 * 30304 * Connect to the #GObject::notify signal to get informed of property changes. 30305 */ 30306 g_object_interface_install_property (iface, g_param_spec_object ("flash", "flash", "flash", TYPE_FLASH, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS)); 30307 30308 /** 30309 * Object:flash-control: 30310 * 30311 * The #FlashControl instance corresponding to the D-Bus interface <link linkend="gdbus-interface-org-openbmc-FlashControl.top_of_page">org.openbmc.FlashControl</link>, if any. 30312 * 30313 * Connect to the #GObject::notify signal to get informed of property changes. 30314 */ 30315 g_object_interface_install_property (iface, g_param_spec_object ("flash-control", "flash-control", "flash-control", TYPE_FLASH_CONTROL, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS)); 30316 30317 /** 30318 * Object:button: 30319 * 30320 * The #Button instance corresponding to the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Button.top_of_page">org.openbmc.Button</link>, if any. 30321 * 30322 * Connect to the #GObject::notify signal to get informed of property changes. 30323 */ 30324 g_object_interface_install_property (iface, g_param_spec_object ("button", "button", "button", TYPE_BUTTON, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS)); 30325 30326 /** 30327 * Object:led: 30328 * 30329 * The #Led instance corresponding to the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Led.top_of_page">org.openbmc.Led</link>, if any. 30330 * 30331 * Connect to the #GObject::notify signal to get informed of property changes. 30332 */ 30333 g_object_interface_install_property (iface, g_param_spec_object ("led", "led", "led", TYPE_LED, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS)); 30334 30335 /** 30336 * Object:host-ipmi: 30337 * 30338 * The #HostIpmi instance corresponding to the D-Bus interface <link linkend="gdbus-interface-org-openbmc-HostIpmi.top_of_page">org.openbmc.HostIpmi</link>, if any. 30339 * 30340 * Connect to the #GObject::notify signal to get informed of property changes. 30341 */ 30342 g_object_interface_install_property (iface, g_param_spec_object ("host-ipmi", "host-ipmi", "host-ipmi", TYPE_HOST_IPMI, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS)); 30343 30344 } 30345 30346 /** 30347 * object_get_hwmon: 30348 * @object: A #Object. 30349 * 30350 * Gets the #Hwmon instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Hwmon.top_of_page">org.openbmc.Hwmon</link> on @object, if any. 30351 * 30352 * Returns: (transfer full): A #Hwmon that must be freed with g_object_unref() or %NULL if @object does not implement the interface. 30353 */ 30354 Hwmon *object_get_hwmon (Object *object) 30355 { 30356 GDBusInterface *ret; 30357 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Hwmon"); 30358 if (ret == NULL) 30359 return NULL; 30360 return HWMON (ret); 30361 } 30362 30363 /** 30364 * object_get_fan: 30365 * @object: A #Object. 30366 * 30367 * Gets the #Fan instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Fan.top_of_page">org.openbmc.Fan</link> on @object, if any. 30368 * 30369 * Returns: (transfer full): A #Fan that must be freed with g_object_unref() or %NULL if @object does not implement the interface. 30370 */ 30371 Fan *object_get_fan (Object *object) 30372 { 30373 GDBusInterface *ret; 30374 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Fan"); 30375 if (ret == NULL) 30376 return NULL; 30377 return FAN (ret); 30378 } 30379 30380 /** 30381 * object_get_sensor_value: 30382 * @object: A #Object. 30383 * 30384 * Gets the #SensorValue instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorValue.top_of_page">org.openbmc.SensorValue</link> on @object, if any. 30385 * 30386 * Returns: (transfer full): A #SensorValue that must be freed with g_object_unref() or %NULL if @object does not implement the interface. 30387 */ 30388 SensorValue *object_get_sensor_value (Object *object) 30389 { 30390 GDBusInterface *ret; 30391 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.SensorValue"); 30392 if (ret == NULL) 30393 return NULL; 30394 return SENSOR_VALUE (ret); 30395 } 30396 30397 /** 30398 * object_get_sensor_threshold: 30399 * @object: A #Object. 30400 * 30401 * Gets the #SensorThreshold instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorThreshold.top_of_page">org.openbmc.SensorThreshold</link> on @object, if any. 30402 * 30403 * Returns: (transfer full): A #SensorThreshold that must be freed with g_object_unref() or %NULL if @object does not implement the interface. 30404 */ 30405 SensorThreshold *object_get_sensor_threshold (Object *object) 30406 { 30407 GDBusInterface *ret; 30408 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.SensorThreshold"); 30409 if (ret == NULL) 30410 return NULL; 30411 return SENSOR_THRESHOLD (ret); 30412 } 30413 30414 /** 30415 * object_get_sensor_i2c: 30416 * @object: A #Object. 30417 * 30418 * Gets the #SensorI2c instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorI2c.top_of_page">org.openbmc.SensorI2c</link> on @object, if any. 30419 * 30420 * Returns: (transfer full): A #SensorI2c that must be freed with g_object_unref() or %NULL if @object does not implement the interface. 30421 */ 30422 SensorI2c *object_get_sensor_i2c (Object *object) 30423 { 30424 GDBusInterface *ret; 30425 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.SensorI2c"); 30426 if (ret == NULL) 30427 return NULL; 30428 return SENSOR_I2C (ret); 30429 } 30430 30431 /** 30432 * object_get_sensor_match: 30433 * @object: A #Object. 30434 * 30435 * Gets the #SensorMatch instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorMatch.top_of_page">org.openbmc.SensorMatch</link> on @object, if any. 30436 * 30437 * Returns: (transfer full): A #SensorMatch that must be freed with g_object_unref() or %NULL if @object does not implement the interface. 30438 */ 30439 SensorMatch *object_get_sensor_match (Object *object) 30440 { 30441 GDBusInterface *ret; 30442 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.SensorMatch"); 30443 if (ret == NULL) 30444 return NULL; 30445 return SENSOR_MATCH (ret); 30446 } 30447 30448 /** 30449 * object_get_process: 30450 * @object: A #Object. 30451 * 30452 * Gets the #Process instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Process.top_of_page">org.openbmc.Process</link> on @object, if any. 30453 * 30454 * Returns: (transfer full): A #Process that must be freed with g_object_unref() or %NULL if @object does not implement the interface. 30455 */ 30456 Process *object_get_process (Object *object) 30457 { 30458 GDBusInterface *ret; 30459 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Process"); 30460 if (ret == NULL) 30461 return NULL; 30462 return PROCESS (ret); 30463 } 30464 30465 /** 30466 * object_get_shared_resource: 30467 * @object: A #Object. 30468 * 30469 * Gets the #SharedResource instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SharedResource.top_of_page">org.openbmc.SharedResource</link> on @object, if any. 30470 * 30471 * Returns: (transfer full): A #SharedResource that must be freed with g_object_unref() or %NULL if @object does not implement the interface. 30472 */ 30473 SharedResource *object_get_shared_resource (Object *object) 30474 { 30475 GDBusInterface *ret; 30476 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.SharedResource"); 30477 if (ret == NULL) 30478 return NULL; 30479 return SHARED_RESOURCE (ret); 30480 } 30481 30482 /** 30483 * object_get_control: 30484 * @object: A #Object. 30485 * 30486 * Gets the #Control instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Control.top_of_page">org.openbmc.Control</link> on @object, if any. 30487 * 30488 * Returns: (transfer full): A #Control that must be freed with g_object_unref() or %NULL if @object does not implement the interface. 30489 */ 30490 Control *object_get_control (Object *object) 30491 { 30492 GDBusInterface *ret; 30493 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Control"); 30494 if (ret == NULL) 30495 return NULL; 30496 return CONTROL (ret); 30497 } 30498 30499 /** 30500 * object_get_control_bmc: 30501 * @object: A #Object. 30502 * 30503 * Gets the #ControlBmc instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Bmc.top_of_page">org.openbmc.control.Bmc</link> on @object, if any. 30504 * 30505 * Returns: (transfer full): A #ControlBmc that must be freed with g_object_unref() or %NULL if @object does not implement the interface. 30506 */ 30507 ControlBmc *object_get_control_bmc (Object *object) 30508 { 30509 GDBusInterface *ret; 30510 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.control.Bmc"); 30511 if (ret == NULL) 30512 return NULL; 30513 return CONTROL_BMC (ret); 30514 } 30515 30516 /** 30517 * object_get_control_host: 30518 * @object: A #Object. 30519 * 30520 * Gets the #ControlHost instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Host.top_of_page">org.openbmc.control.Host</link> on @object, if any. 30521 * 30522 * Returns: (transfer full): A #ControlHost that must be freed with g_object_unref() or %NULL if @object does not implement the interface. 30523 */ 30524 ControlHost *object_get_control_host (Object *object) 30525 { 30526 GDBusInterface *ret; 30527 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.control.Host"); 30528 if (ret == NULL) 30529 return NULL; 30530 return CONTROL_HOST (ret); 30531 } 30532 30533 /** 30534 * object_get_control_power: 30535 * @object: A #Object. 30536 * 30537 * Gets the #ControlPower instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Power.top_of_page">org.openbmc.control.Power</link> on @object, if any. 30538 * 30539 * Returns: (transfer full): A #ControlPower that must be freed with g_object_unref() or %NULL if @object does not implement the interface. 30540 */ 30541 ControlPower *object_get_control_power (Object *object) 30542 { 30543 GDBusInterface *ret; 30544 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.control.Power"); 30545 if (ret == NULL) 30546 return NULL; 30547 return CONTROL_POWER (ret); 30548 } 30549 30550 /** 30551 * object_get_control_checkstop: 30552 * @object: A #Object. 30553 * 30554 * Gets the #ControlCheckstop instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Checkstop.top_of_page">org.openbmc.control.Checkstop</link> on @object, if any. 30555 * 30556 * Returns: (transfer full): A #ControlCheckstop that must be freed with g_object_unref() or %NULL if @object does not implement the interface. 30557 */ 30558 ControlCheckstop *object_get_control_checkstop (Object *object) 30559 { 30560 GDBusInterface *ret; 30561 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.control.Checkstop"); 30562 if (ret == NULL) 30563 return NULL; 30564 return CONTROL_CHECKSTOP (ret); 30565 } 30566 30567 /** 30568 * object_get_watchdog: 30569 * @object: A #Object. 30570 * 30571 * Gets the #Watchdog instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Watchdog.top_of_page">org.openbmc.Watchdog</link> on @object, if any. 30572 * 30573 * Returns: (transfer full): A #Watchdog that must be freed with g_object_unref() or %NULL if @object does not implement the interface. 30574 */ 30575 Watchdog *object_get_watchdog (Object *object) 30576 { 30577 GDBusInterface *ret; 30578 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Watchdog"); 30579 if (ret == NULL) 30580 return NULL; 30581 return WATCHDOG (ret); 30582 } 30583 30584 /** 30585 * object_get_event_log: 30586 * @object: A #Object. 30587 * 30588 * Gets the #EventLog instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-EventLog.top_of_page">org.openbmc.EventLog</link> on @object, if any. 30589 * 30590 * Returns: (transfer full): A #EventLog that must be freed with g_object_unref() or %NULL if @object does not implement the interface. 30591 */ 30592 EventLog *object_get_event_log (Object *object) 30593 { 30594 GDBusInterface *ret; 30595 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.EventLog"); 30596 if (ret == NULL) 30597 return NULL; 30598 return EVENT_LOG (ret); 30599 } 30600 30601 /** 30602 * object_get_flash: 30603 * @object: A #Object. 30604 * 30605 * Gets the #Flash instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Flash.top_of_page">org.openbmc.Flash</link> on @object, if any. 30606 * 30607 * Returns: (transfer full): A #Flash that must be freed with g_object_unref() or %NULL if @object does not implement the interface. 30608 */ 30609 Flash *object_get_flash (Object *object) 30610 { 30611 GDBusInterface *ret; 30612 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Flash"); 30613 if (ret == NULL) 30614 return NULL; 30615 return FLASH (ret); 30616 } 30617 30618 /** 30619 * object_get_flash_control: 30620 * @object: A #Object. 30621 * 30622 * Gets the #FlashControl instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-FlashControl.top_of_page">org.openbmc.FlashControl</link> on @object, if any. 30623 * 30624 * Returns: (transfer full): A #FlashControl that must be freed with g_object_unref() or %NULL if @object does not implement the interface. 30625 */ 30626 FlashControl *object_get_flash_control (Object *object) 30627 { 30628 GDBusInterface *ret; 30629 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.FlashControl"); 30630 if (ret == NULL) 30631 return NULL; 30632 return FLASH_CONTROL (ret); 30633 } 30634 30635 /** 30636 * object_get_button: 30637 * @object: A #Object. 30638 * 30639 * Gets the #Button instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Button.top_of_page">org.openbmc.Button</link> on @object, if any. 30640 * 30641 * Returns: (transfer full): A #Button that must be freed with g_object_unref() or %NULL if @object does not implement the interface. 30642 */ 30643 Button *object_get_button (Object *object) 30644 { 30645 GDBusInterface *ret; 30646 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Button"); 30647 if (ret == NULL) 30648 return NULL; 30649 return BUTTON (ret); 30650 } 30651 30652 /** 30653 * object_get_led: 30654 * @object: A #Object. 30655 * 30656 * Gets the #Led instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Led.top_of_page">org.openbmc.Led</link> on @object, if any. 30657 * 30658 * Returns: (transfer full): A #Led that must be freed with g_object_unref() or %NULL if @object does not implement the interface. 30659 */ 30660 Led *object_get_led (Object *object) 30661 { 30662 GDBusInterface *ret; 30663 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Led"); 30664 if (ret == NULL) 30665 return NULL; 30666 return LED (ret); 30667 } 30668 30669 /** 30670 * object_get_host_ipmi: 30671 * @object: A #Object. 30672 * 30673 * Gets the #HostIpmi instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-HostIpmi.top_of_page">org.openbmc.HostIpmi</link> on @object, if any. 30674 * 30675 * Returns: (transfer full): A #HostIpmi that must be freed with g_object_unref() or %NULL if @object does not implement the interface. 30676 */ 30677 HostIpmi *object_get_host_ipmi (Object *object) 30678 { 30679 GDBusInterface *ret; 30680 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.HostIpmi"); 30681 if (ret == NULL) 30682 return NULL; 30683 return HOST_IPMI (ret); 30684 } 30685 30686 30687 /** 30688 * object_peek_hwmon: (skip) 30689 * @object: A #Object. 30690 * 30691 * Like object_get_hwmon() but doesn't increase the reference count on the returned object. 30692 * 30693 * <warning>It is not safe to use the returned object if you are on another thread than the one where the #GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning> 30694 * 30695 * Returns: (transfer none): A #Hwmon or %NULL if @object does not implement the interface. Do not free the returned object, it is owned by @object. 30696 */ 30697 Hwmon *object_peek_hwmon (Object *object) 30698 { 30699 GDBusInterface *ret; 30700 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Hwmon"); 30701 if (ret == NULL) 30702 return NULL; 30703 g_object_unref (ret); 30704 return HWMON (ret); 30705 } 30706 30707 /** 30708 * object_peek_fan: (skip) 30709 * @object: A #Object. 30710 * 30711 * Like object_get_fan() but doesn't increase the reference count on the returned object. 30712 * 30713 * <warning>It is not safe to use the returned object if you are on another thread than the one where the #GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning> 30714 * 30715 * Returns: (transfer none): A #Fan or %NULL if @object does not implement the interface. Do not free the returned object, it is owned by @object. 30716 */ 30717 Fan *object_peek_fan (Object *object) 30718 { 30719 GDBusInterface *ret; 30720 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Fan"); 30721 if (ret == NULL) 30722 return NULL; 30723 g_object_unref (ret); 30724 return FAN (ret); 30725 } 30726 30727 /** 30728 * object_peek_sensor_value: (skip) 30729 * @object: A #Object. 30730 * 30731 * Like object_get_sensor_value() but doesn't increase the reference count on the returned object. 30732 * 30733 * <warning>It is not safe to use the returned object if you are on another thread than the one where the #GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning> 30734 * 30735 * Returns: (transfer none): A #SensorValue or %NULL if @object does not implement the interface. Do not free the returned object, it is owned by @object. 30736 */ 30737 SensorValue *object_peek_sensor_value (Object *object) 30738 { 30739 GDBusInterface *ret; 30740 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.SensorValue"); 30741 if (ret == NULL) 30742 return NULL; 30743 g_object_unref (ret); 30744 return SENSOR_VALUE (ret); 30745 } 30746 30747 /** 30748 * object_peek_sensor_threshold: (skip) 30749 * @object: A #Object. 30750 * 30751 * Like object_get_sensor_threshold() but doesn't increase the reference count on the returned object. 30752 * 30753 * <warning>It is not safe to use the returned object if you are on another thread than the one where the #GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning> 30754 * 30755 * Returns: (transfer none): A #SensorThreshold or %NULL if @object does not implement the interface. Do not free the returned object, it is owned by @object. 30756 */ 30757 SensorThreshold *object_peek_sensor_threshold (Object *object) 30758 { 30759 GDBusInterface *ret; 30760 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.SensorThreshold"); 30761 if (ret == NULL) 30762 return NULL; 30763 g_object_unref (ret); 30764 return SENSOR_THRESHOLD (ret); 30765 } 30766 30767 /** 30768 * object_peek_sensor_i2c: (skip) 30769 * @object: A #Object. 30770 * 30771 * Like object_get_sensor_i2c() but doesn't increase the reference count on the returned object. 30772 * 30773 * <warning>It is not safe to use the returned object if you are on another thread than the one where the #GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning> 30774 * 30775 * Returns: (transfer none): A #SensorI2c or %NULL if @object does not implement the interface. Do not free the returned object, it is owned by @object. 30776 */ 30777 SensorI2c *object_peek_sensor_i2c (Object *object) 30778 { 30779 GDBusInterface *ret; 30780 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.SensorI2c"); 30781 if (ret == NULL) 30782 return NULL; 30783 g_object_unref (ret); 30784 return SENSOR_I2C (ret); 30785 } 30786 30787 /** 30788 * object_peek_sensor_match: (skip) 30789 * @object: A #Object. 30790 * 30791 * Like object_get_sensor_match() but doesn't increase the reference count on the returned object. 30792 * 30793 * <warning>It is not safe to use the returned object if you are on another thread than the one where the #GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning> 30794 * 30795 * Returns: (transfer none): A #SensorMatch or %NULL if @object does not implement the interface. Do not free the returned object, it is owned by @object. 30796 */ 30797 SensorMatch *object_peek_sensor_match (Object *object) 30798 { 30799 GDBusInterface *ret; 30800 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.SensorMatch"); 30801 if (ret == NULL) 30802 return NULL; 30803 g_object_unref (ret); 30804 return SENSOR_MATCH (ret); 30805 } 30806 30807 /** 30808 * object_peek_process: (skip) 30809 * @object: A #Object. 30810 * 30811 * Like object_get_process() but doesn't increase the reference count on the returned object. 30812 * 30813 * <warning>It is not safe to use the returned object if you are on another thread than the one where the #GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning> 30814 * 30815 * Returns: (transfer none): A #Process or %NULL if @object does not implement the interface. Do not free the returned object, it is owned by @object. 30816 */ 30817 Process *object_peek_process (Object *object) 30818 { 30819 GDBusInterface *ret; 30820 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Process"); 30821 if (ret == NULL) 30822 return NULL; 30823 g_object_unref (ret); 30824 return PROCESS (ret); 30825 } 30826 30827 /** 30828 * object_peek_shared_resource: (skip) 30829 * @object: A #Object. 30830 * 30831 * Like object_get_shared_resource() but doesn't increase the reference count on the returned object. 30832 * 30833 * <warning>It is not safe to use the returned object if you are on another thread than the one where the #GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning> 30834 * 30835 * Returns: (transfer none): A #SharedResource or %NULL if @object does not implement the interface. Do not free the returned object, it is owned by @object. 30836 */ 30837 SharedResource *object_peek_shared_resource (Object *object) 30838 { 30839 GDBusInterface *ret; 30840 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.SharedResource"); 30841 if (ret == NULL) 30842 return NULL; 30843 g_object_unref (ret); 30844 return SHARED_RESOURCE (ret); 30845 } 30846 30847 /** 30848 * object_peek_control: (skip) 30849 * @object: A #Object. 30850 * 30851 * Like object_get_control() but doesn't increase the reference count on the returned object. 30852 * 30853 * <warning>It is not safe to use the returned object if you are on another thread than the one where the #GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning> 30854 * 30855 * Returns: (transfer none): A #Control or %NULL if @object does not implement the interface. Do not free the returned object, it is owned by @object. 30856 */ 30857 Control *object_peek_control (Object *object) 30858 { 30859 GDBusInterface *ret; 30860 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Control"); 30861 if (ret == NULL) 30862 return NULL; 30863 g_object_unref (ret); 30864 return CONTROL (ret); 30865 } 30866 30867 /** 30868 * object_peek_control_bmc: (skip) 30869 * @object: A #Object. 30870 * 30871 * Like object_get_control_bmc() but doesn't increase the reference count on the returned object. 30872 * 30873 * <warning>It is not safe to use the returned object if you are on another thread than the one where the #GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning> 30874 * 30875 * Returns: (transfer none): A #ControlBmc or %NULL if @object does not implement the interface. Do not free the returned object, it is owned by @object. 30876 */ 30877 ControlBmc *object_peek_control_bmc (Object *object) 30878 { 30879 GDBusInterface *ret; 30880 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.control.Bmc"); 30881 if (ret == NULL) 30882 return NULL; 30883 g_object_unref (ret); 30884 return CONTROL_BMC (ret); 30885 } 30886 30887 /** 30888 * object_peek_control_host: (skip) 30889 * @object: A #Object. 30890 * 30891 * Like object_get_control_host() but doesn't increase the reference count on the returned object. 30892 * 30893 * <warning>It is not safe to use the returned object if you are on another thread than the one where the #GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning> 30894 * 30895 * Returns: (transfer none): A #ControlHost or %NULL if @object does not implement the interface. Do not free the returned object, it is owned by @object. 30896 */ 30897 ControlHost *object_peek_control_host (Object *object) 30898 { 30899 GDBusInterface *ret; 30900 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.control.Host"); 30901 if (ret == NULL) 30902 return NULL; 30903 g_object_unref (ret); 30904 return CONTROL_HOST (ret); 30905 } 30906 30907 /** 30908 * object_peek_control_power: (skip) 30909 * @object: A #Object. 30910 * 30911 * Like object_get_control_power() but doesn't increase the reference count on the returned object. 30912 * 30913 * <warning>It is not safe to use the returned object if you are on another thread than the one where the #GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning> 30914 * 30915 * Returns: (transfer none): A #ControlPower or %NULL if @object does not implement the interface. Do not free the returned object, it is owned by @object. 30916 */ 30917 ControlPower *object_peek_control_power (Object *object) 30918 { 30919 GDBusInterface *ret; 30920 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.control.Power"); 30921 if (ret == NULL) 30922 return NULL; 30923 g_object_unref (ret); 30924 return CONTROL_POWER (ret); 30925 } 30926 30927 /** 30928 * object_peek_control_checkstop: (skip) 30929 * @object: A #Object. 30930 * 30931 * Like object_get_control_checkstop() but doesn't increase the reference count on the returned object. 30932 * 30933 * <warning>It is not safe to use the returned object if you are on another thread than the one where the #GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning> 30934 * 30935 * Returns: (transfer none): A #ControlCheckstop or %NULL if @object does not implement the interface. Do not free the returned object, it is owned by @object. 30936 */ 30937 ControlCheckstop *object_peek_control_checkstop (Object *object) 30938 { 30939 GDBusInterface *ret; 30940 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.control.Checkstop"); 30941 if (ret == NULL) 30942 return NULL; 30943 g_object_unref (ret); 30944 return CONTROL_CHECKSTOP (ret); 30945 } 30946 30947 /** 30948 * object_peek_watchdog: (skip) 30949 * @object: A #Object. 30950 * 30951 * Like object_get_watchdog() but doesn't increase the reference count on the returned object. 30952 * 30953 * <warning>It is not safe to use the returned object if you are on another thread than the one where the #GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning> 30954 * 30955 * Returns: (transfer none): A #Watchdog or %NULL if @object does not implement the interface. Do not free the returned object, it is owned by @object. 30956 */ 30957 Watchdog *object_peek_watchdog (Object *object) 30958 { 30959 GDBusInterface *ret; 30960 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Watchdog"); 30961 if (ret == NULL) 30962 return NULL; 30963 g_object_unref (ret); 30964 return WATCHDOG (ret); 30965 } 30966 30967 /** 30968 * object_peek_event_log: (skip) 30969 * @object: A #Object. 30970 * 30971 * Like object_get_event_log() but doesn't increase the reference count on the returned object. 30972 * 30973 * <warning>It is not safe to use the returned object if you are on another thread than the one where the #GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning> 30974 * 30975 * Returns: (transfer none): A #EventLog or %NULL if @object does not implement the interface. Do not free the returned object, it is owned by @object. 30976 */ 30977 EventLog *object_peek_event_log (Object *object) 30978 { 30979 GDBusInterface *ret; 30980 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.EventLog"); 30981 if (ret == NULL) 30982 return NULL; 30983 g_object_unref (ret); 30984 return EVENT_LOG (ret); 30985 } 30986 30987 /** 30988 * object_peek_flash: (skip) 30989 * @object: A #Object. 30990 * 30991 * Like object_get_flash() but doesn't increase the reference count on the returned object. 30992 * 30993 * <warning>It is not safe to use the returned object if you are on another thread than the one where the #GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning> 30994 * 30995 * Returns: (transfer none): A #Flash or %NULL if @object does not implement the interface. Do not free the returned object, it is owned by @object. 30996 */ 30997 Flash *object_peek_flash (Object *object) 30998 { 30999 GDBusInterface *ret; 31000 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Flash"); 31001 if (ret == NULL) 31002 return NULL; 31003 g_object_unref (ret); 31004 return FLASH (ret); 31005 } 31006 31007 /** 31008 * object_peek_flash_control: (skip) 31009 * @object: A #Object. 31010 * 31011 * Like object_get_flash_control() but doesn't increase the reference count on the returned object. 31012 * 31013 * <warning>It is not safe to use the returned object if you are on another thread than the one where the #GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning> 31014 * 31015 * Returns: (transfer none): A #FlashControl or %NULL if @object does not implement the interface. Do not free the returned object, it is owned by @object. 31016 */ 31017 FlashControl *object_peek_flash_control (Object *object) 31018 { 31019 GDBusInterface *ret; 31020 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.FlashControl"); 31021 if (ret == NULL) 31022 return NULL; 31023 g_object_unref (ret); 31024 return FLASH_CONTROL (ret); 31025 } 31026 31027 /** 31028 * object_peek_button: (skip) 31029 * @object: A #Object. 31030 * 31031 * Like object_get_button() but doesn't increase the reference count on the returned object. 31032 * 31033 * <warning>It is not safe to use the returned object if you are on another thread than the one where the #GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning> 31034 * 31035 * Returns: (transfer none): A #Button or %NULL if @object does not implement the interface. Do not free the returned object, it is owned by @object. 31036 */ 31037 Button *object_peek_button (Object *object) 31038 { 31039 GDBusInterface *ret; 31040 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Button"); 31041 if (ret == NULL) 31042 return NULL; 31043 g_object_unref (ret); 31044 return BUTTON (ret); 31045 } 31046 31047 /** 31048 * object_peek_led: (skip) 31049 * @object: A #Object. 31050 * 31051 * Like object_get_led() but doesn't increase the reference count on the returned object. 31052 * 31053 * <warning>It is not safe to use the returned object if you are on another thread than the one where the #GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning> 31054 * 31055 * Returns: (transfer none): A #Led or %NULL if @object does not implement the interface. Do not free the returned object, it is owned by @object. 31056 */ 31057 Led *object_peek_led (Object *object) 31058 { 31059 GDBusInterface *ret; 31060 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Led"); 31061 if (ret == NULL) 31062 return NULL; 31063 g_object_unref (ret); 31064 return LED (ret); 31065 } 31066 31067 /** 31068 * object_peek_host_ipmi: (skip) 31069 * @object: A #Object. 31070 * 31071 * Like object_get_host_ipmi() but doesn't increase the reference count on the returned object. 31072 * 31073 * <warning>It is not safe to use the returned object if you are on another thread than the one where the #GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning> 31074 * 31075 * Returns: (transfer none): A #HostIpmi or %NULL if @object does not implement the interface. Do not free the returned object, it is owned by @object. 31076 */ 31077 HostIpmi *object_peek_host_ipmi (Object *object) 31078 { 31079 GDBusInterface *ret; 31080 ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.HostIpmi"); 31081 if (ret == NULL) 31082 return NULL; 31083 g_object_unref (ret); 31084 return HOST_IPMI (ret); 31085 } 31086 31087 31088 static void 31089 object_notify (GDBusObject *object, GDBusInterface *interface) 31090 { 31091 _ExtendedGDBusInterfaceInfo *info = (_ExtendedGDBusInterfaceInfo *) g_dbus_interface_get_info (interface); 31092 /* info can be NULL if the other end is using a D-Bus interface we don't know 31093 * anything about, for example old generated code in this process talking to 31094 * newer generated code in the other process. */ 31095 if (info != NULL) 31096 g_object_notify (G_OBJECT (object), info->hyphen_name); 31097 } 31098 31099 /** 31100 * ObjectProxy: 31101 * 31102 * The #ObjectProxy structure contains only private data and should only be accessed using the provided API. 31103 */ 31104 31105 /** 31106 * ObjectProxyClass: 31107 * @parent_class: The parent class. 31108 * 31109 * Class structure for #ObjectProxy. 31110 */ 31111 31112 static void 31113 object_proxy__object_iface_init (ObjectIface *iface G_GNUC_UNUSED) 31114 { 31115 } 31116 31117 static void 31118 object_proxy__g_dbus_object_iface_init (GDBusObjectIface *iface) 31119 { 31120 iface->interface_added = object_notify; 31121 iface->interface_removed = object_notify; 31122 } 31123 31124 31125 G_DEFINE_TYPE_WITH_CODE (ObjectProxy, object_proxy, G_TYPE_DBUS_OBJECT_PROXY, 31126 G_IMPLEMENT_INTERFACE (TYPE_OBJECT, object_proxy__object_iface_init) 31127 G_IMPLEMENT_INTERFACE (G_TYPE_DBUS_OBJECT, object_proxy__g_dbus_object_iface_init)); 31128 31129 static void 31130 object_proxy_init (ObjectProxy *object G_GNUC_UNUSED) 31131 { 31132 } 31133 31134 static void 31135 object_proxy_set_property (GObject *gobject, 31136 guint prop_id, 31137 const GValue *value G_GNUC_UNUSED, 31138 GParamSpec *pspec) 31139 { 31140 G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); 31141 } 31142 31143 static void 31144 object_proxy_get_property (GObject *gobject, 31145 guint prop_id, 31146 GValue *value, 31147 GParamSpec *pspec) 31148 { 31149 ObjectProxy *object = OBJECT_PROXY (gobject); 31150 GDBusInterface *interface; 31151 31152 switch (prop_id) 31153 { 31154 case 1: 31155 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Hwmon"); 31156 g_value_take_object (value, interface); 31157 break; 31158 31159 case 2: 31160 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Fan"); 31161 g_value_take_object (value, interface); 31162 break; 31163 31164 case 3: 31165 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.SensorValue"); 31166 g_value_take_object (value, interface); 31167 break; 31168 31169 case 4: 31170 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.SensorThreshold"); 31171 g_value_take_object (value, interface); 31172 break; 31173 31174 case 5: 31175 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.SensorI2c"); 31176 g_value_take_object (value, interface); 31177 break; 31178 31179 case 6: 31180 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.SensorMatch"); 31181 g_value_take_object (value, interface); 31182 break; 31183 31184 case 7: 31185 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Process"); 31186 g_value_take_object (value, interface); 31187 break; 31188 31189 case 8: 31190 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.SharedResource"); 31191 g_value_take_object (value, interface); 31192 break; 31193 31194 case 9: 31195 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Control"); 31196 g_value_take_object (value, interface); 31197 break; 31198 31199 case 10: 31200 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.control.Bmc"); 31201 g_value_take_object (value, interface); 31202 break; 31203 31204 case 11: 31205 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.control.Host"); 31206 g_value_take_object (value, interface); 31207 break; 31208 31209 case 12: 31210 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.control.Power"); 31211 g_value_take_object (value, interface); 31212 break; 31213 31214 case 13: 31215 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.control.Checkstop"); 31216 g_value_take_object (value, interface); 31217 break; 31218 31219 case 14: 31220 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Watchdog"); 31221 g_value_take_object (value, interface); 31222 break; 31223 31224 case 15: 31225 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.EventLog"); 31226 g_value_take_object (value, interface); 31227 break; 31228 31229 case 16: 31230 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Flash"); 31231 g_value_take_object (value, interface); 31232 break; 31233 31234 case 17: 31235 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.FlashControl"); 31236 g_value_take_object (value, interface); 31237 break; 31238 31239 case 18: 31240 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Button"); 31241 g_value_take_object (value, interface); 31242 break; 31243 31244 case 19: 31245 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Led"); 31246 g_value_take_object (value, interface); 31247 break; 31248 31249 case 20: 31250 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.HostIpmi"); 31251 g_value_take_object (value, interface); 31252 break; 31253 31254 default: 31255 G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); 31256 break; 31257 } 31258 } 31259 31260 static void 31261 object_proxy_class_init (ObjectProxyClass *klass) 31262 { 31263 GObjectClass *gobject_class = G_OBJECT_CLASS (klass); 31264 31265 gobject_class->set_property = object_proxy_set_property; 31266 gobject_class->get_property = object_proxy_get_property; 31267 31268 g_object_class_override_property (gobject_class, 1, "hwmon"); 31269 g_object_class_override_property (gobject_class, 2, "fan"); 31270 g_object_class_override_property (gobject_class, 3, "sensor-value"); 31271 g_object_class_override_property (gobject_class, 4, "sensor-threshold"); 31272 g_object_class_override_property (gobject_class, 5, "sensor-i2c"); 31273 g_object_class_override_property (gobject_class, 6, "sensor-match"); 31274 g_object_class_override_property (gobject_class, 7, "process"); 31275 g_object_class_override_property (gobject_class, 8, "shared-resource"); 31276 g_object_class_override_property (gobject_class, 9, "control"); 31277 g_object_class_override_property (gobject_class, 10, "control-bmc"); 31278 g_object_class_override_property (gobject_class, 11, "control-host"); 31279 g_object_class_override_property (gobject_class, 12, "control-power"); 31280 g_object_class_override_property (gobject_class, 13, "control-checkstop"); 31281 g_object_class_override_property (gobject_class, 14, "watchdog"); 31282 g_object_class_override_property (gobject_class, 15, "event-log"); 31283 g_object_class_override_property (gobject_class, 16, "flash"); 31284 g_object_class_override_property (gobject_class, 17, "flash-control"); 31285 g_object_class_override_property (gobject_class, 18, "button"); 31286 g_object_class_override_property (gobject_class, 19, "led"); 31287 g_object_class_override_property (gobject_class, 20, "host-ipmi"); 31288 } 31289 31290 /** 31291 * object_proxy_new: 31292 * @connection: A #GDBusConnection. 31293 * @object_path: An object path. 31294 * 31295 * Creates a new proxy object. 31296 * 31297 * Returns: (transfer full): The proxy object. 31298 */ 31299 ObjectProxy * 31300 object_proxy_new (GDBusConnection *connection, 31301 const gchar *object_path) 31302 { 31303 g_return_val_if_fail (G_IS_DBUS_CONNECTION (connection), NULL); 31304 g_return_val_if_fail (g_variant_is_object_path (object_path), NULL); 31305 return OBJECT_PROXY (g_object_new (TYPE_OBJECT_PROXY, "g-connection", connection, "g-object-path", object_path, NULL)); 31306 } 31307 31308 /** 31309 * ObjectSkeleton: 31310 * 31311 * The #ObjectSkeleton structure contains only private data and should only be accessed using the provided API. 31312 */ 31313 31314 /** 31315 * ObjectSkeletonClass: 31316 * @parent_class: The parent class. 31317 * 31318 * Class structure for #ObjectSkeleton. 31319 */ 31320 31321 static void 31322 object_skeleton__object_iface_init (ObjectIface *iface G_GNUC_UNUSED) 31323 { 31324 } 31325 31326 31327 static void 31328 object_skeleton__g_dbus_object_iface_init (GDBusObjectIface *iface) 31329 { 31330 iface->interface_added = object_notify; 31331 iface->interface_removed = object_notify; 31332 } 31333 31334 G_DEFINE_TYPE_WITH_CODE (ObjectSkeleton, object_skeleton, G_TYPE_DBUS_OBJECT_SKELETON, 31335 G_IMPLEMENT_INTERFACE (TYPE_OBJECT, object_skeleton__object_iface_init) 31336 G_IMPLEMENT_INTERFACE (G_TYPE_DBUS_OBJECT, object_skeleton__g_dbus_object_iface_init)); 31337 31338 static void 31339 object_skeleton_init (ObjectSkeleton *object G_GNUC_UNUSED) 31340 { 31341 } 31342 31343 static void 31344 object_skeleton_set_property (GObject *gobject, 31345 guint prop_id, 31346 const GValue *value, 31347 GParamSpec *pspec) 31348 { 31349 ObjectSkeleton *object = OBJECT_SKELETON (gobject); 31350 GDBusInterfaceSkeleton *interface; 31351 31352 switch (prop_id) 31353 { 31354 case 1: 31355 interface = g_value_get_object (value); 31356 if (interface != NULL) 31357 { 31358 g_warn_if_fail (IS_HWMON (interface)); 31359 g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface); 31360 } 31361 else 31362 { 31363 g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object), "org.openbmc.Hwmon"); 31364 } 31365 break; 31366 31367 case 2: 31368 interface = g_value_get_object (value); 31369 if (interface != NULL) 31370 { 31371 g_warn_if_fail (IS_FAN (interface)); 31372 g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface); 31373 } 31374 else 31375 { 31376 g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object), "org.openbmc.Fan"); 31377 } 31378 break; 31379 31380 case 3: 31381 interface = g_value_get_object (value); 31382 if (interface != NULL) 31383 { 31384 g_warn_if_fail (IS_SENSOR_VALUE (interface)); 31385 g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface); 31386 } 31387 else 31388 { 31389 g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object), "org.openbmc.SensorValue"); 31390 } 31391 break; 31392 31393 case 4: 31394 interface = g_value_get_object (value); 31395 if (interface != NULL) 31396 { 31397 g_warn_if_fail (IS_SENSOR_THRESHOLD (interface)); 31398 g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface); 31399 } 31400 else 31401 { 31402 g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object), "org.openbmc.SensorThreshold"); 31403 } 31404 break; 31405 31406 case 5: 31407 interface = g_value_get_object (value); 31408 if (interface != NULL) 31409 { 31410 g_warn_if_fail (IS_SENSOR_I2C (interface)); 31411 g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface); 31412 } 31413 else 31414 { 31415 g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object), "org.openbmc.SensorI2c"); 31416 } 31417 break; 31418 31419 case 6: 31420 interface = g_value_get_object (value); 31421 if (interface != NULL) 31422 { 31423 g_warn_if_fail (IS_SENSOR_MATCH (interface)); 31424 g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface); 31425 } 31426 else 31427 { 31428 g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object), "org.openbmc.SensorMatch"); 31429 } 31430 break; 31431 31432 case 7: 31433 interface = g_value_get_object (value); 31434 if (interface != NULL) 31435 { 31436 g_warn_if_fail (IS_PROCESS (interface)); 31437 g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface); 31438 } 31439 else 31440 { 31441 g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object), "org.openbmc.Process"); 31442 } 31443 break; 31444 31445 case 8: 31446 interface = g_value_get_object (value); 31447 if (interface != NULL) 31448 { 31449 g_warn_if_fail (IS_SHARED_RESOURCE (interface)); 31450 g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface); 31451 } 31452 else 31453 { 31454 g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object), "org.openbmc.SharedResource"); 31455 } 31456 break; 31457 31458 case 9: 31459 interface = g_value_get_object (value); 31460 if (interface != NULL) 31461 { 31462 g_warn_if_fail (IS_CONTROL (interface)); 31463 g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface); 31464 } 31465 else 31466 { 31467 g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object), "org.openbmc.Control"); 31468 } 31469 break; 31470 31471 case 10: 31472 interface = g_value_get_object (value); 31473 if (interface != NULL) 31474 { 31475 g_warn_if_fail (IS_CONTROL_BMC (interface)); 31476 g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface); 31477 } 31478 else 31479 { 31480 g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object), "org.openbmc.control.Bmc"); 31481 } 31482 break; 31483 31484 case 11: 31485 interface = g_value_get_object (value); 31486 if (interface != NULL) 31487 { 31488 g_warn_if_fail (IS_CONTROL_HOST (interface)); 31489 g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface); 31490 } 31491 else 31492 { 31493 g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object), "org.openbmc.control.Host"); 31494 } 31495 break; 31496 31497 case 12: 31498 interface = g_value_get_object (value); 31499 if (interface != NULL) 31500 { 31501 g_warn_if_fail (IS_CONTROL_POWER (interface)); 31502 g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface); 31503 } 31504 else 31505 { 31506 g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object), "org.openbmc.control.Power"); 31507 } 31508 break; 31509 31510 case 13: 31511 interface = g_value_get_object (value); 31512 if (interface != NULL) 31513 { 31514 g_warn_if_fail (IS_CONTROL_CHECKSTOP (interface)); 31515 g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface); 31516 } 31517 else 31518 { 31519 g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object), "org.openbmc.control.Checkstop"); 31520 } 31521 break; 31522 31523 case 14: 31524 interface = g_value_get_object (value); 31525 if (interface != NULL) 31526 { 31527 g_warn_if_fail (IS_WATCHDOG (interface)); 31528 g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface); 31529 } 31530 else 31531 { 31532 g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object), "org.openbmc.Watchdog"); 31533 } 31534 break; 31535 31536 case 15: 31537 interface = g_value_get_object (value); 31538 if (interface != NULL) 31539 { 31540 g_warn_if_fail (IS_EVENT_LOG (interface)); 31541 g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface); 31542 } 31543 else 31544 { 31545 g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object), "org.openbmc.EventLog"); 31546 } 31547 break; 31548 31549 case 16: 31550 interface = g_value_get_object (value); 31551 if (interface != NULL) 31552 { 31553 g_warn_if_fail (IS_FLASH (interface)); 31554 g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface); 31555 } 31556 else 31557 { 31558 g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object), "org.openbmc.Flash"); 31559 } 31560 break; 31561 31562 case 17: 31563 interface = g_value_get_object (value); 31564 if (interface != NULL) 31565 { 31566 g_warn_if_fail (IS_FLASH_CONTROL (interface)); 31567 g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface); 31568 } 31569 else 31570 { 31571 g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object), "org.openbmc.FlashControl"); 31572 } 31573 break; 31574 31575 case 18: 31576 interface = g_value_get_object (value); 31577 if (interface != NULL) 31578 { 31579 g_warn_if_fail (IS_BUTTON (interface)); 31580 g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface); 31581 } 31582 else 31583 { 31584 g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object), "org.openbmc.Button"); 31585 } 31586 break; 31587 31588 case 19: 31589 interface = g_value_get_object (value); 31590 if (interface != NULL) 31591 { 31592 g_warn_if_fail (IS_LED (interface)); 31593 g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface); 31594 } 31595 else 31596 { 31597 g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object), "org.openbmc.Led"); 31598 } 31599 break; 31600 31601 case 20: 31602 interface = g_value_get_object (value); 31603 if (interface != NULL) 31604 { 31605 g_warn_if_fail (IS_HOST_IPMI (interface)); 31606 g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface); 31607 } 31608 else 31609 { 31610 g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object), "org.openbmc.HostIpmi"); 31611 } 31612 break; 31613 31614 default: 31615 G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); 31616 break; 31617 } 31618 } 31619 31620 static void 31621 object_skeleton_get_property (GObject *gobject, 31622 guint prop_id, 31623 GValue *value, 31624 GParamSpec *pspec) 31625 { 31626 ObjectSkeleton *object = OBJECT_SKELETON (gobject); 31627 GDBusInterface *interface; 31628 31629 switch (prop_id) 31630 { 31631 case 1: 31632 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Hwmon"); 31633 g_value_take_object (value, interface); 31634 break; 31635 31636 case 2: 31637 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Fan"); 31638 g_value_take_object (value, interface); 31639 break; 31640 31641 case 3: 31642 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.SensorValue"); 31643 g_value_take_object (value, interface); 31644 break; 31645 31646 case 4: 31647 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.SensorThreshold"); 31648 g_value_take_object (value, interface); 31649 break; 31650 31651 case 5: 31652 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.SensorI2c"); 31653 g_value_take_object (value, interface); 31654 break; 31655 31656 case 6: 31657 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.SensorMatch"); 31658 g_value_take_object (value, interface); 31659 break; 31660 31661 case 7: 31662 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Process"); 31663 g_value_take_object (value, interface); 31664 break; 31665 31666 case 8: 31667 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.SharedResource"); 31668 g_value_take_object (value, interface); 31669 break; 31670 31671 case 9: 31672 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Control"); 31673 g_value_take_object (value, interface); 31674 break; 31675 31676 case 10: 31677 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.control.Bmc"); 31678 g_value_take_object (value, interface); 31679 break; 31680 31681 case 11: 31682 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.control.Host"); 31683 g_value_take_object (value, interface); 31684 break; 31685 31686 case 12: 31687 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.control.Power"); 31688 g_value_take_object (value, interface); 31689 break; 31690 31691 case 13: 31692 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.control.Checkstop"); 31693 g_value_take_object (value, interface); 31694 break; 31695 31696 case 14: 31697 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Watchdog"); 31698 g_value_take_object (value, interface); 31699 break; 31700 31701 case 15: 31702 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.EventLog"); 31703 g_value_take_object (value, interface); 31704 break; 31705 31706 case 16: 31707 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Flash"); 31708 g_value_take_object (value, interface); 31709 break; 31710 31711 case 17: 31712 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.FlashControl"); 31713 g_value_take_object (value, interface); 31714 break; 31715 31716 case 18: 31717 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Button"); 31718 g_value_take_object (value, interface); 31719 break; 31720 31721 case 19: 31722 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.Led"); 31723 g_value_take_object (value, interface); 31724 break; 31725 31726 case 20: 31727 interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.openbmc.HostIpmi"); 31728 g_value_take_object (value, interface); 31729 break; 31730 31731 default: 31732 G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); 31733 break; 31734 } 31735 } 31736 31737 static void 31738 object_skeleton_class_init (ObjectSkeletonClass *klass) 31739 { 31740 GObjectClass *gobject_class = G_OBJECT_CLASS (klass); 31741 31742 gobject_class->set_property = object_skeleton_set_property; 31743 gobject_class->get_property = object_skeleton_get_property; 31744 31745 g_object_class_override_property (gobject_class, 1, "hwmon"); 31746 g_object_class_override_property (gobject_class, 2, "fan"); 31747 g_object_class_override_property (gobject_class, 3, "sensor-value"); 31748 g_object_class_override_property (gobject_class, 4, "sensor-threshold"); 31749 g_object_class_override_property (gobject_class, 5, "sensor-i2c"); 31750 g_object_class_override_property (gobject_class, 6, "sensor-match"); 31751 g_object_class_override_property (gobject_class, 7, "process"); 31752 g_object_class_override_property (gobject_class, 8, "shared-resource"); 31753 g_object_class_override_property (gobject_class, 9, "control"); 31754 g_object_class_override_property (gobject_class, 10, "control-bmc"); 31755 g_object_class_override_property (gobject_class, 11, "control-host"); 31756 g_object_class_override_property (gobject_class, 12, "control-power"); 31757 g_object_class_override_property (gobject_class, 13, "control-checkstop"); 31758 g_object_class_override_property (gobject_class, 14, "watchdog"); 31759 g_object_class_override_property (gobject_class, 15, "event-log"); 31760 g_object_class_override_property (gobject_class, 16, "flash"); 31761 g_object_class_override_property (gobject_class, 17, "flash-control"); 31762 g_object_class_override_property (gobject_class, 18, "button"); 31763 g_object_class_override_property (gobject_class, 19, "led"); 31764 g_object_class_override_property (gobject_class, 20, "host-ipmi"); 31765 } 31766 31767 /** 31768 * object_skeleton_new: 31769 * @object_path: An object path. 31770 * 31771 * Creates a new skeleton object. 31772 * 31773 * Returns: (transfer full): The skeleton object. 31774 */ 31775 ObjectSkeleton * 31776 object_skeleton_new (const gchar *object_path) 31777 { 31778 g_return_val_if_fail (g_variant_is_object_path (object_path), NULL); 31779 return OBJECT_SKELETON (g_object_new (TYPE_OBJECT_SKELETON, "g-object-path", object_path, NULL)); 31780 } 31781 31782 /** 31783 * object_skeleton_set_hwmon: 31784 * @object: A #ObjectSkeleton. 31785 * @interface_: (allow-none): A #Hwmon or %NULL to clear the interface. 31786 * 31787 * Sets the #Hwmon instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Hwmon.top_of_page">org.openbmc.Hwmon</link> on @object. 31788 */ 31789 void object_skeleton_set_hwmon (ObjectSkeleton *object, Hwmon *interface_) 31790 { 31791 g_object_set (G_OBJECT (object), "hwmon", interface_, NULL); 31792 } 31793 31794 /** 31795 * object_skeleton_set_fan: 31796 * @object: A #ObjectSkeleton. 31797 * @interface_: (allow-none): A #Fan or %NULL to clear the interface. 31798 * 31799 * Sets the #Fan instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Fan.top_of_page">org.openbmc.Fan</link> on @object. 31800 */ 31801 void object_skeleton_set_fan (ObjectSkeleton *object, Fan *interface_) 31802 { 31803 g_object_set (G_OBJECT (object), "fan", interface_, NULL); 31804 } 31805 31806 /** 31807 * object_skeleton_set_sensor_value: 31808 * @object: A #ObjectSkeleton. 31809 * @interface_: (allow-none): A #SensorValue or %NULL to clear the interface. 31810 * 31811 * Sets the #SensorValue instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorValue.top_of_page">org.openbmc.SensorValue</link> on @object. 31812 */ 31813 void object_skeleton_set_sensor_value (ObjectSkeleton *object, SensorValue *interface_) 31814 { 31815 g_object_set (G_OBJECT (object), "sensor-value", interface_, NULL); 31816 } 31817 31818 /** 31819 * object_skeleton_set_sensor_threshold: 31820 * @object: A #ObjectSkeleton. 31821 * @interface_: (allow-none): A #SensorThreshold or %NULL to clear the interface. 31822 * 31823 * Sets the #SensorThreshold instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorThreshold.top_of_page">org.openbmc.SensorThreshold</link> on @object. 31824 */ 31825 void object_skeleton_set_sensor_threshold (ObjectSkeleton *object, SensorThreshold *interface_) 31826 { 31827 g_object_set (G_OBJECT (object), "sensor-threshold", interface_, NULL); 31828 } 31829 31830 /** 31831 * object_skeleton_set_sensor_i2c: 31832 * @object: A #ObjectSkeleton. 31833 * @interface_: (allow-none): A #SensorI2c or %NULL to clear the interface. 31834 * 31835 * Sets the #SensorI2c instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorI2c.top_of_page">org.openbmc.SensorI2c</link> on @object. 31836 */ 31837 void object_skeleton_set_sensor_i2c (ObjectSkeleton *object, SensorI2c *interface_) 31838 { 31839 g_object_set (G_OBJECT (object), "sensor-i2c", interface_, NULL); 31840 } 31841 31842 /** 31843 * object_skeleton_set_sensor_match: 31844 * @object: A #ObjectSkeleton. 31845 * @interface_: (allow-none): A #SensorMatch or %NULL to clear the interface. 31846 * 31847 * Sets the #SensorMatch instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SensorMatch.top_of_page">org.openbmc.SensorMatch</link> on @object. 31848 */ 31849 void object_skeleton_set_sensor_match (ObjectSkeleton *object, SensorMatch *interface_) 31850 { 31851 g_object_set (G_OBJECT (object), "sensor-match", interface_, NULL); 31852 } 31853 31854 /** 31855 * object_skeleton_set_process: 31856 * @object: A #ObjectSkeleton. 31857 * @interface_: (allow-none): A #Process or %NULL to clear the interface. 31858 * 31859 * Sets the #Process instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Process.top_of_page">org.openbmc.Process</link> on @object. 31860 */ 31861 void object_skeleton_set_process (ObjectSkeleton *object, Process *interface_) 31862 { 31863 g_object_set (G_OBJECT (object), "process", interface_, NULL); 31864 } 31865 31866 /** 31867 * object_skeleton_set_shared_resource: 31868 * @object: A #ObjectSkeleton. 31869 * @interface_: (allow-none): A #SharedResource or %NULL to clear the interface. 31870 * 31871 * Sets the #SharedResource instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-SharedResource.top_of_page">org.openbmc.SharedResource</link> on @object. 31872 */ 31873 void object_skeleton_set_shared_resource (ObjectSkeleton *object, SharedResource *interface_) 31874 { 31875 g_object_set (G_OBJECT (object), "shared-resource", interface_, NULL); 31876 } 31877 31878 /** 31879 * object_skeleton_set_control: 31880 * @object: A #ObjectSkeleton. 31881 * @interface_: (allow-none): A #Control or %NULL to clear the interface. 31882 * 31883 * Sets the #Control instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Control.top_of_page">org.openbmc.Control</link> on @object. 31884 */ 31885 void object_skeleton_set_control (ObjectSkeleton *object, Control *interface_) 31886 { 31887 g_object_set (G_OBJECT (object), "control", interface_, NULL); 31888 } 31889 31890 /** 31891 * object_skeleton_set_control_bmc: 31892 * @object: A #ObjectSkeleton. 31893 * @interface_: (allow-none): A #ControlBmc or %NULL to clear the interface. 31894 * 31895 * Sets the #ControlBmc instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Bmc.top_of_page">org.openbmc.control.Bmc</link> on @object. 31896 */ 31897 void object_skeleton_set_control_bmc (ObjectSkeleton *object, ControlBmc *interface_) 31898 { 31899 g_object_set (G_OBJECT (object), "control-bmc", interface_, NULL); 31900 } 31901 31902 /** 31903 * object_skeleton_set_control_host: 31904 * @object: A #ObjectSkeleton. 31905 * @interface_: (allow-none): A #ControlHost or %NULL to clear the interface. 31906 * 31907 * Sets the #ControlHost instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Host.top_of_page">org.openbmc.control.Host</link> on @object. 31908 */ 31909 void object_skeleton_set_control_host (ObjectSkeleton *object, ControlHost *interface_) 31910 { 31911 g_object_set (G_OBJECT (object), "control-host", interface_, NULL); 31912 } 31913 31914 /** 31915 * object_skeleton_set_control_power: 31916 * @object: A #ObjectSkeleton. 31917 * @interface_: (allow-none): A #ControlPower or %NULL to clear the interface. 31918 * 31919 * Sets the #ControlPower instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Power.top_of_page">org.openbmc.control.Power</link> on @object. 31920 */ 31921 void object_skeleton_set_control_power (ObjectSkeleton *object, ControlPower *interface_) 31922 { 31923 g_object_set (G_OBJECT (object), "control-power", interface_, NULL); 31924 } 31925 31926 /** 31927 * object_skeleton_set_control_checkstop: 31928 * @object: A #ObjectSkeleton. 31929 * @interface_: (allow-none): A #ControlCheckstop or %NULL to clear the interface. 31930 * 31931 * Sets the #ControlCheckstop instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-control-Checkstop.top_of_page">org.openbmc.control.Checkstop</link> on @object. 31932 */ 31933 void object_skeleton_set_control_checkstop (ObjectSkeleton *object, ControlCheckstop *interface_) 31934 { 31935 g_object_set (G_OBJECT (object), "control-checkstop", interface_, NULL); 31936 } 31937 31938 /** 31939 * object_skeleton_set_watchdog: 31940 * @object: A #ObjectSkeleton. 31941 * @interface_: (allow-none): A #Watchdog or %NULL to clear the interface. 31942 * 31943 * Sets the #Watchdog instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Watchdog.top_of_page">org.openbmc.Watchdog</link> on @object. 31944 */ 31945 void object_skeleton_set_watchdog (ObjectSkeleton *object, Watchdog *interface_) 31946 { 31947 g_object_set (G_OBJECT (object), "watchdog", interface_, NULL); 31948 } 31949 31950 /** 31951 * object_skeleton_set_event_log: 31952 * @object: A #ObjectSkeleton. 31953 * @interface_: (allow-none): A #EventLog or %NULL to clear the interface. 31954 * 31955 * Sets the #EventLog instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-EventLog.top_of_page">org.openbmc.EventLog</link> on @object. 31956 */ 31957 void object_skeleton_set_event_log (ObjectSkeleton *object, EventLog *interface_) 31958 { 31959 g_object_set (G_OBJECT (object), "event-log", interface_, NULL); 31960 } 31961 31962 /** 31963 * object_skeleton_set_flash: 31964 * @object: A #ObjectSkeleton. 31965 * @interface_: (allow-none): A #Flash or %NULL to clear the interface. 31966 * 31967 * Sets the #Flash instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Flash.top_of_page">org.openbmc.Flash</link> on @object. 31968 */ 31969 void object_skeleton_set_flash (ObjectSkeleton *object, Flash *interface_) 31970 { 31971 g_object_set (G_OBJECT (object), "flash", interface_, NULL); 31972 } 31973 31974 /** 31975 * object_skeleton_set_flash_control: 31976 * @object: A #ObjectSkeleton. 31977 * @interface_: (allow-none): A #FlashControl or %NULL to clear the interface. 31978 * 31979 * Sets the #FlashControl instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-FlashControl.top_of_page">org.openbmc.FlashControl</link> on @object. 31980 */ 31981 void object_skeleton_set_flash_control (ObjectSkeleton *object, FlashControl *interface_) 31982 { 31983 g_object_set (G_OBJECT (object), "flash-control", interface_, NULL); 31984 } 31985 31986 /** 31987 * object_skeleton_set_button: 31988 * @object: A #ObjectSkeleton. 31989 * @interface_: (allow-none): A #Button or %NULL to clear the interface. 31990 * 31991 * Sets the #Button instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Button.top_of_page">org.openbmc.Button</link> on @object. 31992 */ 31993 void object_skeleton_set_button (ObjectSkeleton *object, Button *interface_) 31994 { 31995 g_object_set (G_OBJECT (object), "button", interface_, NULL); 31996 } 31997 31998 /** 31999 * object_skeleton_set_led: 32000 * @object: A #ObjectSkeleton. 32001 * @interface_: (allow-none): A #Led or %NULL to clear the interface. 32002 * 32003 * Sets the #Led instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-Led.top_of_page">org.openbmc.Led</link> on @object. 32004 */ 32005 void object_skeleton_set_led (ObjectSkeleton *object, Led *interface_) 32006 { 32007 g_object_set (G_OBJECT (object), "led", interface_, NULL); 32008 } 32009 32010 /** 32011 * object_skeleton_set_host_ipmi: 32012 * @object: A #ObjectSkeleton. 32013 * @interface_: (allow-none): A #HostIpmi or %NULL to clear the interface. 32014 * 32015 * Sets the #HostIpmi instance for the D-Bus interface <link linkend="gdbus-interface-org-openbmc-HostIpmi.top_of_page">org.openbmc.HostIpmi</link> on @object. 32016 */ 32017 void object_skeleton_set_host_ipmi (ObjectSkeleton *object, HostIpmi *interface_) 32018 { 32019 g_object_set (G_OBJECT (object), "host-ipmi", interface_, NULL); 32020 } 32021 32022 32023 /* ------------------------------------------------------------------------ 32024 * Code for ObjectManager client 32025 * ------------------------------------------------------------------------ 32026 */ 32027 32028 /** 32029 * SECTION:ObjectManagerClient 32030 * @title: ObjectManagerClient 32031 * @short_description: Generated GDBusObjectManagerClient type 32032 * 32033 * This section contains a #GDBusObjectManagerClient that uses object_manager_client_get_proxy_type() as the #GDBusProxyTypeFunc. 32034 */ 32035 32036 /** 32037 * ObjectManagerClient: 32038 * 32039 * The #ObjectManagerClient structure contains only private data and should only be accessed using the provided API. 32040 */ 32041 32042 /** 32043 * ObjectManagerClientClass: 32044 * @parent_class: The parent class. 32045 * 32046 * Class structure for #ObjectManagerClient. 32047 */ 32048 32049 G_DEFINE_TYPE (ObjectManagerClient, object_manager_client, G_TYPE_DBUS_OBJECT_MANAGER_CLIENT); 32050 32051 static void 32052 object_manager_client_init (ObjectManagerClient *manager G_GNUC_UNUSED) 32053 { 32054 } 32055 32056 static void 32057 object_manager_client_class_init (ObjectManagerClientClass *klass G_GNUC_UNUSED) 32058 { 32059 } 32060 32061 /** 32062 * object_manager_client_get_proxy_type: 32063 * @manager: A #GDBusObjectManagerClient. 32064 * @object_path: The object path of the remote object (unused). 32065 * @interface_name: (allow-none): Interface name of the remote object or %NULL to get the object proxy #GType. 32066 * @user_data: User data (unused). 32067 * 32068 * A #GDBusProxyTypeFunc that maps @interface_name to the generated #GDBusObjectProxy<!-- -->- and #GDBusProxy<!-- -->-derived types. 32069 * 32070 * Returns: A #GDBusProxy<!-- -->-derived #GType if @interface_name is not %NULL, otherwise the #GType for #ObjectProxy. 32071 */ 32072 GType 32073 object_manager_client_get_proxy_type (GDBusObjectManagerClient *manager G_GNUC_UNUSED, const gchar *object_path G_GNUC_UNUSED, const gchar *interface_name, gpointer user_data G_GNUC_UNUSED) 32074 { 32075 static gsize once_init_value = 0; 32076 static GHashTable *lookup_hash; 32077 GType ret; 32078 32079 if (interface_name == NULL) 32080 return TYPE_OBJECT_PROXY; 32081 if (g_once_init_enter (&once_init_value)) 32082 { 32083 lookup_hash = g_hash_table_new (g_str_hash, g_str_equal); 32084 g_hash_table_insert (lookup_hash, (gpointer) "org.openbmc.Hwmon", GSIZE_TO_POINTER (TYPE_HWMON_PROXY)); 32085 g_hash_table_insert (lookup_hash, (gpointer) "org.openbmc.Fan", GSIZE_TO_POINTER (TYPE_FAN_PROXY)); 32086 g_hash_table_insert (lookup_hash, (gpointer) "org.openbmc.SensorValue", GSIZE_TO_POINTER (TYPE_SENSOR_VALUE_PROXY)); 32087 g_hash_table_insert (lookup_hash, (gpointer) "org.openbmc.SensorThreshold", GSIZE_TO_POINTER (TYPE_SENSOR_THRESHOLD_PROXY)); 32088 g_hash_table_insert (lookup_hash, (gpointer) "org.openbmc.SensorI2c", GSIZE_TO_POINTER (TYPE_SENSOR_I2C_PROXY)); 32089 g_hash_table_insert (lookup_hash, (gpointer) "org.openbmc.SensorMatch", GSIZE_TO_POINTER (TYPE_SENSOR_MATCH_PROXY)); 32090 g_hash_table_insert (lookup_hash, (gpointer) "org.openbmc.Process", GSIZE_TO_POINTER (TYPE_PROCESS_PROXY)); 32091 g_hash_table_insert (lookup_hash, (gpointer) "org.openbmc.SharedResource", GSIZE_TO_POINTER (TYPE_SHARED_RESOURCE_PROXY)); 32092 g_hash_table_insert (lookup_hash, (gpointer) "org.openbmc.Control", GSIZE_TO_POINTER (TYPE_CONTROL_PROXY)); 32093 g_hash_table_insert (lookup_hash, (gpointer) "org.openbmc.control.Bmc", GSIZE_TO_POINTER (TYPE_CONTROL_BMC_PROXY)); 32094 g_hash_table_insert (lookup_hash, (gpointer) "org.openbmc.control.Host", GSIZE_TO_POINTER (TYPE_CONTROL_HOST_PROXY)); 32095 g_hash_table_insert (lookup_hash, (gpointer) "org.openbmc.control.Power", GSIZE_TO_POINTER (TYPE_CONTROL_POWER_PROXY)); 32096 g_hash_table_insert (lookup_hash, (gpointer) "org.openbmc.control.Checkstop", GSIZE_TO_POINTER (TYPE_CONTROL_CHECKSTOP_PROXY)); 32097 g_hash_table_insert (lookup_hash, (gpointer) "org.openbmc.Watchdog", GSIZE_TO_POINTER (TYPE_WATCHDOG_PROXY)); 32098 g_hash_table_insert (lookup_hash, (gpointer) "org.openbmc.EventLog", GSIZE_TO_POINTER (TYPE_EVENT_LOG_PROXY)); 32099 g_hash_table_insert (lookup_hash, (gpointer) "org.openbmc.Flash", GSIZE_TO_POINTER (TYPE_FLASH_PROXY)); 32100 g_hash_table_insert (lookup_hash, (gpointer) "org.openbmc.FlashControl", GSIZE_TO_POINTER (TYPE_FLASH_CONTROL_PROXY)); 32101 g_hash_table_insert (lookup_hash, (gpointer) "org.openbmc.Button", GSIZE_TO_POINTER (TYPE_BUTTON_PROXY)); 32102 g_hash_table_insert (lookup_hash, (gpointer) "org.openbmc.Led", GSIZE_TO_POINTER (TYPE_LED_PROXY)); 32103 g_hash_table_insert (lookup_hash, (gpointer) "org.openbmc.HostIpmi", GSIZE_TO_POINTER (TYPE_HOST_IPMI_PROXY)); 32104 g_once_init_leave (&once_init_value, 1); 32105 } 32106 ret = (GType) GPOINTER_TO_SIZE (g_hash_table_lookup (lookup_hash, interface_name)); 32107 if (ret == (GType) 0) 32108 ret = G_TYPE_DBUS_PROXY; 32109 return ret; 32110 } 32111 32112 /** 32113 * object_manager_client_new: 32114 * @connection: A #GDBusConnection. 32115 * @flags: Flags from the #GDBusObjectManagerClientFlags enumeration. 32116 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 32117 * @object_path: An object path. 32118 * @cancellable: (allow-none): A #GCancellable or %NULL. 32119 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 32120 * @user_data: User data to pass to @callback. 32121 * 32122 * Asynchronously creates #GDBusObjectManagerClient using object_manager_client_get_proxy_type() as the #GDBusProxyTypeFunc. See g_dbus_object_manager_client_new() for more details. 32123 * 32124 * 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. 32125 * You can then call object_manager_client_new_finish() to get the result of the operation. 32126 * 32127 * See object_manager_client_new_sync() for the synchronous, blocking version of this constructor. 32128 */ 32129 void 32130 object_manager_client_new ( 32131 GDBusConnection *connection, 32132 GDBusObjectManagerClientFlags flags, 32133 const gchar *name, 32134 const gchar *object_path, 32135 GCancellable *cancellable, 32136 GAsyncReadyCallback callback, 32137 gpointer user_data) 32138 { 32139 g_async_initable_new_async (TYPE_OBJECT_MANAGER_CLIENT, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "flags", flags, "name", name, "connection", connection, "object-path", object_path, "get-proxy-type-func", object_manager_client_get_proxy_type, NULL); 32140 } 32141 32142 /** 32143 * object_manager_client_new_finish: 32144 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to object_manager_client_new(). 32145 * @error: Return location for error or %NULL 32146 * 32147 * Finishes an operation started with object_manager_client_new(). 32148 * 32149 * Returns: (transfer full) (type ObjectManagerClient): The constructed object manager client or %NULL if @error is set. 32150 */ 32151 GDBusObjectManager * 32152 object_manager_client_new_finish ( 32153 GAsyncResult *res, 32154 GError **error) 32155 { 32156 GObject *ret; 32157 GObject *source_object; 32158 source_object = g_async_result_get_source_object (res); 32159 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 32160 g_object_unref (source_object); 32161 if (ret != NULL) 32162 return G_DBUS_OBJECT_MANAGER (ret); 32163 else 32164 return NULL; 32165 } 32166 32167 /** 32168 * object_manager_client_new_sync: 32169 * @connection: A #GDBusConnection. 32170 * @flags: Flags from the #GDBusObjectManagerClientFlags enumeration. 32171 * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection. 32172 * @object_path: An object path. 32173 * @cancellable: (allow-none): A #GCancellable or %NULL. 32174 * @error: Return location for error or %NULL 32175 * 32176 * Synchronously creates #GDBusObjectManagerClient using object_manager_client_get_proxy_type() as the #GDBusProxyTypeFunc. See g_dbus_object_manager_client_new_sync() for more details. 32177 * 32178 * The calling thread is blocked until a reply is received. 32179 * 32180 * See object_manager_client_new() for the asynchronous version of this constructor. 32181 * 32182 * Returns: (transfer full) (type ObjectManagerClient): The constructed object manager client or %NULL if @error is set. 32183 */ 32184 GDBusObjectManager * 32185 object_manager_client_new_sync ( 32186 GDBusConnection *connection, 32187 GDBusObjectManagerClientFlags flags, 32188 const gchar *name, 32189 const gchar *object_path, 32190 GCancellable *cancellable, 32191 GError **error) 32192 { 32193 GInitable *ret; 32194 ret = g_initable_new (TYPE_OBJECT_MANAGER_CLIENT, cancellable, error, "flags", flags, "name", name, "connection", connection, "object-path", object_path, "get-proxy-type-func", object_manager_client_get_proxy_type, NULL); 32195 if (ret != NULL) 32196 return G_DBUS_OBJECT_MANAGER (ret); 32197 else 32198 return NULL; 32199 } 32200 32201 32202 /** 32203 * object_manager_client_new_for_bus: 32204 * @bus_type: A #GBusType. 32205 * @flags: Flags from the #GDBusObjectManagerClientFlags enumeration. 32206 * @name: A bus name (well-known or unique). 32207 * @object_path: An object path. 32208 * @cancellable: (allow-none): A #GCancellable or %NULL. 32209 * @callback: A #GAsyncReadyCallback to call when the request is satisfied. 32210 * @user_data: User data to pass to @callback. 32211 * 32212 * Like object_manager_client_new() but takes a #GBusType instead of a #GDBusConnection. 32213 * 32214 * 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. 32215 * You can then call object_manager_client_new_for_bus_finish() to get the result of the operation. 32216 * 32217 * See object_manager_client_new_for_bus_sync() for the synchronous, blocking version of this constructor. 32218 */ 32219 void 32220 object_manager_client_new_for_bus ( 32221 GBusType bus_type, 32222 GDBusObjectManagerClientFlags flags, 32223 const gchar *name, 32224 const gchar *object_path, 32225 GCancellable *cancellable, 32226 GAsyncReadyCallback callback, 32227 gpointer user_data) 32228 { 32229 g_async_initable_new_async (TYPE_OBJECT_MANAGER_CLIENT, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "flags", flags, "name", name, "bus-type", bus_type, "object-path", object_path, "get-proxy-type-func", object_manager_client_get_proxy_type, NULL); 32230 } 32231 32232 /** 32233 * object_manager_client_new_for_bus_finish: 32234 * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to object_manager_client_new_for_bus(). 32235 * @error: Return location for error or %NULL 32236 * 32237 * Finishes an operation started with object_manager_client_new_for_bus(). 32238 * 32239 * Returns: (transfer full) (type ObjectManagerClient): The constructed object manager client or %NULL if @error is set. 32240 */ 32241 GDBusObjectManager * 32242 object_manager_client_new_for_bus_finish ( 32243 GAsyncResult *res, 32244 GError **error) 32245 { 32246 GObject *ret; 32247 GObject *source_object; 32248 source_object = g_async_result_get_source_object (res); 32249 ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error); 32250 g_object_unref (source_object); 32251 if (ret != NULL) 32252 return G_DBUS_OBJECT_MANAGER (ret); 32253 else 32254 return NULL; 32255 } 32256 32257 /** 32258 * object_manager_client_new_for_bus_sync: 32259 * @bus_type: A #GBusType. 32260 * @flags: Flags from the #GDBusObjectManagerClientFlags enumeration. 32261 * @name: A bus name (well-known or unique). 32262 * @object_path: An object path. 32263 * @cancellable: (allow-none): A #GCancellable or %NULL. 32264 * @error: Return location for error or %NULL 32265 * 32266 * Like object_manager_client_new_sync() but takes a #GBusType instead of a #GDBusConnection. 32267 * 32268 * The calling thread is blocked until a reply is received. 32269 * 32270 * See object_manager_client_new_for_bus() for the asynchronous version of this constructor. 32271 * 32272 * Returns: (transfer full) (type ObjectManagerClient): The constructed object manager client or %NULL if @error is set. 32273 */ 32274 GDBusObjectManager * 32275 object_manager_client_new_for_bus_sync ( 32276 GBusType bus_type, 32277 GDBusObjectManagerClientFlags flags, 32278 const gchar *name, 32279 const gchar *object_path, 32280 GCancellable *cancellable, 32281 GError **error) 32282 { 32283 GInitable *ret; 32284 ret = g_initable_new (TYPE_OBJECT_MANAGER_CLIENT, cancellable, error, "flags", flags, "name", name, "bus-type", bus_type, "object-path", object_path, "get-proxy-type-func", object_manager_client_get_proxy_type, NULL); 32285 if (ret != NULL) 32286 return G_DBUS_OBJECT_MANAGER (ret); 32287 else 32288 return NULL; 32289 } 32290 32291 32292