Das Linux Kernel Modul apclab.o für das
AK-Modul-Bus CompuLAB USB
DAs CompuLAB zeichnet sich durch die folgenden Features aus:
- Leichter Anschluß an den USB-Bus
- 8 - Digital - Eingänge
- 8 - Digital - Ausgänge
- 2 - Analog-Ports
Das Gerät ist nur über die Frima AK-Modul-Bus in Deutschland zu beziehen.
Mit dem von mir geschriebenenLinux Kernel Modul ist es möglich, die Portzustände der
einzelnen Eingabe-Ports 0 -7, sowie die Ausgabe - Ports 0 - 7, zu setzen bzw. auszulesen.
Das Modul apclab.o
Das erstellen des Moduls
Zum kompilieren sind die Kernel-Header bzw. Kernel-Quellen des verwendeten Kerles notwendig, sowie root-Rechte.
Man wechselt nach entpacken des Archives (tar -xvzf cyport-XX.tar.gz) in das Verzeichniss modul und ruft dort make und anschließend make install auf.
Sollte make erfolgreich kompiliert haben, kann man das Modul mit insmod ./apclab.o installieren und überprüfen, ob das Gerät erkannt wurde.
Nun kann man mit dem Lab arbeiten.
Die API
Um die krüptischen Aufrufe des Treibers zu vereinfachen, habe ich eine API (Advanced Programming Interface) zu diesem Treiber entwickelt.
Die einzelnen Zustände eines Port werden dabei über Bool-Variablen in der structure Port dargestelt. Sie ist im Verzeichniss API zu finden
struct Port {
bool P0 :1;
bool P1 :1;
bool P2 :1;
bool P3 :1;
bool P4 :1;
bool P5 :1;
bool P6 :1;
bool P7 :1;
};
Es ist also notwendig, zwei Variablen mit dieser Struktur zu erstellen (Beispiel: Port Port1; Port Port2;)
Über die folgenden Funktionen wird dann das Device selber gesteuert:
- void init (const unsigned short int &Device)
Mit dieser Funktion wird das Device initiert, nachdem es an den USB-Bus angeschlossen wurde.
Als Argument wird der Funktion die Gerätenummer übergeben. Im Fall des ersten Portbausteins die 0, beim zweiten die 1 usw.
- Port read_Lab(const Port & Output, double &Ausgang_A, double &Ausgang_B)
Der Variable Output übergibt man die Port-Structute, die nachher auf den Ausgängen des Lab abgebildet werden soll.
Die Variablen A und B geben die Spannung, die an den beiden Ports A und B anliegt aus.
Der Rückgabewert gibt den Zustand der Eingänge wieder.
- void deinit (void);
Irgendwann sollte das Programm zu ende sein und damits keine Probleme mit offenen Handels gibt, bitte diese Funktion aufrufen.
Sie räumt dann enstrechend auf.
Ich (Marcus Maul) wünsche allen viel Spaß beim programmieren!!!
An dieser Stelle nochmals vielen Dank an den aPc, der mir bei der Programmierung tatkräftig durch Test und Hilfestellungen
zur Seite stand, sowie Martin Henne und Burkhard Kainka.
Ich selber bin Mitglied des .
Special Thanks to Sourceforge for hosting this project!!!