mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-22 17:47:59 +02:00
moved common files outside slsDetectorSoftware
This commit is contained in:
676
commonFiles/communication_funcs.c
Executable file
676
commonFiles/communication_funcs.c
Executable file
@ -0,0 +1,676 @@
|
||||
|
||||
|
||||
#include "communication_funcs.h"
|
||||
//#include <sys/socket.h>
|
||||
#include <netinet/tcp.h> /* for TCP_NODELAY */
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <sys/time.h>
|
||||
char lastClientIP[INET_ADDRSTRLEN];
|
||||
char thisClientIP[INET_ADDRSTRLEN];
|
||||
int lockStatus;
|
||||
int differentClients;
|
||||
|
||||
//int socketDescriptor, file_des;
|
||||
const int send_rec_max_size=SEND_REC_MAX_SIZE;
|
||||
extern int errno;
|
||||
|
||||
|
||||
char dummyClientIP[INET_ADDRSTRLEN];
|
||||
|
||||
|
||||
fd_set readset, tempset;
|
||||
int isock=0, maxfd;
|
||||
|
||||
|
||||
int myport=-1;
|
||||
|
||||
//struct sockaddr_in address;
|
||||
//#define VERBOSE
|
||||
|
||||
|
||||
int bindSocket(unsigned short int port_number) {
|
||||
int i;
|
||||
|
||||
struct sockaddr_in addressS;
|
||||
int socketDescriptor;
|
||||
//int file_des;
|
||||
|
||||
//file_des= -1;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (myport==port_number)
|
||||
return -10;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
socketDescriptor = socket(AF_INET, SOCK_STREAM,0); //tcp
|
||||
|
||||
//socketDescriptor = socket(PF_INET, SOCK_STREAM, 0);
|
||||
|
||||
|
||||
|
||||
if (socketDescriptor < 0) {
|
||||
printf("Can not create socket\n");
|
||||
} else {
|
||||
|
||||
i = 1;
|
||||
setsockopt(socketDescriptor, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i));
|
||||
// setsockopt(socketDescriptor, IPPROTO_TCP, TCP_NODELAY, (char *) &i, sizeof(i));
|
||||
// TCP_CORK
|
||||
|
||||
// Set some fields in the serverAddress structure.
|
||||
addressS.sin_family = AF_INET;
|
||||
addressS.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||
addressS.sin_port = htons(port_number);
|
||||
|
||||
// memset(&address.sin_addr, 0, sizeof(address.sin_addr));
|
||||
|
||||
|
||||
if(bind(socketDescriptor,(struct sockaddr *) &addressS,sizeof(addressS))<0){
|
||||
|
||||
printf("Can not create socket\n");
|
||||
|
||||
socketDescriptor=-1;
|
||||
} else {
|
||||
if (listen(socketDescriptor, 5)==0) {
|
||||
|
||||
if (isock==0) {
|
||||
FD_ZERO(&readset);
|
||||
}
|
||||
|
||||
|
||||
FD_SET(socketDescriptor, &readset);
|
||||
isock++;
|
||||
maxfd = socketDescriptor;
|
||||
printf ("%d port %d fd %d\n",isock, port_number,socketDescriptor);
|
||||
myport=port_number;
|
||||
} else
|
||||
printf("error on listen");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//int getrlimit(int resource, struct rlimit *rlim);
|
||||
|
||||
|
||||
|
||||
return socketDescriptor;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int getServerError(int socketDescriptor)
|
||||
{
|
||||
if (socketDescriptor<0) return 1;
|
||||
else return 0;
|
||||
};
|
||||
|
||||
|
||||
int acceptConnection(int socketDescriptor) {
|
||||
|
||||
|
||||
int j;
|
||||
|
||||
|
||||
struct sockaddr_in addressC;
|
||||
int file_des=-1;
|
||||
struct timeval tv;
|
||||
int result;
|
||||
|
||||
|
||||
//socklen_t address_length;
|
||||
socklen_t address_length=sizeof(struct sockaddr_in);
|
||||
|
||||
if (socketDescriptor<0)
|
||||
return -1;
|
||||
|
||||
memcpy(&tempset, &readset, sizeof(tempset));
|
||||
tv.tv_sec = 10000000;
|
||||
tv.tv_usec = 0;
|
||||
result = select(maxfd + 1, &tempset, NULL, NULL, &tv);
|
||||
|
||||
if (result == 0) {
|
||||
printf("select() timed out!\n");
|
||||
} else if (result < 0 && errno != EINTR) {
|
||||
printf("Error in select(): %s\n", strerror(errno));
|
||||
} else if (result > 0) {
|
||||
#ifdef VERBOSE
|
||||
printf("select returned!\n");
|
||||
#endif
|
||||
for (j=0; j<maxfd+1; j++) {
|
||||
if (FD_ISSET(j, &tempset)) {
|
||||
#ifdef VERBOSE
|
||||
printf("fd %d is set\n",j);
|
||||
#endif
|
||||
FD_CLR(j, &tempset);
|
||||
|
||||
|
||||
if ((file_des = accept(j,(struct sockaddr *) &addressC, &address_length)) < 0) {
|
||||
printf("Error in accept(): %s\n", strerror(errno));
|
||||
printf("Error: with server accept, connection refused %d\n", errno);
|
||||
|
||||
|
||||
switch(errno) {
|
||||
case EWOULDBLOCK:
|
||||
printf("ewouldblock eagain\n");
|
||||
break;
|
||||
case EBADF:
|
||||
printf("ebadf\n");
|
||||
break;
|
||||
case ECONNABORTED:
|
||||
printf("econnaborted\n");
|
||||
break;
|
||||
case EFAULT:
|
||||
printf("efault\n");
|
||||
break;
|
||||
case EINTR:
|
||||
printf("eintr\n");
|
||||
break;
|
||||
case EINVAL:
|
||||
printf("einval\n");
|
||||
break;
|
||||
case EMFILE:
|
||||
printf("emfile\n");
|
||||
break;
|
||||
case ENFILE:
|
||||
printf("enfile\n");
|
||||
break;
|
||||
case ENOTSOCK:
|
||||
printf("enotsock\n");
|
||||
break;
|
||||
case EOPNOTSUPP:
|
||||
printf("eOPNOTSUPP\n");
|
||||
break;
|
||||
case ENOBUFS:
|
||||
printf("ENOBUFS\n");
|
||||
break;
|
||||
case ENOMEM:
|
||||
printf("ENOMEM\n");
|
||||
break;
|
||||
case ENOSR:
|
||||
printf("ENOSR\n");
|
||||
break;
|
||||
case EPROTO:
|
||||
printf("EPROTO\n");
|
||||
break;
|
||||
default:
|
||||
printf("unknown error\n");
|
||||
}
|
||||
|
||||
// should remove descriptor
|
||||
|
||||
socketDescriptor=-1;
|
||||
} else {
|
||||
|
||||
inet_ntop(AF_INET, &(addressC.sin_addr), dummyClientIP, INET_ADDRSTRLEN);
|
||||
#ifdef VERBOSE
|
||||
printf("connection accepted %d\n",file_des);
|
||||
#endif
|
||||
FD_SET(file_des, &readset);
|
||||
maxfd = (maxfd < file_des)?file_des:maxfd;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
return file_des;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void closeConnection(int file_des) {
|
||||
#ifdef VERY_VERBOSE
|
||||
#endif
|
||||
if(file_des>=0)
|
||||
close(file_des);
|
||||
FD_CLR(file_des, &readset);
|
||||
}
|
||||
|
||||
void exitServer(int socketDescriptor) {
|
||||
if (socketDescriptor>=0)
|
||||
close(socketDescriptor);
|
||||
#ifdef VERY_VERBOSE
|
||||
printf("Closing server\n");
|
||||
#endif
|
||||
FD_CLR(socketDescriptor, &readset);
|
||||
socketDescriptor=-1;
|
||||
isock--;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void swapData(void* val,int length,intType itype){
|
||||
int i;
|
||||
int16_t* c= (int16_t*)val;
|
||||
int32_t* a= (int32_t*)val;
|
||||
int64_t* b= (int64_t*)val;
|
||||
for(i=0; length > 0; i++){
|
||||
switch(itype){
|
||||
case INT16:
|
||||
c[i] = ((c[i] & 0x00FF) << 8) | ((c[i] & 0xFF00) >> 8);
|
||||
length -= sizeof(int16_t);
|
||||
break;
|
||||
case INT32:
|
||||
a[i]=((a[i] << 8) & 0xFF00FF00) | ((a[i] >> 8) & 0xFF00FF );
|
||||
a[i]=(a[i] << 16) | ((a[i] >> 16) & 0xFFFF);
|
||||
length -= sizeof(int32_t);
|
||||
break;
|
||||
case INT64:
|
||||
b[i] = ((b[i] << 8) & 0xFF00FF00FF00FF00ULL ) | ((b[i] >> 8) & 0x00FF00FF00FF00FFULL );
|
||||
b[i] = ((b[i] << 16) & 0xFFFF0000FFFF0000ULL ) | ((b[i] >> 16) & 0x0000FFFF0000FFFFULL );
|
||||
b[i] = (b[i] << 32) | ((b[i] >> 32) & 0xFFFFFFFFULL);
|
||||
length -= sizeof(int64_t);
|
||||
break;
|
||||
default:
|
||||
length = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int sendData(int file_des, void* buf,int length, intType itype){
|
||||
#ifndef PCCOMPILE
|
||||
#ifdef EIGERD
|
||||
swapData(buf, length, itype);
|
||||
#endif
|
||||
#endif
|
||||
return sendDataOnly(file_des, buf, length);
|
||||
}
|
||||
|
||||
|
||||
int receiveData(int file_des, void* buf,int length, intType itype){
|
||||
int ret = receiveDataOnly(file_des, buf, length);
|
||||
#ifndef PCCOMPILE
|
||||
#ifdef EIGERD
|
||||
if (ret >= 0) swapData(buf, length, itype);
|
||||
#endif
|
||||
#endif
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int sendDataOnly(int file_des, void* buf,int length) {
|
||||
if (!length)
|
||||
return 0;
|
||||
int ret = write(file_des, buf, length); //value of -1 is other end socket crash as sigpipe is ignored
|
||||
if (ret < 0) cprintf(BG_RED, "Error writing to socket. Possible socket crash\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int receiveDataOnly(int file_des, void* buf,int length) {
|
||||
|
||||
int total_received=0;
|
||||
int nreceiving;
|
||||
int nreceived;
|
||||
if (file_des<0) return -1;
|
||||
#ifdef VERY_VERBOSE
|
||||
printf("want to receive %d Bytes\n", length);
|
||||
#endif
|
||||
|
||||
while(length > 0) {
|
||||
nreceiving = (length>send_rec_max_size) ? send_rec_max_size:length; // (condition) ? if_true : if_false
|
||||
nreceived = read(file_des,(char*)buf+total_received,nreceiving);
|
||||
if(!nreceived){
|
||||
if(!total_received) {
|
||||
return -1; //to handle it
|
||||
}
|
||||
break;
|
||||
}
|
||||
length-=nreceived;
|
||||
total_received+=nreceived;
|
||||
}
|
||||
|
||||
if (total_received>0)
|
||||
strcpy(thisClientIP,dummyClientIP);
|
||||
|
||||
if (strcmp(lastClientIP,thisClientIP))
|
||||
differentClients=1;
|
||||
else
|
||||
differentClients=0;
|
||||
|
||||
return total_received;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int sendChannel(int file_des, sls_detector_channel *myChan) {
|
||||
int ts=0;
|
||||
//sendDataOnly(file_des,myChan, sizeof(sls_detector_channel));
|
||||
ts+=sendData(file_des,&(myChan->chan),sizeof(myChan->chan),INT32);
|
||||
ts+=sendData(file_des,&(myChan->chip),sizeof(myChan->chip),INT32);
|
||||
ts+=sendData(file_des,&(myChan->module),sizeof(myChan->module),INT32);
|
||||
ts+=sendData(file_des,&(myChan->reg),sizeof(myChan->reg),INT64);
|
||||
return ts;
|
||||
}
|
||||
|
||||
int sendChip(int file_des, sls_detector_chip *myChip) {
|
||||
int ts=0;
|
||||
//ts+=sendDataOnly(file_des,myChip,sizeof(sls_detector_chip));
|
||||
ts+=sendData(file_des,&(myChip->chip),sizeof(myChip->chip),INT32);
|
||||
ts+=sendData(file_des,&(myChip->module),sizeof(myChip->module),INT32);
|
||||
ts+=sendData(file_des,&(myChip->nchan),sizeof(myChip->nchan),INT32);
|
||||
ts+=sendData(file_des,&(myChip->reg),sizeof(myChip->reg),INT32);
|
||||
ts+=sendData(file_des,(myChip->chanregs),sizeof(myChip->chanregs),INT32);
|
||||
ts+=sendData(file_des,myChip->chanregs,myChip->nchan*sizeof(int),INT32);
|
||||
return ts;
|
||||
}
|
||||
|
||||
|
||||
int sendModule(int file_des, sls_detector_module *myMod) {
|
||||
return sendModuleGeneral(file_des, myMod, 1);
|
||||
}
|
||||
|
||||
|
||||
int sendModuleGeneral(int file_des, sls_detector_module *myMod, int sendAll) {
|
||||
int ts=0;
|
||||
#ifdef VERBOSE
|
||||
int idac;
|
||||
#endif
|
||||
int nChips=myMod->nchip;
|
||||
int nChans=myMod->nchan;
|
||||
int nAdcs=myMod->nadc;
|
||||
int nDacs=myMod->ndac;
|
||||
//ts+= sendDataOnly(file_des,myMod,sizeof(sls_detector_module));
|
||||
ts+=sendData(file_des,&(myMod->module),sizeof(myMod->module),INT32);
|
||||
ts+=sendData(file_des,&(myMod->serialnumber),sizeof(myMod->serialnumber),INT32);
|
||||
ts+=sendData(file_des,&(myMod->nchan),sizeof(myMod->nchan),INT32);
|
||||
ts+=sendData(file_des,&(myMod->nchip),sizeof(myMod->nchip),INT32);
|
||||
ts+=sendData(file_des,&(myMod->ndac),sizeof(myMod->ndac),INT32);
|
||||
ts+=sendData(file_des,&(myMod->nadc),sizeof(myMod->nadc),INT32);
|
||||
ts+=sendData(file_des,&(myMod->reg),sizeof(myMod->reg),INT32);
|
||||
|
||||
#ifdef MYTHEND
|
||||
ts+=sendData(file_des,myMod->dacs,sizeof(myMod->ndac),OTHER);
|
||||
ts+=sendData(file_des,myMod->adcs,sizeof(myMod->nadc),OTHER);
|
||||
ts+=sendData(file_des,myMod->chipregs,sizeof(myMod->nchip),OTHER);
|
||||
ts+=sendData(file_des,myMod->chanregs,sizeof(myMod->nchan),OTHER);
|
||||
}
|
||||
#endif
|
||||
ts+=sendData(file_des,&(myMod->gain), sizeof(myMod->gain),OTHER);
|
||||
ts+=sendData(file_des,&(myMod->offset), sizeof(myMod->offset),OTHER);
|
||||
|
||||
#ifdef VERBOSE
|
||||
printf("module %d of size %d sent\n",myMod->module, ts);
|
||||
#endif
|
||||
ts+= sendData(file_des,myMod->dacs,sizeof(dacs_t)*nDacs,INT32);
|
||||
#ifdef VERBOSE
|
||||
printf("dacs %d of size %d sent\n",myMod->module, ts);
|
||||
int idac;
|
||||
for (idac=0; idac< nDacs; idac++)
|
||||
printf("dac %d is %d\n",idac,(int)myMod->dacs[idac]);
|
||||
#endif
|
||||
ts+= sendData(file_des,myMod->adcs,sizeof(dacs_t)*nAdcs,INT32);
|
||||
#ifdef VERBOSE
|
||||
printf("adcs %d of size %d sent\n",myMod->module, ts);
|
||||
#endif
|
||||
|
||||
/*some detectors dont require sending all trimbits etc.*/
|
||||
if(sendAll){
|
||||
ts+=sendData(file_des,myMod->chipregs,sizeof(int)*nChips,INT32);
|
||||
#ifdef VERBOSE
|
||||
printf("chips %d of size %d sent\n",myMod->module, ts);
|
||||
#endif
|
||||
ts+=sendData(file_des,myMod->chanregs,sizeof(int)*nChans,INT32);
|
||||
#ifdef VERBOSE
|
||||
printf("chans %d of size %d sent - %d\n",myMod->module, ts, myMod->nchan);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef VERBOSE
|
||||
printf("module %d of size %d sent register %x\n",myMod->module, ts, myMod->reg);
|
||||
#endif
|
||||
return ts;
|
||||
}
|
||||
|
||||
int receiveChannel(int file_des, sls_detector_channel *myChan) {
|
||||
int ts=0;
|
||||
//receiveDataOnly(file_des,myChan,sizeof(sls_detector_channel));
|
||||
ts+=receiveData(file_des,&(myChan->chan),sizeof(myChan->chan),INT32);
|
||||
ts+=receiveData(file_des,&(myChan->chip),sizeof(myChan->chip),INT32);
|
||||
ts+=receiveData(file_des,&(myChan->module),sizeof(myChan->module),INT32);
|
||||
ts+=receiveData(file_des,&(myChan->reg),sizeof(myChan->reg),INT32);
|
||||
return ts;
|
||||
}
|
||||
|
||||
int receiveChip(int file_des, sls_detector_chip* myChip) {
|
||||
|
||||
int *ptr=myChip->chanregs;
|
||||
int ts=0;
|
||||
int nChans, nchanold=myChip->nchan, chdiff;
|
||||
|
||||
//ts+= receiveDataOnly(file_des,myChip,sizeof(sls_detector_chip));
|
||||
ts+=receiveData(file_des,&(myChip->chip),sizeof(myChip->chip),INT32);
|
||||
ts+=receiveData(file_des,&(myChip->module),sizeof(myChip->module),INT32);
|
||||
ts+=receiveData(file_des,&(myChip->nchan),sizeof(myChip->nchan),INT32);
|
||||
ts+=receiveData(file_des,&(myChip->reg),sizeof(myChip->reg),INT32);
|
||||
ts+=receiveData(file_des,(myChip->chanregs),sizeof(myChip->chanregs),INT32);
|
||||
|
||||
myChip->chanregs=ptr;
|
||||
nChans=myChip->nchan;
|
||||
chdiff=nChans-nchanold;
|
||||
if (nchanold!=nChans) {
|
||||
printf("wrong number of channels received!\n");
|
||||
}
|
||||
|
||||
|
||||
#ifdef VERBOSE
|
||||
printf("chip structure received\n");
|
||||
printf("now receiving %d channels\n", nChans);
|
||||
#endif
|
||||
|
||||
if (chdiff<=0)
|
||||
ts+=receiveData(file_des,myChip->chanregs, sizeof(int)*nChans,INT32);
|
||||
else {
|
||||
ptr=(int*)malloc(chdiff*sizeof(int));
|
||||
myChip->nchan=nchanold;
|
||||
ts+=receiveData(file_des,myChip->chanregs, sizeof(int)*nchanold,INT32);
|
||||
ts+=receiveData(file_des,ptr, sizeof(int)*chdiff,INT32);
|
||||
free(ptr);
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
#ifdef VERBOSE
|
||||
printf("chip's channels received\n");
|
||||
#endif
|
||||
return ts;
|
||||
}
|
||||
|
||||
|
||||
int receiveModule(int file_des, sls_detector_module* myMod) {
|
||||
return receiveModuleGeneral(file_des,myMod,1);
|
||||
}
|
||||
|
||||
int receiveModuleGeneral(int file_des, sls_detector_module* myMod, int receiveAll) {
|
||||
int ts=0;
|
||||
dacs_t *dacptr=myMod->dacs;
|
||||
dacs_t *adcptr=myMod->adcs;
|
||||
int *chipptr=myMod->chipregs, *chanptr=myMod->chanregs;
|
||||
int nChips, nchipold=myMod->nchip, nchipdiff;
|
||||
int nChans, nchanold=myMod->nchan, nchandiff;
|
||||
int nDacs, ndold=myMod->ndac, ndacdiff;
|
||||
int nAdcs, naold=myMod->nadc, nadcdiff;
|
||||
#ifdef VERBOSE
|
||||
int id=0;
|
||||
#endif
|
||||
// ts+= receiveDataOnly(file_des,myMod,sizeof(sls_detector_module));
|
||||
ts+=receiveData(file_des,&(myMod->module),sizeof(myMod->module),INT32);
|
||||
ts+=receiveData(file_des,&(myMod->serialnumber),sizeof(myMod->serialnumber),INT32);
|
||||
ts+=receiveData(file_des,&(myMod->nchan),sizeof(myMod->nchan),INT32);
|
||||
ts+=receiveData(file_des,&(myMod->nchip),sizeof(myMod->nchip),INT32);
|
||||
ts+=receiveData(file_des,&(myMod->ndac),sizeof(myMod->ndac),INT32);
|
||||
ts+=receiveData(file_des,&(myMod->nadc),sizeof(myMod->nadc),INT32);
|
||||
ts+=receiveData(file_des,&(myMod->reg),sizeof(myMod->reg),INT32);
|
||||
#ifdef MYTHEND
|
||||
ts+=receiveData(file_des,myMod->dacs,sizeof(myMod->ndac),INT32);
|
||||
ts+=receiveData(file_des,myMod->adcs,sizeof(myMod->nadc),INT32);
|
||||
ts+=receiveData(file_des,myMod->chipregs,sizeof(myMod->nchip),INT32);
|
||||
ts+=receiveData(file_des,myMod->chanregs,sizeof(myMod->nchan),INT32);
|
||||
#endif
|
||||
ts+=receiveData(file_des,&(myMod->gain), sizeof(myMod->gain),OTHER);
|
||||
ts+=receiveData(file_des,&(myMod->offset), sizeof(myMod->offset),OTHER);
|
||||
|
||||
myMod->dacs=dacptr;
|
||||
myMod->adcs=adcptr;
|
||||
myMod->chipregs=chipptr;
|
||||
myMod->chanregs=chanptr;
|
||||
|
||||
#ifdef EIGERD
|
||||
//feature to exclude sending of trimbtis, nchips=0,nchans=0 in that case
|
||||
if(myMod->nchip == 0 && myMod->nchan == 0) {
|
||||
receiveAll=0;
|
||||
nchipold=0;
|
||||
nchanold=0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
nChips=myMod->nchip;
|
||||
nchipdiff=nChips-nchipold;
|
||||
if (nchipold!=nChips) {
|
||||
printf("received wrong number of chips\n");
|
||||
}
|
||||
#ifdef VERBOSE
|
||||
else
|
||||
printf("received %d chips\n",nChips);
|
||||
#endif
|
||||
|
||||
nChans=myMod->nchan;
|
||||
nchandiff=nChans-nchanold;
|
||||
if (nchanold!=nChans) {
|
||||
printf("received wrong number of channels\n");
|
||||
}
|
||||
#ifdef VERBOSE
|
||||
else
|
||||
printf("received %d chans\n",nChans);
|
||||
#endif
|
||||
|
||||
|
||||
nDacs=myMod->ndac;
|
||||
ndacdiff=nDacs-ndold;
|
||||
if (ndold!=nDacs) {
|
||||
printf("received wrong number of dacs\n");
|
||||
}
|
||||
#ifdef VERBOSE
|
||||
else
|
||||
printf("received %d dacs\n",nDacs);
|
||||
#endif
|
||||
|
||||
nAdcs=myMod->nadc;
|
||||
nadcdiff=nAdcs-naold;
|
||||
if (naold!=nAdcs) {
|
||||
printf("received wrong number of adcs\n");
|
||||
}
|
||||
#ifdef VERBOSE
|
||||
else
|
||||
printf("received %d adcs\n",nAdcs);
|
||||
#endif
|
||||
if (ndacdiff<=0) {
|
||||
ts+=receiveData(file_des,myMod->dacs, sizeof(dacs_t)*nDacs,INT32);
|
||||
#ifdef VERBOSE
|
||||
printf("dacs received\n");
|
||||
int id;
|
||||
for (id=0; id<nDacs; id++)
|
||||
printf("dac %d val %d\n",id, (int)myMod->dacs[id]);
|
||||
|
||||
|
||||
#endif
|
||||
} else {
|
||||
dacptr=(dacs_t*)malloc(ndacdiff*sizeof(dacs_t));
|
||||
myMod->ndac=ndold;
|
||||
ts+=receiveData(file_des,myMod->dacs, sizeof(dacs_t)*ndold,INT32);
|
||||
ts+=receiveData(file_des,dacptr, sizeof(dacs_t)*ndacdiff,INT32);
|
||||
free(dacptr);
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
if (nadcdiff<=0) {
|
||||
ts+=receiveData(file_des,myMod->adcs, sizeof(dacs_t)*nAdcs,INT32);
|
||||
#ifdef VERBOSE
|
||||
printf("adcs received\n");
|
||||
#endif
|
||||
} else {
|
||||
adcptr=(dacs_t*)malloc(nadcdiff*sizeof(dacs_t));
|
||||
myMod->nadc=naold;
|
||||
ts+=receiveData(file_des,myMod->adcs, sizeof(dacs_t)*naold,INT32);
|
||||
ts+=receiveData(file_des,adcptr, sizeof(dacs_t)*nadcdiff,INT32);
|
||||
free(adcptr);
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
|
||||
/*some detectors dont require sending all trimbits etc.*/
|
||||
if(receiveAll){
|
||||
|
||||
if (nchipdiff<=0) {
|
||||
ts+=receiveData(file_des,myMod->chipregs, sizeof(int)*nChips,INT32);
|
||||
#ifdef VERBOSE
|
||||
printf("chips received\n");
|
||||
#endif
|
||||
} else {
|
||||
chipptr=(int*)malloc(nchipdiff*sizeof(int));
|
||||
myMod->nchip=nchipold;
|
||||
ts+=receiveData(file_des,myMod->chipregs, sizeof(int)*nchipold,INT32);
|
||||
ts+=receiveData(file_des,chipptr, sizeof(int)*nchipdiff,INT32);
|
||||
free(chipptr);
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
if (nchandiff<=0) {
|
||||
ts+=receiveData(file_des,myMod->chanregs, sizeof(int)*nChans,INT32);
|
||||
#ifdef VERBOSE
|
||||
printf("chans received\n");
|
||||
#endif
|
||||
} else {
|
||||
chanptr=(int*)malloc(nchandiff*sizeof(int));
|
||||
myMod->nchan=nchanold;
|
||||
ts+=receiveData(file_des,myMod->chanregs, sizeof(int)*nchanold,INT32);
|
||||
ts+=receiveData(file_des,chanptr, sizeof(int)*nchandiff,INT32);
|
||||
free(chanptr);
|
||||
return FAIL;
|
||||
}
|
||||
}
|
||||
#ifdef VERBOSE
|
||||
printf("received module %d of size %d register %x\n",myMod->module,ts,myMod->reg);
|
||||
#endif
|
||||
|
||||
return ts;
|
||||
}
|
51
commonFiles/communication_funcs.h
Executable file
51
commonFiles/communication_funcs.h
Executable file
@ -0,0 +1,51 @@
|
||||
#ifndef COMMUNICATION_FUNCS_H
|
||||
#define COMMUNICATION_FUNCS_H
|
||||
|
||||
#define SEND_REC_MAX_SIZE 4096
|
||||
#define DEFAULT_PORTNO 1952
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
|
||||
|
||||
#include <arpa/inet.h>
|
||||
#include <netdb.h>
|
||||
#include <netinet/in.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "sls_detector_defs.h"
|
||||
|
||||
|
||||
|
||||
typedef enum{
|
||||
INT16,
|
||||
INT32,
|
||||
INT64,
|
||||
OTHER
|
||||
}intType;
|
||||
|
||||
|
||||
|
||||
|
||||
int bindSocket(unsigned short int port_number);
|
||||
int acceptConnection(int socketDescriptor);
|
||||
void closeConnection(int file_Des);
|
||||
void exitServer(int socketDescriptor);
|
||||
|
||||
void swapData(void* val,int length,intType itype);
|
||||
int sendData(int file_des, void* buf,int length, intType itype);
|
||||
int receiveData(int file_des, void* buf,int length, intType itype);
|
||||
int sendDataOnly(int file_des, void* buf,int length);
|
||||
int receiveDataOnly(int file_des, void* buf,int length);
|
||||
|
||||
|
||||
int getServerError(int socketDescriptor);
|
||||
int sendChannel(int file_des, sls_detector_channel *myChan);
|
||||
int sendChip(int file_des, sls_detector_chip *myChip);
|
||||
int sendModule(int file_des, sls_detector_module *myMod);
|
||||
int sendModuleGeneral(int file_des, sls_detector_module *myMod, int sendAll);
|
||||
int receiveChannel(int file_des, sls_detector_channel *myChan);
|
||||
int receiveChip(int file_des, sls_detector_chip* myChip);
|
||||
int receiveModule(int file_des, sls_detector_module* myMod);
|
||||
int receiveModuleGeneral(int file_des, sls_detector_module* myMod, int receiveAll);
|
||||
|
||||
#endif
|
343
commonFiles/error_defs.h
Normal file
343
commonFiles/error_defs.h
Normal file
@ -0,0 +1,343 @@
|
||||
/*
|
||||
* error_defs.h
|
||||
*
|
||||
* Created on: Jan 18, 2013
|
||||
* Author: l_maliakal_d
|
||||
*/
|
||||
|
||||
#ifndef ERROR_DEFS_H_
|
||||
#define ERROR_DEFS_H_
|
||||
|
||||
#include "ansi.h"
|
||||
#include "sls_detector_defs.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string>
|
||||
#include <cstring>
|
||||
#include <iostream>
|
||||
//
|
||||
|
||||
/** Error flags */
|
||||
/*Assumption: Only upto 63 detectors */
|
||||
|
||||
// multi errors
|
||||
// 0xFFF0000000000000ULL
|
||||
#define MULTI_DETECTORS_NOT_ADDED 0x8000000000000000ULL
|
||||
#define MULTI_HAVE_DIFFERENT_VALUES 0x4000000000000000ULL
|
||||
#define MULTI_CONFIG_FILE_ERROR 0x2000000000000000ULL
|
||||
|
||||
// sls errors
|
||||
#define CRITICAL_ERROR_MASK 0xFFFFFFF
|
||||
|
||||
// 0xFFFFFFF000000000ULL
|
||||
#define CANNOT_CONNECT_TO_DETECTOR 0x4000000000000000ULL
|
||||
#define CANNOT_CONNECT_TO_RECEIVER 0x2000000000000000ULL
|
||||
#define COULDNOT_SET_CONTROL_PORT 0x1000000000000000ULL
|
||||
#define COULDNOT_SET_STOP_PORT 0x0800000000000000ULL
|
||||
#define COULDNOT_SET_DATA_PORT 0x0400000000000000ULL
|
||||
#define FILE_PATH_DOES_NOT_EXIST 0x0200000000000000ULL
|
||||
#define COULDNOT_CREATE_UDP_SOCKET 0x0100000000000000ULL
|
||||
#define COULDNOT_CREATE_FILE 0x0080000000000000ULL
|
||||
#define RECEIVER_DET_HOSTNAME_NOT_SET 0x0040000000000000ULL
|
||||
#define RECEIVER_DET_HOSTTYPE_NOT_SET 0x0020000000000000ULL
|
||||
#define DETECTOR_TEN_GIGA 0x0010000000000000ULL
|
||||
#define DETECTOR_ACTIVATE 0x0008000000000000ULL
|
||||
#define COULD_NOT_CONFIGURE_MAC 0x0004000000000000ULL
|
||||
#define COULDNOT_START_RECEIVER 0x0002000000000000ULL // default error like starting threads
|
||||
#define COULDNOT_STOP_RECEIVER 0x0001000000000000ULL
|
||||
#define RECEIVER_DET_POSID_NOT_SET 0x0000800000000000ULL
|
||||
#define RECEIVER_MULTI_DET_SIZE_NOT_SET 0x0000400000000000ULL
|
||||
#define PREPARE_ACQUISITION 0x0000200000000000ULL
|
||||
#define REGISER_WRITE_READ 0x0000100000000000ULL
|
||||
#define VERSION_COMPATIBILITY 0x0000080000000000ULL
|
||||
// 0xFFFFFF0000000000ULL
|
||||
|
||||
// 0x000000FFFFFFFFFFULL
|
||||
#define COULDNOT_SET_NETWORK_PARAMETER 0x0000000000000001ULL
|
||||
#define COULDNOT_SET_ROI 0x0000000000000002ULL
|
||||
#define RECEIVER_READ_FREQUENCY 0x0000000000000004ULL
|
||||
#define SETTINGS_NOT_SET 0x0000000000000008ULL
|
||||
#define SETTINGS_FILE_NOT_OPEN 0x0000000000000010ULL
|
||||
#define DETECTOR_TIMER_VALUE_NOT_SET 0x0000000000000020ULL
|
||||
#define RECEIVER_ACQ_PERIOD_NOT_SET 0x0000000000000040ULL
|
||||
#define RECEIVER_FRAME_NUM_NOT_SET 0x0000000000000080ULL
|
||||
#define RECEIVER_DYNAMIC_RANGE 0x0000000000000100ULL
|
||||
#define RECEIVER_TEN_GIGA 0x0000000000000200ULL
|
||||
#define ALLTIMBITS_NOT_SET 0x0000000000000400ULL
|
||||
#define COULD_NOT_SET_SPEED_PARAMETERS 0x0000000000000800ULL
|
||||
#define COULD_NOT_SET_READOUT_FLAGS 0x0000000000001000ULL
|
||||
#define COULD_NOT_SET_FIFO_DEPTH 0x0000000000002000ULL
|
||||
#define COULD_NOT_SET_COUNTER_BIT 0x0000000000004000ULL
|
||||
#define COULD_NOT_PULSE_PIXEL 0x0000000000008000ULL
|
||||
#define COULD_NOT_PULSE_PIXEL_NMOVE 0x0000000000010000ULL
|
||||
#define COULD_NOT_PULSE_CHIP 0x0000000000020000ULL
|
||||
#define COULD_NOT_SET_RATE_CORRECTION 0x0000000000040000ULL
|
||||
#define DETECTOR_NETWORK_PARAMETER 0x0000000000080000ULL
|
||||
#define RATE_CORRECTION_NOT_32or16BIT 0x0000000000100000ULL
|
||||
#define RATE_CORRECTION_NO_TAU_PROVIDED 0x0000000000200000ULL
|
||||
#define PROGRAMMING_ERROR 0x0000000000400000ULL
|
||||
#define RECEIVER_ACTIVATE 0x0000000000800000ULL
|
||||
#define DATA_STREAMING 0x0000000001000000ULL
|
||||
#define RESET_ERROR 0x0000000002000000ULL
|
||||
#define POWER_CHIP 0x0000000004000000ULL
|
||||
#define RECEIVER_READ_TIMER 0x0000000008000000ULL
|
||||
#define RECEIVER_ACQ_TIME_NOT_SET 0x0000000010000000ULL
|
||||
#define RECEIVER_FLIPPED_DATA_NOT_SET 0x0000000020000000ULL
|
||||
#define THRESHOLD_NOT_SET 0x0000000040000000ULL
|
||||
#define RECEIVER_FILE_FORMAT 0x0000000080000000ULL
|
||||
#define RECEIVER_PARAMETER_NOT_SET 0x0000000100000000ULL
|
||||
#define RECEIVER_TIMER_NOT_SET 0x0000000200000000ULL
|
||||
#define RECEIVER_ENABLE_GAPPIXELS_NOT_SET 0x0000000400000000ULL
|
||||
#define RESTREAM_STOP_FROM_RECEIVER 0x0000000800000000ULL
|
||||
#define TEMPERATURE_CONTROL 0x0000001000000000ULL
|
||||
#define AUTO_COMP_DISABLE 0x0000002000000000ULL
|
||||
#define CONFIG_FILE 0x0000004000000000ULL
|
||||
#define STORAGE_CELL_START 0x0000008000000000ULL
|
||||
// 0x000000FFFFFFFFFFULL
|
||||
|
||||
|
||||
/** @short class returning all error messages for error mask */
|
||||
class errorDefs {
|
||||
|
||||
|
||||
public:
|
||||
|
||||
/** Constructor */
|
||||
errorDefs():errorMask(0){
|
||||
strcpy(notAddedList,"");
|
||||
};
|
||||
|
||||
/** Gets the error message
|
||||
* param errorMask error mask
|
||||
/returns error message from error mask
|
||||
*/
|
||||
static std::string getErrorMessage(int64_t slsErrorMask){
|
||||
|
||||
std::string retval = "";
|
||||
|
||||
if(slsErrorMask&CANNOT_CONNECT_TO_DETECTOR)
|
||||
retval.append("Cannot connect to Detector\n");
|
||||
|
||||
if(slsErrorMask&CANNOT_CONNECT_TO_RECEIVER)
|
||||
retval.append("Cannot connect to Receiver\n");
|
||||
|
||||
if(slsErrorMask&COULDNOT_SET_CONTROL_PORT)
|
||||
retval.append("Could not set control port\n");
|
||||
|
||||
if(slsErrorMask&COULDNOT_SET_STOP_PORT)
|
||||
retval.append("Could not set stop port\n");
|
||||
|
||||
if(slsErrorMask&COULDNOT_SET_DATA_PORT)
|
||||
retval.append("Could not set receiver port\n");
|
||||
|
||||
if(slsErrorMask&FILE_PATH_DOES_NOT_EXIST)
|
||||
retval.append("Path to Output Directory does not exist\n");
|
||||
|
||||
if(slsErrorMask&COULDNOT_CREATE_UDP_SOCKET)
|
||||
retval.append("Could not create UDP socket to start receiver\n");
|
||||
|
||||
if(slsErrorMask&COULDNOT_CREATE_FILE)
|
||||
retval.append("Could not create file to start receiver.\nCheck permissions of output directory or the overwrite flag\n");
|
||||
|
||||
if(slsErrorMask&RECEIVER_DET_HOSTNAME_NOT_SET)
|
||||
retval.append("Could not send the detector hostname to the receiver.\n");
|
||||
|
||||
if(slsErrorMask&RECEIVER_DET_HOSTTYPE_NOT_SET)
|
||||
retval.append("Could not send the detector type to the receiver.\n");
|
||||
|
||||
if(slsErrorMask&DETECTOR_TEN_GIGA)
|
||||
retval.append("Could not enable/disable 10GbE in the detector.\n");
|
||||
|
||||
if(slsErrorMask&DETECTOR_ACTIVATE)
|
||||
retval.append("Could not activate/deactivate detector\n");
|
||||
|
||||
if(slsErrorMask&RECEIVER_DET_POSID_NOT_SET)
|
||||
retval.append("Could not set detector position id\n");
|
||||
|
||||
if(slsErrorMask&RECEIVER_MULTI_DET_SIZE_NOT_SET)
|
||||
retval.append("Could not set multi detector size\n");
|
||||
|
||||
if(slsErrorMask&PREPARE_ACQUISITION)
|
||||
retval.append("Could not prepare acquisition in detector\n");
|
||||
|
||||
if(slsErrorMask®ISER_WRITE_READ)
|
||||
retval.append("Could not read/write register in detector\n");
|
||||
|
||||
if(slsErrorMask&VERSION_COMPATIBILITY)
|
||||
retval.append("Incompatible versions with detector or receiver. Please check log for more details.\n");
|
||||
|
||||
|
||||
|
||||
if(slsErrorMask&COULD_NOT_CONFIGURE_MAC)
|
||||
retval.append("Could not configure mac\n");
|
||||
|
||||
if(slsErrorMask&COULDNOT_SET_NETWORK_PARAMETER)
|
||||
retval.append("Could not set network parameter.\n");
|
||||
|
||||
if(slsErrorMask&COULDNOT_SET_ROI)
|
||||
retval.append("Could not set the exact region of interest. Verify ROI set by detector.\n");
|
||||
|
||||
if(slsErrorMask&RECEIVER_READ_FREQUENCY)
|
||||
retval.append("Could not set receiver read frequency.\n");
|
||||
|
||||
if(slsErrorMask&SETTINGS_NOT_SET)
|
||||
retval.append("Could not set settings.\n");
|
||||
|
||||
if(slsErrorMask&SETTINGS_FILE_NOT_OPEN)
|
||||
retval.append("Could not open settings file. Verify if it exists.\n");
|
||||
|
||||
if(slsErrorMask&COULDNOT_START_RECEIVER)
|
||||
retval.append("Could not start receiver.\n");
|
||||
|
||||
if(slsErrorMask&COULDNOT_STOP_RECEIVER)
|
||||
retval.append("Could not stop receiver.\n");
|
||||
|
||||
if(slsErrorMask&DETECTOR_TIMER_VALUE_NOT_SET)
|
||||
retval.append("Could not set one of timer values in detector.\n");
|
||||
|
||||
if(slsErrorMask&RECEIVER_ACQ_PERIOD_NOT_SET)
|
||||
retval.append("Could not set acquisition period in receiver.\n");
|
||||
|
||||
if(slsErrorMask&RECEIVER_FRAME_NUM_NOT_SET)
|
||||
retval.append("Could not set frame number in receiver.\n");
|
||||
|
||||
if(slsErrorMask&RECEIVER_DYNAMIC_RANGE)
|
||||
retval.append("Could not set dynamic range in receiver.\n");
|
||||
|
||||
if(slsErrorMask&RECEIVER_TEN_GIGA)
|
||||
retval.append("Could not enable/disable 10GbE in the receiver.\n");
|
||||
|
||||
if(slsErrorMask&ALLTIMBITS_NOT_SET)
|
||||
retval.append("Could not set all trimbits to value.\n");
|
||||
|
||||
if(slsErrorMask&COULD_NOT_SET_SPEED_PARAMETERS)
|
||||
retval.append("Could not set the speed parameter value\n");
|
||||
|
||||
if(slsErrorMask&COULD_NOT_SET_READOUT_FLAGS)
|
||||
retval.append("Could not set the readout flag\n");
|
||||
|
||||
if(slsErrorMask&COULD_NOT_SET_FIFO_DEPTH)
|
||||
retval.append("Could not set receiver fifo depth\n");
|
||||
|
||||
if(slsErrorMask&COULD_NOT_SET_COUNTER_BIT)
|
||||
retval.append("Could not set/reset counter bit\n");
|
||||
|
||||
if(slsErrorMask&COULD_NOT_PULSE_PIXEL)
|
||||
retval.append("Could not pulse pixel\n");
|
||||
|
||||
if(slsErrorMask&COULD_NOT_PULSE_PIXEL_NMOVE)
|
||||
retval.append("Could not pulse pixel and move\n");
|
||||
|
||||
if(slsErrorMask&COULD_NOT_PULSE_CHIP)
|
||||
retval.append("Could not pulse chip\n");
|
||||
|
||||
if(slsErrorMask&COULD_NOT_SET_RATE_CORRECTION)
|
||||
retval.append("Could not set rate correction\n");
|
||||
|
||||
if(slsErrorMask&DETECTOR_NETWORK_PARAMETER)
|
||||
retval.append("Could not set/get detector network parameter\n");
|
||||
|
||||
if(slsErrorMask&RATE_CORRECTION_NOT_32or16BIT)
|
||||
retval.append("Rate correction Deactivated, must be in 32 or 16 bit mode\n");
|
||||
|
||||
if(slsErrorMask&RATE_CORRECTION_NO_TAU_PROVIDED)
|
||||
retval.append("Rate correction Deactivated. No default tau provided in file\n");
|
||||
|
||||
if(slsErrorMask&PROGRAMMING_ERROR)
|
||||
retval.append("Could not program FPGA\n");
|
||||
|
||||
if(slsErrorMask&RECEIVER_ACTIVATE)
|
||||
retval.append("Could not activate/deactivate receiver\n");
|
||||
|
||||
if(slsErrorMask&DATA_STREAMING)
|
||||
retval.append("Could not enable/disable Data Streaming\n");
|
||||
|
||||
if(slsErrorMask&RESET_ERROR)
|
||||
retval.append("Could not reset the FPGA\n");
|
||||
|
||||
if(slsErrorMask&POWER_CHIP)
|
||||
retval.append("Could not power on/off/get the chip\n");
|
||||
|
||||
if(slsErrorMask&RECEIVER_READ_TIMER)
|
||||
retval.append("Could not set receiver read timer\n");
|
||||
|
||||
if(slsErrorMask&RECEIVER_FLIPPED_DATA_NOT_SET)
|
||||
retval.append("Could not set receiver flipped data/bottom\n");
|
||||
|
||||
if(slsErrorMask&THRESHOLD_NOT_SET)
|
||||
retval.append("Could not set threshold\n");
|
||||
|
||||
if(slsErrorMask&RECEIVER_FILE_FORMAT)
|
||||
retval.append("Could not set receiver file format\n");
|
||||
|
||||
if(slsErrorMask&RECEIVER_TIMER_NOT_SET)
|
||||
retval.append("Could not set timer in receiver.\n");
|
||||
|
||||
if(slsErrorMask&RECEIVER_PARAMETER_NOT_SET)
|
||||
retval.append("Could not set a paramater in receiver.\n");
|
||||
|
||||
if(slsErrorMask&RECEIVER_ENABLE_GAPPIXELS_NOT_SET)
|
||||
retval.append("Could not enable/disable gap pixels in receiver.\n");
|
||||
|
||||
if(slsErrorMask&RESTREAM_STOP_FROM_RECEIVER)
|
||||
retval.append("Could not restream stop from receiver.\n");
|
||||
|
||||
if(slsErrorMask&TEMPERATURE_CONTROL)
|
||||
retval.append("Could not set/get threshold temperature, temp control or temp event.\n");
|
||||
|
||||
if(slsErrorMask&AUTO_COMP_DISABLE)
|
||||
retval.append("Could not set/get auto comparator disable\n");
|
||||
|
||||
if(slsErrorMask&CONFIG_FILE)
|
||||
retval.append("Could not load/write config file\n");
|
||||
|
||||
//------------------------------------------------------ length of message
|
||||
|
||||
|
||||
return retval;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/** Sets multi error mask
|
||||
@param multi error mask to be set to
|
||||
/returns multi error mask
|
||||
*/
|
||||
int64_t setErrorMask(int64_t i){errorMask=i;return getErrorMask();};
|
||||
|
||||
/**returns multi error mask */
|
||||
int64_t getErrorMask(){return errorMask;};
|
||||
|
||||
/** Clears error mask
|
||||
/returns error mask
|
||||
*/
|
||||
int64_t clearErrorMask(){errorMask=0;return errorMask;};
|
||||
|
||||
/** Gets the not added detector list
|
||||
/returns list
|
||||
*/
|
||||
char* getNotAddedList(){return notAddedList;};
|
||||
|
||||
/** Append the detector to not added detector list
|
||||
* @param name append to the list
|
||||
/returns list
|
||||
*/
|
||||
void appendNotAddedList(const char* name){strcat(notAddedList,name);strcat(notAddedList,"+");};
|
||||
|
||||
/** Clears not added detector list
|
||||
/returns error mask
|
||||
*/
|
||||
void clearNotAddedList(){strcpy(notAddedList,"");};
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
/** Error Mask */
|
||||
int64_t errorMask;
|
||||
|
||||
/** Detectors Not added List */
|
||||
char notAddedList[MAX_STR_LENGTH];
|
||||
|
||||
};
|
||||
|
||||
#endif /* ERROR_DEFS_H_ */
|
414
commonFiles/sls_detector_defs.h
Executable file
414
commonFiles/sls_detector_defs.h
Executable file
@ -0,0 +1,414 @@
|
||||
#ifndef SLS_DETECTOR_DEFS_H
|
||||
#define SLS_DETECTOR_DEFS_H
|
||||
|
||||
|
||||
#ifdef __CINT__
|
||||
#define MYROOT
|
||||
#define __cplusplus
|
||||
#endif
|
||||
|
||||
//#include <stdint.h>
|
||||
#include "sls_receiver_defs.h"
|
||||
|
||||
|
||||
/** maximum rois */
|
||||
#define MAX_ROIS 100
|
||||
|
||||
/** maximum trim en */
|
||||
#define MAX_TRIMEN 100
|
||||
|
||||
/** maximum unit size of program sent to detector */
|
||||
#define MAX_FPGAPROGRAMSIZE (2 * 1024 *1024)
|
||||
|
||||
typedef char mystring[MAX_STR_LENGTH];
|
||||
|
||||
typedef int dacs_t;
|
||||
|
||||
|
||||
#define DEFAULT_DET_MAC "00:aa:bb:cc:dd:ee"
|
||||
#define DEFAULT_DET_IP "129.129.202.46"
|
||||
|
||||
|
||||
/**
|
||||
\file sls_detector_defs.h
|
||||
This file contains all the basic definitions common to the slsDetector class
|
||||
and to the server programs running on the detector
|
||||
|
||||
|
||||
* @author Anna Bergamaschi
|
||||
* @version 0.1alpha (any string)
|
||||
* @see slsDetector
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/** get flag form most functions */
|
||||
#define GET_FLAG -1
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
/** @short class containing all the structures, constants and enum definitions */
|
||||
class slsDetectorDefs: public virtual slsReceiverDefs{
|
||||
public:
|
||||
|
||||
slsDetectorDefs(){};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/**
|
||||
@short structure for a detector module
|
||||
|
||||
should not be used by unexperienced users
|
||||
|
||||
\see :: moduleRegisterBit ::chipRegisterBit :channelRegisterBit
|
||||
|
||||
@li reg is the module register (e.g. dynamic range? see moduleRegisterBit)
|
||||
@li dacs is the pointer to the array of dac values (in V)
|
||||
@li adcs is the pointer to the array of adc values (in V)
|
||||
@li chipregs is the pointer to the array of chip registers
|
||||
@li chanregs is the pointer to the array of channel registers
|
||||
@li gain is the module gain
|
||||
@li offset is the module offset
|
||||
*/
|
||||
typedef struct {
|
||||
int serialnumber; /**< is the module serial number */
|
||||
int nchan; /**< is the number of channels on the module*/
|
||||
int nchip; /**< is the number of chips on the module */
|
||||
int ndac; /**< is the number of dacs on the module */
|
||||
int nadc; /**< is the number of adcs on the module */
|
||||
int reg; /**< is the module register (e.g. dynamic range?)
|
||||
\see moduleRegisterBit */
|
||||
dacs_t *dacs; /**< is the pointer to the array of the dac values (in V) */
|
||||
dacs_t *adcs; /**< is the pointer to the array of the adc values (in V) FLAT_FIELD_CORRECTION*/
|
||||
int *chipregs; /**< is the pointer to the array of the chip registers
|
||||
\see ::chipRegisterBit */
|
||||
int *chanregs; /**< is the pointer to the array of the channel registers
|
||||
\see ::channelRegisterBit */
|
||||
double gain; /**< is the module gain (V/keV) */
|
||||
double offset; /**< is the module offset (V) */
|
||||
} sls_detector_module;
|
||||
|
||||
|
||||
/**
|
||||
network parameters
|
||||
*/
|
||||
|
||||
enum networkParameter {
|
||||
DETECTOR_MAC, /**< detector MAC */
|
||||
DETECTOR_IP, /**< detector IP */
|
||||
RECEIVER_HOSTNAME, /**< receiver IP/hostname */
|
||||
RECEIVER_UDP_IP, /**< receiever UDP IP */
|
||||
RECEIVER_UDP_PORT, /**< receiever UDP Port */
|
||||
RECEIVER_UDP_MAC, /**< receiever UDP MAC */
|
||||
RECEIVER_UDP_PORT2, /**< receiever UDP Port of second half module for eiger */
|
||||
DETECTOR_TXN_DELAY_LEFT, /**< transmission delay on the (left) port for next frame */
|
||||
DETECTOR_TXN_DELAY_RIGHT, /**< transmission delay on the right port for next frame */
|
||||
DETECTOR_TXN_DELAY_FRAME, /**< transmission delay of a whole frame for all the ports */
|
||||
FLOW_CONTROL_10G, /**< flow control for 10GbE */
|
||||
FLOW_CONTROL_WR_PTR, /**< memory write pointer for flow control */
|
||||
FLOW_CONTROL_RD_PTR, /**< memory read pointer for flow control */
|
||||
RECEIVER_STREAMING_PORT, /**< receiever streaming TCP(ZMQ) port */
|
||||
CLIENT_STREAMING_PORT, /**< client streaming TCP(ZMQ) port */
|
||||
RECEIVER_STREAMING_SRC_IP,/**< receiever streaming TCP(ZMQ) ip */
|
||||
CLIENT_STREAMING_SRC_IP, /**< client streaming TCP(ZMQ) ip */
|
||||
ADDITIONAL_JSON_HEADER, /**< additional json header (ZMQ) */
|
||||
RECEIVER_UDP_SCKT_BUF_SIZE, /**< UDP socket buffer size */
|
||||
RECEIVER_REAL_UDP_SCKT_BUF_SIZE /**< real UDP socket buffer size */
|
||||
};
|
||||
|
||||
/**
|
||||
type of action performed (for text client)
|
||||
*/
|
||||
enum {GET_ACTION, PUT_ACTION, READOUT_ACTION, HELP_ACTION};
|
||||
|
||||
/** online flags enum \sa setOnline*/
|
||||
enum {GET_ONLINE_FLAG=-1, /**< returns wether the detector is in online or offline state */
|
||||
OFFLINE_FLAG=0, /**< detector in offline state (i.e. no communication to the detector - using only local structure - no data acquisition possible!) */
|
||||
ONLINE_FLAG =1/**< detector in online state (i.e. communication to the detector updating the local structure) */
|
||||
};
|
||||
|
||||
/**
|
||||
flags to get (or set) the size of the detector
|
||||
*/
|
||||
enum numberOf {
|
||||
MAXMODX, /**<maximum number of module in X direction */
|
||||
MAXMODY, /**<maximum number of module in Y direction */
|
||||
NMODX, /**<installed number of module in X direction */
|
||||
NMODY, /**<installed number of module in Y direction */
|
||||
NCHANSX, /**<number of channels in X direction */
|
||||
NCHANSY, /**<number of channels in Y direction */
|
||||
NCHIPSX, /**<number of chips in X direction */
|
||||
NCHIPSY /**<number of chips in Y direction */
|
||||
};
|
||||
|
||||
/**
|
||||
dimension indexes
|
||||
*/
|
||||
enum dimension {
|
||||
X=0, /**< X dimension */
|
||||
Y=1, /**< Y dimension */
|
||||
Z=2 /**< Z dimension */
|
||||
};
|
||||
|
||||
/**
|
||||
enable/disable flags
|
||||
*/
|
||||
enum {
|
||||
DISABLED, /**<flag disabled */
|
||||
ENABLED /**<flag enabled */
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
use of the external signals
|
||||
*/
|
||||
enum externalSignalFlag {
|
||||
GET_EXTERNAL_SIGNAL_FLAG=-1, /**<return flag for signal */
|
||||
SIGNAL_OFF, /**<signal unused - tristate*/
|
||||
GATE_IN_ACTIVE_HIGH, /**<input gate active high*/
|
||||
GATE_IN_ACTIVE_LOW, /**<input gate active low */
|
||||
TRIGGER_IN_RISING_EDGE, /**<input exposure trigger on rising edge */
|
||||
TRIGGER_IN_FALLING_EDGE, /**<input exposure trigger on falling edge */
|
||||
RO_TRIGGER_IN_RISING_EDGE, /**<input raedout trigger on rising edge */
|
||||
RO_TRIGGER_IN_FALLING_EDGE, /**<input readout trigger on falling edge */
|
||||
GATE_OUT_ACTIVE_HIGH, /**<output active high when detector is exposing*/
|
||||
GATE_OUT_ACTIVE_LOW, /**<output active low when detector is exposing*/
|
||||
TRIGGER_OUT_RISING_EDGE, /**<output trigger rising edge at start of exposure */
|
||||
TRIGGER_OUT_FALLING_EDGE, /**<output trigger falling edge at start of exposure */
|
||||
RO_TRIGGER_OUT_RISING_EDGE, /**<output trigger rising edge at start of readout */
|
||||
RO_TRIGGER_OUT_FALLING_EDGE, /**<output trigger falling edge at start of readout */
|
||||
OUTPUT_LOW, /**< output always low */
|
||||
OUTPUT_HIGH, /**< output always high */
|
||||
MASTER_SLAVE_SYNCHRONIZATION /**< reserved for master/slave synchronization in multi detector systems */
|
||||
};
|
||||
|
||||
/**
|
||||
communication mode using external signals
|
||||
*/
|
||||
enum externalCommunicationMode{
|
||||
GET_EXTERNAL_COMMUNICATION_MODE=-1,/**<return flag for communication mode */
|
||||
AUTO_TIMING, /**< internal timing */
|
||||
TRIGGER_EXPOSURE, /**< trigger mode i.e. exposure is triggered */
|
||||
TRIGGER_READOUT, /**< stop trigger mode i.e. readout is triggered by external signal */
|
||||
GATE_FIX_NUMBER, /**< gated and reads out after a fixed number of gates */
|
||||
GATE_WITH_START_TRIGGER, /**< gated with start trigger */
|
||||
BURST_TRIGGER /**< trigger a burst of frames */
|
||||
};
|
||||
/**
|
||||
detector IDs/versions
|
||||
*/
|
||||
enum idMode{
|
||||
MODULE_SERIAL_NUMBER, /**<return module serial number */
|
||||
MODULE_FIRMWARE_VERSION, /**<return module firmware */
|
||||
DETECTOR_SERIAL_NUMBER, /**<return detector system serial number */
|
||||
DETECTOR_FIRMWARE_VERSION, /**<return detector system firmware version */
|
||||
DETECTOR_SOFTWARE_VERSION, /**<return detector system software version */
|
||||
THIS_SOFTWARE_VERSION, /**<return this software version */
|
||||
RECEIVER_VERSION, /**<return receiver software version */
|
||||
SOFTWARE_FIRMWARE_API_VERSION, /** return software firmware API version **/
|
||||
CLIENT_SOFTWARE_API_VERSION, /** return detector software and client api version */
|
||||
CLIENT_RECEIVER_API_VERSION /** return client and receiver api version */
|
||||
};
|
||||
/**
|
||||
detector digital test modes
|
||||
*/
|
||||
enum digitalTestMode {
|
||||
CHIP_TEST, /**< test chips */
|
||||
MODULE_FIRMWARE_TEST, /**< test module firmware */
|
||||
DETECTOR_FIRMWARE_TEST, /**< test detector system firmware */
|
||||
DETECTOR_MEMORY_TEST, /**< test detector system memory */
|
||||
DETECTOR_SOFTWARE_TEST, /**< test detector system software */
|
||||
DIGITAL_BIT_TEST /**< gotthard digital bit test */
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
detector dacs indexes
|
||||
*/
|
||||
enum dacIndex {
|
||||
THRESHOLD, /**< comparator threshold level */
|
||||
CALIBRATION_PULSE, /**< calibration input pulse height */
|
||||
TRIMBIT_SIZE, /**< voltage to determine the trimbits LSB */
|
||||
PREAMP, /**< preamp feedback */
|
||||
SHAPER1, /**< shaper1 feedback */
|
||||
SHAPER2, /**< shaper2 feedback */
|
||||
TEMPERATURE_ADC, /**< temperature sensor (adc) */
|
||||
TEMPERATURE_FPGA, /**< temperature sensor (fpga) */
|
||||
HUMIDITY, /**< humidity sensor (adc) */
|
||||
DETECTOR_BIAS,/**< detector bias */
|
||||
VA_POT, /**< power supply va */
|
||||
VDD_POT, /**< chiptest board power supply vdd */
|
||||
VSH_POT, /**< chiptest board power supply vsh */
|
||||
VIO_POT, /**< chiptest board power supply va */
|
||||
HV_POT, /**< gotthard, chiptest board high voltage */
|
||||
G_VREF_DS, /**< gotthard */
|
||||
G_VCASCN_PB, /**< gotthard */
|
||||
G_VCASCP_PB, /**< gotthard */
|
||||
G_VOUT_CM, /**< gotthard */
|
||||
G_VCASC_OUT, /**< gotthard */
|
||||
G_VIN_CM, /**< gotthard */
|
||||
G_VREF_COMP, /**< gotthard */
|
||||
G_IB_TESTC, /**< gotthard */
|
||||
E_SvP, /**< eiger */
|
||||
E_SvN, /**< eiger */
|
||||
E_Vtr, /**< eiger */
|
||||
E_Vrf, /**< eiger */
|
||||
E_Vrs, /**< eiger */
|
||||
E_Vtgstv , /**< eiger */
|
||||
E_Vcmp_ll, /**< eiger */
|
||||
E_Vcmp_lr, /**< eiger */
|
||||
E_cal, /**< eiger */
|
||||
E_Vcmp_rl, /**< eiger */
|
||||
E_Vcmp_rr, /**< eiger */
|
||||
E_rxb_rb , /**< eiger */
|
||||
E_rxb_lb, /**< eiger */
|
||||
E_Vcp, /**< eiger */
|
||||
E_Vcn, /**< eiger */
|
||||
E_Vis, /**< eiger */
|
||||
IO_DELAY, /**< eiger io delay */
|
||||
ADC_VPP, /**< adc vpp for jctb */
|
||||
HV_NEW, /**< new hv index for jungfrau & c */
|
||||
TEMPERATURE_FPGAEXT, /**< temperature sensor (close to fpga) */
|
||||
TEMPERATURE_10GE, /**< temperature sensor (close to 10GE) */
|
||||
TEMPERATURE_DCDC, /**< temperature sensor (close to DCDC) */
|
||||
TEMPERATURE_SODL, /**< temperature sensor (close to SODL) */
|
||||
TEMPERATURE_SODR, /**< temperature sensor (close to SODR) */
|
||||
TEMPERATURE_FPGA2, /**< temperature sensor (fpga2 (eiger:febl) */
|
||||
TEMPERATURE_FPGA3, /**< temperature sensor (fpga3 (eiger:febr) */
|
||||
M_vIpre, /**< mythen 3 >*/
|
||||
M_vIbias, /**< mythen 3 >*/
|
||||
M_vIinSh, /**< mythen 3 >*/
|
||||
M_VdcSh, /**< mythen 3 >*/
|
||||
M_Vth2, /**< mythen 3 >*/
|
||||
M_VPL, /**< mythen 3 >*/
|
||||
M_Vth3, /**< mythen 3 >*/
|
||||
M_casSh, /**< mythen 3 >*/
|
||||
M_cas, /**< mythen 3 >*/
|
||||
M_vIbiasSh, /**< mythen 3 >*/
|
||||
M_vIcin, /**< mythen 3 >*/
|
||||
M_vIpreOut, /**< mythen 3 >*/
|
||||
V_POWER_A = 100, /**new chiptest board */
|
||||
V_POWER_B = 101, /**new chiptest board */
|
||||
V_POWER_C = 102, /**new chiptest board */
|
||||
V_POWER_D = 103, /**new chiptest board */
|
||||
V_POWER_IO =104, /**new chiptest board */
|
||||
V_POWER_CHIP=105 ,/**new chiptest board */
|
||||
I_POWER_A=106 , /**new chiptest board */
|
||||
I_POWER_B=107 , /**new chiptest board */
|
||||
I_POWER_C=108 , /**new chiptest board */
|
||||
I_POWER_D=109 , /**new chiptest board */
|
||||
I_POWER_IO=110 , /**new chiptest board */
|
||||
V_LIMIT=111 /**new chiptest board */
|
||||
};
|
||||
|
||||
/**
|
||||
detector settings indexes
|
||||
*/
|
||||
enum detectorSettings{
|
||||
GET_SETTINGS=-1, /**< return current detector settings */
|
||||
STANDARD, /**< standard settings */
|
||||
FAST, /**< fast settings */
|
||||
HIGHGAIN, /**< highgain settings */
|
||||
DYNAMICGAIN, /**< dynamic gain settings */
|
||||
LOWGAIN, /**< low gain settings */
|
||||
MEDIUMGAIN, /**< medium gain settings */
|
||||
VERYHIGHGAIN, /**< very high gain settings */
|
||||
LOWNOISE, /**< low noise settings */
|
||||
DYNAMICHG0, /**< dynamic high gain 0 */
|
||||
FIXGAIN1, /**< fix gain 1 */
|
||||
FIXGAIN2, /**< fix gain 2 */
|
||||
FORCESWITCHG1, /**< force switch gain 1 */
|
||||
FORCESWITCHG2, /**< force switch gain 2 */
|
||||
VERYLOWGAIN, /**< very low gain settings */
|
||||
UNDEFINED=200, /**< undefined or custom settings */
|
||||
UNINITIALIZED /**< uninitialiazed (status at startup) */
|
||||
};
|
||||
|
||||
|
||||
#define TRIMBITMASK 0x3f
|
||||
|
||||
|
||||
/**
|
||||
important speed parameters
|
||||
*/
|
||||
enum speedVariable {
|
||||
CLOCK_DIVIDER, /**< readout clock divider */
|
||||
PHASE_SHIFT, /**< adds phase shift */
|
||||
OVERSAMPLING, /**< oversampling for analog detectors */
|
||||
ADC_CLOCK, /**< adc clock divider */
|
||||
ADC_PHASE, /**< adc clock phase */
|
||||
ADC_PIPELINE, /**< adc pipeline */
|
||||
DBIT_CLOCK, /**< adc clock divider */
|
||||
DBIT_PHASE, /**< adc clock phase */
|
||||
DBIT_PIPELINE /**< adc pipeline */
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
readout flags
|
||||
*/
|
||||
enum readOutFlags {
|
||||
GET_READOUT_FLAGS=-1, /**< return readout flags */
|
||||
NORMAL_READOUT=0, /**< no flag */
|
||||
STORE_IN_RAM=0x1, /**< data are stored in ram and sent only after end of acquisition for faster frame rate */
|
||||
READ_HITS=0x2, /**< return only the number of the channel which counted ate least one */
|
||||
ZERO_COMPRESSION=0x4,/**< returned data are 0-compressed */
|
||||
PUMP_PROBE_MODE=0x8,/**<pump-probe mode */
|
||||
BACKGROUND_CORRECTIONS=0x1000, /**<background corrections */
|
||||
TOT_MODE=0x2000,/**< pump-probe mode */
|
||||
CONTINOUS_RO=0x4000,/**< pump-probe mode */
|
||||
PARALLEL=0x10000,/**< eiger parallel mode */
|
||||
NONPARALLEL=0x20000,/**< eiger serial mode */
|
||||
SAFE=0x40000/**< eiger safe mode */,
|
||||
DIGITAL_ONLY=0x80000, /** chiptest board read only digital bits (not adc values)*/
|
||||
ANALOG_AND_DIGITAL=0x100000, /** chiptest board read adc values and digital bits digital bits */
|
||||
DUT_CLK=0x200000, /** chiptest board fifo clock comes from device under test */
|
||||
SHOW_OVERFLOW=0x400000, /** eiger 32 bit mode, show saturated for overflow of single subframes */
|
||||
NOOVERFLOW=0x800000 /** eiger 32 bit mode, do not show saturated for overflow of single subframes */
|
||||
};
|
||||
|
||||
|
||||
/** port type */
|
||||
enum portType {
|
||||
CONTROL_PORT, /**< control port */
|
||||
STOP_PORT, /**<stop port */
|
||||
DATA_PORT /**< receiver tcp port with client*/
|
||||
};
|
||||
|
||||
/** hierarchy in multi-detector structure, if any */
|
||||
enum masterFlags {
|
||||
GET_MASTER=-1, /**< return master flag */
|
||||
NO_MASTER, /**< no master/slave hierarchy defined */
|
||||
IS_MASTER, /**<is master */
|
||||
IS_SLAVE /**< is slave */
|
||||
};
|
||||
|
||||
|
||||
enum imageType {
|
||||
DARK_IMAGE, /**< dark image */
|
||||
GAIN_IMAGE /**< gain image */
|
||||
};
|
||||
|
||||
|
||||
//#if defined(__cplusplus) && !defined(EIGERD)
|
||||
#ifdef __cplusplus
|
||||
protected:
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#ifndef MYROOT
|
||||
#include "sls_detector_funcs.h"
|
||||
//#include "sls_receiver_funcs.h"
|
||||
#endif
|
||||
|
||||
|
||||
//#if defined(__cplusplus) && !defined(EIGERD)
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
;
|
||||
#endif
|
||||
;
|
134
commonFiles/sls_detector_funcs.h
Normal file
134
commonFiles/sls_detector_funcs.h
Normal file
@ -0,0 +1,134 @@
|
||||
/**
|
||||
@internal
|
||||
|
||||
function indexes to call on the server
|
||||
All set functions with argument -1 work as get, when possible
|
||||
|
||||
*/
|
||||
#ifndef SLS_DETECTOR_FUNCS_H
|
||||
#define SLS_DETECTOR_FUNCS_H
|
||||
|
||||
enum detFuncs{
|
||||
|
||||
// General purpose functions
|
||||
F_EXEC_COMMAND=0, /**< command is executed */
|
||||
F_GET_ERROR, /**< return detector error status */
|
||||
|
||||
// configuration functions
|
||||
F_GET_DETECTOR_TYPE, /**< return detector type */
|
||||
F_SET_NUMBER_OF_MODULES, /**< set/get number of installed modules */
|
||||
F_GET_MAX_NUMBER_OF_MODULES, /**< get maximum number of installed modules */
|
||||
F_SET_EXTERNAL_SIGNAL_FLAG, /**< set/get flag for external signal */
|
||||
F_SET_EXTERNAL_COMMUNICATION_MODE, /**< set/get external communication mode (obsolete) */
|
||||
|
||||
// Tests and identification
|
||||
F_GET_ID, /**< get detector id of version */
|
||||
F_DIGITAL_TEST, /**< digital test of the detector */
|
||||
F_ANALOG_TEST, /**<analog test of the detector */
|
||||
F_ENABLE_ANALOG_OUT, /**<enable the analog output */
|
||||
F_CALIBRATION_PULSE, /**<pulse the calibration input */
|
||||
|
||||
// Initialization functions
|
||||
F_SET_DAC, /**< set DAC value */
|
||||
F_GET_ADC, /**< get ADC value */
|
||||
F_WRITE_REGISTER, /**< write to register */
|
||||
F_READ_REGISTER, /**< read register */
|
||||
F_WRITE_MEMORY, /**< write to memory */
|
||||
F_READ_MEMORY, /**< read memory */
|
||||
|
||||
F_SET_CHANNEL, /**< initialize channel */
|
||||
F_GET_CHANNEL, /**< get channel register */
|
||||
F_SET_ALL_CHANNELS, /**< initialize all channels */
|
||||
|
||||
F_SET_CHIP, /**< initialize chip */
|
||||
F_GET_CHIP, /**< get chip status */
|
||||
F_SET_ALL_CHIPS, /**< initialize all chips */
|
||||
|
||||
F_SET_MODULE, /**< initialize module */
|
||||
F_GET_MODULE, /**< get module status */
|
||||
F_SET_ALL_MODULES, /**< initialize all modules */
|
||||
|
||||
F_SET_SETTINGS, /**< set detector settings */
|
||||
F_GET_THRESHOLD_ENERGY, /**< get detector threshold (in eV) */
|
||||
F_SET_THRESHOLD_ENERGY, /**< set detector threshold (in eV) */
|
||||
|
||||
// Acquisition functions
|
||||
F_START_ACQUISITION, /**< start acquisition */
|
||||
F_STOP_ACQUISITION, /**< stop acquisition */
|
||||
F_START_READOUT, /**< start readout */
|
||||
F_GET_RUN_STATUS, /**< get acquisition status */
|
||||
F_START_AND_READ_ALL, /**< start acquisition and read all frames*/
|
||||
F_READ_ALL, /**< read alla frames */
|
||||
|
||||
//Acquisition setup functions
|
||||
F_SET_TIMER, /**< set/get timer value */
|
||||
F_GET_TIME_LEFT, /**< get current value of the timer (time left) */
|
||||
|
||||
F_SET_DYNAMIC_RANGE, /**< set/get detector dynamic range */
|
||||
F_SET_READOUT_FLAGS, /**< set/get readout flags */
|
||||
F_SET_ROI, /**< set/get region of interest */
|
||||
F_SET_SPEED, /**< set/get readout speed parameters */
|
||||
|
||||
//Trimming
|
||||
F_EXECUTE_TRIMMING, /**< execute trimming */
|
||||
|
||||
F_EXIT_SERVER, /**< turn off detector server */
|
||||
F_LOCK_SERVER, /**< Locks/Unlocks server communication to the given client */
|
||||
F_GET_LAST_CLIENT_IP, /**< returns the IP of the client last connected to the detector */
|
||||
F_SET_PORT, /**< Changes communication port of the server */
|
||||
F_UPDATE_CLIENT, /**< Returns all the important parameters to update the shared memory of the client */
|
||||
|
||||
F_CONFIGURE_MAC, /**< Configures MAC for Gotthard readout */
|
||||
F_LOAD_IMAGE, /**< Loads Dark/Gain image to the Gotthard detector */
|
||||
|
||||
// multi detector structures
|
||||
F_SET_MASTER, /**< sets master/slave flag for multi detector structures */
|
||||
F_SET_SYNCHRONIZATION_MODE, /**< sets master/slave synchronization mode for multidetector structures */
|
||||
F_READ_COUNTER_BLOCK, /**< reads the counter block memory for gotthard */
|
||||
F_RESET_COUNTER_BLOCK, /**< resets the counter block memory for gotthard */
|
||||
F_CALIBRATE_PEDESTAL, /**< starts acquistion, calibrates pedestal and write back to fpga */
|
||||
|
||||
F_ENABLE_TEN_GIGA, /**< enable 10Gbe */
|
||||
F_SET_ALL_TRIMBITS, /** < set all trimbits to this value */
|
||||
|
||||
F_SET_CTB_PATTERN, /** < loads a pattern in the CTB */
|
||||
F_WRITE_ADC_REG, /** < writes an ADC register */
|
||||
|
||||
F_SET_COUNTER_BIT, /** < set/reset counter bit in detector for eiger */
|
||||
F_PULSE_PIXEL, /** < pulse pixel n number of times in eiger at (x,y) */
|
||||
F_PULSE_PIXEL_AND_MOVE, /** < pulse pixel n number of times and move relatively by x and y */
|
||||
F_PULSE_CHIP, /** < pulse chip n number of times */
|
||||
|
||||
F_SET_RATE_CORRECT, /** < set/reset rate correction tau */
|
||||
F_GET_RATE_CORRECT, /** < get rate correction tau */
|
||||
|
||||
|
||||
F_SET_NETWORK_PARAMETER, /**< set network parameters such as transmission delay, flow control */
|
||||
|
||||
F_PROGRAM_FPGA, /**< program FPGA */
|
||||
F_RESET_FPGA, /**< reset FPGA */
|
||||
F_POWER_CHIP, /**< power chip */
|
||||
F_ACTIVATE, /** < activate */
|
||||
F_PREPARE_ACQUISITION, /** < prepare acquisition */
|
||||
|
||||
F_THRESHOLD_TEMP, /** < set threshold temperature */
|
||||
F_TEMP_CONTROL, /** < set temperature control */
|
||||
F_TEMP_EVENT, /** < set temperature event */
|
||||
|
||||
F_AUTO_COMP_DISABLE, /** < auto comp disable mode */
|
||||
F_STORAGE_CELL_START, /** < storage cell start */
|
||||
|
||||
F_CHECK_VERSION, /** < check version compatibility */
|
||||
|
||||
F_SOFTWARE_TRIGGER, /** < software trigger */
|
||||
/* Always append functions hereafter!!! */
|
||||
|
||||
/* Always append functions before!!! */
|
||||
NUM_DET_FUNCTIONS,
|
||||
TOO_MANY_FUNCTIONS_DEFINED=127 //you should get a compilation error if there are already so many functions defined. It conflicts with sls_receiver_funcs.h
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
/** @endinternal */
|
6
commonFiles/versionAPI.h
Normal file
6
commonFiles/versionAPI.h
Normal file
@ -0,0 +1,6 @@
|
||||
/** API versions */
|
||||
#define APIRECEIVER 0x180927
|
||||
#define APIEIGER 0x180820
|
||||
#define APIJUNGFRAU 0x180925
|
||||
#define APIGOTTHARD 0x180928
|
||||
|
Reference in New Issue
Block a user