diff --git a/slsDetectorSoftware/eigerDetectorServer/EigerHighLevelFunctions.c b/slsDetectorSoftware/eigerDetectorServer/EigerHighLevelFunctions.c new file mode 100644 index 000000000..f27b0c479 --- /dev/null +++ b/slsDetectorSoftware/eigerDetectorServer/EigerHighLevelFunctions.c @@ -0,0 +1,250 @@ + +/** + * @author Ian Johnson + * @version 1.0 + */ + + +#include +#include +#include +#include + + + +struct sockaddr_in eiger_socket_addr; +int eiger_max_message_length = 1024; +char eiger_message[1024]; +int eiger_message_length = 0; +int eiger_ret_val=0; + +const unsigned int ndacs = 16; +const char* dac_names[16] = {"SvP","Vtr","Vrf","Vrs","SvN","Vtgstv","Vcmp_ll","Vcmp_lr","cal","Vcmp_rl","rxb_rb","rxb_lb","Vcmp_rr","Vcp","Vcn","Vis"}; + + +int EigerInit(){ + static int passed = 0; + + if(!passed){ + struct hostent *dst_host; + if((dst_host = gethostbyname("localhost")) == NULL){ //or look into getaddrinfo(3) + fprintf(stderr,"ERROR, no such host\n"); + return 0; + }else{ + //struct sockaddr_in eiger_socket_addr; + int port = 43210; + bzero((char *) &eiger_socket_addr, sizeof(eiger_socket_addr)); + eiger_socket_addr.sin_family = AF_INET; + bcopy((char *)dst_host->h_addr,(char *)&eiger_socket_addr.sin_addr.s_addr,dst_host->h_length); + eiger_socket_addr.sin_port = htons(port); + passed = 1; + } + } + + return passed; +} + + +int EigerSendCMD(){ + if(!EigerInit()||eiger_message_length<=0) return 0; + + int sockfd = socket(AF_INET,SOCK_STREAM,0); + if(sockfd<0){ + fprintf(stderr,"ERROR opening socket\n"); + return 0; + } + + if(connect(sockfd,(struct sockaddr *) &eiger_socket_addr,sizeof(eiger_socket_addr))<0){ + fprintf(stderr,"ERROR connecting\n"); + return 0; + } + + int n = write(sockfd,eiger_message,eiger_message_length); + int ret_length = read(sockfd,eiger_message,eiger_max_message_length); + + close(sockfd); + + if(n<0||ret_length<0) return 0; + + + fprintf(stdout,"%s\n",eiger_message); + if(eiger_ret_val>0){ + int i=0; + eiger_message[1]='\0'; + if(atoi(eiger_message)!=0) return 0; + + for(i=2;i0&&i