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