mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-23 10:07:59 +02:00
jungfrau: gainmode
This commit is contained in:
@ -308,11 +308,9 @@
|
||||
/** DAQ Register */
|
||||
#define DAQ_REG (0x5D << MEM_MAP_SHIFT)
|
||||
|
||||
#define DAQ_SETTINGS_MSK (DAQ_HIGH_GAIN_MSK | DAQ_FIX_GAIN_MSK | DAQ_FRCE_SWTCH_GAIN_MSK)
|
||||
// dynamic gain (default)
|
||||
#define DAQ_HIGH_GAIN_OFST (0)
|
||||
#define DAQ_HIGH_GAIN_MSK (0x00000001 << DAQ_HIGH_GAIN_OFST)
|
||||
#define DAQ_FIX_GAIN_DYNMC_VAL ((0x0 << DAQ_HIGH_GAIN_OFST) & DAQ_HIGH_GAIN_MSK)
|
||||
#define DAQ_FIX_GAIN_HIGHGAIN_VAL ((0x1 << DAQ_HIGH_GAIN_OFST) & DAQ_HIGH_GAIN_MSK)
|
||||
#define DAQ_FIX_GAIN_OFST (1)
|
||||
#define DAQ_FIX_GAIN_MSK (0x00000003 << DAQ_FIX_GAIN_OFST)
|
||||
#define DAQ_FIX_GAIN_STG_1_VAL ((0x1 << DAQ_FIX_GAIN_OFST) & DAQ_FIX_GAIN_MSK)
|
||||
@ -323,6 +321,7 @@
|
||||
#define DAQ_STRG_CELL_SLCT_MSK (0x0000000F << DAQ_STRG_CELL_SLCT_OFST)
|
||||
#define DAQ_FRCE_SWTCH_GAIN_OFST (12)
|
||||
#define DAQ_FRCE_SWTCH_GAIN_MSK (0x00000003 << DAQ_FRCE_SWTCH_GAIN_OFST)
|
||||
#define DAQ_FRCE_GAIN_STG_0_VAL ((0x0 << DAQ_FRCE_SWTCH_GAIN_OFST) & DAQ_FRCE_SWTCH_GAIN_MSK)
|
||||
#define DAQ_FRCE_GAIN_STG_1_VAL ((0x1 << DAQ_FRCE_SWTCH_GAIN_OFST) & DAQ_FRCE_SWTCH_GAIN_MSK)
|
||||
#define DAQ_FRCE_GAIN_STG_2_VAL ((0x3 << DAQ_FRCE_SWTCH_GAIN_OFST) & DAQ_FRCE_SWTCH_GAIN_MSK)
|
||||
#define DAQ_ELCTRN_CLLCTN_MDE_OFST (14)
|
||||
|
@ -1036,21 +1036,19 @@ enum detectorSettings setSettings(enum detectorSettings sett) {
|
||||
// set settings
|
||||
switch (sett) {
|
||||
case DYNAMICGAIN:
|
||||
bus_w(DAQ_REG, bus_r(DAQ_REG) & ~DAQ_SETTINGS_MSK);
|
||||
bus_w(DAQ_REG, bus_r(DAQ_REG) & ~DAQ_HIGH_GAIN_MSK);
|
||||
LOG(logINFO,
|
||||
("Set settings - Dyanmic Gain, DAQ Reg: 0x%x\n", bus_r(DAQ_REG)));
|
||||
("Set settings - Dyanmic Gain [DAQ Reg:0x%x]\n", bus_r(DAQ_REG)));
|
||||
dacVals = defaultDacValue_G0;
|
||||
break;
|
||||
case DYNAMICHG0:
|
||||
bus_w(DAQ_REG, bus_r(DAQ_REG) & ~DAQ_SETTINGS_MSK);
|
||||
bus_w(DAQ_REG, bus_r(DAQ_REG) | DAQ_FIX_GAIN_HIGHGAIN_VAL);
|
||||
LOG(logINFO, ("Set settings - Dyanmic High Gain 0, DAQ Reg: 0x%x\n",
|
||||
bus_w(DAQ_REG, bus_r(DAQ_REG) | DAQ_HIGH_GAIN_MSK);
|
||||
LOG(logINFO, ("Set settings - Dyanmic High Gain 0 [DAQ Reg:0x%x]\n",
|
||||
bus_r(DAQ_REG)));
|
||||
dacVals = defaultDacValue_HG0;
|
||||
break;
|
||||
default:
|
||||
LOG(logERROR,
|
||||
("This settings is not defined for this detector %d\n", (int)sett));
|
||||
LOG(logERROR, ("This settings %d is not defined\n", (int)sett));
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -1107,6 +1105,53 @@ void validateSettings() {
|
||||
|
||||
enum detectorSettings getSettings() { return thisSettings; }
|
||||
|
||||
enum gainMode getGainMode() {
|
||||
uint32_t retval = bus_r(DAQ_REG) & DAQ_FRCE_SWTCH_GAIN_MSK;
|
||||
|
||||
switch (retval) {
|
||||
case DAQ_FRCE_GAIN_STG_0_VAL:
|
||||
return NORMAL_GAIN_MODE;
|
||||
case DAQ_FRCE_GAIN_STG_1_VAL:
|
||||
return FORCE_SWITCH_G1;
|
||||
case DAQ_FRCE_GAIN_STG_2_VAL:
|
||||
return FORCE_SWITCH_G2;
|
||||
default:
|
||||
LOG(logERROR, ("This gain mode %d is not defined [DAQ reg: %d]\n",
|
||||
(retval << DAQ_FRCE_SWTCH_GAIN_OFST), retval));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
void setGainMode(enum gainMode mode) {
|
||||
uint32_t addr = DAQ_REG;
|
||||
uint32_t value = bus_r(addr);
|
||||
|
||||
switch (mode) {
|
||||
case NORMAL_GAIN_MODE:
|
||||
value &= ~(DAQ_FRCE_SWTCH_GAIN_MSK);
|
||||
bus_w(addr, value);
|
||||
LOG(logINFO, ("Set gain mode - Normal Gain Mode [DAQ Reg:0x%x]\n",
|
||||
bus_r(DAQ_REG)));
|
||||
break;
|
||||
case FORCE_SWITCH_G1:
|
||||
value &= ~(DAQ_FRCE_SWTCH_GAIN_MSK);
|
||||
value |= DAQ_FRCE_GAIN_STG_1_VAL;
|
||||
bus_w(addr, value);
|
||||
LOG(logINFO, ("Set gain mode - Force Switch G1 [DAQ Reg:0x%x]\n",
|
||||
bus_r(DAQ_REG)));
|
||||
break;
|
||||
case FORCE_SWITCH_G2:
|
||||
value &= ~(DAQ_FRCE_SWTCH_GAIN_MSK);
|
||||
value |= DAQ_FRCE_GAIN_STG_2_VAL;
|
||||
bus_w(addr, value);
|
||||
LOG(logINFO, ("Set gain mode - Force Switch G2 [DAQ Reg:0x%x]\n",
|
||||
bus_r(DAQ_REG)));
|
||||
break;
|
||||
default:
|
||||
LOG(logERROR, ("This gain mode %d is not defined\n", (int)mode));
|
||||
}
|
||||
}
|
||||
|
||||
/* parameters - dac, adc, hv */
|
||||
void setDAC(enum DACINDEX ind, int val, int mV) {
|
||||
if (val < 0)
|
||||
|
@ -65,7 +65,7 @@ enum DACINDEX {
|
||||
|
||||
#define NUMSETTINGS (2)
|
||||
#define NSPECIALDACS (3)
|
||||
#define SPECIALDACINDEX {J_VB_COMP, J_VREF_DS, J_VREF_COMP};
|
||||
#define SPECIALDACINDEX {J_VREF_PRECH, J_VREF_DS, J_VREF_COMP};
|
||||
#define SPECIAL_DEFAULT_DYNAMIC_GAIN_VALS \
|
||||
{ 1000, 500, 400 }
|
||||
#define SPECIAL_DEFAULT_DYNAMICHG0_GAIN_VALS \
|
||||
|
@ -301,6 +301,10 @@ enum detectorSettings setSettings(enum detectorSettings sett);
|
||||
void validateSettings();
|
||||
#endif
|
||||
enum detectorSettings getSettings();
|
||||
#ifdef JUNGFRAUD
|
||||
enum gainMode getGainMode();
|
||||
void setGainMode(enum gainMode mode);
|
||||
#endif
|
||||
|
||||
// parameters - threshold
|
||||
#ifdef EIGERD
|
||||
|
@ -257,3 +257,5 @@ int set_veto_algorithm(int);
|
||||
int get_chip_version(int);
|
||||
int get_default_dac(int);
|
||||
int set_default_dac(int);
|
||||
int get_gain_mode(int);
|
||||
int set_gain_mode(int);
|
@ -382,6 +382,8 @@ void function_table() {
|
||||
flist[F_GET_CHIP_VERSION] = &get_chip_version;
|
||||
flist[F_GET_DEFAULT_DAC] = &get_default_dac;
|
||||
flist[F_SET_DEFAULT_DAC] = &set_default_dac;
|
||||
flist[F_GET_GAIN_MODE] = &get_gain_mode;
|
||||
flist[F_SET_GAIN_MODE] = &set_gain_mode;
|
||||
|
||||
// check
|
||||
if (NUM_DET_FUNCTIONS >= RECEIVER_ENUM_START) {
|
||||
@ -8551,4 +8553,63 @@ int set_default_dac(int file_des) {
|
||||
}
|
||||
#endif
|
||||
return Server_SendResult(file_des, INT32, NULL, 0);
|
||||
}
|
||||
}
|
||||
|
||||
int get_gain_mode(int file_des) {
|
||||
ret = OK;
|
||||
memset(mess, 0, sizeof(mess));
|
||||
enum gainMode retval = NORMAL_GAIN_MODE;
|
||||
LOG(logDEBUG1, ("Getting gain mode\n"));
|
||||
|
||||
#ifndef JUNGFRAUD
|
||||
functionNotImplemented();
|
||||
#else
|
||||
// get only
|
||||
retval = getGainMode();
|
||||
LOG(logDEBUG1, ("gainmode retval: %u\n", retval));
|
||||
if ((int)retval == -1) {
|
||||
ret = FAIL;
|
||||
strcpy(mess, "Could not get gain mode.\n");
|
||||
LOG(logERROR, (mess));
|
||||
}
|
||||
#endif
|
||||
return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
|
||||
}
|
||||
|
||||
int set_gain_mode(int file_des) {
|
||||
ret = OK;
|
||||
memset(mess, 0, sizeof(mess));
|
||||
int arg = -1;
|
||||
if (receiveData(file_des, &arg, sizeof(arg), INT32) < 0)
|
||||
return printSocketReadError();
|
||||
enum gainMode gainmode = arg;
|
||||
LOG(logINFO, ("Setting gain mode %d\n", (int)gainmode));
|
||||
|
||||
#ifndef JUNGFRAUD
|
||||
functionNotImplemented();
|
||||
#else
|
||||
// only set
|
||||
if (Server_VerifyLock() == OK) {
|
||||
switch (gainmode) {
|
||||
case NORMAL_GAIN_MODE:
|
||||
case FORCE_SWITCH_G1:
|
||||
case FORCE_SWITCH_G2:
|
||||
break;
|
||||
default:
|
||||
modeNotImplemented("Gain Mode Index", (int)gainmode);
|
||||
break;
|
||||
}
|
||||
|
||||
setGainMode(gainmode);
|
||||
int retval = getGainMode();
|
||||
LOG(logDEBUG1, ("gainmode retval: %u\n", retval));
|
||||
if (retval == -1) {
|
||||
ret = FAIL;
|
||||
strcpy(mess, "Could not get gain mode.\n");
|
||||
LOG(logERROR, (mess));
|
||||
}
|
||||
validate(&ret, mess, arg, retval, "set gain mode", DEC);
|
||||
}
|
||||
#endif
|
||||
return Server_SendResult(file_des, INT32, NULL, 0);
|
||||
}
|
||||
|
Reference in New Issue
Block a user