2 meinOS - A unix-like x86 microkernel operating system
3 Copyright (C) 2008 Janosch Gräf <janosch.graef@gmx.net>
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU Lesser General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
19 #ifndef _CDI_GENERIC_H_
20 #define _CDI_GENERIC_H_
22 #include <sys/types.h>
25 #include "cdi/lists.h"
27 /// Struktur fuer Stream-Objekt fuer Joystick
28 struct cdi_generic_stream_joystick
{
35 * Struktur fuer CDI Generic Driver
37 struct cdi_generic_driver
{
38 /// Allgemeine CDI-Treiber-Struktur
39 struct cdi_driver drv
;
42 struct cdi_generic_stream
;
45 * Struktur fuer CDI Generic Devices
47 struct cdi_generic_device
{
48 /// Allgemeine CDI-Geraete-Struktur
49 struct cdi_device dev
;
51 /// Datenstream des Geraets
52 struct cdi_generic_stream
*stream
;
54 /// Steuerfunktionen des Geraets
59 * Struktur eines Streams
60 * Wie die Daten des Streams verarbeitet werden haengt vom Treiber ab.
61 * Gebraeuchlich ist die Arbeitsweise FIFO
62 * - read() wird von der Implementation aufgerufen, wenn ein Programm Daten
63 * vom Stream lesen will.
64 * - write() wird von der Implementation aufgerufen, wenn ein Programm Daten
65 * in den Stream schreiben will.
67 struct cdi_generic_stream
{
68 /// Groesse eines Objekts
70 /// Liest ein Objekt vom Stream
71 int (*read
)(struct cdi_generic_device
*dev
,void *obj
,size_t count
);
72 /// Schreibt ein Objekt in den Stream
73 int (*write
)(struct cdi_generic_device
*dev
,void *obj
,size_t count
);
77 * Struktur einer Steuerfunktion
78 * Steuerfunktionen werden vom Treiber zur Verfuegung gestellt um erweiterten
79 * Zugriff auf das Geraet zu haben. Jede Funktion hat ein Objekt, dass der
80 * Funktion vom Aufrufer uebergeben wird und ein Objekt, dass die Funktion
81 * an den Aufrufer zurueck gibt.
83 struct cdi_generic_function
{
85 * Referenz zur Steuerfunktion
86 * @param dev CDI-Geraet
87 * @param data Datenobjekt
88 * @param datasz Groesse von data
89 * @param ret Rueckgabeobjekt
90 * @param retsz Groesse von ret
91 * @return Rueckgabewert
93 int (*func
)(struct cdi_generic_device
*dev
,void *data
,size_t datasz
,void *ret
,size_t retsz
);
96 /// Nummer der Funktion
101 * Initialisiert einen CDI-Generic-Treiber
102 * @param driver CDI-Generic-Treiber
104 void cdi_generic_driver_init(struct cdi_generic_driver
* driver
);
107 * Zerstoert einen CDI-Generic-Treiber
108 * @param driver CDI-Generic-Treiber
110 void cdi_generic_driver_destroy(struct cdi_generic_driver
* driver
);
113 * Registriert einen CDI-Generic-Treiber
114 * @param driver CDI-Generic-Treiber
116 void cdi_generic_driver_register(struct cdi_generic_driver
* driver
);