PHP Delphi CSS HTML JavaScript Perl API ASP MySQL XML С++ VBasic WEB разработка *NIX CouchDB Hack Python
Главная Статьи Delphi Работа с COM под Windows
Главная
 Главная  Контакты
 
Программинг
Статьи Книги ЧаВО
 
xBOOKi
Fresh Books Операционки Сети
 
Поиск
-------
 
Counters
Яндекс цитирования
Rambler's Top100
-------
 
CryptDisk.4h
Программа которая позволяет создать виртуальный шифрованный логический диск.

cryptdisk.4hack.com

-------
 
 

Работа с COM под Windows


Win API стандартизирует работу с оборудованием. Для получения доступа к аппаратуре используется следующая последовательность шагов:'

1. Получить Handler устройства вызовом CreateFile с именем устройства. Более подробно см Windows SDK Help.

2. Для управления устройством вызывать функции API для данного устройства, либо посылать IOCTL(input - otput control) последнее через DeviceIOCtl(подробно см Windows SDK Help).

3. Закрыть устройство CloseHandle(Handler);

Последовательный порт под Win

Открытие порта:

Var
FHandle: Thandle;

FHandle := CreateFile(
PChar(ComString),
GENERIC_READ or GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
0);

Параметр 1: Имя порта - 'COM1', итд

Параметр 2: режим открытия GENERIC_READ - чтение, GENERIC_WRITE - запись

Параметр 3: режим разделения ресуртса. Примечание: 0 - неразделяемый (именно так описано открытие последовательного порта в WIN SDK, другие режимы не проверял).

Параметр 4: Режим безопасности. Имеет смысл в Windows NT, Windows 9x игнорирует его.

Параметр 5: Способ открытия. Для порта - OPEN_EXISTING - открыть, когда устройство реально существует.

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

Параметр7: шаблон файла, для последовательного порта - всегда 0.

В случае нормального открытия порта FHandle - дескриптор порта, при неудаче содержит значение INVALID_HANDLE_VALUE.

Закрытие порта:
Закрытие порта выполняется вызовом CloseHandle(FHandle).

Настройка параметров передачи (скорость, кол-во бит, стоп биты)
Структура данных о настройках порта (device control block) DCB содержит информацию о настройках порта. Поля структуры:

DWORD DCBlength; // sizeof(DCB)
DWORD BaudRate // Скорость передачи (baud rate). Есть стандартный набор
// скоростей: все константы скоростей выглядят как CBR_<число>.
//Пример CBR_9600, CBR_115200.

Flags
DWORD fBinary: // режим проверки символа Eof - включение данного режима Windows
// не поддерживает ( по крайней мере сейчас). Маска
DWORD fParity: //Контроль четности Маска - включение контроля четности
DWORD fOutxCtsFlow: // Маска - Включение контроля сигнала CTS при выводе байтов.
DWORD fOutxDsrFlow: // Маска - Включение контроля сигнала DSR при выводе байтов.
DWORD fDtrControl: // Маска - Тип контроля сигнала DTR: значения
DTR_CONTROL_DISABLE деактивация сигнала.
DTR_CONTROL_ENABLE конкретное значение сигнала можно задавать через
вызов EscapeCommFunction.
DTR_CONTROL_HANDSHAKE Автоматическое управление сигналом.
DWORD fDsrSensitivity: // Маска - Включение контроля сигнала DSR.
DWORD fTXContinueOnXoff:1; // XOFF continues Tx
DWORD fOutX: // Маска 0. Включение режима работы по XON XOFF при передаче
DWORD fInX: // Маска 0 -//- при приеме
DWORD fErrorChar: // Маска 0. Разрешение замещения при ошибочном приеме
// (несовпадение четности) принятого байта на член структуры ErrorChar.
DWORD fNull: // Маска 0 enable null stripping - пропускать при приеме символы NULL
DWORD fRtsControl: // Маска 00. Тип контроля:
RTS_CONTROL_DISABLE
RTS_CONTROL_ENABLE
RTS_CONTROL_HANDSHAKE Аналогично сигналу DTR
RTS_CONTROL_TOGGLE - Высокий уровень пока, есть данные для передачи.

DWORD fAbortOnError // Маска 00. Прекращение операций
// чтения - записи при возникновении ошибок
DWORD fDummy2:17; // Не используются


Другие данные структуры

WORD wReserved; // Не используется
WORD XonLim; // минимальное число байт в приемном буфере до отправки символа XON
WORD XoffLim; // максимальное число байт в приемном буфере до отправки символа XOFF
BYTE ByteSize; // количество бит в байте от 4 до 8
BYTE Parity; // 0-4=no,odd,even,mark,space бит паритета,
BYTE StopBits; // 0,1,2 = 1, 1.5, 2 - стоп биты,
// 1,5 используются только при 5 битах в посылке для мелкосхемы 8250.

ONESTOPBIT 1 stop bit
ONE5STOPBITS 1.5 stop bits
TWOSTOPBITS 2 stop bits

char XonChar; // Tx and Rx XON символ
char XoffChar; // Tx and Rx XOFF символ
char ErrorChar; // Символ, которым заменяется ошибочно принятый байт

char EofChar; // end of input character
char EvtChar; // received event character
WORD wReserved1; // Не используется

Delphi имеет оболочку для DCB - TDCB.
Получить текущую конфигурацию порта можно функцией GetCommState(Fhandle:Handle; fDCB:TDCB).
Установить соответственно SetCommDCB.
После установки параметров порта. Читать и писать можно через ReadFile и WriteFile.

Заключение
В данной заметке приведена лишь небольшая часть сведений о работе с последовательным портом. Если хоть кому-нибудь это интересно и нужно напишите мне на mgoblin@mail.ru, я попробую вдохновиться на дальнейший труд. Любые замечания и исправления приветствуются по e-mail: mgoblin@mail.ru

 



Свежее
Резервное копирование rsync-ом
DNS Amplification (DNS усиление)
Алгоритм Шинглов — поиск нечетких дубликатов текста
Metasploit Framework. Обзор
Использование CouchDB
-------



 
Copyright © 2003-2009   Frikazoid.
Rambler's Top100