Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line | 
|---|---|---|---|
| 77 | f9daq | 1 | /* | 
        
| 2 |         ----------------------------------------------------------------------------- | 
        ||
| 3 | |||
| 4 |                 --- CAEN SpA - Computing Systems Division --- | 
        ||
| 5 | |||
| 6 |         ----------------------------------------------------------------------------- | 
        ||
| 7 | |||
| 8 |         CAENVMEtypes.h | 
        ||
| 9 | |||
| 10 |         ----------------------------------------------------------------------------- | 
        ||
| 11 | |||
| 12 |         Author:  Stefano Coluccini (s.coluccini@caen.it) | 
        ||
| 13 | |||
| 14 |         Created: March 2004 | 
        ||
| 15 | |||
| 16 |         ----------------------------------------------------------------------------- | 
        ||
| 17 | */ | 
        ||
| 18 | #ifndef __CAENVMETYPES_H | 
        ||
| 19 | #define __CAENVMETYPES_H | 
        ||
| 20 | |||
| 21 | #ifdef LINUX | 
        ||
| 22 | #define CAEN_BYTE       unsigned char | 
        ||
| 23 | #define CAEN_BOOL       int | 
        ||
| 24 | #else | 
        ||
| 25 | #ifdef _CVI_  | 
        ||
| 26 | #define CAEN_BYTE       unsigned char | 
        ||
| 27 | #define CAEN_BOOL       int | 
        ||
| 28 | #else | 
        ||
| 29 | |||
| 30 | #define CAEN_BYTE       byte | 
        ||
| 31 | #define CAEN_BOOL       VARIANT_BOOL | 
        ||
| 32 | |||
| 33 | #endif | 
        ||
| 34 | #endif | 
        ||
| 35 | |||
| 36 | |||
| 37 | /* | 
        ||
| 38 |         CAEN VME bridges. | 
        ||
| 39 | */ | 
        ||
| 40 | typedef enum CVBoardTypes {  | 
        ||
| 41 | cvV1718 = 0, /* CAEN V1718 USB-VME bridge */  | 
        ||
| 42 | cvV2718 = 1, /* V2718 PCI-VME bridge with optical link */  | 
        ||
| 43 | cvA2818 = 2, /* PCI board with optical link */  | 
        ||
| 44 | cvA2719 = 3, /* Optical link piggy-back */  | 
        ||
| 45 | cvA3818 = 4 /* PCIe board with up to 4 optical links */  | 
        ||
| 46 | } CVBoardTypes;  | 
        ||
| 47 | |||
| 48 | /* | 
        ||
| 49 |         VME cycles data width. | 
        ||
| 50 |         Ver. 2.2 - Added byte-swapping data widths | 
        ||
| 51 | */ | 
        ||
| 52 | typedef enum CVDataWidth {  | 
        ||
| 53 | cvD8 = 0x01, /* 8 bit */  | 
        ||
| 54 | cvD16 = 0x02, /* 16 bit */  | 
        ||
| 55 | cvD32 = 0x04, /* 32 bit */  | 
        ||
| 56 | cvD64 = 0x08, /* 64 bit */  | 
        ||
| 57 | cvD16_swapped = 0x12, /* 16 bit swapped */  | 
        ||
| 58 | cvD32_swapped = 0x14, /* 32 bit swapped */  | 
        ||
| 59 | cvD64_swapped = 0x18 /* 64 bit swapped */  | 
        ||
| 60 | } CVDataWidth;  | 
        ||
| 61 | |||
| 62 | /* | 
        ||
| 63 |         VME cycles address modifiers | 
        ||
| 64 | */ | 
        ||
