18c2aff776a775d34a4c9893a4c72e0434d68e36artem/***************************************************************************
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * CVSID: $Id$
18c2aff776a775d34a4c9893a4c72e0434d68e36artem *
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * device.c : HalDevice methods
18c2aff776a775d34a4c9893a4c72e0434d68e36artem *
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * Copyright (C) 2003 David Zeuthen, <david@fubar.dk>
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * Copyright (C) 2004 Novell, Inc.
18c2aff776a775d34a4c9893a4c72e0434d68e36artem *
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * Licensed under the Academic Free License version 2.1
18c2aff776a775d34a4c9893a4c72e0434d68e36artem *
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * This program is free software; you can redistribute it and/or modify
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * it under the terms of the GNU General Public License as published by
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * the Free Software Foundation; either version 2 of the License, or
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * (at your option) any later version.
18c2aff776a775d34a4c9893a4c72e0434d68e36artem *
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * This program is distributed in the hope that it will be useful,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * but WITHOUT ANY WARRANTY; without even the implied warranty of
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * GNU General Public License for more details.
18c2aff776a775d34a4c9893a4c72e0434d68e36artem *
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * You should have received a copy of the GNU General Public License
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * along with this program; if not, write to the Free Software
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18c2aff776a775d34a4c9893a4c72e0434d68e36artem *
18c2aff776a775d34a4c9893a4c72e0434d68e36artem **************************************************************************/
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artem#ifndef DEVICE_H
18c2aff776a775d34a4c9893a4c72e0434d68e36artem#define DEVICE_H
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artem#include <glib-object.h>
18c2aff776a775d34a4c9893a4c72e0434d68e36artem#include <dbus/dbus.h>
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artem#include "property.h"
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemtypedef struct _HalDevice HalDevice;
18c2aff776a775d34a4c9893a4c72e0434d68e36artemtypedef struct _HalDeviceClass HalDeviceClass;
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemstruct _HalDevice {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem GObject parent;
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artem char *udi;
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artem GSList *properties;
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artem int num_addons;
18c2aff776a775d34a4c9893a4c72e0434d68e36artem int num_addons_ready;
18c2aff776a775d34a4c9893a4c72e0434d68e36artem};
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemstruct _HalDeviceClass {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem GObjectClass parent_class;
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artem /* signals */
18c2aff776a775d34a4c9893a4c72e0434d68e36artem void (*property_changed) (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem gboolean removed,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem gboolean added);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artem void (*capability_added) (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *capability);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artem void (*callouts_finished) (HalDevice *device);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artem void (*cancelled) (HalDevice *device);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem};
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artem#define HAL_TYPE_DEVICE (hal_device_get_type ())
18c2aff776a775d34a4c9893a4c72e0434d68e36artem#define HAL_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
18c2aff776a775d34a4c9893a4c72e0434d68e36artem HAL_TYPE_DEVICE, HalDevice))
18c2aff776a775d34a4c9893a4c72e0434d68e36artem#define HAL_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), \
18c2aff776a775d34a4c9893a4c72e0434d68e36artem HAL_TYPE_DEVICE, HalDeviceClass))
18c2aff776a775d34a4c9893a4c72e0434d68e36artem#define HAL_IS_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
18c2aff776a775d34a4c9893a4c72e0434d68e36artem HAL_TYPE_DEVICE))
18c2aff776a775d34a4c9893a4c72e0434d68e36artem#define HAL_IS_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \
18c2aff776a775d34a4c9893a4c72e0434d68e36artem HAL_TYPE_DEVICE))
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemtypedef void (*HalDeviceAsyncCallback) (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem gpointer user_data,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem gboolean prop_exists);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artem/* Return value of FALSE means that the foreach should be short-circuited */
18c2aff776a775d34a4c9893a4c72e0434d68e36artemtypedef gboolean (*HalDevicePropertyForeachFn) (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem HalProperty *property,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem gpointer user_data);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemGType hal_device_get_type (void);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemHalDevice *hal_device_new (void);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemvoid hal_device_merge (HalDevice *target,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem HalDevice *source);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemvoid hal_device_merge_with_rewrite (HalDevice *target,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem HalDevice *source,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *target_namespace,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *source_namespace);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemgboolean hal_device_matches (HalDevice *device1,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem HalDevice *device2,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *namespace);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemconst char *hal_device_get_udi (HalDevice *device);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemvoid hal_device_set_udi (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *udi);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemvoid hal_device_add_capability (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *capability);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemgboolean hal_device_has_capability (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *capability);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemgboolean hal_device_has_property (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemHalProperty *hal_device_property_find (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemint hal_device_num_properties (HalDevice *device);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemchar * hal_device_property_to_string (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemvoid hal_device_property_foreach (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem HalDevicePropertyForeachFn callback,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem gpointer user_data);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemint hal_device_property_get_type (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemconst char *hal_device_property_get_as_string (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem char *buf,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem size_t bufsize);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemconst char *hal_device_property_get_string (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemdbus_int32_t hal_device_property_get_int (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemdbus_uint64_t hal_device_property_get_uint64 (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemdbus_bool_t hal_device_property_get_bool (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemdouble hal_device_property_get_double (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemGSList *hal_device_property_get_strlist (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemconst char *hal_device_property_get_strlist_elem (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem guint index);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemgboolean hal_device_property_set_string (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *value);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemgboolean hal_device_property_set_int (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem dbus_int32_t value);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemgboolean hal_device_property_set_uint64 (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem dbus_uint64_t value);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemgboolean hal_device_property_set_bool (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem dbus_bool_t value);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemgboolean hal_device_property_set_double (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem double value);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemgboolean hal_device_property_strlist_append (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *value);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemgboolean hal_device_property_strlist_prepend (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *value);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemgboolean hal_device_property_strlist_remove_elem (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem guint index);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemgboolean hal_device_property_strlist_clear (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemgboolean hal_device_property_strlist_add (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *value);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemgboolean hal_device_property_strlist_remove (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *value);
18c2aff776a775d34a4c9893a4c72e0434d68e36artemgboolean hal_device_property_strlist_is_empty (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemgboolean hal_device_property_remove (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemgboolean hal_device_copy_property (HalDevice *from_device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *from,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem HalDevice *to_device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *to);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemvoid hal_device_print (HalDevice *device);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemvoid hal_device_async_wait_property (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem HalDeviceAsyncCallback callback,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem gpointer user_data,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem int timeout);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemvoid hal_device_callouts_finished (HalDevice *device);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemvoid hal_device_cancel (HalDevice *device);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemgboolean hal_device_property_set_attribute (HalDevice *device,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem const char *key,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem enum PropertyAttribute attr,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem gboolean persistence);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemvoid hal_device_inc_num_addons (HalDevice *device);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemgboolean hal_device_inc_num_ready_addons (HalDevice *device);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artemgboolean hal_device_are_all_addons_ready (HalDevice *device);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artem
18c2aff776a775d34a4c9893a4c72e0434d68e36artem#endif /* DEVICE_H */