Thu, 17 May  |   Login English version  |  OS2.Ru  
В начало
Об OS/2
Новости
Публикации
DevCenter
База данных
Каталог ресурсов
Биржа труда
TeamDB
Форумы и общение
Опросы и конкурсы
Russian Team OS/2
На первую страницу OS2.Ru
 Вокруг OS/2 |  Программы и технологии |  Аппаратура |  Разработчикам |  Мастерская
Поиск по: Добавить закладку OS2.Ru в панель Netscape 6/Mozilla
OS2.Ru > Articles > Dev > Prog > Vpprog > Commport.phtml.ru
2001-04-22
Логвинов Дмитрий
(версия для печати)

Virtual Pascal: программирование последовательного порта

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

открытие последовательного порта

const PortName: PChar = 'COM2';
var
rc: APIRET;
action: ULONG;
fHandle: ULONG;
rc := DosOpen(PortName, fHandle, action, 0, 0, 1, $42, nil);

Если порт открывается нормально, то rc = 0;

закрытие порта

DosClose(fHandle);

запись в порт

var AStr: string; BytesWritten: ULONG:
DosWrite(fHandle, AStr[1], length(AStr), BytesWritten);

чтение из порта

var chBuf: array [1..32] of char; BytesRead: ULONG;
rs:=DosRead (fHandle, chBuf, 32, BytesRead);

установка линии

type TParity = (par_none, par_odd, par_even, par_mark, par_space);

var lctl : LINECONTROL; P: TParity; ADataBits: byte; AStopBits: byte;

lctl.bParity := ord(P);
lctl.bDataBits := ADataBits;
if AStopBits=1 then lctl.bStopBits := 0 else lctl.bStopBits:=2;
lctl.fTransBreak := 0;
DosDevIOCtl (fHandle, IOCTL_ASYNC, ASYNC_SETLINECTRL, @lctl, sizeof (LINECONTROL), NIL, NIL, 0, NIL)

установка контроля

var dcb : DCBINFO; ARTS_CTS, AXON_XOFF: Boolean;

dcb.usWriteTimeout := 0;
dcb.usReadTimeout := 0;
dcb.fbCtlHndShake := MODE_DTR_CONTROL;

if ARTS_CTS then begin
dcb.fbFlowReplace := MODE_RTS_HANDSHAKE;
dcb.fbCtlHndShake := dcb.fbCtlHndShake + MODE_CTS_HANDSHAKE;
end else dcb.fbFlowReplace := MODE_RTS_CONTROL;

if AXON_XOFF then
dcb.fbFlowReplace := dcb.fbFlowReplace + MODE_AUTO_RECEIVE + MODE_AUTO_TRANSMIT;

dcb.fbTimeout := MODE_NO_WRITE_TIMEOUT + MODE_WAIT_READ_TIMEOUT;
dcb.bErrorReplacementChar := 0;
dcb.bBreakReplacementChar := 0;
dcb.bXONChar := $11;
dcb.bXOFFChar := $13;

DosDevIOCtl (fHandle, IOCTL_ASYNC, ASYNC_SETDCBINFO, @dcb, sizeof (DCBINFO), NIL, NIL, 0, NIL);

установка RTS

var
ms : MODEMSTATUS;
data : WORD;
res : APIRET;
fRTS: Boolean;

ms.fbModemOn:=0; ms.fbModemOff:=0;
if fRTS then ms.fbModemOn := RTS_ON
else ms.fbModemOff := RTS_OFF;

res:=DosDevIOCtl (fHandle, IOCTL_ASYNC, ASYNC_SETMODEMCTRL, @ms,
sizeof (ms), NIL, @data, sizeof (data), NIL);

установка DTR

var
ms : MODEMSTATUS;
data : WORD;
res : APIRET;
fDTR: Boolean;

ms.fbModemOn:=0;ms.fbModemOff:=0;
if fDTR then ms.fbModemOn := DTR_ON else ms.fbModemOff := DTR_OFF;

res:=DosDevIOCtl (fHandle, IOCTL_ASYNC, ASYNC_SETMODEMCTRL, @ms,
sizeof (ms), NIL, @data, sizeof (data), NIL);

установка скорости

var
par : record
rate : ULONG;
fraction : CHAR;
end;
fBoud: ULong;
par.rate:=fBaud;
par.fraction:=chr(0);
if ((par.rate <= 345600) and (par.rate >= 10)) then
res:=DosDevIOCtl (fHandle, IOCTL_ASYNC, ASYNC_EXTSETBAUDRATE, @par, sizeof (par), NIL, NIL, 0, NIL);

Написанная мною компонента (основой для которой послужил SerialIO.pas) доступна для скачивания.


Обсудить материал (число отзывов:1)


предыдущий материал  |  следующий материал


 Вокруг OS/2 |  Программы и технологии |  Аппаратура |  Разработчикам |  Мастерская


Новости
15/08: GoldenCode выпустит Java 1.4 для OS/2
14/06: Fix #16 rus / Warp4
30/05: Перерыв в работе OS2.Ru
Все новости..

В каталоге
Дерево каталога
Новые поступления

Публикации
Боремся с зависанием PM и зомби - WatchCat + HardKill
(Samorukov Alex , 2001-10-11)

DSync - куда может быть проще?
(Okounkov Konstantin, 2001-09-28)

WarpGoGo: переводим музыку в MP3
(Okounkov Konstantin, 2001-09-26)

Все материалы

Решения
Tips & tricks

Активные опросы
Используете ли Вы OS2.Ru tab в Netscape ?

Все опросы
Первая страница  |   Об OS/2  |   Новости  |   Публикации  |   База данных  |   Каталог ресурсов  |   Биржа труда  |   TeamDB  |   Форумы общения  |   Опросы и голосования  |   OS2.Ru DevCenter
Дизайн, оформление © 1996-2000 Copyright WebTeam. Использование материалов OS2.Ru без согласия авторов и координаторов запрещено
Powered by OS/2