Работа с коммуникационными портами (COM и LPT) в программах для Win32

       

Функция PurgeComm


Коммуникационный порт не совсем обычный файл. Например, для него нельзя выполнить операцию позиционирования файлового указателя. С другой стороны, порт позволяет управлять потоком, что нельзя делать с обычным файлом. Настало время познакомиться с функциями управления приемом/передачей данных через коммуникационные порты. Поскольку первой операцией, после открытия порта, является его сброс, то и начнем с функции выполняющей требуемые действия.

   BOOL PurgeComm(

      HANDLE hFile,

      DWORD  dwFlags

   );

Вызов этой функции позволяет решить две задачи: очистить очереди приема/передачи в драйвере и завершить все находящиеся в ожидании запросы ввода/вывода. Какие именно действия выполнять, задается вторым параметром (значения можно комбинировать с помощью побитовой операции OR):

  • PURGE_TXABORT         Немедленно прекращает все операции записи, даже если они не завершены
  • PURGE_RXABORT         Немедленно прекращает все операции чтения, даже если они не завершены
  • PURGE_TXCLEAR          Очищает очередь передачи в драйвере
  • PURGE_RXCLEAR          Очищает очередь приема в драйвере

Вызов этой функции нужен для отбрасывания мусора, который может находиться в приемном буфере на момент запуска программы, или как результат ошибки в работе устройства. Очистка буфера передачи и завершение операций ввода/вывода так же потребуются при ошибке, как процедура восстановления, и при завершении программы, для красивого выхода.



Содержание раздела