I/O Funktionen für die Treiber der Clients

Bibliothek

Projektio_fkts
Library-
Includedateiio.h

Beschreibung

Jeder Treiber muß eine Initfunktion haben, die die IoFktStruct mit den Funktionspointern füllt. Die einzelnen Felder der Struktur sind dabei wie folgt zu benutzen:

Definitionen

#define IOFKT_INVALID_FD -1

typedef struct {
   void *private;
   int (*GetFd)(void *private);
   BOOL (*Open)(void *private);
   void (*Close)(void *private);
   BOOL (*Read)(void *private, int fd, BOOL PendingData,
                MrCs2CanDataType *CanMsg);
   BOOL (*Write)(void *private, int ReceiverSocket, MrCs2CanDataType *CanMsg);
} IoFktStruct;

FeldBeschreibung
Open()Die Open Funktion wird als erste Funktion aufgerufen, um den Treiber zu öffnen. Hier kann die Verbindung zu einem Server aufgebaut werden. Oder selbst einen Socket für einen Dienst geöffnet werden.
Close()Die Close Funktion wird zum Ende aufgerufen und kann die Sockets wieder schließen.
GetFd()Diese Funktion liefert der Reihe nach jeden Socket, den der Treiber benutzt. Nach dem letzten Socket liefet der nächste Aufruf den Wer IOFKT_INVALID_FD als Indikator, daß der letzte Socket geliefert wurde. Der danach nächste Aufruf fängt wieder mit dem ersten Socket an. Damit kann z.B. der allgemeine Teil alle Sockets für den Aufruf von select() ermitteln.
Read()Diese Funktion wird aufgerufen, wenn auf einem Socket Daten gelesen werden können. Die Funktion hat folgende Parameter:
ParameterBedeutung
privateZeiger auf private Daten des Treibers (s.u.)
fdSocket bzw. Filedescriptor, der Daten zum Lesen liefern kann.
PendingDataWird auf TRUE gesetzt, wenn der vorherige Aufruf Daten zuückgeliefert hat und der weitere Aufruf noch möglicherweise nicht gelesen Daten ohne erneute aufruf von select() liefern soll. Siehe dazu die Benutzung im common Teil
CanMsgStruktur für eine CAN Nachricht, die Anhand der vorliegenden Daten passend gefüllt werden muß
Returnwert:TRUE, wenn die Struktur für eine CAN Nachricht gefüllt wurde, deren Inhalt also gültig ist.
Write()Diese Funktion wird aufgerufen, wenn aus dem System verschickt werden sollen. Die Funktion hat folgende Parameter:
ParameterBedeutung
privateZeiger auf private Daten des Treibers (s.u.)
ReceiverSocketWenn die Message eine Antwort ist, kann dieser Parameter den Sender der Anforderung enthalten. Dann werden die Daten nur versendet, wenn dies der (oder einer der) eigene Socket ist. Ansonsten hat der Parameter den Wert MR_IPC_SOCKET_ALL. Damit ist es z.B. möglich, die Dateien nur über die Schnittstelle zu senden, von der sie angefordert wurden und damit den CAN Bus nicht zu belasten.
CanMsgStruktur mit der zu versendenden CAN Nachricht
Returnwert:TRUE, die Daten versendet wurden.
privateDies ist der Zeiger auf private Daten, der von der Initfunktion des Treibers angelegt wurde.


Zurück zur Modellbahn Startseite - Zurück zur Homepage