openblt/Host/Source/MicroBoot/interfaces/XcpDataFile.pas

215 lines
7.4 KiB
ObjectPascal

unit XcpDataFile;
//***************************************************************************************
// Description: XCP data file interface.
// File Name: XcpDataFile.pas
//
//---------------------------------------------------------------------------------------
// C O P Y R I G H T
//---------------------------------------------------------------------------------------
// Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved
//
// This software has been carefully tested, but is not guaranteed for any particular
// purpose. The author does not offer any warranties and does not guarantee the accuracy,
// adequacy, or completeness of the software and is not responsible for any errors or
// omissions or the results obtained from use of the software.
//
//---------------------------------------------------------------------------------------
// L I C E N S E
//---------------------------------------------------------------------------------------
// This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License as published by the Free
// Software Foundation, either version 3 of the License, or (at your option) any later
// version.
//
// OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
// PURPOSE. See the GNU General Public License for more details.
//
// You have received a copy of the GNU General Public License along with OpenBLT. It
// should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy.
//
//***************************************************************************************
interface
//***************************************************************************************
// Includes
//***************************************************************************************
uses
Windows, Messages, SysUtils, Classes, Forms, SRecReader;
//***************************************************************************************
// Type Definitions
//***************************************************************************************
type
TXcpDataFile = class(TObject)
private
FDataFileReady : Boolean;
FRegionCount : Word;
FDataFile : TSRecReader;
public
constructor Create(dataFile: string);
destructor Destroy; override;
function GetDataCnt : LongWord;
function GetRegionCnt : Word;
procedure GetRegionInfo(region : Word; var addr : Longword; var len : Longword);
function GetRegionData(region : Word; var data : array of Byte) : LongWord;
end;
implementation
//***************************************************************************************
// NAME: Create
// PARAMETER: none
// RETURN VALUE: none
// DESCRIPTION: Class constructor
//
//***************************************************************************************
constructor TXcpDataFile.Create(dataFile: string);
begin
// call inherited constructor
inherited Create;
// instantiate S-Record reader object
FDataFile := TSRecReader.Create;
// reset data file ready flag
FDataFileReady := false;
// reset the region count
FRegionCount := 0;
// open the data file as an S-Record file
if FDataFile.SetFileName(dataFile) then
begin
// set data file ready flag
FDataFileReady := true;
// obtain the number of data regions
FRegionCount := FDataFile.GetRegionCount;
end;
end; //*** end of Create ***
//***************************************************************************************
// NAME: Destroy
// PARAMETER: none
// RETURN VALUE: none
// DESCRIPTION: Class destructor
//
//***************************************************************************************
destructor TXcpDataFile.Destroy;
begin
// release S-Record reader object
FDataFile.Free;
// call inherited destructor
inherited;
end; //*** end of Destroy ***
//***************************************************************************************
// NAME: GetDataCnt
// PARAMETER: none
// RETURN VALUE: number of data bytes
// DESCRIPTION: Returns the number of data bytes in the data file
//
//***************************************************************************************
function TXcpDataFile.GetDataCnt : LongWord;
begin
// init return value
result := 0;
// verify data file state
if not FDataFileReady then Exit;
// return the number of data bytes in the data file
result := FDataFile.GetDataSize;
end; //*** end of GetDataCnt ***
//***************************************************************************************
// NAME: GetRegionCnt
// PARAMETER: none
// RETURN VALUE: number of data regions
// DESCRIPTION: Returns the number of data regions in the data file
//
//***************************************************************************************
function TXcpDataFile.GetRegionCnt : Word;
begin
// init return value
result := 0;
// verify data file state
if not FDataFileReady then Exit;
// return the number of data regions
result := FRegionCount;
end; //*** end of GetRegionCnt ***
//***************************************************************************************
// NAME: GetRegionInfo
// PARAMETER: region index and parameters where to store the region start address
// and length info.
// RETURN VALUE: none
// DESCRIPTION: Returns the number of data bytes in the specified region and its
// start address.
//
//***************************************************************************************
procedure TXcpDataFile.GetRegionInfo(region : Word; var addr : Longword; var len : Longword);
begin
// init return parameters
addr := 0;
len := 0;
// verify data file state
if not FDataFileReady then Exit;
// validate input parameter
if region > FRegionCount-1 then Exit;
// obtain the region information
FDataFile.GetRegion(region, addr, len);
end; //*** end of GetRegionInfo ***
//***************************************************************************************
// NAME: GetRegionData
// PARAMETER: region index and a pointer to the data buffer where the data will be
// stored.
// RETURN VALUE: Number of data bytes stored in the data buffer
// DESCRIPTION: Reads the data from a specific region into the specified data buffer.
//
//***************************************************************************************
function TXcpDataFile.GetRegionData(region : Word; var data : array of Byte) : LongWord;
var
addr : LongWord;
len : LongWord;
begin
// init return value
result := 0;
// verify data file state
if not FDataFileReady then Exit;
// validate input parameter
if region > FRegionCount-1 then Exit;
// obtain region info
FDataFile.GetRegion(region, addr, len);
// obtain the region data
FDataFile.GetData(data, addr, len);
// return the number of data bytes stored in the data buffer
result := len;
end; //*** end of GetRegionData ***
end.
//******************************** end of XcpDataFile.pas *******************************