| 65 | typedef enum CVAddressModifier {  | 
        ||
| 66 | cvA16_S = 0x2D, /* A16 supervisory access */  | 
        ||
| 67 | cvA16_U = 0x29, /* A16 non-privileged */  | 
        ||
| 68 | cvA16_LCK = 0x2C, /* A16 lock command */  | 
        ||
| 69 | |||
| 70 | cvA24_S_BLT = 0x3F, /* A24 supervisory block transfer */  | 
        ||
| 71 | cvA24_S_PGM = 0x3E, /* A24 supervisory program access */  | 
        ||
| 72 | cvA24_S_DATA = 0x3D, /* A24 supervisory data access */  | 
        ||
| 73 | cvA24_S_MBLT = 0x3C, /* A24 supervisory 64-bit block trnsfer */  | 
        ||
| 74 | cvA24_U_BLT = 0x3B, /* A24 non-privileged block transfer */  | 
        ||
| 75 | cvA24_U_PGM = 0x3A, /* A24 non-privileged program access */  | 
        ||
| 76 | cvA24_U_DATA = 0x39, /* A24 non-privileged data access */  | 
        ||
| 77 | cvA24_U_MBLT = 0x38, /* A24 non-privileged 64-bit block trnsfer */  | 
        ||
| 78 | cvA24_LCK = 0x32, /* A24 lock command */  | 
        ||
| 79 | |||
| 80 | cvA32_S_BLT = 0x0F, /* A32 supervisory block transfer */  | 
        ||
| 81 | cvA32_S_PGM = 0x0E, /* A32 supervisory program access */  | 
        ||
| 82 | cvA32_S_DATA = 0x0D, /* A32 supervisory data access */  | 
        ||
| 83 | cvA32_S_MBLT = 0x0C, /* A32 supervisory 64-bit block trnsfer */  | 
        ||
| 84 | cvA32_U_BLT = 0x0B, /* A32 non-privileged block transfer */  | 
        ||
| 85 | cvA32_U_PGM = 0x0A, /* A32 non-privileged program access */  | 
        ||
| 86 | cvA32_U_DATA = 0x09, /* A32 non-privileged data access */  | 
        ||
| 87 | cvA32_U_MBLT = 0x08, /* A32 non-privileged 64-bit block trnsfer */  | 
        ||
| 88 | cvA32_LCK = 0x05, /* A32 lock command */  | 
        ||
| 89 | |||
| 90 | cvCR_CSR = 0x2F, /* CR/CSR space */  | 
        ||
| 91 | |||
| 92 | /* | 
        ||
| 93 |         The following address modifiers are not yet implemented. | 
        ||
| 94 | */ | 
        ||
| 95 | |||
| 96 | cvA40_BLT = 0x37, /* A40 block transfer (MD32) */  | 
        ||
| 97 | cvA40_LCK = 0x35, /* A40 lock command */  | 
        ||
| 98 | cvA40 = 0x34, /* A40 access */  | 
        ||
| 99 | |||
| 100 | cvA64 = 0x01, /* A64 single trnsfer access */  | 
        ||
| 101 | cvA64_BLT = 0x03, /* A64 block transfer */  | 
        ||
| 102 | cvA64_MBLT = 0x00, /* A64 64-bit block transfer */  | 
        ||
| 103 | cvA64_LCK = 0x04, /* A64 lock command */  | 
        ||
| 104 | |||
| 105 | cvA3U_2eVME = 0x21, /* 2eVME for 3U modules */  | 
        ||
| 106 | cvA6U_2eVME = 0x20 /* 2eVME for 6U modules */  | 
        ||
| 107 | } CVAddressModifier;  | 
        ||
| 108 | |||
| 109 | /* | 
        ||
| 110 |         Error codes returned by the exported functions. | 
        ||
| 111 | */ | 
        ||
| 112 | typedef enum CVErrorCodes {  | 
        ||
| 113 | cvSuccess = 0, /* Operation completed successfully */  | 
        ||
| 114 | cvBusError = -1, /* VME bus error during the cycle */  | 
        ||
| 115 | cvCommError = -2, /* Communication error */  | 
        ||
| 116 | cvGenericError = -3, /* Unspecified error */  | 
        ||
| 117 | cvInvalidParam = -4, /* Invalid parameter */  | 
        ||
| 118 | cvTimeoutError = -5, /* Timeout error */  | 
        ||
| 119 | } CVErrorCodes;  | 
        ||
