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