diff --git a/slsDetectorSoftware/eigerDetectorServer/Beb.c b/slsDetectorSoftware/eigerDetectorServer/Beb.c index b9b3f42d0..b5d0a0065 100644 --- a/slsDetectorSoftware/eigerDetectorServer/Beb.c +++ b/slsDetectorSoftware/eigerDetectorServer/Beb.c @@ -1136,10 +1136,17 @@ void Beb_SetDetectorNumber(uint32_t detid) { cprintf(BG_RED,"Set Detector ID FAIL\n"); return; }else{ - uint32_t value = Beb_Read32(csp0base, UDP_HEADER_A_OFST); + uint32_t value = Beb_Read32(csp0base, UDP_HEADER_A_LEFT_OFST); value &= UDP_HEADER_X_MSK; // to keep previous x value - Beb_Write32(csp0base, UDP_HEADER_A_OFST, value | ((swapid << UDP_HEADER_ID_OFST) & UDP_HEADER_ID_MSK)); - value = Beb_Read32(csp0base, UDP_HEADER_A_OFST); + Beb_Write32(csp0base, UDP_HEADER_A_LEFT_OFST, value | ((swapid << UDP_HEADER_ID_OFST) & UDP_HEADER_ID_MSK)); + value = Beb_Read32(csp0base, UDP_HEADER_A_LEFT_OFST); + if((value & UDP_HEADER_ID_MSK) != ((swapid << UDP_HEADER_ID_OFST) & UDP_HEADER_ID_MSK)) + cprintf(BG_RED,"Set Detector ID FAIL\n"); + + value = Beb_Read32(csp0base, UDP_HEADER_A_RIGHT_OFST); + value &= UDP_HEADER_X_MSK; // to keep previous x value + Beb_Write32(csp0base, UDP_HEADER_A_RIGHT_OFST, value | ((swapid << UDP_HEADER_ID_OFST) & UDP_HEADER_ID_MSK)); + value = Beb_Read32(csp0base, UDP_HEADER_A_RIGHT_OFST); if((value & UDP_HEADER_ID_MSK) != ((swapid << UDP_HEADER_ID_OFST) & UDP_HEADER_ID_MSK)) cprintf(BG_RED,"Set Detector ID FAIL\n"); @@ -1155,7 +1162,6 @@ int Beb_SetDetectorPosition(int pos[]) { return OK; pos[0] = Beb_swap_uint16(pos[0]); - pos[1] = Beb_swap_uint16(pos[1]); pos[2] = Beb_swap_uint16(pos[2]); int ret = FAIL; @@ -1169,26 +1175,55 @@ int Beb_SetDetectorPosition(int pos[]) { }else{ uint32_t value = 0; ret = OK; - // x - value = Beb_Read32(csp0base, UDP_HEADER_A_OFST); + // x left + value = Beb_Read32(csp0base, UDP_HEADER_A_RIGHT_OFST); value &= UDP_HEADER_ID_MSK; // to keep previous id value - Beb_Write32(csp0base, UDP_HEADER_A_OFST, value | ((pos[0] << UDP_HEADER_X_OFST) & UDP_HEADER_X_MSK)); - value = Beb_Read32(csp0base, UDP_HEADER_A_OFST); + Beb_Write32(csp0base, UDP_HEADER_A_LEFT_OFST, value | ((pos[0] << UDP_HEADER_X_OFST) & UDP_HEADER_X_MSK)); + value = Beb_Read32(csp0base, UDP_HEADER_A_LEFT_OFST); if((value & UDP_HEADER_X_MSK) != ((pos[0] << UDP_HEADER_X_OFST) & UDP_HEADER_X_MSK)) ret = FAIL; - // y - // overwriting z anyway, so no need to look at previous z value - Beb_Write32(csp0base, UDP_HEADER_B_OFST, ((pos[1] << UDP_HEADER_Y_OFST) & UDP_HEADER_Y_MSK)); - value = Beb_Read32(csp0base, UDP_HEADER_B_OFST); - if(value != ((pos[1] << UDP_HEADER_Y_OFST) & UDP_HEADER_Y_MSK)) + // x right + value = Beb_Read32(csp0base, UDP_HEADER_A_LEFT_OFST); + value &= UDP_HEADER_ID_MSK; // to keep previous id value + Beb_Write32(csp0base, UDP_HEADER_A_RIGHT_OFST, value | ((pos[0] << UDP_HEADER_X_OFST) & UDP_HEADER_X_MSK)); + value = Beb_Read32(csp0base, UDP_HEADER_A_RIGHT_OFST); + if((value & UDP_HEADER_X_MSK) != ((pos[0] << UDP_HEADER_X_OFST) & UDP_HEADER_X_MSK)) ret = FAIL; - // z - value = Beb_Read32(csp0base, UDP_HEADER_B_OFST); + + + // y left + int posval = Beb_swap_uint16(pos[1]); + // overwriting z anyway, so no need to look at previous z value + Beb_Write32(csp0base, UDP_HEADER_B_LEFT_OFST, ((posval << UDP_HEADER_Y_OFST) & UDP_HEADER_Y_MSK)); + value = Beb_Read32(csp0base, UDP_HEADER_B_LEFT_OFST); + if(value != ((posval << UDP_HEADER_Y_OFST) & UDP_HEADER_Y_MSK)) + ret = FAIL; + + // y right + posval = Beb_swap_uint16(pos[1]+1); + // overwriting z anyway, so no need to look at previous z value + Beb_Write32(csp0base, UDP_HEADER_B_RIGHT_OFST, ((posval << UDP_HEADER_Y_OFST) & UDP_HEADER_Y_MSK)); + value = Beb_Read32(csp0base, UDP_HEADER_B_RIGHT_OFST); + if(value != ((posval << UDP_HEADER_Y_OFST) & UDP_HEADER_Y_MSK)) + ret = FAIL; + + + + // z left + value = Beb_Read32(csp0base, UDP_HEADER_B_LEFT_OFST); value &= UDP_HEADER_Y_MSK; // to keep previous y value - Beb_Write32(csp0base, UDP_HEADER_B_OFST, value | ((pos[2] << UDP_HEADER_Z_OFST) & UDP_HEADER_Z_MSK)); - value = Beb_Read32(csp0base, UDP_HEADER_B_OFST); + Beb_Write32(csp0base, UDP_HEADER_B_LEFT_OFST, value | ((pos[2] << UDP_HEADER_Z_OFST) & UDP_HEADER_Z_MSK)); + value = Beb_Read32(csp0base, UDP_HEADER_B_LEFT_OFST); + if((value & UDP_HEADER_Z_MSK) != ((pos[2] << UDP_HEADER_Z_OFST) & UDP_HEADER_Z_MSK)) + ret = FAIL; + + // z right + value = Beb_Read32(csp0base, UDP_HEADER_B_RIGHT_OFST); + value &= UDP_HEADER_Y_MSK; // to keep previous y value + Beb_Write32(csp0base, UDP_HEADER_B_RIGHT_OFST, value | ((pos[2] << UDP_HEADER_Z_OFST) & UDP_HEADER_Z_MSK)); + value = Beb_Read32(csp0base, UDP_HEADER_B_RIGHT_OFST); if((value & UDP_HEADER_Z_MSK) != ((pos[2] << UDP_HEADER_Z_OFST) & UDP_HEADER_Z_MSK)) ret = FAIL; @@ -1196,8 +1231,13 @@ int Beb_SetDetectorPosition(int pos[]) { //close file pointer Beb_close(fd,csp0base); } - if (ret == OK) - printf("Position set to [%d, %d, %d]\n", Beb_swap_uint16(pos[0]), Beb_swap_uint16(pos[1]), Beb_swap_uint16(pos[2])); + if (ret == OK) { + cprintf(BLUE, "Position set to...\n" + "Left: [%d, %d, %d]\n" + "Right:[%d, %d, %d]\n", + Beb_swap_uint16(pos[0]), pos[1], Beb_swap_uint16(pos[2]), + Beb_swap_uint16(pos[0]), pos[1]+1, Beb_swap_uint16(pos[2])); + } return ret; } diff --git a/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h b/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h index db90e07c2..87d4ae70a 100644 --- a/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h +++ b/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h @@ -182,8 +182,11 @@ #define TEN_GIGA_RIGHT_FRAME_DELAY_COUNTER 0x1e4 // udp header (position, id) -#define UDP_HEADER_A_OFST 0x00C0 -#define UDP_HEADER_B_OFST 0x00E0 +#define UDP_HEADER_A_LEFT_OFST 0x00C0 +#define UDP_HEADER_B_LEFT_OFST 0x00E0 +#define UDP_HEADER_A_RIGHT_OFST 0x0100 +#define UDP_HEADER_B_RIGHT_OFST 0x0120 + #define UDP_HEADER_X_OFST (0) #define UDP_HEADER_X_MSK (0xFFFF << UDP_HEADER_X_OFST) #define UDP_HEADER_ID_OFST (16) diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv3.1.0.21.0 b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv3.1.0.21.0 index c0dd275d7..14a1b6b5e 100755 Binary files a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv3.1.0.21.0 and b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv3.1.0.21.0 differ diff --git a/slsDetectorSoftware/eigerDetectorServer/gitInfo.txt b/slsDetectorSoftware/eigerDetectorServer/gitInfo.txt index 3ceab24f5..4a39bceda 100644 --- a/slsDetectorSoftware/eigerDetectorServer/gitInfo.txt +++ b/slsDetectorSoftware/eigerDetectorServer/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorsPackage/slsDetectorSoftware/eigerDetectorServer URL: origin git@git.psi.ch:sls_detectors_software/sls_detector_software.git Repository Root: origin git@git.psi.ch:sls_detectors_software/sls_detector_software.git -Repsitory UUID: 77d9fda91fa82c2b4259d64ca9d4d6b4fa4b647c -Revision: 313 +Repsitory UUID: 73bad32c4ab2c8cfb2687547f7da6f932b358c1a +Revision: 314 Branch: developer Last Changed Author: Dhanya_Thattil -Last Changed Rev: 1607 -Last Changed Date: 2017-10-12 14:50:11.000000002 +0200 ./FebRegisterDefs.h +Last Changed Rev: 1609 +Last Changed Date: 2017-10-23 11:45:17.000000002 +0200 ./Beb.c diff --git a/slsDetectorSoftware/eigerDetectorServer/gitInfoEiger.h b/slsDetectorSoftware/eigerDetectorServer/gitInfoEiger.h index 76a485685..a66436d5c 100644 --- a/slsDetectorSoftware/eigerDetectorServer/gitInfoEiger.h +++ b/slsDetectorSoftware/eigerDetectorServer/gitInfoEiger.h @@ -1,11 +1,11 @@ //#define SVNPATH "" #define SVNURL "git@git.psi.ch:sls_detectors_software/sls_detector_software.git" //#define SVNREPPATH "" -#define SVNREPUUID "77d9fda91fa82c2b4259d64ca9d4d6b4fa4b647c" -//#define SVNREV 0x1607 +#define SVNREPUUID "73bad32c4ab2c8cfb2687547f7da6f932b358c1a" +//#define SVNREV 0x1609 //#define SVNKIND "" //#define SVNSCHED "" #define SVNAUTH "Dhanya_Thattil" -#define SVNREV 0x1607 -#define SVNDATE 0x20171012 +#define SVNREV 0x1609 +#define SVNDATE 0x20171023 // diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index b251edb2b..4ee361794 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -6431,7 +6431,7 @@ int slsDetector::configureMAC(){ pos[1] = 0; } else { pos[0] = posId / max; - pos[1] = posId % max; + pos[1] = (posId % max) * ((thisDetector->myDetectorType == EIGER) ? 2 : 1); // for horiz. udp ports } }