| 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 | //****************************************************************************** | 
|---|