/* ----------------------------------------------------------------------------- --- CAEN SpA - Computing Systems Division --- ----------------------------------------------------------------------------- CAENVMEtypes.h ----------------------------------------------------------------------------- Created: March 2004 ----------------------------------------------------------------------------- */ #ifdef LINUX #define CAEN_BYTE unsigned char #define CAEN_BOOL int #else /////*****#define CAEN_BYTE byte /////*****#define CAEN_BOOL VARIANT_BOOL #define CAEN_BYTE unsigned char #define CAEN_BOOL int #endif /* CAEN VME bridges. */ typedef enum CVBoardTypes { cvV1718 = 0, /* CAEN V1718 USB-VME bridge */ cvV2718 = 1 /* V2718 PCI-VME bridge with optical link */ } CVBoardTypes; /* VME cycles data width. */ typedef enum CVDataWidth { cvD8 = 1, /* 8 bit */ cvD16 = 2, /* 16 bit */ cvD32 = 4, /* 32 bit */ cvD64 = 8 /* 64 bit */ } CVDataWidth; /* VME cycles address modifiers */ typedef enum CVAddressModifier { cvA16_S = 0x2D, /* A16 supervisory access */ cvA16_U = 0x29, /* A16 non-privileged */ cvA16_LCK = 0x2C, /* A16 lock command */ cvA24_S_BLT = 0x3F, /* A24 supervisory block transfer */ cvA24_S_PGM = 0x3E, /* A24 supervisory program access */ cvA24_S_DATA = 0x3D, /* A24 supervisory data access */ cvA24_S_MBLT = 0x3C, /* A24 supervisory 64-bit block trnsfer */ cvA24_U_BLT = 0x3B, /* A24 non-privileged block transfer */ cvA24_U_PGM = 0x3A, /* A24 non-privileged program access */ cvA24_U_DATA = 0x39, /* A24 non-privileged data access */ cvA24_U_MBLT = 0x38, /* A24 non-privileged 64-bit block trnsfer */ cvA24_LCK = 0x32, /* A24 lock command */ cvA32_S_BLT = 0x0F, /* A32 supervisory block transfer */ cvA32_S_PGM = 0x0E, /* A32 supervisory program access */ cvA32_S_DATA = 0x0D, /* A32 supervisory data access */ cvA32_S_MBLT = 0x0C, /* A32 supervisory 64-bit block trnsfer */ cvA32_U_BLT = 0x0B, /* A32 non-privileged block transfer */ cvA32_U_PGM = 0x0A, /* A32 non-privileged program access */ cvA32_U_DATA = 0x09, /* A32 non-privileged data access */ cvA32_U_MBLT = 0x08, /* A32 non-privileged 64-bit block trnsfer */ cvA32_LCK = 0x05, /* A32 lock command */ cvCR_CSR = 0x2F, /* CR/CSR space */ /* The following address modifiers are not yet implemented. */ cvA40_BLT = 0x37, /* A40 block transfer (MD32) */ cvA40_LCK = 0x35, /* A40 lock command */ cvA40 = 0x34, /* A40 access */ cvA64 = 0x01, /* A64 single trnsfer access */ cvA64_BLT = 0x03, /* A64 block transfer */ cvA64_MBLT = 0x00, /* A64 64-bit block transfer */ cvA64_LCK = 0x04, /* A64 lock command */ cvA3U_2eVME = 0x21, /* 2eVME for 3U modules */ cvA6U_2eVME = 0x20 /* 2eVME for 6U modules */ } CVAddressModifier; /* Error codes returned by the exported functions. */ typedef enum CVErrorCodes { cvSuccess = 0, /* Operation completed successfully */ cvBusError = -1, /* VME bus error during the cycle */ cvCommError = -2, /* Communication error */ cvGenericError = -3, /* Unspecified error */ cvInvalidParam = -4 /* Invalid parameter */ } CVErrorCodes; /* Pulser selection. */ typedef enum CVPulserSelect { cvPulserA = 0, /* Identifies the pulser 'A' */ cvPulserB = 1 /* Identifies the pulser 'B' */ } CVPulserSelect; /* Output selection. */ typedef enum CVOutputSelect { cvOutput0 = 0, /* Identifies the output line 0 */ cvOutput1 = 1, /* Identifies the output line 1 */ cvOutput2 = 2, /* Identifies the output line 2 */ cvOutput3 = 3, /* Identifies the output line 3 */ cvOutput4 = 4 /* Identifies the output line 4 */ } CVOutputSelect; /* Input selection. */ typedef enum CVInputSelect { cvInput0 = 0, /* Identifies the input line 0 */ cvInput1 = 1 /* Identifies the input line 1 */ } CVInputSelect; /* Signal sources. . */ typedef enum CVIOSources { cvManualSW = 0, /* Manual (button) or software controlled */ cvInputSrc0 = 1, /* Input line 0 */ cvInputSrc1 = 2, /* Input line 1 */ cvCoincidence = 3, /* Inputs coincidence */ cvVMESignals = 4, /* Signals from VME bus */ cvMiscSignals = 6 /* Various internal signals */ } CVIOSources; /* Time base units to specify pulses period and width. */ typedef enum CVTimeUnits { cvUnit25ns = 0, /* Time unit is 25 nanoseconds */ cvUnit1600ns = 1, /* Time unit is 1.6 microseconds */ cvUnit410us = 2, /* Time unit is 410 microseconds */ cvUnit104ms = 3 /* Time unit is 104 milliseconds */ } CVTimeUnits; /* Polarity for LED emitting. */ typedef enum CVLEDPolarity { cvActiveHigh = 0, /* LED emits on signal high level */ cvActiveLow = 1 /* LED emits on signal low level */ } CVLEDPolarity; /* Input and Output signal polarity. */ typedef enum CVIOPolarity { cvDirect = 0, /* Normal polarity */ cvInverted = 1 /* Inverted polarity */ } CVIOPolarity; /* Accessible registers. */ typedef enum CVRegisters { cvStatusReg = 0x0, /* Status register */ cvVMEControlReg = 0x1, /* VME Control register */ cvFwRelReg = 0x2, /* Firmware Release register */ cvFwDldReg = 0x3, /* Firmware Download register */ cvFlenaReg = 0x4, /* Flash Enable */ cvInputReg = 0x8, /* Input register */ cvOutRegSet = 0xA, /* Output register */ cvInMuxRegSet = 0xB, /* Input Multiplexer */ cvOutMuxRegSet = 0xC, /* Output Multiplexer */ cvLedPolRegSet = 0xD, /* Led Polarity */ cvOutRegClear = 0x10, /* Output register */ cvInMuxRegClear = 0x11, /* Input Multiplexer */ cvOutMuxRegClear = 0x12, /* Output Multiplexer */ cvLedPolRegClear = 0x13, /* Led Polarity */ cvPulserA0 = 0x16, /* Period and width of Pulser A */ cvPulserA1 = 0x17, /* Num pulses and range of Pulser A */ cvPulserB0 = 0x19, /* Period and width of Pulser B */ cvPulserB1 = 0x1A, /* Num pulses and range of Pulser B */ cvScaler0 = 0x1C, /* Limit and Autores of Scaler A */ cvScaler1 = 0x1D, /* Counter value of Scaler A */ cvDispADL = 0x20, /* Display AD[15:0] */ cvDispADH = 0x21, /* Display AD[31:16] */ cvDispDTL = 0x22, /* Display DT[15:0] */ cvDispDTH = 0x23, /* Display DT[31:16] */ cvDispC1 = 0x24, /* Display Control left bar */ cvDispC2 = 0x25, /* Display Control left bar */ cvLMADL = 0x28, /* Loc. Mon. AD[15:0] */ cvLMADH = 0x29, /* Loc. Mon. AD[31:16] */ cvLMC = 0x2C /* Loc. Mon. Controls */ } CVRegisters; /* Bits for status register decoding. */ typedef enum CVStatusRegisterBits { cvSYSRES = 0x0001, /* VME is in system reset state */ cvSYSCTRL = 0x0002, /* The bridge is the VME system controller */ cvDTACK = 0x0010, /* Last access has generated a DTACK signal */ cvBERR = 0x0020, /* Last access has generated a bus error */ cvDIP0 = 0x0100, /* Dip Switch position 0 state */ cvDIP1 = 0x0200, /* Dip Switch position 1 state */ cvDIP2 = 0x0400, /* Dip Switch position 2 state */ cvDIP3 = 0x0800, /* Dip Switch position 3 state */ cvDIP4 = 0x1000, /* Dip Switch position 4 state */ cvUSBTYPE = 0x8000 /* USB Speed: 0 = Full; 1 = High */ } CVStatusRegisterBits; /* Bits for input register decoding. */ typedef enum CVInputRegisterBits { cvIn0Bit = 0x0001, /* Input line 0 signal level. */ cvIn1Bit = 0x0002, /* Input line 1 signal level. */ cvCoincBit = 0x0004, /* Coincidence of input signal level. */ cvPulsAOutBit = 0x0008, /* Pulser A output signal level. */ cvPulsBOutBit = 0x0010, /* Pulser B output signal level. */ cvScalEndCntBit = 0x0020, /* Scaler end counter signal level. */ cvLocMonBit = 0x0040, /* Location monitor signal level. */ } CVInputRegisterBits; /* Bits for input register decoding. */ typedef enum CVOutputRegisterBits { cvPulsAStartBit = 0x0001, /* Pulser A start signal level. */ cvPulsAResetBit = 0x0002, /* Pulser A reset signal level. */ cvPulsBStartBit = 0x0004, /* Pulser B start signal level. */ cvPulsBResetBit = 0x0008, /* Pulser B reset signal level. */ cvScalGateBit = 0x0010, /* Scaler gate signal level. */ cvScalResetBit = 0x0020, /* Scaler reset counter signal level. */ cvOut0Bit = 0x0040, /* Output line 0 signal level. */ cvOut1Bit = 0x0080, /* Output line 1 signal level. */ cvOut2Bit = 0x0100, /* Output line 2 signal level. */ cvOut3Bit = 0x0200, /* Output line 3 signal level. */ cvOut4Bit = 0x0400, /* Output line 4 signal level. */ } CVOutputRegisterBits; /* Types of VME Arbiter. */ typedef enum CVArbiterTypes { cvPriorized = 0, /* Priority Arbiter */ cvRoundRobin = 1 /* Round-Robin Arbiter */ } CVArbiterTypes; /* Types of VME Bus Requester. */ typedef enum CVRequesterTypes { cvFair = 0, /* Fair bus requester */ cvDemand = 1 /* On demand bus requester */ } CVRequesterTypes; /* Types of VME Bus release. */ typedef enum CVReleaseTypes { cvRWD = 0, /* Release When Done */ cvROR = 1 /* Release On Request */ } CVReleaseTypes; /* VME bus request levels. */ typedef enum CVBusReqLevels { cvBR0 = 0, /* Bus request level 0 */ cvBR1 = 1, /* Bus request level 1 */ cvBR2 = 2, /* Bus request level 2 */ cvBR3 = 3 /* Bus request level 3 */ } CVBusReqLevels; /* VME Interrupt levels. */ typedef enum CVIRQLevels { cvIRQ1 = 0x01, /* Interrupt level 1 */ cvIRQ2 = 0x02, /* Interrupt level 2 */ cvIRQ3 = 0x04, /* Interrupt level 3 */ cvIRQ4 = 0x08, /* Interrupt level 4 */ cvIRQ5 = 0x10, /* Interrupt level 5 */ cvIRQ6 = 0x20, /* Interrupt level 6 */ cvIRQ7 = 0x40 /* Interrupt level 7 */ } CVIRQLevels; /* VME bus timeouts. */ typedef enum CVVMETimeouts { cvTimeout50us = 0, /* Timeout is 50 microseconds */ cvTimeout400us = 1 /* Timeout is 400 microseconds */ } CVVMETimeouts; /* Data type to store the front panel display last access data. */ typedef struct CVDisplay { long cvAddress; /* VME Address */ long cvData; /* VME Data */ CAEN_BYTE cvAM; /* Address modifier */ CAEN_BYTE cvIRQ; /* IRQ levels */ CAEN_BOOL cvDS0; /* Data Strobe 0 signal */ CAEN_BOOL cvDS1; /* Data Strobe 1 signal */ CAEN_BOOL cvAS; /* Address Strobe signal */ CAEN_BOOL cvIACK; /* Interrupt Acknowledge signal */ CAEN_BOOL cvWRITE; /* Write signal */ CAEN_BOOL cvLWORD; /* Long Word signal */ CAEN_BOOL cvDTACK; /* Data Acknowledge signal */ CAEN_BOOL cvBERR; /* Bus Error signal */ CAEN_BOOL cvSYSRES; /* System Reset signal */ CAEN_BOOL cvBR; /* Bus Request signal */ CAEN_BOOL cvBG; /* Bus Grant signal */ } CVDisplay;