1/***************************************************************************
2 * CVSID: $Id$
3 *
4 * device.c : HalDevice methods
5 *
6 * Copyright (C) 2003 David Zeuthen, <david@fubar.dk>
7 * Copyright (C) 2004 Novell, Inc.
8 *
9 * Licensed under the Academic Free License version 2.1
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 * GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
24 *
25 **************************************************************************/
26
27#ifndef DEVICE_STORE_H
28#define DEVICE_STORE_H
29
30#include <glib-object.h>
31
32#include "device.h"
33
34typedef struct _HalDeviceStore      HalDeviceStore;
35typedef struct _HalDeviceStoreClass HalDeviceStoreClass;
36
37struct _HalDeviceStore {
38	GObject parent;
39
40	GSList *devices;
41};
42
43struct _HalDeviceStoreClass {
44	GObjectClass parent_class;
45
46	/* signals */
47	void (*store_changed) (HalDeviceStore *store,
48			       HalDevice *device,
49			       gboolean added);
50
51	void (*device_property_changed) (HalDeviceStore *store,
52					 HalDevice *device,
53					 const char *key,
54					 gboolean removed,
55					 gboolean added);
56
57	void (*device_capability_added) (HalDeviceStore *store,
58					 HalDevice *device,
59					 const char *capability);
60
61};
62
63#define HAL_TYPE_DEVICE_STORE              (hal_device_store_get_type ())
64#define HAL_DEVICE_STORE(obj)              (G_TYPE_CHECK_INSTANCE_CAST ((obj),\
65                                            HAL_TYPE_DEVICE_STORE, \
66                                            HalDeviceStore))
67#define HAL_DEVICE_STORE_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), \
68                                            HAL_TYPE_DEVICE_STORE, \
69					    HalDeviceStoreClass))
70#define HAL_IS_DEVICE_STORE(obj)           (G_TYPE_CHECK_INSTANCE_TYPE ((obj),\
71                                            HAL_TYPE_DEVICE_STORE))
72#define HAL_IS_DEVICE_STORE_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), \
73                                            HAL_TYPE_DEVICE_STORE))
74
75typedef void     (*HalDeviceStoreAsyncCallback) (HalDeviceStore *store,
76						 HalDevice      *device,
77						 gpointer        user_data);
78
79/* Return value of FALSE means that the foreach should be short-circuited */
80typedef gboolean (*HalDeviceStoreForeachFn) (HalDeviceStore *store,
81					     HalDevice      *device,
82					     gpointer        user_data);
83
84GType           hal_device_store_get_type   (void);
85
86HalDeviceStore *hal_device_store_new        (void);
87
88void            hal_device_store_add        (HalDeviceStore *store,
89					     HalDevice      *device);
90gboolean        hal_device_store_remove     (HalDeviceStore *store,
91					     HalDevice      *device);
92
93HalDevice      *hal_device_store_find       (HalDeviceStore *store,
94					     const char     *udi);
95
96void            hal_device_store_foreach    (HalDeviceStore *store,
97					     HalDeviceStoreForeachFn callback,
98					     gpointer user_data);
99
100HalDevice      *hal_device_store_match_key_value_string (HalDeviceStore *store,
101							 const char *key,
102							 const char *value);
103
104HalDevice      *hal_device_store_match_key_value_int (HalDeviceStore *store,
105						      const char *key,
106						      int value);
107
108GSList         *hal_device_store_match_multiple_key_value_string (HalDeviceStore *store,
109								  const char *key,
110								  const char *value);
111
112void           hal_device_store_match_key_value_string_async (HalDeviceStore *store,
113							      const char *key,
114							      const char *value,
115							      HalDeviceStoreAsyncCallback callback,
116							      gpointer user_data,
117							      int timeout);
118
119void hal_device_store_print (HalDeviceStore *store);
120
121
122#endif /* DEVICE_STORE_H */
123