1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
2  *
3  * Copyright (C) 2011 Richard Hughes <richard@hughsie.com>
4  *
5  * Licensed under the GNU General Public License Version 2
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20  */
21 
22 #ifndef __CD_PLUGIN_H
23 #define __CD_PLUGIN_H
24 
25 #include <glib-object.h>
26 #include <colord-private.h>
27 
28 #include "cd-device.h"
29 
30 G_BEGIN_DECLS
31 
32 typedef struct CdPlugin CdPlugin;
33 typedef struct CdPluginPrivate CdPluginPrivate;
34 
35 typedef const gchar	*(*CdPluginGetDescFunc)		(void);
36 typedef void		 (*CdPluginFunc)		(CdPlugin	*plugin);
37 typedef void		 (*CdPluginDeviceFunc)		(CdPlugin	*plugin,
38 							 CdDevice	*device,
39 							 gpointer	 user_data);
40 typedef gboolean	 (*CdPluginEnabledFunc)	(void);
41 
42 struct CdPlugin {
43 	GModule			*module;
44 	CdPluginPrivate		*priv;
45 	gpointer		 user_data;
46 	CdPluginDeviceFunc	 device_added;
47 	CdPluginDeviceFunc	 device_removed;
48 };
49 
50 typedef enum {
51 	CD_PLUGIN_PHASE_INIT,				/* plugin started */
52 	CD_PLUGIN_PHASE_DESTROY,			/* plugin finalized */
53 	CD_PLUGIN_PHASE_COLDPLUG,			/* system ready for devices */
54 	CD_PLUGIN_PHASE_STATE_CHANGED,			/* system state has changed */
55 	CD_PLUGIN_PHASE_UNKNOWN
56 } CdPluginPhase;
57 
58 #define	CD_PLUGIN_GET_PRIVATE(x)			g_new0 (x,1)
59 
60 const gchar	*cd_plugin_get_description		(void);
61 void		 cd_plugin_initialize			(CdPlugin	*plugin);
62 void		 cd_plugin_coldplug			(CdPlugin	*plugin);
63 void		 cd_plugin_destroy			(CdPlugin	*plugin);
64 void		 cd_plugin_state_changed		(CdPlugin	*plugin);
65 
66 void		 cd_plugin_device_added			(CdPlugin	*plugin,
67 							 CdDevice	*device);
68 void		 cd_plugin_device_removed		(CdPlugin	*plugin,
69 							 CdDevice	*device);
70 
71 /* optional function which returns false if plugin should not be enabled */
72 gboolean	 cd_plugin_config_enabled		(void);
73 
74 G_END_DECLS
75 
76 #endif /* __CD_PLUGIN_H */
77