Библиотека knigago >> Компьютеры: Операционные системы >> Windows >> Работа с COM и LPT в Win32.


СЛУЧАЙНЫЙ КОММЕНТАРИЙ

# 884, книга: Мать Майи
автор: Бентли Литтл

"Мать Майи" - это леденящий кровь роман ужасов, который оставит у вас мурашки по коже еще долго после того, как вы перевернете последнюю страницу. Бентли Литтл с мастерством создает атмосферу потустороннего и ужасающего, увлекая читателей в мир, где реальность и кошмар сливаются в зловещем танце. В центре сюжета - Сара Монтгомери, обычная женщина, которая становится жертвой необъяснимого преследования со стороны загадочной "Матери Майи". Эта фигура из кошмаров появляется в...

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

Работа с COM и LPT в Win32.
Книга - Работа с COM и LPT в Win32..  Олег Титов  - прочитать полностью в библиотеке КнигаГо
Название:
Работа с COM и LPT в Win32.
Олег Титов

Жанр:

Самиздат, сетевая литература, Литература ХX века (эпоха Социальных революций), Windows, Системное программирование, Windows API

Изадано в серии:

неизвестно

Издательство:

неизвестно

Год издания:

-

ISBN:

неизвестно

Отзывы:

Комментировать

Рейтинг:

Поделись книгой с друзьями!

Помощь сайту: донат на оплату сервера

Краткое содержание книги "Работа с COM и LPT в Win32."

Аннотация к этой книге отсутствует.

Читаем онлайн "Работа с COM и LPT в Win32.". [Страница - 2]

Поддерживается только в Windows NT. Однако при работе с портами должен в любом случае равняться NULL.

dwCreationDistribution

Управляет режимами автосоздания, автоусечения файла и им подобными. Для коммуникационных портов всегда должно задаваться OPEN_EXISTING.

dwFlagsAndAttributes

Задает атрибуты создаваемого файла. Так же управляет различными режимами обработки. Для наших целей этот параметр должен быть или равным 0, или FILE_FLAG_OVERLAPPED. Нулевое значение используется при синхронной работе с портом, а FILE_FLAG_OVERLAPPED при асинхронной, или другими словами, при фоновой обработке ввода/вывода. Подробнее про асинхронный ввод/вывод я расскажу позже.

hTemplateFile

Задает описатель файла-шаблона. При работе с портами всегда должен быть равен NULL.

При успешном открытии файла, в нашем случае порта, функция возвращает описатель (HANDLE) файла. При ошибке INVALID_HANDLE_VALUE. Код ошибки можно получитить вызвав функцию GetLastError, но ее описание выходит за рамки данной статьи.

Открытый порт должен быть закрыт перед завершением работы программы. В Win32 закрытие объекта по его описателю выполняет функция CloseHandle:

BOOL CloseHandle(HANDLE hObject);

Функция имеет единственный параметр – описатель закрываемого объекта. При успешном завершении функция возвращает не нулевое значение, при ошибке нуль.

Теперь пример (достаточно очевидный):

#include <windows.h>

. . .

HANDLE port;

. . .

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

if (port==INVALID_HANDLE_VALUE) {

 MsgBox(NULL, "Невозможно открыть последовательный порт", "Error", MB_OK);

 ExitProcess(1);

}

. . .

CloseHandle(port);

. . .

В данном примере открывается порт СОМ2 для чтения и записи, используется синхронный режим обмена. Проверяется успешность открытия порта, при ошибке выводится сообщение и программа завершается. Если порт открыт успешно, то он закрывается.

Открыв порт мы получили его в свое распоряжение. Теперь с портом может работать только наша программа. Однако, прежде чем мы займемся вводом/выводом, мы должны настроить порт. Это касается только последовательных портов, для которых мы должны задать скорость обмена, параметры четности, формат данных и прочее. Кроме того существует несколько специфичных для Windows параметров. Речь идет о тайм-аутах, которые позволяют контролировать как интервал между принимаемыми байтами, так и общее время приема сообщения. Есть возможность управлять состоянием сигналов управления модемом. Но обо всем по порядку.

Основные параметры последовательного порта описываются структурой DCB. Временные параметры структурой COMMTIMEOUTS. Существует еще несколько информационных и управляющих структур, но они используются реже. Настройка порта заключается в заполнении управляющих структур и последующем вызове функций настройки.

Поскольку основную информацию содержит структура DCB с ее описания и начнем:

typedef struct _DCB {

 DWORD DCBlength;            // sizeof(DCB)

 DWORD BaudRate;             // current baud rate

 DWORD fBinary:1;            // binary mode, no EOF check

 DWORD fParity:1;            // enable parity checking

 DWORD fOutxCtsFlow:1;       // CTS output flow control

 DWORD fOutxDsrFlow:1;       // DSR output flow control

 DWORD fDtrControl:2;        // DTR flow control type

 DWORD fDsrSensitivity:1;    // DSR sensitivity

 DWORD fTXContinueOnXoff:1;  // XOFF continues Tx

 DWORD fOutX:1;              // XON/XOFF out flow control

 DWORD fInX:1;               // XON/XOFF in flow control

 DWORD fErrorChar:1;         // enable error replacement

 DWORD fNull:1;              // enable null stripping

 DWORD fRtsControl:2;        // RTS flow control

 DWORD fAbortOnError:1;      // abort reads/writes on error

 DWORD fDummy2:17;           // reserved

 WORD  wReserved;            // not currently used

 WORD  XonLim;               // transmit XON threshold

 WORD  XoffLim;              // transmit XOFF threshold

 BYTE  ByteSize;             // number of bits/byte, 4-8

 BYTE  Parity;               // 0-4=no,odd,even,mark,space

 BYTE  StopBits;             // 0,1,2 = 1, 1.5, 2

 char  XonChar;              // Tx and Rx XON character

 char  XoffChar;             // Tx and Rx XOFF character

 char  ErrorChar;            // error replacement character

 char  EofChar;              // end of input character

 char  EvtChar;              // received event character

 WORD  wReserved1;           // reserved; do not use

} DCB;

Если внимательно присмотреться, то можно заметить, что эта структура содержит почти всю управляющую информацию, которая в реальности располагается в различных регистрах последовательного порта. Теперь разберемся, что означает каждое из полей самой важной структуры:

DCBlength

Задает длину, в байтах, структуры DCB. Используется для контроля корректности структуры при передаче ее адреса в функции настройки порта.

BaudRate

Скорость --">

Оставить комментарий:


Ваш e-mail является приватным и не будет опубликован в комментарии.