File indexing completed on 2024-04-06 12:10:56
0001 #include <iomanip>
0002 #include <ostream>
0003 #include "EventFilter/Phase2TrackerRawToDigi/interface/Phase2TrackerFEDDAQTrailer.h"
0004
0005 namespace Phase2Tracker {
0006
0007 std::ostream& operator<<(std::ostream& os, const FEDTTSBits& value) {
0008 switch (value) {
0009 case TTS_DISCONNECTED0:
0010 os << "Disconected 0";
0011 break;
0012 case TTS_WARN_OVERFLOW:
0013 os << "Warning overflow";
0014 break;
0015 case TTS_OUT_OF_SYNC:
0016 os << "Out of sync";
0017 break;
0018 case TTS_BUSY:
0019 os << "Busy";
0020 break;
0021 case TTS_READY:
0022 os << "Ready";
0023 break;
0024 case TTS_ERROR:
0025 os << "Error";
0026 break;
0027 case TTS_INVALID:
0028 os << "Invalid";
0029 break;
0030 case TTS_DISCONNECTED1:
0031 os << "Disconected 1";
0032 break;
0033 default:
0034 os << "Unrecognized";
0035 os << " (";
0036 printHexValue(value, os);
0037 os << ")";
0038 break;
0039 }
0040 return os;
0041 }
0042
0043 FEDTTSBits FEDDAQTrailer::ttsBits() const {
0044 switch (ttsNibble()) {
0045 case TTS_DISCONNECTED0:
0046 case TTS_WARN_OVERFLOW:
0047 case TTS_OUT_OF_SYNC:
0048 case TTS_BUSY:
0049 case TTS_READY:
0050 case TTS_ERROR:
0051 case TTS_DISCONNECTED1:
0052 return FEDTTSBits(ttsNibble());
0053 default:
0054 return TTS_INVALID;
0055 }
0056 }
0057
0058 FEDDAQTrailer::FEDDAQTrailer(const uint32_t eventLengthIn64BitWords,
0059 const uint16_t crc,
0060 const FEDTTSBits ttsBits,
0061 const bool slinkTransmissionError,
0062 const bool badFEDID,
0063 const bool slinkCRCError,
0064 const uint8_t eventStatusNibble) {
0065
0066 memset(trailer_, 0x0, 8);
0067
0068 trailer_[7] = 0xA0;
0069
0070 setEventLengthIn64BitWords(eventLengthIn64BitWords);
0071 setEventStatusNibble(eventStatusNibble);
0072 setTTSBits(ttsBits);
0073 setCRC(crc);
0074 setSLinkTransmissionErrorBit(slinkTransmissionError);
0075 setBadSourceIDBit(badFEDID);
0076 setSLinkCRCErrorBit(slinkCRCError);
0077 }
0078
0079 void FEDDAQTrailer::setEventLengthIn64BitWords(const uint32_t eventLengthIn64BitWords) {
0080 trailer_[4] = (eventLengthIn64BitWords & 0x000000FF);
0081 trailer_[5] = ((eventLengthIn64BitWords & 0x0000FF00) >> 8);
0082 trailer_[6] = ((eventLengthIn64BitWords & 0x00FF0000) >> 16);
0083 }
0084
0085 void FEDDAQTrailer::setCRC(const uint16_t crc) {
0086 trailer_[2] = (crc & 0x00FF);
0087 trailer_[3] = ((crc >> 8) & 0x00FF);
0088 }
0089
0090 void FEDDAQTrailer::setSLinkTransmissionErrorBit(const bool bitSet) {
0091 if (bitSet)
0092 trailer_[1] |= 0x80;
0093 else
0094 trailer_[1] &= (~0x80);
0095 }
0096
0097 void FEDDAQTrailer::setBadSourceIDBit(const bool bitSet) {
0098 if (bitSet)
0099 trailer_[1] |= 0x40;
0100 else
0101 trailer_[1] &= (~0x40);
0102 }
0103
0104 void FEDDAQTrailer::setSLinkCRCErrorBit(const bool bitSet) {
0105 if (bitSet)
0106 trailer_[0] |= 0x04;
0107 else
0108 trailer_[0] &= (~0x40);
0109 }
0110
0111 void FEDDAQTrailer::setEventStatusNibble(const uint8_t eventStatusNibble) {
0112 trailer_[1] = ((trailer_[1] & 0xF0) | (eventStatusNibble & 0x0F));
0113 }
0114
0115 void FEDDAQTrailer::setTTSBits(const FEDTTSBits ttsBits) { trailer_[0] = ((trailer_[0] & 0x0F) | (ttsBits & 0xF0)); }
0116
0117 }