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

Рубрика: Исходники
Среда, 21 апреля 2010 г.
Просмотров: 145
последняя версия: 3.0.9 build 961 beta
от 07 декабря 2007 г.
function TP2KAPI.GetVERSION(ASelObject: word; var ABuffer: pbytearray; var ACnt: word): boolean;
var
  TCICmd_code, ssize, i : word;
  pVersion: PTCIFSACStruct;
  pVersion05: PTCIPacket05;
  pAnswerData: pbytearray;
  AnswerSize: dword;
  pSeemData: pbytearray;
  x: integer;
  xx: dword;
  pFirmWare: pbytearray;
  str: shortstring;

begin
  result:= false;
  if not TelStatus then exit;
  ssize:=2;
  TCICmd_code:= $39;
  i:= 0;
  Randomize; Random(i);
  pAnswerData:= AllocMem($FA4);
  New(pVersion);
  New(pVersion05);
  FillTCIFSACStruct(ssize, TCICmd_code, pVersion);
  FillTCIFSACStructEx(ssize, TCICmd_code, pVersion05);
  FillMemory(@pVersion.OtherData[0], 8191, 0);
  FillMemory(@pVersion05.OtherData[0], 8191, 0);
  i:= convert_word(ASelObject);
  CopyMemory(@pVersion.OtherData[0], @i, 2);
  CopyMemory(@pVersion05.OtherData[0], @i, 2);
  xx:= $2008;
  pAnswerData:= AllocMem(xx);
  try
    if iP2KCF = 0
      then begin
             result:= SendCommand(pVersion, ssize+$10, Pointer(pAnswerData), xx, xP2KTimeOut);
              if result then
                begin
                  AnswerSize:= pdword(pAnswerData)^;
                  if pAnswerData[4] = 0 then result:= false
                                        else begin
                                               result:= true;
                                               x:= AnswerSize;
                                               //if x-15 <= 0 then begin
                                               if x-14 <= 0 then begin
                                                                   result:= false;
                                                                 end
                                                            else begin
                                                                   result:= true;
                                                                   pFirmWare:= AllocMem(AnswerSize-14);
                                                                   try
                                                                     CopyMemory(@pFirmWare[0], @pAnswerData[18], AnswerSize+3-18 + 1);
                                                                     ACnt:=AnswerSize-14;
                                                                     str:= '';
                                                                     CopyMemory(@ABuffer[0], @pFirmWare[0], ACnt);
                                                                     result:= true;
                                                                   finally
                                                                     FreeMem(pFirmWare, AnswerSize-14);
                                                                     pFirmWare:= nil
                                                                   end;
                                                                 end;
                                             end;
                end;
           end
      else begin
             result:= SendCommand05(TCICmd_code, pVersion05, ssize, Pointer(pAnswerData), xx, xP2KTimeOut);
             if result then
               begin
                 AnswerSize:= xx;
                 result:= false;
                 if xx > 0 then begin
                                  result:= true;
                                  pFirmWare:= AllocMem(AnswerSize-1);
                                  try
                                    CopyMemory(@pFirmWare[0], @pAnswerData[1], AnswerSize-1);
                                    ACnt:=AnswerSize-1;
                                    str:= '';
                                    CopyMemory(@ABuffer[0], @pFirmWare[0], ACnt);
                                    result:= true;
                                  finally
                                    FreeMem(pFirmWare, AnswerSize-1);
                                    pFirmWare:= nil;
                                  end;  
                                end;
               end;
           end;
  finally
    FreeMem(pAnswerData, xx);
    pAnswerData:= nil;
  end;
  Dispose(pVersion);
  pVersion:= nil;
  Dispose(pVersion05);
  pVersion05:= nil;
end;
Rambler's Top100