Files
ISTTOK/epics/css/sys-mng-opi/CSS/MARTe/IOGAMs/BinaryFileReader/BinaryFileReader.cpp
2019-10-21 16:02:55 +01:00

118 lines
3.8 KiB
C++

/*
* Copyright 2011 EFDA | European Fusion Development Agreement
*
* Licensed under the EUPL, Version 1.1 or - as soon they
will be approved by the European Commission - subsequent
versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the
Licence.
* You may obtain a copy of the Licence at:
*
* http://ec.europa.eu/idabc/eupl
*
* Unless required by applicable law or agreed to in
writing, software distributed under the Licence is
distributed on an "AS IS" basis,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
express or implied.
* See the Licence for the specific language governing
permissions and limitations under the Licence.
*
* $Id: BinaryFileReader.cpp 3 2012-01-15 16:26:07Z aneto $
*
**/
#include "BinaryFileReader.h"
#include "GlobalObjectDataBase.h"
bool BinaryFileReader::ObjectLoadSetup(ConfigurationDataBase &info,StreamInterface *err){
AssertErrorCondition(Information, "BinaryFileReader::ObjectLoadSetup: %s Loading signals", Name());
CDBExtended cdb(info);
if(!GenericAcqModule::ObjectLoadSetup(info,err)){
AssertErrorCondition(InitialisationError,"BinaryFileReader::ObjectLoadSetup: %s GenericAcqModule::ObjectLoadSetup Failed",Name());
return False;
}
numberOfInputs = NumberOfInputs();
printf("NumberOfInputs() = %d\n", numberOfInputs);
if(!cdb.ReadUint32(dataSize, "DataSize")){
AssertErrorCondition(InitialisationError,"%s %s::Initialise: data_size is not specified.", IOGAM_MODULE, Name());
return False;
}
AssertErrorCondition(Information,"%s %s::Initialise: data_size: %d", IOGAM_MODULE, Name(), dataSize);
if(dataSize%sizeof(uint32) != 0){
AssertErrorCondition(InitialisationError,"%s %s::Initialise: data_size is not valid. Must be a %zu multiple.", IOGAM_MODULE, Name(), sizeof(uint32));
return False;
}
printf("memory alloc (sizeof(uint32)*numberOfInputs) = %zu\n", sizeof(uint32)*numberOfInputs);
printf("memory alloc (sizeof(char)*dataSize) = %zu\n", sizeof(char)*dataSize);
fileData = (char *) calloc(dataSize, sizeof(char));
if (!fileData)
{
AssertErrorCondition(InitialisationError,"%s %s::Initialise: Not enough memory for file_data with size %zu", IOGAM_MODULE, Name(), dataSize);
return False;
}
else
{
AssertErrorCondition(Information,"%s %s::Initialise: Memory allocated for file_data: %zu bytes", IOGAM_MODULE, Name(), dataSize);
}
if(!cdb.ReadFString(fileName, "FileName")){
AssertErrorCondition(InitialisationError,"Initialise::ObjectLoadSetup: %s FilePath must be specified.",Name());
return False;
}
if(!f.OpenRead(fileName.Buffer())){
AssertErrorCondition(InitialisationError,"Initialise::ObjectLoadSetup: %s failed to open file: %s", Name(), fileName.Buffer());
return False;
}
uint32 fileSize = f.Size();
if(fileSize != dataSize){
AssertErrorCondition(InitialisationError,"Initialise::ObjectLoadSetup: %s size [%d] is diferent from configured %d", Name(), fileSize, dataSize);
//return False;
}
f.Seek(SEEK_SET);
bool k = f.Read(fileData, fileSize);
if(k == 0){
AssertErrorCondition(InitialisationError,"Initialise::ObjectLoadSetup: %s failed read data from file: %s", Name(), fileName.Buffer());
return False;
}
return True;
}
/**
* GetData
*/
int32 BinaryFileReader::GetData(uint32 usecTime, int32 *ibuffer, int32 bufferNumber){
int32 i = 0;
char *buffer = (char *)ibuffer;
int value = 1234;
/*
f.Seek(SEEK_SET);
bool k = f.Read(fileData, dataSize);
*/
memcpy(buffer, fileData, numberOfInputs*sizeof(char));
return 1;
}
OBJECTLOADREGISTER(BinaryFileReader,"$Id: BinaryFileReader.cpp 3 2012-01-15 16:26:07Z aneto $")