mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-21 11:20:04 +02:00
g2: setting serialnumber allowed
This commit is contained in:
parent
9a777b13bb
commit
6f54402aba
@ -66,6 +66,7 @@ int64_t burstPeriodReg = 0;
|
||||
int filterResistor = 0;
|
||||
int cdsGain = 0;
|
||||
int detPos[2] = {};
|
||||
int64_t serialNumber = -1;
|
||||
|
||||
int isInitCheckDone() { return initCheckDone; }
|
||||
|
||||
@ -281,12 +282,20 @@ u_int16_t getHardwareVersionNumber() {
|
||||
}
|
||||
|
||||
u_int32_t getDetectorNumber() {
|
||||
if (serialNumber != -1) {
|
||||
return serialNumber;
|
||||
}
|
||||
#ifdef VIRTUAL
|
||||
return 0;
|
||||
#endif
|
||||
return bus_r(MCB_SERIAL_NO_REG);
|
||||
}
|
||||
|
||||
void setSerialNumber(int64_t arg) {
|
||||
LOG(logINFOBLUE, ("Setting Serial Number to 0x%llx\n", (long long int)arg));
|
||||
serialNumber = arg;
|
||||
}
|
||||
|
||||
u_int64_t getDetectorMAC() {
|
||||
#ifdef VIRTUAL
|
||||
return 0;
|
||||
|
@ -93,6 +93,9 @@ int getChipVersion();
|
||||
void readDetectorNumber();
|
||||
#endif
|
||||
u_int32_t getDetectorNumber();
|
||||
#ifdef GOTTHARD2D
|
||||
void setSerialNumber(int64_t arg);
|
||||
#endif
|
||||
u_int64_t getDetectorMAC();
|
||||
u_int32_t getDetectorIP();
|
||||
#ifdef GOTTHARDD
|
||||
|
@ -267,3 +267,4 @@ int set_adc_pipeline(int);
|
||||
int get_adc_pipeline(int);
|
||||
int set_dbit_pipeline(int);
|
||||
int get_dbit_pipeline(int);
|
||||
int set_serial_number(int);
|
@ -392,6 +392,7 @@ void function_table() {
|
||||
flist[F_GET_ADC_PIPELINE] = &get_adc_pipeline;
|
||||
flist[F_SET_DBIT_PIPELINE] = &set_dbit_pipeline;
|
||||
flist[F_GET_DBIT_PIPELINE] = &get_dbit_pipeline;
|
||||
flist[F_SET_SERIAL_NUMBER] = &set_serial_number;
|
||||
|
||||
// check
|
||||
if (NUM_DET_FUNCTIONS >= RECEIVER_ENUM_START) {
|
||||
@ -670,6 +671,23 @@ int get_serial_number(int file_des) {
|
||||
return Server_SendResult(file_des, INT64, &retval, sizeof(retval));
|
||||
}
|
||||
|
||||
int set_serial_number(int file_des) {
|
||||
ret = OK;
|
||||
memset(mess, 0, sizeof(mess));
|
||||
int64_t arg = -1;
|
||||
|
||||
if (receiveData(file_des, &arg, sizeof(arg), INT64) < 0)
|
||||
return printSocketReadError();
|
||||
LOG(logDEBUG1, ("Setting serial number to 0x%llx\n", (long long int)arg));
|
||||
|
||||
#ifndef GOTTHARD2D
|
||||
functionNotImplemented();
|
||||
#else
|
||||
setSerialNumber(arg);
|
||||
#endif
|
||||
return Server_SendResult(file_des, INT64, NULL, 0);
|
||||
}
|
||||
|
||||
int set_firmware_test(int file_des) {
|
||||
ret = OK;
|
||||
memset(mess, 0, sizeof(mess));
|
||||
@ -4250,7 +4268,7 @@ int copy_detector_server(int file_des) {
|
||||
strcat(cmd, sname);
|
||||
executeCommand(cmd, retvals, logDEBUG1);
|
||||
|
||||
#if !defined(GOTTHAR2D) && !defined(MYTHEN3D)
|
||||
#if !defined(GOTTHARD2D) && !defined(MYTHEN3D)
|
||||
// edit /etc/inittab
|
||||
// find line numbers in /etc/inittab where DetectorServer
|
||||
strcpy(cmd, "sed -n '/DetectorServer/=' /etc/inittab");
|
||||
@ -7796,7 +7814,7 @@ int get_filter_resistor(int file_des) {
|
||||
|
||||
LOG(logDEBUG1, ("Getting filter resistor\n"));
|
||||
|
||||
#if !defined(GOTTHAR2D) && !defined(JUNGFRAUD)
|
||||
#if !defined(GOTTHARD2D) && !defined(JUNGFRAUD)
|
||||
functionNotImplemented();
|
||||
#else
|
||||
// get only
|
||||
@ -7825,7 +7843,7 @@ int set_filter_resistor(int file_des) {
|
||||
return printSocketReadError();
|
||||
LOG(logINFO, ("Setting filter resistor: %u\n", arg));
|
||||
|
||||
#if !defined(GOTTHAR2D) && !defined(JUNGFRAUD)
|
||||
#if !defined(GOTTHARD2D) && !defined(JUNGFRAUD)
|
||||
functionNotImplemented();
|
||||
#else
|
||||
// only set
|
||||
|
@ -80,6 +80,9 @@ class Detector {
|
||||
|
||||
Result<int64_t> getSerialNumber(Positions pos = {}) const;
|
||||
|
||||
/** [Gotthard2] */
|
||||
void setSerialNumber(const int64_t value, Positions pos = {});
|
||||
|
||||
Result<int64_t> getReceiverVersion(Positions pos = {}) const;
|
||||
|
||||
/** Options: EIGER, JUNGFRAU, GOTTHARD, MOENCH, MYTHEN3, GOTTHARD2,
|
||||
|
@ -257,6 +257,32 @@ std::string CmdProxy::FirmwareVersion(int action) {
|
||||
return os.str();
|
||||
}
|
||||
|
||||
std::string CmdProxy::SerialNumber(int action) {
|
||||
std::ostringstream os;
|
||||
os << cmd << ' ';
|
||||
if (action == slsDetectorDefs::HELP_ACTION)
|
||||
os << "\n\tSerial number of detector.\n\t[Gotthard2] Can overwrite, "
|
||||
"but must do so for every detector server restart."
|
||||
<< '\n';
|
||||
else if (action == slsDetectorDefs::GET_ACTION) {
|
||||
if (!args.empty()) {
|
||||
WrongNumberOfParameters(0);
|
||||
}
|
||||
auto t = det->getSerialNumber(std::vector<int>{det_id});
|
||||
os << OutStringHex(t) << '\n';
|
||||
} else if (action == slsDetectorDefs::PUT_ACTION) {
|
||||
if (args.size() != 1) {
|
||||
WrongNumberOfParameters(1);
|
||||
}
|
||||
det->setSerialNumber(StringTo<int64_t>(args[0]),
|
||||
std::vector<int>{det_id});
|
||||
os << args[0] << '\n';
|
||||
} else {
|
||||
throw sls::RuntimeError("Unknown action");
|
||||
}
|
||||
return os.str();
|
||||
}
|
||||
|
||||
std::string CmdProxy::Versions(int action) {
|
||||
std::ostringstream os;
|
||||
os << cmd << ' ';
|
||||
|
@ -758,7 +758,7 @@ class CmdProxy {
|
||||
{"firmwareversion", &CmdProxy::FirmwareVersion},
|
||||
{"detectorserverversion", &CmdProxy::detectorserverversion},
|
||||
{"rx_version", &CmdProxy::rx_version},
|
||||
{"serialnumber", &CmdProxy::serialnumber},
|
||||
{"serialnumber", &CmdProxy::SerialNumber},
|
||||
{"type", &CmdProxy::type},
|
||||
{"nmod", &CmdProxy::nmod},
|
||||
{"detsize", &CmdProxy::DetectorSize},
|
||||
@ -1078,6 +1078,7 @@ class CmdProxy {
|
||||
std::string Hostname(int action);
|
||||
std::string VirtualServer(int action);
|
||||
std::string FirmwareVersion(int action);
|
||||
std::string SerialNumber(int action);
|
||||
std::string Versions(int action);
|
||||
std::string PackageVersion(int action);
|
||||
std::string ClientVersion(int action);
|
||||
@ -1191,9 +1192,6 @@ class CmdProxy {
|
||||
GET_COMMAND_HEX(rx_version, getReceiverVersion,
|
||||
"\n\tReceiver version in format [0xYYMMDD].");
|
||||
|
||||
GET_COMMAND_HEX(serialnumber, getSerialNumber,
|
||||
"\n\tSerial number of detector.");
|
||||
|
||||
GET_COMMAND(type, getDetectorType,
|
||||
"\n\tReturns detector type. Can be Eiger, Jungfrau, Gotthard, "
|
||||
"Moench, Mythen3, Gotthard2, ChipTestBoard");
|
||||
|
@ -119,6 +119,10 @@ Result<int64_t> Detector::getSerialNumber(Positions pos) const {
|
||||
return pimpl->Parallel(&Module::getSerialNumber, pos);
|
||||
}
|
||||
|
||||
void Detector::setSerialNumber(const int64_t value, Positions pos) {
|
||||
pimpl->Parallel(&Module::setSerialNumber, pos, value);
|
||||
}
|
||||
|
||||
Result<int64_t> Detector::getReceiverVersion(Positions pos) const {
|
||||
return pimpl->Parallel(&Module::getReceiverSoftwareVersion, pos);
|
||||
}
|
||||
|
@ -94,6 +94,10 @@ int64_t Module::getSerialNumber() const {
|
||||
return sendToDetector<int64_t>(F_GET_SERIAL_NUMBER);
|
||||
}
|
||||
|
||||
void Module::setSerialNumber(const int64_t value) {
|
||||
return sendToDetector(F_SET_SERIAL_NUMBER, value, nullptr);
|
||||
}
|
||||
|
||||
int64_t Module::getReceiverSoftwareVersion() const {
|
||||
if (shm()->useReceiverFlag) {
|
||||
return sendToReceiver<int64_t>(F_GET_RECEIVER_VERSION);
|
||||
|
@ -90,6 +90,7 @@ class Module : public virtual slsDetectorDefs {
|
||||
int64_t getFirmwareVersion() const;
|
||||
int64_t getDetectorServerVersion() const;
|
||||
int64_t getSerialNumber() const;
|
||||
void setSerialNumber(const int64_t value);
|
||||
int64_t getReceiverSoftwareVersion() const;
|
||||
static detectorType getTypeFromDetector(const std::string &hostname,
|
||||
int cport = DEFAULT_PORTNO);
|
||||
|
@ -105,7 +105,19 @@ TEST_CASE("serialnumber", "[.cmd]") {
|
||||
Detector det;
|
||||
CmdProxy proxy(&det);
|
||||
REQUIRE_NOTHROW(proxy.Call("serialnumber", {}, -1, GET));
|
||||
REQUIRE_THROWS(proxy.Call("serialnumber", {"0"}, -1, PUT));
|
||||
if (det.getDetectorType().squash() == defs::GOTTHARD2) {
|
||||
auto prev_val = det.getSerialNumber();
|
||||
std::ostringstream oss1, oss2;
|
||||
proxy.Call("serialnumber", {"0x5d"}, -1, PUT, oss1);
|
||||
REQUIRE(oss1.str() == "serialnumber 0x5d\n");
|
||||
proxy.Call("serialnumber", {}, -1, GET, oss2);
|
||||
REQUIRE(oss2.str() == "serialnumber 0x5d\n");
|
||||
for (int i = 0; i != det.size(); ++i) {
|
||||
det.setSerialNumber(prev_val[i], {i});
|
||||
}
|
||||
} else {
|
||||
REQUIRE_THROWS(proxy.Call("serialnumber", {"0"}, -1, PUT));
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE("type", "[.cmd]") {
|
||||
|
@ -243,6 +243,7 @@ enum detFuncs {
|
||||
F_GET_ADC_PIPELINE,
|
||||
F_SET_DBIT_PIPELINE,
|
||||
F_GET_DBIT_PIPELINE,
|
||||
F_SET_SERIAL_NUMBER,
|
||||
|
||||
NUM_DET_FUNCTIONS,
|
||||
RECEIVER_ENUM_START = 256, /**< detector function should not exceed this
|
||||
@ -593,6 +594,7 @@ const char* getFunctionNameFromEnum(enum detFuncs func) {
|
||||
case F_GET_ADC_PIPELINE: return "F_GET_ADC_PIPELINE";
|
||||
case F_SET_DBIT_PIPELINE: return "F_SET_DBIT_PIPELINE";
|
||||
case F_GET_DBIT_PIPELINE: return "F_GET_DBIT_PIPELINE";
|
||||
case F_SET_SERIAL_NUMBER: return "F_SET_SERIAL_NUMBER";
|
||||
|
||||
case NUM_DET_FUNCTIONS: return "NUM_DET_FUNCTIONS";
|
||||
case RECEIVER_ENUM_START: return "RECEIVER_ENUM_START";
|
||||
|
Loading…
x
Reference in New Issue
Block a user