Using Communication Events
9/8/2008
A evento de comunicação é uma notificação enviada por Windows Embedded CE para um aplicativo quando ocorre um incidente significativo.
Usando o WaitCommEvent função, um aplicativo pode bloco um segmento até que ocorra um evento específico.
Um chamar para o SetCommMask função especifica qual evento ou eventos devem ocorrer antes que processamento possa continuar.
Quando more than um evento é especificado, qualquer único evento especificado que ocorre causas WaitCommEvent Para retornar.
De exemplo, esse mecanismo permite que um aplicativo para localizar fora quando dados chegam a porta serial. Por aguardando uma comunicação evento que indica dados estiver presente, um aplicativo evita forestalling o porta serial com um chamar para o ReadFile função que aguarda dados para chegar. ReadFile é chamado apenas quando há dados para ler.
O seguinte é eventos de comunicação um aplicativo pode usar com o WaitCommEvent função.
Evento | Descrição |
---|---|
EV_BREAK |
Um interromper ocorreu na entrada. |
EV_CTS |
O CTS sinal estado alterado. |
EV_DSR |
O sinal DSR alterado estado. |
EV_ERR |
Uma linha-Erro status. Linha-status erros são CE_FRAME, CE_OVERRUN e CE_RXPARITY. |
EV_RING |
Um indicador de Toque detectado. |
EV_RLSD |
A recepção-linha - sinal - detecção sinal alterado estado. |
EV_RXCHAR |
Um caractere foi recebida e colocada na buffer de entrada. |
EV_RXFLAG |
O caractere evento foi recebida e colocada na buffer de entrada. |
EV_TXEMPTY |
O último caractere na reserva de saída foi enviada. |
Para usar os eventos de comunicação
Especificar eventos para aspecto para com um chamar para o SetCommMask função.
Chamar o WaitCommEvent função.
Quando um aplicativo especifica more than um evento, a lpEvtMask parâmetro aponta para uma variável que identifica o evento que causou WaitCommEvent Para retornar.
Chamar SetCommMask novamente para especificar quais eventos aspecto para.
SetCommMask é o primeiro chamar em um executar um loop que os aplicativos geralmente usam para monitor um dados porta serial e ler.
O seguinte exemplo de código mostra como usar eventos de comunicação para essa finalidade.
Observação
O seguinte codificar pressupõe que tempos limite está definida para algo relativamente curto. Se tempos limite não estiverem definida, o amostra de código bloqueia em Readfile indefinidamente.
BYTE Byte;
DWORD dwBytesTransferred;
// Specify a set of events to be monitored for the port.
SetCommMask (hPort, EV_RXCHAR | EV_CTS | EV_DSR | EV_RLSD | EV_RING);
while (hPort != INVALID_HANDLE_VALUE)
{
// Wait for an event to occur for the port.
WaitCommEvent (hPort, &dwCommModemStatus, 0);
// Re-specify the set of events to be monitored for the port.
SetCommMask (hPort, EV_RXCHAR | EV_CTS | EV_DSR | EV_RING);
if (dwCommModemStatus & EV_RXCHAR)
{
// Loop for waiting for the data.
do
{
// Read the data from the serial port.
ReadFile (hPort, &Byte, 1, &dwBytesTransferred, 0);
// Display the data read.
if (dwBytesTransferred == 1)
ProcessChar (Byte);
} while (dwBytesTransferred == 1);
}