SerCx2-Behandlung von Lese- und Schreibanforderungen
Ein Peripherietreiber sendet Schreib- (IRP_MJ_WRITE) und Leseanforderungen (IRP_MJ_READ) an einen Port eines seriellen Controllers, um Daten an und von einem Peripheriegerät zu übertragen, das mit dem Port verbunden ist. Die Art und Weise, in der SerCx2 diese Anforderungen verarbeitet, ist genau definiert, auch wenn die Anforderungen timeouts oder abgebrochen werden.
Abbruch einer Lese- oder Schreibanforderung
Bevor eine Lese- oder Schreibanforderung abgeschlossen werden kann, kann diese Anforderung vom Betriebssystem oder vom Peripherietreiber abgebrochen werden, der die Anforderung gesendet hat. Wenn der Abbruch vor der Übertragung von Daten für die Anforderung durch SerCx2 erfolgt, schließt SerCx2 die Anforderung mit dem STATUS_CANCELLED status-Code ab.
Wenn die Lese- oder Schreibanforderung jedoch abgebrochen wird, nachdem ein oder mehrere Bytes daten für die Anforderung übertragen wurden, aber bevor alle Daten für die Anforderung übertragen werden, schließt SerCx2 die Anforderung mit dem STATUS_SUCCESS status-Code ab. Die abgeschlossene Anforderung meldet die Anzahl der von SerCx2 gelesenen oder geschriebenen Bytes während der Verarbeitung der Anforderung. Bei Bedarf kann der Peripherietreiber, der die Anforderung gesendet hat, diese Informationen verwenden, um eine zweite Anforderung zu senden, um den teilweise abgeschlossenen Lese- oder Schreibvorgang abzuschließen.
Anforderungen, die ein Timeout haben
Wenn eine Lese- oder Schreibanforderung ein Timeout haben kann, wenn die Verarbeitung der Anforderung zu lange dauert. Außerdem kann für eine Leseanforderung ein Timeout auftreten, wenn die Zeit zwischen zwei aufeinanderfolgenden Bytes, die vom seriellen Controller empfangen werden, eine maximal zulässige Zeit überschreitet. In beiden Fällen schließt SerCx2 die Anforderung sofort mit dem STATUS_TIMEOUT status Code ab, wenn die Timeoutbedingung erkannt wird. Die abgeschlossene Anforderung meldet die Anzahl der von SerCx2 gelesenen oder geschriebenen Bytes während der Verarbeitung der Anforderung. Bei Bedarf kann der Peripherietreiber, der die Anforderung gesendet hat, diese Informationen verwenden, um eine zweite Anforderung zu senden, um den teilweise abgeschlossenen Lese- oder Schreibvorgang abzuschließen. Weitere Informationen zu Timeouts finden Sie unter SERIAL_TIMEOUTS.
Auswirkungen von Hardwareeinschränkungen
In der Regel meldet SerCx2 genau die Anzahl von Bytes, die von einer Lese- oder Schreibanforderung übertragen werden, die ein Zeitüberschreitungs- oder Abgebrochenes Zeitüberschreitung aufweist. Einige Hardware, die zum Ausführen von System-DMA-Transaktionen verwendet wird, zählt jedoch möglicherweise nicht genau die Anzahl der Bytes, die von einer teilweise abgeschlossenen Lese- oder Schreibtransaktion übertragen werden. In diesem Zusammenhang kann die zugeordnete Lese- oder Schreibanforderung nur eine ungefähre Anzahl der übertragenen Bytes melden.
Anforderungen zum Übertragen von null Bytes
Als Antwort auf eine Lese- oder Schreibanforderung zum Übertragen von null Bytes schließt SerCx2 die Anforderung mit einem STATUS_SUCCESS status Code ab, führt jedoch keinen Vorgang aus.