addded new developer slsdetpackage version, added simlink

This commit is contained in:
2021-09-28 14:27:26 +02:00
parent 4f35d285ac
commit d864b12911
49 changed files with 632 additions and 1 deletions

View File

@ -311,6 +311,14 @@ int main(int argc, char* argv[]) {
scan_v6.push_back("262_FWcheck_1_1_1");
scan_v6.push_back("262_FWcheck_1_1_1_test");
scan_v6.push_back("262_FWcheck_1_2_rc210831");
scan_v6.push_back("262_FWcheck_1_2_defdacs");
scan_v6.push_back("311");
scan_v6.push_back("316");
scan_v6.push_back("318");
scan_v6.push_back("319");
scan_v6.push_back("320");
scan_v6.push_back("324");
jungfrauFile *thisfile = new jungfrauFile();

Binary file not shown.

View File

@ -10,6 +10,7 @@
# - xray tube is on and ramped for 40 kV, 60 mA, set to Cu
sls_detector_put stop #just in case
sls_detector_put powerchip 1

View File

@ -22,7 +22,7 @@ datestring=$(date +%F)
echo "Relative calib directory is "$calib_relativedir
echo "Relative analysis results directory is "$ana_relativedir
echo "mkdir "$calibdatafolder "if not already existing."
#mkdir -p $calibdatafolder
mkdir -p $calibdatafolder
export TKBPG0="ju_udp_receiver_3threads_2_0 S "$calibdatafolder"BP_M"$1"_"$datestring"_ 10.1.4.105"

1
slsDetector_bin Symbolic link
View File

@ -0,0 +1 @@
slsDetector_bin_dev0921

BIN
slsDetector_bin_dev0921/a Executable file

Binary file not shown.

BIN
slsDetector_bin_dev0921/g Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,621 @@
/**************************************************************************/
/* This sample program provides a code for a connectionless server. */
/**************************************************************************/
/**************************************************************************/
/* Header files needed for this sample program */
/**************************************************************************/
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <pthread.h> /* POSIX Threads */
#include <arpa/inet.h>
#include <stdlib.h> /* exit() */
#include <string.h> /* memset(), memcpy() */
#include <sys/utsname.h> /* uname() */
#include <sys/types.h>
#include <sys/socket.h> /* socket(), bind(),
listen(), accept() */
#include <sys/time.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <unistd.h> /* fork(), write(), close() */
#include <time.h>
#include <sys/time.h>
#include <sys/mman.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <pthread.h>
#include <sched.h>
#include <errno.h>
#include <fcntl.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#define OK 0
#define FAIL -1
#define MAX_BUFLEN 1048576
#define TCP_PORT_NUMBER 2233
#define SRVNAME "localhost"
/**************************************************************************/
/* Constants used by this program */
/**************************************************************************/
//#define SERVER_PORT 50004
#define SERVER_PORT 32410
#define SERVER_IP "192.168.12.1" // this is eth0 /eth1 interface for pc8829
#define BUFFER_LENGTH 4096
#define FALSE 0
/* global (across fork() variable and structs */
struct myring{
uint64_t framenum;
uint64_t bunchid;
uint16_t imagedata[512*1024];
};
struct myring *ringbuffer;
long *putpt;
long *getpt;
int intimeout;
int ib;
int main(int argc,char *argv[])
{
/***********************************************************************/
/* Variable and structure definitions. */
/***********************************************************************/
#pragma pack(push)
#pragma pack(2)
struct mystruct{
/* char emptyheader[6]; */
uint64_t framenum;
uint32_t exptime;
uint32_t packetnum;
uint64_t bunchid;
uint64_t timestamp;
uint16_t moduleID;
uint16_t xCoord;
uint16_t yCoord;
uint16_t zCoord;
uint32_t debug;
uint16_t roundRobin;
uint8_t detectortype;
uint8_t headerVersion;
uint16_t data[BUFFER_LENGTH];
};
struct mystruct packet;
#pragma pack(pop)
struct timeval tss,tsss; //for timing
double tdif;
int sd=-1, rc1,rc;
FILE * sfilefd=NULL;
int framesinfile=0 ;
#define NPRI 100
int serverport;
int npri=NPRI;
int npacket=0;
int totalnpacket=0;
int printeach=0;
float rpratio,aimageration;
uint16_t chipd[256*256];
char savefilename[128];
char serverip[128];
char savefileprefix[128];
struct sockaddr_in serveraddr;
struct sockaddr_in clientaddr;
socklen_t clientaddrlen = sizeof(clientaddr);
int isfo=0;
int fileindex=0;
int chidy;
int chidx;
int ipxoffs;
int idy;
uint16_t *imagept;
int packetframenumold=0;
int packetframenumfirst=-1;
uint64_t packetframenumcurr;
int nframes=0;
int localpt=0;
int chid=8;
int ncompleteframes=0;
int top,bot;
int nosave=0;
intimeout=0;
int maxringsize=0;
int islastpacket=0;
#define A_C_RED "\x1b[31m"
#define A_C_RESET "\x1b[0m"
if ((argc>2)&&(strcmp(argv[1],"N")==0)) {nosave=1;}
if ((argc>2)&&(strcmp(argv[1],"S")==0)) { top=1;bot=1;}
if ((argc>2)&&(strcmp(argv[1],"ST")==0)) { top=1;bot=0;}
if ((argc>2)&&(strcmp(argv[1],"SB")==0)) { top=0;bot=1;}
if ((argc>2)&&(strcmp(argv[1],"C0")==0)) { top=0;bot=0;chid=0;}
if ((argc>2)&&(strcmp(argv[1],"C1")==0)) { top=0;bot=0;chid=1;}
if ((argc>2)&&(strcmp(argv[1],"C2")==0)) { top=0;bot=0;chid=2;}
if ((argc>2)&&(strcmp(argv[1],"C3")==0)) { top=0;bot=0;chid=3;}
if ((argc>2)&&(strcmp(argv[1],"C4")==0)) { top=0;bot=0;chid=4;}
if ((argc>2)&&(strcmp(argv[1],"C5")==0)) { top=0;bot=0;chid=5;}
if ((argc>2)&&(strcmp(argv[1],"C6")==0)) { top=0;bot=0;chid=6;}
if ((argc>2)&&(strcmp(argv[1],"C7")==0)) { top=0;bot=0;chid=7;}
chidy=(int)(chid/4);
chidx=(chid%4);
ipxoffs=chidy*1024*256; //offset: zero if in the bottom part, half image otherwise
if ((argc>3))
{
sprintf(serverip,"%s",argv[3]);
printf("ip is %s \n",serverip);
}
else
{ //using hardcoded default SERVER_IP
sprintf(serverip,"%s",SERVER_IP);
printf("ip is %s \n",serverip);
}
if ((argc>4))
{
serverport=atoi(argv[4]);
printf("port is %d \n",serverport);
}
else
{
serverport=SERVER_PORT;
}
sprintf((char*)(&savefileprefix),"%s",argv[2]);
#define RINGSIZE 2048
printf( A_C_RED "Using receive ip %s port %d \n"A_C_RESET ,serverip,serverport);
printf("server started with top= %d bot =%d \n",top,bot);
if (nosave!=1) { printf( "saving to %sxxxxxxxx.bin \n",savefileprefix);} else{ printf( "not saving\n"); }
printf("ring buffer size %d MB (images) \n", RINGSIZE);
ringbuffer = mmap(NULL, sizeof (struct myring)*RINGSIZE, PROT_READ | PROT_WRITE,
MAP_SHARED | MAP_ANONYMOUS, -1, 0);
putpt = mmap(NULL, sizeof(long), PROT_READ | PROT_WRITE,
MAP_SHARED | MAP_ANONYMOUS, -1, 0);
getpt = mmap(NULL, sizeof(long), PROT_READ | PROT_WRITE,
MAP_SHARED | MAP_ANONYMOUS, -1, 0);
*getpt=0;
*putpt=0;
pid_t fid,fid2;
fid=fork();
if (fid==-1) perror("fork");
if (fid==0) {
struct sched_param Priority_Param; //struct to set priority
int policy=SCHED_FIFO; //kind of policy desired, either SCHED_FIFO or SCHED_RR,
int prioInit = 95;
Priority_Param.sched_priority = prioInit;
sched_setscheduler(0,policy,&Priority_Param);
//printf("PARENT %d %d %d \n", frt, &ringbuffer[1], ringbuffer);
if(errno == EPERM) { perror("the calling thread does not have appropriate privileges");
perror("Please change /etc/limits.conf and relogin");
}
sd = socket(AF_INET, SOCK_DGRAM, 0);
if (sd==-1) perror("socket()");
#define SOCKET_BUFFER_SIZE (2000*1024*1024) //2GB
int val=SOCKET_BUFFER_SIZE;
setsockopt(sd, SOL_SOCKET, SO_RCVBUF, &val, sizeof(int));
if (sd < 0) { perror("socket() failed"); }
memset(&serveraddr, 0, sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(serverport);
serveraddr.sin_addr.s_addr = inet_addr(serverip);
rc = bind(sd, (struct sockaddr *)&serveraddr, sizeof(serveraddr));
if (rc < 0) { perror(A_C_RED" main bind() failed"A_C_RESET); }
gettimeofday(&tsss,NULL);
while (1==1) {
rc1 = recvfrom(sd, &packet, sizeof(packet), 0,
(struct sockaddr *)&clientaddr,
&clientaddrlen);
//printf(" %d %ld %ld \n", rc1, sizeof(packet) , packet.framenum );
if ((rc1 < 0)) { perror("recvfrom() failed"); break; }
npacket++;
totalnpacket++;
memcpy((char*)( (char*)(ringbuffer[localpt].imagedata)+((int)(packet.packetnum)*8192) ),packet.data,4096*sizeof(uint16_t));
if (((int)((packet.packetnum)))==127) {islastpacket=1; }else {islastpacket=0;}
//printf("receiver %d %ld %ld %d %d \n", localpt, (long) &ringbuffer[localpt] ,(long) ringbuffer[localpt].imagedata ,(int)((packet.packetnum)), 4096*sizeof(uint16_t) );
if (islastpacket==1) {
packetframenumcurr= packet.framenum;
if ((packetframenumfirst==-1)||(packetframenumfirst>packetframenumcurr)){ packetframenumfirst=packetframenumcurr; packetframenumold=packetframenumcurr; } //this is the first packet ever
nframes++;
if (npacket==128){ //we assume we have the full image.
ncompleteframes++;
ringbuffer[localpt].framenum=packetframenumcurr;
ringbuffer[localpt].bunchid=(uint64_t)(packet.debug);
*putpt=*putpt+1;
localpt=(*putpt)%RINGSIZE;
if ((*putpt-*getpt)>maxringsize) maxringsize=(*putpt-*getpt); //for the printout only.
while ((*putpt-*getpt)>RINGSIZE-1) { //do not overflow the buffer
usleep(50000) ;
}
if ((printeach%npri)==npri-1) {
tss=tsss;
gettimeofday(&tsss,NULL);
tdif=(1e6*(tsss.tv_sec - tss.tv_sec)+(long)(tsss.tv_usec)-(long)(tss.tv_usec));
rpratio=(totalnpacket/(float)128)/(float)(packetframenumcurr-packetframenumold);
aimageration=ncompleteframes/(float)(packetframenumcurr-packetframenumfirst+1);
// printf(" \n %ld %ld %ld %ld \n",(long)tsss.tv_sec,(long)tss.tv_sec,(long)tsss.tv_usec,(long)tss.tv_usec);
if (tdif>0) {
npri=(int) ((float)(500000)/(((float)(tdif)/(float)(packetframenumcurr-packetframenumold)))/50.0 + 1) * 50;
}
//printf("npri = %d %f \n " ,npri,(float)(tdif)/(float)(packetframenumcurr-packetframenumold) );
if ((rpratio!=1)&&(printeach!=npri-1)) {
printf(A_C_RED "Average hardware rate = %4d Hz, Average Rcv. image ratio= %1.7f Rcv. pck. ratio %1.5f , ringbuf max =%4d/%4d Fr#: %ld \n" A_C_RESET, (int)( 1e6/(tdif/(packetframenumcurr-packetframenumold))), aimageration, rpratio ,maxringsize,RINGSIZE,packetframenumcurr-packetframenumfirst);
}
else {
printf("Average hardware rate = %4d Hz, Average Rcv. image ratio= %1.7f Rcv. pck. ratio %1.5f , ringbuf max =%4d/%4d Fr#: %ld \n", (int)( 1e6/(tdif/(packetframenumcurr-packetframenumold))), aimageration, rpratio ,maxringsize,RINGSIZE,packetframenumcurr-packetframenumfirst);
// printf("%f %lu %d \n",tdif,packetframenumcurr,packetframenumold);
printf("timestamp: %4lds.%6ldns SC= 0x%x ", (packet.timestamp)/10000000,((packet.timestamp)%10000000)/10, (((packet.debug)>>8)&0xf));
// printf("SC= 0x%x ", (((packet.debug)>>8)&0xf));
// printf("BunchidC= %ld ", (packet.bunchid));
}
packetframenumold=packetframenumcurr;
maxringsize=0;
totalnpacket=0;
} //end of if print
printeach=printeach+1;
} //end of if (npacket==128)
else
{
// if debug
//printf("npacket= %d,packet.framenum = %ld \n",npacket, (long)packet.framenum );
}
npacket=0;
}
}
} //end of if parent
else
{ //is child (file writer or display server
fid2=fork();
if (fid2==0) { //parent = display server
struct sockaddr_in dyserveraddr;
int dyoptval = 1;
int dyfd = socket(AF_INET,SOCK_STREAM , 0);
if (dyfd==-1) perror("socket()");
if (setsockopt(dyfd, SOL_SOCKET, SO_REUSEADDR, &dyoptval, sizeof(dyoptval)) == -1) perror("setsockopt");
memset(&dyserveraddr, 0, sizeof(dyserveraddr));
dyserveraddr.sin_family = AF_INET;
dyserveraddr.sin_port = htons(33410); //serverport+1000; //htons(33410); //serverport+1000
dyserveraddr.sin_addr.s_addr = inet_addr(serverip);
if (bind(dyfd, (struct sockaddr *)&dyserveraddr , sizeof(dyserveraddr))==-1 ) perror("display bind");
printf("Im display server, binding port %d \n",dyserveraddr.sin_port);//serverport+1000);
socklen_t dyaddrlen;
struct sockaddr_storage claddr;
#define ADDRSTRLEN (NI_MAXHOST + NI_MAXSERV + 10)
char addrStr[ADDRSTRLEN];
char host[NI_MAXHOST];
char service[NI_MAXSERV];
char request[5];
dyaddrlen = sizeof(struct sockaddr_storage);
if (listen(dyfd, 1) == -1) perror("listen");
for (;;) {
int cfd = accept(dyfd, (struct sockaddr *) &claddr, &dyaddrlen);
if (cfd == -1) perror("accept");
if (getnameinfo((struct sockaddr *) &claddr, dyaddrlen,host, NI_MAXHOST, service, NI_MAXSERV, 0) == 0)
snprintf(addrStr, ADDRSTRLEN, "(%s, %s)", host, service);
else
snprintf(addrStr, ADDRSTRLEN, "(?UNKNOWN?)");
printf("Connection from %s\n", addrStr);
long frametosendold=0;
long frametosend=0;
uint32_t sc_tolook_for = 0;
int count_since_scfound = 0;
while (1==1){
/* Read client request, send image back */
int nread=read(cfd,&request,5);
if (nread<=0) break;
// printf("%d bytes read %d # from %s : %s\n", nread, con++,addrStr, request);
if (strcmp(request,"give\n")==0) {
sc_tolook_for=13;
while (frametosend<=frametosendold){
usleep(20000); //TBC
for (ib=1;ib<=15;ib++) {
localpt=((*putpt)-(long)(ib))%RINGSIZE;
//if ((((ringbuffer[localpt].bunchid)>>8)&0xf)==2){ frametosend=(*putpt)-ib; break;}
// replaced with 'timeout'
if ((count_since_scfound > 100 )) { // tunable
// printf("Receiver to online disp: going to look for sc15 any SC instead of SCX\n");
intimeout=1;
}
if (((((ringbuffer[localpt].bunchid)>>8)&0xf)==sc_tolook_for)|(intimeout==1)) {
if ((((ringbuffer[localpt].bunchid)>>8)&0xf)==sc_tolook_for){
intimeout=0;
count_since_scfound=0;
}
frametosend=(*putpt)-ib;
// printf("sending sc %ld \n", ((ringbuffer[localpt].bunchid)>>8)&0xf );
break;
// frametosend=(*putpt)-ib; break;
} else {
count_since_scfound++;
}
// end of 'timeout' modification
}
}
localpt=frametosend%RINGSIZE;
// write(cfd, &request,5);
int wr1=0;
while (wr1+write(cfd, &(ringbuffer[localpt].imagedata[(int)(wr1/2)]), 2*1024* 512-wr1)<1024*512*2) { ;}
printf("sent image with SC %d \n ",(int)(((ringbuffer[localpt].bunchid)>>8)&0xf));
// if (frametosend>10000) {close(cfd);close(sd); }
frametosendold=frametosend;
}
}//end of while 1==1
if (close(cfd) == -1) /* Close connection */
perror("close");
} //end of for accept
}
else
{ //child child file writer
struct sched_param Priority_Param; //struct to set priority
int policy=SCHED_FIFO; //kind of policy desired, either SCHED_FIFO or SCHED_RR,
int prioInit = 45;
Priority_Param.sched_priority = prioInit;
sched_setscheduler(0,policy,&Priority_Param);
//printf("PARENT %d %d %d \n", frt, &ringbuffer[1], ringbuffer);
if(errno == EPERM) { perror("the calling thread does not have appropriate privileges");
perror("Please change /etc/limits.conf and relogin");
}
while (1==1){
while ((*putpt-*getpt)<1) {
usleep(50000);
if (isfo==1) fflush(sfilefd);
}
if ((framesinfile%10000)==0){
if (isfo==1) {fileindex++; fclose(sfilefd);isfo=0;};
sprintf(savefilename,"%s%06d.dat",savefileprefix,fileindex);
if (nosave!=1) {
sfilefd=fopen((const char *)(savefilename),"w");
if (sfilefd!=NULL) {isfo=1; }
else
{ perror("file opening not succesfull");}
printf("saving to ... %s \n",savefilename);
}
framesinfile=0;
usleep(10000);
}
if (nosave!=1) fwrite((char*)(&ringbuffer[localpt]), 1 ,16 ,sfilefd); //this writes the header
imagept=(uint16_t*)((char*)(ringbuffer[localpt].imagedata));
//printf("writer %d %ld \n", localpt, (long) imagept );
if ((top==1)||(bot==1))
{
if (nosave!=1) fwrite(imagept+(1-bot)*1024*256, 2 ,4096*64*(top+bot) ,sfilefd);
}
else //end of else if ((top==1)||(bot==1))single chip
{
chidy=(int)(chid/4);
chidx=(chid%4);
ipxoffs=chidy*1024*256; //offset: zero if in the bottom part
for (idy=0;idy<256;idy++){
memcpy(&chipd[idy*256],&imagept[ipxoffs+idy*1024+chidx*256],256*sizeof(uint16_t));
}// end of for idy
if (nosave!=1) fwrite(&chipd, 256*256 ,sizeof(uint16_t),sfilefd);
} //end of else if ((top==1)||(bot==1))
*getpt= *getpt+1;
localpt=(*getpt)%RINGSIZE;
framesinfile++;
ncompleteframes++;
printeach=printeach+1;
}
} //end of is child file writer
}//end of is child file writer or display server
/***********************************************************************/
/* Close down any open socket descriptors */
/***********************************************************************/
if (sd != -1)
close(sd);
return 0;
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
slsDetector_bin_dev0921/p Executable file

Binary file not shown.

BIN
slsDetector_bin_dev0921/result Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.