Модуль "P2KApi" (часть 59) - TP2KAPI.SendFile2

Рубрика: Исходники
Среда, 21 апреля 2010 г.
Просмотров: 164
последняя версия: 3.0.9 build 961 beta
от 07 декабря 2007 г.
function TP2KAPI.SendFile2(Addr: Dword; Data: Pointer; Size: Dword; ABlock: dword; AfrmProgress: TfrmProgress): boolean;
var Cmd_temp:array[0..2055] of byte;
    i:word;
    chk:byte;
    Cmd_Ans:array[0..1023] of char;
    tmpstr:shortstring;
    SendSize, Progress:dword;
    BlockSize:word;
    BlockAddr:dword;
    BufPos:dword;
    DataTmp:Pointer;
    xx: dword;

begin
  result:= false;
  if not TelStatus then exit;
  chk:=0;
  cmd_temp[0]:=02;
  cmd_temp[1]:=ord('B');
  cmd_temp[2]:=ord('I');
  cmd_temp[3]:=ord('N');
  cmd_temp[4]:=$1E;
  SendSize:=Size;
  BlockAddr:=Addr;
  BufPos:=0;
  result:=true;
  AfrmProgress.AdvProgressBar1.Value:= 0;
  AfrmProgress.AdvProgressBar1.MaxValue:= Size;
  repeat
    if SendSize < ABlock then BlockSize:=SendSize else BlockSize:=ABlock;
    cmd_temp[5]:=hibyte(BlockSize);
    cmd_temp[6]:=lobyte(BlockSize);
    asm
      mov eax, Data
      add eax, BufPos
      mov DataTmp, eax
    end;
    move(DataTmp^,cmd_temp[7],BlockSize);
    chk:=0;
    for i:=1 to BlockSize+2 do chk:=chk+cmd_temp[i+4];
    cmd_temp[BlockSize+7]:=chk;
    cmd_temp[BlockSize+8]:=03;
    SendAddr(BlockAddr);
    for I:=0 to High(Cmd_ans) do Cmd_ans:=#0;
    USB_WriteDataEx(@Cmd_temp, BlockSize+9,2,xFlashTimeOut);
    xx:= 1024;
    USB_ReadDataEx(@Cmd_ans, xx,2,xFlashTimeOut);
    tmpstr:=trim(cmd_ans);tmpstr:=copy(tmpstr,1,3);
    if tmpstr = 'ERR' then result:=false
                      else result:= true;
    SendSize:=SendSize-BlockSize;
    if BlockSize mod 4 = 0
      then begin
             AfrmProgress.AdvProgressBar1.Value:= AfrmProgress.AdvProgressBar1.Value + BlockSize;
             Application.ProcessMessages;
           end;
    //Application.ProcessMessages;
    //AfrmProgress.Update;
    //AfrmProgress.Repaint;
    BlockAddr:=BlockAddr+BlockSize;
    BufPos:=BufPos+BlockSize;
  until SendSize = 0;
  sleep(1);
end;
Rambler's Top100