| 1 | #include <stdio.h>
 | 
|---|
| 2 | #include "rcc_error/rcc_error.h"
 | 
|---|
| 3 | #include "vme_rcc/vme_rcc.h"
 | 
|---|
| 4 | 
 | 
|---|
| 5 | //******************************************************************************
 | 
|---|
| 6 | //Constants
 | 
|---|
| 7 | //******************************************************************************
 | 
|---|
| 8 | 
 | 
|---|
| 9 | #define NMAX_V560_MODULES 10 //maximum 65535, probably more than enough...
 | 
|---|
| 10 | #define V560_CHANNELS 16
 | 
|---|
| 11 | 
 | 
|---|
| 12 | //******************************************************************************
 | 
|---|
| 13 | //Type definitions
 | 
|---|
| 14 | //******************************************************************************
 | 
|---|
| 15 | 
 | 
|---|
| 16 | //This struct maps the memory of a v560 module.
 | 
|---|
| 17 | typedef struct {
 | 
|---|
| 18 | //      Variable name                                                   //Adress offset         //Read-/Write-Mode
 | 
|---|
| 19 |         u_short threshold_ch[V560_CHANNELS];    //0x00-0x1E                     //w
 | 
|---|
| 20 |         u_short dummy1[16];                                             //0x20-0x3E                     //none
 | 
|---|
| 21 |         u_short output_width[2];                                //0x40-0x42                     //w
 | 
|---|
| 22 |         u_short dead_time[2];                                   //0x44-0x46                     //w
 | 
|---|
| 23 |         u_short majority_threshold;                             //0x48                          //w
 | 
|---|
| 24 |         u_short pattern_inhibit;                                //0x4A                          //w
 | 
|---|
| 25 |         u_short test_pulse;                                             //0x4C                          //w
 | 
|---|
| 26 |         u_short dummy2[86];                                             //0x4E-0xF8                     //none
 | 
|---|
| 27 |         u_short fixed_code;                                             //0xFA                          //r
 | 
|---|
| 28 |         u_short manufacturer_type;                              //0xFC                          //r
 | 
|---|
| 29 |         u_short version_serialnumber;                   //0xFE                          //r
 | 
|---|
| 30 | } v560_registers_t;
 | 
|---|
| 31 | 
 | 
|---|
| 32 | //This struct contains the information necessary to handle one module
 | 
|---|
| 33 | typedef struct {
 | 
|---|
| 34 |         v560_registers_t* registers;            //contains the virtual address of the module
 | 
|---|
| 35 |         int master_mapping;                                     //contains the handle of the module
 | 
|---|
| 36 |         char present;                                           //0 if module not present, 1 if present
 | 
|---|
| 37 | } v560_module_t;
 | 
|---|
| 38 | 
 | 
|---|
| 39 | //******************************************************************************
 | 
|---|
| 40 | //Global Variables
 | 
|---|
| 41 | //******************************************************************************
 | 
|---|
| 42 | 
 | 
|---|
| 43 | v560_module_t v560_modules[NMAX_V560_MODULES];
 | 
|---|
| 44 | 
 | 
|---|
| 45 | //******************************************************************************
 | 
|---|
| 46 | //Function Definitions
 | 
|---|
| 47 | //******************************************************************************
 | 
|---|
| 48 | 
 | 
|---|
| 49 | VME_ErrorCode_t V560_Open(void)
 | 
|---|
| 50 | {
 | 
|---|
| 51 |         printf("V560_Open() was called.\n");
 | 
|---|
| 52 |         return VME_SUCCESS;
 | 
|---|
| 53 | }
 | 
|---|
| 54 | 
 | 
|---|
| 55 | //******************************************************************************
 | 
|---|
| 56 | 
 | 
|---|
| 57 | int V560_Set_Threshold(u_short module, u_char channel, u_short threshold)
 | 
|---|
| 58 | {
 | 
|---|
| 59 |         printf("V560_Set_Threshold(module %i, channel %i, threshold %i) was called.\n", module, channel, threshold);
 | 
|---|
| 60 |         return 0;
 | 
|---|
| 61 | }
 | 
|---|
| 62 | 
 | 
|---|
| 63 | //******************************************************************************
 | 
|---|
| 64 | 
 | 
|---|
| 65 | int V560_Set_Pattern_Inhibit(u_short module, u_char channels[16])
 | 
