diff --git a/slsDetectorSoftware/eigerDetectorServer/Beb.c b/slsDetectorSoftware/eigerDetectorServer/Beb.c index b106339ca..32037dcbb 100644 --- a/slsDetectorSoftware/eigerDetectorServer/Beb.c +++ b/slsDetectorSoftware/eigerDetectorServer/Beb.c @@ -609,3 +609,35 @@ int Beb_Test(unsigned int beb_number){ return 1; } +// Returns the FPGA temperature from the xps sysmon ip core +// Temperature value is cropped and not well rounded +int Beb_GetBebFPGATemp() +{ + int temperature=0; + volatile u_int32_t *ptr1; + int fd; + + fd = open("/dev/mem", O_RDWR | O_SYNC, 0); + if (fd == -1) + { + printf("\nCan't find /dev/mem!\n"); + return 0; + } + + u_int32_t CSP0BASE = (u_int32_t)mmap(0, 0x1000, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, XPAR_SYSMON_0_BASEADDR ); + + if (CSP0BASE == (u_int32_t)MAP_FAILED) + { + printf("\nCan't map memmory area!!\n"); + return 0; + } + + ptr1=(u_int32_t*)(CSP0BASE + 0x200); // temperature register in xps sysmon core is at 0x200 + close(fd); + + temperature = ((((float)(*ptr1)/65536.0f)/0.00198421639f ) - 273.15f); // Static conversation, copied from xps sysmon standalone driver + + + return temperature; +} + diff --git a/slsDetectorSoftware/eigerDetectorServer/Beb.h b/slsDetectorSoftware/eigerDetectorServer/Beb.h index 8f98e08c0..8cb4fb53a 100644 --- a/slsDetectorSoftware/eigerDetectorServer/Beb.h +++ b/slsDetectorSoftware/eigerDetectorServer/Beb.h @@ -80,6 +80,7 @@ struct BebInfo{ int Beb_Test(unsigned int beb_number); + int Beb_GetBebFPGATemp(); #endif diff --git a/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.c b/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.c index ac59d43a9..a80711ef9 100644 --- a/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.c +++ b/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.c @@ -6,8 +6,6 @@ #include #include //#include -#include -#include #include "HardwareMMappingDefs.h" diff --git a/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.cxx b/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.cxx index ce67842e6..a8b3311ac 100644 --- a/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.cxx +++ b/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.cxx @@ -6,8 +6,6 @@ #include #include //#include -#include -#include #include "HardwareMMappingDefs.h" diff --git a/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.h b/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.h index 5a2ca8efe..725f12125 100644 --- a/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.h +++ b/slsDetectorSoftware/eigerDetectorServer/LocalLinkInterface.h @@ -8,6 +8,10 @@ #include "HardwareIO.h" #include +#include "ansi.h" +#include +#include + /*class LocalLinkInterface: public HardwareIO{ //*/ diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer index 193764846..b83d58ade 100755 Binary files a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer and b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer differ diff --git a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c index 43366d796..3deed66e0 100644 --- a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c @@ -1009,4 +1009,9 @@ int getAllTrimbits(){ return *((detectorModules->chanregs)); } +int getBebFPGATemp() +{ + return Beb_GetBebFPGATemp(); +} + #endif diff --git a/slsDetectorSoftware/slsDetectorServer/slsDetectorFunctionList.h b/slsDetectorSoftware/slsDetectorServer/slsDetectorFunctionList.h index 995b431c3..14a0dc2ea 100644 --- a/slsDetectorSoftware/slsDetectorServer/slsDetectorFunctionList.h +++ b/slsDetectorSoftware/slsDetectorServer/slsDetectorFunctionList.h @@ -131,6 +131,7 @@ int startReceiver(int d); void setExternalGating(int enable[]); void setAllTrimbits(int val); int getAllTrimbits(); +int getBebFPGATemp(); #endif diff --git a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c index f65df5587..8cfa80dd0 100755 --- a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c +++ b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c @@ -1244,7 +1244,7 @@ int set_dac(int file_des) { int get_adc(int file_des) { - int retval; + int retval=-1; int ret=OK,ret1=OK; int arg[2]; enum dacIndex ind; @@ -1271,6 +1271,12 @@ int get_adc(int file_des) { #endif switch (ind) { +#ifdef EIGERD + case TEMPERATURE_FPGA: //dac = TEMP_FPGA; + retval=getBebFPGATemp(); + printf("Temperature: %d°C\n",retval); + break; +#endif #ifdef GOTTHARDD case TEMPERATURE_FPGA: //dac = TEMP_FPGA; break; @@ -1284,7 +1290,7 @@ int get_adc(int file_des) { break; } #ifdef SLS_DETECTOR_FUNCTION_LIST - if (ret==OK) { + if ((ret==OK) && (retval==-1)) { retval=getADC(idac,imod); } #endif