- Adapted indenation to new agreed upon system
- Fixed bad status in poldi zug driver
This commit is contained in:
232
frame.c
232
frame.c
@ -24,7 +24,8 @@
|
||||
#include "nxdict.h"
|
||||
#include "frame.h"
|
||||
/*======================================================================*/
|
||||
static int readHMFrame(SConnection *pCon, pHistMem pHM, int nFrame){
|
||||
static int readHMFrame(SConnection * pCon, pHistMem pHM, int nFrame)
|
||||
{
|
||||
HistInt *buffer = NULL;
|
||||
int iDim[MAXDIM], rank, length, status, i, noTimeBins;
|
||||
pSINQHM pHist;
|
||||
@ -32,214 +33,225 @@ static int readHMFrame(SConnection *pCon, pHistMem pHM, int nFrame){
|
||||
const float *timeBin;
|
||||
|
||||
/*
|
||||
find dimensions and allocate data
|
||||
*/
|
||||
GetHistDim(pHM,iDim,&rank);
|
||||
timeBin = GetHistTimeBin(pHM,&noTimeBins);
|
||||
find dimensions and allocate data
|
||||
*/
|
||||
GetHistDim(pHM, iDim, &rank);
|
||||
timeBin = GetHistTimeBin(pHM, &noTimeBins);
|
||||
|
||||
if(rank < 2){
|
||||
SCWrite(pCon,"ERROR: no PSD data present, cannot send frame",eError);
|
||||
if (rank < 2) {
|
||||
SCWrite(pCon, "ERROR: no PSD data present, cannot send frame", eError);
|
||||
return 0;
|
||||
}
|
||||
length = iDim[0]*iDim[1];
|
||||
buffer = (HistInt *)malloc((length + 2)*sizeof(HistInt));
|
||||
if(!buffer){
|
||||
SCWrite(pCon,"ERROR: out of memory in readHMFrame",eError);
|
||||
length = iDim[0] * iDim[1];
|
||||
buffer = (HistInt *) malloc((length + 2) * sizeof(HistInt));
|
||||
if (!buffer) {
|
||||
SCWrite(pCon, "ERROR: out of memory in readHMFrame", eError);
|
||||
return 0;
|
||||
}
|
||||
memset(buffer,0,(length+2)*sizeof(HistInt));
|
||||
memset(buffer, 0, (length + 2) * sizeof(HistInt));
|
||||
|
||||
/*
|
||||
first two values are dimensions
|
||||
*/
|
||||
first two values are dimensions
|
||||
*/
|
||||
buffer[0] = htonl(iDim[0]);
|
||||
buffer[1] = htonl(iDim[1]);
|
||||
|
||||
if(isSINQHMDriv(pHM->pDriv) && noTimeBins > 2) {
|
||||
if (isSINQHMDriv(pHM->pDriv) && noTimeBins > 2) {
|
||||
/*
|
||||
read from HM. The 5 is PROJECT__FRAME in Sinqhm_def.h
|
||||
Again: be friendly: fix out of range frames
|
||||
*/
|
||||
if(nFrame < 0){
|
||||
read from HM. The 5 is PROJECT__FRAME in Sinqhm_def.h
|
||||
Again: be friendly: fix out of range frames
|
||||
*/
|
||||
if (nFrame < 0) {
|
||||
nFrame = 0;
|
||||
}
|
||||
if(nFrame >= noTimeBins){
|
||||
nFrame = noTimeBins-1;
|
||||
if (nFrame >= noTimeBins) {
|
||||
nFrame = noTimeBins - 1;
|
||||
}
|
||||
pTata = (SinqHMDriv *)pHM->pDriv->pPriv;
|
||||
pHist = (pSINQHM)pTata->pMaster;
|
||||
pTata = (SinqHMDriv *) pHM->pDriv->pPriv;
|
||||
pHist = (pSINQHM) pTata->pMaster;
|
||||
status = SINQHMProject(pHist, 0x0005, 0, nFrame,
|
||||
0, iDim[1], buffer+2,length*sizeof(HistInt));
|
||||
if(status != 1){
|
||||
SCWrite(pCon,"ERROR: SINQHM refused to deliver frame",eError);
|
||||
0, iDim[1], buffer + 2,
|
||||
length * sizeof(HistInt));
|
||||
if (status != 1) {
|
||||
SCWrite(pCon, "ERROR: SINQHM refused to deliver frame", eError);
|
||||
free(buffer);
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
be friendly, just read the 2D data which is there
|
||||
*/
|
||||
status = GetHistogram(pHM,pCon,0,0,length,buffer+2,length*sizeof(HistInt));
|
||||
if(!status){
|
||||
be friendly, just read the 2D data which is there
|
||||
*/
|
||||
status =
|
||||
GetHistogram(pHM, pCon, 0, 0, length, buffer + 2,
|
||||
length * sizeof(HistInt));
|
||||
if (!status) {
|
||||
free(buffer);
|
||||
return status;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
enforce network byte order
|
||||
*/
|
||||
for(i = 0; i < length; i++){
|
||||
buffer[i+2] = htonl(buffer[i+2]);
|
||||
enforce network byte order
|
||||
*/
|
||||
for (i = 0; i < length; i++) {
|
||||
buffer[i + 2] = htonl(buffer[i + 2]);
|
||||
}
|
||||
|
||||
SCWriteUUencoded(pCon,"framedata", buffer,(length+2)*sizeof(HistInt));
|
||||
SCWriteUUencoded(pCon, "framedata", buffer,
|
||||
(length + 2) * sizeof(HistInt));
|
||||
free(buffer);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*=======================================================================*/
|
||||
static int readFileFrame(SConnection *pCon,
|
||||
char *file, char *dictFile,
|
||||
char *alias, int nFrame){
|
||||
static int readFileFrame(SConnection * pCon,
|
||||
char *file, char *dictFile,
|
||||
char *alias, int nFrame)
|
||||
{
|
||||
int status, iDim[NX_MAXRANK], rank = 0, type = 0;
|
||||
int iStart[3], iSize[3], length, i;
|
||||
int *buffer = NULL;
|
||||
NXhandle fileHandle;
|
||||
NXdict dictHandle;
|
||||
NXdict dictHandle;
|
||||
char error[512];
|
||||
|
||||
status = NXopen(file,NXACC_READ,&fileHandle);
|
||||
if(status != NX_OK){
|
||||
sprintf(error,"ERROR: failed to open %s", file);
|
||||
SCWrite(pCon,error,eError);
|
||||
status = NXopen(file, NXACC_READ, &fileHandle);
|
||||
if (status != NX_OK) {
|
||||
sprintf(error, "ERROR: failed to open %s", file);
|
||||
SCWrite(pCon, error, eError);
|
||||
return 0;
|
||||
}
|
||||
status = NXDinitfromfile(dictFile, &dictHandle);
|
||||
if(status != NX_OK){
|
||||
sprintf(error,"ERROR: failed to open dictionary %s", dictFile);
|
||||
if (status != NX_OK) {
|
||||
sprintf(error, "ERROR: failed to open dictionary %s", dictFile);
|
||||
NXclose(&fileHandle);
|
||||
SCWrite(pCon,error,eError);
|
||||
SCWrite(pCon, error, eError);
|
||||
return 0;
|
||||
}
|
||||
|
||||
status = NXDopenalias(fileHandle,dictHandle,alias);
|
||||
if(status != NX_OK){
|
||||
sprintf(error,"ERROR: failed to open alias %s", alias);
|
||||
|
||||
status = NXDopenalias(fileHandle, dictHandle, alias);
|
||||
if (status != NX_OK) {
|
||||
sprintf(error, "ERROR: failed to open alias %s", alias);
|
||||
NXclose(&fileHandle);
|
||||
NXDclose(dictHandle,NULL);
|
||||
SCWrite(pCon,error,eError);
|
||||
NXDclose(dictHandle, NULL);
|
||||
SCWrite(pCon, error, eError);
|
||||
return 0;
|
||||
}
|
||||
|
||||
status = NXgetinfo(fileHandle,&rank,iDim,&type);
|
||||
if(type != NX_INT32 && type != NX_UINT32)type = -1;
|
||||
if(status != NX_OK || rank < 2 || type < 0 ){
|
||||
sprintf(error,"ERROR: Dataset does not match!");
|
||||
|
||||
status = NXgetinfo(fileHandle, &rank, iDim, &type);
|
||||
if (type != NX_INT32 && type != NX_UINT32)
|
||||
type = -1;
|
||||
if (status != NX_OK || rank < 2 || type < 0) {
|
||||
sprintf(error, "ERROR: Dataset does not match!");
|
||||
NXclose(&fileHandle);
|
||||
NXDclose(dictHandle,NULL);
|
||||
SCWrite(pCon,error,eError);
|
||||
NXDclose(dictHandle, NULL);
|
||||
SCWrite(pCon, error, eError);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
allocate space
|
||||
*/
|
||||
length = iDim[0]*iDim[1];
|
||||
buffer = (int *)malloc((length+2)*sizeof(int));
|
||||
if(!buffer){
|
||||
allocate space
|
||||
*/
|
||||
length = iDim[0] * iDim[1];
|
||||
buffer = (int *) malloc((length + 2) * sizeof(int));
|
||||
if (!buffer) {
|
||||
NXclose(&fileHandle);
|
||||
NXDclose(dictHandle,NULL);
|
||||
SCWrite(pCon,"ERROR: out of memory in readFrameFromFile",eError);
|
||||
NXDclose(dictHandle, NULL);
|
||||
SCWrite(pCon, "ERROR: out of memory in readFrameFromFile", eError);
|
||||
return 0;
|
||||
}
|
||||
memset(buffer,0,(length+2)*sizeof(int));
|
||||
memset(buffer, 0, (length + 2) * sizeof(int));
|
||||
|
||||
/*
|
||||
first two values: dimensions
|
||||
*/
|
||||
first two values: dimensions
|
||||
*/
|
||||
buffer[0] = htonl(iDim[0]);
|
||||
buffer[1] = htonl(iDim[1]);
|
||||
|
||||
if(rank == 2){
|
||||
if (rank == 2) {
|
||||
/*
|
||||
be friendly
|
||||
*/
|
||||
status = NXgetdata(fileHandle,buffer+2);
|
||||
be friendly
|
||||
*/
|
||||
status = NXgetdata(fileHandle, buffer + 2);
|
||||
} else {
|
||||
iStart[0] = iStart[1] = 0;
|
||||
if(nFrame > iDim[2] - 2){
|
||||
nFrame = iDim[2] - 2;
|
||||
if (nFrame > iDim[2] - 2) {
|
||||
nFrame = iDim[2] - 2;
|
||||
}
|
||||
iStart[2] = nFrame;
|
||||
iSize[0] = iDim[0];
|
||||
iSize[1] = iDim[1];
|
||||
iSize[2] = 1;
|
||||
status = NXgetslab(fileHandle,buffer+2,iStart,iSize);
|
||||
status = NXgetslab(fileHandle, buffer + 2, iStart, iSize);
|
||||
}
|
||||
if(status != NX_OK){
|
||||
if (status != NX_OK) {
|
||||
NXclose(&fileHandle);
|
||||
NXDclose(dictHandle,NULL);
|
||||
NXDclose(dictHandle, NULL);
|
||||
free(buffer);
|
||||
SCWrite(pCon,"ERROR: failed to read data",eError);
|
||||
SCWrite(pCon, "ERROR: failed to read data", eError);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
enforce network byte order
|
||||
*/
|
||||
for(i = 0; i < length; i++){
|
||||
buffer[2+i] = htonl(buffer[2+i]);
|
||||
enforce network byte order
|
||||
*/
|
||||
for (i = 0; i < length; i++) {
|
||||
buffer[2 + i] = htonl(buffer[2 + i]);
|
||||
}
|
||||
|
||||
SCWriteUUencoded(pCon,"framedata",buffer,(length+2)*sizeof(int));
|
||||
SCWriteUUencoded(pCon, "framedata", buffer, (length + 2) * sizeof(int));
|
||||
NXclose(&fileHandle);
|
||||
NXDclose(dictHandle,NULL);
|
||||
NXDclose(dictHandle, NULL);
|
||||
free(buffer);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*=======================================================================*/
|
||||
int PSDFrameAction(SConnection *pCon, SicsInterp *pSics, void *pData,
|
||||
int argc, char *argv[]){
|
||||
int PSDFrameAction(SConnection * pCon, SicsInterp * pSics, void *pData,
|
||||
int argc, char *argv[])
|
||||
{
|
||||
pHistMem pHM;
|
||||
int nFrame;
|
||||
|
||||
if(argc < 2){
|
||||
SCWrite(pCon,"ERROR: Insufficient number of arguments to PSDFrame",
|
||||
eError);
|
||||
if (argc < 2) {
|
||||
SCWrite(pCon, "ERROR: Insufficient number of arguments to PSDFrame",
|
||||
eError);
|
||||
return 0;
|
||||
}
|
||||
|
||||
strtolower(argv[1]);
|
||||
if(strcmp(argv[1],"hm") == 0){
|
||||
if(argc < 4){
|
||||
SCWrite(pCon,"ERROR: Insufficient number of arguments to PSDFrame",
|
||||
eError);
|
||||
if (strcmp(argv[1], "hm") == 0) {
|
||||
if (argc < 4) {
|
||||
SCWrite(pCon, "ERROR: Insufficient number of arguments to PSDFrame",
|
||||
eError);
|
||||
return 0;
|
||||
}
|
||||
pHM = (pHistMem)FindCommandData(pSics,argv[2],"HistMem");
|
||||
if(pHM == NULL){
|
||||
SCWrite(pCon,"ERROR: Did not find histogram memory",eError);
|
||||
pHM = (pHistMem) FindCommandData(pSics, argv[2], "HistMem");
|
||||
if (pHM == NULL) {
|
||||
SCWrite(pCon, "ERROR: Did not find histogram memory", eError);
|
||||
return 0;
|
||||
}
|
||||
nFrame = atoi(argv[3]);
|
||||
return readHMFrame(pCon,pHM,nFrame);
|
||||
} else if(strcmp(argv[1],"file") == 0){
|
||||
if(argc < 6 ){
|
||||
SCWrite(pCon,"ERROR: Insufficient number of arguments to PSDframe file",
|
||||
eError);
|
||||
nFrame = atoi(argv[3]);
|
||||
return readHMFrame(pCon, pHM, nFrame);
|
||||
} else if (strcmp(argv[1], "file") == 0) {
|
||||
if (argc < 6) {
|
||||
SCWrite(pCon,
|
||||
"ERROR: Insufficient number of arguments to PSDframe file",
|
||||
eError);
|
||||
return 0;
|
||||
}
|
||||
nFrame = atoi(argv[5]);
|
||||
return readFileFrame(pCon,argv[2],argv[3],argv[4],nFrame);
|
||||
return readFileFrame(pCon, argv[2], argv[3], argv[4], nFrame);
|
||||
} else {
|
||||
SCWrite(pCon,"ERROR: subcommand to PSDframe not recognised",eError);
|
||||
SCWrite(pCon, "ERROR: subcommand to PSDframe not recognised", eError);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
/*======================================================================*/
|
||||
int MakeFrameFunc(SConnection *pCon, SicsInterp *pSics, void *pData,
|
||||
int argc, char *argv[]){
|
||||
return AddCommand(pSics,"PSDframe",PSDFrameAction,NULL,NULL);
|
||||
}
|
||||
|
||||
/*======================================================================*/
|
||||
int MakeFrameFunc(SConnection * pCon, SicsInterp * pSics, void *pData,
|
||||
int argc, char *argv[])
|
||||
{
|
||||
return AddCommand(pSics, "PSDframe", PSDFrameAction, NULL, NULL);
|
||||
}
|
||||
|
Reference in New Issue
Block a user