xref: /illumos-gate/usr/src/cmd/hal/hald/device.h (revision 55fea89d)
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