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


         

Введение


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

                                                                                                  Автор:    Титов Олег

Функция CreateFile  1

Функция CloseHandle  2

Структура DCB   3

Функция BuildCommDCB   6

Функция GetCommState  7

Функция SetCommState  7

Структура COMMTIMEOUTS  7

Функция BuildCommDCBAndTimeouts  9

Функция GetCommTimeouts  9

Функция SetCommTimeouts  9

Структура COMMPROP  10

Структура COMMCONFIG   14

Функция GetCommConfig  14

Функция CommConfigDialog  15

Функция SetCommConfig  16

Функции GetDefaultCommConfig и SetDegaultCommConfig  16

Функция SetupComm   16

Функцити ReadFile и WriteFile  17

Функция PurgeComm   18

Функция FlushFileBuffers  18

Функция TransmitCommChar 19

Функции SetCommBreak и ClearCommBreak  19

Функция EscapeCommFunction  19

Функция ClearCommError 19

Структура COMMSTAT   20

Функция SetCommMask  21

Функция GetCommMask  21

Функция WaitCommEvent 22

Структура OVERLAPPED   22

Мне часто задают вопросы о работе с СОМ портами из программ, написанных для Windows 95/98/NT. Причем чаще всего спрашивают разработчики всевозможных управляющих устройств. Эти устройства либо были разработаны давно, еще в эпоху MS-DOS, либо разрабатываются сейчас. Но объединяет их одно - устройство должно подключаться к компьютеру, в большинстве случаев через RS-232 (COM), реже, через Centronics (LPT).

В литературе, чаще всего, управление последовательным и параллельным портами описывается на уровне регистров этих портов, причем примеры программ приводятся на языке Assembler. Это не удивительно. Последовательный порт довольно медленное устройство, к тому же специфическое. Поэтому в программах работающих с портами используются прерывания. Параллельный порт быстрее, но тоже медленный и не менее специфичный. Взять хотя бы возможность этого порта работать в двух направлениях, да еще и с использованием ПДП (DMA).

Написать программу, управляющую устройством через COM порт, для MS-DOS не так сложно. Это частенько делали не программисты, а сами разработчики устройства. Сложнее было сделать красивый и удобный интерфейс пользователя. Этим обычно занимались профессиональные программисты. С платформой Win32 дело обстоит сложнее. Но только на первый взгляд. Конечно, напрямую работать с регистрами портов нельзя, Windows это не позволяет, зато можно не обращать внимания на тонкости различных реализаций (i8055, 16450, 16550A) и не возиться с обработкой прерываний.

Описание программирования будет состоять из подробного описания функций, специфических для работы с портами, краткого описания функций работы с файлами (с портами в Win32 работают как с файлами), краткого описания функций многопотоковой обработки и, естественно, примеров программ.




Содержание    Вперед