|---|
| 66 | {
 | 
|---|
| 67 |         //create the pattern of inhibit
 | 
|---|
| 68 |         u_short pattern = 0;
 | 
|---|
| 69 |         int i;
 | 
|---|
| 70 |         for(i=0; i<16; i++) {
 | 
|---|
| 71 |                 if(channels[i]!=0) {
 | 
|---|
| 72 |                         switch(i) {
 | 
|---|
| 73 |                                 case 0: pattern |= 0x0001; break;
 | 
|---|
| 74 |                                 case 1: pattern |= 0x0002; break;
 | 
|---|
| 75 |                                 case 2: pattern |= 0x0004; break;
 | 
|---|
| 76 |                                 case 3: pattern |= 0x0008; break;
 | 
|---|
| 77 |                                 case 4: pattern |= 0x0010; break;
 | 
|---|
| 78 |                                 case 5: pattern |= 0x0020; break;
 | 
|---|
| 79 |                                 case 6: pattern |= 0x0040; break;
 | 
|---|
| 80 |                                 case 7: pattern |= 0x0080; break;
 | 
|---|
| 81 |                                 case 8: pattern |= 0x0100; break;
 | 
|---|
| 82 |                                 case 9: pattern |= 0x0200; break;
 | 
|---|
| 83 |                                 case 10: pattern |= 0x0400; break;
 | 
|---|
| 84 |                                 case 11: pattern |= 0x0800; break;
 | 
|---|
| 85 |                                 case 12: pattern |= 0x1000; break;
 | 
|---|
| 86 |                                 case 13: pattern |= 0x2000; break;
 | 
|---|
| 87 |                                 case 14: pattern |= 0x4000; break;
 | 
|---|
| 88 |                                 case 15: pattern |= 0x8000; break;
 | 
|---|
| 89 |                         }
 | 
|---|
| 90 |                 }
 | 
|---|
| 91 |         }
 | 
|---|
| 92 |         printf("v560_pattern_inhibit(module %i, pattern %04x) was called.\n", module, pattern);
 | 
|---|
| 93 |         return 0;
 | 
|---|
| 94 | }
 | 
|---|
| 95 | 
 | 
|---|
| 96 | //******************************************************************************
 | 
|---|
| 97 | 
 | 
|---|
| 98 | int V560_Set_Output_Width(u_short module, u_char channel_block, u_short width)
 | 
|---|
| 99 | {
 | 
|---|
| 100 |         printf("V560_Set_Output_Width(module %i, channel block %i, width %i) was called.\n", module, channel_block, width);
 | 
|---|
| 101 |         return 0;
 | 
|---|
| 102 | }
 | 
|---|
| 103 | 
 | 
|---|
| 104 | //******************************************************************************
 | 
|---|
| 105 | 
 | 
|---|
| 106 | int V560_Set_Dead_Time(u_short module, u_char channel_block, u_short dead_time)
 | 
|---|
| 107 | {
 | 
|---|
| 108 |         printf("V560_Set_Dead_Time(module %i, channel block %i, dead time %i) was called.\n", module, channel_block, dead_time);
 | 
|---|
| 109 |         return 0;
 | 
|---|
| 110 | }
 | 
|---|
| 111 | 
 | 
|---|
| 112 | //******************************************************************************
 | 
|---|
| 113 | 
 | 
|---|
| 114 | int V560_Set_Majority_Level(u_short module, u_short majority_level)
 | 
|---|
| 115 | {
 | 
|---|
| 116 |         printf("V560_Set_Majority_Level(module %i, majority_level %i) was called.\n", module, majority_level);
 | 
|---|
| 117 |         return 0;
 | 
|---|
| 118 | }
 | 
|---|
| 119 | 
 | 
|---|
| 120 | //******************************************************************************
 | 
|---|
| 121 | 
 | 
|---|
| 122 | int V560_Test_Pulse(u_short module)
 | 
|---|
| 123 | {
 | 
|---|
| 124 |         printf("V560_Test_Pulse(module %i) was called.\n", module);
 | 
|---|
| 125 |         return 0;
 | 
|---|
| 126 | }
 | 
|---|
| 127 | 
 | 
|---|
| 128 | //******************************************************************************
 | 
|---|
| 129 | 
 | 
|---|
| 130 | int V560_Print_Info(void)
 | 
|---|
| 131 | {
 | 
|---|
| 132 |         printf("V560_Print_Info() was called.\n");
 | 
|---|
| 133 |         return 0;
 | 
|---|
| 134 | }
 | 
|---|
| 135 | 
 | 
|---|
| 136 | //******************************************************************************
 | 
|---|
| 137 | 
 | 
|---|
| 138 | VME_ErrorCode_t V560_Close(void)
 | 
|---|
| 139 | {
 | 
|---|
| 140 |         printf("V560_Close() was called.\n");
 | 
|---|
| 141 |         return VME_SUCCESS;
 | 
|---|
| 142 | }
 | 
|---|
| 143 | 
 | 
|---|
| 144 | //******************************************************************************
 | 
|---|