Skip to content
Snippets Groups Projects
Select Git revision
  • revert-39cd1109
  • master default protected
  • wdconinc-master-patch-74174
  • build_doc
  • trig_rec
  • detector_config
  • pr/build_eicrecon
  • rm-deploy-token
  • wdconinc-master-patch-19644
  • 5-detector_path-should-point-to-cmake_install_prefix-subtree-not-source-dir
  • new_runner
  • report_test
  • no_exit
  • env_update
  • local_running
15 results

build_detector.sh

Blame
  • fpga_io.c 2.68 KiB
    #include <sys/socket.h>
    #include <sys/types.h>
    #include <netinet/in.h>
    #include <netdb.h>
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <errno.h>
    #include <arpa/inet.h> 
    #include "fpga_io.h"
    
    int sockfd_reg = 0;
    int sockfd_event = 0;
    
    typedef struct
    {
    	int len;
    	int type;
    	int wrcnt;
    	int addr;
    	int flags;
    	int vals[1];
    } write_struct;
    
    typedef struct
    {
    	int len;
    	int type;
    	int rdcnt;
    	int addr;
    	int flags;
    } read_struct;
    
    typedef struct
    {
    	int len;
    	int type;
    	int rdcnt;
    	int data[1];
    } read_rsp_struct;
    
    void rich_write32(void *addr, int val)
    {
    	write_struct ws;
    
    	ws.len = 16;
    	ws.type = 4;
    	ws.wrcnt = 1;
    	ws.addr = (int)((long)addr);
    	ws.flags = 0;
    	ws.vals[0] = val;
    	write(sockfd_reg, &ws, sizeof(ws));
    }
    
    unsigned int rich_read32(void *addr)
    {
    	read_struct rs;
    	read_rsp_struct rs_rsp;
    	int len;
    	
    	rs.len = 12;
    	rs.type = 3;
    	rs.rdcnt = 1;
    	rs.addr = (int)((long)addr);
    	rs.flags = 0;
    	write(sockfd_reg, &rs, sizeof(rs));
    	
    	len = read(sockfd_reg, &rs_rsp, sizeof(rs_rsp));
    	if(len != sizeof(rs_rsp))
    		printf("Error in %s: socket read failed...\n", __FUNCTION__);
    	
    	return rs_rsp.data[0];
    }
    
    void rich_read32_n(int n, void *addr, unsigned int *buf)
    {
    	read_struct rs;
    	read_rsp_struct rs_rsp;
    	int len, i;
    	
    	for(i = 0; i < n; i++)
    	{
    		rs.len = 12;
    		rs.type = 3;
    		rs.rdcnt = 1;
    		rs.addr = (int)((long)addr);
    		rs.flags = 0;
    		write(sockfd_reg, &rs, sizeof(rs));
    	}
    	
    	for(i = 0; i < n; i++)
    	{
    		len = read(sockfd_reg, &rs_rsp, sizeof(rs_rsp));
    		if(len != sizeof(rs_rsp))
    			printf("Error in %s: socket read failed...\n", __FUNCTION__);
    		
    		buf[i] = rs_rsp.data[0];
    	}
    }
    
    int open_socket(int port)
    {
    	struct sockaddr_in serv_addr;
    	int sockfd = 0;
    	
    	if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    	{
    		printf("\n Error : Could not create socket \n");
    		exit(1);
    	}
    	memset(&serv_addr, '0', sizeof(serv_addr)); 
    
    	serv_addr.sin_family = AF_INET;
    	serv_addr.sin_port = htons(port);
    
    	if(inet_pton(AF_INET, FPGA_IP_ADDR, &serv_addr.sin_addr)<=0)
    	{
    		printf("\n inet_pton error occured\n");
    		exit(1);
    	} 
    
    	if( connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
    	{
    		printf("\n Error : Connect Failed \n");
    		exit(1);
    	}
    	return sockfd;
    }
    
    void open_register_socket()
    {
    	int n, val;
    	
    	sockfd_reg = open_socket(6102);
    
    	/* Send endian test header */
    	val = 0x12345678;
    	write(sockfd_reg, &val, 4);
    	
    	val = 0;
    	n = read(sockfd_reg, &val, 4);
    	printf("n = %d, val = 0x%08X\n", n, val);
    }
    
    void open_event_socket()
    {
      sockfd_event = open_socket(6103);
    }
    
    void close_register_socket()
    {
      if(sockfd_reg)
      {
        close(sockfd_reg);
        sockfd_reg = 0;
      }
    }
    
    void close_event_socket()
    {
      if(sockfd_event)
      {
        close(sockfd_event);
        sockfd_event = 0;
      }
    }