RFC_0007 Interface eines GRINJ-Device-Treibers TOC --------------------------------------------------- 1. RFC-Notes 2. Definition 3. Beispiel -------------------------------------------------- 1. RFC-Notes -------------------------------------------------- Ein GRINJ-Device-Driver dient als Interface zur "Aussenwelt" einer GRINJ-Binary. Ueber einen Treiber kann ein simpler Integer-Wert beliebig verarbeitet werden. Damit koennen also Anwendungen wie - Betriebssystem-Dienste - Timer - RPC (Semaphore, SHM) - Hardware - LPT, Bus-Systeme realisiert werden. 2. Definition -------------------------------------------------- Ein Treiber bietet folgende Funktionen: /*! Zustand der Ressource: 0 : ok 1 : temporaer nicht verfuegbar 2 : fatal-error, Ressource nicht verfuegbar Beispiel fuer einen Socket: 0 : Server ok und verbunden 1 : Server ok, aber kein Client 3 : Socket-Error (z.B. Bind) */ int getState(); /*! Kontruktor Wird beim Laden des Treibers aufgerufen Return-Wert wie "getState" */ int init(); /*! Destruktor Wird beim entladen aufgerufen */ void destroy(); /*! Typenangabe (als Integer-Bitset): Bits | Angabe | Werte ------+------------+-------------------- 0-1 | Datentyp | 00 : Integer-Device 2-3 | Input-Typ | 00 : Non-Blocking | | 01 : Blocking 4-5 | Output-Typ| 00 : Non-Blocking | | 01 : Blocking 6-31 | reserved | ------+------------+-------------------- */ unsigned getType(); /*! Out-Methode */ void setInt(int i); /*! In-Methode */ int getInt(); 3. Beispiel -------------------------------------------------- loopback.c Loopback-Device, Stores an Integer-Value ----------------------------------------- int glbInt; int init() { return 0; } // immer ok void destroy() {} int getState() { return 0; } // immer ok unsigned getType() { return 0; } // non-blocking integer-device void setInt(int i) { glbInt = i; } int getInt() { return glbInt; } ----------------------------------------- Generieren mit $ gcc -fPIC -c loopback.c $ gcc -shared -Wl,-soname,libLoopback.so -o libLoopback.so *.o