Работа с COM и LPT в Win32. | страница 13



Рассмотренные структуры и функции позволяют программировать порт на достаточно низком уровне. Их, в большинстве случаев, более чем достаточно даже для тонкой настройки порта. Однако бывают и исключения. Например, под именем COM1 может скрываться вовсе не привычный порт RS-232, а какая-нибудь экзотика. Или порт может не позволять задавать скорость более 9600.

Исчерпывающая информация о возможностях коммуникационного устройства и драйвера содержится в структуре COMMPROP:

>typedef struct _COMMPROP {

> WORD  wPacketLength;       // packet size, in bytes

> WORD  wPacketVersion;      // packet version

> DWORD dwServiceMask;       // services implemented

> DWORD dwReserved1;         // reserved

> DWORD dwMaxTxQueue;        // max Tx bufsize, in bytes

> DWORD dwMaxRxQueue;        // max Rx bufsize, in bytes

> DWORD dwMaxBaud;           // max baud rate, in bps

> DWORD dwProvSubType;       // specific provider type

> DWORD dwProvCapabilities;  // capabilities supported

> DWORD dwSettableParams;    // changable parameters

> DWORD dwSettableBaud;      // allowable baud rates

> WORD  wSettableData;       // allowable byte sizes

> WORD  wSettableStopParity; // stop bits/parity allowed

> DWORD dwCurrentTxQueue;    // Tx buffer size, in bytes

> DWORD dwCurrentRxQueue;    // Rx buffer size, in bytes

> DWORD dwProvSpec1;         // provider-specific data

> DWORD dwProvSpec2;         // provider-specific data

> WCHAR wcProvChar[1];       // provider-specific data

>} COMMPROP;

Поля этой структуры описывают все возможности драйвера. Вы не можете выйти за пределы этих возможностей. Вот какое значение имеют поля:

wPacketLength

Задает размер, в байтах, структуры COMMPROP.

wPacketVersion

Номер версии структуры.

dwServiceMask

Битовая маска. Для коммуникационных устройств всегда SP_SERIALCOMM, включая модемы.

dwReserved1

Зарезервировано и не используется.

dwMaxTxQueue

Максимальный размер, в байтах, внутреннего буфера передачи драйвера. Нулевое значение свидетельствует об отсутствии ограничения.

dwMaxRxQueue

Максимальный размер, в байтах, внутреннего буфера приема драйвера. Нулевое значение свидетельствует об отсутствии ограничения.

dwMaxBaud

Максимально допустимая скорость обмена, в битах в секунду (бпс). Возможны следующие значения данного поля:

BAUD_075 75 бпс.
BAUD_110 110 бпс.
BAUD_134_5 134.5 бпс.
BAUD_150 150 бпс.
BAUD_300 300 бпс.
BAUD_600 600 бпс.
BAUD_1200 1200 бпс.
BAUD_1800 1800 бпс.
BAUD_2400 2400 бпс.
BAUD_4800 4800 бпс
BAUD_7200 7200 бпс.