LibKing » Книги » comp-programming » Олег Титов - Работа с COM и LPT в Win32.

Олег Титов - Работа с COM и LPT в Win32.

Тут можно читать онлайн Олег Титов - Работа с COM и LPT в Win32. - бесплатно полную версию книги (целиком). Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте LibKing.Ru (ЛибКинг) или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
libking
  • Название:
    Работа с COM и LPT в Win32.
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4.12/5. Голосов: 81
  • Избранное:
    Добавить в избранное
  • Ваша оценка:

Олег Титов - Работа с COM и LPT в Win32. краткое содержание

Работа с COM и LPT в Win32. - описание и краткое содержание, автор Олег Титов, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Работа с COM и LPT в Win32. - читать онлайн бесплатно полную версию (весь текст целиком)

Работа с COM и LPT в Win32. - читать книгу онлайн бесплатно, автор Олег Титов
Тёмная тема

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать
PCF_16BITMODE Поддерживается специальный 16-битный режим
PCF_DTRDSR Поддерживаются сигналы DTR/DSR.
PCF_INTTIMEOUTS Поддерживается межсимвольный тайм-аут.
PCF_PARITY_CHECK Поддерживается контроль четности.
PCF_RLSD Поддерживается определение наличия сигнала в приемной линии.
PCF_RTSCTS Поддерживаются сигналы RTS/CTS.
PCF_SETXCHAR Поддерживаются задаваемые символы XON/XOFF.
PCF_SPECIALCHARS Поддерживаются спецсимволы.
PCF_TOTALTIMEOUTS Поддерживаются общие тайм-ауты (ожидаемое время).
PCF_XONXOFF Поддерживается программное (XON/XOFF) управление потоком.

dwSettableParams

Битовая маска. Определяет допустимые для изменения параметры. Возможны следующие значения:

SP_BAUD Скорость обмена.
SP_DATABITS Бит в символе.
SP_HANDSHAKING Рукопожатие (управление потоком).
SP_PARITY Четность.
SP_PARITY_CHECK Контроль четности.
SP_RLSD Детектирование наличия сигнала в приемной линии.
SP_STOPBITS Количество стоповых бит.

dwSettableBaud

Битовая маска. Определяет допустимый набор скоростей обмена. Допустимые для данного поля значения указаны в описании поля dwMaxBaud.

wSettableData

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

DATABITS_5 5 бит
DATABITS_6 6 бит
DATABITS_7 7 бит
DATABITS_8 8 бит
DATABITS_16 16 бит
DATABITS_16Х Специальный широкий канал через аппаратную последовательную линию.

wSettableStopParity

Битовая маска. Определяет допустимое количество стоповых бит и режимы четности. Возможны следующие значения:

STOPBITS_10 Один стоповый бит
STOPBITS_15 Полтора стоповыx бита
STOPBITS_20 Два стоповых бита
PARITY_NONE Без четности
PARITY_ODD Дополнение до нечетности
PARITY_EVEN Дополнение до четности
PARITY_MARK Бит четности всегда "1"
PARITY_SPACE Бит четности всегда "0"

dwCurrentTxQueue

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

dwCurrentRxQueue

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

dwProvSpec1

Устройство-зависимые данные. Программа должна игнорировать содержимое данного поля, за исключением случаев, когда Вы точно знаете формат этих данных. Занесите в данное поле значение COMMPROP_INITIALIZED, если поле wPacketLength уже содержит правильное значение.

dwProvSpec2

Устройство-зависимые данные. Программа должна игнорировать содержимое данного поля, за исключением случаев, когда Вы точно знаете формат этих данных.

wcProvChar

Устройство-зависимые данные. Программа должна игнорировать содержимое данного поля, за исключением случаев, когда Вы точно знаете формат этих данных.

Информация хранящаяся в структуре COMMPROP требуется редко, так как чаще всего точно известно с каким типом портов будет работать программа.

