xref: /titanic_51/usr/src/cmd/hal/hald/device.h (revision 18c2aff776a775d34a4c9893a4c72e0434d68e36)
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