Статьи Королевства Дельфи


Часть IV - часть 3


GetCommTimeouts
функция находится в файле kernel32.dll

Функция GetCommTimeouts считывает структуру _COMMTIMEOUTS с указанного порта и заполняет параметры значениями по умолчанию.

Описание в эквиваленте C

BOOL GetCommTimeouts( HANDLE hFile, LPCOMMTIMEOUTS lpCommTimeouts );

Параметры :

HFileДескриптор указывающий на порт (этот дескриптор может быть создан с помощью CreateFile, OpenFile) LpCommTimeoutsСтруктура LPCOMMTIMEOUTS

Возвращаемое значение :

Если функция выполняется успешно, возвращаемое значение - TRUE иначе возвращаемое значение - FALSE . При возникновении ошибки код ошибки можно получить используя GetLastError

Ну и соответственно -

SetCommTimeouts
функция находится в файле kernel32.dll

Функция SetCommTimeouts устанавливает тайм-ауты порта

Описание в эквиваленте C

BOOL SetCommTimeouts( HANDLE hFile, LPCOMMTIMEOUTS lpCommTimeouts );

Параметры :

HFileДескриптор указывающий на порт (этот дескриптор может быть создан с помощью CreateFile, OpenFile) LpCommTimeoutsСтруктура LPCOMMTIMEOUTS

Возвращаемое значение :

Если функция выполняется успешно, возвращаемое значение - TRUE иначе возвращаемое значение - FALSE . При возникновении ошибки код ошибки можно получить используя GetLastError

Параметры этих функций очевидны. Хочется отметить что установку тайм-аутов можно производить как до установки параметров порта, так и после, т.е последовательность вызова функций SetCommState и SetCommTimeouts не имеет значения. Главное, что бы все настройки были завершены до начала ввода/вывода информации.

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

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

COMMPROP

typedef struct _COMMPROP { WORD wPacketLength; // Задает размер, в байтах, // структуры COMMPROP WORD wPacketVersion; // Номер версии DWORD dwServiceMask; // Битовая маска DWORD dwReserved1; // reserved DWORD dwMaxTxQueue; // max буфер передачи DWORD dwMaxRxQueue; // max буфер приема DWORD dwMaxBaud; // max допустимая скорость обмена DWORD dwProvSubType; // Тип коммуникац.порта DWORD dwProvCapabilities; // Возможности перед.устройства DWORD dwSettableParams; // Допустимые для изменения // параметры DWORD dwSettableBaud; // Допустимый набор скоростей // обмена WORD wSettableData; // допустимые длины символов WORD wSettableStopParity; // Допуст.кол-во стоповых бит DWORD dwCurrentTxQueue; // Текущий размер буфер передачи DWORD dwCurrentRxQueue; // Текущий размер буфер приема DWORD dwProvSpec1; // Устройство-зависимые данные DWORD dwProvSpec2; // Устройство-зависимые данные WCHAR wcProvChar[1]; // Устройство-зависимые данные } COMMPROP; Поля этой структуры описывают все возможности драйвера. Вы не можете выйти за пределы этих возможностей. Вот какое значение имеют поля:




Начало  Назад  Вперед