Subversion Repositories f9daq

Rev

Rev 124 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
78 f9daq 1
#include <ansi_c.h>
2
#include "wienvme_dll.h"
3
#include <utility.h>
4
 
5
//----------- DEFINES -----------------------------------------------------
6
#define DEVICENAME_NT "\\\\.\\PCIVME:\\VMEMMxx"     // a device name 'template' for WINNT
7
#define DEVICENAME_9X "\\\\.\\C:\\windows\\system\\VWIENVMED.vxd" // the same for WIN95/98
8
#define MODULE_NUMBER     1 // number of connected CC32 module
9
 
10
#define VMEinit (*vme_init)
11
static int VMEinit (const char*, unsigned short, unsigned char, int*);
12
#define VMEread (*vme_read)
13
static int VMEread (int, unsigned long, unsigned char, unsigned long, void*);
14
#define VMEwrite (*vme_write)
15
static int VMEwrite (int, unsigned long, unsigned char, unsigned long, void*);
16
#define VMEreset (*vme_reset)
17
static int VMEreset (int);
18
#define VMEclose (*vme_close)
19
static int VMEclose (int);
20
 
21
int hHandle24, hHandle32;
22
int VMEmodule;
23
 
24
void WIENVME_load (char* module_path)
25
{
26
  int stat;
27
 
28
  if (module_path == NULL)
29
    VMEmodule = LoadExternalModule
30
      ("c:\\home\\CVI\\instr\\WIENVME_DLL\\pcivme_ni.lib");
31
   else
32
    VMEmodule = LoadExternalModule (module_path);
33
 
34
  vme_init = GetExternalModuleAddr (VMEmodule, "VMEinit", &stat);
35
  vme_read = GetExternalModuleAddr (VMEmodule, "VMEread", &stat);
36
  vme_write = GetExternalModuleAddr (VMEmodule, "VMEwrite", &stat);
37
  vme_reset = GetExternalModuleAddr (VMEmodule, "VMEreset", &stat);
38
  vme_close = GetExternalModuleAddr (VMEmodule, "VMEclose", &stat);
39
 
40
  return;
41
}
42
 
43
int WIENVME_open (int* hHandle, unsigned char AddMod, char* device_name,
44
                 unsigned short module_number)
45
{
46
  int   result;
47
 
48
/* open a path to a device. */
49
  if (device_name == NULL)
50
    switch (GetCurrentPlatform ())
51
        {
52
        case 2:
53
        device_name = DEVICENAME_9X;
54
                break;
55
        case 3:
56
        device_name = DEVICENAME_NT;
57
                break;
58
        default:
59
 
60
                break;
61
        }
62
  result = VMEinit(device_name, module_number, AddMod, hHandle);
63
  if (result) {
64
    printf("Can't open interface \"%s\" to VMEMM-module \"%d\"!\n", DEVICENAME_NT, MODULE_NUMBER);
65
  }
66
  return(result);
67
}
68
 
69
int WIENVME_open24 (void)
70
{
71
  return (WIENVME_open (&hHandle24, Std_NoPriv_Data, NULL, 1));
72
}
73
 
74
int WIENVME_open32 (void)
75
{
76
  return (WIENVME_open (&hHandle32, Ext_NoPriv_Data, NULL, 1));
77
}
78
 
79
int WIENVME_start (char* module_path)
80
{
81
  WIENVME_load(module_path);
82
  WIENVME_open24();
83
  WIENVME_open32();
84
 
85
  return 0;
86
}
87
 
88
void WIENVME_unload ()
89
{
90
  UnloadExternalModule (VMEmodule);
91
  return;
92
}
93
 
94
int WIENVME_close (int hHandle)
95
{
96
  int result;
97
 
98
/* close the opened path */
99
  printf("hHandle %d\n",hHandle);
100
 
101
  result = VMEclose(hHandle);
102
  if (result) {
103
    printf("Can't close interface!\n");
104
  }
105
  return (result);
106
}
107
 
108
int WIENVME_close24 ()
109
{
110
  return (WIENVME_close (hHandle24));
111
}
112
 
113
int WIENVME_close32 ()
114
{
115
  return (WIENVME_close (hHandle32));
116
}
117
 
118
int WIENVME_stop ()
119
{
120
  WIENVME_close24();
121
  WIENVME_close32();
122
  WIENVME_unload();
123
 
124
  return 0;
125
}
126
 
127
int WIENVME_reset ()
128
{
129
  int result;
130
 
131
/* close the opened path */
132
  result = VMEreset(hHandle24);
133
  if (result) {
134
    printf("Can't reset interface!\n");
135
  }
136
  return (result);
137
}
138
 
139
int WIENVME_read8 (int hHandle, unsigned long n, unsigned long at, void* buff)
140
{
141
  int result;
142
 
143
/* D8 read */
144
  result = VMEread(hHandle, at, 1, n, buff);
145
  if (result) {
146
    printf("D8 read at 0x%X failed!\n", at);
147
  }
148
//  printf("0x%X, 0x%X, 0x%X, 0x%X\n", hHandle, at, n, * (unsigned short *) buff);
149
  return (result);
150
}
151
 
