Модуль "P2KApi" (часть 65) - TP2KAPI.MakeDumpToFile
последняя версия: 3.0.9 build 961 beta
от 07 декабря 2007 г.
от 07 декабря 2007 г.
function TP2KAPI.MakeDumpToFile(AFileName: TFileName; ADumpType: TFlashDumpType; StartAddr, EndAddr: DWord; AfrmProgress: TfrmProgress): Boolean; var Cmd_temp: array[0..19] of char; HexAddr:string[8]; HexSize:string[4]; ProgressPercent:Integer; Cmd_Ans:array[0..266] of char; //Cmd_Ans:array[0..522] of char; BufPos, Count:Integer; Addr, xSize, End1:DWord; xx: dword; Buffer: pbytearray; mStream: TStream; pFilesData: Pointer; i: integer;
begin
{
DUMP, XXXXXXXX
READ XXXXXXXX,YYYY
x - адрес
Y - размер
}
i:= 0;
Result:= TelStatus;
result:= true;
if not TelStatus then exit;
Addr:=StartAddr;
End1:=EndAddr-StartAddr;
Count:=0;
BufPos:=0;
AfrmProgress.AdvProgressBar1.MinValue:= 0;
AfrmProgress.AdvProgressBar1.Value:= 0;
AfrmProgress.AdvProgressBar1.MaxValue:= 100;
mStream:= TFileStream.Create(AFileName, fmCreate);
pFilesData:= AllocMem((EndAddr-StartAddr)+1);
//xSize:= $100;
while Addr<EndAddr do begin
ProgressPercent:=Round((Addr-StartAddr)/(End1)*100);
HexAddr:=IntToHex(Addr,8);
xx:= 1024;
Cmd_temp[0]:=#02;
Cmd_temp[5]:=#$1E;
Cmd_temp[6]:=HexAddr[1]; Cmd_temp[7]:=HexAddr[2]; Cmd_temp[8]:=HexAddr[3]; Cmd_temp[9]:=HexAddr[4];
Cmd_temp[10]:=HexAddr[5]; Cmd_temp[11]:=HexAddr[6]; Cmd_temp[12]:=HexAddr[7]; Cmd_temp[13]:=HexAddr[8];
case ADumpType of
fdDUMP : begin
xSize:= $100;
Cmd_temp[1]:='D'; Cmd_temp[2]:='U'; Cmd_temp[3]:='M'; Cmd_temp[4]:='P';
Cmd_temp[14]:=#03;
USB_WriteDataEx(@Cmd_temp, 15,2,xFlashTimeOut);
end;
fdREAD : begin
//check size to read
xSize:= $100;
//xSize:= $200;
if (EndAddr-Addr) < xSize then xSize:= (EndAddr-Addr)+1;
HexSize:=IntToHex(xSize, 4);
Cmd_temp[1]:='R'; Cmd_temp[2]:='E'; Cmd_temp[3]:='A'; Cmd_temp[4]:='D'; Cmd_temp[14]:= ',';
Cmd_temp[15]:= HexSize[1]; Cmd_temp[16]:= HexSize[2]; Cmd_temp[17]:= HexSize[3]; Cmd_temp[18]:= HexSize[4];
Cmd_temp[19]:= #03;
USB_WriteDataEx(@Cmd_temp, 20,2,xFlashTimeOut);
end;
end;
USB_ReadDataEx(@Cmd_ans, xx, 2, xFlashTimeOut);
case ADumpType of
fdDUMP : begin
move(cmd_ans[0], pFilesData^, xSize);
end;
fdREAD : begin
move(cmd_ans[8], pFilesData^, xSize);
end;
end;
mStream.Write(pFilesData^, xSize);
i:= i + xSize;
if xSize mod 8 = 0
then begin
AfrmProgress.AdvProgressBar1.Value:= ProgressPercent;
Application.ProcessMessages;
end;
Inc(Addr,xSize);
end;
mStream.Free;
FreeMem(pFilesData);
pFilesData:= nil;
end;
Еще записи по теме
- Модуль "Справочник" (часть 6) - ReadPhoneBook
- Модуль "P2KFileManager" (часть 18) - ChangeAttr
- Модуль "Пункты меню" (часть 21) - MMA_LoadFromFile
- Модуль "Пункты меню" (часть 2) - GetFileHeader
- Главный модуль программы (часть 25) - MenuItem2Click
- Модуль "Справочник" (часть 12) - GetPhoneBookEntries
- Главный модуль программы (часть 32) - btnAT_DateBookRefreshClick
