События связи
Процесс может отслеживать набор событий, происходящих в ресурсе связи. Например, приложение может использовать мониторинг событий для определения состояния изменения состояния изменения сигналов 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.