AlcapDAQ  1
vme_universe.h
Go to the documentation of this file.
1 #include <netinet/in.h>
2 
3 #include "vme_io.h"
4 
5 struct vme_handle
6 {
7  bool used;
8  int fd;
9  unsigned long vme_base;
10  int size;
11  volatile unsigned char *base;
12  int reference_count;
14  int fifo_block_size;
15 };
16 
17 struct vme_handle *vme_open(unsigned long vme_addr,
19  int size,
20  int fifo_block_size = 0);
21 
22 void vme_close(struct vme_handle *handle);
23 
24 int vme_dma_read(struct vme_handle *handle,
25  unsigned long vme_addr,
26  unsigned char *buffer,
27  int size);
28 
29 int vme_dma_write(struct vme_handle *handle,
30  unsigned long vme_addr,
31  unsigned char *buffer,
32  int size);
33 
34 inline unsigned long vme_read_d32(struct vme_handle *handle,
35  unsigned long vme_addr)
36 {
37  volatile unsigned long *p = (volatile unsigned long *)
38  (handle->base + (vme_addr - handle->vme_base));
39  return *p;
40 }
41 
42 inline unsigned short vme_read_d16(struct vme_handle *handle,
43  unsigned long vme_addr)
44 {
45  volatile unsigned short *p = (volatile unsigned short *)
46  (handle->base + (vme_addr - handle->vme_base));
47  return *p;
48 }
49 
50 inline unsigned char vme_read_d8(struct vme_handle *handle,
51  unsigned long vme_addr)
52 {
53  volatile unsigned char *p = (volatile unsigned char *)
54  (handle->base + (vme_addr - handle->vme_base));
55  return *p;
56 }
57 
58 inline void vme_write_d32(struct vme_handle *handle,
59  unsigned long vme_addr,
60  unsigned long value)
61 {
62  volatile unsigned long *p = (volatile unsigned long *)
63  (handle->base + (vme_addr - handle->vme_base));
64  *p = value;
65 }
66 
67 inline void vme_write_d16(struct vme_handle *handle,
68  unsigned long vme_addr,
69  unsigned short value)
70 {
71  volatile unsigned short *p = (volatile unsigned short *)
72  (handle->base + (vme_addr - handle->vme_base));
73  *p = value;
74 }
75 
76 inline void vme_write_d8(struct vme_handle *handle,
77  unsigned long vme_addr,
78  unsigned char value)
79 {
80  volatile unsigned char *p = (volatile unsigned char *)
81  (handle->base + (vme_addr - handle->vme_base));
82  *p = value;
83 }
84 
85 inline unsigned long vme_read_d32_checked(struct vme_handle *handle,
86  unsigned long vme_addr,
87  int *status = NULL)
88 {
89  unsigned long result;
90 
91  int status1 = vme_dma_read(handle, vme_addr, (unsigned char *) &result,
92  sizeof(unsigned long));
93 
94  if(status != NULL) {
95  if(status1 == sizeof(unsigned long)) {
96  *status = 0;
97  } else {
98  *status = -1;
99  }
100  }
101 
102  return ntohl(result);
103 }
104 
105 inline unsigned short vme_read_d16_checked(struct vme_handle *handle,
106  unsigned long vme_addr,
107  int *status = NULL)
108 {
109  unsigned short result;
110 
111  int status1 = vme_dma_read(handle, vme_addr, (unsigned char *) &result,
112  sizeof(unsigned short));
113 
114  if(status != NULL) {
115  if(status1 == sizeof(unsigned short)) {
116  *status = 0;
117  } else {
118  *status = -1;
119  }
120  }
121 
122  return ntohs(result);
123 }
124 
125 inline unsigned char vme_read_d8_checked(struct vme_handle *handle,
126  unsigned long vme_addr,
127  int *status = NULL)
128 {
129  unsigned short result;
130 
131  int status1 = vme_dma_read(handle, vme_addr, (unsigned char *) &result,
132  sizeof(unsigned char));
133 
134  if(status != NULL) {
135  if(status1 == sizeof(unsigned char)) {
136  *status = 0;
137  } else {
138  *status = -1;
139  }
140  }
141 
142  return result;
143 }
144 
146  unsigned long vme_addr,
147  unsigned long value)
148 
149 {
150  unsigned long value1 = htonl(value);
151 
152  int status = vme_dma_write(handle, vme_addr, (unsigned char *) &value1,
153  sizeof(unsigned long));
154 
155  if(status == sizeof(unsigned long)) {
156  return 0;
157  } else {
158  return -1;
159  }
160 }
161 
163  unsigned long vme_addr,
164  unsigned short value)
165 {
166  unsigned short value1 = htons(value);
167 
168  int status = vme_dma_write(handle, vme_addr, (unsigned char *) &value1,
169  sizeof(unsigned short));
170 
171  if(status == sizeof(unsigned short)) {
172  return 0;
173  } else {
174  return -1;
175  }
176 
177 }
178 
180  unsigned long vme_addr,
181  unsigned char value)
182 {
183  int status = vme_dma_write(handle, vme_addr, (unsigned char *) &value,
184  sizeof(unsigned char));
185 
186  if(status == sizeof(unsigned char)) {
187  return 0;
188  } else {
189  return -1;
190  }
191 }
192