Subversion Repositories f9daq

Rev

Blame | Last modification | View Log | RSS feed

  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
  345.