Вход/Регистрация
Интернет-журнал "Домашняя лаборатория", 2007 №8
вернуться

Журнал «Домашняя лаборатория»

Шрифт:

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

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

BOOL GetCommProperties(

HANDLE hFile,

LPCOMMPROP lpCommProp

);

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

#include <windows.h>

…

HANDLE port;

COMMPROP *pr;

…

port=CreateFile("COM2",GENERIC_READ|GENERIC_WRIТЕ,0,NULL,OPEN_EXISTING,0,NULL);

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

GetCommProperties(port,pr);

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

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

pr->wProvSpecl=COMMPROP_INITIALIZED;

GetCommProperties(port,pr);

}

…

HeapFree(GetProcessHeap,0,pr);

CloseHandle(port);

…

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

Структура COMMCONFIG

Начнем с самой структуры COMMCONFIG:

typedef struct _COMM_CONFIG {{

DWORD dwSize;

WORD wVersion;

WORD wReserved;

DCB dсb;

DWORD dwProviderSubType;

DWORD dwProviderOffset;

DWORD dwProviderSize;

WCHAR wcProviderData[1];

} COMMCONFIG, *LPCOMMCONFIG;

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

• dwSize

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

• wVersion

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

• wReserved

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

• dcb

Блок управления устройством (DCB) для порта RS-232.

• dwProviderSubType

Задает тип устройства и формат устройство-зависимого блока информации. Фактически это тип порта. Конкретные значения данного поля приведены в описании структуры COMMPROP выше.

• dwProviderOffset

Смещение, в байтах, до устройство-зависимого блока информации от начала структуры.

• dwProviderSize

Размер, в байтах, устройство-зависимого блока информации.

• wcProviderData

Устройство-зависимый блок информации. Это поле может быть любого размера или вообще отсутствовать. Поскольку структура COMMCONFIG может быть в дальнейшем расширена, для определения положения данного поля следует использовать dwProviderOffset. Если dwProviderSubType PST_RS232 или PST_PARALLELPORT, то данное поле отсутствует. Если dwProviderSubType PST_MODEM, то данное поле содержит структуру MODEMSETTINGS.

Функция GetCommConfig

Несмотря на то, что нам нужен только DCB, приходится иметь дело со всеми полями. Заполнение данной структуры противоречивыми данными может привести к неправильной настройке порта, поэтому следует пользоваться функцией GetCommConfig:

BOOL GetCommConfig(

HANDLE hCommDev,

LPCOMMCONFIG lpCC,

LPDWORD lpdwSize

);

  • Читать дальше
  • 1
  • ...
  • 397
  • 398
  • 399
  • 400
  • 401
  • 402
  • 403
  • 404
  • 405
  • 406
  • 407
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: