Модуль "P2KApi" (часть 69) - TP2KAPI.SendCommandZ
последняя версия: 3.0.9 build 961 beta
от 07 декабря 2007 г.
от 07 декабря 2007 г.
function TP2KAPI.SendCommandZ(Cmd:word; Send_Data:Pointer;Send_Size: word; Recv_Data: Pointer; var Recv_Size: word):boolean; var Packet: TTCIPacket; Answer: TTCIAnsw; i: word; RecvBuf: array[0..$1004]of byte; RecvSize: dword; Time:dword;
begin
result:=false;
Packet.Hdr41:=$41;
Packet.Hdr02:=$02;
Packet.Res1:=$0000;
Packet.IFNum:=$0008;
Packet.FullSize:=Send_Size+8;
Packet.ID:=wswap(CurrentPacketID and $FFF);
Packet.Cmd:=wswap(Cmd and $FFF);
Packet.CmdSize:=wswap(Send_Size);
Packet.Res2:=0;
for i:=0 to 1007 do Packet.CmdData[i]:=0;
move(Send_Data^,Packet.CmdData[0],Send_Size);
if not WriteDataZ(HDev, @Packet, Send_Size+$12) then exit;
Time:=GetTickCount;
repeat
for i:=0 to 11 do RecvBuf[i]:=0;
Answer.HdrC1:=$C1;
Answer.AnsType:=00;
Answer.PacketNo:=0;
Answer.IFNum:=8;
Answer.Size:=8;
Answer.Res:=0;
RecvSize:=$0C;
Sleep(1);
if not ReadDataZ( HDev, @Answer, @RecvBuf, RecvSize) then exit;
until (RecvBuf[5]=1) or (RecvBuf[5]=2) or ((GetTickCount-Time)>=40000);
if (GetTickCount-Time)>=40000 then
begin
Log('USB Time-out');
exit;
end;
Answer.HdrC1:=$C1;
Answer.AnsType:=01;
Answer.PacketNo:=RecvBuf[5];
Answer.IFNum:=8;
Answer.Size:=RecvBuf[6]*256 + RecvBuf[7] + 4 + RecvBuf[5]*2; // Packet1Size+Packets*2+Hdr, todo - Add all packets size
RecvSize:=$FA4;
for i:=0 to 1023 do RecvBuf[i]:=0;
if not ReadDataZ(HDev, @Answer, @RecvBuf, RecvSize) then exit;
if RecvBuf[4]<> 1 then exit; // status not ok
if (RecvBuf[8]*256+RecvBuf[9])<>(RecvBuf[$0E]*256+RecvBuf[$0F]+8) then exit; // full packet and data size mistmatch
if ((RecvBuf[$0A] and $0F)*256+RecvBuf[$0B])<>CurrentPacketID then exit; // PacketID mistmatch
if ((RecvBuf[$0C] shr 4) <> 6) and ((RecvBuf[$0C] shr 4) <> 8) then exit; // result code is error - may be translated to err text
Recv_Size:=RecvBuf[$0E]*256+RecvBuf[$0F];
move(RecvBuf[$12],Recv_Data^,Recv_Size);
result:=true;
end;
Еще записи по теме
- Модуль "Справочник" (часть 20) - Abonent_Restore
- Модуль "P2KApi" (часть 50) - TP2KAPI.USB_ReadDataEx
- Модуль "Flash Rainbow POG" (часть 3) - POG_SendLoader
- Модуль "Календарь" (часть 17) - AddDateBook
- Главный модуль программы (часть 12) - SwitchToAT
- Модуль "Пункты меню" (часть 69) - spSkinSpeedButton1Click
- Модуль "Стили звонка" (часть 2) - GetMelodies
