LinuxCNC Documentation

SYNOPSIS

#include <hal.h>
bool hal_port_read(hal_port_t port, char* dest, unsigned count);
bool hal_port_peek(hal_port_t port, char* dest, unsigned count);
bool hal_port_peek_commit(hal_port_t port, unsigned count);
unsigned hal_port_readable(hal_port_t port);
void hal_port_clear(hal_port_t port);

bool hal_port_write(hal_port_t port, const char* src, unsigned count);
unsigned hal_port_writable(hal_port_t port);

unsigned hal_port_buffer_size(hal_port_t port);

#ifdef ULAPI
void hal_port_wait_readable(hal_port_t** port, unsigned count, sig_atomic_t* stop);
void hal_port_wait_writable(hal_port_t** port, unsigned count, sig_atomic_t* stop);
#endif

BESCHREIBUNG

Ein HAL-Port-Pin ist ein HAL-Pin, der als einseitiger byteorientierter Datenstrom in Echtzeit fungiert. Ein Ausgangsanschluss an einer beliebigen Komponente kann über ein Signal mit einem Eingangsanschluss an einer beliebigen anderen Komponente verbunden werden. Die an den Ausgangsanschluss geschrieben Daten werden für den Eingangsanschluss zugänglich. Ein HAL-Portsignal kann nur einen einzigen Schreiber und einen einzigen Leser verbinden.

Ein Anschluss puffert auch Daten. Die Benutzer sollten die richtige Puffergröße je nach der beabsichtigten Anwendung bestimmen.

hal_port_read

Liest count bytes vom Port in den Zielpuffer dest. hal_port_read liest count Bytes, wenn und nur wenn count Bytes zum Lesen verfügbar sind, andernfalls lässt es den Port unbeeinflusst. Gibt true zurück, wenn count bytes gelesen wurden und false andernfalls. Diese Funktion sollte nur von der Komponente aufgerufen werden, die den IN PORT-Pin besitzt.

hal_port_peek

Verhält sich wie hal_port_read, verbraucht jedoch keine Bytes vom HAL-Port. Wiederholte Aufrufe von hal_port_peek geben die gleichen Daten zurück. Gibt true zurück, wenn Count Bytes gelesen wurden, andernfalls false. Diese Funktion sollte nur von der Komponente aufgerufen werden, die den IN PORT-Pin besitzt.

hal_port_peek_commit

Verschiebt die Leseposition im Portpuffer um Count Bytes. Ein hal_port_peek gefolgt von einem hal_port_peek_commit würde bei gleichem Zählwert äquivalent zu hal_port_read funktionieren. Gibt true zurück, wenn count lesbare Bytes übersprungen wurden und nicht mehr zugänglich sind, und false, wenn keine Bytes übersprungen wurden. Diese Funktion sollte nur von der Komponente aufgerufen werden, die den IN PORT-Pin besitzt.

hal_port_readable

Gibt die Anzahl der Bytes zurück, die zum Lesen von port zur Verfügung stehen. Es ist sicher, diese Funktion von jeder Komponente aus aufzurufen.

hal_port_clear

Leert einen gegebenen Port von allen Daten. hal_port_clear sollte nur von der Komponente aufgerufen werden, die den IN PORT Pin besitzt.

hal_port_write

Schreibt count bytes von src in den Port. Gibt true zurück, wenn count bytes geschrieben wurden, andernfalls false. Diese Funktion sollte nur von der Komponente aufgerufen werden, die den OUT PORT-Pin besitzt.

hal_port_writable

Gibt die Anzahl der Bytes zurück, die in den Port geschrieben werden können. Es ist sicher, diese Funktion von jeder Komponente aus aufzurufen.

hal_port_buffer_size

Gibt die maximale Anzahl von Bytes zurück, die ein Port puffern kann. Es ist sicher, diese Funktion von jeder Komponente aus aufzurufen.

hal_port_wait_readable

Wartet, bis an der Schnittstelle mindestens Count Bytes zum Lesen verfügbar sind oder das Stop-Flag gesetzt wird.

hal_port_wait_writable

Wartet, bis an der Schnittstelle mindestens eine Anzahl von Bytes zum Schreiben verfügbar ist oder das Stop-Flag gesetzt wird.

ARGUMENTE

hal_port_t

Ein Handle auf ein Port-Objekt. Erstellt von hal_pin_new.

dest

Ein Array von Bytes, in das hal_port_read und hal_port_peek Daten kopieren. Dieses Array muß vom Aufrufer zugewiesen werden und mindestens so viele Bytes lang sein.

count (engl für Zähler)

Die Anzahl der Bytes, die hal_port_read, hal_port_peek und hal_port_write nach dest oder von src kopieren.

src

Ein Array von Bytes, aus dem hal_port_write Daten in den Portpuffer kopiert. Dieses muss mindestens die Größe count bytes haben.

stop

Ein Zeiger auf einen Wert, der während des Wartens überwacht wird. Ist er ungleich Null, kehrt der Wartevorgang vorzeitig zurück. Dadurch kann ein Warteaufruf im Falle eines Signals sicher beendet werden.

SAMPLE CODE

Im Quellbaum unter src/hal/components/raster.comp ist eine Echtzeitkomponente für die Lasersteuerung. src/tests/raster ist ein Testprogramm, das auch die Rasterkomponente mit Python programmiert.

REALTIME CONSIDERATIONS

hal_port_read, hal_port_peek, hal_port_peek_commit, hal_port_readable, hal_port_clear, hal_port_write, hal_port_writable, hal_port_buffer_size may be called from realtime code.

hal_port_wait_writable, hal_port_wait_readable may be called from ULAPI code.

SIEHE AUCH

raster(9)