Форум: "WinAPI";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];
ВнизIrDA Найти похожие ветки
← →
SniZ © (2004-06-06 00:35) [0]Может есть какой нить компонент для передачи данных по ИК?
Мне нужно передовать или принимать допустим файл по ИК!
← →
я думаю вы меня помните (2004-06-06 11:30) [1]Работа с ИК портом аналогична работе с RS232 (COM-порт). Компонентов для этого насоздавали туеву хучу, даже, наверное, на этом сайте лежат.
Только всеравно лучше ручками на winapi.
Имя файла обычно - "IrDA", в WinNT на него точно выделяется виртуальный COM-порт (например "COM5").
← →
GanibalLector © (2004-06-06 13:55) [2]Соглашусь с "я думаю вы меня помните "
WinApi рулят...
Если нужен сабж,скажи.Я не жадный
← →
SniZ © (2004-06-06 15:28) [3]2 GanibalLector:
дай
← →
GanibalLector © (2004-06-06 19:45) [4]ну...даю
function LStr(const Source:Ansistring;Count:Integer):Ansistring;
begin
Result:=Copy(Source,1,Count);
end;
function OpenComm(Mode:AnsiString):THandle;
var
DCB : TDCB;
TOut: TCommTimeouts;
I:Integer;
Bfr:AnsiString;
begin
Bfr:=Mode;
UniqueString(Bfr);
I:=Pos(":",Bfr)-1;
if I<=0 then I:=4;
Result := CreateFile(PChar(LStr(Bfr,I)),GENERIC_READ or GENERIC_WRITE,
0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
GetCommState( Result, DCB) ;
BuildCommDCB(PChar(Bfr),DCB);
DCB.EvtChar := #13;
SetCommState( Result, DCB) ;
//
TOut.ReadIntervalTimeout := MAXDWORD;
TOut.ReadTotalTimeoutMultiplier := 0;
TOut.ReadTotalTimeoutConstant := 0;
TOut.WriteTotalTimeoutMultiplier := 0;
TOut.WriteTotalTimeoutConstant := 0;
SetCommTimeOuts( Result, TOut);
SetCommMask(Result,EV_RLSD OR EV_RXFLAG);
PurgeComm(Result,PURGE_TXCLEAR); //clear transmit buffer
PurgeComm(Result,PURGE_RXCLEAR); //clear receive buffer
end;
function ReadComm(Handle:THandle; var Bfr:AnsiString):Integer;
var
I,J:DWord;
begin
Result:=0;
J:=Length(Bfr);
repeat
ReadFile(Handle, Bfr[Result+1], J-DWord(Result), I, nil);
Inc(Result,Integer(I));
if DWord(Result)=J then break;
until I=0;
end;
function WriteComm(Handle:THandle; const Bfr:AnsiString):Integer;
var
I,J:DWord;
begin
Result:=0;
J:=Length(Bfr);
repeat
WriteFile(Handle, Bfr[Result+1], J-DWord(Result), I, nil);
Inc(Result,Integer(I));
if DWord(Result)=J then break;
until I=0;
end;
function CloseComm(Handle:THandle):boolean;
begin
CloseHandle(Handle);
result:=true;
end;
function SetRxTime(Handle:THandle; const TimeC,TimeM:Integer):Boolean;
var
TOut:TCommTimeouts;
begin
if (TimeC=0) AND (TimeM=0) then
TOut.ReadIntervalTimeout := MAXDWORD
else TOut.ReadIntervalTimeout := 0;
TOut.ReadTotalTimeoutMultiplier := TimeM;
TOut.ReadTotalTimeoutConstant := TimeC;
TOut.WriteTotalTimeoutMultiplier := 0;
TOut.WriteTotalTimeoutConstant := 0;
Result:=SetCommTimeOuts(Handle, TOut);
end;
Как работать:(это кусок моего кода)
function initcomm(co:string;baud:string;var outst:string;var par:string):boolean; stdcall;
var st,str,aa:string;
count,t_out:integer;
begin
count:=0;
Handle:=OpenComm("COM"+co+":BAUD="+baud+" PARITY=N DATA=8 STOP=1");
if Handle=INVALID_HANDLE_VALUE then begin result:=false;exit;end;
if GetFileType(Handle)<>FILE_TYPE_CHAR then begin result:=false;exit;end;
setrxtime(handle,100,25); //100,25
str:="";
setlength(st,1);
if readcomm(Handle,st)=1 then begin
if st<>chr($0d) then begin str:=str+st;
//... ну и так далее
надеюсь понятно...
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.034 c