1*2912Sartem /***************************************************************************
2*2912Sartem  * CVSID: $Id$
3*2912Sartem  *
4*2912Sartem  * libhal.h : HAL daemon C convenience library headers
5*2912Sartem  *
6*2912Sartem  * Copyright (C) 2003 David Zeuthen, <david@fubar.dk>
7*2912Sartem  *
8*2912Sartem  * Licensed under the Academic Free License version 2.1
9*2912Sartem  *
10*2912Sartem  * This program is free software; you can redistribute it and/or modify
11*2912Sartem  * it under the terms of the GNU General Public License as published by
12*2912Sartem  * the Free Software Foundation; either version 2 of the License, or
13*2912Sartem  * (at your option) any later version.
14*2912Sartem  *
15*2912Sartem  * This program is distributed in the hope that it will be useful,
16*2912Sartem  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*2912Sartem  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*2912Sartem  * GNU General Public License for more details.
19*2912Sartem  *
20*2912Sartem  * You should have received a copy of the GNU General Public License
21*2912Sartem  * along with this program; if not, write to the Free Software
22*2912Sartem  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
23*2912Sartem  *
24*2912Sartem  **************************************************************************/
25*2912Sartem 
26*2912Sartem #ifndef LIBHAL_H
27*2912Sartem #define LIBHAL_H
28*2912Sartem 
29*2912Sartem #include <dbus/dbus.h>
30*2912Sartem 
31*2912Sartem #if defined(__cplusplus)
32*2912Sartem extern "C" {
33*2912Sartem #if 0
34*2912Sartem } /* shut up emacs indenting */
35*2912Sartem #endif
36*2912Sartem #endif
37*2912Sartem 
38*2912Sartem #if defined(__GNUC__)
39*2912Sartem #define LIBHAL_DEPRECATED __attribute__ ((deprecated))
40*2912Sartem #else
41*2912Sartem #define LIBHAL_DEPRECATED
42*2912Sartem #endif
43*2912Sartem 
44*2912Sartem 
45*2912Sartem #define LIBHAL_FREE_DBUS_ERROR(_dbus_error_)					\
46*2912Sartem 	do {									\
47*2912Sartem 		if (dbus_error_is_set(_dbus_error_))				\
48*2912Sartem 			dbus_error_free (_dbus_error_);				\
49*2912Sartem 		else								\
50*2912Sartem 			fprintf (stderr,					\
51*2912Sartem 				 "%s %d : INFO: called LIBHAL_FREE_DBUS_ERROR "	\
52*2912Sartem 				 "but dbusError was not set.\n", 		\
53*2912Sartem 				 __FILE__, __LINE__);				\
54*2912Sartem 	} while (0)
55*2912Sartem 
56*2912Sartem 
57*2912Sartem /**
58*2912Sartem  * LIBHAL_CHECK_LIBHALCONTEXT:
59*2912Sartem  * @_ctx_: the context
60*2912Sartem  * @_ret_: what to use for return value if context is invalid
61*2912Sartem  *
62*2912Sartem  * Handy macro for checking whether a context is valid.
63*2912Sartem  */
64*2912Sartem #define LIBHAL_CHECK_LIBHALCONTEXT(_ctx_, _ret_)				\
65*2912Sartem 	do {									\
66*2912Sartem 		if (_ctx_ == NULL) {						\
67*2912Sartem 			fprintf (stderr,					\
68*2912Sartem 				 "%s %d : LibHalContext *ctx is NULL\n", 	\
69*2912Sartem 				 __FILE__, __LINE__);				\
70*2912Sartem 			return _ret_;						\
71*2912Sartem 		}								\
72*2912Sartem 	} while(0)
73*2912Sartem 
74*2912Sartem /**
75*2912Sartem  * LibHalPropertyType:
76*2912Sartem  *
77*2912Sartem  * Possible types for properties on hal device objects
78*2912Sartem  */
79*2912Sartem typedef enum {
80*2912Sartem         /** Used to report error condition */
81*2912Sartem 	LIBHAL_PROPERTY_TYPE_INVALID =    DBUS_TYPE_INVALID,
82*2912Sartem 
83*2912Sartem 	/** Type for 32-bit signed integer property */
84*2912Sartem 	LIBHAL_PROPERTY_TYPE_INT32   =    DBUS_TYPE_INT32,
85*2912Sartem 
86*2912Sartem 	/** Type for 64-bit unsigned integer property */
87*2912Sartem 	LIBHAL_PROPERTY_TYPE_UINT64  =    DBUS_TYPE_UINT64,
88*2912Sartem 
89*2912Sartem 	/** Type for double precision floating point property */
90*2912Sartem 	LIBHAL_PROPERTY_TYPE_DOUBLE  =    DBUS_TYPE_DOUBLE,
91*2912Sartem 
92*2912Sartem 	/** Type for boolean property */
93*2912Sartem 	LIBHAL_PROPERTY_TYPE_BOOLEAN =    DBUS_TYPE_BOOLEAN,
94*2912Sartem 
95*2912Sartem 	/** Type for UTF-8 string property */
96*2912Sartem 	LIBHAL_PROPERTY_TYPE_STRING  =    DBUS_TYPE_STRING,
97*2912Sartem 
98*2912Sartem 	/** Type for list of UTF-8 strings property */
99*2912Sartem 	LIBHAL_PROPERTY_TYPE_STRLIST =    ((int) (DBUS_TYPE_STRING<<8)+('l'))
100*2912Sartem } LibHalPropertyType;
101*2912Sartem 
102*2912Sartem 
103*2912Sartem typedef struct LibHalContext_s LibHalContext;
104*2912Sartem 
105*2912Sartem /**
106*2912Sartem  * LibHalIntegrateDBusIntoMainLoop:
107*2912Sartem  * @ctx: context for connection to hald
108*2912Sartem  * @dbus_connection: DBus connection to use in ctx
109*2912Sartem  *
110*2912Sartem  * Type for function in application code that integrates a
111*2912Sartem  * DBusConnection object into its own mainloop.
112*2912Sartem  */
113*2912Sartem typedef void (*LibHalIntegrateDBusIntoMainLoop) (LibHalContext *ctx,
114*2912Sartem 						 DBusConnection *dbus_connection);
115*2912Sartem 
116*2912Sartem /**
117*2912Sartem  * LibHalDeviceAdded:
118*2912Sartem  * @ctx: context for connection to hald
119*2912Sartem  * @udi: the Unique Device Id
120*2912Sartem  *
121*2912Sartem  * Type for callback when a device is added.
122*2912Sartem  */
123*2912Sartem typedef void (*LibHalDeviceAdded) (LibHalContext *ctx,
124*2912Sartem 				   const char *udi);
125*2912Sartem 
126*2912Sartem /**
127*2912Sartem  * LibHalDeviceRemoved:
128*2912Sartem  * @ctx: context for connection to hald
129*2912Sartem  * @udi: the Unique Device Id
130*2912Sartem  *
131*2912Sartem  * Type for callback when a device is removed.
132*2912Sartem  */
133*2912Sartem typedef void (*LibHalDeviceRemoved) (LibHalContext *ctx,
134*2912Sartem 				     const char *udi);
135*2912Sartem 
136*2912Sartem /**
137*2912Sartem  * LibHalDeviceNewCapability:
138*2912Sartem  * @ctx: context for connection to hald
139*2912Sartem  * @udi: the Unique Device Id
140*2912Sartem  * @capability: capability of the device
141*2912Sartem  *
142*2912Sartem  * Type for callback when a device gains a new capability.
143*2912Sartem  *
144*2912Sartem  */
145*2912Sartem typedef void (*LibHalDeviceNewCapability) (LibHalContext *ctx,
146*2912Sartem 					   const char *udi,
147*2912Sartem 					   const char *capability);
148*2912Sartem 
149*2912Sartem /**
150*2912Sartem  * LibHalDeviceLostCapability:
151*2912Sartem  * @ctx: context for connection to hald
152*2912Sartem  * @udi: the Unique Device Id
153*2912Sartem  * @capability: capability of the device
154*2912Sartem  *
155*2912Sartem  * Type for callback when a device loses a capability.
156*2912Sartem  *
157*2912Sartem  */
158*2912Sartem typedef void (*LibHalDeviceLostCapability) (LibHalContext *ctx,
159*2912Sartem 					    const char *udi,
160*2912Sartem 					    const char *capability);
161*2912Sartem 
162*2912Sartem /**
163*2912Sartem  * LibHalDevicePropertyModified:
164*2912Sartem  * @ctx: context for connection to hald
165*2912Sartem  * @udi: the Unique Device Id
166*2912Sartem  * @key: name of the property that has changed
167*2912Sartem  * @is_removed: whether or not property was removed
168*2912Sartem  * @is_added: whether or not property was added
169*2912Sartem  *
170*2912Sartem  * Type for callback when a property of a device changes.
171*2912Sartem  */
172*2912Sartem typedef void (*LibHalDevicePropertyModified) (LibHalContext *ctx,
173*2912Sartem 					      const char *udi,
174*2912Sartem 					      const char *key,
175*2912Sartem 					      dbus_bool_t is_removed,
176*2912Sartem 					      dbus_bool_t is_added);
177*2912Sartem 
178*2912Sartem /**
179*2912Sartem  * LibHalDeviceCondition:
180*2912Sartem  * @ctx: context for connection to hald
181*2912Sartem  * @udi: the Unique Device Id
182*2912Sartem  * @condition_name: name of the condition, e.g. ProcessorOverheating. Consult the HAL spec for details
183*2912Sartem  * @condition_detail: detail of condition
184*2912Sartem  *
185*2912Sartem  * Type for callback when a non-continuous condition occurs on a device.
186*2912Sartem  */
187*2912Sartem typedef void (*LibHalDeviceCondition) (LibHalContext *ctx,
188*2912Sartem 				       const char *udi,
189*2912Sartem 				       const char *condition_name,
190*2912Sartem 				       const char *condition_detail);
191*2912Sartem 
192*2912Sartem 
193*2912Sartem /* Create a new context for a connection with hald */
194*2912Sartem LibHalContext *libhal_ctx_new                          (void);
195*2912Sartem 
196*2912Sartem /* Enable or disable caching */
197*2912Sartem dbus_bool_t    libhal_ctx_set_cache                    (LibHalContext *ctx, dbus_bool_t use_cache);
198*2912Sartem 
199*2912Sartem /* Set DBus connection to use to talk to hald. */
200*2912Sartem dbus_bool_t    libhal_ctx_set_dbus_connection          (LibHalContext *ctx, DBusConnection *conn);
201*2912Sartem 
202*2912Sartem /* Get DBus connection to use to talk to hald. */
203*2912Sartem DBusConnection *libhal_ctx_get_dbus_connection          (LibHalContext *ctx);
204*2912Sartem 
205*2912Sartem /* Set user data for the context */
206*2912Sartem dbus_bool_t    libhal_ctx_set_user_data                (LibHalContext *ctx, void *user_data);
207*2912Sartem 
208*2912Sartem /* Get user data for the context */
209*2912Sartem void*          libhal_ctx_get_user_data                (LibHalContext *ctx);
210*2912Sartem 
211*2912Sartem /* Set the callback for when a device is added */
212*2912Sartem dbus_bool_t    libhal_ctx_set_device_added             (LibHalContext *ctx, LibHalDeviceAdded callback);
213*2912Sartem 
214*2912Sartem /* Set the callback for when a device is removed */
215*2912Sartem dbus_bool_t    libhal_ctx_set_device_removed           (LibHalContext *ctx, LibHalDeviceRemoved callback);
216*2912Sartem 
217*2912Sartem /* Set the callback for when a device gains a new capability */
218*2912Sartem dbus_bool_t    libhal_ctx_set_device_new_capability    (LibHalContext *ctx, LibHalDeviceNewCapability callback);
219*2912Sartem 
220*2912Sartem /* Set the callback for when a device loses a capability */
221*2912Sartem dbus_bool_t    libhal_ctx_set_device_lost_capability   (LibHalContext *ctx, LibHalDeviceLostCapability callback);
222*2912Sartem 
223*2912Sartem /* Set the callback for when a property is modified on a device */
224*2912Sartem dbus_bool_t    libhal_ctx_set_device_property_modified (LibHalContext *ctx, LibHalDevicePropertyModified callback);
225*2912Sartem 
226*2912Sartem /* Set the callback for when a device emits a condition */
227*2912Sartem dbus_bool_t    libhal_ctx_set_device_condition         (LibHalContext *ctx, LibHalDeviceCondition callback);
228*2912Sartem 
229*2912Sartem /* Initialize the connection to hald */
230*2912Sartem dbus_bool_t    libhal_ctx_init                         (LibHalContext *ctx, DBusError *error);
231*2912Sartem 
232*2912Sartem /* Shut down a connection to hald */
233*2912Sartem dbus_bool_t    libhal_ctx_shutdown                     (LibHalContext *ctx, DBusError *error);
234*2912Sartem 
235*2912Sartem /* Free a LibHalContext resource */
236*2912Sartem dbus_bool_t    libhal_ctx_free                         (LibHalContext *ctx);
237*2912Sartem 
238*2912Sartem /* Create an already initialized connection to hald */
239*2912Sartem LibHalContext *libhal_ctx_init_direct                  (DBusError *error);
240*2912Sartem 
241*2912Sartem /* Get all devices in the Global Device List (GDL). */
242*2912Sartem char        **libhal_get_all_devices (LibHalContext *ctx, int *num_devices, DBusError *error);
243*2912Sartem 
244*2912Sartem /* Determine if a device exists. */
245*2912Sartem dbus_bool_t   libhal_device_exists   (LibHalContext *ctx, const char *udi,  DBusError *error);
246*2912Sartem 
247*2912Sartem /* Print a device to stdout; useful for debugging. */
248*2912Sartem dbus_bool_t   libhal_device_print    (LibHalContext *ctx, const char *udi,  DBusError *error);
249*2912Sartem 
250*2912Sartem /* Determine if a property on a device exists. */
251*2912Sartem dbus_bool_t libhal_device_property_exists (LibHalContext *ctx,
252*2912Sartem 					   const char *udi,
253*2912Sartem 					   const char *key,
254*2912Sartem 					   DBusError *error);
255*2912Sartem 
256*2912Sartem /* Get the value of a property of type string. */
257*2912Sartem char *libhal_device_get_property_string (LibHalContext *ctx,
258*2912Sartem 					 const char *udi,
259*2912Sartem 					 const char *key,
260*2912Sartem 					 DBusError *error);
261*2912Sartem 
262*2912Sartem /* Get the value of a property of type signed integer. */
263*2912Sartem dbus_int32_t libhal_device_get_property_int (LibHalContext *ctx,
264*2912Sartem 					     const char *udi,
265*2912Sartem 					     const char *key,
266*2912Sartem 					     DBusError *error);
267*2912Sartem 
268*2912Sartem /* Get the value of a property of type unsigned integer. */
269*2912Sartem dbus_uint64_t libhal_device_get_property_uint64 (LibHalContext *ctx,
270*2912Sartem 						 const char *udi,
271*2912Sartem 						 const char *key,
272*2912Sartem 						 DBusError *error);
273*2912Sartem 
274*2912Sartem /* Get the value of a property of type double. */
275*2912Sartem double libhal_device_get_property_double (LibHalContext *ctx,
276*2912Sartem 					  const char *udi,
277*2912Sartem 					  const char *key,
278*2912Sartem 					  DBusError *error);
279*2912Sartem 
280*2912Sartem /* Get the value of a property of type bool. */
281*2912Sartem dbus_bool_t libhal_device_get_property_bool (LibHalContext *ctx,
282*2912Sartem 					     const char *udi,
283*2912Sartem 					     const char *key,
284*2912Sartem 					     DBusError *error);
285*2912Sartem 
286*2912Sartem /* Get the value of a property of type string list. */
287*2912Sartem char **libhal_device_get_property_strlist (LibHalContext *ctx,
288*2912Sartem 					   const char *udi,
289*2912Sartem 					   const char *key,
290*2912Sartem 					   DBusError *error);
291*2912Sartem 
292*2912Sartem /* Set a property of type string. */
293*2912Sartem dbus_bool_t libhal_device_set_property_string (LibHalContext *ctx,
294*2912Sartem 					       const char *udi,
295*2912Sartem 					       const char *key,
296*2912Sartem 					       const char *value,
297*2912Sartem 					       DBusError *error);
298*2912Sartem 
299*2912Sartem /* Set a property of type signed integer. */
300*2912Sartem dbus_bool_t libhal_device_set_property_int (LibHalContext *ctx,
301*2912Sartem 					    const char *udi,
302*2912Sartem 					    const char *key,
303*2912Sartem 					    dbus_int32_t value,
304*2912Sartem 					    DBusError *error);
305*2912Sartem 
306*2912Sartem /* Set a property of type unsigned integer. */
307*2912Sartem dbus_bool_t libhal_device_set_property_uint64 (LibHalContext *ctx,
308*2912Sartem 					       const char *udi,
309*2912Sartem 					       const char *key,
310*2912Sartem 					       dbus_uint64_t value,
311*2912Sartem 					       DBusError *error);
312*2912Sartem 
313*2912Sartem /* Set a property of type double. */
314*2912Sartem dbus_bool_t libhal_device_set_property_double (LibHalContext *ctx,
315*2912Sartem 					       const char *udi,
316*2912Sartem 					       const char *key,
317*2912Sartem 					       double value,
318*2912Sartem 					       DBusError *error);
319*2912Sartem 
320*2912Sartem /* Set a property of type bool. */
321*2912Sartem dbus_bool_t libhal_device_set_property_bool (LibHalContext *ctx,
322*2912Sartem 					     const char *udi,
323*2912Sartem 					     const char *key,
324*2912Sartem 					     dbus_bool_t value,
325*2912Sartem 					     DBusError *error);
326*2912Sartem 
327*2912Sartem /* Append to a property of type strlist. */
328*2912Sartem dbus_bool_t libhal_device_property_strlist_append (LibHalContext *ctx,
329*2912Sartem 						   const char *udi,
330*2912Sartem 						   const char *key,
331*2912Sartem 						   const char *value,
332*2912Sartem 						   DBusError *error);
333*2912Sartem 
334*2912Sartem /* Prepend to a property of type strlist. */
335*2912Sartem dbus_bool_t libhal_device_property_strlist_prepend (LibHalContext *ctx,
336*2912Sartem 						    const char *udi,
337*2912Sartem 						    const char *key,
338*2912Sartem 						    const char *value,
339*2912Sartem 						    DBusError *error);
340*2912Sartem 
341*2912Sartem /* Remove a specified string from a property of type strlist. */
342*2912Sartem dbus_bool_t libhal_device_property_strlist_remove_index (LibHalContext *ctx,
343*2912Sartem 							 const char *udi,
344*2912Sartem 							 const char *key,
345*2912Sartem 							 unsigned int idx,
346*2912Sartem 							 DBusError *error);
347*2912Sartem 
348*2912Sartem /* Remove a specified string from a property of type strlist. */
349*2912Sartem dbus_bool_t libhal_device_property_strlist_remove (LibHalContext *ctx,
350*2912Sartem 						   const char *udi,
351*2912Sartem 						   const char *key,
352*2912Sartem 						   const char *value,
353*2912Sartem 						   DBusError *error);
354*2912Sartem 
355*2912Sartem /* Remove a property. */
356*2912Sartem dbus_bool_t libhal_device_remove_property (LibHalContext *ctx,
357*2912Sartem 					   const char *udi,
358*2912Sartem 					   const char *key,
359*2912Sartem 					   DBusError *error);
360*2912Sartem 
361*2912Sartem /* Query a property type of a device. */
362*2912Sartem LibHalPropertyType libhal_device_get_property_type (LibHalContext *ctx,
363*2912Sartem 						    const char *udi,
364*2912Sartem 						    const char *key,
365*2912Sartem 						    DBusError *error);
366*2912Sartem 
367*2912Sartem struct LibHalChangeSet_s;
368*2912Sartem typedef struct LibHalChangeSet_s LibHalChangeSet;
369*2912Sartem 
370*2912Sartem LibHalChangeSet *libhal_device_new_changeset (const char *udi);
371*2912Sartem 
372*2912Sartem dbus_bool_t libhal_changeset_set_property_string (LibHalChangeSet *changeset,
373*2912Sartem 						  const char *key,
374*2912Sartem 						  const char *value);
375*2912Sartem 
376*2912Sartem dbus_bool_t libhal_changeset_set_property_int (LibHalChangeSet *changeset,
377*2912Sartem 					       const char *key,
378*2912Sartem 					       dbus_int32_t value);
379*2912Sartem 
380*2912Sartem dbus_bool_t libhal_changeset_set_property_uint64 (LibHalChangeSet *changeset,
381*2912Sartem 						  const char *key,
382*2912Sartem 						  dbus_uint64_t value);
383*2912Sartem 
384*2912Sartem dbus_bool_t libhal_changeset_set_property_double (LibHalChangeSet *changeset,
385*2912Sartem 						  const char *key,
386*2912Sartem 						  double value);
387*2912Sartem 
388*2912Sartem dbus_bool_t libhal_changeset_set_property_bool (LibHalChangeSet *changeset,
389*2912Sartem 						const char *key,
390*2912Sartem 						dbus_bool_t value);
391*2912Sartem 
392*2912Sartem dbus_bool_t libhal_changeset_set_property_strlist (LibHalChangeSet *changeset,
393*2912Sartem 						   const char *key,
394*2912Sartem 						   const char **value);
395*2912Sartem 
396*2912Sartem dbus_bool_t libhal_device_commit_changeset (LibHalContext *ctx,
397*2912Sartem 					    LibHalChangeSet *changeset,
398*2912Sartem 					    DBusError *error);
399*2912Sartem 
400*2912Sartem void libhal_device_free_changeset (LibHalChangeSet *changeset);
401*2912Sartem 
402*2912Sartem 
403*2912Sartem struct LibHalProperty_s;
404*2912Sartem typedef struct LibHalProperty_s LibHalProperty;
405*2912Sartem 
406*2912Sartem struct LibHalPropertySet_s;
407*2912Sartem typedef struct LibHalPropertySet_s LibHalPropertySet;
408*2912Sartem 
409*2912Sartem 
410*2912Sartem /* Retrieve all the properties on a device. */
411*2912Sartem LibHalPropertySet *libhal_device_get_all_properties (LibHalContext *ctx,
412*2912Sartem 						     const char *udi,
413*2912Sartem 						     DBusError *error);
414*2912Sartem 
415*2912Sartem /* Free a property set earlier obtained with libhal_device_get_all_properties(). */
416*2912Sartem void libhal_free_property_set (LibHalPropertySet *set);
417*2912Sartem 
418*2912Sartem /* Get the number of properties in a property set. */
419*2912Sartem unsigned int libhal_property_set_get_num_elems (LibHalPropertySet *set);
420*2912Sartem 
421*2912Sartem /**
422*2912Sartem  * LibHalPropertySetIterator:
423*2912Sartem  *
424*2912Sartem  * Iterator for inspecting all properties. Do not access any members;
425*2912Sartem  * use the libhal_psi_* family of functions instead.
426*2912Sartem  */
427*2912Sartem struct LibHalPropertySetIterator_s {
428*2912Sartem 	LibHalPropertySet *set;    /**< Property set we are iterating over */
429*2912Sartem 	unsigned int idx;          /**< Index into current element */
430*2912Sartem 	LibHalProperty *cur_prop;  /**< Current property being visited */
431*2912Sartem 	void *reservered0;         /**< Reserved for future use */
432*2912Sartem 	void *reservered1;         /**< Reserved for future use */
433*2912Sartem };
434*2912Sartem 
435*2912Sartem 
436*2912Sartem typedef struct LibHalPropertySetIterator_s LibHalPropertySetIterator;
437*2912Sartem 
438*2912Sartem /* Initialize a property set iterator. */
439*2912Sartem void libhal_psi_init (LibHalPropertySetIterator *iter, LibHalPropertySet *set);
440*2912Sartem 
441*2912Sartem /* Determine whether there are more properties to iterate over */
442*2912Sartem dbus_bool_t libhal_psi_has_more (LibHalPropertySetIterator *iter);
443*2912Sartem 
444*2912Sartem /* Advance iterator to next property. */
445*2912Sartem void libhal_psi_next (LibHalPropertySetIterator *iter);
446*2912Sartem 
447*2912Sartem /* Get type of property. */
448*2912Sartem LibHalPropertyType libhal_psi_get_type (LibHalPropertySetIterator *iter);
449*2912Sartem 
450*2912Sartem /* Get the key of a property. */
451*2912Sartem char *libhal_psi_get_key (LibHalPropertySetIterator *iter);
452*2912Sartem 
453*2912Sartem /* Get the value of a property of type string. */
454*2912Sartem char *libhal_psi_get_string (LibHalPropertySetIterator *iter);
455*2912Sartem 
456*2912Sartem /* Get the value of a property of type signed integer. */
457*2912Sartem dbus_int32_t libhal_psi_get_int (LibHalPropertySetIterator *iter);
458*2912Sartem 
459*2912Sartem /* Get the value of a property of type unsigned integer. */
460*2912Sartem dbus_uint64_t libhal_psi_get_uint64 (LibHalPropertySetIterator *iter);
461*2912Sartem 
462*2912Sartem /* Get the value of a property of type double. */
463*2912Sartem double libhal_psi_get_double (LibHalPropertySetIterator *iter);
464*2912Sartem 
465*2912Sartem /* Get the value of a property of type bool. */
466*2912Sartem dbus_bool_t libhal_psi_get_bool (LibHalPropertySetIterator *iter);
467*2912Sartem 
468*2912Sartem /* Get the value of a property of type string list. */
469*2912Sartem char **libhal_psi_get_strlist (LibHalPropertySetIterator *iter);
470*2912Sartem 
471*2912Sartem /* Get the length of an array of strings */
472*2912Sartem unsigned int libhal_string_array_length (char **str_array);
473*2912Sartem 
474*2912Sartem /* Frees a NULL-terminated array of strings. If passed NULL, does nothing. */
475*2912Sartem void libhal_free_string_array (char **str_array);
476*2912Sartem 
477*2912Sartem /* Frees a nul-terminated string */
478*2912Sartem void libhal_free_string (char *str);
479*2912Sartem 
480*2912Sartem /* Create a new device object which will be hidden from applications
481*2912Sartem  * until the CommitToGdl(), ie. libhal_device_commit_to_gdl(), method is called.
482*2912Sartem  */
483*2912Sartem char *libhal_new_device (LibHalContext *ctx, DBusError *error);
484*2912Sartem 
485*2912Sartem /* When a hidden device has been built using the NewDevice method, ie.
486*2912Sartem  * libhal_new_device(), and the org.freedesktop.Hal.Device interface
487*2912Sartem  * this function will commit it to the global device list.
488*2912Sartem  */
489*2912Sartem dbus_bool_t libhal_device_commit_to_gdl (LibHalContext *ctx,
490*2912Sartem 					 const char *temp_udi,
491*2912Sartem 					 const char *udi,
492*2912Sartem 					 DBusError *error);
493*2912Sartem 
494*2912Sartem /* This method can be invoked when a device is removed. The HAL daemon
495*2912Sartem  * will shut down the device. Note that the device may still be in the device
496*2912Sartem  * list if the Persistent property is set to true.
497*2912Sartem  */
498*2912Sartem dbus_bool_t libhal_remove_device (LibHalContext *ctx,
499*2912Sartem 					const char *udi,
500*2912Sartem 					DBusError *error);
501*2912Sartem 
502*2912Sartem /* Merge properties from one device to another. */
503*2912Sartem dbus_bool_t libhal_merge_properties (LibHalContext *ctx,
504*2912Sartem 					   const char *target_udi,
505*2912Sartem 					   const char *source_udi,
506*2912Sartem 					   DBusError *error);
507*2912Sartem 
508*2912Sartem /* Check a set of properties for two devices matches. */
509*2912Sartem dbus_bool_t libhal_device_matches (LibHalContext *ctx,
510*2912Sartem 					 const char *udi1,
511*2912Sartem 					 const char *udi2,
512*2912Sartem 					 const char *property_namespace,
513*2912Sartem 					 DBusError *error);
514*2912Sartem 
515*2912Sartem /* Find a device in the GDL where a single string property matches a
516*2912Sartem  * given value.
517*2912Sartem  */
518*2912Sartem char **libhal_manager_find_device_string_match (LibHalContext *ctx,
519*2912Sartem 						const char *key,
520*2912Sartem 						const char *value,
521*2912Sartem 						int *num_devices,
522*2912Sartem 						DBusError *error);
523*2912Sartem 
524*2912Sartem /* Assign a capability to a device. */
525*2912Sartem dbus_bool_t libhal_device_add_capability (LibHalContext *ctx,
526*2912Sartem 					  const char *udi,
527*2912Sartem 					  const char *capability,
528*2912Sartem 					  DBusError *error);
529*2912Sartem 
530*2912Sartem /* Check if a device has a capability. The result is undefined if the
531*2912Sartem  * device doesn't exist.
532*2912Sartem  */
533*2912Sartem dbus_bool_t libhal_device_query_capability (LibHalContext *ctx,
534*2912Sartem 					    const char *udi,
535*2912Sartem 					    const char *capability,
536*2912Sartem 					    DBusError *error);
537*2912Sartem 
538*2912Sartem /* Find devices with a given capability. */
539*2912Sartem char **libhal_find_device_by_capability (LibHalContext *ctx,
540*2912Sartem 					 const char *capability,
541*2912Sartem 					 int *num_devices,
542*2912Sartem 					 DBusError *error);
543*2912Sartem 
544*2912Sartem /* Watch all devices, ie. the device_property_changed callback is
545*2912Sartem  * invoked when the properties on any device changes.
546*2912Sartem  */
547*2912Sartem dbus_bool_t libhal_device_property_watch_all (LibHalContext *ctx,
548*2912Sartem 					      DBusError *error);
549*2912Sartem 
550*2912Sartem /* Add a watch on a device, so the device_property_changed callback is
551*2912Sartem  * invoked when the properties on the given device changes.
552*2912Sartem  */
553*2912Sartem dbus_bool_t libhal_device_add_property_watch (LibHalContext *ctx,
554*2912Sartem 					      const char *udi,
555*2912Sartem 					      DBusError *error);
556*2912Sartem 
557*2912Sartem /* Remove a watch on a device */
558*2912Sartem dbus_bool_t libhal_device_remove_property_watch (LibHalContext *ctx,
559*2912Sartem 						 const char *udi,
560*2912Sartem 						 DBusError *error);
561*2912Sartem 
562*2912Sartem /* Take an advisory lock on the device. */
563*2912Sartem dbus_bool_t libhal_device_lock (LibHalContext *ctx,
564*2912Sartem 				const char *udi,
565*2912Sartem 				const char *reason_to_lock,
566*2912Sartem 				char **reason_why_locked,
567*2912Sartem 				DBusError *error);
568*2912Sartem 
569*2912Sartem /* Release an advisory lock on the device. */
570*2912Sartem dbus_bool_t libhal_device_unlock (LibHalContext *ctx,
571*2912Sartem 				  const char *udi,
572*2912Sartem 				  DBusError *error);
573*2912Sartem 
574*2912Sartem dbus_bool_t libhal_device_rescan (LibHalContext *ctx,
575*2912Sartem 				  const char *udi,
576*2912Sartem 				  DBusError *error);
577*2912Sartem 
578*2912Sartem dbus_bool_t libhal_device_reprobe (LibHalContext *ctx,
579*2912Sartem 				   const char *udi,
580*2912Sartem 				   DBusError *error);
581*2912Sartem 
582*2912Sartem /* Emit a condition from a device (for hald helpers only) */
583*2912Sartem dbus_bool_t libhal_device_emit_condition (LibHalContext *ctx,
584*2912Sartem 					  const char *udi,
585*2912Sartem 					  const char *condition_name,
586*2912Sartem 					  const char *condition_details,
587*2912Sartem 					  DBusError *error);
588*2912Sartem 
589*2912Sartem /* Claim an interface for a device (for hald helpers only) */
590*2912Sartem dbus_bool_t libhal_device_claim_interface (LibHalContext *ctx,
591*2912Sartem 					   const char *udi,
592*2912Sartem 					   const char *interface_name,
593*2912Sartem 					   const char *introspection_xml,
594*2912Sartem 					   DBusError *error);
595*2912Sartem 
596*2912Sartem /* hald waits for all addons to call this function before announcing the addon (for hald helpers only) */
597*2912Sartem dbus_bool_t libhal_device_addon_is_ready (LibHalContext *ctx, const char *udi, DBusError *error);
598*2912Sartem 
599*2912Sartem 
600*2912Sartem #if defined(__cplusplus)
601*2912Sartem }
602*2912Sartem #endif
603*2912Sartem 
604*2912Sartem #endif /* LIBHAL_H */
605