1. Ctb transceiver ro (#773)

*  transceiverenable, tsamples, romode for tranceiver and digital_transceiver

* 202 spec instr only for transceiver mode

* removed check for empty in trans readout and clean memory before reading from fifo

* ctb read fifo strobe for all after reading all channels, adding 1us after selecting channel, changing fw date

* updated 10gb transceiver enable

----
* added transceiver (tsamples, romode(transceiver, digital_transceiver), transceiverenable (mask)

* clean memory before reading from fifo (for analog and digital as well)

* read fifo then read strobe (also corresp fw) fixes number of reads (also for analg and digital)-> increases all pipelines by 1

* fixed bug in rearranging digital data in receiver

* fixed bug in streaming size of data after rearranging

* fixed bug in setbit, clearbit,and getbit

* status checks fifo before returning idle (transmitting if data in fifo if transceiver more enabled)

* soem matterhorn specifics that will need to be put into pattern in a month or two. this is temporary.

* NOTE: breaking api. rxParameters struct has transceiverenabel and tsamples given from det to receiver
This commit is contained in:
2023-07-14 16:29:21 +02:00
committed by GitHub
parent a56be25500
commit c628ae2192
30 changed files with 1118 additions and 238 deletions

View File

@ -3180,12 +3180,22 @@ class Detector(CppDetectorApi):
def adcenable10g(self, value):
ut.set_using_dict(self.setTenGigaADCEnableMask, value)
@property
@element
def transceiverenable(self):
"""[Ctb] Transceiver Enable Mask. Enable for each 4 transceiver channel."""
return self.getTransceiverEnableMask()
@transceiverenable.setter
def transceiverenable(self, value):
ut.set_using_dict(self.setTransceiverEnableMask, value)
#TODO: remove this command or throw if it doesnt match with digital and transceiver
@property
@element
def samples(self):
"""
[CTB] Number of samples (both analog and digitial) expected. \n
[CTB] Number of samples (only analog) expected. \n
"""
return self.getNumberOfAnalogSamples()
@ -3211,7 +3221,7 @@ class Detector(CppDetectorApi):
Note
------
Options: ANALOG_ONLY, DIGITAL_ONLY, ANALOG_AND_DIGITAL
Options: ANALOG_ONLY, DIGITAL_ONLY, ANALOG_AND_DIGITAL, TRANSCEIVER_ONLY, DIGITAL_AND_TRANSCEIVER
Default: ANALOG_ONLY
Example
@ -3246,6 +3256,16 @@ class Detector(CppDetectorApi):
def dsamples(self, N):
ut.set_using_dict(self.setNumberOfDigitalSamples, N)
@property
@element
def tsamples(self):
"""[CTB] Number of transceiver samples expected. """
return self.getNumberOfTransceiverSamples()
@tsamples.setter
def tsamples(self, N):
ut.set_using_dict(self.setNumberOfTransceiverSamples, N)
@property
@element
def dbitphase(self):

View File

@ -1556,6 +1556,14 @@ void init_det(py::module &m) {
(void (Detector::*)(uint32_t, sls::Positions)) &
Detector::setTenGigaADCEnableMask,
py::arg(), py::arg() = Positions{});
CppDetectorApi.def("getTransceiverEnableMask",
(Result<uint32_t>(Detector::*)(sls::Positions) const) &
Detector::getTransceiverEnableMask,
py::arg() = Positions{});
CppDetectorApi.def("setTransceiverEnableMask",
(void (Detector::*)(uint32_t, sls::Positions)) &
Detector::setTransceiverEnableMask,
py::arg(), py::arg() = Positions{});
CppDetectorApi.def("getNumberOfDigitalSamples",
(Result<int>(Detector::*)(sls::Positions) const) &
Detector::getNumberOfDigitalSamples,
@ -1564,6 +1572,14 @@ void init_det(py::module &m) {
(void (Detector::*)(int, sls::Positions)) &
Detector::setNumberOfDigitalSamples,
py::arg(), py::arg() = Positions{});
CppDetectorApi.def("getNumberOfTransceiverSamples",
(Result<int>(Detector::*)(sls::Positions) const) &
Detector::getNumberOfTransceiverSamples,
py::arg() = Positions{});
CppDetectorApi.def("setNumberOfTransceiverSamples",
(void (Detector::*)(int, sls::Positions)) &
Detector::setNumberOfTransceiverSamples,
py::arg(), py::arg() = Positions{});
CppDetectorApi.def(
"getReadoutMode",
(Result<defs::readoutMode>(Detector::*)(sls::Positions) const) &

View File

@ -242,6 +242,10 @@ void init_enums(py::module &m) {
.value("DIGITAL_ONLY", slsDetectorDefs::readoutMode::DIGITAL_ONLY)
.value("ANALOG_AND_DIGITAL",
slsDetectorDefs::readoutMode::ANALOG_AND_DIGITAL)
.value("TRANSCEIVER_ONLY",
slsDetectorDefs::readoutMode::TRANSCEIVER_ONLY)
.value("DIGITAL_AND_TRANSCEIVER",
slsDetectorDefs::readoutMode::DIGITAL_AND_TRANSCEIVER)
.export_values();
py::enum_<slsDetectorDefs::speedLevel>(Defs, "speedLevel")