mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-23 10:07:59 +02:00
Dev/reg bit change no validate (#970)
- do not validate write reg, setbit and clearbit by default anymore - --validate will force validation on the bitmask or entire reg - remove return value for write reg (across server to client, but thankfully not in the Detector class) - extend validation into writereg, setbit and clearbit for Eiger (always special) - need to check python (TODO) - missed the rx_zmqip implementations in detector.h and python bindings
This commit is contained in:
@ -1251,7 +1251,8 @@ int Feb_Control_Disable16bitConversion(int disable) {
|
||||
regval &= ~bitmask;
|
||||
}
|
||||
|
||||
if (!Feb_Control_WriteRegister_BitMask(DAQ_REG_HRDWRE, regval, bitmask)) {
|
||||
if (!Feb_Control_WriteRegister_BitMask(DAQ_REG_HRDWRE, regval, bitmask,
|
||||
1)) {
|
||||
LOG(logERROR, ("Could not %s 16 bit expansion (bit mode)\n",
|
||||
(disable ? "disable" : "enable")));
|
||||
return 0;
|
||||
@ -1637,7 +1638,7 @@ int Feb_Control_SetChipSignalsToTrimQuad(int enable) {
|
||||
regval &= ~(DAQ_REG_HRDWRE_PROGRAM_MSK | DAQ_REG_HRDWRE_M8_MSK);
|
||||
}
|
||||
|
||||
if (!Feb_Control_WriteRegister(righOffset, regval)) {
|
||||
if (!Feb_Control_WriteRegister(righOffset, regval, 1)) {
|
||||
LOG(logERROR, ("Could not set chip signals to trim quad\n"));
|
||||
return 0;
|
||||
}
|
||||
@ -1666,8 +1667,10 @@ int Feb_Control_GetReadNRows() {
|
||||
return regVal;
|
||||
}
|
||||
|
||||
int Feb_Control_WriteRegister(uint32_t offset, uint32_t data) {
|
||||
return Feb_Control_WriteRegister_BitMask(offset, data, BIT32_MSK);
|
||||
int Feb_Control_WriteRegister(uint32_t offset, uint32_t data, int validate) {
|
||||
if (!Feb_Control_WriteRegister_BitMask(offset, data, BIT32_MSK, validate))
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int Feb_Control_ReadRegister(uint32_t offset, uint32_t *retval) {
|
||||
@ -1675,7 +1678,7 @@ int Feb_Control_ReadRegister(uint32_t offset, uint32_t *retval) {
|
||||
}
|
||||
|
||||
int Feb_Control_WriteRegister_BitMask(uint32_t offset, uint32_t data,
|
||||
uint32_t bitmask) {
|
||||
uint32_t bitmask, int validate) {
|
||||
uint32_t actualOffset = offset;
|
||||
char side[2][10] = {"right", "left"};
|
||||
unsigned int addr[2] = {Feb_Control_rightAddress, Feb_Control_leftAddress};
|
||||
@ -1720,21 +1723,24 @@ int Feb_Control_WriteRegister_BitMask(uint32_t offset, uint32_t data,
|
||||
writeVal, side[iloop], actualOffset));
|
||||
return 0;
|
||||
}
|
||||
writeVal &= bitmask;
|
||||
|
||||
uint32_t readVal = 0;
|
||||
if (!Feb_Interface_ReadRegister(addr[iloop], actualOffset,
|
||||
&readVal)) {
|
||||
return 0;
|
||||
}
|
||||
readVal &= bitmask;
|
||||
if (validate) {
|
||||
|
||||
if (writeVal != readVal) {
|
||||
LOG(logERROR,
|
||||
("Could not write %s addr 0x%x register. Wrote "
|
||||
"0x%x, read 0x%x (mask:0x%x)\n",
|
||||
side[iloop], actualOffset, writeVal, readVal, bitmask));
|
||||
return 0;
|
||||
uint32_t readVal = 0;
|
||||
if (!Feb_Interface_ReadRegister(addr[iloop], actualOffset,
|
||||
&readVal)) {
|
||||
return 0;
|
||||
}
|
||||
readVal &= bitmask;
|
||||
writeVal &= bitmask;
|
||||
if (writeVal != readVal) {
|
||||
LOG(logERROR,
|
||||
("Could not write %s addr 0x%x register. Wrote "
|
||||
"0x%x, read 0x%x (mask:0x%x)\n",
|
||||
side[iloop], actualOffset, writeVal, readVal,
|
||||
bitmask));
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -93,10 +93,10 @@ int Feb_Control_SetQuad(int val);
|
||||
int Feb_Control_SetChipSignalsToTrimQuad(int enable);
|
||||
int Feb_Control_SetReadNRows(int value);
|
||||
int Feb_Control_GetReadNRows();
|
||||
int Feb_Control_WriteRegister(uint32_t offset, uint32_t data);
|
||||
int Feb_Control_WriteRegister(uint32_t offset, uint32_t data, int validate);
|
||||
int Feb_Control_ReadRegister(uint32_t offset, uint32_t *retval);
|
||||
int Feb_Control_WriteRegister_BitMask(uint32_t offset, uint32_t data,
|
||||
uint32_t bitmask);
|
||||
uint32_t bitmask, int validate);
|
||||
int Feb_Control_ReadRegister_BitMask(uint32_t offset, uint32_t *retval,
|
||||
uint32_t bitmask);
|
||||
// pulsing
|
||||
|
Binary file not shown.
@ -883,12 +883,12 @@ int setDefaultDac(enum DACINDEX index, enum detectorSettings sett, int value) {
|
||||
}
|
||||
|
||||
/* advanced read/write reg */
|
||||
int writeRegister(uint32_t offset, uint32_t data) {
|
||||
int writeRegister(uint32_t offset, uint32_t data, int validate) {
|
||||
#ifdef VIRTUAL
|
||||
return OK;
|
||||
#else
|
||||
sharedMemory_lockLocalLink();
|
||||
if (!Feb_Control_WriteRegister(offset, data)) {
|
||||
if (!Feb_Control_WriteRegister(offset, data, validate)) {
|
||||
sharedMemory_unlockLocalLink();
|
||||
return FAIL;
|
||||
}
|
||||
@ -911,7 +911,7 @@ int readRegister(uint32_t offset, uint32_t *retval) {
|
||||
#endif
|
||||
}
|
||||
|
||||
int setBit(const uint32_t addr, const int nBit) {
|
||||
int setBit(const uint32_t addr, const int nBit, int validate) {
|
||||
#ifndef VIRTUAL
|
||||
uint32_t regval = 0;
|
||||
if (readRegister(addr, ®val) == FAIL) {
|
||||
@ -921,7 +921,7 @@ int setBit(const uint32_t addr, const int nBit) {
|
||||
uint32_t val = regval | bitmask;
|
||||
|
||||
sharedMemory_lockLocalLink();
|
||||
if (!Feb_Control_WriteRegister_BitMask(addr, val, bitmask)) {
|
||||
if (!Feb_Control_WriteRegister_BitMask(addr, val, bitmask, validate)) {
|
||||
sharedMemory_unlockLocalLink();
|
||||
return FAIL;
|
||||
}
|
||||
@ -930,7 +930,7 @@ int setBit(const uint32_t addr, const int nBit) {
|
||||
return OK;
|
||||
}
|
||||
|
||||
int clearBit(const uint32_t addr, const int nBit) {
|
||||
int clearBit(const uint32_t addr, const int nBit, int validate) {
|
||||
#ifndef VIRTUAL
|
||||
uint32_t regval = 0;
|
||||
if (readRegister(addr, ®val) == FAIL) {
|
||||
@ -940,7 +940,7 @@ int clearBit(const uint32_t addr, const int nBit) {
|
||||
uint32_t val = regval & ~bitmask;
|
||||
|
||||
sharedMemory_lockLocalLink();
|
||||
if (!Feb_Control_WriteRegister_BitMask(addr, val, bitmask)) {
|
||||
if (!Feb_Control_WriteRegister_BitMask(addr, val, bitmask, validate)) {
|
||||
sharedMemory_unlockLocalLink();
|
||||
return FAIL;
|
||||
}
|
||||
|
Reference in New Issue
Block a user