152
int WIENVME_read16 (int hHandle, unsigned long n, unsigned long at, void* buff)
153
{
154
  int result;
155
 
156
/* D16 read */
157
  result = VMEread(hHandle, at, 2, n, buff);
158
  if (result) {
159
    printf("D16 read at 0x%X failed!\n", at);
160
  }
161
//  printf("0x%X, 0x%X, 0x%X, 0x%X\n", hHandle, at, n, * (unsigned short *) buff);
162
  return (result);
163
}
164
 
165
int WIENVME_read32 (int hHandle, unsigned long n, unsigned long at, void* buff)
166
{
167
  int result;
168
 
169
/* D32 read */
170
  result = VMEread(hHandle, at, 4, n, buff);
171
  if (result) {
172
    printf("D32 read at 0x%X failed!\n", at);
173
  }
174
  //printf("0x%X, 0x%X, 0x%X, 0x%X\n", hHandle, at, n, * (unsigned short *) buff);
175
  return (result);
176
}
177
 
178
int WIENVME_write8 (int hHandle, unsigned long n, unsigned long at, void* buff)
179
{
180
  int result;
181
 
182
/* D8 write */
183
  result = VMEwrite(hHandle, at, 1, n, buff);
184
  if (result) {
185
    printf("D8 write at 0x%X failed!\n", at);
186
  }
187
  return (result);
188
}
189
 
190
int WIENVME_write16 (int hHandle, unsigned long n, unsigned long at, void* buff)
191
{
192
  int result;
193
 
194
/* D16 write */
195
  result = VMEwrite(hHandle, at, 2, n, buff);
196
  if (result) {
197
    printf("D16 write at 0x%X failed!\n", at);
198
  }
199
  return (result);
200
}
201
 
202
int WIENVME_write32 (int hHandle, unsigned long n, unsigned long at, void* buff)
203
{
204
  int result;
205
 
206
/* D32 write */
207
  result = VMEwrite(hHandle, at, 4, n, buff);
208
  if (result) {
209
    printf("D32 write at 0x%X failed!\n", at);
210
  }
211
  //printf("D32 write at 0x%X buff=0x%X\n", at,((int*) buff)[0]);
212
  return (result);
213
}
214
 
215
 
216
#ifndef VME_D32
217
 
218
#define VME_D8  0x1
219
#define VME_D16 0x2
220
#define VME_D32 0x4
221
#endif
222
 
223
short __stdcall WIENVME_VME_R( uint16_t AM, uint16_t DW,  uint32_t VME_Address, uint32_t *Data){
224
        int hHandle=0, nb=0;
225
        switch (AM){
226
                case Ext_NoPriv_Data: hHandle = hHandle32; break;
227
                case Std_NoPriv_Data: hHandle = hHandle24; break;
228
                default : return 0;
229
        }      
230
 
231
 
232
        switch (DW){
233
          case VME_D16: nb=  WIENVME_read16 (hHandle, 1, (unsigned long) VME_Address, (void*) Data)  ;  break;
234
      case VME_D32: nb=  WIENVME_read32 (hHandle, 1, (unsigned long) VME_Address, (void*) Data)  ; break;
235
 
236
      default: return 0;
237
    }
238
        return nb;
239
}      
240
 
241
short __stdcall WIENVME_VME_W( uint16_t AM, uint16_t DW, uint32_t VME_Address, uint32_t Data){
242
                int hHandle=0, nb=0;
243
        switch (AM){
244
                case Ext_NoPriv_Data: hHandle = hHandle32; break;
245
                case Std_NoPriv_Data: hHandle = hHandle24; break;
246
                default : return 0;
247
        }      
248
 
249
 
250
        switch (DW){
251
          case VME_D16: nb=  WIENVME_write16 (hHandle, 1, (unsigned long) VME_Address, (void*) &Data)  ;  break;
252
      case VME_D32: nb=  WIENVME_write32 (hHandle, 1, (unsigned long) VME_Address, (void*) &Data)  ; break;
253
 
254
      default: return 0;
255
    }
256
        return nb;
257
}      
258
 
259
short __stdcall WIENVME_VME_MW( uint16_t AM, uint16_t DW, uint32_t VME_Address, uint32_t Data){
260
 
261
        return WIENVME_VME_W( AM, DW, VME_Address, Data);
262
}      
263
short __stdcall WIENVME_VME_MWRST( void ){
264
 
265
 
266
        return 0;
267
}      
268
short __stdcall WIENVME_VME_MWEXEC( void ){
269
 
270
 
271
        return 0;
272
}      
273
 
274
short __stdcall WIENVME_VME_MR( uint16_t AM, uint16_t DW, uint32_t VME_Address, uint32_t *Data){
275
 
276
 
277
        return WIENVME_VME_R( AM, DW, VME_Address, Data);  
278
}      
279
short __stdcall WIENVME_VME_MRRST( void ){
280
 
281
 
282
        return 0;
283
}      
284
short __stdcall WIENVME_VME_MREXEC(  uint32_t *Data  ){
285
 
286
 
287
        return 0;
288
}