1*18c2aff7Sartem /*************************************************************************** 2*18c2aff7Sartem * CVSID: $Id$ 3*18c2aff7Sartem * 4*18c2aff7Sartem * device.c : HalDevice methods 5*18c2aff7Sartem * 6*18c2aff7Sartem * Copyright (C) 2003 David Zeuthen, <david@fubar.dk> 7*18c2aff7Sartem * Copyright (C) 2004 Novell, Inc. 8*18c2aff7Sartem * 9*18c2aff7Sartem * Licensed under the Academic Free License version 2.1 10*18c2aff7Sartem * 11*18c2aff7Sartem * This program is free software; you can redistribute it and/or modify 12*18c2aff7Sartem * it under the terms of the GNU General Public License as published by 13*18c2aff7Sartem * the Free Software Foundation; either version 2 of the License, or 14*18c2aff7Sartem * (at your option) any later version. 15*18c2aff7Sartem * 16*18c2aff7Sartem * This program is distributed in the hope that it will be useful, 17*18c2aff7Sartem * but WITHOUT ANY WARRANTY; without even the implied warranty of 18*18c2aff7Sartem * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19*18c2aff7Sartem * GNU General Public License for more details. 20*18c2aff7Sartem * 21*18c2aff7Sartem * You should have received a copy of the GNU General Public License 22*18c2aff7Sartem * along with this program; if not, write to the Free Software 23*18c2aff7Sartem * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 24*18c2aff7Sartem * 25*18c2aff7Sartem **************************************************************************/ 26*18c2aff7Sartem 27*18c2aff7Sartem #ifndef DEVICE_H 28*18c2aff7Sartem #define DEVICE_H 29*18c2aff7Sartem 30*18c2aff7Sartem #include <glib-object.h> 31*18c2aff7Sartem #include <dbus/dbus.h> 32*18c2aff7Sartem 33*18c2aff7Sartem #include "property.h" 34*18c2aff7Sartem 35*18c2aff7Sartem typedef struct _HalDevice HalDevice; 36*18c2aff7Sartem typedef struct _HalDeviceClass HalDeviceClass; 37*18c2aff7Sartem 38*18c2aff7Sartem struct _HalDevice { 39*18c2aff7Sartem GObject parent; 40*18c2aff7Sartem 41*18c2aff7Sartem char *udi; 42*18c2aff7Sartem 43*18c2aff7Sartem GSList *properties; 44*18c2aff7Sartem 45*18c2aff7Sartem int num_addons; 46*18c2aff7Sartem int num_addons_ready; 47*18c2aff7Sartem }; 48*18c2aff7Sartem 49*18c2aff7Sartem struct _HalDeviceClass { 50*18c2aff7Sartem GObjectClass parent_class; 51*18c2aff7Sartem 52*18c2aff7Sartem /* signals */ 53*18c2aff7Sartem void (*property_changed) (HalDevice *device, 54*18c2aff7Sartem const char *key, 55*18c2aff7Sartem gboolean removed, 56*18c2aff7Sartem gboolean added); 57*18c2aff7Sartem 58*18c2aff7Sartem void (*capability_added) (HalDevice *device, 59*18c2aff7Sartem const char *capability); 60*18c2aff7Sartem 61*18c2aff7Sartem void (*callouts_finished) (HalDevice *device); 62*18c2aff7Sartem 63*18c2aff7Sartem void (*cancelled) (HalDevice *device); 64*18c2aff7Sartem }; 65*18c2aff7Sartem 66*18c2aff7Sartem #define HAL_TYPE_DEVICE (hal_device_get_type ()) 67*18c2aff7Sartem #define HAL_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ 68*18c2aff7Sartem HAL_TYPE_DEVICE, HalDevice)) 69*18c2aff7Sartem #define HAL_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), \ 70*18c2aff7Sartem HAL_TYPE_DEVICE, HalDeviceClass)) 71*18c2aff7Sartem #define HAL_IS_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ 72*18c2aff7Sartem HAL_TYPE_DEVICE)) 73*18c2aff7Sartem #define HAL_IS_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \ 74*18c2aff7Sartem HAL_TYPE_DEVICE)) 75*18c2aff7Sartem 76*18c2aff7Sartem typedef void (*HalDeviceAsyncCallback) (HalDevice *device, 77*18c2aff7Sartem gpointer user_data, 78*18c2aff7Sartem gboolean prop_exists); 79*18c2aff7Sartem 80*18c2aff7Sartem /* Return value of FALSE means that the foreach should be short-circuited */ 81*18c2aff7Sartem typedef gboolean (*HalDevicePropertyForeachFn) (HalDevice *device, 82*18c2aff7Sartem HalProperty *property, 83*18c2aff7Sartem gpointer user_data); 84*18c2aff7Sartem 85*18c2aff7Sartem GType hal_device_get_type (void); 86*18c2aff7Sartem 87*18c2aff7Sartem HalDevice *hal_device_new (void); 88*18c2aff7Sartem 89*18c2aff7Sartem void hal_device_merge (HalDevice *target, 90*18c2aff7Sartem HalDevice *source); 91*18c2aff7Sartem 92*18c2aff7Sartem void hal_device_merge_with_rewrite (HalDevice *target, 93*18c2aff7Sartem HalDevice *source, 94*18c2aff7Sartem const char *target_namespace, 95*18c2aff7Sartem const char *source_namespace); 96*18c2aff7Sartem 97*18c2aff7Sartem gboolean hal_device_matches (HalDevice *device1, 98*18c2aff7Sartem HalDevice *device2, 99*18c2aff7Sartem const char *namespace); 100*18c2aff7Sartem 101*18c2aff7Sartem const char *hal_device_get_udi (HalDevice *device); 102*18c2aff7Sartem void hal_device_set_udi (HalDevice *device, 103*18c2aff7Sartem const char *udi); 104*18c2aff7Sartem 105*18c2aff7Sartem void hal_device_add_capability (HalDevice *device, 106*18c2aff7Sartem const char *capability); 107*18c2aff7Sartem gboolean hal_device_has_capability (HalDevice *device, 108*18c2aff7Sartem const char *capability); 109*18c2aff7Sartem 110*18c2aff7Sartem gboolean hal_device_has_property (HalDevice *device, 111*18c2aff7Sartem const char *key); 112*18c2aff7Sartem HalProperty *hal_device_property_find (HalDevice *device, 113*18c2aff7Sartem const char *key); 114*18c2aff7Sartem int hal_device_num_properties (HalDevice *device); 115*18c2aff7Sartem char * hal_device_property_to_string (HalDevice *device, 116*18c2aff7Sartem const char *key); 117*18c2aff7Sartem void hal_device_property_foreach (HalDevice *device, 118*18c2aff7Sartem HalDevicePropertyForeachFn callback, 119*18c2aff7Sartem gpointer user_data); 120*18c2aff7Sartem 121*18c2aff7Sartem int hal_device_property_get_type (HalDevice *device, 122*18c2aff7Sartem const char *key); 123*18c2aff7Sartem const char *hal_device_property_get_as_string (HalDevice *device, 124*18c2aff7Sartem const char *key, 125*18c2aff7Sartem char *buf, 126*18c2aff7Sartem size_t bufsize); 127*18c2aff7Sartem 128*18c2aff7Sartem 129*18c2aff7Sartem const char *hal_device_property_get_string (HalDevice *device, 130*18c2aff7Sartem const char *key); 131*18c2aff7Sartem dbus_int32_t hal_device_property_get_int (HalDevice *device, 132*18c2aff7Sartem const char *key); 133*18c2aff7Sartem dbus_uint64_t hal_device_property_get_uint64 (HalDevice *device, 134*18c2aff7Sartem const char *key); 135*18c2aff7Sartem dbus_bool_t hal_device_property_get_bool (HalDevice *device, 136*18c2aff7Sartem const char *key); 137*18c2aff7Sartem double hal_device_property_get_double (HalDevice *device, 138*18c2aff7Sartem const char *key); 139*18c2aff7Sartem GSList *hal_device_property_get_strlist (HalDevice *device, 140*18c2aff7Sartem const char *key); 141*18c2aff7Sartem const char *hal_device_property_get_strlist_elem (HalDevice *device, 142*18c2aff7Sartem const char *key, 143*18c2aff7Sartem guint index); 144*18c2aff7Sartem 145*18c2aff7Sartem 146*18c2aff7Sartem 147*18c2aff7Sartem gboolean hal_device_property_set_string (HalDevice *device, 148*18c2aff7Sartem const char *key, 149*18c2aff7Sartem const char *value); 150*18c2aff7Sartem gboolean hal_device_property_set_int (HalDevice *device, 151*18c2aff7Sartem const char *key, 152*18c2aff7Sartem dbus_int32_t value); 153*18c2aff7Sartem gboolean hal_device_property_set_uint64 (HalDevice *device, 154*18c2aff7Sartem const char *key, 155*18c2aff7Sartem dbus_uint64_t value); 156*18c2aff7Sartem gboolean hal_device_property_set_bool (HalDevice *device, 157*18c2aff7Sartem const char *key, 158*18c2aff7Sartem dbus_bool_t value); 159*18c2aff7Sartem gboolean hal_device_property_set_double (HalDevice *device, 160*18c2aff7Sartem const char *key, 161*18c2aff7Sartem double value); 162*18c2aff7Sartem gboolean hal_device_property_strlist_append (HalDevice *device, 163*18c2aff7Sartem const char *key, 164*18c2aff7Sartem const char *value); 165*18c2aff7Sartem gboolean hal_device_property_strlist_prepend (HalDevice *device, 166*18c2aff7Sartem const char *key, 167*18c2aff7Sartem const char *value); 168*18c2aff7Sartem gboolean hal_device_property_strlist_remove_elem (HalDevice *device, 169*18c2aff7Sartem const char *key, 170*18c2aff7Sartem guint index); 171*18c2aff7Sartem gboolean hal_device_property_strlist_clear (HalDevice *device, 172*18c2aff7Sartem const char *key); 173*18c2aff7Sartem gboolean hal_device_property_strlist_add (HalDevice *device, 174*18c2aff7Sartem const char *key, 175*18c2aff7Sartem const char *value); 176*18c2aff7Sartem gboolean hal_device_property_strlist_remove (HalDevice *device, 177*18c2aff7Sartem const char *key, 178*18c2aff7Sartem const char *value); 179*18c2aff7Sartem gboolean hal_device_property_strlist_is_empty (HalDevice *device, 180*18c2aff7Sartem const char *key); 181*18c2aff7Sartem 182*18c2aff7Sartem gboolean hal_device_property_remove (HalDevice *device, 183*18c2aff7Sartem const char *key); 184*18c2aff7Sartem 185*18c2aff7Sartem gboolean hal_device_copy_property (HalDevice *from_device, 186*18c2aff7Sartem const char *from, 187*18c2aff7Sartem HalDevice *to_device, 188*18c2aff7Sartem const char *to); 189*18c2aff7Sartem 190*18c2aff7Sartem 191*18c2aff7Sartem void hal_device_print (HalDevice *device); 192*18c2aff7Sartem 193*18c2aff7Sartem void hal_device_async_wait_property (HalDevice *device, 194*18c2aff7Sartem const char *key, 195*18c2aff7Sartem HalDeviceAsyncCallback callback, 196*18c2aff7Sartem gpointer user_data, 197*18c2aff7Sartem int timeout); 198*18c2aff7Sartem 199*18c2aff7Sartem void hal_device_callouts_finished (HalDevice *device); 200*18c2aff7Sartem 201*18c2aff7Sartem void hal_device_cancel (HalDevice *device); 202*18c2aff7Sartem 203*18c2aff7Sartem gboolean hal_device_property_set_attribute (HalDevice *device, 204*18c2aff7Sartem const char *key, 205*18c2aff7Sartem enum PropertyAttribute attr, 206*18c2aff7Sartem gboolean persistence); 207*18c2aff7Sartem 208*18c2aff7Sartem void hal_device_inc_num_addons (HalDevice *device); 209*18c2aff7Sartem 210*18c2aff7Sartem gboolean hal_device_inc_num_ready_addons (HalDevice *device); 211*18c2aff7Sartem 212*18c2aff7Sartem gboolean hal_device_are_all_addons_ready (HalDevice *device); 213*18c2aff7Sartem 214*18c2aff7Sartem 215*18c2aff7Sartem #endif /* DEVICE_H */ 216