EVT_SERCX2_PIO_TRANSMIT_WRITE_BUFFER Rückruffunktion (sercx.h)
Die EvtSerCx2PioTransmitWriteBuffer Ereignisrückruffunktion wird von Version 2 der seriellen Framework-Erweiterung (SerCx2) aufgerufen, um den Inhalt eines Schreibpuffers in den seriellen Controller zu übertragen.
Syntax
EVT_SERCX2_PIO_TRANSMIT_WRITE_BUFFER EvtSercx2PioTransmitWriteBuffer;
ULONG EvtSercx2PioTransmitWriteBuffer(
[in] SERCX2PIOTRANSMIT PioTransmit,
[in] PUCHAR Buffer,
[in] ULONG Length
)
{...}
Parameter
[in] PioTransmit
Ein SERCX2PIOTRANSMIT Handle für ein PIO-Übertragungsobjekt. Der serielle Controllertreiber hat zuvor den SerCx2PioTransmitCreate Methode aufgerufen, um dieses Objekt zu erstellen.
[in] Buffer
Ein Zeiger auf den Schreibpuffer. Dieser Parameter ist die virtuelle Adresse eines gesperrten Puffers im Systemspeicher.
[in] Length
Die Anzahl der Bytes im Schreibpuffer, die übertragen werden können.
Rückgabewert
Die EvtSerCx2PioTransmitWriteBuffer Funktion gibt die Anzahl der Daten zurück, die sie erfolgreich vom Schreibpuffer an die Übertragung von FIFO in der seriellen Controllerhardware übertragen hat.
Bemerkungen
Der serielle Controllertreiber muss diese Funktion implementieren. Der Treiber registriert die Funktion im SerCx2PioTransmitCreate Aufruf, der das PIO-Übertragungsobjekt erstellt.
SerCx2 ruft möglicherweise die EvtSerCx2PioTransmitWriteBuffer Funktion während einer PIO-Übertragungstransaktion mehrmals auf. Ein einzelner EvtSerCx2PioTransmitWriteBuffer Aufruf reicht aus, wenn dieser Aufruf den vollständigen Inhalt des Schreibpuffers an das FIFO übertragen kann. Andernfalls ruft SerCx2 diese Funktion weiterhin auf, da mehr Speicherplatz im FIFO zur Verfügung steht, bis der Schreibpuffer geleert wird.
Beginnend mit dem ersten Byte im Schreibpuffer verwendet die EvtSerCx2PioTransmitWriteBuffer-Funktion PIO, um so viele Byte wie vom Puffer zum Übertragen von FIFO zu übertragen. Die Funktion überträgt weiterhin Daten aus dem Puffer, solange der Puffer nicht leer ist, und das Zeilenstatusregister (LSR) angibt, dass das FIFO weitere Daten akzeptieren kann. Wenn der LSR angibt, dass das FIFO keine weiteren Daten akzeptieren kann, gibt die Funktion zurück, ohne den Puffer zu leeren. Andernfalls überträgt die Funktion alle Bytes im Puffer und gibt diese zurück. In beiden Fällen ist der von dieser Funktion zurückgegebene Wert die Anzahl der Byte von Daten, die erfolgreich vom Schreibpuffer an das FiFO übertragen wurden.
In der Regel aktiviert die EvtSerCx2PioTransmitWriteBuffer Funktion keine Unterbrechungen. Wenn die Funktion stattdessen nicht den gesamten Inhalt des Schreibpuffers in das FiFO übertragen kann, ruft SerCx2 die EvtSerCx2PioTransmitEnableReadyNotification Ereignisrückruffunktion auf, um eine bereite Benachrichtigung zu aktivieren, und diese Funktion ermöglicht einen Interrupt, der auftritt, wenn die Übertragung FIFO leer wird.
Für jeden aufeinander folgenden Aufruf des EvtSerCx2PioTransmitWriteBuffer--Funktion passt SerCx2 Puffer- so an, dass sie auf die verbleibenden Daten im Puffer zeigt, und legt Length auf die Anzahl der Datenbytes fest, die im Puffer verbleiben.
Die bereite Benachrichtigung wird nie aktiviert, wenn SerCx2 die EvtSerCx2PioTransmitEnableReadyNotification-Funktion aufruft. SerCx2 kann diese Funktion jedoch aus demselben Thread aufrufen, aus dem der Treiber die SerCx2PioTransmitReady--Methode aufgerufen hat.
Wenn der Treiber eine EvtSerCx2PioTransmitInitializeTransaction-Funktion implementiert, ruft SerCx2 diese Funktion zu Beginn einer PIO-Übertragungstransaktion vor dem ersten Aufruf der EvtSerCx2PioTransmitWriteBuffer-Funktion auf. Wenn der Treiber eine EvtSerCx2PioTransmitCleanupTransaction-Funktion implementiert, ruft SerCx2 diese Funktion am Ende einer PIO-Übertragungstransaktion nach dem letzten EvtSerCx2PioTransmitWriteBuffer Aufruf auf, und nach aufrufen der EvtSerCx2PioTransmitDrainFifo, EvtSerCx2PioTransmitCancelDrainFifound EvtSerCx2PioTransmitPurgeFifo Funktionen.
Weitere Informationen zu PIO-Übertragungstransaktionen finden Sie unter SerCx2 PIO-Transmit Transactions.
Beispiele
Um eine EvtSerCx2PioTransmitWriteBuffer Rückruffunktion zu definieren, müssen Sie zuerst eine Funktionsdeklaration bereitstellen, die den Typ der rückruffunktion identifiziert, die Sie definieren. Windows stellt eine Reihe von Rückruffunktionstypen für Treiber bereit. Durch das Deklarieren einer Funktion mithilfe der Rückruffunktionstypen können Codeanalyse für Treiber, statische Treiberüberprüfung (SDV) und andere Überprüfungstools Fehler finden, und es ist eine Anforderung zum Schreiben von Treibern für das Windows-Betriebssystem.
Um beispielsweise eine EvtSerCx2PioTransmitWriteBuffer Rückruffunktion zu definieren, die MyPioTransmitWriteBuffer
benannt ist, verwenden Sie den EVT_SERCX2_PIO_TRANSMIT_WRITE_BUFFER Funktionstyp, wie in diesem Codebeispiel gezeigt:
EVT_SERCX2_PIO_TRANSMIT_WRITE_BUFFER MyPioTransmitWriteBuffer;
Implementieren Sie dann die Rückruffunktion wie folgt:
_Use_decl_annotations_
ULONG
MyPioTransmitWriteBuffer(
SERCX2PIOTRANSMIT PioTransmit,
PUCHAR Buffer,
ULONG Length
)
{...}
Der EVT_SERCX2_PIO_TRANSMIT_WRITE_BUFFER Funktionstyp wird in der Headerdatei Sercx.h definiert. Um Fehler genauer zu identifizieren, wenn Sie die Codeanalysetools ausführen, müssen Sie der Funktionsdefinition die Use_decl_annotations Anmerkung hinzufügen. Die Use_decl_annotations Anmerkung stellt sicher, dass die Anmerkungen, die auf den Funktionstyp EVT_SERCX2_PIO_TRANSMIT_WRITE_BUFFER in der Headerdatei angewendet werden, verwendet werden. Weitere Informationen zu den Anforderungen für Funktionsdeklarationen finden Sie unter Deklarieren von Funktionen mithilfe von Funktionsrollentypen für KMDF-Treiber. Weitere Informationen zu Use_decl_annotationsfinden Sie unter Annotating Function Behavior.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Verfügbar ab Windows 8.1. |
Zielplattform- | Desktop |
Header- | sercx.h |
IRQL- | Wird bei IRQL <= DISPATCH_LEVEL aufgerufen. |
Siehe auch
EvtSerCx2PioTransmitCancelDrainFifo
EvtSerCx2PioTransmitEnableReadyNotification