Rev 12 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "pcivme_ni.h"
#include "wienvme_dll.h"
//----------- DEFINES -----------------------------------------------------
#define DEVICENAME_LINUX "/dev/vmemm_1" // a device name 'template' for WINNT
int hHandle24
, hHandle32
, hHandle16
;
int VMEerrors
=0;
void VME_load
(char* module_path
)
{
VMEerrors
=0;
}
int VME_open
(int* hHandle
, unsigned char AddMod
, char* device_name
,
unsigned short module_number
)
{
int result
;
char dname
[256];
/* open a path to a device. */
if (device_name
== NULL
) sprintf(dname
,"%s", DEVICENAME_LINUX
);
else sprintf(dname
,"%s", device_name
);
result
= VMEinit
(dname
, module_number
, AddMod
, hHandle
);
if (result
) {
printf("Can't open interface \"%s\" to VMEMM-module ! err=%d\n", dname
, result
);
printf("module_number %d, AddMod %d, hHandle %d\n",module_number
, AddMod
, *hHandle
);
exit(-1);
}
return(result
);
}
int VME_open24
(void)
{
return (VME_open
(&hHandle24
, Std_NoPriv_Data
, NULL
, 1));
}
int VME_open32
(void)
{
return (VME_open
(&hHandle32
, Ext_NoPriv_Data
, NULL
, 1));
}
int VME_open16
(void)
{
return (VME_open
(&hHandle16
, Short_NoPriv
, NULL
, 1));
}
int VME_start
(char* module_path
)
{
VME_load
(module_path
);
VME_open24
();
VME_open32
();
VME_open16
();
return 0;
}
void VME_unload
()
{
return;
}
int VME_close
(int hHandle
)
{
int result
;
/* close the opened path */
//printf("VME_Close at addr=%d\n",hHandle);
result
= VMEclose
(hHandle
);
if (result
) {
printf("Can't close interface!\n");
}
return (result
);
}
int VME_close24
()
{
return (VME_close
(hHandle24
));
}
int VME_close32
()
{
return (VME_close
(hHandle32
));
}
int VME_close16
()
{
return (VME_close
(hHandle16
));
}
int VME_stop
()
{
VME_close24
();
VME_close32
();
VME_close16
();
VME_unload
();
return 0;
}
int VME_reset
()
{
int result
;
/* close the opened path */
result
= VMEreset
(hHandle16
);
if (result
) {
printf("Can't reset interface A16!\n");
}
result
= VMEreset
(hHandle24
);
if (result
) {
printf("Can't reset interface A24!\n");
}
result
= VMEreset
(hHandle32
);
if (result
) {
printf("Can't reset interface A32!\n");
}
return (result
);
}
int VME_read8
(int hHandle
, unsigned long n
, unsigned long at
, void* buff
)
{
int result
;
/* D8 read */
result
= VMEread
(hHandle
, at
, 1, n
, buff
);
if (result
) {
VMEerrors
++;
printf("D8 read at 0x%lX failed!\n", at
);
}
// printf("0x%X, 0x%X, 0x%X, 0x%X\n", hHandle, at, n, * (unsigned short *) buff);
return (result
);
}
int VME_read16
(int hHandle
, unsigned long n
, unsigned long at
, void* buff
)
{
int result
;
/* D16 read */
result
= VMEread
(hHandle
, at
, 2, n
, buff
);
if (result
) {
VMEerrors
++;
printf("D16 read at 0x%lX failed!\n", at
);
}
// printf("0x%X, 0x%X, 0x%X, 0x%X\n", hHandle, at, n, * (unsigned short *) buff);
return (result
);
}
int VME_read32
(int hHandle
, unsigned long n
, unsigned long at
, void* buff
)
{
int result
;
/* D32 read */
result
= VMEread
(hHandle
, at
, 4, n
, buff
);
if (result
) {
VMEerrors
++;
printf("D32 read at 0x%lX failed!\n", at
);
}
//printf("0x%X, 0x%X, 0x%X, 0x%X\n", hHandle, at, n, * (unsigned short *) buff);
return (result
);
}
int VME_write8
(int hHandle
, unsigned long n
, unsigned long at
, void* buff
)
{
int result
;
/* D8 write */
result
= VMEwrite
(hHandle
, at
, 1, n
, buff
);
if (result
) {
VMEerrors
++;
printf("D8 write at 0x%lX failed!\n", at
);
}
return (result
);
}
int VME_write16
(int hHandle
, unsigned long n
, unsigned long at
, void* buff
)
{
int result
;
/* D16 write */
result
= VMEwrite
(hHandle
, at
, 2, n
, buff
);
if (result
) {
VMEerrors
++;
printf("D16 write at 0x%lX failed!\n", at
);
}
return (result
);
}
int VME_write32
(int hHandle
, unsigned long n
, unsigned long at
, void* buff
)
{
int result
;
/* D32 write */
result
= VMEwrite
(hHandle
, at
, 4, n
, buff
);
if (result
) {
VMEerrors
++;
printf("D32 write at 0x%lX failed!\n", at
);
}
//printf("D32 write at 0x%X buff=0x%X\n", at,((int*) buff)[0]);
return (result
);
}
#ifdef MAIN
int GetHandle
(int w
){
switch (w
){
case 16: return hHandle16
;
case 24: return hHandle24
;
case 32: return hHandle24
;
}
return 24;
}
int main
(int argc
, char **argv
){
unsigned long address
=0x32100000, value
;
unsigned char modifier
=24;
int hHandle
, result
=0;
int width
=4;
int c
;
opterr
= 0;
VME_start
(NULL
);
while ((c
= getopt
(argc
, argv
, "a:w:rm:osd:")) != -1)
switch (c
)
{
case 's':
VME_reset
();
break; // reset
case 'a':
address
= strtoul (optarg
,NULL
,0);
break; // address
case 'm':
modifier
= strtoul (optarg
,NULL
,0);
break; // modifier
case 'd':
width
= strtoul (optarg
,NULL
,0);
printf("Width= %d\n",width
);
break; // data width
case 'w':
value
= strtoul (optarg
,NULL
,0);
hHandle
= GetHandle
(modifier
);
result
= VMEwrite
(hHandle
, address
, width
, 1, &value
);
if (result
) printf("A%d D%d write at 0x%lX failed! result=%d err=%d\n", modifier
, width
*8, address
, result
, GetLastError
(hHandle
));
break; // write
case 'r':
hHandle
= GetHandle
(modifier
);
result
= VMEread
(hHandle
, address
, width
, 1, &value
);
if (result
) printf("A%d D%d read at 0x%lX failed! result=%d err=%d\n", modifier
,width
*8, address
, result
, GetLastError
(hHandle
));
break; // read
default:
printf("Unknown command %c\n",c
);
}
VME_stop
();
}
#endif