44 mChannelsInitialized =
false;
54 if (dataFormat == 0x0) {
56 }
else if (dataFormat == 0x2) {
62 uint32_t wordCountFromLastHeader = 1;
63 int nDigitsAddedFromLastHeader = 0;
64 bool isHeaderExpected =
true;
65 bool skipUntilNextHeader =
true;
68 auto b = payloadWords.cbegin();
69 auto e = payloadWords.cend();
73 LOG(
debug) <<
"RawDecoder::readChannels() : "
74 <<
"I read cpv header for orbit = " << header.
orbit()
75 <<
" and BC = " << header.
bc();
76 if (!isHeaderExpected) {
78 LOG(error) <<
"RawDecoder::readChannels() : "
79 <<
"header was not expected";
81 removeLastNDigits(nDigitsAddedFromLastHeader);
84 skipUntilNextHeader =
false;
85 currentBC = header.
bc();
86 wordCountFromLastHeader = 0;
87 nDigitsAddedFromLastHeader = 0;
88 if (currentOrbit != header.
orbit()) {
90 LOG(error) <<
"RawDecoder::readChannels() : "
91 <<
"currentOrbit(=" << currentOrbit
92 <<
") != header.orbit()(=" << header.
orbit() <<
")";
95 skipUntilNextHeader =
true;
98 if (skipUntilNextHeader) {
104 wordCountFromLastHeader++;
105 for (
int i = 0;
i < 3;
i++) {
109 nDigitsAddedFromLastHeader++;
111 if (!mIsMuteErrors) {
112 LOG(
debug) <<
"RawDecoder::readChannels() : "
113 <<
"read pad word with non-valid pad address";
122 if (trailer.
isOK()) {
123 int diffInCount = wordCountFromLastHeader - trailer.
wordCounter();
124 if (diffInCount > 1 ||
127 if (!mIsMuteErrors) {
128 LOG(error) <<
"RawDecoder::readChannels() : "
129 <<
"Read " << wordCountFromLastHeader <<
" words, expected " << trailer.
wordCounter();
133 removeLastNDigits(nDigitsAddedFromLastHeader);
134 skipUntilNextHeader =
true;
136 if (trailer.
bc() != currentBC) {
138 if (!mIsMuteErrors) {
139 LOG(error) <<
"RawDecoder::readChannels() : "
140 <<
"CPVHeader BC(" << currentBC <<
") != CPVTrailer BC(" << trailer.
bc() <<
")";
143 removeLastNDigits(nDigitsAddedFromLastHeader);
144 skipUntilNextHeader =
true;
146 isHeaderExpected =
true;
148 uint8_t unknownWord[10];
149 bool isPadding = isHeaderExpected && dataFormat == 0x2;
150 for (
int i = 0;
i < 10 && (
b +
i) != e;
i++) {
151 unknownWord[
i] = *(
b +
i);
152 if (unknownWord[
i] != 0xff) {
157 if (!mIsMuteErrors) {
158 LOGF(info,
"RawDecoder::readChannels() : Read unknown word 0x: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x",
159 unknownWord[9], unknownWord[8], unknownWord[7], unknownWord[6], unknownWord[5], unknownWord[4], unknownWord[3],
160 unknownWord[2], unknownWord[1], unknownWord[0]);
163 wordCountFromLastHeader++;
170 mChannelsInitialized =
true;