12912Sartem /*************************************************************************** 22912Sartem * CVSID: $Id$ 32912Sartem * 42912Sartem * libhal.h : HAL daemon C convenience library headers 52912Sartem * 62912Sartem * Copyright (C) 2003 David Zeuthen, <david@fubar.dk> 7*6293Sartem * Copyright (C) 2007 Codethink Ltd. Author Rob Taylor <rob.taylor@codethink.co.uk> 82912Sartem * 92912Sartem * Licensed under the Academic Free License version 2.1 102912Sartem * 112912Sartem * This program is free software; you can redistribute it and/or modify 122912Sartem * it under the terms of the GNU General Public License as published by 132912Sartem * the Free Software Foundation; either version 2 of the License, or 142912Sartem * (at your option) any later version. 152912Sartem * 162912Sartem * This program is distributed in the hope that it will be useful, 172912Sartem * but WITHOUT ANY WARRANTY; without even the implied warranty of 182912Sartem * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 192912Sartem * GNU General Public License for more details. 202912Sartem * 212912Sartem * You should have received a copy of the GNU General Public License 222912Sartem * along with this program; if not, write to the Free Software 232912Sartem * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 242912Sartem * 252912Sartem **************************************************************************/ 262912Sartem 272912Sartem #ifndef LIBHAL_H 282912Sartem #define LIBHAL_H 292912Sartem 302912Sartem #include <dbus/dbus.h> 312912Sartem 322912Sartem #if defined(__cplusplus) 332912Sartem extern "C" { 342912Sartem #if 0 352912Sartem } /* shut up emacs indenting */ 362912Sartem #endif 372912Sartem #endif 382912Sartem 392912Sartem #if defined(__GNUC__) 402912Sartem #define LIBHAL_DEPRECATED __attribute__ ((deprecated)) 412912Sartem #else 422912Sartem #define LIBHAL_DEPRECATED 432912Sartem #endif 442912Sartem 452912Sartem 462912Sartem #define LIBHAL_FREE_DBUS_ERROR(_dbus_error_) \ 472912Sartem do { \ 482912Sartem if (dbus_error_is_set(_dbus_error_)) \ 492912Sartem dbus_error_free (_dbus_error_); \ 502912Sartem } while (0) 512912Sartem 522912Sartem 532912Sartem /** 542912Sartem * LIBHAL_CHECK_LIBHALCONTEXT: 552912Sartem * @_ctx_: the context 562912Sartem * @_ret_: what to use for return value if context is invalid 572912Sartem * 582912Sartem * Handy macro for checking whether a context is valid. 592912Sartem */ 602912Sartem #define LIBHAL_CHECK_LIBHALCONTEXT(_ctx_, _ret_) \ 612912Sartem do { \ 622912Sartem if (_ctx_ == NULL) { \ 632912Sartem fprintf (stderr, \ 642912Sartem "%s %d : LibHalContext *ctx is NULL\n", \ 652912Sartem __FILE__, __LINE__); \ 662912Sartem return _ret_; \ 672912Sartem } \ 682912Sartem } while(0) 692912Sartem 702912Sartem /** 712912Sartem * LibHalPropertyType: 722912Sartem * 732912Sartem * Possible types for properties on hal device objects 742912Sartem */ 752912Sartem typedef enum { 762912Sartem /** Used to report error condition */ 772912Sartem LIBHAL_PROPERTY_TYPE_INVALID = DBUS_TYPE_INVALID, 782912Sartem 792912Sartem /** Type for 32-bit signed integer property */ 802912Sartem LIBHAL_PROPERTY_TYPE_INT32 = DBUS_TYPE_INT32, 812912Sartem 822912Sartem /** Type for 64-bit unsigned integer property */ 832912Sartem LIBHAL_PROPERTY_TYPE_UINT64 = DBUS_TYPE_UINT64, 842912Sartem 852912Sartem /** Type for double precision floating point property */ 862912Sartem LIBHAL_PROPERTY_TYPE_DOUBLE = DBUS_TYPE_DOUBLE, 872912Sartem 882912Sartem /** Type for boolean property */ 892912Sartem LIBHAL_PROPERTY_TYPE_BOOLEAN = DBUS_TYPE_BOOLEAN, 902912Sartem 912912Sartem /** Type for UTF-8 string property */ 922912Sartem LIBHAL_PROPERTY_TYPE_STRING = DBUS_TYPE_STRING, 932912Sartem 942912Sartem /** Type for list of UTF-8 strings property */ 952912Sartem LIBHAL_PROPERTY_TYPE_STRLIST = ((int) (DBUS_TYPE_STRING<<8)+('l')) 962912Sartem } LibHalPropertyType; 972912Sartem 982912Sartem 992912Sartem typedef struct LibHalContext_s LibHalContext; 1002912Sartem 1012912Sartem /** 1022912Sartem * LibHalIntegrateDBusIntoMainLoop: 1032912Sartem * @ctx: context for connection to hald 1042912Sartem * @dbus_connection: DBus connection to use in ctx 1052912Sartem * 1062912Sartem * Type for function in application code that integrates a 1072912Sartem * DBusConnection object into its own mainloop. 1082912Sartem */ 1092912Sartem typedef void (*LibHalIntegrateDBusIntoMainLoop) (LibHalContext *ctx, 1102912Sartem DBusConnection *dbus_connection); 1112912Sartem 1122912Sartem /** 1132912Sartem * LibHalDeviceAdded: 1142912Sartem * @ctx: context for connection to hald 1152912Sartem * @udi: the Unique Device Id 1162912Sartem * 1172912Sartem * Type for callback when a device is added. 1182912Sartem */ 1192912Sartem typedef void (*LibHalDeviceAdded) (LibHalContext *ctx, 1202912Sartem const char *udi); 1212912Sartem 1222912Sartem /** 1232912Sartem * LibHalDeviceRemoved: 1242912Sartem * @ctx: context for connection to hald 1252912Sartem * @udi: the Unique Device Id 1262912Sartem * 1272912Sartem * Type for callback when a device is removed. 1282912Sartem */ 1292912Sartem typedef void (*LibHalDeviceRemoved) (LibHalContext *ctx, 1302912Sartem const char *udi); 1312912Sartem 1322912Sartem /** 1332912Sartem * LibHalDeviceNewCapability: 1342912Sartem * @ctx: context for connection to hald 1352912Sartem * @udi: the Unique Device Id 1362912Sartem * @capability: capability of the device 1372912Sartem * 1382912Sartem * Type for callback when a device gains a new capability. 1392912Sartem * 1402912Sartem */ 1412912Sartem typedef void (*LibHalDeviceNewCapability) (LibHalContext *ctx, 1422912Sartem const char *udi, 1432912Sartem const char *capability); 1442912Sartem 1452912Sartem /** 1462912Sartem * LibHalDeviceLostCapability: 1472912Sartem * @ctx: context for connection to hald 1482912Sartem * @udi: the Unique Device Id 1492912Sartem * @capability: capability of the device 1502912Sartem * 1512912Sartem * Type for callback when a device loses a capability. 1522912Sartem * 1532912Sartem */ 1542912Sartem typedef void (*LibHalDeviceLostCapability) (LibHalContext *ctx, 1552912Sartem const char *udi, 1562912Sartem const char *capability); 1572912Sartem 1582912Sartem /** 1592912Sartem * LibHalDevicePropertyModified: 1602912Sartem * @ctx: context for connection to hald 1612912Sartem * @udi: the Unique Device Id 1622912Sartem * @key: name of the property that has changed 1632912Sartem * @is_removed: whether or not property was removed 1642912Sartem * @is_added: whether or not property was added 1652912Sartem * 1662912Sartem * Type for callback when a property of a device changes. 1672912Sartem */ 1682912Sartem typedef void (*LibHalDevicePropertyModified) (LibHalContext *ctx, 1692912Sartem const char *udi, 1702912Sartem const char *key, 1712912Sartem dbus_bool_t is_removed, 1722912Sartem dbus_bool_t is_added); 1732912Sartem 1742912Sartem /** 1752912Sartem * LibHalDeviceCondition: 1762912Sartem * @ctx: context for connection to hald 1772912Sartem * @udi: the Unique Device Id 1782912Sartem * @condition_name: name of the condition, e.g. ProcessorOverheating. Consult the HAL spec for details 1792912Sartem * @condition_detail: detail of condition 1802912Sartem * 1812912Sartem * Type for callback when a non-continuous condition occurs on a device. 1822912Sartem */ 1832912Sartem typedef void (*LibHalDeviceCondition) (LibHalContext *ctx, 1842912Sartem const char *udi, 1852912Sartem const char *condition_name, 1862912Sartem const char *condition_detail); 1872912Sartem 1882912Sartem 1892912Sartem /* Create a new context for a connection with hald */ 1902912Sartem LibHalContext *libhal_ctx_new (void); 1912912Sartem 1922912Sartem /* Enable or disable caching */ 1932912Sartem dbus_bool_t libhal_ctx_set_cache (LibHalContext *ctx, dbus_bool_t use_cache); 1942912Sartem 1952912Sartem /* Set DBus connection to use to talk to hald. */ 1962912Sartem dbus_bool_t libhal_ctx_set_dbus_connection (LibHalContext *ctx, DBusConnection *conn); 1972912Sartem 1982912Sartem /* Get DBus connection to use to talk to hald. */ 1992912Sartem DBusConnection *libhal_ctx_get_dbus_connection (LibHalContext *ctx); 2002912Sartem 2012912Sartem /* Set user data for the context */ 2022912Sartem dbus_bool_t libhal_ctx_set_user_data (LibHalContext *ctx, void *user_data); 2032912Sartem 2042912Sartem /* Get user data for the context */ 2052912Sartem void* libhal_ctx_get_user_data (LibHalContext *ctx); 2062912Sartem 2072912Sartem /* Set the callback for when a device is added */ 2082912Sartem dbus_bool_t libhal_ctx_set_device_added (LibHalContext *ctx, LibHalDeviceAdded callback); 2092912Sartem 2102912Sartem /* Set the callback for when a device is removed */ 2112912Sartem dbus_bool_t libhal_ctx_set_device_removed (LibHalContext *ctx, LibHalDeviceRemoved callback); 2122912Sartem 2132912Sartem /* Set the callback for when a device gains a new capability */ 2142912Sartem dbus_bool_t libhal_ctx_set_device_new_capability (LibHalContext *ctx, LibHalDeviceNewCapability callback); 2152912Sartem 2162912Sartem /* Set the callback for when a device loses a capability */ 2172912Sartem dbus_bool_t libhal_ctx_set_device_lost_capability (LibHalContext *ctx, LibHalDeviceLostCapability callback); 2182912Sartem 2192912Sartem /* Set the callback for when a property is modified on a device */ 2202912Sartem dbus_bool_t libhal_ctx_set_device_property_modified (LibHalContext *ctx, LibHalDevicePropertyModified callback); 2212912Sartem 2222912Sartem /* Set the callback for when a device emits a condition */ 2232912Sartem dbus_bool_t libhal_ctx_set_device_condition (LibHalContext *ctx, LibHalDeviceCondition callback); 2242912Sartem 2252912Sartem /* Initialize the connection to hald */ 2262912Sartem dbus_bool_t libhal_ctx_init (LibHalContext *ctx, DBusError *error); 2272912Sartem 2282912Sartem /* Shut down a connection to hald */ 2292912Sartem dbus_bool_t libhal_ctx_shutdown (LibHalContext *ctx, DBusError *error); 2302912Sartem 2312912Sartem /* Free a LibHalContext resource */ 2322912Sartem dbus_bool_t libhal_ctx_free (LibHalContext *ctx); 2332912Sartem 2342912Sartem /* Create an already initialized connection to hald */ 2352912Sartem LibHalContext *libhal_ctx_init_direct (DBusError *error); 2362912Sartem 2372912Sartem /* Get all devices in the Global Device List (GDL). */ 2382912Sartem char **libhal_get_all_devices (LibHalContext *ctx, int *num_devices, DBusError *error); 2392912Sartem 2402912Sartem /* Determine if a device exists. */ 2412912Sartem dbus_bool_t libhal_device_exists (LibHalContext *ctx, const char *udi, DBusError *error); 2422912Sartem 2432912Sartem /* Print a device to stdout; useful for debugging. */ 2442912Sartem dbus_bool_t libhal_device_print (LibHalContext *ctx, const char *udi, DBusError *error); 2452912Sartem 2462912Sartem /* Determine if a property on a device exists. */ 2472912Sartem dbus_bool_t libhal_device_property_exists (LibHalContext *ctx, 2482912Sartem const char *udi, 2492912Sartem const char *key, 2502912Sartem DBusError *error); 2512912Sartem 2522912Sartem /* Get the value of a property of type string. */ 2532912Sartem char *libhal_device_get_property_string (LibHalContext *ctx, 2542912Sartem const char *udi, 2552912Sartem const char *key, 2562912Sartem DBusError *error); 2572912Sartem 2582912Sartem /* Get the value of a property of type signed integer. */ 2592912Sartem dbus_int32_t libhal_device_get_property_int (LibHalContext *ctx, 2602912Sartem const char *udi, 2612912Sartem const char *key, 2622912Sartem DBusError *error); 2632912Sartem 2642912Sartem /* Get the value of a property of type unsigned integer. */ 2652912Sartem dbus_uint64_t libhal_device_get_property_uint64 (LibHalContext *ctx, 2662912Sartem const char *udi, 2672912Sartem const char *key, 2682912Sartem DBusError *error); 2692912Sartem 2702912Sartem /* Get the value of a property of type double. */ 2712912Sartem double libhal_device_get_property_double (LibHalContext *ctx, 2722912Sartem const char *udi, 2732912Sartem const char *key, 2742912Sartem DBusError *error); 2752912Sartem 2762912Sartem /* Get the value of a property of type bool. */ 2772912Sartem dbus_bool_t libhal_device_get_property_bool (LibHalContext *ctx, 2782912Sartem const char *udi, 2792912Sartem const char *key, 2802912Sartem DBusError *error); 2812912Sartem 2822912Sartem /* Get the value of a property of type string list. */ 2832912Sartem char **libhal_device_get_property_strlist (LibHalContext *ctx, 2842912Sartem const char *udi, 2852912Sartem const char *key, 2862912Sartem DBusError *error); 2872912Sartem 2882912Sartem /* Set a property of type string. */ 2892912Sartem dbus_bool_t libhal_device_set_property_string (LibHalContext *ctx, 2902912Sartem const char *udi, 2912912Sartem const char *key, 2922912Sartem const char *value, 2932912Sartem DBusError *error); 2942912Sartem 2952912Sartem /* Set a property of type signed integer. */ 2962912Sartem dbus_bool_t libhal_device_set_property_int (LibHalContext *ctx, 2972912Sartem const char *udi, 2982912Sartem const char *key, 2992912Sartem dbus_int32_t value, 3002912Sartem DBusError *error); 3012912Sartem 3022912Sartem /* Set a property of type unsigned integer. */ 3032912Sartem dbus_bool_t libhal_device_set_property_uint64 (LibHalContext *ctx, 3042912Sartem const char *udi, 3052912Sartem const char *key, 3062912Sartem dbus_uint64_t value, 3072912Sartem DBusError *error); 3082912Sartem 3092912Sartem /* Set a property of type double. */ 3102912Sartem dbus_bool_t libhal_device_set_property_double (LibHalContext *ctx, 3112912Sartem const char *udi, 3122912Sartem const char *key, 3132912Sartem double value, 3142912Sartem DBusError *error); 3152912Sartem 3162912Sartem /* Set a property of type bool. */ 3172912Sartem dbus_bool_t libhal_device_set_property_bool (LibHalContext *ctx, 3182912Sartem const char *udi, 3192912Sartem const char *key, 3202912Sartem dbus_bool_t value, 3212912Sartem DBusError *error); 3222912Sartem 3232912Sartem /* Append to a property of type strlist. */ 3242912Sartem dbus_bool_t libhal_device_property_strlist_append (LibHalContext *ctx, 3252912Sartem const char *udi, 3262912Sartem const char *key, 3272912Sartem const char *value, 3282912Sartem DBusError *error); 3292912Sartem 3302912Sartem /* Prepend to a property of type strlist. */ 3312912Sartem dbus_bool_t libhal_device_property_strlist_prepend (LibHalContext *ctx, 3322912Sartem const char *udi, 3332912Sartem const char *key, 3342912Sartem const char *value, 3352912Sartem DBusError *error); 3362912Sartem 3372912Sartem /* Remove a specified string from a property of type strlist. */ 3382912Sartem dbus_bool_t libhal_device_property_strlist_remove_index (LibHalContext *ctx, 3392912Sartem const char *udi, 3402912Sartem const char *key, 3412912Sartem unsigned int idx, 3422912Sartem DBusError *error); 3432912Sartem 3442912Sartem /* Remove a specified string from a property of type strlist. */ 3452912Sartem dbus_bool_t libhal_device_property_strlist_remove (LibHalContext *ctx, 3462912Sartem const char *udi, 3472912Sartem const char *key, 3482912Sartem const char *value, 3492912Sartem DBusError *error); 3502912Sartem 3512912Sartem /* Remove a property. */ 3522912Sartem dbus_bool_t libhal_device_remove_property (LibHalContext *ctx, 3532912Sartem const char *udi, 3542912Sartem const char *key, 3552912Sartem DBusError *error); 3562912Sartem 3572912Sartem /* Query a property type of a device. */ 3582912Sartem LibHalPropertyType libhal_device_get_property_type (LibHalContext *ctx, 3592912Sartem const char *udi, 3602912Sartem const char *key, 3612912Sartem DBusError *error); 3622912Sartem 3632912Sartem struct LibHalChangeSet_s; 3642912Sartem typedef struct LibHalChangeSet_s LibHalChangeSet; 3652912Sartem 3662912Sartem LibHalChangeSet *libhal_device_new_changeset (const char *udi); 3672912Sartem 3682912Sartem dbus_bool_t libhal_changeset_set_property_string (LibHalChangeSet *changeset, 3692912Sartem const char *key, 3702912Sartem const char *value); 3712912Sartem 3722912Sartem dbus_bool_t libhal_changeset_set_property_int (LibHalChangeSet *changeset, 3732912Sartem const char *key, 3742912Sartem dbus_int32_t value); 3752912Sartem 3762912Sartem dbus_bool_t libhal_changeset_set_property_uint64 (LibHalChangeSet *changeset, 3772912Sartem const char *key, 3782912Sartem dbus_uint64_t value); 3792912Sartem 3802912Sartem dbus_bool_t libhal_changeset_set_property_double (LibHalChangeSet *changeset, 3812912Sartem const char *key, 3822912Sartem double value); 3832912Sartem 3842912Sartem dbus_bool_t libhal_changeset_set_property_bool (LibHalChangeSet *changeset, 3852912Sartem const char *key, 3862912Sartem dbus_bool_t value); 3872912Sartem 3882912Sartem dbus_bool_t libhal_changeset_set_property_strlist (LibHalChangeSet *changeset, 3892912Sartem const char *key, 3902912Sartem const char **value); 3912912Sartem 3922912Sartem dbus_bool_t libhal_device_commit_changeset (LibHalContext *ctx, 3932912Sartem LibHalChangeSet *changeset, 3942912Sartem DBusError *error); 3952912Sartem 3962912Sartem void libhal_device_free_changeset (LibHalChangeSet *changeset); 3972912Sartem 3982912Sartem 3992912Sartem struct LibHalProperty_s; 4002912Sartem typedef struct LibHalProperty_s LibHalProperty; 4012912Sartem 4022912Sartem struct LibHalPropertySet_s; 4032912Sartem typedef struct LibHalPropertySet_s LibHalPropertySet; 4042912Sartem 4052912Sartem 4062912Sartem /* Retrieve all the properties on a device. */ 4072912Sartem LibHalPropertySet *libhal_device_get_all_properties (LibHalContext *ctx, 4082912Sartem const char *udi, 4092912Sartem DBusError *error); 4102912Sartem 4112912Sartem /* Free a property set earlier obtained with libhal_device_get_all_properties(). */ 4122912Sartem void libhal_free_property_set (LibHalPropertySet *set); 4132912Sartem 4142912Sartem /* Get the number of properties in a property set. */ 4152912Sartem unsigned int libhal_property_set_get_num_elems (LibHalPropertySet *set); 4162912Sartem 417*6293Sartem /* Get type of property. */ 418*6293Sartem LibHalPropertyType libhal_ps_get_type (const LibHalPropertySet *set, const char *key); 419*6293Sartem 420*6293Sartem /* Get the value of a property of type string. */ 421*6293Sartem const char *libhal_ps_get_string (const LibHalPropertySet *set, const char *key); 422*6293Sartem 423*6293Sartem /* Get the value of a property of type signed integer. */ 424*6293Sartem dbus_int32_t libhal_ps_get_int32 (const LibHalPropertySet *set, const char *key); 425*6293Sartem 426*6293Sartem /* Get the value of a property of type unsigned integer. */ 427*6293Sartem dbus_uint64_t libhal_ps_get_uint64 (const LibHalPropertySet *set, const char *key); 428*6293Sartem 429*6293Sartem /* Get the value of a property of type double. */ 430*6293Sartem double libhal_ps_get_double (const LibHalPropertySet *set, const char *key); 431*6293Sartem 432*6293Sartem /* Get the value of a property of type bool. */ 433*6293Sartem dbus_bool_t libhal_ps_get_bool (const LibHalPropertySet *set, const char *key); 434*6293Sartem 435*6293Sartem /* Get the value of a property of type string list. */ 436*6293Sartem const char * const *libhal_ps_get_strlist (const LibHalPropertySet *set, const char *key); 437*6293Sartem 438*6293Sartem 4392912Sartem /** 4402912Sartem * LibHalPropertySetIterator: 4412912Sartem * 4422912Sartem * Iterator for inspecting all properties. Do not access any members; 4432912Sartem * use the libhal_psi_* family of functions instead. 4442912Sartem */ 4452912Sartem struct LibHalPropertySetIterator_s { 4462912Sartem LibHalPropertySet *set; /**< Property set we are iterating over */ 4472912Sartem unsigned int idx; /**< Index into current element */ 4482912Sartem LibHalProperty *cur_prop; /**< Current property being visited */ 4492912Sartem void *reservered0; /**< Reserved for future use */ 4502912Sartem void *reservered1; /**< Reserved for future use */ 4512912Sartem }; 4522912Sartem 4532912Sartem 4542912Sartem typedef struct LibHalPropertySetIterator_s LibHalPropertySetIterator; 4552912Sartem 4562912Sartem /* Initialize a property set iterator. */ 4572912Sartem void libhal_psi_init (LibHalPropertySetIterator *iter, LibHalPropertySet *set); 4582912Sartem 4592912Sartem /* Determine whether there are more properties to iterate over */ 4602912Sartem dbus_bool_t libhal_psi_has_more (LibHalPropertySetIterator *iter); 4612912Sartem 4622912Sartem /* Advance iterator to next property. */ 4632912Sartem void libhal_psi_next (LibHalPropertySetIterator *iter); 4642912Sartem 4652912Sartem /* Get type of property. */ 4662912Sartem LibHalPropertyType libhal_psi_get_type (LibHalPropertySetIterator *iter); 4672912Sartem 4682912Sartem /* Get the key of a property. */ 4692912Sartem char *libhal_psi_get_key (LibHalPropertySetIterator *iter); 4702912Sartem 4712912Sartem /* Get the value of a property of type string. */ 4722912Sartem char *libhal_psi_get_string (LibHalPropertySetIterator *iter); 4732912Sartem 4742912Sartem /* Get the value of a property of type signed integer. */ 4752912Sartem dbus_int32_t libhal_psi_get_int (LibHalPropertySetIterator *iter); 4762912Sartem 4772912Sartem /* Get the value of a property of type unsigned integer. */ 4782912Sartem dbus_uint64_t libhal_psi_get_uint64 (LibHalPropertySetIterator *iter); 4792912Sartem 4802912Sartem /* Get the value of a property of type double. */ 4812912Sartem double libhal_psi_get_double (LibHalPropertySetIterator *iter); 4822912Sartem 4832912Sartem /* Get the value of a property of type bool. */ 4842912Sartem dbus_bool_t libhal_psi_get_bool (LibHalPropertySetIterator *iter); 4852912Sartem 4862912Sartem /* Get the value of a property of type string list. */ 4872912Sartem char **libhal_psi_get_strlist (LibHalPropertySetIterator *iter); 4882912Sartem 4892912Sartem /* Get the length of an array of strings */ 4902912Sartem unsigned int libhal_string_array_length (char **str_array); 4912912Sartem 4922912Sartem /* Frees a NULL-terminated array of strings. If passed NULL, does nothing. */ 4932912Sartem void libhal_free_string_array (char **str_array); 4942912Sartem 4952912Sartem /* Frees a nul-terminated string */ 4962912Sartem void libhal_free_string (char *str); 4972912Sartem 4982912Sartem /* Create a new device object which will be hidden from applications 4992912Sartem * until the CommitToGdl(), ie. libhal_device_commit_to_gdl(), method is called. 5002912Sartem */ 5012912Sartem char *libhal_new_device (LibHalContext *ctx, DBusError *error); 5022912Sartem 5032912Sartem /* When a hidden device has been built using the NewDevice method, ie. 5042912Sartem * libhal_new_device(), and the org.freedesktop.Hal.Device interface 5052912Sartem * this function will commit it to the global device list. 5062912Sartem */ 5072912Sartem dbus_bool_t libhal_device_commit_to_gdl (LibHalContext *ctx, 5082912Sartem const char *temp_udi, 5092912Sartem const char *udi, 5102912Sartem DBusError *error); 5112912Sartem 5122912Sartem /* This method can be invoked when a device is removed. The HAL daemon 5132912Sartem * will shut down the device. Note that the device may still be in the device 5142912Sartem * list if the Persistent property is set to true. 5152912Sartem */ 5162912Sartem dbus_bool_t libhal_remove_device (LibHalContext *ctx, 5172912Sartem const char *udi, 5182912Sartem DBusError *error); 5192912Sartem 5202912Sartem /* Merge properties from one device to another. */ 5212912Sartem dbus_bool_t libhal_merge_properties (LibHalContext *ctx, 5222912Sartem const char *target_udi, 5232912Sartem const char *source_udi, 5242912Sartem DBusError *error); 5252912Sartem 5262912Sartem /* Check a set of properties for two devices matches. */ 5272912Sartem dbus_bool_t libhal_device_matches (LibHalContext *ctx, 5282912Sartem const char *udi1, 5292912Sartem const char *udi2, 5302912Sartem const char *property_namespace, 5312912Sartem DBusError *error); 5322912Sartem 5332912Sartem /* Find a device in the GDL where a single string property matches a 5342912Sartem * given value. 5352912Sartem */ 5362912Sartem char **libhal_manager_find_device_string_match (LibHalContext *ctx, 5372912Sartem const char *key, 5382912Sartem const char *value, 5392912Sartem int *num_devices, 5402912Sartem DBusError *error); 5412912Sartem 5422912Sartem /* Assign a capability to a device. */ 5432912Sartem dbus_bool_t libhal_device_add_capability (LibHalContext *ctx, 5442912Sartem const char *udi, 5452912Sartem const char *capability, 5462912Sartem DBusError *error); 5472912Sartem 5482912Sartem /* Check if a device has a capability. The result is undefined if the 5492912Sartem * device doesn't exist. 5502912Sartem */ 5512912Sartem dbus_bool_t libhal_device_query_capability (LibHalContext *ctx, 5522912Sartem const char *udi, 5532912Sartem const char *capability, 5542912Sartem DBusError *error); 5552912Sartem 5562912Sartem /* Find devices with a given capability. */ 5572912Sartem char **libhal_find_device_by_capability (LibHalContext *ctx, 5582912Sartem const char *capability, 5592912Sartem int *num_devices, 5602912Sartem DBusError *error); 5612912Sartem 5622912Sartem /* Watch all devices, ie. the device_property_changed callback is 5632912Sartem * invoked when the properties on any device changes. 5642912Sartem */ 5652912Sartem dbus_bool_t libhal_device_property_watch_all (LibHalContext *ctx, 5662912Sartem DBusError *error); 5672912Sartem 5682912Sartem /* Add a watch on a device, so the device_property_changed callback is 5692912Sartem * invoked when the properties on the given device changes. 5702912Sartem */ 5712912Sartem dbus_bool_t libhal_device_add_property_watch (LibHalContext *ctx, 5722912Sartem const char *udi, 5732912Sartem DBusError *error); 5742912Sartem 5752912Sartem /* Remove a watch on a device */ 5762912Sartem dbus_bool_t libhal_device_remove_property_watch (LibHalContext *ctx, 5772912Sartem const char *udi, 5782912Sartem DBusError *error); 5792912Sartem 5802912Sartem /* Take an advisory lock on the device. */ 5812912Sartem dbus_bool_t libhal_device_lock (LibHalContext *ctx, 5822912Sartem const char *udi, 5832912Sartem const char *reason_to_lock, 5842912Sartem char **reason_why_locked, 5852912Sartem DBusError *error); 5862912Sartem 5872912Sartem /* Release an advisory lock on the device. */ 5882912Sartem dbus_bool_t libhal_device_unlock (LibHalContext *ctx, 5892912Sartem const char *udi, 5902912Sartem DBusError *error); 5912912Sartem 5922912Sartem dbus_bool_t libhal_device_rescan (LibHalContext *ctx, 5932912Sartem const char *udi, 5942912Sartem DBusError *error); 5952912Sartem 5962912Sartem dbus_bool_t libhal_device_reprobe (LibHalContext *ctx, 5972912Sartem const char *udi, 5982912Sartem DBusError *error); 5992912Sartem 6002912Sartem /* Emit a condition from a device (for hald helpers only) */ 6012912Sartem dbus_bool_t libhal_device_emit_condition (LibHalContext *ctx, 6022912Sartem const char *udi, 6032912Sartem const char *condition_name, 6042912Sartem const char *condition_details, 6052912Sartem DBusError *error); 6062912Sartem 6072912Sartem /* Claim an interface for a device (for hald helpers only) */ 6082912Sartem dbus_bool_t libhal_device_claim_interface (LibHalContext *ctx, 6092912Sartem const char *udi, 6102912Sartem const char *interface_name, 6112912Sartem const char *introspection_xml, 6122912Sartem DBusError *error); 6132912Sartem 6142912Sartem /* hald waits for all addons to call this function before announcing the addon (for hald helpers only) */ 6152912Sartem dbus_bool_t libhal_device_addon_is_ready (LibHalContext *ctx, const char *udi, DBusError *error); 6162912Sartem 6172912Sartem 6182912Sartem #if defined(__cplusplus) 6192912Sartem } 6202912Sartem #endif 6212912Sartem 6222912Sartem #endif /* LIBHAL_H */ 623