x y and z coordinates are pushed into eiger server and its fixed in appropriate client side as well

This commit is contained in:
Dhanya Maliakal 2017-10-23 12:20:18 +02:00
parent ae72df7b14
commit d2fd0cbee9
6 changed files with 73 additions and 30 deletions

View File

@ -1136,10 +1136,17 @@ void Beb_SetDetectorNumber(uint32_t detid) {
cprintf(BG_RED,"Set Detector ID FAIL\n"); cprintf(BG_RED,"Set Detector ID FAIL\n");
return; return;
}else{ }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 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)); 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_OFST); 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)) if((value & UDP_HEADER_ID_MSK) != ((swapid << UDP_HEADER_ID_OFST) & UDP_HEADER_ID_MSK))
cprintf(BG_RED,"Set Detector ID FAIL\n"); cprintf(BG_RED,"Set Detector ID FAIL\n");
@ -1155,7 +1162,6 @@ int Beb_SetDetectorPosition(int pos[]) {
return OK; return OK;
pos[0] = Beb_swap_uint16(pos[0]); pos[0] = Beb_swap_uint16(pos[0]);
pos[1] = Beb_swap_uint16(pos[1]);
pos[2] = Beb_swap_uint16(pos[2]); pos[2] = Beb_swap_uint16(pos[2]);
int ret = FAIL; int ret = FAIL;
@ -1169,26 +1175,55 @@ int Beb_SetDetectorPosition(int pos[]) {
}else{ }else{
uint32_t value = 0; uint32_t value = 0;
ret = OK; ret = OK;
// x // x left
value = Beb_Read32(csp0base, UDP_HEADER_A_OFST); value = Beb_Read32(csp0base, UDP_HEADER_A_RIGHT_OFST);
value &= UDP_HEADER_ID_MSK; // to keep previous id value 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)); 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_OFST); 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)) if((value & UDP_HEADER_X_MSK) != ((pos[0] << UDP_HEADER_X_OFST) & UDP_HEADER_X_MSK))
ret = FAIL; ret = FAIL;
// y // x right
// overwriting z anyway, so no need to look at previous z value value = Beb_Read32(csp0base, UDP_HEADER_A_LEFT_OFST);
Beb_Write32(csp0base, UDP_HEADER_B_OFST, ((pos[1] << UDP_HEADER_Y_OFST) & UDP_HEADER_Y_MSK)); value &= UDP_HEADER_ID_MSK; // to keep previous id value
value = Beb_Read32(csp0base, UDP_HEADER_B_OFST); Beb_Write32(csp0base, UDP_HEADER_A_RIGHT_OFST, value | ((pos[0] << UDP_HEADER_X_OFST) & UDP_HEADER_X_MSK));
if(value != ((pos[1] << UDP_HEADER_Y_OFST) & UDP_HEADER_Y_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; 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 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)); 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_OFST); 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)) if((value & UDP_HEADER_Z_MSK) != ((pos[2] << UDP_HEADER_Z_OFST) & UDP_HEADER_Z_MSK))
ret = FAIL; ret = FAIL;
@ -1196,8 +1231,13 @@ int Beb_SetDetectorPosition(int pos[]) {
//close file pointer //close file pointer
Beb_close(fd,csp0base); Beb_close(fd,csp0base);
} }
if (ret == OK) 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])); 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; return ret;
} }

View File

@ -182,8 +182,11 @@
#define TEN_GIGA_RIGHT_FRAME_DELAY_COUNTER 0x1e4 #define TEN_GIGA_RIGHT_FRAME_DELAY_COUNTER 0x1e4
// udp header (position, id) // udp header (position, id)
#define UDP_HEADER_A_OFST 0x00C0 #define UDP_HEADER_A_LEFT_OFST 0x00C0
#define UDP_HEADER_B_OFST 0x00E0 #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_OFST (0)
#define UDP_HEADER_X_MSK (0xFFFF << UDP_HEADER_X_OFST) #define UDP_HEADER_X_MSK (0xFFFF << UDP_HEADER_X_OFST)
#define UDP_HEADER_ID_OFST (16) #define UDP_HEADER_ID_OFST (16)

View File

@ -1,9 +1,9 @@
Path: slsDetectorsPackage/slsDetectorSoftware/eigerDetectorServer Path: slsDetectorsPackage/slsDetectorSoftware/eigerDetectorServer
URL: origin git@git.psi.ch:sls_detectors_software/sls_detector_software.git 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 Repository Root: origin git@git.psi.ch:sls_detectors_software/sls_detector_software.git
Repsitory UUID: 77d9fda91fa82c2b4259d64ca9d4d6b4fa4b647c Repsitory UUID: 73bad32c4ab2c8cfb2687547f7da6f932b358c1a
Revision: 313 Revision: 314
Branch: developer Branch: developer
Last Changed Author: Dhanya_Thattil Last Changed Author: Dhanya_Thattil
Last Changed Rev: 1607 Last Changed Rev: 1609
Last Changed Date: 2017-10-12 14:50:11.000000002 +0200 ./FebRegisterDefs.h Last Changed Date: 2017-10-23 11:45:17.000000002 +0200 ./Beb.c

View File

@ -1,11 +1,11 @@
//#define SVNPATH "" //#define SVNPATH ""
#define SVNURL "git@git.psi.ch:sls_detectors_software/sls_detector_software.git" #define SVNURL "git@git.psi.ch:sls_detectors_software/sls_detector_software.git"
//#define SVNREPPATH "" //#define SVNREPPATH ""
#define SVNREPUUID "77d9fda91fa82c2b4259d64ca9d4d6b4fa4b647c" #define SVNREPUUID "73bad32c4ab2c8cfb2687547f7da6f932b358c1a"
//#define SVNREV 0x1607 //#define SVNREV 0x1609
//#define SVNKIND "" //#define SVNKIND ""
//#define SVNSCHED "" //#define SVNSCHED ""
#define SVNAUTH "Dhanya_Thattil" #define SVNAUTH "Dhanya_Thattil"
#define SVNREV 0x1607 #define SVNREV 0x1609
#define SVNDATE 0x20171012 #define SVNDATE 0x20171023
// //

View File

@ -6431,7 +6431,7 @@ int slsDetector::configureMAC(){
pos[1] = 0; pos[1] = 0;
} else { } else {
pos[0] = posId / max; pos[0] = posId / max;
pos[1] = posId % max; pos[1] = (posId % max) * ((thisDetector->myDetectorType == EIGER) ? 2 : 1); // for horiz. udp ports
} }
} }