Rev 124 |
Go to most recent revision |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
#include <ansi_c.h>
#include "wienvme_dll.h"
#include <utility.h>
//----------- DEFINES -----------------------------------------------------
#define DEVICENAME_NT "\\\\.\\PCIVME:\\VMEMMxx" // a device name 'template' for WINNT
#define DEVICENAME_9X "\\\\.\\C:\\windows\\system\\VWIENVMED.vxd" // the same for WIN95/98
#define MODULE_NUMBER 1 // number of connected CC32 module
#define VMEinit (*vme_init)
static int VMEinit
(const char*, unsigned short, unsigned char, int*);
#define VMEread (*vme_read)
static int VMEread
(int, unsigned long, unsigned char, unsigned long, void*);
#define VMEwrite (*vme_write)
static int VMEwrite
(int, unsigned long, unsigned char, unsigned long, void*);
#define VMEreset (*vme_reset)
static int VMEreset
(int);
#define VMEclose (*vme_close)
static int VMEclose
(int);
int hHandle24
, hHandle32
;
int VMEmodule
;
void WIENVME_load
(char* module_path
)
{
int stat
;
if (module_path
== NULL
)
VMEmodule
= LoadExternalModule
("c:\\home\\CVI\\instr\\WIENVME_DLL\\pcivme_ni.lib");
else
VMEmodule
= LoadExternalModule
(module_path
);
vme_init
= GetExternalModuleAddr
(VMEmodule
, "VMEinit", &stat
);
vme_read
= GetExternalModuleAddr
(VMEmodule
, "VMEread", &stat
);
vme_write
= GetExternalModuleAddr
(VMEmodule
, "VMEwrite", &stat
);
vme_reset
= GetExternalModuleAddr
(VMEmodule
, "VMEreset", &stat
);
vme_close
= GetExternalModuleAddr
(VMEmodule
, "VMEclose", &stat
);
return;
}
int WIENVME_open
(int* hHandle
, unsigned char AddMod
, char* device_name
,
unsigned short module_number
)
{
int result
;
/* open a path to a device. */
if (device_name
== NULL
)
switch (GetCurrentPlatform
())
{
case 2:
device_name
= DEVICENAME_9X
;
break;
case 3:
device_name
= DEVICENAME_NT
;
break;
default:
break;
}
result
= VMEinit
(device_name
, module_number
, AddMod
, hHandle
);
if (result
) {
printf("Can't open interface \"%s\" to VMEMM-module \"%d\"!\n", DEVICENAME_NT
, MODULE_NUMBER
);
}
return(result
);
}
int WIENVME_open24
(void)
{
return (WIENVME_open
(&hHandle24
, Std_NoPriv_Data
, NULL
, 1));
}
int WIENVME_open32
(void)
{
return (WIENVME_open
(&hHandle32
, Ext_NoPriv_Data
, NULL
, 1));
}
int WIENVME_start
(char* module_path
)
{
WIENVME_load
(module_path
);
WIENVME_open24
();
WIENVME_open32
();
return 0;
}
void WIENVME_unload
()
{
UnloadExternalModule
(VMEmodule
);
return;
}
int WIENVME_close
(int hHandle
)
{
int result
;
/* close the opened path */
printf("hHandle %d\n",hHandle
);
result
= VMEclose
(hHandle
);
if (result
) {
printf("Can't close interface!\n");
}
return (result
);
}
int WIENVME_close24
()
{
return (WIENVME_close
(hHandle24
));
}
int WIENVME_close32
()
{
return (WIENVME_close
(hHandle32
));
}
int WIENVME_stop
()
{
WIENVME_close24
();
WIENVME_close32
();
WIENVME_unload
();
return 0;
}
int WIENVME_reset
()
{
int result
;
/* close the opened path */
result
= VMEreset
(hHandle24
);
if (result
) {
printf("Can't reset interface!\n");
}
return (result
);
}
int WIENVME_read8
(int hHandle
, unsigned long n
, unsigned long at
, void* buff
)
{
int result
;
/* D8 read */
result
= VMEread
(hHandle
, at
, 1, n
, buff
);
if (result
) {
printf("D8 read at 0x%X failed!\n", at
);
}
// printf("0x%X, 0x%X, 0x%X, 0x%X\n", hHandle, at, n, * (unsigned short *) buff);
return (result
);
}
int WIENVME_read16
(int hHandle
, unsigned long n
, unsigned long at
, void* buff
)
{
int result
;
/* D16 read */
result
= VMEread
(hHandle
, at
, 2, n
, buff
);
if (result
) {
printf("D16 read at 0x%X failed!\n", at
);
}
// printf("0x%X, 0x%X, 0x%X, 0x%X\n", hHandle, at, n, * (unsigned short *) buff);
return (result
);
}
int WIENVME_read32
(int hHandle
, unsigned long n
, unsigned long at
, void* buff
)
{
int result
;
/* D32 read */
result
= VMEread
(hHandle
, at
, 4, n
, buff
);
if (result
) {
printf("D32 read at 0x%X failed!\n", at
);
}
//printf("0x%X, 0x%X, 0x%X, 0x%X\n", hHandle, at, n, * (unsigned short *) buff);
return (result
);
}
int WIENVME_write8
(int hHandle
, unsigned long n
, unsigned long at
, void* buff
)
{
int result
;
/* D8 write */
result
= VMEwrite
(hHandle
, at
, 1, n
, buff
);
if (result
) {
printf("D8 write at 0x%X failed!\n", at
);
}
return (result
);
}
int WIENVME_write16
(int hHandle
, unsigned long n
, unsigned long at
, void* buff
)
{
int result
;
/* D16 write */
result
= VMEwrite
(hHandle
, at
, 2, n
, buff
);
if (result
) {
printf("D16 write at 0x%X failed!\n", at
);
}
return (result
);
}
int WIENVME_write32
(int hHandle
, unsigned long n
, unsigned long at
, void* buff
)
{
int result
;
/* D32 write */
result
= VMEwrite
(hHandle
, at
, 4, n
, buff
);
if (result
) {
printf("D32 write at 0x%X failed!\n", at
);
}
//printf("D32 write at 0x%X buff=0x%X\n", at,((int*) buff)[0]);
return (result
);
}
#ifndef VME_D32
#define VME_D8 0x1
#define VME_D16 0x2
#define VME_D32 0x4
#endif
short __stdcall WIENVME_VME_R
( uint16_t AM
, uint16_t DW
, uint32_t VME_Address
, uint32_t *Data
){
int hHandle
=0, nb
=0;
switch (AM
){
case Ext_NoPriv_Data
: hHandle
= hHandle32
; break;
case Std_NoPriv_Data
: hHandle
= hHandle24
; break;
default : return 0;
}
switch (DW
){
case VME_D16
: nb
= WIENVME_read16
(hHandle
, 1, (unsigned long) VME_Address
, (void*) Data
) ; break;
case VME_D32
: nb
= WIENVME_read32
(hHandle
, 1, (unsigned long) VME_Address
, (void*) Data
) ; break;
default: return 0;
}
return nb
;
}
short __stdcall WIENVME_VME_W
( uint16_t AM
, uint16_t DW
, uint32_t VME_Address
, uint32_t Data
){
int hHandle
=0, nb
=0;
switch (AM
){
case Ext_NoPriv_Data
: hHandle
= hHandle32
; break;
case Std_NoPriv_Data
: hHandle
= hHandle24
; break;
default : return 0;
}
switch (DW
){
case VME_D16
: nb
= WIENVME_write16
(hHandle
, 1, (unsigned long) VME_Address
, (void*) &Data
) ; break;
case VME_D32
: nb
= WIENVME_write32
(hHandle
, 1, (unsigned long) VME_Address
, (void*) &Data
) ; break;
default: return 0;
}
return nb
;
}
short __stdcall WIENVME_VME_MW
( uint16_t AM
, uint16_t DW
, uint32_t VME_Address
, uint32_t Data
){
return WIENVME_VME_W
( AM
, DW
, VME_Address
, Data
);
}
short __stdcall WIENVME_VME_MWRST
( void ){
return 0;
}
short __stdcall WIENVME_VME_MWEXEC
( void ){
return 0;
}
short __stdcall WIENVME_VME_MR
( uint16_t AM
, uint16_t DW
, uint32_t VME_Address
, uint32_t *Data
){
return WIENVME_VME_R
( AM
, DW
, VME_Address
, Data
);
}
short __stdcall WIENVME_VME_MRRST
( void ){
return 0;
}
short __stdcall WIENVME_VME_MREXEC
( uint32_t *Data
){
return 0;
}