mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-23 10:07:59 +02:00
WIP
This commit is contained in:
@ -1967,7 +1967,7 @@ int setPatternWaitAddress(int level, int addr) {
|
||||
}
|
||||
|
||||
// get
|
||||
uint32_t regval = bus_r((reg & mask) >> offset);
|
||||
uint32_t regval = ((bus_r(reg) & mask) >> offset);
|
||||
FILE_LOG(logDEBUG1, (" Wait Address retval (level:%d, addr:0x%x)\n", level, regval));
|
||||
return regval;
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ add_executable(gotthard2DetectorServer_virtual
|
||||
../slsDetectorServer/src/communication_funcs_UDP.c
|
||||
../slsDetectorServer/src/DAC6571.c
|
||||
../slsDetectorServer/src/common.c
|
||||
../slsDetectorServer/src/LTC2620_Driver.c
|
||||
)
|
||||
|
||||
include_directories(
|
||||
|
@ -12,7 +12,7 @@ DESTDIR ?= bin
|
||||
INSTMODE = 0777
|
||||
|
||||
SRCS = slsDetectorFunctionList.c
|
||||
SRCS += $(main_src)slsDetectorServer.c $(main_src)slsDetectorServer_funcs.c $(main_src)communication_funcs.c $(main_src)nios.c $(main_src)common.c $(main_src)DAC6571.c
|
||||
SRCS += $(main_src)slsDetectorServer.c $(main_src)slsDetectorServer_funcs.c $(main_src)communication_funcs.c $(main_src)nios.c $(main_src)common.c $(main_src)DAC6571.c $(main_src)LTC2620_Driver.c
|
||||
|
||||
OBJS = $(SRCS:.c=.o)
|
||||
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include "clogger.h"
|
||||
#include "nios.h"
|
||||
#include "DAC6571.h"
|
||||
#include "LTC2620_Driver.h"
|
||||
#include "common.h"
|
||||
#ifdef VIRTUAL
|
||||
#include "communication_funcs_UDP.h"
|
||||
@ -36,6 +37,7 @@ int virtual_stop = 0;
|
||||
|
||||
uint32_t clkDivider[NUM_CLOCKS] = {125, 20, 80};
|
||||
int highvoltage = 0;
|
||||
int dacValues[NDAC] = {0};
|
||||
int detPos[2] = {0, 0};
|
||||
|
||||
int isFirmwareCheckDone() {
|
||||
@ -82,6 +84,7 @@ void basictests() {
|
||||
return;
|
||||
}
|
||||
|
||||
uint16_t hversion = getHardwareVersionNumber();
|
||||
uint32_t ipadd = getDetectorIP();
|
||||
uint64_t macadd = getDetectorMAC();
|
||||
int64_t fwversion = getDetectorId(DETECTOR_FIRMWARE_VERSION);
|
||||
@ -91,6 +94,8 @@ void basictests() {
|
||||
uint32_t requiredFirmwareVersion = REQRD_FRMWRE_VRSN;
|
||||
|
||||
FILE_LOG(logINFOBLUE, ("************ Gotthard2 Server *********************\n"
|
||||
"Hardware Version:\t\t 0x%x\n"
|
||||
|
||||
"Detector IP Addr:\t\t 0x%x\n"
|
||||
"Detector MAC Addr:\t\t 0x%llx\n\n"
|
||||
|
||||
@ -100,6 +105,7 @@ void basictests() {
|
||||
"Required Firmware Version:\t 0x%x\n"
|
||||
"Client-Software API Version:\t 0x%llx\n"
|
||||
"********************************************************\n",
|
||||
hversion,
|
||||
ipadd,
|
||||
(long long unsigned int)macadd,
|
||||
(long long int)fwversion,
|
||||
@ -248,6 +254,13 @@ u_int64_t getFirmwareAPIVersion() {
|
||||
return ((bus_r(API_VERSION_REG) & API_VERSION_MSK) >> API_VERSION_OFST);
|
||||
}
|
||||
|
||||
u_int16_t getHardwareVersionNumber() {
|
||||
#ifdef VIRTUAL
|
||||
return 0;
|
||||
#endif
|
||||
return ((bus_r(MCB_SERIAL_NO_REG)));// & HARDWARE_VERSION_NUM_MSK) >> HARDWARE_VERSION_NUM_OFST);
|
||||
}
|
||||
|
||||
u_int32_t getDetectorNumber(){
|
||||
#ifdef VIRTUAL
|
||||
return 0;
|
||||
@ -329,20 +342,45 @@ void setupDetector() {
|
||||
clkDivider[TICK_CLK] = DEFAULT_TICK_CLK;
|
||||
clkDivider[SAMPLING_CLK] = DEFAULT_SAMPLING_CLK;
|
||||
highvoltage = 0;
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < NDAC; ++i) {
|
||||
dacValues[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// hv
|
||||
#ifndef VIRTUAL
|
||||
// hv
|
||||
DAC6571_SetDefines(HV_HARD_MAX_VOLTAGE, HV_DRIVER_FILE_NAME);
|
||||
// dacs
|
||||
LTC2620_D_SetDefines(DAC_MAX_MV, DAC_DRIVER_FILE_NAME, NDAC);
|
||||
#endif
|
||||
|
||||
// Default values
|
||||
setHighVoltage(DEFAULT_HIGH_VOLTAGE);
|
||||
setDefaultDacs();
|
||||
setTimer(FRAME_NUMBER, DEFAULT_NUM_FRAMES);
|
||||
setTimer(CYCLES_NUMBER, DEFAULT_NUM_CYCLES);
|
||||
setTimer(ACQUISITION_TIME, DEFAULT_EXPTIME);
|
||||
setTimer(ACQUISITION_TIME, DEFAULT_PERIOD);
|
||||
}
|
||||
|
||||
int setDefaultDacs() {
|
||||
int ret = OK;
|
||||
FILE_LOG(logINFOBLUE, ("Setting Default Dac values\n"));
|
||||
{
|
||||
int i = 0;
|
||||
const int defaultvals[NDAC] = DEFAULT_DAC_VALS;
|
||||
for(i = 0; i < NDAC; ++i) {
|
||||
// if not already default, set it to default
|
||||
if (dacValues[i] != defaultvals[i]) {
|
||||
setDAC((enum DACINDEX)i,defaultvals[i],0);
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* set parameters - dr, roi */
|
||||
|
||||
@ -451,6 +489,46 @@ int64_t getTimeLeft(enum timerIndex ind){
|
||||
|
||||
|
||||
|
||||
/* parameters - dac, hv */
|
||||
void setDAC(enum DACINDEX ind, int val, int mV) {
|
||||
if (val < 0)
|
||||
return;
|
||||
|
||||
FILE_LOG(logDEBUG1, ("Setting dac[%d]: %d %s \n", (int)ind, val, (mV ? "mV" : "dac units")));
|
||||
int dacval = val;
|
||||
#ifdef VIRTUAL
|
||||
if (!mV) {
|
||||
dacValues[ind] = val;
|
||||
}
|
||||
// convert to dac units
|
||||
else if (LTC2620_D_VoltageToDac(val, &dacval) == OK) {
|
||||
dacValues[ind] = dacval;
|
||||
}
|
||||
#else
|
||||
if (LTC2620_D_SetDACValue((int)ind, val, mV, &dacval) == OK) {
|
||||
dacValues[ind] = dacval;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
int getDAC(enum DACINDEX ind, int mV) {
|
||||
if (!mV) {
|
||||
FILE_LOG(logDEBUG1, ("Getting DAC %d : %d dac\n",ind, dacValues[ind]));
|
||||
return dacValues[ind];
|
||||
}
|
||||
int voltage = -1;
|
||||
LTC2620_D_DacToVoltage(dacValues[ind], &voltage);
|
||||
FILE_LOG(logDEBUG1, ("Getting DAC %d : %d dac (%d mV)\n",ind, dacValues[ind], voltage));
|
||||
return voltage;
|
||||
}
|
||||
|
||||
int getMaxDacSteps() {
|
||||
return LTC2620_D_GetMaxNumSteps();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
int setHighVoltage(int val){
|
||||
if (val > HV_SOFT_MAX_VOLTAGE) {
|
||||
val = HV_SOFT_MAX_VOLTAGE;
|
||||
|
@ -14,6 +14,8 @@
|
||||
#define HV_SOFT_MAX_VOLTAGE (200)
|
||||
#define HV_HARD_MAX_VOLTAGE (530)
|
||||
#define HV_DRIVER_FILE_NAME ("/etc/devlinks/hvdac")
|
||||
#define DAC_DRIVER_FILE_NAME ("/etc/devlinks/dac")
|
||||
#define DAC_MAX_MV (2048)
|
||||
|
||||
/** Default Parameters */
|
||||
#define DEFAULT_NUM_FRAMES (1)
|
||||
@ -34,7 +36,40 @@
|
||||
#define BIT16_MASK (0xFFFF)
|
||||
|
||||
/* Enums */
|
||||
enum DACINDEX {DAC0};
|
||||
enum DACINDEX {G_VREF_H_ADC, /* 0 */ \
|
||||
G_DAC_UNUSED, /* 1 */ \
|
||||
G_VB_COMP_FE, /* 2 */ \
|
||||
G_VB_COMP_ADC, /* 3 */ \
|
||||
G_VCOM_CDS, /* 4 */ \
|
||||
G_VREF_RESTORE,/* 5 */ \
|
||||
G_VB_OPA_1ST, /* 6 */ \
|
||||
G_VREF_COMP_FE,/* 7 */ \
|
||||
G_VCOM_ADC1, /* 8 */ \
|
||||
G_VREF_PRECH, /* 9 */ \
|
||||
G_VREF_L_ADC, /* 10 */ \
|
||||
G_VREF_CDS, /* 11 */ \
|
||||
G_VB_CS, /* 12 */ \
|
||||
G_VB_OPA_FD, /* 13 */ \
|
||||
G_DAC_UNUSED2, /* 14 */ \
|
||||
G_VCOM_ADC2 /* 15*/ \
|
||||
};
|
||||
#define DEFAULT_DAC_VALS {1723, /* 0 (1050 mV) VREF_H_ADC*/ \
|
||||
0, /* 1 (0 mV) DAC_UNUSED*/ \
|
||||
0, /* 2 (0 mV) VB_COMP_FE*/ \
|
||||
0, /* 3 (0 mV) VB_COMP_ADC*/ \
|
||||
560, /* 4 (700 mV) VCOM_CDS*/ \
|
||||
250, /* 5 (320 mV) VREF_RESTORE*/ \
|
||||
0, /* 6 (0 mV) VB_OPA_1ST*/ \
|
||||
0, /* 7 (0 mV) VREF_COMP_FE*/ \
|
||||
560, /* 8 (700 mV) VCOM_ADC1*/ \
|
||||
700, /* 9 (860 mV) VREF_PRECH*/ \
|
||||
576, /* 10 (350 mV) VREF_L_ADC*/ \
|
||||
470, /* 11 (600 mV) VREF_CDS*/ \
|
||||
2000, /* 12 (1400 mV) VB_CS*/ \
|
||||
0, /* 13 (0 mV) VB_OPA_FD*/ \
|
||||
0, /* 14 (0 mV) DAC_UNUSED2*/ \
|
||||
560 /* 15 (700 mV) VCOM_ADC2*/ \
|
||||
};
|
||||
enum CLKINDEX {RUN_CLK, TICK_CLK, SAMPLING_CLK, NUM_CLOCKS};
|
||||
|
||||
/* Struct Definitions */
|
||||
|
@ -51,7 +51,7 @@ int detectorTest(enum digitalTestMode arg);
|
||||
int64_t getDetectorId(enum idMode arg);
|
||||
u_int64_t getFirmwareVersion();
|
||||
u_int64_t getFirmwareAPIVersion();
|
||||
#if defined(JUNGFRAUD) || defined(CHIPTESTBOARDD) || defined(MOENCHD) || defined(MYTHEN3D)
|
||||
#if defined(JUNGFRAUD) || defined(CHIPTESTBOARDD) || defined(MOENCHD) || defined(MYTHEN3D) || defined(GOTTHARD2D)
|
||||
u_int16_t getHardwareVersionNumber();
|
||||
#endif
|
||||
#if defined(JUNGFRAUD) || defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
@ -85,7 +85,7 @@ int allocateRAM();
|
||||
void updateDataBytes();
|
||||
#endif
|
||||
|
||||
#if defined(GOTTHARDD) || defined(JUNGFRAUD) || defined(MYTHEN3D)
|
||||
#if defined(GOTTHARDD) || defined(JUNGFRAUD) || defined(MYTHEN3D) || GOTTHARD2D
|
||||
int setDefaultDacs();
|
||||
#endif
|
||||
|
||||
@ -212,11 +212,9 @@ extern int AD9257_GetVrefVoltage(int mV); // AD9257.h
|
||||
extern int AD9257_SetVrefVoltage(int val, int mV); // AD9257.h
|
||||
#endif
|
||||
|
||||
#if (!defined(GOTTHARD2D))
|
||||
void setDAC(enum DACINDEX ind, int val, int mV);
|
||||
int getDAC(enum DACINDEX ind, int mV);
|
||||
int getMaxDacSteps();
|
||||
#endif
|
||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||
int dacToVoltage(int dac);
|
||||
int checkVLimitCompliant(int mV);
|
||||
|
@ -841,14 +841,11 @@ int set_dac(int file_des) {
|
||||
case HIGH_VOLTAGE:
|
||||
case V_LIMIT:
|
||||
break;
|
||||
#elif GOTTHARD2D
|
||||
case HIGH_VOLTAGE:
|
||||
break;
|
||||
#elif MYTHEN3D
|
||||
case HIGH_VOLTAGE:
|
||||
break;
|
||||
case M_casSh: // in sls_detector_defs.h
|
||||
serverDacIndex = CASSH; // in mythen3 slsDetectorServer_defs.h
|
||||
case M_casSh:
|
||||
serverDacIndex = CASSH;
|
||||
break;
|
||||
case M_Vth2:
|
||||
serverDacIndex = VTH2;
|
||||
@ -895,8 +892,51 @@ int set_dac(int file_des) {
|
||||
case M_VdcSh:
|
||||
serverDacIndex = VDCSH;
|
||||
break;
|
||||
|
||||
|
||||
#elif GOTTHARD2D
|
||||
case HIGH_VOLTAGE:
|
||||
break;
|
||||
case VREF_H_ADC:
|
||||
serverDacIndex = G_VREF_H_ADC;
|
||||
break;
|
||||
case VB_COMP_FE:
|
||||
serverDacIndex = G_VB_COMP_FE;
|
||||
break;
|
||||
case VB_COMP_ADC:
|
||||
serverDacIndex = G_VB_COMP_ADC;
|
||||
break;
|
||||
case VCOM_CDS:
|
||||
serverDacIndex = G_VCOM_CDS;
|
||||
break;
|
||||
case VREF_RESTORE:
|
||||
serverDacIndex = G_VREF_RESTORE;
|
||||
break;
|
||||
case VB_OPA_1ST:
|
||||
serverDacIndex = G_VB_OPA_1ST;
|
||||
break;
|
||||
case VREF_COMP_FE:
|
||||
serverDacIndex = G_VREF_COMP_FE;
|
||||
break;
|
||||
case VCOM_ADC1:
|
||||
serverDacIndex = G_VCOM_ADC1;
|
||||
break;
|
||||
case VREF_PRECH:
|
||||
serverDacIndex = G_VREF_PRECH;
|
||||
break;
|
||||
case VREF_L_ADC:
|
||||
serverDacIndex = G_VREF_L_ADC;
|
||||
break;
|
||||
case VREF_CDS:
|
||||
serverDacIndex = G_VREF_CDS;
|
||||
break;
|
||||
case VB_CS:
|
||||
serverDacIndex = G_VB_CS;
|
||||
break;
|
||||
case VB_OPA_FD:
|
||||
serverDacIndex = G_VB_OPA_FD;
|
||||
break;
|
||||
case VCOM_ADC2:
|
||||
serverDacIndex = G_VCOM_ADC2;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
#ifdef JUNGFRAUD
|
||||
@ -1063,11 +1103,6 @@ int set_dac(int file_des) {
|
||||
validate(val, retval, "set vlimit", DEC);
|
||||
break;
|
||||
#endif
|
||||
#ifdef GOTTHARD2D
|
||||
default:
|
||||
break;
|
||||
|
||||
#else
|
||||
// dacs
|
||||
default:
|
||||
if (mV && val > DAC_MAX_MV) {
|
||||
@ -1123,7 +1158,6 @@ int set_dac(int file_des) {
|
||||
}
|
||||
FILE_LOG(logDEBUG1, ("Dac (%d): %d %s\n\n", serverDacIndex, retval, (mV ? "mV" : "dac units")));
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user