SPB_REQUEST_SEQUENCE_POSITION-Enumeration (spbcx.h)
Die SPB_REQUEST_SEQUENCE_POSITION-Enumeration gibt die Position einer E/A-Anforderung in der Liste der Übertragungen für eine E/A-Übertragungssequenz an.
Syntax
typedef enum _SPB_REQUEST_SEQUENCE_POSITION {
SpbRequestSequencePositionInvalid,
SpbRequestSequencePositionSingle,
SpbRequestSequencePositionFirst,
SpbRequestSequencePositionContinue,
SpbRequestSequencePositionLast,
SpbRequestSequencePositionMax
} SPB_REQUEST_SEQUENCE_POSITION, *PSPB_REQUEST_SEQUENCE_POSITION;
Konstanten
SpbRequestSequencePositionInvalid Nur zur internen Verwendung. |
SpbRequestSequencePositionSingle Eine E/A-Anforderung für einmalige Übertragungen. Diese Anforderung ist entweder eine Lese- oder Schreibanforderung (IRP_MJ_READ oder IRP_MJ_WRITE), die nicht Teil einer Sequenz ist, oder es handelt sich um eine IOCTL_SPB_EXECUTE_SEQUENCE E/A-Steuerungsanforderung für eine Sequenz, die aus einer einzelnen Übertragung besteht. Der Controller sollte das Ziel auswählen, bevor die Übertragung ausgeführt wird, und das Ziel nach Abschluss der Übertragung freigeben. |
SpbRequestSequencePositionFirst Die erste E/A-Anforderung in einer Sequenz. Diese Anforderung ist die Lese- oder Schreibanforderung, die unmittelbar auf die E/A-Steuerungsanforderung für sperren (IOCTL_SPB_LOCK_CONTROLLER) folgt, die den Beginn der Sequenz signalisiert. Der Controller sollte das Ziel auswählen, bevor diese Übertragung ausgeführt wird, und das Ziel sollte nach Abschluss der Übertragung ausgewählt bleiben. |
SpbRequestSequencePositionContinue Eine E/A-Anforderung in der Mitte einer Sequenz. Diese Anforderung ist eine Lese- oder Schreibanforderung, die weder die erste noch die letzte Übertragung in der Sequenz ist. In einigen Fällen kann die SPB-Frameworkerweiterung (SpbCx) die letzte Übertragung nicht identifizieren und bezeichnet die letzte Übertragung als SpbRequestSequencePositionContinue anstelle von SpbRequestSequencePositionLast. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise". Auf dem Controller sollte das Ziel bereits ausgewählt sein, bevor diese Übertragung gestartet wird, und das Ziel sollte nach Abschluss der Übertragung ausgewählt bleiben. |
SpbRequestSequencePositionLast Die letzte E/A-Anforderung in einer Sequenz. Diese Anforderung ist die Lese- oder Schreibanforderung, die unmittelbar vor der Entsperrungsanforderung (IOCTL_SPB_UNLOCK_CONTROLLER) E/A-Steuerung steht, die das Ende der Sequenz signalisiert. In einigen Fällen kann SpbCx die letzte Übertragung nicht identifizieren und bezeichnet die letzte Übertragung als SpbRequestSequencePositionContinue anstelle von SpbRequestSequencePositionLast. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise". Auf dem Controller sollte das Ziel bereits ausgewählt sein, bevor diese Übertragung gestartet wird, und das Ziel sollte nach Abschluss der Übertragung freigegeben werden. |
SpbRequestSequencePositionMax Nur zur internen Verwendung. |
Hinweise
Ein Client (Peripherietreiber) des SPB-Controllers kann eine E/A-Übertragungssequenz ausführen, indem eine Reihe von Lese- und Schreibanforderungen an ein Zielgerät auf dem Bus gesendet wird. Jede Lese- oder Schreibanforderung in der Reihe nimmt eine Position in der Liste der Übertragungen für die Sequenz ein. Die Werte in der SPB_REQUEST_SEQUENCE_POSITION-Enumeration geben die relativen Positionen der Lese- und Schreibanforderungen in dieser Liste an.
Die SpbRequestGetParameters-Methode ruft die SPB-spezifischen Parameterwerte aus einer E/A-Anforderung ab und schreibt sie in eine SPB_REQUEST_PARAMETERS-Struktur . In diesen Parametern ist ein SPB_REQUEST_SEQUENCE_POSITION Enumerationswert enthalten, der die Position der E/A-Anforderung in der E/A-Übertragungssequenz angibt, zu der sie gehört.
Wenn SpbRequestGetParameters aufgerufen wird, um den Positionswert einer E/A-Anforderung abzurufen, die nicht Teil einer Sequenz ist, weist diese Methode der Anforderung einen geeigneten SPB_REQUEST_SEQUENCE_POSITION Enumerationswert zu.
Bei Lese- und Schreibanforderungen wird der Positionswert auf einen der folgenden Werte festgelegt: SpbRequestSequencePositionSingle, SpbRequestSequencePositionFirst, SpbRequestSequencePositionContinue oder SpbRequestSequencePositionLast.
Wenn der Client eine einfache Lese- oder Schreibanforderung (IRP_MJ_READ oder IRP_MJ_WRITE) sendet, die nicht Teil einer Sequenz ist, wird der Positionswert auf SpbRequestSequencePositionSingle festgelegt.
Wenn der Client eine Sperranforderung (IOCTL_SPB_LOCK_CONTROLLER) sendet, um den Beginn einer Sequenz zu signalisieren, lautet der Positionswert für die erste Übertragung (Lese- oder Schreibanforderung) in der Sequenz SpbRequestSequencePositionFirst, und der Positionswert für die verbleibenden Übertragungen in der Sequenz ist SpbRequestSequencePositionContinue. In diesem Fall kann SpbCx spbRequestSequencePositionLast der letzten Übertragung nicht zuweisen, da der Client die letzte Lese- oder Schreibanforderung erst gesendet hat, wenn der Client die Entsperranforderung (IOCTL_SPB_UNLOCK_CONTROLLER) sendet, die die Sequenz beendet.
Bei Sperranforderungen wird der Positionswert auf SpbRequestSequencePositionFirst festgelegt. Für Entsperranforderungen wird der Positionswert auf SpbRequestSequencePositionLast festgelegt.
Einige Controller unterstützen möglicherweise spezielle Vorgänge, z. B. Vollduplexbusübertragungen, die gleichzeitig von einem Zielgerät lesen und auf ein Zielgerät schreiben. Ein Client kann einen benutzerdefinierten Sequenzvorgang ausführen, indem er den Controller sperrt und eine Reihe benutzerdefinierter E/A-Anforderungen sendet, die SpbCx an die EvtSpbControllerIoOther-Rückruffunktion des SPB-Controllertreibers übergibt. In diesem Fall ist der Positionswert für die erste benutzerdefinierte E/A-Anforderung in der Sequenz SpbRequestSequencePositionFirst, und der Positionswert für die verbleibenden benutzerdefinierten E/A-Anforderungen in der Sequenz lautet SpbRequestSequencePositionContinue. Die Sequenz endet, wenn der Client den Controller entsperrt. Wenn die EvtSpbControllerIoOther-Rückruffunktion eine benutzerdefinierte E/A-Anforderung empfängt, die nicht Teil einer Sequenz ist, lautet der Positionswert für diese Anforderung SpbRequestSequencePositionSingle.
Für einen Positionswert von SpbRequestSequencePositionLast kann der Length-Member der SPB_REQUEST_PARAMETERS-Struktur 0 sein, um anzugeben, dass das Ziel einfach freigegeben werden soll und keine E/A-Daten übertragen werden sollen (oder um anzugeben, dass eine 0-Byte-Übertragung erfolgen soll, wenn der Controller das Gerät nicht freigeben kann, ohne die Uhr auszuführen).
Für Positionswerte von SpbRequestSequencePositionContinue und SpbRequestSequencePositionLast hat sich die Übertragungsrichtung möglicherweise gegenüber der vorherigen Übertragung geändert, und der SPB-Controllertreiber muss möglicherweise diese mögliche Richtungsänderung auf dem Bus angeben (z. B. gibt ein I2C-Controller eine neue START-Bedingung aus). Weitere Informationen zu Übertragungsanweisungen finden Sie unter SPB_TRANSFER_DIRECTION.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Unterstützt ab Windows 8. |
Kopfzeile | spbcx.h (spb.h einschließen) |