eiger server bug fix: split quad and interruptframe into set and get to catch fails in set and when quad and interrupt subframe used together(different register values for tl and tr)

This commit is contained in:
2019-07-31 10:58:49 +02:00
parent d981e1b8e5
commit e07e2f2da0
10 changed files with 228 additions and 147 deletions

View File

@ -73,8 +73,8 @@ int setDefaultDacs();
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);
int writeRegister(uint32_t offset, uint32_t data);
int readRegister(uint32_t offset, uint32_t* retval);
#endif
@ -196,7 +196,9 @@ int setDetectorPosition(int pos[]);
#endif
#ifdef EIGERD
int setQuad(int val);
int getQuad();
int setInterruptSubframe(int val);
int getInterruptSubframe();
#endif

View File

@ -1458,8 +1458,22 @@ int write_register(int file_des) {
#ifdef VERBOSE
printf("writing to register 0x%x data 0x%x\n", addr, val);
#endif
#ifdef EIGERD
if(writeRegister(addr, val) == FAIL) {
ret = FAIL;
sprintf(mess,"Could not write to register 0x%x.\n", addr);
cprintf(RED, "Warning: %s", mess);
} else {
if(readRegister(addr, &retval) == FAIL) {
ret = FAIL;
sprintf(mess,"Could not read register 0x%x.\n", addr);
cprintf(RED, "Warning: %s", mess);
}
}
#else
retval=writeRegister(addr,val);
if (retval!=val) {
#endif
if (ret == OK && retval!=val) {
ret = FAIL;
sprintf(mess,"Writing to register 0x%x failed: wrote 0x%x but read 0x%x\n", addr, val, retval);
cprintf(RED, "Warning: %s", mess);
@ -1509,8 +1523,16 @@ int read_register(int file_des) {
printf("reading register 0x%x\n", addr);
#endif
#ifdef SLS_DETECTOR_FUNCTION_LIST
#ifdef EIGERD
if(readRegister(addr, &retval) == FAIL) {
ret = FAIL;
sprintf(mess,"Could not read register 0x%x.\n", addr);
cprintf(RED, "Warning: %s", mess);
}
#else
retval=readRegister(addr);
#endif
#endif
#ifdef VERBOSE
printf("Returned value 0x%x\n", retval);
#endif
@ -5962,11 +5984,16 @@ int set_quad(int file_des) {
#ifdef VERBOSE
printf("Setting Quad :%d \n",arg);
#endif
retval=setQuad(arg);
if((arg != -1) && (retval != arg)) {
if(arg != -1 && setQuad(arg) == FAIL) {
ret=FAIL;
strcpy(mess, "setting quad failed\n");
cprintf(RED, "Warning: %s", mess);
}
retval = getQuad();
if(ret == OK && (arg != -1) && (retval != arg)) {
ret=FAIL;
cprintf(RED, "Warning: %s", mess);
}
}
#endif
if (ret==OK && differentClients)
@ -6021,12 +6048,18 @@ int set_interrupt_subframe(int file_des) {
#ifdef VERBOSE
printf("Setting Interrupt subframe :%d \n",arg);
#endif
retval=setInterruptSubframe(arg);
if (arg != -1 && setInterruptSubframe(arg) == FAIL) {
ret=FAIL;
strcpy(mess, "setting interrupt subframe failed\n");
cprintf(RED, "Warning: %s", mess);
}
retval = getInterruptSubframe();
#ifdef VERBOSE
printf("retval Interrupt subframe :%d \n",retval);
#endif
if((arg != -1) && (retval != arg)) {
if(ret == OK && (arg != -1) && (retval != arg)) {
ret=FAIL;
sprintf(mess, "setting interrupt subframe failed. Set %d, got %d\n", arg, retval);
cprintf(RED, "Warning: %s", mess);
}
}