#ifdef SLS_DETECTOR_FUNCTION_LIST #ifndef SLS_DETECTOR_FUNCTION_LIST_H #define SLS_DETECTOR_FUNCTION_LIST_H #include "sls_receiver_defs.h" #include "mythen3Server_defs.h" // DAC_INDEX, ADC_INDEX, also include RegisterDefs.h #include #include // FILE /**************************************************** This functions are used by the slsDetectroServer_funcs interface. Here are the definitions, but the actual implementation should be done for each single detector. ****************************************************/ // basic tests void checkFirmwareCompatibility(int flag); #ifdef JUNGFRAUD int checkType(); u_int32_t testFpga(void); int testBus(void); #endif #if defined(MYTHEND) || defined(JUNGFRAUD) || defined(MTHEN3D) int moduleTest( enum digitalTestMode arg, int imod); #endif int detectorTest( enum digitalTestMode arg); // Ids int64_t getDetectorId(enum idMode arg); u_int64_t getFirmwareVersion(); #ifdef MYTHEND int64_t getModuleId(enum idMode arg, int imod); #elif JUNGFRAUDN_DAC u_int16_t getHardwareVersionNumber(); u_int16_t getHardwareSerialNumber(); #endif u_int32_t getDetectorNumber(); u_int64_t getDetectorMAC(); u_int32_t getDetectorIP(); // initialization void initControlServer(); void initStopServer(); #ifdef EIGERD void getModuleConfiguration(); #endif // set up detector void allocateDetectorStructureMemory(); int setupDetector(); // advanced read/write reg #ifndef EIGERD extern u_int32_t writeRegister(u_int32_t offset, u_int32_t data); // blackfin.h extern u_int32_t readRegister(u_int32_t offset); // blackfin.h #else uint32_t writeRegister(uint32_t offset, uint32_t data); uint32_t readRegister(uint32_t offset); #endif // firmware functions (resets) #ifdef JUNGFRAUD int powerChip (int on); void cleanFifos(); void resetCore(); void resetPeripheral(); int adcPhase(int st); int getPhase(); #endif // parameters - nmod, dr, roi int setNMod(int nm, enum dimension dim); // mythen specific, but for detector compatibility as a get int getNModBoard(enum dimension arg); // mythen specific, but for detector compatibility as a get int setDynamicRange(int dr); #ifdef GOTTHARD int setROI(int n, ROI arg[], int *retvalsize, int *ret); #endif // parameters - readout int setSpeed(enum speedVariable arg, int val); #if defined(EIGERD) || defined(MYTHEND) enum readOutFlags setReadOutFlags(enum readOutFlags val); #endif #ifdef MYTHEND int executeTrimming(enum trimMode mode, int par1, int par2, int imod); #endif // parameters - timer int64_t setTimer(enum timerIndex ind, int64_t val); #ifndef EIGERD int64_t getTimeLeft(enum timerIndex ind); #endif // parameters - channel, chip, module, settings #ifdef MYTHEND int setChannel(sls_detector_channel myChan); int getChannel(sls_detector_channel *myChan); int setChip(sls_detector_chip myChip); int getChip(sls_detector_chip *myChip); #endif #ifdef EIGERD int setModule(sls_detector_module myMod, int delay); #else int setModule(sls_detector_module myMod); #endif int getModule(sls_detector_module *myMod); enum detectorSettings setSettings(enum detectorSettings sett, int imod); enum detectorSettings getSettings(); // parameters - threshold #if defined(MYTHEND) || defined(EIGERD) int getThresholdEnergy(int imod); int setThresholdEnergy(int ev, int imod); #endif // parameters - dac, adc, hv #ifdef JUNGFRAUD void serializeToSPI(u_int32_t addr, u_int32_t val, u_int32_t csmask, int numbitstosend, u_int32_t clkmask, u_int32_t digoutmask, int digofset); void initDac(int dacnum); extern void setAdc(int addr, int val); // AD9257.h int voltageToDac(int value); int dacToVoltage(unsigned int digital); #endif // void setDAC(enum DACINDEX ind, int val, int imod, int mV, int retval[]); double setDAC(enum DACINDEX ind, double val, int imod, int mV); #ifndef MYTHEND int setHighVoltage(int val); #endif // parameters - timing, extsig #ifdef MYTHEND enum externalSignalFlag getExtSignal(int signalindex); enum externalSignalFlag setExtSignal(int signalindex, enum externalSignalFlag flag); #endif enum externalCommunicationMode setTiming( enum externalCommunicationMode arg); // configure mac #ifdef JUNGFRAUD long int calcChecksum(int sourceip, int destip); #endif #ifndef MYTHEND int configureMAC(uint32_t destip, uint64_t destmac, uint64_t sourcemac, uint32_t sourceip, uint32_t udpport, uint32_t udpport2, int ival); // int configureMAC(int ipad, long long int imacadd, long long int iservermacadd, int dtb); #endif #if defined(JUNGFRAUD) || defined(EIGERD) int setDetectorPosition(int pos[]); #endif // very detector specific // gotthard specific - image, pedestal #ifdef GOTTHARDD int loadImage(enum imageType index, char *imageVals); int readCounterBlock(int startACQ, char *counterVals); int resetCounterBlock(int startACQ); int calibratePedestal(int frames); // jungfrau specific - pll, flashing firmware #elif JUNGFRAUD void resetPLL(); u_int32_t setPllReconfigReg(u_int32_t reg, u_int32_t val); void configurePll(); extern void eraseFlash(); // programfpga.h extern int startWritingFPGAprogram(FILE** filefp); // programfpga.h extern void stopWritingFPGAprogram(FILE* filefp); // programfpga.h extern int writeFPGAProgram(char* fpgasrc, size_t fsize, FILE* filefp); // programfpga.h // eiger specific - iodelay, 10g, pulse, rate, temp, activate, delay nw parameter #elif EIGERD int setIODelay(int val, int imod); int enableTenGigabitEthernet(int val); int setCounterBit(int val); int pulsePixel(int n, int x, int y); int pulsePixelNMove(int n, int x, int y); int pulseChip(int n); int64_t setRateCorrection(int64_t custom_tau_in_nsec); int getRateCorrectionEnable(); int getDefaultSettingsTau_in_nsec(); void setDefaultSettingsTau_in_nsec(int t); int64_t getCurrentTau(); void setExternalGating(int enable[]); int setAllTrimbits(int val); int getAllTrimbits(); int getBebFPGATemp(); int activate(int enable); int setNetworkParameter(enum NETWORKINDEX mode, int value); #endif // aquisition #if defined(EIGERD) || defined(GOTTHARD) int prepareAcquisition(); #endif int startStateMachine(); #ifdef VIRTUAL void* start_timer(void* arg); #endif int stopStateMachine(); #ifndef JUNGFRAUD int startReadOut(); #endif enum runStatus getRunStatus(); // void readFrame(int *ret, char *mess); char *readFrame(int *ret, char *mess); #ifdef JUNGFRAUD u_int32_t runBusy(void); #endif //common int copyModule(sls_detector_module *destMod, sls_detector_module *srcMod); int calculateDataBytes(); int getTotalNumberOfChannels(); int getTotalNumberOfChips(); int getTotalNumberOfModules(); int getNumberOfChannelsPerModule(); int getNumberOfChipsPerModule(); int getNumberOfDACsPerModule(); int getNumberOfADCsPerModule(); #ifdef EIGERD int getNumberOfGainsPerModule(); int getNumberOfOffsetsPerModule(); #endif int getNumberOfChannelsPerChip(); // sync enum masterFlags setMaster(enum masterFlags arg); enum synchronizationMode setSynchronization(enum synchronizationMode arg); int setPower(int ind, int val); #endif #endif