This section contains information specific to the Windows product.
#include <stdio.h> // for printf()
#include <stdlib.h> // for exit()
#include "visa.h"
#define EXIT 1
#define NO_EXIT 0
//
// This function simplifies checking for VISA errors.
//
void checkError( ViSession vi, ViStatus status, char *errStr, int doexit ) {
char buf[256];
if (status >= VI_SUCCESS)
return;
buf[0] = 0;
viStatusDesc( vi, status, buf );
printf( "ERROR 0x%lx (%s)\n '%s'\n", status, errStr, buf );
if ( doexit == EXIT )
exit( 1 );
}
void main() {
ViSession drm;
ViSession vi;
ViUInt16 inData16 = 0;
ViUInt16 peekData16= 0;
ViUInt8 *addr;
ViUInt16 *addr16;
ViStatus status;
ViUInt16 offset;
status = viOpenDefaultRM( &drm );
checkError( 0, status, "viOpenDefaultRM", EXIT );
//
// Open a session to the vxi memacc resource
//
status = viOpen( drm, "vxi0::memacc", VI_NULL, VI_NULL, &vi );
checkError( drm, status, "viOpen", EXIT );
//
// Calculate the A16 offset of the VXI registers for the device
// at VXI logical address 8
//
offset = 0xc000 + 64 * 8;
//
// Open a map to all of A16 space
//
status = viMapAddress( vi, VI_A16_SPACE, 0, 0x10000, VI_FALSE, 0, (ViPAddr)(&addr) );
checkError( vi, status, "viMapAddress", EXIT );
//
// Offset the address pointer returned from viMapAddress for use with viPeek16
//
addr16 = (ViUInt16 *)(addr + offset );
//
// Peek the contents of the card's ID register (Offset 0 from card's base address)
// Note that viPeek does not return a status code.
//
viPeek16( vi, addr16, &peekData16 );
//
// Now use viIn16 and read the contents of the same register
//
status = viIn16( vi, VI_A16_SPACE, (ViBusAddress)offset, &inData16 );
checkError( vi, status, "viIn16", NO_EXIT );
//
// Print the results
//
printf( "inData16 : 0x%04hx\n", inData16 );
printf( "peekData16: 0x%04hx\n", peekData16 );
viClose( vi );
viClose( drm );
}