Поделиться через


События связи

Процесс может отслеживать набор событий, происходящих в ресурсе связи. Например, приложение может использовать мониторинг событий для определения состояния изменения состояния изменения сигналов CTS (clear-to-send) и DSR (data-set-ready).

Процесс может отслеживать события в заданном ресурсе связи с помощью функции SetCommMask для создания маски событий. Чтобы определить текущую маску событий для ресурса связи, процесс может использовать функцию GetCommMask. Следующие значения указывают события, которые можно отслеживать.

Значение Значение
EV_BREAK Разрыв был обнаружен при входных данных.
EV_CTS Сигнал CTS (clear-to-send) изменил состояние.
EV_DSR Изменено состояние сигнала DSR (готово к набору данных).
EV_ERR Произошла ошибка состояния строки. Ошибки состояния строки: CE_FRAME, CE_OVERRUN и CE_RXPARITY.
EV_RING Обнаружен индикатор кольца.
EV_RLSD Изменено состояние сигнала RLSD (receive-line-signal-detect).
EV_RXCHAR Символ был получен и помещен в входной буфер.
EV_RXFLAG Символ события был получен и помещен в входной буфер. Символ события указывается в структуре DCB устройства, которая применяется к последовательному порту с помощью функции SetCommState.
EV_TXEMPTY Последний символ в выходном буфере был отправлен.

 

После указания набора событий процесс использует функцию WaitCommEvent для ожидания одного из событий. WaitCommEvent можно использовать синхронно или как перекрываемую операцию. Дополнительные сведения о выполнении функции в качестве перекрывающейся операции см. в разделе "Синхронизация".

При возникновении одного из событий, указанного в маске события, процесс завершает операцию ожидания и задает переменную маски события, чтобы указать тип обнаруженного события. Если setCommMask вызывается для ресурса связи во время ожидания для этого ресурса, WaitCommEvent возвращает ошибку.

Функция WaitCommEvent обнаруживает события, произошедшие с момента последнего вызова SetCommMask или WaitCommEvent. Например, если указать событие EV_RXCHAR в качестве события ожидания, вызов WaitCommEvent будет удовлетворен, если в входном буфере драйвера есть символы, которые прибыли с момента последнего вызова WaitCommEvent или SetCommMask. Таким образом, учитывая следующий псевдокод, все символы, полученные между T1 и T2, удовлетворяют следующему вызову WaitCommEvent.

while (!bFinished) 
{ 
    WaitCommEvent(args)
 
T1: // Read bytes 
    // Process bytes 

T2: 
}

При мониторинге события, возникающего при изменении состояния сигнала (CTS, DSR и т. д.), WaitCommEvent сообщает об изменении, но не текущем состоянии. Чтобы запросить текущее состояние CTS (clear-to-send), DSR (готово к набору данных), RLSD (get-line-signal-detect) и сигналов кольцевого индикатора, процесс может использовать функцию GetCommModemStatus.