mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-22 22:40:02 +02:00
serialnumber fixed to point to mod id reg
This commit is contained in:
parent
8e6a0cbfda
commit
ff9eaaf3f3
@ -127,6 +127,7 @@
|
|||||||
|
|
||||||
#define MOD_ID_OFST (0)
|
#define MOD_ID_OFST (0)
|
||||||
#define MOD_ID_MSK (0x0000FFFF << MOD_ID_OFST)
|
#define MOD_ID_MSK (0x0000FFFF << MOD_ID_OFST)
|
||||||
|
#define MOD_MAX_VAL (0xFFFF)
|
||||||
|
|
||||||
/* ASIC registers --------------------------------------------------*/
|
/* ASIC registers --------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -66,7 +66,6 @@ int64_t burstPeriodReg = 0;
|
|||||||
int filterResistor = 0;
|
int filterResistor = 0;
|
||||||
int cdsGain = 0;
|
int cdsGain = 0;
|
||||||
int detPos[2] = {};
|
int detPos[2] = {};
|
||||||
int64_t serialNumber = -1;
|
|
||||||
|
|
||||||
int isInitCheckDone() { return initCheckDone; }
|
int isInitCheckDone() { return initCheckDone; }
|
||||||
|
|
||||||
@ -281,21 +280,18 @@ u_int16_t getHardwareVersionNumber() {
|
|||||||
MCB_SERIAL_NO_VRSN_OFST);
|
MCB_SERIAL_NO_VRSN_OFST);
|
||||||
}
|
}
|
||||||
|
|
||||||
u_int32_t getDetectorNumber() {
|
uint16_t getSerialNumber() {
|
||||||
if (serialNumber != -1) {
|
return ((bus_r(MOD_ID_REG) & MOD_ID_MSK) >> MOD_ID_OFST);
|
||||||
return serialNumber;
|
|
||||||
}
|
|
||||||
#ifdef VIRTUAL
|
|
||||||
return 0;
|
|
||||||
#endif
|
|
||||||
return bus_r(MCB_SERIAL_NO_REG);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void setSerialNumber(int64_t arg) {
|
void setSerialNumber(uint16_t arg) {
|
||||||
LOG(logINFOBLUE, ("Setting Serial Number to 0x%llx\n", (long long int)arg));
|
LOG(logINFOBLUE, ("Setting Serial Number to 0x%x\n", arg));
|
||||||
serialNumber = arg;
|
bus_w(MOD_ID_REG, bus_r(MOD_ID_REG) & ~MOD_ID_MSK);
|
||||||
|
bus_w(MOD_ID_REG, bus_r(MOD_ID_REG) | ((arg << MOD_ID_OFST) & MOD_ID_MSK));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int getMaxSerialNumber() { return MOD_MAX_VAL; }
|
||||||
|
|
||||||
u_int64_t getDetectorMAC() {
|
u_int64_t getDetectorMAC() {
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -94,7 +94,9 @@ void readDetectorNumber();
|
|||||||
#endif
|
#endif
|
||||||
u_int32_t getDetectorNumber();
|
u_int32_t getDetectorNumber();
|
||||||
#ifdef GOTTHARD2D
|
#ifdef GOTTHARD2D
|
||||||
void setSerialNumber(int64_t arg);
|
uint16_t getSerialNumber();
|
||||||
|
void setSerialNumber(uint16_t arg);
|
||||||
|
int getMaxSerialNumber();
|
||||||
#endif
|
#endif
|
||||||
u_int64_t getDetectorMAC();
|
u_int64_t getDetectorMAC();
|
||||||
u_int32_t getDetectorIP();
|
u_int32_t getDetectorIP();
|
||||||
|
@ -666,7 +666,11 @@ int get_serial_number(int file_des) {
|
|||||||
ret = OK;
|
ret = OK;
|
||||||
memset(mess, 0, sizeof(mess));
|
memset(mess, 0, sizeof(mess));
|
||||||
int64_t retval = -1;
|
int64_t retval = -1;
|
||||||
|
#ifdef GOTTHARD2D
|
||||||
|
retval = getSerialNumber();
|
||||||
|
#else
|
||||||
retval = getDetectorNumber();
|
retval = getDetectorNumber();
|
||||||
|
#endif
|
||||||
LOG(logDEBUG1, ("detector number retval: 0x%llx\n", (long long int)retval));
|
LOG(logDEBUG1, ("detector number retval: 0x%llx\n", (long long int)retval));
|
||||||
return Server_SendResult(file_des, INT64, &retval, sizeof(retval));
|
return Server_SendResult(file_des, INT64, &retval, sizeof(retval));
|
||||||
}
|
}
|
||||||
@ -683,7 +687,14 @@ int set_serial_number(int file_des) {
|
|||||||
#ifndef GOTTHARD2D
|
#ifndef GOTTHARD2D
|
||||||
functionNotImplemented();
|
functionNotImplemented();
|
||||||
#else
|
#else
|
||||||
|
if (arg > getMaxSerialNumber()) {
|
||||||
|
ret = FAIL;
|
||||||
|
sprintf(mess, "Could not set serial number. Max value: %d\n",
|
||||||
|
getMaxSerialNumber());
|
||||||
|
LOG(logERROR, (mess));
|
||||||
|
} else {
|
||||||
setSerialNumber(arg);
|
setSerialNumber(arg);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
return Server_SendResult(file_des, INT64, NULL, 0);
|
return Server_SendResult(file_des, INT64, NULL, 0);
|
||||||
}
|
}
|
||||||
|
@ -261,8 +261,7 @@ std::string CmdProxy::SerialNumber(int action) {
|
|||||||
std::ostringstream os;
|
std::ostringstream os;
|
||||||
os << cmd << ' ';
|
os << cmd << ' ';
|
||||||
if (action == slsDetectorDefs::HELP_ACTION)
|
if (action == slsDetectorDefs::HELP_ACTION)
|
||||||
os << "\n\tSerial number of detector.\n\t[Gotthard2] Can overwrite, "
|
os << "\n\tSerial number of detector.\n\t[Gotthard2] Can overwrite"
|
||||||
"but must do so for every detector server restart."
|
|
||||||
<< '\n';
|
<< '\n';
|
||||||
else if (action == slsDetectorDefs::GET_ACTION) {
|
else if (action == slsDetectorDefs::GET_ACTION) {
|
||||||
if (!args.empty()) {
|
if (!args.empty()) {
|
||||||
|
@ -107,11 +107,14 @@ TEST_CASE("serialnumber", "[.cmd]") {
|
|||||||
REQUIRE_NOTHROW(proxy.Call("serialnumber", {}, -1, GET));
|
REQUIRE_NOTHROW(proxy.Call("serialnumber", {}, -1, GET));
|
||||||
if (det.getDetectorType().squash() == defs::GOTTHARD2) {
|
if (det.getDetectorType().squash() == defs::GOTTHARD2) {
|
||||||
auto prev_val = det.getSerialNumber();
|
auto prev_val = det.getSerialNumber();
|
||||||
std::ostringstream oss1, oss2;
|
std::ostringstream oss1, oss2, oss3;
|
||||||
proxy.Call("serialnumber", {"0x5d"}, -1, PUT, oss1);
|
proxy.Call("serialnumber", {"0x5d"}, -1, PUT, oss1);
|
||||||
REQUIRE(oss1.str() == "serialnumber 0x5d\n");
|
REQUIRE(oss1.str() == "serialnumber 0x5d\n");
|
||||||
proxy.Call("serialnumber", {}, -1, GET, oss2);
|
proxy.Call("serialnumber", {}, -1, GET, oss2);
|
||||||
REQUIRE(oss2.str() == "serialnumber 0x5d\n");
|
REQUIRE(oss2.str() == "serialnumber 0x5d\n");
|
||||||
|
proxy.Call("serialnumber", {"0xffff"}, -1, PUT, oss3);
|
||||||
|
REQUIRE(oss3.str() == "serialnumber 0xffff\n");
|
||||||
|
REQUIRE_THROWS(proxy.Call("serialnumber", {"65536"}, -1, PUT));
|
||||||
for (int i = 0; i != det.size(); ++i) {
|
for (int i = 0; i != det.size(); ++i) {
|
||||||
det.setSerialNumber(prev_val[i], {i});
|
det.setSerialNumber(prev_val[i], {i});
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user