Примерно тоже на Делфи(+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено F8 09 декабря 2005 г. 13:29
В ответ на: проинить все. как? (внутри) только на С отправлено ы 09 декабря 2005 г. 12:49


constructor TSerialPortS.Create(AOwner: TComponent);
begin
inherited;
FActive:=false;

GetCommState(port,dc);
dc.DCBlength:=SizeOf(DCB);
dc.Flags:=1;//12305;
dc.wReserved:=0;
dc.ByteSize:=8;
dc.Parity:=0;
dc.StopBits:=0;
dc.XonChar:=#17;
dc.XoffChar:=#19;
dc.ErrorChar:=#0;
dc.EofChar:=#0;
dc.EvtChar:=char(13);
dc.wReserved1:=65;


timeouts.ReadIntervalTimeout:=200;//3
timeouts.ReadTotalTimeoutMultiplier:=200;//5
timeouts.ReadTotalTimeoutConstant:=1000; //5
timeouts.WriteTotalTimeoutMultiplier:=300;
timeouts.WriteTotalTimeoutConstant:=300;

end;

function TSerialPortS.OpenPort: boolean;

begin
port := CreateFile(PChar(FPortName), GENERIC_READ or GENERIC_WRITE,
0, nil, OPEN_EXISTING,0, 0);
if port = INVALID_HANDLE_VALUE then
begin
OpenPort:= false;
if Assigned(FOpenPortError) then FOpenPortError(self)
else raise Exception.Create('Îøèáêà ïðè îòêðûòè ïîðòà');

exit;
end;

if FBaud=0 then
begin
if Assigned(FBaudSetError) then FBaudSetError(self)
else
raise Exception.Create('Íåâåðíûå óñòàíîâêè ñêîðîñòè ïîðòà!');
OpenPort:=false;
exit;
end;

dc.BaudRate:= FBaud;
if not SetCommState(port, dc) then
begin
CloseHandle(port);
OpenPort:= false;
if Assigned(FDCBSetError) then FDCBSetError(self)
else
raise Exception.Create('Error in DCB struct');
exit;
end;


if not SetCommTimeouts(port,timeouts) then
begin
CloseHandle(port);
OpenPort:= false;
if Assigned(FTimeOutSetError) then FTimeOutSetError(self)
else
raise Exception.Create('Error in CommTimeouts struct');
exit;
end;
if not PurgeComm(port,(PURGE_TXABORT or PURGE_RXABORT or PURGE_TXCLEAR or PURGE_RXCLEAR))
then begin
CloseHandle(port);
OpenPort:= false;
if Assigned(FTimeOutSetError) then FTimeOutSetError(self)
else
raise Exception.Create('PurgeComm Error');
exit;
end;

OpenPort:= true;
FActive := true;
end;


Составить ответ  |||  Конференция  |||  Архив

Ответы



Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru