#include <stdlib.h>
#include <stdio.h>
#include "CAENV262.h"
#include "CAENV262_DEF.h"
#include "vme.h"
static unsigned int ModuleAddress[10];
static unsigned short m_OutputMaskEcl;
static unsigned short m_OutputMaskLevel;
static unsigned short m_InputMaskLevel;
int _VI_FUNC V262_Map (int ModuleNumber,
unsigned long ModuleOffset, int dprint)
{
unsigned short vsr, mmt, fix;
printf("CAEN V262 offset = 0x%08x print=%d\n", ModuleOffset
, dprint
);
ModuleAddress[ModuleNumber] = ModuleOffset;
VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV262_FIX, &fix);
VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV262_MMT, &mmt);
VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV262_VSR, &vsr);
//if (dprint !=0) {
printf("CAEN V262 offset = 0x%08x\n", ModuleOffset
);
printf("CAEN V262 fixed code = 0x%04x\n", fix
);
printf("CAEN V262 manufacturer number = %i\n", MANUFACTURER
(mmt
));
printf("CAEN V262 module type = %i\n", MODULE_TYPE
(mmt
));
printf("CAEN V262 version = %i\n", VERSION
(vsr
));
printf("CAEN V262 serial no. = %i\n", SERIAL
(vsr
));
//}
if ((fix != CAEN_FIX_CODE) || (mmt != CAENV262_MMT_VALUE)) return -1;
return 0;
}
int _VI_FUNC V262_Init (int ModuleNumber)
{
m_OutputMaskEcl=0;
m_OutputMaskLevel=0;
V262_MaskOut(ModuleNumber,CAENV262_NIMOUT,m_OutputMaskLevel);
V262_MaskOut(ModuleNumber,CAENV262_ECLOUT,m_OutputMaskEcl);
m_InputMaskLevel = V262_MaskIn(ModuleNumber);
printf("V262_init : value of NIM inputs=%02x\n",m_InputMaskLevel
);
return 0;
}
int _VI_FUNC V262_MaskOut(int ModuleNumber, unsigned long shft, unsigned short mask)
{
VME_A24D16_W(ModuleAddress[ModuleNumber] + shft,mask);
return 0;
}
unsigned short _VI_FUNC V262_MaskIn(int ModuleNumber)
{
unsigned long mask=0;
VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV262_NIMIN,&mask);
//printf("V262_MaskIn %04x\n", mask);
return mask;
}
int _VI_FUNC V262_LevelInput(int ModuleNumber, int input)
{
if((input < 0) || (input > 3)) return 0;
return (V262_MaskIn(ModuleNumber) & (1<<input));
}
int _VI_FUNC V262_PulseOutput(int ModuleNumber, int output)
{
if((output < 0) || (output > 3)) return -1;
return V262_MaskOut(ModuleNumber,CAENV262_SHPOUT, 1 << output);
}
int _VI_FUNC V262_LevelOutput(int ModuleNumber, int output, int level)
{
if((output < 0) || (output > 3)) return -1;
if (level) m_OutputMaskLevel |= (1 << output);
else m_OutputMaskLevel &= ~(1 << output);
return V262_MaskOut(ModuleNumber,CAENV262_NIMOUT, m_OutputMaskLevel );
}
int _VI_FUNC V262_EclOutput(int ModuleNumber, int output, int level)
{
if((output < 0) || (output > 16)) return -1;
if (level) m_OutputMaskEcl |= (1 << output);
else m_OutputMaskEcl &= ~(1 << output);
return V262_MaskOut(ModuleNumber,CAENV262_ECLOUT, m_OutputMaskEcl );
}