| 120 | |||
| 121 | /* | 
        ||
| 122 |         Pulser selection. | 
        ||
| 123 | */ | 
        ||
| 124 | typedef enum CVPulserSelect {  | 
        ||
| 125 | cvPulserA = 0, /* Identifies the pulser 'A' */  | 
        ||
| 126 | cvPulserB = 1 /* Identifies the pulser 'B' */  | 
        ||
| 127 | } CVPulserSelect;  | 
        ||
| 128 | |||
| 129 | /* | 
        ||
| 130 |         Output selection. | 
        ||
| 131 | */ | 
        ||
| 132 | typedef enum CVOutputSelect {  | 
        ||
| 133 | cvOutput0 = 0, /* Identifies the output line 0 */  | 
        ||
| 134 | cvOutput1 = 1, /* Identifies the output line 1 */  | 
        ||
| 135 | cvOutput2 = 2, /* Identifies the output line 2 */  | 
        ||
| 136 | cvOutput3 = 3, /* Identifies the output line 3 */  | 
        ||
| 137 | cvOutput4 = 4 /* Identifies the output line 4 */  | 
        ||
| 138 | } CVOutputSelect;  | 
        ||
| 139 | |||
| 140 | /* | 
        ||
| 141 |         Input selection. | 
        ||
| 142 | */ | 
        ||
| 143 | typedef enum CVInputSelect {  | 
        ||
| 144 | cvInput0 = 0, /* Identifies the input line 0 */  | 
        ||
| 145 | cvInput1 = 1 /* Identifies the input line 1 */  | 
        ||
| 146 | } CVInputSelect;  | 
        ||
| 147 | |||
| 148 | /* | 
        ||
| 149 |         Signal sources. | 
        ||
| 150 | */ | 
        ||
| 151 | typedef enum CVIOSources {  | 
        ||
| 152 | cvManualSW = 0, /* Manual (button) or software controlled */  | 
        ||
| 153 | cvInputSrc0 = 1, /* Input line 0 */  | 
        ||
| 154 | cvInputSrc1 = 2, /* Input line 1 */  | 
        ||
| 155 | cvCoincidence = 3, /* Inputs coincidence */  | 
        ||
| 156 | cvVMESignals = 4, /* Signals from VME bus */  | 
        ||
| 157 | cvMiscSignals = 6 /* Various internal signals */  | 
        ||
| 158 | } CVIOSources;  | 
        ||
| 159 | |||
| 160 | /* | 
        ||
| 161 |         Time base units to specify pulses period and width. | 
        ||
| 162 | */ | 
        ||
| 163 | typedef enum CVTimeUnits {  | 
        ||
| 164 | cvUnit25ns = 0, /* Time unit is 25 nanoseconds */  | 
        ||
| 165 | cvUnit1600ns = 1, /* Time unit is 1.6 microseconds */  | 
        ||
| 166 | cvUnit410us = 2, /* Time unit is 410 microseconds */  | 
        ||
| 167 | cvUnit104ms = 3 /* Time unit is 104 milliseconds */  | 
        ||
| 168 | } CVTimeUnits;  | 
        ||
| 169 | |||
| 170 | /* | 
        ||
| 171 |         Polarity for LED emitting. | 
        ||
| 172 | */ | 
        ||
| 173 | typedef enum CVLEDPolarity {  | 
        ||
| 174 | cvActiveHigh = 0, /* LED emits on signal high level */  | 
        ||
| 175 | cvActiveLow = 1 /* LED emits on signal low level */  | 
        ||
| 176 | } CVLEDPolarity;  | 
        ||
| 177 | |||
| 178 | /* | 
        ||
| 179 |         Input and Output signal polarity. | 
        ||
| 180 | */ | 
        ||
| 181 | typedef enum CVIOPolarity {  | 
        ||
| 182 | cvDirect = 0, /* Normal polarity */  | 
        ||
| 183 | cvInverted = 1 /* Inverted polarity */  | 
        ||
| 184 | } CVIOPolarity;  | 
        ||
