mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-17 23:37:14 +02:00
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:
@ -1213,11 +1213,14 @@ void Beb_SetDetectorNumber(uint32_t detid) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int Beb_SetQuad(int val) {
|
int Beb_SetQuad(int val) {
|
||||||
if (val >= 0) {
|
if (val < 0)
|
||||||
printf("Setting Quad to %d in Beb\n", val);
|
return OK;
|
||||||
Beb_quadEnable = (val == 0 ? 0 : 1);
|
printf("Setting Quad to %d in Beb\n", val);
|
||||||
Beb_SetDetectorPosition(Beb_positions);
|
Beb_quadEnable = (val == 0 ? 0 : 1);
|
||||||
}
|
return Beb_SetDetectorPosition(Beb_positions);
|
||||||
|
}
|
||||||
|
|
||||||
|
int Beb_GetQuad() {
|
||||||
return Beb_quadEnable;
|
return Beb_quadEnable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,6 +92,7 @@ struct BebInfo{
|
|||||||
|
|
||||||
void Beb_SetDetectorNumber(uint32_t detid);
|
void Beb_SetDetectorNumber(uint32_t detid);
|
||||||
int Beb_SetQuad(int val);
|
int Beb_SetQuad(int val);
|
||||||
|
int Beb_GetQuad();
|
||||||
int Beb_SetDetectorPosition(int pos[]);
|
int Beb_SetDetectorPosition(int pos[]);
|
||||||
|
|
||||||
uint16_t Beb_swap_uint16( uint16_t val);
|
uint16_t Beb_swap_uint16( uint16_t val);
|
||||||
|
@ -2009,165 +2009,172 @@ int Feb_Control_SoftwareTrigger() {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Feb_Control_InterruptSubframe(int val) {
|
int Feb_Control_SetInterruptSubframe(int val) {
|
||||||
if (val >= 0) {
|
printf("Setting Interrupt Subframe to %d\n", val);
|
||||||
printf("Setting Interrupt Subframe to %d\n", val);
|
|
||||||
}
|
|
||||||
// they need to be written separately because the left and right registers have different values for this particular register
|
// they need to be written separately because the left and right registers have different values for this particular register
|
||||||
uint32_t offset = DAQ_REG_HRDWRE;
|
uint32_t offset = DAQ_REG_HRDWRE;
|
||||||
int top = Module_TopAddressIsValid(&modules[1]) ? 1 : 0;
|
uint32_t regVal = 0;
|
||||||
uint32_t lvalue = 0;
|
char side[2][10] = {"right", "left"};
|
||||||
uint32_t rvalue = 0;
|
char isTop[10]; strcpy(isTop, Module_TopAddressIsValid(&modules[1]) ? "top" : "bottom");
|
||||||
// right
|
unsigned int addr[2];
|
||||||
unsigned int addr = top ? Module_GetTopRightAddress (&modules[1]) : Module_GetBottomRightAddress (&modules[1]);
|
addr[0] = Module_TopAddressIsValid(&modules[1]) ? Module_GetTopRightAddress (&modules[1]) : Module_GetBottomRightAddress (&modules[1]);
|
||||||
if (val >= 0) {
|
addr[1] = Module_TopAddressIsValid(&modules[1]) ? Module_GetTopLeftAddress (&modules[1]) : Module_GetBottomLeftAddress (&modules[1]);
|
||||||
if(!Feb_Interface_ReadRegister(addr, offset, &rvalue)) {
|
|
||||||
cprintf(RED,"Could not read %s right interrupt subframe\n", top ? "top" : "bottom");
|
int iloop = 0;
|
||||||
return -1;
|
for(iloop = 0; iloop < 2; ++iloop) {
|
||||||
|
// get previous value to keep it
|
||||||
|
if(!Feb_Interface_ReadRegister(addr[iloop], offset, ®Val)) {
|
||||||
|
cprintf(RED, "Could not read %s %s interrupt subframe\n", isTop, side[iloop]);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
uint32_t data = ((val == 0) ? (rvalue &~ DAQ_REG_HRDWRE_INTRRPT_SF_MSK) : (rvalue | DAQ_REG_HRDWRE_INTRRPT_SF_MSK));
|
uint32_t data = ((val == 0) ? (regVal &~ DAQ_REG_HRDWRE_INTRRPT_SF_MSK) : (regVal | DAQ_REG_HRDWRE_INTRRPT_SF_MSK));
|
||||||
if(!Feb_Interface_WriteRegister(addr, offset, data, 0, 0)) {
|
if(!Feb_Interface_WriteRegister(addr[iloop], offset, data, 0, 0)) {
|
||||||
cprintf(RED,"Could not write 0x%x to %s right interrupt subframe addr 0x%x\n", data, top ? "top" : "bottom", offset);
|
cprintf(RED, "Could not write 0x%x to %s %s interrupt subframe addr 0x%x\n", data, isTop, side[iloop], offset);
|
||||||
return -1;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!Feb_Interface_ReadRegister(addr, offset, &rvalue)) {
|
return 1;
|
||||||
cprintf(RED,"Could not read back %s right interrupt subframe\n", top ? "top" : "bottom");
|
}
|
||||||
return -1;
|
|
||||||
|
int Feb_Control_GetInterruptSubframe() {
|
||||||
|
// they need to be written separately because the left and right registers have different values for this particular register
|
||||||
|
uint32_t offset = DAQ_REG_HRDWRE;
|
||||||
|
uint32_t regVal = 0;
|
||||||
|
|
||||||
|
char side[2][10] = {"right", "left"};
|
||||||
|
char isTop[10]; strcpy(isTop, Module_TopAddressIsValid(&modules[1]) ? "top" : "bottom");
|
||||||
|
unsigned int addr[2];
|
||||||
|
addr[0] = Module_TopAddressIsValid(&modules[1]) ? Module_GetTopRightAddress (&modules[1]) : Module_GetBottomRightAddress (&modules[1]);
|
||||||
|
addr[1] = Module_TopAddressIsValid(&modules[1]) ? Module_GetTopLeftAddress (&modules[1]) : Module_GetBottomLeftAddress (&modules[1]);
|
||||||
|
uint32_t value[2] = {0, 0};
|
||||||
|
|
||||||
|
int iloop = 0;
|
||||||
|
for(iloop = 0; iloop < 2; ++iloop) {
|
||||||
|
if(!Feb_Interface_ReadRegister(addr[iloop], offset, ®Val)) {
|
||||||
|
cprintf(RED, "Could not read back %s %s interrupt subframe\n", isTop, side[iloop]);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
value[iloop] = (regVal & DAQ_REG_HRDWRE_INTRRPT_SF_MSK) >> DAQ_REG_HRDWRE_INTRRPT_SF_OFST;
|
||||||
}
|
}
|
||||||
|
|
||||||
// left
|
|
||||||
addr = top ? Module_GetTopLeftAddress (&modules[1]) : Module_GetBottomLeftAddress (&modules[1]);
|
|
||||||
if (val >= 0) {
|
|
||||||
if(!Feb_Interface_ReadRegister(addr, offset, &lvalue)) {
|
|
||||||
cprintf(RED,"Could not read %s left interrupt subframe\n", top ? "top" : "bottom");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
uint32_t data = ((val == 0) ? (lvalue &~ DAQ_REG_HRDWRE_INTRRPT_SF_MSK) : (lvalue | DAQ_REG_HRDWRE_INTRRPT_SF_MSK));
|
|
||||||
if(!Feb_Interface_WriteRegister(addr, offset, data, 0, 0)) {
|
|
||||||
cprintf(RED,"Could not write 0x%x to %s left interrupt subframe addr 0x%x\n", data, top ? "top" : "bottom", offset);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(!Feb_Interface_ReadRegister(addr, offset, &lvalue)) {
|
|
||||||
cprintf(RED,"Could not read back %s left interrupt subframe\n", top ? "top" : "bottom");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
// inconsistent
|
// inconsistent
|
||||||
if (lvalue != rvalue) {
|
if (value[0] != value[1]) {
|
||||||
cprintf(RED, "Inconsistent values of interrupt subframe betweeen left and right\n");
|
cprintf(RED, "Inconsistent values of interrupt subframe betweeen left %d and right %d\n", value[0], value[1]);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return (lvalue & DAQ_REG_HRDWRE_INTRRPT_SF_MSK) >> DAQ_REG_HRDWRE_INTRRPT_SF_OFST;
|
return value[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
int Feb_Control_SetQuad(int val) {
|
int Feb_Control_SetQuad(int val) {
|
||||||
// no bottom for quad
|
// no bottom for quad
|
||||||
if (!Module_TopAddressIsValid(&modules[1])) {
|
if (!Module_TopAddressIsValid(&modules[1])) {
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
uint32_t offset = DAQ_REG_HRDWRE;
|
uint32_t offset = DAQ_REG_HRDWRE;
|
||||||
if (val >= 0) {
|
printf("Setting Quad to %d in Feb\n", val);
|
||||||
printf("Setting Quad to %d in Feb\n", val);
|
unsigned int addr = Module_GetTopRightAddress (&modules[1]);
|
||||||
unsigned int addr = Module_GetTopRightAddress (&modules[1]);
|
uint32_t regVal = 0;
|
||||||
uint32_t rvalue = 0;
|
if(!Feb_Interface_ReadRegister(addr, offset, ®Val)) {
|
||||||
if(!Feb_Interface_ReadRegister(addr, offset, &rvalue)) {
|
cprintf(RED, "Could not read top right quad reg\n");
|
||||||
cprintf(RED,"Could not read top right quad reg\n");
|
return 0;
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
uint32_t data = ((val == 0) ? (rvalue &~ DAQ_REG_HRDWRE_OW_MSK) : ((rvalue | DAQ_REG_HRDWRE_OW_MSK) &~ DAQ_REG_HRDWRE_TOP_MSK));
|
|
||||||
if(!Feb_Interface_WriteRegister(addr, offset, data, 0, 0)) {
|
|
||||||
cprintf(RED,"Could not write 0x%x to top right quad addr 0x%x\n", data, offset);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return 0;
|
uint32_t data = ((val == 0) ? (regVal &~ DAQ_REG_HRDWRE_OW_MSK) : ((regVal | DAQ_REG_HRDWRE_OW_MSK) &~ DAQ_REG_HRDWRE_TOP_MSK));
|
||||||
|
if(!Feb_Interface_WriteRegister(addr, offset, data, 0, 0)) {
|
||||||
|
cprintf(RED, "Could not write 0x%x to top right quad addr 0x%x\n", data, offset);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uint32_t Feb_Control_WriteRegister(uint32_t offset, uint32_t data) {
|
int Feb_Control_WriteRegister(uint32_t offset, uint32_t data) {
|
||||||
uint32_t actualOffset = offset;
|
uint32_t actualOffset = offset;
|
||||||
int left = 0;
|
char side[2][10] = {"right", "left"};
|
||||||
int right = 0;
|
char isTop[10]; strcpy(isTop, Module_TopAddressIsValid(&modules[1]) ? "top" : "bottom");
|
||||||
|
unsigned int addr[2];
|
||||||
|
addr[0] = Module_TopAddressIsValid(&modules[1]) ? Module_GetTopRightAddress (&modules[1]) : Module_GetBottomRightAddress (&modules[1]);
|
||||||
|
addr[1] = Module_TopAddressIsValid(&modules[1]) ? Module_GetTopLeftAddress (&modules[1]) : Module_GetBottomLeftAddress (&modules[1]);
|
||||||
|
|
||||||
|
int run[2] = {0, 0};
|
||||||
// both registers
|
// both registers
|
||||||
if (offset < 0x100) {
|
if (offset < 0x100) {
|
||||||
left = 1;
|
run[0] = 1;
|
||||||
right = 1;
|
run[1] = 1;
|
||||||
}
|
}
|
||||||
// right registers only
|
// right registers only
|
||||||
else if (offset >= 0x200) {
|
else if (offset >= 0x200) {
|
||||||
right = 1;
|
run[0] = 1;
|
||||||
actualOffset = offset - 0x200;
|
actualOffset = offset - 0x200;
|
||||||
} else {
|
}
|
||||||
left = 1;
|
// left registers only
|
||||||
|
else {
|
||||||
|
run[1] = 1;
|
||||||
actualOffset = offset - 0x100;
|
actualOffset = offset - 0x100;
|
||||||
}
|
}
|
||||||
|
|
||||||
int top = Module_TopAddressIsValid(&modules[1]) ? 1 : 0;
|
int iloop = 0;
|
||||||
unsigned int addr = top ? Module_GetTopRightAddress (&modules[1]) : Module_GetBottomRightAddress (&modules[1]);
|
for(iloop = 0; iloop < 2; ++iloop) {
|
||||||
if (right) {
|
if(run[iloop]) {
|
||||||
if(!Feb_Interface_WriteRegister(addr,actualOffset, data,0, 0)) {
|
printf("Writing 0x%x to %s %s 0x%x\n", data, isTop, side[iloop], actualOffset);
|
||||||
cprintf(RED,"Could not write 0x%x to %s right addr 0x%x\n", data, top ? "top" : "bottom", actualOffset);
|
if(!Feb_Interface_WriteRegister(addr[iloop],actualOffset, data, 0, 0)) {
|
||||||
}
|
cprintf(RED, "Could not write 0x%x to %s %s addr 0x%x\n", data, isTop, side[iloop], actualOffset);
|
||||||
}
|
return 0;
|
||||||
addr = top ? Module_GetTopLeftAddress (&modules[1]) : Module_GetBottomLeftAddress (&modules[1]);
|
}
|
||||||
if (left) {
|
|
||||||
if(!Feb_Interface_WriteRegister(addr,actualOffset, data,0, 0)) {
|
|
||||||
cprintf(RED,"Could not write 0x%x to %s left addr 0x%x\n", data, top ? "top" : "bottom", actualOffset);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return Feb_Control_ReadRegister(offset);
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uint32_t Feb_Control_ReadRegister(uint32_t offset) {
|
int Feb_Control_ReadRegister(uint32_t offset, uint32_t* retval) {
|
||||||
uint32_t actualOffset = offset;
|
uint32_t actualOffset = offset;
|
||||||
int left = 0;
|
char side[2][10] = {"right", "left"};
|
||||||
int right = 0;
|
char isTop[10]; strcpy(isTop, Module_TopAddressIsValid(&modules[1]) ? "top" : "bottom");
|
||||||
|
unsigned int addr[2];
|
||||||
|
addr[0] = Module_TopAddressIsValid(&modules[1]) ? Module_GetTopRightAddress (&modules[1]) : Module_GetBottomRightAddress (&modules[1]);
|
||||||
|
addr[1] = Module_TopAddressIsValid(&modules[1]) ? Module_GetTopLeftAddress (&modules[1]) : Module_GetBottomLeftAddress (&modules[1]);
|
||||||
|
uint32_t value[2] = {0, 0};
|
||||||
|
|
||||||
|
int run[2] = {0, 0};
|
||||||
// both registers
|
// both registers
|
||||||
if (offset < 0x100) {
|
if (offset < 0x100) {
|
||||||
left = 1;
|
run[0] = 1;
|
||||||
right = 1;
|
run[1] = 1;
|
||||||
}
|
}
|
||||||
// right registers only
|
// right registers only
|
||||||
else if (offset >= 0x200) {
|
else if (offset >= 0x200) {
|
||||||
right = 1;
|
run[0] = 1;
|
||||||
actualOffset = offset - 0x200;
|
actualOffset = offset - 0x200;
|
||||||
} else {
|
}
|
||||||
left = 1;
|
// left registers only
|
||||||
|
else {
|
||||||
|
run[1] = 1;
|
||||||
actualOffset = offset - 0x100;
|
actualOffset = offset - 0x100;
|
||||||
}
|
}
|
||||||
uint32_t lvalue=0;
|
|
||||||
uint32_t rvalue=0;
|
|
||||||
int top = Module_TopAddressIsValid(&modules[1]) ? 1 : 0;
|
|
||||||
|
|
||||||
unsigned int addr = top ? Module_GetTopRightAddress (&modules[1]) : Module_GetBottomRightAddress (&modules[1]);
|
int iloop = 0;
|
||||||
if (right) {
|
for(iloop = 0; iloop < 2; ++iloop) {
|
||||||
if(!Feb_Interface_ReadRegister(addr, actualOffset, &rvalue)) {
|
if(run[iloop]) {
|
||||||
cprintf(RED,"Could not read %s right addr 0x%x\n", top ? "top" : "bottom", actualOffset);
|
if(!Feb_Interface_ReadRegister(addr[iloop],actualOffset, &value[iloop])) {
|
||||||
return -1;
|
cprintf(RED, "Could not read from %s %s addr 0x%x\n", isTop, side[iloop], actualOffset);
|
||||||
}
|
return 0;
|
||||||
printf("Read %s right addr: 0x%08x\n", top ? "top" : "bottom", rvalue);
|
}
|
||||||
if (!left) {
|
printf("Read 0x%x from %s %s 0x%x\n", value[iloop], isTop, side[iloop], actualOffset);
|
||||||
return rvalue;
|
*retval = value[iloop];
|
||||||
|
// if not the other (left, not right OR right, not left), return the value
|
||||||
|
if (!run[iloop ? 0 : 1]) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
addr = top ? Module_GetTopLeftAddress (&modules[1]) : Module_GetBottomLeftAddress (&modules[1]);
|
// Inconsistent values
|
||||||
if(left) {
|
if (value[0] != value[1]) {
|
||||||
if(!Feb_Interface_ReadRegister(addr, actualOffset, &lvalue)) {
|
cprintf(RED, "Inconsistent values read from left 0x%x and right 0x%x\n", value[0], value[1]);
|
||||||
cprintf(RED,"Could not read %s left addr 0x%x\n", top ? "top" : "bottom", actualOffset);
|
return 0;
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
printf("Read %s left addr: 0x%08x\n", top ? "top" : "bottom", lvalue);
|
|
||||||
if (!right) {
|
|
||||||
return lvalue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (lvalue != rvalue) {
|
return 1;
|
||||||
cprintf(RED, "Inconsistent values betweeen left and right\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return lvalue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -204,9 +204,10 @@ int Feb_Control_GetModuleNumber();
|
|||||||
int64_t Feb_Control_GetSubMeasuredPeriod();
|
int64_t Feb_Control_GetSubMeasuredPeriod();
|
||||||
|
|
||||||
int Feb_Control_SoftwareTrigger();
|
int Feb_Control_SoftwareTrigger();
|
||||||
int Feb_Control_InterruptSubframe(int val);
|
int Feb_Control_SetInterruptSubframe(int val);
|
||||||
|
int Feb_Control_GetInterruptSubframe();
|
||||||
int Feb_Control_SetQuad(int val);
|
int Feb_Control_SetQuad(int val);
|
||||||
|
|
||||||
uint32_t Feb_Control_WriteRegister(uint32_t offset, uint32_t data);
|
int Feb_Control_WriteRegister(uint32_t offset, uint32_t data);
|
||||||
uint32_t Feb_Control_ReadRegister(uint32_t offset);
|
int Feb_Control_ReadRegister(uint32_t offset, uint32_t* retval);
|
||||||
#endif
|
#endif
|
||||||
|
Binary file not shown.
@ -1,9 +1,9 @@
|
|||||||
Path: slsDetectorsPackage/slsDetectorSoftware/eigerDetectorServer
|
Path: slsDetectorsPackage/slsDetectorSoftware/eigerDetectorServer
|
||||||
URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
||||||
Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
||||||
Repsitory UUID: 27f3af53657b744f43b79f9751909ae4e289ad29
|
Repsitory UUID: d981e1b8e558d3f576038f374d6eddcbbf5af48e
|
||||||
Revision: 354
|
Revision: 356
|
||||||
Branch: 4.1.0-rc
|
Branch: 4.1.0-rc
|
||||||
Last Changed Author: Dhanya_Thattil
|
Last Changed Author: Dhanya_Thattil
|
||||||
Last Changed Rev: 4121
|
Last Changed Rev: 4123
|
||||||
Last Changed Date: 2019-07-29 09:33:57.000000001 +0200 ./FebRegisterDefs.h
|
Last Changed Date: 2019-07-30 17:58:54.000000001 +0200 ./Beb.c
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git"
|
#define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git"
|
||||||
#define GITREPUUID "27f3af53657b744f43b79f9751909ae4e289ad29"
|
#define GITREPUUID "d981e1b8e558d3f576038f374d6eddcbbf5af48e"
|
||||||
#define GITAUTH "Dhanya_Thattil"
|
#define GITAUTH "Dhanya_Thattil"
|
||||||
#define GITREV 0x4121
|
#define GITREV 0x4123
|
||||||
#define GITDATE 0x20190729
|
#define GITDATE 0x20190730
|
||||||
#define GITBRANCH "4.1.0-rc"
|
#define GITBRANCH "4.1.0-rc"
|
||||||
|
@ -486,19 +486,25 @@ void setupDetector() {
|
|||||||
|
|
||||||
|
|
||||||
/* advanced read/write reg */
|
/* advanced read/write reg */
|
||||||
uint32_t writeRegister(uint32_t offset, uint32_t data) {
|
int writeRegister(uint32_t offset, uint32_t data) {
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
return 0;
|
return OK;
|
||||||
#else
|
#else
|
||||||
return Feb_Control_WriteRegister(offset, data);
|
if(!Feb_Control_WriteRegister(offset, data)) {
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
return OK;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t readRegister(uint32_t offset) {
|
int readRegister(uint32_t offset, uint32_t* retval) {
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
return 0;
|
return OK;
|
||||||
#else
|
#else
|
||||||
return Feb_Control_ReadRegister(offset);
|
if(!Feb_Control_ReadRegister(offset, retval)) {
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
return OK;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1219,17 +1225,45 @@ int setDetectorPosition(int pos[]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int setQuad(int val) {
|
|
||||||
int ret = Beb_SetQuad(val);
|
int setQuad(int value) {
|
||||||
if (Feb_Control_SetQuad(val) == -1)
|
if(value < 0)
|
||||||
return -1;
|
return FAIL;
|
||||||
return ret;
|
#ifndef VIRTUAL
|
||||||
|
Beb_SetQuad(value);
|
||||||
|
if(!Feb_Control_SetQuad(value)) {
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int setInterruptSubframe(int val) {
|
int getQuad() {
|
||||||
return Feb_Control_InterruptSubframe(val);
|
#ifdef VIRTUAL
|
||||||
|
return 0;
|
||||||
|
#else
|
||||||
|
return Beb_GetQuad();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int setInterruptSubframe(int value) {
|
||||||
|
if(value < 0)
|
||||||
|
return FAIL;
|
||||||
|
#ifndef VIRTUAL
|
||||||
|
if(!Feb_Control_SetInterruptSubframe(value)) {
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
return OK;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
int getInterruptSubframe() {
|
||||||
|
#ifdef VIRTUAL
|
||||||
|
return 0;
|
||||||
|
#else
|
||||||
|
return Feb_Control_GetInterruptSubframe();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -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 writeRegister(u_int32_t offset, u_int32_t data); // blackfin.h
|
||||||
extern u_int32_t readRegister(u_int32_t offset); // blackfin.h
|
extern u_int32_t readRegister(u_int32_t offset); // blackfin.h
|
||||||
#else
|
#else
|
||||||
uint32_t writeRegister(uint32_t offset, uint32_t data);
|
int writeRegister(uint32_t offset, uint32_t data);
|
||||||
uint32_t readRegister(uint32_t offset);
|
int readRegister(uint32_t offset, uint32_t* retval);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -196,7 +196,9 @@ int setDetectorPosition(int pos[]);
|
|||||||
#endif
|
#endif
|
||||||
#ifdef EIGERD
|
#ifdef EIGERD
|
||||||
int setQuad(int val);
|
int setQuad(int val);
|
||||||
|
int getQuad();
|
||||||
int setInterruptSubframe(int val);
|
int setInterruptSubframe(int val);
|
||||||
|
int getInterruptSubframe();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -1458,8 +1458,22 @@ int write_register(int file_des) {
|
|||||||
#ifdef VERBOSE
|
#ifdef VERBOSE
|
||||||
printf("writing to register 0x%x data 0x%x\n", addr, val);
|
printf("writing to register 0x%x data 0x%x\n", addr, val);
|
||||||
#endif
|
#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);
|
retval=writeRegister(addr,val);
|
||||||
if (retval!=val) {
|
#endif
|
||||||
|
if (ret == OK && retval!=val) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
sprintf(mess,"Writing to register 0x%x failed: wrote 0x%x but read 0x%x\n", addr, val, retval);
|
sprintf(mess,"Writing to register 0x%x failed: wrote 0x%x but read 0x%x\n", addr, val, retval);
|
||||||
cprintf(RED, "Warning: %s", mess);
|
cprintf(RED, "Warning: %s", mess);
|
||||||
@ -1509,8 +1523,16 @@ int read_register(int file_des) {
|
|||||||
printf("reading register 0x%x\n", addr);
|
printf("reading register 0x%x\n", addr);
|
||||||
#endif
|
#endif
|
||||||
#ifdef SLS_DETECTOR_FUNCTION_LIST
|
#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);
|
retval=readRegister(addr);
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
#ifdef VERBOSE
|
#ifdef VERBOSE
|
||||||
printf("Returned value 0x%x\n", retval);
|
printf("Returned value 0x%x\n", retval);
|
||||||
#endif
|
#endif
|
||||||
@ -5962,8 +5984,13 @@ int set_quad(int file_des) {
|
|||||||
#ifdef VERBOSE
|
#ifdef VERBOSE
|
||||||
printf("Setting Quad :%d \n",arg);
|
printf("Setting Quad :%d \n",arg);
|
||||||
#endif
|
#endif
|
||||||
retval=setQuad(arg);
|
if(arg != -1 && setQuad(arg) == FAIL) {
|
||||||
if((arg != -1) && (retval != arg)) {
|
ret=FAIL;
|
||||||
|
strcpy(mess, "setting quad failed\n");
|
||||||
|
cprintf(RED, "Warning: %s", mess);
|
||||||
|
}
|
||||||
|
retval = getQuad();
|
||||||
|
if(ret == OK && (arg != -1) && (retval != arg)) {
|
||||||
ret=FAIL;
|
ret=FAIL;
|
||||||
cprintf(RED, "Warning: %s", mess);
|
cprintf(RED, "Warning: %s", mess);
|
||||||
}
|
}
|
||||||
@ -6021,12 +6048,18 @@ int set_interrupt_subframe(int file_des) {
|
|||||||
#ifdef VERBOSE
|
#ifdef VERBOSE
|
||||||
printf("Setting Interrupt subframe :%d \n",arg);
|
printf("Setting Interrupt subframe :%d \n",arg);
|
||||||
#endif
|
#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
|
#ifdef VERBOSE
|
||||||
printf("retval Interrupt subframe :%d \n",retval);
|
printf("retval Interrupt subframe :%d \n",retval);
|
||||||
#endif
|
#endif
|
||||||
if((arg != -1) && (retval != arg)) {
|
if(ret == OK && (arg != -1) && (retval != arg)) {
|
||||||
ret=FAIL;
|
ret=FAIL;
|
||||||
|
sprintf(mess, "setting interrupt subframe failed. Set %d, got %d\n", arg, retval);
|
||||||
cprintf(RED, "Warning: %s", mess);
|
cprintf(RED, "Warning: %s", mess);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user