EVT_SERCX2_PIO_RECEIVE_READ_BUFFER função de retorno de chamada (sercx.h)
A função de retorno de chamada de evento EvtSerCx2PioReceiveReadBuffer é chamada pela versão 2 da extensão da estrutura serial (SerCx2) para usar o PIO (E/S) programado para transferir dados do FIFO de recebimento no controlador serial para um buffer de leitura.
Sintaxe
EVT_SERCX2_PIO_RECEIVE_READ_BUFFER EvtSercx2PioReceiveReadBuffer;
ULONG EvtSercx2PioReceiveReadBuffer(
[in] SERCX2PIORECEIVE PioReceive,
[out] PUCHAR Buffer,
[in] ULONG Length
)
{...}
Parâmetros
[in] PioReceive
Um identificador de SERCX2PIORECEIVE para um objeto de recebimento de PIO. O driver do controlador serial anteriormente chamou o método SerCx2PioReceiveCreate para criar esse objeto.
[out] Buffer
Um ponteiro para o buffer de leitura. Esse parâmetro é o endereço virtual de um buffer bloqueado na memória do sistema.
[in] Length
O número de bytes no buffer de leitura que estão disponíveis para armazenar dados recebidos.
Valor de retorno
A função EvtSerCx2PioReceiveReadBuffer
Observações
O driver do controlador serial deve implementar essa função. O driver registra a função na chamada SerCx2PioReceiveCreate que cria o objeto pio-receive.
SerCx2 pode chamar a função EvtSerCx2PioReceiveReadBuffer mais de uma vez durante uma transação de recebimento de PIO. Uma única chamada EvtSerCx2PioReceiveReadBuffer for suficiente se essa chamada puder preencher o buffer de leitura com dados do FIFO de recebimento. Caso contrário, o SerCx2 continuará a chamar essa função, à medida que mais dados ficam disponíveis no FIFO de recebimento, até que o buffer de leitura seja preenchido.
A função EvtSerCx2PioReceiveReadBuffer
Normalmente, a função EvtSerCx2PioReceiveReadBuffer não habilita nenhuma interrupção. Em vez disso, se o FIFO de recebimento ficar sem dados antes que a função possa preencher o buffer de leitura, o SerCx2 chamará o EvtSerCx2PioReceiveEnableReadyNotification função de retorno de chamada de evento para habilitar uma notificação pronta e essa função habilitará uma interrupção que ocorre quando mais dados estiverem disponíveis no FIFO de recebimento.
Para cada chamada sucessiva à função EvtSerCx2PioReceiveReadBuffer, o SerCx2 ajusta buffer para apontar para a próxima região do buffer a ser preenchida e define Comprimento para o número de bytes de espaço não preenchido que permanecem no buffer.
A notificação pronta nunca é habilitada quando o SerCx2 chama a função EvtSerCx2PioReceiveEnableReadyNotification. No entanto, SerCx2 pode chamar essa função do mesmo thread do qual o driver chamou o método
Se o driver implementar uma função EvtSerCx2PioReceiveInitializeTransaction, o SerCx2 chamará essa função no início de uma transação de transmissão de PIO antes da primeira chamada para a função EvtSerCx2PioReceiveReadBuffer. Se o driver implementar uma função EvtSerCx2PioReceiveCleanupTransaction, o SerCx2 chamará essa função no final de uma transação de recebimento de PIO, após a chamada final para a função EvtSerCx2PioReceiveReadBuffer.
Além de chamar a função EvtSerCx2PioReceiveReadBuffer durante transações de recebimento de PIO, o SerCx2 chama essa função para salvar o estado do FIFO de recebimento pouco antes do controlador serial sair do estado de energia do dispositivo D0. Para obter mais informações, consulte SerCx2SaveReceiveFifoOnD0Exit.
Para obter mais informações sobre transações de recebimento de PIO, consulte de Transações de PIO-Receive SerCx2.
Exemplos
Para definir uma função de retorno de chamada EvtSerCx2PioReceiveReadBuffer, primeiro você deve fornecer uma declaração de função que identifique o tipo de função de retorno de chamada que você está definindo. O Windows fornece um conjunto de tipos de função de retorno de chamada para drivers. Declarar uma função usando os tipos de função de retorno de chamada ajuda a análise de código para drivers, SDV (Verificador de Driver Estático) e outras ferramentas de verificação encontram erros e é um requisito para gravar drivers para o sistema operacional Windows.
Por exemplo, para definir uma função de retorno de chamada EvtSerCx2PioReceiveReadBuffer denominada MyPioReceiveReadBuffer
, use o tipo de função EVT_SERCX2_PIO_RECEIVE_READ_BUFFER, conforme mostrado neste exemplo de código:
EVT_SERCX2_PIO_RECEIVE_READ_BUFFER MyPioReceiveReadBuffer;
Em seguida, implemente sua função de retorno de chamada da seguinte maneira:
_Use_decl_annotations_
ULONG
MyPioReceiveReadBuffer(
SERCX2PIORECEIVE PioReceive,
PUCHAR Buffer,
ULONG Length
)
{...}
O tipo de função EVT_SERCX2_PIO_RECEIVE_READ_BUFFER é definido no arquivo de cabeçalho Sercx.h. Para identificar erros com mais precisão ao executar as ferramentas de análise de código, adicione a anotação Use_decl_annotations à sua definição de função. A anotação Use_decl_annotations garante que as anotações aplicadas ao tipo de função EVT_SERCX2_PIO_RECEIVE_READ_BUFFER no arquivo de cabeçalho sejam usadas. Para obter mais informações sobre os requisitos para declarações de função, consulte Declarando funções usando tipos de função de função para drivers KMDF. Para obter mais informações sobre Use_decl_annotations, consulte Anotando o comportamento da função.
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Disponível a partir do Windows 8.1. |
da Plataforma de Destino |
Área de trabalho |
cabeçalho | sercx.h |
IRQL | Chamado no <DO IRQL = DISPATCH_LEVEL. |
Consulte também
EvtSerCx2PioReceiveCleanupTransaction
EvtSerCx2PioReceiveEnableReadyNotification