| 185 | |||
| 186 | /* | 
        ||
| 187 |         Accessible registers. | 
        ||
| 188 | */ | 
        ||
| 189 | typedef enum CVRegisters {  | 
        ||
| 190 | cvStatusReg = 0x00, /* Status register */  | 
        ||
| 191 | cvVMEControlReg = 0x01, /* VME Control register */  | 
        ||
| 192 | cvFwRelReg = 0x02, /* Firmware Release register */  | 
        ||
| 193 | cvFwDldReg = 0x03, /* Firmware Download register */  | 
        ||
| 194 | cvFlenaReg = 0x04, /* Flash Enable */  | 
        ||
| 195 | cvVMEIRQEnaReg = 0x06, /* VME IRQ Lines Enable */  | 
        ||
| 196 | cvInputReg = 0x08, /* Input register */  | 
        ||
| 197 | cvOutRegSet = 0x0A, /* Output register */  | 
        ||
| 198 | cvInMuxRegSet = 0x0B, /* Input Multiplexer */  | 
        ||
| 199 | cvOutMuxRegSet = 0x0C, /* Output Multiplexer */  | 
        ||
| 200 | cvLedPolRegSet = 0x0D, /* Led Polarity */  | 
        ||
| 201 | cvOutRegClear = 0x10, /* Output register */  | 
        ||
| 202 | cvInMuxRegClear = 0x11, /* Input Multiplexer */  | 
        ||
| 203 | cvOutMuxRegClear = 0x12, /* Output Multiplexer */  | 
        ||
| 204 | cvLedPolRegClear = 0x13, /* Led Polarity */  | 
        ||
| 205 | cvPulserA0 = 0x16, /* Period and width of Pulser A */  | 
        ||
| 206 | cvPulserA1 = 0x17, /* Num pulses and range of Pulser A */  | 
        ||
| 207 | cvPulserB0 = 0x19, /* Period and width of Pulser B */  | 
        ||
| 208 | cvPulserB1 = 0x1A, /* Num pulses and range of Pulser B */  | 
        ||
| 209 | cvScaler0 = 0x1C, /* Limit and Autores of Scaler A */  | 
        ||
| 210 | cvScaler1 = 0x1D, /* Counter value of Scaler A */  | 
        ||
| 211 | cvDispADL = 0x20, /* Display AD[15:0] */  | 
        ||
| 212 | cvDispADH = 0x21, /* Display AD[31:16] */  | 
        ||
| 213 | cvDispDTL = 0x22, /* Display DT[15:0] */  | 
        ||
| 214 | cvDispDTH = 0x23, /* Display DT[31:16] */  | 
        ||
| 215 | cvDispC1 = 0x24, /* Display Control left bar */  | 
        ||
| 216 | cvDispC2 = 0x25, /* Display Control left bar */  | 
        ||
| 217 | cvLMADL = 0x28, /* Loc. Mon. AD[15:0] */  | 
        ||
| 218 | cvLMADH = 0x29, /* Loc. Mon. AD[31:16] */  | 
        ||
| 219 | cvLMC = 0x2C /* Loc. Mon. Controls */  | 
        ||
| 220 | } CVRegisters;  | 
        ||
| 221 | |||
| 222 | /* | 
        ||
| 223 |         Bits for status register decoding. | 
        ||
| 224 | */ | 
        ||
| 225 | typedef enum CVStatusRegisterBits {  | 
        ||
| 226 | cvSYSRES = 0x0001, /* VME is in system reset state */  | 
        ||
| 227 | cvSYSCTRL = 0x0002, /* The bridge is the VME system controller */  | 
        ||
| 228 | cvDTACK = 0x0010, /* Last access has generated a DTACK signal */  | 
        ||
| 229 | cvBERR = 0x0020, /* Last access has generated a bus error */  | 
        ||
| 230 | cvDIP0 = 0x0100, /* Dip Switch position 0 state */  | 
        ||
| 231 | cvDIP1 = 0x0200, /* Dip Switch position 1 state */  | 
        ||
| 232 | cvDIP2 = 0x0400, /* Dip Switch position 2 state */  | 
        ||
| 233 | cvDIP3 = 0x0800, /* Dip Switch position 3 state */  | 
        ||
| 234 | cvDIP4 = 0x1000, /* Dip Switch position 4 state */  | 
        ||
| 235 | cvUSBTYPE = 0x8000 /* USB Speed: 0 = Full; 1 = High */  | 
        ||
| 236 | } CVStatusRegisterBits;  | 
        ||
