mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2026-02-07 10:48:41 +01:00
Read and write SPI for Xilinx CTB (#1381)
All checks were successful
Build on RHEL9 / build (push) Successful in 3m25s
Build on RHEL8 / build (push) Successful in 4m37s
Run Simulator Tests on local RHEL9 / build (push) Successful in 14m42s
Build on local RHEL9 / build (push) Successful in 1m26s
Run Simulator Tests on local RHEL8 / build (push) Successful in 17m0s
Build on local RHEL8 / build (push) Successful in 3m32s
All checks were successful
Build on RHEL9 / build (push) Successful in 3m25s
Build on RHEL8 / build (push) Successful in 4m37s
Run Simulator Tests on local RHEL9 / build (push) Successful in 14m42s
Build on local RHEL9 / build (push) Successful in 1m26s
Run Simulator Tests on local RHEL8 / build (push) Successful in 17m0s
Build on local RHEL8 / build (push) Successful in 3m32s
-readSpi and writeSpi in C++ and Python API
This commit is contained in:
@@ -2247,6 +2247,12 @@ class Detector {
|
||||
|
||||
///@}
|
||||
|
||||
Result<std::vector<uint8_t>> readSpi(int chip_id, int register_id,
|
||||
int n_bytes, Positions pos = {}) const;
|
||||
|
||||
void writeSpi(int chip_id, int register_id,
|
||||
const std::vector<uint8_t> &data, Positions pos = {});
|
||||
|
||||
private:
|
||||
std::vector<uint16_t> getValidPortNumbers(uint16_t start_port);
|
||||
void updateRxRateCorrections();
|
||||
|
||||
@@ -2954,4 +2954,19 @@ std::vector<uint16_t> Detector::getValidPortNumbers(uint16_t start_port) {
|
||||
return res;
|
||||
}
|
||||
|
||||
Result<std::vector<uint8_t>> Detector::readSpi(int chip_id, int register_id,
|
||||
int n_bytes,
|
||||
Positions pos) const {
|
||||
return pimpl->Parallel(&Module::readSpi, pos, chip_id, register_id,
|
||||
n_bytes);
|
||||
}
|
||||
|
||||
void Detector::writeSpi(int chip_id, int register_id,
|
||||
const std::vector<uint8_t> &data, Positions pos){
|
||||
pimpl->Parallel(&Module::writeSpi, pos, chip_id, register_id, data);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
} // namespace sls
|
||||
|
||||
@@ -4074,4 +4074,45 @@ void Module::simulatingActivityinDetector(const std::string &functionType,
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
std::vector<uint8_t> Module::readSpi(int chip_id, int register_id,
|
||||
int n_bytes) const{
|
||||
auto client = DetectorSocket(shm()->hostname, shm()->controlPort);
|
||||
client.Send(F_SPI_READ);
|
||||
client.setFnum(F_SPI_READ);
|
||||
client.Send(chip_id);
|
||||
client.Send(register_id);
|
||||
client.Send(n_bytes);
|
||||
|
||||
if (client.Receive<int>() == FAIL) {
|
||||
std::ostringstream os;
|
||||
os << "Module " << moduleIndex << " (" << shm()->hostname << ")"
|
||||
<< " returned error: " << client.readErrorMessage();
|
||||
throw DetectorError(os.str());
|
||||
}
|
||||
|
||||
std::vector<uint8_t> data(n_bytes);
|
||||
client.Receive(data);
|
||||
return data;
|
||||
|
||||
}
|
||||
|
||||
void Module::writeSpi(int chip_id, int register_id,
|
||||
const std::vector<uint8_t> &data){
|
||||
auto client = DetectorSocket(shm()->hostname, shm()->controlPort);
|
||||
client.Send(F_SPI_WRITE);
|
||||
client.setFnum(F_SPI_WRITE);
|
||||
client.Send(chip_id);
|
||||
client.Send(register_id);
|
||||
client.Send(static_cast<int>(data.size()));
|
||||
client.Send(data);
|
||||
|
||||
if (client.Receive<int>() == FAIL) {
|
||||
std::ostringstream os;
|
||||
os << "Module " << moduleIndex << " (" << shm()->hostname << ")"
|
||||
<< " returned error: " << client.readErrorMessage();
|
||||
throw DetectorError(os.str());
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace sls
|
||||
|
||||
@@ -607,6 +607,10 @@ class Module : public virtual slsDetectorDefs {
|
||||
int64_t getNumberOfFramesFromStart() const;
|
||||
int64_t getActualTime() const;
|
||||
int64_t getMeasurementTime() const;
|
||||
std::vector<uint8_t> readSpi(int chip_id, int register_id,
|
||||
int n_bytes) const;
|
||||
|
||||
void writeSpi(int chip_id, int register_id, const std::vector<uint8_t> &data);
|
||||
|
||||
private:
|
||||
std::string getReceiverLongVersion() const;
|
||||
|
||||
Reference in New Issue
Block a user