- Adapted indenation to new agreed upon system

- Added support for second generation scriptcontext based counter
This commit is contained in:
koennecke
2009-02-13 09:00:03 +00:00
parent a3dcad2bfa
commit 91d4af0541
405 changed files with 88101 additions and 88173 deletions

500
histsim.c
View File

@ -49,261 +49,263 @@
#include "HistDriv.i"
#include "histsim.h"
static int iSet = 0;
static HistInt iSetVal = 0;
static HistMode eHistMode;
static int iSet = 0;
static HistInt iSetVal = 0;
static HistMode eHistMode;
/*--------------------------------------------------------------------------*/
static int SimConfig(pHistDriver self, SConnection *pCon,
pStringDict pOption, SicsInterp *pSics)
{
int i, iLength = 1, status;
char pData[132];
float fFail;
static int SimConfig(pHistDriver self, SConnection * pCon,
pStringDict pOption, SicsInterp * pSics)
{
int i, iLength = 1, status;
char pData[132];
float fFail;
if(eHistMode == eHTOF)
{
for(i = 0; i < self->data->rank; i++)
{
iLength *= self->data->iDim[i];
}
iLength *= self->data->nTimeChan;
if (eHistMode == eHTOF) {
for (i = 0; i < self->data->rank; i++) {
iLength *= self->data->iDim[i];
}
iLength *= self->data->nTimeChan;
}
/*
deal with failrate
*/
status = StringDictGet(pOption,"failrate",pData,131);
if(status)
{
fFail = atof(pData);
free(self->pPriv);
self->pPriv = NewSIMCounter("HistoSim",fFail);
}
/*
configured test value
*/
status = StringDictGet(pOption,"testval",pData,131);
if(status)
{
iSet = 1;
iSetVal = atoi(pData);
}
/*
deal with failrate
*/
status = StringDictGet(pOption, "failrate", pData, 131);
if (status) {
fFail = atof(pData);
free(self->pPriv);
self->pPriv = NewSIMCounter("HistoSim", fFail);
}
return 1;
}
/*-------------------------------------------------------------------------*/
static int SimStart(pHistDriver self, SConnection *pCon)
{
pCounterDriver pDriv;
pDriv = (pCounterDriver)self->pPriv;
pDriv->fPreset = self->fCountPreset;
pDriv->eMode = self->eCount;
return pDriv->Start(pDriv);
}
/*-------------------------------------------------------------------------*/
static int SimPause(pHistDriver self, SConnection *pCon)
{
pCounterDriver pDriv;
pDriv = (pCounterDriver)self->pPriv;
pDriv->fPreset = self->fCountPreset;
pDriv->eMode = self->eCount;
return pDriv->Pause(pDriv);
}
/*------------------------------------------------------------------------*/
static int SimContinue(pHistDriver self, SConnection *pCon)
{
pCounterDriver pDriv;
pDriv = (pCounterDriver)self->pPriv;
pDriv->fPreset = self->fCountPreset;
pDriv->eMode = self->eCount;
return pDriv->Continue(pDriv);
}
/*-------------------------------------------------------------------------*/
static int SimHalt(pHistDriver self)
{
pCounterDriver pDriv;
pDriv = (pCounterDriver)self->pPriv;
return pDriv->Halt(pDriv);
}
/*-------------------------------------------------------------------------*/
static int SimGetCountStatus(pHistDriver self, SConnection *pCon)
{
pCounterDriver pDriv;
float fControl;
pDriv = (pCounterDriver)self->pPriv;
return pDriv->GetStatus(pDriv,&fControl);
}
/*-------------------------------------------------------------------------*/
static int SimGetError(pHistDriver self, int *iCode, char *pError, int iLen)
{
pCounterDriver pDriv;
pDriv = (pCounterDriver)self->pPriv;
return pDriv->GetError(pDriv, iCode,pError,iLen);
}
/*-------------------------------------------------------------------------*/
static int SimTryAndFixIt(pHistDriver self, int iCode)
{
pCounterDriver pDriv;
pDriv = (pCounterDriver)self->pPriv;
return pDriv->TryAndFixIt(pDriv, iCode);
}
/*--------------------------------------------------------------------------*/
static int SimGetData(pHistDriver self, SConnection *pCon)
{
pCounterDriver pDriv;
pDriv = (pCounterDriver)self->pPriv;
/*
configured test value
*/
status = StringDictGet(pOption, "testval", pData, 131);
if (status) {
iSet = 1;
iSetVal = atoi(pData);
}
return pDriv->ReadValues(pDriv);
}
/*--------------------------------------------------------------------------*/
static int SimGetHistogram(pHistDriver self, SConnection *pCon,
int i, int iStart, int iEnd, HistInt *lData)
{
int ii;
if(i < 0)
{
SCWrite(pCon,"ERROR: histogram out of range",eError);
return 0;
}
if(iSet == 1)
{
for(ii = iStart; ii < iEnd; ii++)
{
lData[ii-iStart] = iSetVal;
}
}
else if(iSet == 2)
{
for(ii = iStart; ii < iEnd; ii++)
{
lData[ii-iStart] = self->data->localBuffer[ii];
}
}
else
{
for(ii = iStart; ii < iEnd; ii++)
{
lData[ii-iStart] = random();
}
}
return 1;
}
/*------------------------------------------------------------------------*/
static int SimSetHistogram(pHistDriver self, SConnection *pCon,
int i, int iStart, int iEnd, HistInt *lData)
{
iSet = 2;
if(self->data->localBuffer == NULL){
resizeBuffer(self->data);
}
iSetVal = lData[0];
if(iEnd <= getHMDataLength(self->data)){
memcpy(self->data->localBuffer+iStart,lData,(iEnd - iStart)*sizeof(HistInt));
}
return 1;
}
/*-------------------------------------------------------------------------*/
static int SimPreset(pHistDriver self, SConnection *pCon, HistInt iVal)
{
iSet = 1;
iSetVal = iVal;
return 1;
}
/*------------------------------------------------------------------------*/
static int SimFreePrivate(pHistDriver self)
{
pCounterDriver pDriv;
pDriv = (pCounterDriver)self->pPriv;
DeleteCounterDriver(pDriv);
return 1;
}
/*------------------------------------------------------------------------*/
static long SimGetMonitor(pHistDriver self, int i, SConnection *pCon)
{
pCounterDriver pDriv;
long lVal;
pDriv = (pCounterDriver)self->pPriv;
return pDriv->lCounts[i];
}
/*------------------------------------------------------------------------*/
static float SimGetTime(pHistDriver self, SConnection *pCon)
{
pCounterDriver pDriv;
long lVal;
pDriv = (pCounterDriver)self->pPriv;
return pDriv->fTime;
}
/*-------------------------------------------------------------------------*/
HistInt *DefaultSubSample(pHistDriver self, SConnection *pCon,
int bank, char *command){
HistInt *data = NULL;
char error[132];
assert(bank == 0); /* no bank handling yet.. */
memset(error,0,132*sizeof(char));
data = subSample(self->data, command, error, 132);
if(data == NULL){
SCWrite(pCon,error,eError);
}
return data;
return 1;
}
/*-------------------------------------------------------------------------*/
pHistDriver CreateSIMHM(pStringDict pOpt)
{
pHistDriver pNew = NULL;
/* create the general driver */
pNew = CreateHistDriver(pOpt);
if(!pNew)
{
return NULL;
}
/* put a SIMcounter in */
pNew->pPriv = (void *)NewSIMCounter("HistoSim",-1.);
if(!pNew->pPriv)
{
DeleteHistDriver(pNew);
return NULL;
static int SimStart(pHistDriver self, SConnection * pCon)
{
pCounterDriver pDriv;
pDriv = (pCounterDriver) self->pPriv;
pDriv->fPreset = self->fCountPreset;
pDriv->eMode = self->eCount;
return pDriv->Start(pDriv);
}
/*-------------------------------------------------------------------------*/
static int SimPause(pHistDriver self, SConnection * pCon)
{
pCounterDriver pDriv;
pDriv = (pCounterDriver) self->pPriv;
pDriv->fPreset = self->fCountPreset;
pDriv->eMode = self->eCount;
return pDriv->Pause(pDriv);
}
/*------------------------------------------------------------------------*/
static int SimContinue(pHistDriver self, SConnection * pCon)
{
pCounterDriver pDriv;
pDriv = (pCounterDriver) self->pPriv;
pDriv->fPreset = self->fCountPreset;
pDriv->eMode = self->eCount;
return pDriv->Continue(pDriv);
}
/*-------------------------------------------------------------------------*/
static int SimHalt(pHistDriver self)
{
pCounterDriver pDriv;
pDriv = (pCounterDriver) self->pPriv;
return pDriv->Halt(pDriv);
}
/*-------------------------------------------------------------------------*/
static int SimGetCountStatus(pHistDriver self, SConnection * pCon)
{
pCounterDriver pDriv;
float fControl;
pDriv = (pCounterDriver) self->pPriv;
return pDriv->GetStatus(pDriv, &fControl);
}
/*-------------------------------------------------------------------------*/
static int SimGetError(pHistDriver self, int *iCode, char *pError,
int iLen)
{
pCounterDriver pDriv;
pDriv = (pCounterDriver) self->pPriv;
return pDriv->GetError(pDriv, iCode, pError, iLen);
}
/*-------------------------------------------------------------------------*/
static int SimTryAndFixIt(pHistDriver self, int iCode)
{
pCounterDriver pDriv;
pDriv = (pCounterDriver) self->pPriv;
return pDriv->TryAndFixIt(pDriv, iCode);
}
/*--------------------------------------------------------------------------*/
static int SimGetData(pHistDriver self, SConnection * pCon)
{
pCounterDriver pDriv;
pDriv = (pCounterDriver) self->pPriv;
return pDriv->ReadValues(pDriv);
}
/*--------------------------------------------------------------------------*/
static int SimGetHistogram(pHistDriver self, SConnection * pCon,
int i, int iStart, int iEnd, HistInt * lData)
{
int ii;
if (i < 0) {
SCWrite(pCon, "ERROR: histogram out of range", eError);
return 0;
}
if (iSet == 1) {
for (ii = iStart; ii < iEnd; ii++) {
lData[ii - iStart] = iSetVal;
}
/* configure all those functions */
pNew->Configure = SimConfig;
pNew->Start = SimStart;
pNew->Halt = SimHalt;
pNew->GetCountStatus = SimGetCountStatus;
pNew->GetError = SimGetError;
pNew->TryAndFixIt = SimTryAndFixIt;
pNew->GetData = SimGetData;
pNew->GetHistogram = SimGetHistogram;
pNew->SetHistogram = SimSetHistogram;
pNew->GetMonitor = SimGetMonitor;
pNew->GetTime = SimGetTime;
pNew->Preset = SimPreset;
pNew->FreePrivate = SimFreePrivate;
pNew->Pause = SimPause;
pNew->Continue = SimContinue;
pNew->SubSample = DefaultSubSample;
StringDictAddPair(pOpt,"failrate","-1");
return pNew;
}
} else if (iSet == 2) {
for (ii = iStart; ii < iEnd; ii++) {
lData[ii - iStart] = self->data->localBuffer[ii];
}
} else {
for (ii = iStart; ii < iEnd; ii++) {
lData[ii - iStart] = random();
}
}
return 1;
}
/*------------------------------------------------------------------------*/
static int SimSetHistogram(pHistDriver self, SConnection * pCon,
int i, int iStart, int iEnd, HistInt * lData)
{
iSet = 2;
if (self->data->localBuffer == NULL) {
resizeBuffer(self->data);
}
iSetVal = lData[0];
if (iEnd <= getHMDataLength(self->data)) {
memcpy(self->data->localBuffer + iStart, lData,
(iEnd - iStart) * sizeof(HistInt));
}
return 1;
}
/*-------------------------------------------------------------------------*/
static int SimPreset(pHistDriver self, SConnection * pCon, HistInt iVal)
{
iSet = 1;
iSetVal = iVal;
return 1;
}
/*------------------------------------------------------------------------*/
static int SimFreePrivate(pHistDriver self)
{
pCounterDriver pDriv;
pDriv = (pCounterDriver) self->pPriv;
DeleteCounterDriver(pDriv);
return 1;
}
/*------------------------------------------------------------------------*/
static long SimGetMonitor(pHistDriver self, int i, SConnection * pCon)
{
pCounterDriver pDriv;
long lVal;
pDriv = (pCounterDriver) self->pPriv;
return pDriv->lCounts[i];
}
/*------------------------------------------------------------------------*/
static float SimGetTime(pHistDriver self, SConnection * pCon)
{
pCounterDriver pDriv;
long lVal;
pDriv = (pCounterDriver) self->pPriv;
return pDriv->fTime;
}
/*-------------------------------------------------------------------------*/
HistInt *DefaultSubSample(pHistDriver self, SConnection * pCon,
int bank, char *command)
{
HistInt *data = NULL;
char error[132];
assert(bank == 0); /* no bank handling yet.. */
memset(error, 0, 132 * sizeof(char));
data = subSample(self->data, command, error, 132);
if (data == NULL) {
SCWrite(pCon, error, eError);
}
return data;
}
/*-------------------------------------------------------------------------*/
pHistDriver CreateSIMHM(pStringDict pOpt)
{
pHistDriver pNew = NULL;
/* create the general driver */
pNew = CreateHistDriver(pOpt);
if (!pNew) {
return NULL;
}
/* put a SIMcounter in */
pNew->pPriv = (void *) NewSIMCounter("HistoSim", -1.);
if (!pNew->pPriv) {
DeleteHistDriver(pNew);
return NULL;
}
/* configure all those functions */
pNew->Configure = SimConfig;
pNew->Start = SimStart;
pNew->Halt = SimHalt;
pNew->GetCountStatus = SimGetCountStatus;
pNew->GetError = SimGetError;
pNew->TryAndFixIt = SimTryAndFixIt;
pNew->GetData = SimGetData;
pNew->GetHistogram = SimGetHistogram;
pNew->SetHistogram = SimSetHistogram;
pNew->GetMonitor = SimGetMonitor;
pNew->GetTime = SimGetTime;
pNew->Preset = SimPreset;
pNew->FreePrivate = SimFreePrivate;
pNew->Pause = SimPause;
pNew->Continue = SimContinue;
pNew->SubSample = DefaultSubSample;
StringDictAddPair(pOpt, "failrate", "-1");
return pNew;
}