| 237 | |||
| 238 | /* | 
        ||
| 239 |         Bits for input register decoding. | 
        ||
| 240 | */ | 
        ||
| 241 | typedef enum CVInputRegisterBits {  | 
        ||
| 242 | cvIn0Bit = 0x0001, /* Input line 0 signal level. */  | 
        ||
| 243 | cvIn1Bit = 0x0002, /* Input line 1 signal level. */  | 
        ||
| 244 | cvCoincBit = 0x0004, /* Coincidence of input signal level. */  | 
        ||
| 245 | cvPulsAOutBit = 0x0008, /* Pulser A output signal level. */  | 
        ||
| 246 | cvPulsBOutBit = 0x0010, /* Pulser B output signal level. */  | 
        ||
| 247 | cvScalEndCntBit = 0x0020, /* Scaler end counter signal level. */  | 
        ||
| 248 | cvLocMonBit = 0x0040, /* Location monitor signal level. */  | 
        ||
| 249 | } CVInputRegisterBits;  | 
        ||
| 250 | |||
| 251 | /* | 
        ||
| 252 |         Bits for input register decoding. | 
        ||
| 253 | */ | 
        ||
| 254 | typedef enum CVOutputRegisterBits {  | 
        ||
| 255 | cvPulsAStartBit = 0x0001, /* Pulser A start signal level. */  | 
        ||
| 256 | cvPulsAResetBit = 0x0002, /* Pulser A reset signal level. */  | 
        ||
| 257 | cvPulsBStartBit = 0x0004, /* Pulser B start signal level. */  | 
        ||
| 258 | cvPulsBResetBit = 0x0008, /* Pulser B reset signal level. */  | 
        ||
| 259 | cvScalGateBit = 0x0010, /* Scaler gate signal level. */  | 
        ||
| 260 | cvScalResetBit = 0x0020, /* Scaler reset counter signal level. */  | 
        ||
| 261 | cvOut0Bit = 0x0040, /* Output line 0 signal level. */  | 
        ||
| 262 | cvOut1Bit = 0x0080, /* Output line 1 signal level. */  | 
        ||
| 263 | cvOut2Bit = 0x0100, /* Output line 2 signal level. */  | 
        ||
| 264 | cvOut3Bit = 0x0200, /* Output line 3 signal level. */  | 
        ||
| 265 | cvOut4Bit = 0x0400, /* Output line 4 signal level. */  | 
        ||
| 266 | } CVOutputRegisterBits;  | 
        ||
| 267 | |||
| 268 | /* | 
        ||
| 269 |         Types of VME Arbiter. | 
        ||
| 270 | */ | 
        ||
| 271 | typedef enum CVArbiterTypes {  | 
        ||
| 272 | cvPriorized = 0, /* Priority Arbiter */  | 
        ||
| 273 | cvRoundRobin = 1 /* Round-Robin Arbiter */  | 
        ||
| 274 | } CVArbiterTypes;  | 
        ||
| 275 | |||
| 276 | /* | 
        ||
| 277 |         Types of VME Bus Requester. | 
        ||
| 278 | */ | 
        ||
| 279 | typedef enum CVRequesterTypes {  | 
        ||
| 280 | cvFair = 0, /* Fair bus requester */  | 
        ||
| 281 | cvDemand = 1 /* On demand bus requester */  | 
        ||
| 282 | } CVRequesterTypes;  | 
        ||
| 283 | |||
| 284 | /* | 
        ||
| 285 |         Types of VME Bus release. | 
        ||
| 286 | */ | 
        ||
