EVT_SERCX2_PIO_TRANSMIT_WRITE_BUFFER funzione di callback (sercx.h)
La EvtSerCx2PioTransmitWriteBuffer funzione di callback degli eventi viene chiamata dalla versione 2 dell'estensione del framework seriale (SerCx2) per usare operazioni di I/O programmate (PIO) per trasferire il contenuto di un buffer di scrittura alla trasmissione FIFO nel controller seriale.
Sintassi
EVT_SERCX2_PIO_TRANSMIT_WRITE_BUFFER EvtSercx2PioTransmitWriteBuffer;
ULONG EvtSercx2PioTransmitWriteBuffer(
[in] SERCX2PIOTRANSMIT PioTransmit,
[in] PUCHAR Buffer,
[in] ULONG Length
)
{...}
Parametri
[in] PioTransmit
Handle SERCX2PIOTRANSMIT a un oggetto di trasmissione PIO. Il driver del controller seriale precedentemente chiamato il metodo SerCx2PioTransmitCreate per creare questo oggetto.
[in] Buffer
Puntatore al buffer di scrittura. Questo parametro è l'indirizzo virtuale di un buffer bloccato nella memoria di sistema.
[in] Length
Numero di byte nel buffer di scrittura che sono disponibili per la trasmissione.
Valore restituito
La funzione EvtSerCx2PioTransmitWriteBuffer restituisce il numero di byte di dati trasferiti correttamente dal buffer di scrittura alla trasmissione FIFO nell'hardware del controller seriale.
Osservazioni
Il driver del controller seriale deve implementare questa funzione. Il driver registra la funzione nel SerCx2PioTransmitCreate chiamata che crea l'oggetto di trasmissione PIO.
SerCx2 potrebbe chiamare il EvtSerCx2PioTransmitWriteBuffer funzione più volte durante una transazione di trasmissione PIO. Una singola EvtSerCx2PioTransmitWriteBuffer chiamata è sufficiente se questa chiamata può trasferire il contenuto completo del buffer di scrittura alla trasmissione FIFO. In caso contrario, SerCx2 continua a chiamare questa funzione, poiché più spazio diventa disponibile nel FIFO di trasmissione, fino a quando il buffer di scrittura non viene svuotato.
A partire dal primo byte nel buffer di scrittura, la funzione EvtSerCx2PioTransmitWriteBuffer usa PIO per trasferire il maggior numero di byte possibile dal buffer alla trasmissione FIFO. La funzione continua a trasferire i dati dal buffer finché il buffer non è vuoto e il registro dello stato della riga (LSR) indica che fiFO può accettare più dati. Se l'LSR indica che FIFO non può accettare altri dati, la funzione restituisce senza svuotare il buffer. In caso contrario, la funzione trasferisce tutti i byte nel buffer e restituisce. In entrambi i casi, il valore restituito da questa funzione è il numero di byte di dati trasferiti correttamente dal buffer di scrittura alla trasmissione FIFO.
In genere, la funzione EvtSerCx2PioTransmitWriteBuffer non abilita interruzioni. Se invece la funzione non è in grado di trasferire l'intero contenuto del buffer di scrittura alla trasmissione FIFO, SerCx2 chiama il EvtSerCx2PioTransmitEnableReadyNotification funzione di callback degli eventi per abilitare una notifica pronta e questa funzione abilita un interrupt che si verifica quando la trasmissione FIFO diventa vuota.
Per ogni chiamata successiva alla funzione EvtSerCx2PioTransmitWriteBuffer, SerCx2 regola buffer in modo che punti ai dati rimanenti nel buffer e imposta Length sul numero di byte di dati che rimangono nel buffer.
La notifica pronta non viene mai abilitata quando SerCx2 chiama la funzione EvtSerCx2PioTransmitEnableReadyNotification. Tuttavia, SerCx2 potrebbe chiamare questa funzione dallo stesso thread da cui il driver ha chiamato il metodo SerCx2PioTransmitReady.
Se il driver implementa una funzione EvtSerCx2PioTransmitInitializeTransaction, SerCx2 chiama questa funzione all'inizio di una transazione di trasmissione PIO prima della prima chiamata alla funzione EvtSerCx2PioTransmitWriteBuffer. Se il driver implementa una funzione EvtSerCx2PioTransmitCleanupTransaction, SerCx2 chiama questa funzione alla fine di una transazione di trasmissione PIO, dopo l'ultima chiamata EvtSerCx2PioTransmitWriteBuffer e dopo qualsiasi chiamata al EvtSerCx2PioTransmitDrainFifo, EvtSerCx2PioTransmitCancelDrainFifoe EvtSerCx2PioTransmitPurgeFifo funzioni, se implementate.
Per altre informazioni sulle transazioni di trasmissione PIO, vedere SerCx2 PIO-Transmit Transactions.
Esempi
Per definire un EvtSerCx2PioTransmitWriteBuffer funzione di callback, è prima necessario fornire una dichiarazione di funzione che identifica il tipo di funzione di callback che si sta definendo. Windows fornisce un set di tipi di funzione di callback per i driver. La dichiarazione di una funzione usando i tipi di funzione di callback consente di
Ad esempio, per definire un EvtSerCx2PioTransmitWriteBuffer funzione di callback denominata MyPioTransmitWriteBuffer
, usare il tipo di funzione EVT_SERCX2_PIO_TRANSMIT_WRITE_BUFFER, come illustrato in questo esempio di codice:
EVT_SERCX2_PIO_TRANSMIT_WRITE_BUFFER MyPioTransmitWriteBuffer;
Implementare quindi la funzione di callback come segue:
_Use_decl_annotations_
ULONG
MyPioTransmitWriteBuffer(
SERCX2PIOTRANSMIT PioTransmit,
PUCHAR Buffer,
ULONG Length
)
{...}
Il tipo di funzione EVT_SERCX2_PIO_TRANSMIT_WRITE_BUFFER è definito nel file di intestazione Sercx.h. Per identificare in modo più accurato gli errori quando si eseguono gli strumenti di analisi del codice, assicurarsi di aggiungere l'annotazione Use_decl_annotations alla definizione della funzione. L'annotazione Use_decl_annotations assicura che vengano utilizzate le annotazioni applicate al tipo di funzione EVT_SERCX2_PIO_TRANSMIT_WRITE_BUFFER nel file di intestazione. Per altre informazioni sui requisiti per le dichiarazioni di funzione, vedere Dichiarazione di funzioni tramite i tipi di ruolo della funzione per i driver KMDF. Per altre informazioni su Use_decl_annotations, vedere l'annotazione del comportamento della funzione.
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Disponibile a partire da Windows 8.1. |
piattaforma di destinazione | Desktop |
intestazione |
sercx.h |
IRQL | Chiamato in IRQL <= DISPATCH_LEVEL. |
Vedere anche
EvtSerCx2PioTransmitCancelDrainFifo
EvtSerCx2PioTransmitEnableReadyNotification