Condividi tramite


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 l'analisi del codice per i driver, del driver statico (SDV) e altri strumenti di verifica rilevano errori ed è un requisito per la scrittura di driver per il sistema operativo Windows.

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

EvtSerCx2PioTransmitDrainFifo

EvtSerCx2PioTransmitEnableReadyNotification

EvtSerCx2PioTransmitInitializeTransaction

EvtSerCx2PioTransmitPurgeFifo

SERCX2PIOTRANSMIT

SerCx2PioTransmitCreare