Library | mr_ipc |
---|---|
Projekt | libs/mr_ipc |
Jedes Programm kann nach Einfügen der folgenden Include-Anweisung auf die Definitionen der Bibliothek zugreifen:
#include
Dazu muß das Include Verzeichnis der lokalen Libraries dem Compiler mit der folgenden Anweisung bekannt gemacht werden:
-I$(INCLUDE_PATH)mit einer geeigneten Definition von $INCLUDE_PATH
In der Linker Anweisung muß die Library mit der folgenen Anweisung mit gelinkt werden:
-lmr_ipc
Dazu muß das Lib Verzeichnis der lokalen Libraries dem Linker mit der folgenden Anweisung bekannt gemacht werden:
-L$(LIB_PATH)mit einer geeigneten Definition von $LIB_PATH
Die Bibliothek mr_ipc faßt Datentypen und Funktionen zusammen, die für die Kommunikation der Clients mit der drehscheibe nötig sind. Dies umfaßt zum einen den Datentyp, der zwischen den Programmen übertragen wird, als auch Funktionen, um eine Verbbindung zu dem Server zu öffnen und Daten zu übertragen. Der Name leitet sich von Inter Process Communication ab.
#define MR_IPC_RCV_ERROR -1 #define MR_IPC_RCV_CLOSED 0 #define MR_IPC_RCV_OK 1
#define MR_IPC_JSON_OBJECT_CMD "cmd" #define MR_IPC_JSON_OBJECT_ADDR "addr" #define MR_IPC_JSON_OBJECT_DIRECTION "direction" #define MR_IPC_JSON_OBJECT_SPEED "speed"
#define MR_IPC_JSON_CMD_NULL "null" #define MR_IPC_JSON_CMD_LOCOMOTIVE "locomotive"
MrIpcCmdType | Dies ist der Datentyp, der zwischen Clients und drehscheibe
übertragen wird.
| ||||
---|---|---|---|---|---|
DirectionType | legt die Werte für die Fahrtrichtung fest.
|
||||
MrIpcCommandValue | Returnwerte für MrIpcCmdGetCmd()
|
MrIpcClose(socket) | Dieses Makro schließt den Socket zur drehscheibe. Das Makro dient eher dazu, eine Symetrie bei den Funktionen herzustellen. MrIpcConnect() öffnet die Verbindung und MrIpcClose schließt sie wieder. |
---|
MrIpcCmdType *MrIpcCreate(void); | Diese Funktion erzeugt eine MrIpcCmdType Struktur. Da im
Wesentlichen ein Aufruf von malloc() dahinter steckt, kann die
Struktur auch statisch angelgt werden. Wir die Struktur sehr oft benötigt
und erzeugt, empfiehlt es sich sowieso, die Struktur nicht über einen
malloc() Aufruf anzulegen, sondern einfach als AUTO-Variable einer
Funktion zu deklarieren:
void MyFunc(void) { MrIpcCmdType Command; |
||||||||
---|---|---|---|---|---|---|---|---|---|
void MrIpcDestroy(MrIpcCmdType *Data); | Diese Funktion gibt eine dynamisch angelegte MrIpcCmdType Struktur wieder frei. | ||||||||
void MrIpcInit(MrIpcCmdType *Data); | Diese Funktion initialisiert eine MrIpcCmdType Struktur. Wird
die Struktur als AUTO-Variable angelegt, muß sie mit dieser Funktion
initialisiert werden, damit sie definierte Werte enthält!
void MyFunc(void) { MrIpcCmdType Command; MrIpcInit(&Command); |
||||||||
void MrIpcClear(MrIpcCmdType *Data); | Diese Funktion räumt eine MrIpcCmdType Struktur nach der
Benutzung wieder auf und muß als letztes aufgerufen werden, wenn die
Struktur als AUTO-Variable angelegt wurde.
void MyFunc(void) { MrIpcCmdType Command; MrIpcInit(&Command); ... MrIpcClear(&Command); } |
||||||||
int MrIpcConnect(char *IpAddr, int Port); | Diese Funktion stellt eine Verbindung eines Clients zu dem Server
drehscheibe her.
|
||||||||
int MrIpcStartServer(char *IpAddr, int Port); | Diese Funktion startet die Netzwerkverbindung, über den der Server
drehscheibe eine eingehende Verbindung bekommen kann.
|
||||||||
int MrIpcAccept(int ServerSock); | Diese Funktion akzeptiert eine neue Verbindung eines Clients zu dem Server
drehscheibe.
|
||||||||
int MrIpcSend(int socket, MrIpcCmdType *Data); | Diese Funktion versendet ein Datenpaket MrIpcCmdType
|
||||||||
int MrIpcRecv(int socket, MrIpcCmdType *Data); | Diese Funktion empfängt ein Datenpaket MrIpcCmdType
|
||||||||
void MrIpcCmdSetNull(MrIpcCmdType *Data); | Diese Funktion codiert ein leeres Kommando. | ||||||||
void MrIpcCmdSetLocomotive(MrIpcCmdType *Data, unsigned Addr, DirectionType Direction, unsigned Speed); | Diese Funktion kodiert einen Befehl zum Steuern einer Lokomotive.
|
||||||||
int MrIpcCmdGetCmd(MrIpcCmdType *Data); | Diese Funktion liefert das empfangene Kommando
|
||||||||
void MrIpcCmdGetLocomotive(MrIpcCmdType *Data, unsigned *Addr, DirectionType *Direction, unsigned *Speed); | Diese Funktion dekodiert (liefert die Parameter) einen Befehls zum Steuern
einer Lokomotive.
|