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