Остановлюсь чуть подробнее на описании некоторых полей. Поле wPacketLength играет несколько иную роль, чем поле DCBlength структуры DCB, хотя из его описания это не следует. Секрет прост. Поле wcProvChar, расположеное в конце структуры, может содержать, а может и не содержать, данных. Вы не в состоянии это узнать не запросив информацию. В свою очередь, перед запросом информации Вы должны выделить (и обнулить) память под структуру COMMPROP. Поэтому последовательность шагов для получения всей информации следующая:

• Выделить память под структуру COMMPROP.

• Запросить информацию у системы вызвав функцию GetCommProperties.

• Если поле wPacketLength содержит значение большее sizeof(COMMPROP), то имеется дополнительная информация. Для ее получения измените размер ранее выделенного блока памяти, новый размер должен быть равен значению занесенному системой в поле wPacketLength. Установите в поле wProvSpec1 значение COMMPROP_INITIALIZED, это будет означать, что выделен достаточный блок памяти для получения дополнительной информации. Повторно вызовите функцию GetCommProperties.

Чаще всего дополнительная информация представлена в виде структуры MODEMDEVCAPS, которая размещается на месте поля wcProvChar, если поле dwProvSubType содержит значение PST_MODEM.

Получить информацию об устройстве в виде структуры COMMPROP можно уже упоминавшейся функцией GetCommProperies. Вот как выглядит ее прототип:

BOOL GetCommProperties(HANDLE hFile, LPCOMMPROP lpCommProp);

Запросить информацию можно только об уже открытом устройстве. При этом для структуры, адресуемой вторым параметром, должна быть выделена память. Приведу пример получения информации о коммуникационном устройстве:

#include

. . .

HANDLE port;

COMMPROP *pr;

. . .

port = CreateFile("COM2", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

pr = (COMMPROP*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(COMMPROP));

GetCommProperties(port, pr);

if (pr->wPacketLength != sizeof(COMMPROP)) {

pr=(COMMPROP*)HeapRealloc(GetProcessHeap(), HEAP_ZERO_MEMORY, pr, pr->wPacketLength);

pr->wProvSpec1=COMMPROP_INITIALIZED;

GetCommProperties(port, pr);

}

. . .

HeapFree(GetProcessHeap(),0,pr);

CloseHandle(port);

. . .

Не всегда настройку порта можно жестко зашить в код программы. Внешние устройства могут позволять изменять параметры линии связи, чаще всего скорость обмена, которая зависит от длины соединительного кабеля. В таких случаях разумно предоставить пользователю самому задавать режимы обмена. Можно самому разработать соответвующий настроечный диалог, а можно воспользоваться стандартным, предоставляемым операционной системой, а точнее, производителем порта. Стандартый диалог выводится функцией CommConfigDialog, которая работает со структурой COMMCONFIG. Как и в случае со структурой DCB, заполнять структуру COMMCONFIG можно вручную или вызовом соответсвующих функций. Начнем с самой структуры COMMCONFIG:

typedef struct _COMM_CONFIG {

DWORD dwSize;

WORD wVersion;

WORD wReserved;

DCB dcb;

DWORD dwProviderSubType;

DWORD dwProviderOffset;

DWORD dwProviderSize;

WCHAR wcProviderData[1];

} COMMCONFIG, *LPCOMMCONFIG;

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

dwSize

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

wVersion

Задает номер версии структуры COMMCONFIG. Должен быть равным 1.

wReserved

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

Читать дальше
Тёмная тема

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать


Олег Титов читать все книги автора по порядку

Олег Титов - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Работа с COM и LPT в Win32. отзывы


Отзывы читателей о книге Работа с COM и LPT в Win32., автор: Олег Титов. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
Большинство книг на сайте опубликовано легально на правах партнёрской программы ЛитРес. Если Ваша книга была опубликована с нарушениями авторских прав, пожалуйста, направьте Вашу жалобу на PGEgaHJlZj0ibWFpbHRvOmFidXNlQGxpYmtpbmcucnUiIHJlbD0ibm9mb2xsb3ciPmFidXNlQGxpYmtpbmcucnU8L2E+ или заполните форму обратной связи.
img img img img img