| 287 | typedef enum CVReleaseTypes {  | 
        ||
| 288 | cvRWD = 0, /* Release When Done */  | 
        ||
| 289 | cvROR = 1 /* Release On Request */  | 
        ||
| 290 | } CVReleaseTypes;  | 
        ||
| 291 | |||
| 292 | /* | 
        ||
| 293 |         VME bus request levels. | 
        ||
| 294 | */ | 
        ||
| 295 | typedef enum CVBusReqLevels {  | 
        ||
| 296 | cvBR0 = 0, /* Bus request level 0 */  | 
        ||
| 297 | cvBR1 = 1, /* Bus request level 1 */  | 
        ||
| 298 | cvBR2 = 2, /* Bus request level 2 */  | 
        ||
| 299 | cvBR3 = 3 /* Bus request level 3 */  | 
        ||
| 300 | } CVBusReqLevels;  | 
        ||
| 301 | |||
| 302 | /* | 
        ||
| 303 |         VME Interrupt levels. | 
        ||
| 304 | */ | 
        ||
| 305 | typedef enum CVIRQLevels {  | 
        ||
| 306 | cvIRQ1 = 0x01, /* Interrupt level 1 */  | 
        ||
| 307 | cvIRQ2 = 0x02, /* Interrupt level 2 */  | 
        ||
| 308 | cvIRQ3 = 0x04, /* Interrupt level 3 */  | 
        ||
| 309 | cvIRQ4 = 0x08, /* Interrupt level 4 */  | 
        ||
| 310 | cvIRQ5 = 0x10, /* Interrupt level 5 */  | 
        ||
| 311 | cvIRQ6 = 0x20, /* Interrupt level 6 */  | 
        ||
| 312 | cvIRQ7 = 0x40 /* Interrupt level 7 */  | 
        ||
| 313 | } CVIRQLevels;  | 
        ||
| 314 | |||
| 315 | /* | 
        ||
| 316 |         VME bus timeouts. | 
        ||
| 317 | */ | 
        ||
| 318 | typedef enum CVVMETimeouts {  | 
        ||
| 319 | cvTimeout50us = 0, /* Timeout is 50 microseconds */  | 
        ||
| 320 | cvTimeout400us = 1 /* Timeout is 400 microseconds */  | 
        ||
| 321 | } CVVMETimeouts;  | 
        ||
| 322 | |||
| 323 | /* | 
        ||
| 324 |         Data type to store the front panel display last access data. | 
        ||
| 325 | */ | 
        ||
| 326 | typedef struct CVDisplay {  | 
        ||
| 327 | long cvAddress; /* VME Address */  | 
        ||
| 328 | long cvData; /* VME Data */  | 
        ||
| 329 | long cvAM; /* Address modifier */  | 
        ||
| 330 | long cvIRQ; /* IRQ levels */  | 
        ||
| 331 | CAEN_BOOL cvDS0; /* Data Strobe 0 signal */  | 
        ||
| 332 | CAEN_BOOL cvDS1; /* Data Strobe 1 signal */  | 
        ||
| 333 | CAEN_BOOL cvAS; /* Address Strobe signal */  | 
        ||
| 334 | CAEN_BOOL cvIACK; /* Interrupt Acknowledge signal */  | 
        ||
| 335 | CAEN_BOOL cvWRITE; /* Write signal */  | 
        ||
| 336 | CAEN_BOOL cvLWORD; /* Long Word signal */  | 
        ||
| 337 | CAEN_BOOL cvDTACK; /* Data Acknowledge signal */  | 
        ||
| 338 | CAEN_BOOL cvBERR; /* Bus Error signal */  | 
        ||
| 339 | CAEN_BOOL cvSYSRES; /* System Reset signal */  | 
        ||
| 340 | CAEN_BOOL cvBR; /* Bus Request signal */  | 
        ||
| 341 | CAEN_BOOL cvBG; /* Bus Grant signal */  | 
        ||
| 342 | } CVDisplay;  | 
        ||
| 343 | |||
| 344 | #endif // __CAENVMETYPES_H |