118c2aff7Sartem /*************************************************************************** 218c2aff7Sartem * CVSID: $Id$ 318c2aff7Sartem * 418c2aff7Sartem * device.c : HalDevice methods 518c2aff7Sartem * 618c2aff7Sartem * Copyright (C) 2003 David Zeuthen, <david@fubar.dk> 718c2aff7Sartem * Copyright (C) 2004 Novell, Inc. 818c2aff7Sartem * 918c2aff7Sartem * Licensed under the Academic Free License version 2.1 1018c2aff7Sartem * 1118c2aff7Sartem * This program is free software; you can redistribute it and/or modify 1218c2aff7Sartem * it under the terms of the GNU General Public License as published by 1318c2aff7Sartem * the Free Software Foundation; either version 2 of the License, or 1418c2aff7Sartem * (at your option) any later version. 1518c2aff7Sartem * 1618c2aff7Sartem * This program is distributed in the hope that it will be useful, 1718c2aff7Sartem * but WITHOUT ANY WARRANTY; without even the implied warranty of 1818c2aff7Sartem * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1918c2aff7Sartem * GNU General Public License for more details. 2018c2aff7Sartem * 2118c2aff7Sartem * You should have received a copy of the GNU General Public License 2218c2aff7Sartem * along with this program; if not, write to the Free Software 2318c2aff7Sartem * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 2418c2aff7Sartem * 2518c2aff7Sartem **************************************************************************/ 2618c2aff7Sartem 2718c2aff7Sartem #ifndef DEVICE_H 2818c2aff7Sartem #define DEVICE_H 2918c2aff7Sartem 3018c2aff7Sartem #include <glib-object.h> 3118c2aff7Sartem #include <dbus/dbus.h> 3218c2aff7Sartem 3318c2aff7Sartem #include "property.h" 3418c2aff7Sartem 3518c2aff7Sartem typedef struct _HalDevice HalDevice; 3618c2aff7Sartem typedef struct _HalDeviceClass HalDeviceClass; 3718c2aff7Sartem 3818c2aff7Sartem struct _HalDevice { 3918c2aff7Sartem GObject parent; 4018c2aff7Sartem 4118c2aff7Sartem char *udi; 42*55fea89dSDan Cross 4318c2aff7Sartem GSList *properties; 4418c2aff7Sartem 4518c2aff7Sartem int num_addons; 4618c2aff7Sartem int num_addons_ready; 4718c2aff7Sartem }; 4818c2aff7Sartem 4918c2aff7Sartem struct _HalDeviceClass { 5018c2aff7Sartem GObjectClass parent_class; 5118c2aff7Sartem 5218c2aff7Sartem /* signals */ 5318c2aff7Sartem void (*property_changed) (HalDevice *device, 5418c2aff7Sartem const char *key, 5518c2aff7Sartem gboolean removed, 5618c2aff7Sartem gboolean added); 5718c2aff7Sartem 5818c2aff7Sartem void (*capability_added) (HalDevice *device, 5918c2aff7Sartem const char *capability); 6018c2aff7Sartem 6118c2aff7Sartem void (*callouts_finished) (HalDevice *device); 6218c2aff7Sartem 6318c2aff7Sartem void (*cancelled) (HalDevice *device); 6418c2aff7Sartem }; 6518c2aff7Sartem 6618c2aff7Sartem #define HAL_TYPE_DEVICE (hal_device_get_type ()) 6718c2aff7Sartem #define HAL_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ 6818c2aff7Sartem HAL_TYPE_DEVICE, HalDevice)) 6918c2aff7Sartem #define HAL_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), \ 7018c2aff7Sartem HAL_TYPE_DEVICE, HalDeviceClass)) 7118c2aff7Sartem #define HAL_IS_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ 7218c2aff7Sartem HAL_TYPE_DEVICE)) 7318c2aff7Sartem #define HAL_IS_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \ 7418c2aff7Sartem HAL_TYPE_DEVICE)) 7518c2aff7Sartem 7618c2aff7Sartem typedef void (*HalDeviceAsyncCallback) (HalDevice *device, 7718c2aff7Sartem gpointer user_data, 7818c2aff7Sartem gboolean prop_exists); 7918c2aff7Sartem 8018c2aff7Sartem /* Return value of FALSE means that the foreach should be short-circuited */ 8118c2aff7Sartem typedef gboolean (*HalDevicePropertyForeachFn) (HalDevice *device, 8218c2aff7Sartem HalProperty *property, 8318c2aff7Sartem gpointer user_data); 8418c2aff7Sartem 8518c2aff7Sartem GType hal_device_get_type (void); 8618c2aff7Sartem 8718c2aff7Sartem HalDevice *hal_device_new (void); 8818c2aff7Sartem 8918c2aff7Sartem void hal_device_merge (HalDevice *target, 9018c2aff7Sartem HalDevice *source); 9118c2aff7Sartem 9218c2aff7Sartem void hal_device_merge_with_rewrite (HalDevice *target, 9318c2aff7Sartem HalDevice *source, 9418c2aff7Sartem const char *target_namespace, 9518c2aff7Sartem const char *source_namespace); 9618c2aff7Sartem 9718c2aff7Sartem gboolean hal_device_matches (HalDevice *device1, 9818c2aff7Sartem HalDevice *device2, 9918c2aff7Sartem const char *namespace); 10018c2aff7Sartem 10118c2aff7Sartem const char *hal_device_get_udi (HalDevice *device); 10218c2aff7Sartem void hal_device_set_udi (HalDevice *device, 10318c2aff7Sartem const char *udi); 10418c2aff7Sartem 10518c2aff7Sartem void hal_device_add_capability (HalDevice *device, 10618c2aff7Sartem const char *capability); 10718c2aff7Sartem gboolean hal_device_has_capability (HalDevice *device, 10818c2aff7Sartem const char *capability); 10918c2aff7Sartem 11018c2aff7Sartem gboolean hal_device_has_property (HalDevice *device, 11118c2aff7Sartem const char *key); 11218c2aff7Sartem HalProperty *hal_device_property_find (HalDevice *device, 11318c2aff7Sartem const char *key); 11418c2aff7Sartem int hal_device_num_properties (HalDevice *device); 11518c2aff7Sartem char * hal_device_property_to_string (HalDevice *device, 11618c2aff7Sartem const char *key); 11718c2aff7Sartem void hal_device_property_foreach (HalDevice *device, 11818c2aff7Sartem HalDevicePropertyForeachFn callback, 11918c2aff7Sartem gpointer user_data); 12018c2aff7Sartem 12118c2aff7Sartem int hal_device_property_get_type (HalDevice *device, 12218c2aff7Sartem const char *key); 12318c2aff7Sartem const char *hal_device_property_get_as_string (HalDevice *device, 12418c2aff7Sartem const char *key, 12518c2aff7Sartem char *buf, 12618c2aff7Sartem size_t bufsize); 12718c2aff7Sartem 12818c2aff7Sartem 12918c2aff7Sartem const char *hal_device_property_get_string (HalDevice *device, 13018c2aff7Sartem const char *key); 13118c2aff7Sartem dbus_int32_t hal_device_property_get_int (HalDevice *device, 13218c2aff7Sartem const char *key); 13318c2aff7Sartem dbus_uint64_t hal_device_property_get_uint64 (HalDevice *device, 13418c2aff7Sartem const char *key); 13518c2aff7Sartem dbus_bool_t hal_device_property_get_bool (HalDevice *device, 13618c2aff7Sartem const char *key); 13718c2aff7Sartem double hal_device_property_get_double (HalDevice *device, 13818c2aff7Sartem const char *key); 13918c2aff7Sartem GSList *hal_device_property_get_strlist (HalDevice *device, 14018c2aff7Sartem const char *key); 14118c2aff7Sartem const char *hal_device_property_get_strlist_elem (HalDevice *device, 14218c2aff7Sartem const char *key, 14318c2aff7Sartem guint index); 14418c2aff7Sartem 14518c2aff7Sartem 14618c2aff7Sartem 14718c2aff7Sartem gboolean hal_device_property_set_string (HalDevice *device, 14818c2aff7Sartem const char *key, 14918c2aff7Sartem const char *value); 15018c2aff7Sartem gboolean hal_device_property_set_int (HalDevice *device, 15118c2aff7Sartem const char *key, 15218c2aff7Sartem dbus_int32_t value); 15318c2aff7Sartem gboolean hal_device_property_set_uint64 (HalDevice *device, 15418c2aff7Sartem const char *key, 15518c2aff7Sartem dbus_uint64_t value); 15618c2aff7Sartem gboolean hal_device_property_set_bool (HalDevice *device, 15718c2aff7Sartem const char *key, 15818c2aff7Sartem dbus_bool_t value); 15918c2aff7Sartem gboolean hal_device_property_set_double (HalDevice *device, 16018c2aff7Sartem const char *key, 16118c2aff7Sartem double value); 16218c2aff7Sartem gboolean hal_device_property_strlist_append (HalDevice *device, 16318c2aff7Sartem const char *key, 16418c2aff7Sartem const char *value); 16518c2aff7Sartem gboolean hal_device_property_strlist_prepend (HalDevice *device, 16618c2aff7Sartem const char *key, 16718c2aff7Sartem const char *value); 16818c2aff7Sartem gboolean hal_device_property_strlist_remove_elem (HalDevice *device, 16918c2aff7Sartem const char *key, 17018c2aff7Sartem guint index); 17118c2aff7Sartem gboolean hal_device_property_strlist_clear (HalDevice *device, 17218c2aff7Sartem const char *key); 17318c2aff7Sartem gboolean hal_device_property_strlist_add (HalDevice *device, 17418c2aff7Sartem const char *key, 17518c2aff7Sartem const char *value); 17618c2aff7Sartem gboolean hal_device_property_strlist_remove (HalDevice *device, 17718c2aff7Sartem const char *key, 17818c2aff7Sartem const char *value); 17918c2aff7Sartem gboolean hal_device_property_strlist_is_empty (HalDevice *device, 18018c2aff7Sartem const char *key); 18118c2aff7Sartem 18218c2aff7Sartem gboolean hal_device_property_remove (HalDevice *device, 18318c2aff7Sartem const char *key); 18418c2aff7Sartem 185*55fea89dSDan Cross gboolean hal_device_copy_property (HalDevice *from_device, 18618c2aff7Sartem const char *from, 18718c2aff7Sartem HalDevice *to_device, 18818c2aff7Sartem const char *to); 18918c2aff7Sartem 19018c2aff7Sartem 19118c2aff7Sartem void hal_device_print (HalDevice *device); 19218c2aff7Sartem 19318c2aff7Sartem void hal_device_async_wait_property (HalDevice *device, 19418c2aff7Sartem const char *key, 19518c2aff7Sartem HalDeviceAsyncCallback callback, 19618c2aff7Sartem gpointer user_data, 19718c2aff7Sartem int timeout); 19818c2aff7Sartem 19918c2aff7Sartem void hal_device_callouts_finished (HalDevice *device); 20018c2aff7Sartem 20118c2aff7Sartem void hal_device_cancel (HalDevice *device); 20218c2aff7Sartem 20318c2aff7Sartem gboolean hal_device_property_set_attribute (HalDevice *device, 20418c2aff7Sartem const char *key, 20518c2aff7Sartem enum PropertyAttribute attr, 20618c2aff7Sartem gboolean persistence); 20718c2aff7Sartem 20818c2aff7Sartem void hal_device_inc_num_addons (HalDevice *device); 20918c2aff7Sartem 21018c2aff7Sartem gboolean hal_device_inc_num_ready_addons (HalDevice *device); 21118c2aff7Sartem 21218c2aff7Sartem gboolean hal_device_are_all_addons_ready (HalDevice *device); 21318c2aff7Sartem 21418c2aff7Sartem 21518c2aff7Sartem #endif /* DEVICE_H */ 216