mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-22 01:27:59 +02:00
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:
@ -21,11 +21,14 @@ extern const enum detectorType myDetectorType;
|
||||
|
||||
extern int analogDataBytes;
|
||||
extern int digitalDataBytes;
|
||||
extern int transceiverDataBytes;
|
||||
extern char *analogData;
|
||||
extern char *digitalData;
|
||||
extern char *transceiverData;
|
||||
|
||||
int analogOffset = 0;
|
||||
int digitalOffset = 0;
|
||||
int transceiverOffset = 0;
|
||||
uint32_t udpPacketNumber = 0;
|
||||
uint64_t udpFrameNumber = 0;
|
||||
|
||||
@ -51,27 +54,30 @@ void createUDPPacketHeader(char *buffer, uint16_t id) {
|
||||
// reset offset
|
||||
analogOffset = 0;
|
||||
digitalOffset = 0;
|
||||
transceiverOffset = 0;
|
||||
// reset frame number
|
||||
udpFrameNumber = 0;
|
||||
}
|
||||
|
||||
int fillUDPPacket(char *buffer) {
|
||||
LOG(logDEBUG2,
|
||||
("Analog (databytes:%d, offset:%d)\n Digital (databytes:%d "
|
||||
"offset:%d)\n",
|
||||
analogDataBytes, analogOffset, digitalDataBytes, digitalOffset));
|
||||
LOG(logDEBUG2, ("Analog (databytes:%d, offset:%d)\n Digital (databytes:%d "
|
||||
"offset:%d)\n\n Transceiver (databytes:%d offset:%d)\n",
|
||||
analogDataBytes, analogOffset, digitalDataBytes,
|
||||
digitalOffset, transceiverDataBytes, transceiverOffset));
|
||||
// reached end of data for one frame
|
||||
if (analogOffset >= analogDataBytes && digitalOffset >= digitalDataBytes) {
|
||||
if (analogOffset >= analogDataBytes && digitalOffset >= digitalDataBytes &&
|
||||
transceiverOffset >= transceiverDataBytes) {
|
||||
// reset offset
|
||||
analogOffset = 0;
|
||||
digitalOffset = 0;
|
||||
transceiverOffset = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
sls_detector_header *header = (sls_detector_header *)(buffer);
|
||||
|
||||
// update frame number, starts at 1 (reset packet number)
|
||||
if (analogOffset == 0 && digitalOffset == 0) {
|
||||
if (analogOffset == 0 && digitalOffset == 0 && transceiverOffset == 0) {
|
||||
++udpFrameNumber;
|
||||
header->frameNumber = udpFrameNumber;
|
||||
udpPacketNumber = -1;
|
||||
@ -117,10 +123,28 @@ int fillUDPPacket(char *buffer) {
|
||||
freeBytes -= digitalBytes;
|
||||
}
|
||||
|
||||
// transceiver data
|
||||
int transceiverBytes = 0;
|
||||
if (freeBytes && transceiverOffset < transceiverDataBytes) {
|
||||
// bytes to copy
|
||||
transceiverBytes =
|
||||
((transceiverOffset + freeBytes) <= transceiverDataBytes)
|
||||
? freeBytes
|
||||
: (transceiverDataBytes - transceiverOffset);
|
||||
// copy
|
||||
memcpy(buffer + sizeof(sls_detector_header) + analogBytes +
|
||||
digitalBytes,
|
||||
transceiverData + transceiverOffset, transceiverBytes);
|
||||
// increment offset
|
||||
transceiverOffset += transceiverBytes;
|
||||
// decrement free bytes
|
||||
freeBytes -= transceiverBytes;
|
||||
}
|
||||
|
||||
// pad data
|
||||
if (freeBytes) {
|
||||
memset(buffer + sizeof(sls_detector_header) + analogBytes +
|
||||
digitalBytes,
|
||||
digitalBytes + transceiverBytes,
|
||||
0, freeBytes);
|
||||
LOG(logDEBUG1, ("Padding %d bytes for fnum:%lld pnum:%d\n", freeBytes,
|
||||
(long long int)udpFrameNumber, udpPacketNumber));
|
||||
|
Reference in New Issue
Block a user