Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
H
HgcTpgSim
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
vpalladi
HgcTpgSim
Commits
eb93db5d
Commit
eb93db5d
authored
Jan 07, 2019
by
dauncey
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add more HGCROC paras and 32-bit buffering
parent
af9d65b5
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
163 additions
and
634 deletions
+163
-634
interface/Buffering/BeSlinkAna.hh
interface/Buffering/BeSlinkAna.hh
+8
-2
interface/Buffering/BeSlinkSim.hh
interface/Buffering/BeSlinkSim.hh
+50
-13
interface/Buffering/CircularBufferUR.hh
interface/Buffering/CircularBufferUR.hh
+3
-66
interface/Buffering/CircularBufferUR32.hh
interface/Buffering/CircularBufferUR32.hh
+67
-0
interface/Buffering/SlinkCheck.hh
interface/Buffering/SlinkCheck.hh
+3
-1
src/DaqDaqBuffer.cpp
src/DaqDaqBuffer.cpp
+32
-552
No files found.
interface/Buffering/BeSlinkAna.hh
View file @
eb93db5d
...
...
@@ -34,9 +34,9 @@ public:
hTotalChannels=new TH1D((sout.str()+"TotalChannels").c_str(),
";ECON total number of channels",1300,0,1300);
hTotalWords=new TH1D((sout.str()+"TotalWords").c_str(),
";ECON total number of words",1000,0,1000);
*/
hTotalEventWords
=
new
TH1D
((
sout
.
str
()
+
"TotalEventWords"
).
c_str
(),
";Total number of bytes per event"
,
250
,
0
,
4000
);
const
SlinkArch
&
slinkArch
(
*
(
fBeSlinkSim
->
fSlinkArch
));
for
(
unsigned
e
(
0
);
e
<
slinkArch
.
numberOfEcons
();
e
++
)
{
...
...
@@ -96,6 +96,10 @@ public:
hEventBufferUsedHistory
[
e
][
b
]
->
Fill
(
bx
,
fBeSlinkSim
->
fEventBuffer
[
e
][
b
].
used
());
}
}
if
(
fBeSlinkSim
->
fL1AcceptEoe
)
{
hTotalEventWords
->
Fill
(
16
*
fBeSlinkSim
->
fTotalNumberOfEventWords
);
}
}
void
eoj
()
{
...
...
@@ -118,6 +122,8 @@ private:
//TH1D *hBlockTotalChannels[7];
//TH1D *hBlockTotalWords[7];
TH1D
*
hTotalEventWords
;
TH1D
*
hEventBufferUsed
[
Dimensions
::
MaxNumberOfEconsPerSlink
][
Dimensions
::
MaxNumberOfBlocksPerEcon
];
TH1I
*
hEventBufferUsedHistory
[
Dimensions
::
MaxNumberOfEconsPerSlink
][
Dimensions
::
MaxNumberOfBlocksPerEcon
];
};
...
...
interface/Buffering/BeSlinkSim.hh
View file @
eb93db5d
...
...
@@ -5,7 +5,7 @@
#include <iomanip>
#include <cassert>
#include "Buffering/CircularBufferUR.hh"
#include "Buffering/CircularBufferUR
32
.hh"
#include "Buffering/SlinkBoe.hh"
#include "Buffering/SlinkEoe.hh"
#include "Buffering/SlinkArch.hh"
...
...
@@ -73,29 +73,34 @@ public:
uint64_t
d
[
2
];
SlinkBoe
sBoe
(
0xce00
,
bx
&
0xffffffff
,
l1a
&
0xffffffff
,
0xab
);
sBoe
.
words
(
d
);
assert
(
fSlinkBoeCb
.
writeAndIncrementPtr
(
d
[
0
]));
assert
(
fSlinkBoeCb
.
writeAndIncrementPtr
(
d
[
1
]));
if
(
fPrintLevel
>
4
)
{
std
::
cout
<<
"BeSlinkSim["
<<
fSlinkArch
->
slinkNumber
()
<<
"]::processL1Accept("
<<
bx
<<
","
<<
l1a
<<
") "
<<
"Saving Slink BOE"
<<
std
::
endl
;
sBoe
.
print
();
}
assert
(
fSlinkBoeCb
.
writeAndIncrementPtr
(
d
[
0
]));
assert
(
fSlinkBoeCb
.
writeAndIncrementPtr
(
d
[
1
]));
}
void
processBx
(
uint64_t
bx
,
const
SlinkElinkData
&
d
)
{
//#define OLD_METHOD
#ifdef OLD_METHOD
if
((
bx
%
2
)
==
0
)
{
fSlinkElinkData
=
d
;
}
else
{
uint64_t
word
,
word2
;
#endif
for
(
unsigned
e
(
0
);
e
<
fSlinkArch
->
numberOfEcons
();
e
++
)
{
const
EconArch
&
econArch
(
fSlinkArch
->
econArch
(
e
));
for
(
unsigned
b
(
0
);
b
<
econArch
.
numberOfBlocks
();
b
++
)
{
const
std
::
vector
<
unsigned
>
&
elinkNumber
(
econArch
.
elinkNumber
(
b
));
#ifdef OLD_METHOD
unsigned
eo
(
0
);
for
(
unsigned
w
(
0
);
w
<
elinkNumber
.
size
();
w
++
)
{
if
((
eo
%
2
)
==
0
)
{
...
...
@@ -138,6 +143,13 @@ public:
*/
}
#else
uint32_t
word
;
for
(
unsigned
w
(
0
);
w
<
elinkNumber
.
size
();
w
++
)
{
word
=
d
.
fData
[
e
][
elinkNumber
[
w
]];
if
(
word
!=
0
||
fEventBuffer
[
e
][
b
].
isCachedWriteWord
())
assert
(
fEventBuffer
[
e
][
b
].
halfWriteAndIncrementPtr
(
word
));
}
#endif
...
...
@@ -147,6 +159,9 @@ public:
// Output to Slink
fL1AcceptBoe
=
false
;
fL1AcceptEoe
=
false
;
bool
done
(
false
);
uint128_t
w
;
fNumberOfSlinkWords
=
0
;
...
...
@@ -177,7 +192,8 @@ public:
fBlockRead
=
0
;
fNumberOfEventWords
=
0
;
fEventActive
=
true
;
fL1AcceptBoe
=
true
;
}
else
{
done
=
true
;
}
...
...
@@ -196,10 +212,20 @@ public:
}
fEventActive
=
false
;
fL1AcceptEoe
=
true
;
fTotalNumberOfEventWords
=
fNumberOfEventWords
;
}
else
{
if
(
fPrintLevel
>
4
)
{
std
::
cout
<<
"BeSlinkSim["
<<
fSlinkArch
->
slinkNumber
()
<<
"]::processBx() "
<<
"Reading from ECON "
<<
fEconRead
<<
", block "
<<
fBlockRead
<<
std
::
endl
;
}
for
(
unsigned
i
(
0
);
/*i<4 &&*/
!
done
&&
fEconRead
<
fSlinkArch
->
numberOfEcons
()
&&
fArrayWrite
<
4
;
i
++
)
{
#ifdef OLD_METHOD
if
(
!
(
fEventBuffer
[
fEconRead
][
fBlockRead
].
empty
()
&&
fBlockPair
[
fEconRead
][
fBlockRead
].
first
))
{
uint32_t
nextWord
(
0
);
...
...
@@ -217,19 +243,21 @@ public:
//fArrayWord[fArrayWrite ]=(d&0xffffffff);
//fArrayWord[fArrayWrite+1]=(d>>32);
//fArrayWrite+=2;
#else
if
(
!
fEventBuffer
[
fEconRead
][
fBlockRead
].
unreadable
())
{
uint32_t
nextWord
(
0
);
assert
(
fEventBuffer
[
fEconRead
][
fBlockRead
].
halfReadAndIncrementPtr
(
nextWord
));
#endif
if
(
nextWord
!=
0
)
{
fArrayWord
[
fArrayWrite
]
=
nextWord
;
fArrayWrite
++
;
if
(
fPrintLevel
>
5
)
{
std
::
cout
<<
"BeSlinkSim["
<<
fSlinkArch
->
slinkNumber
()
<<
"]::processBx() "
<<
"Read buffer words = 0x"
<<
std
::
hex
//<< fArrayWord[fArrayWrite-2] << " "
<<
fArrayWord
[
fArrayWrite
-
1
]
<<
std
::
dec
<<
std
::
endl
;
<<
nextWord
<<
std
::
dec
<<
std
::
endl
;
}
fArrayWord
[
fArrayWrite
]
=
nextWord
;
fArrayWrite
++
;
if
(
fBlockCheck
[
fEconRead
][
fBlockRead
].
processBx
(
fArrayWord
[
fArrayWrite
-
1
]))
fBlockRead
++
;
if
(
fBlockRead
==
fSlinkArch
->
econArch
(
fEconRead
).
numberOfBlocks
())
{
...
...
@@ -241,6 +269,11 @@ public:
}
}
else
{
if
(
fPrintLevel
>
5
)
{
std
::
cout
<<
"BeSlinkSim["
<<
fSlinkArch
->
slinkNumber
()
<<
"]::processBx() "
<<
"Nothing in buffer"
<<
std
::
endl
;
}
done
=
true
;
}
}
...
...
@@ -478,12 +511,15 @@ private:
EconArch
fEconArch
;
bool
fL1AcceptBoe
;
bool
fL1AcceptEoe
;
//unsigned fNumberOfHgcrocs;
//double fHgcrocMean[18];
//unsigned fHgcrocToElink[18];
CircularBufferUR
<
1
>
fElink
[
7
];
CircularBufferUR
<
16
>
fEventBuffer
[
Dimensions
::
MaxNumberOfEconsPerSlink
][
Dimensions
::
MaxNumberOfBlocksPerEcon
];
//CircularBufferUR32
<1> fElink[7];
CircularBufferUR
32
<
16
>
fEventBuffer
[
Dimensions
::
MaxNumberOfEconsPerSlink
][
Dimensions
::
MaxNumberOfBlocksPerEcon
];
//PartitionedBuffer<7,16> fPartitionedBuffer[5];
//unsigned fNumberOfChannels[18];
...
...
@@ -495,6 +531,7 @@ private:
unsigned
fArrayWrite
;
uint32_t
fArrayWord
[
4
];
unsigned
fNumberOfEventWords
;
unsigned
fTotalNumberOfEventWords
;
BlockCheck
fBlockCheck
[
Dimensions
::
MaxNumberOfEconsPerSlink
][
Dimensions
::
MaxNumberOfBlocksPerEcon
];
std
::
pair
<
bool
,
uint32_t
>
fBlockPair
[
Dimensions
::
MaxNumberOfEconsPerSlink
][
Dimensions
::
MaxNumberOfBlocksPerEcon
];
...
...
interface/Buffering/CircularBufferUR.hh
View file @
eb93db5d
#ifndef CircularBufferUR_HH
#define CircularBufferUR_HH
// Write pointer points to next location to write to
// Read pointer points to next location to read from
#include "MultipleUltraRam.hh"
#include "CircularBuffer.hh"
template
<
unsigned
NumberOfUltraRams
>
class
CircularBufferUR
{
class
CircularBufferUR
:
public
CircularBuffer
<
uint64_t
>
{
public:
enum
{
CircularBufferURLength
=
NumberOfUltraRams
*
UltraRam
::
UltraRamBufferLength
};
CircularBufferUR
()
{
reset
();
}
bool
writeAndIncrementPtr
(
uint64_t
d
)
{
if
(((
fWritePtr
+
1
)
%
CircularBufferURLength
)
==
fReadPtr
)
return
false
;
fMultipleUltraRam
.
write
(
fWritePtr
,
d
);
fWritePtr
++
;
if
(
fWritePtr
>=
CircularBufferURLength
)
fWritePtr
-=
CircularBufferURLength
;
return
true
;
}
bool
read
(
uint64_t
&
d
)
const
{
if
(
fReadPtr
==
fWritePtr
)
return
false
;
d
=
fMultipleUltraRam
.
read
(
fReadPtr
);
return
true
;
}
bool
incrementReadPtr
()
{
if
(
fReadPtr
==
fWritePtr
)
return
false
;
fReadPtr
++
;
if
(
fReadPtr
>=
CircularBufferURLength
)
fReadPtr
-=
CircularBufferURLength
;
return
true
;
}
bool
readAndIncrementPtr
(
uint64_t
&
d
)
{
if
(
!
read
(
d
))
return
false
;
return
incrementReadPtr
();
CircularBufferUR
()
:
CircularBuffer
<
uint64_t
>
(
4096
*
NumberOfUltraRams
)
{
}
unsigned
space
()
const
{
if
(
fWritePtr
<
fReadPtr
)
return
fReadPtr
-
fWritePtr
-
1
;
return
fReadPtr
+
CircularBufferURLength
-
fWritePtr
-
1
;
}
unsigned
used
()
const
{
if
(
fReadPtr
<=
fWritePtr
)
return
fWritePtr
-
fReadPtr
;
return
fWritePtr
+
CircularBufferURLength
-
fReadPtr
;
}
bool
empty
()
const
{
return
fWritePtr
==
fReadPtr
;
}
void
reset
()
{
fWritePtr
=
0
;
fReadPtr
=
0
;
}
private:
MultipleUltraRam
<
NumberOfUltraRams
>
fMultipleUltraRam
;
unsigned
fWritePtr
;
unsigned
fReadPtr
;
};
#endif
interface/Buffering/CircularBufferUR32.hh
0 → 100644
View file @
eb93db5d
#ifndef CircularBufferUR32_HH
#define CircularBufferUR32_HH
#include "CircularBufferUR.hh"
template
<
unsigned
NumberOfUltraRams
>
class
CircularBufferUR32
:
public
CircularBufferUR
<
NumberOfUltraRams
>
{
public:
enum
{
writeValue
,
readValue
};
CircularBufferUR32
()
{
fIsCachedWord
[
0
]
=
false
;
fIsCachedWord
[
1
]
=
false
;
}
bool
halfWriteAndIncrementPtr
(
const
uint32_t
&
d
)
{
if
(
!
fIsCachedWord
[
writeValue
])
{
fIsCachedWord
[
writeValue
]
=
true
;
fCachedWord
[
writeValue
]
=
d
;
return
true
;
}
uint64_t
value
=
d
;
value
=
(
value
<<
32
)
+
fCachedWord
[
writeValue
];
if
(
!
this
->
writeAndIncrementPtr
(
value
))
return
false
;
fIsCachedWord
[
writeValue
]
=
false
;
return
true
;
}
bool
halfReadAndIncrementPtr
(
uint32_t
&
d
)
{
if
(
fIsCachedWord
[
readValue
])
{
fIsCachedWord
[
readValue
]
=
false
;
d
=
fCachedWord
[
readValue
];
return
true
;
}
uint64_t
value
;
if
(
!
this
->
readAndIncrementPtr
(
value
))
return
false
;
d
=
(
value
&
0xffffffff
);
fIsCachedWord
[
readValue
]
=
true
;
fCachedWord
[
readValue
]
=
(
value
>>
32
);
return
true
;
}
bool
isCachedWriteWord
()
const
{
return
fIsCachedWord
[
writeValue
];
}
bool
isCachedReadWord
()
const
{
return
fIsCachedWord
[
readValue
];
}
bool
unreadable
()
const
{
return
(
this
->
empty
()
&&
!
fIsCachedWord
[
readValue
]);
}
private:
bool
fIsCachedWord
[
2
];
uint32_t
fCachedWord
[
2
];
};
#endif
interface/Buffering/SlinkCheck.hh
View file @
eb93db5d
...
...
@@ -114,7 +114,9 @@ public:
<<
" = "
<<
std
::
setw
(
10
)
<<
std
::
setfill
(
' '
)
<<
fEventDump
[
i
]
<<
" = 0x"
<<
std
::
hex
<<
std
::
setw
(
8
)
<<
std
::
setfill
(
'0'
)
<<
fEventDump
[
i
]
<<
std
::
dec
<<
std
::
endl
;
<<
fEventDump
[
i
]
<<
std
::
dec
;
if
(
fEventDump
[
i
]
==
0
)
std
::
cout
<<
" <<<======="
;
std
::
cout
<<
std
::
endl
;
}
std
::
cout
<<
std
::
endl
;
}
...
...
src/DaqDaqBuffer.cpp
View file @
eb93db5d
...
...
@@ -111,421 +111,6 @@ private:
uint64_t
fTriggerBx
[
TriggerLimit
];
};
/*
class SlinkBoe {
public:
SlinkBoe() : fBoe(0) {
}
SlinkBoe(uint32_t si, uint32_t bi, uint32_t ei, uint16_t et)
: fSourceId(si), fBxId(bi), fEventId(ei), fEventType(et), fBoe(0x5555) {
}
uint32_t sourceId() const {
return fSourceId;
}
uint32_t bxId() const {
return fBxId;
}
uint32_t eventId() const {
return fEventId;
}
uint16_t eventType() const {
return fEventType;
}
void setWords(const uint64_t *d) {
fSourceId=(d[0]&0xffffffff);
fBxId=(d[0]>>32);
fEventId=(d[1]&0xffffffff);
fEventType=(d[1]>>32)&0xffff;
fBoe=(d[1]>>48);
}
void words(uint64_t *d) const {
d[0]=fBxId;
d[0]=(d[0]<<32)+fSourceId;
d[1]=fBoe;
d[1]=(d[1]<<16)+fEventType;
d[1]=(d[1]<<32)+fEventId;
}
bool valid() const {
return fBoe==0x5555;
}
void print() const {
uint64_t d[2];
words(d);
std::cout << "SlinkBoe::print() Value = 0x" << std::hex << std::setw(16) << std::setfill('0') << d[1]
<< " " << std::setw(16) << std::setfill('0') << d[0] << std::dec << (valid()?", valid":", not valid") << std::endl;
std::cout << " Source ID = " << fSourceId << " = 0x" << std::hex << fSourceId << std::dec << std::endl;
std::cout << " BX ID = " << fBxId << " = 0x" << std::hex << fBxId << std::dec << std::endl;
std::cout << " Event ID = " << fEventId << " = 0x" << std::hex << fEventId << std::dec << std::endl;
std::cout << " Event type = " << fEventType << " = 0x" << std::hex << fEventType << std::dec << std::endl;
std::cout << " BOE = " << fBoe << " = 0x" << std::hex << fBoe << std::dec << std::endl;
}
private:
uint32_t fSourceId;
uint32_t fBxId;
uint32_t fEventId;
uint16_t fEventType;
uint16_t fBoe;
};
class SlinkEoe {
public:
SlinkEoe() : fEoe(0) {
}
SlinkEoe(uint32_t fi, uint16_t s, uint16_t c, uint16_t el)
: fFedUserId(fi), fStatus(s), fCrc(c), fEventLength(el), fEoe(0xaaaaaaaa) {
}
uint32_t fedUserId() const {
return fFedUserId;
}
uint16_t status() const {
return fStatus;
}
uint16_t crc() const {
return fCrc;
}
uint32_t eventLength() const {
return fEventLength;
}
void setWords(const uint64_t *d) {
fFedUserId=(d[0]&0xffffffff);
fStatus=(d[0]>>32)&0xffff;
fCrc=(d[0]>>48)&0xffff;
fEventLength=(d[1]&0xffffffff);
fEoe=(d[1]>>32);
}
void words(uint64_t *d) const {
d[0]=fCrc;
d[0]=(d[0]<<16)+fStatus;
d[0]=(d[0]<<32)+fFedUserId;
d[1]=fEoe;
d[1]=(d[1]<<32)+fEventLength;
}
bool valid() const {
return fEoe==0xaaaaaaaa;
}
void print() const {
uint64_t d[2];
words(d);
std::cout << "SlinkEoe::print() Value = 0x" << std::hex << std::setw(16) << std::setfill('0') << d[1]
<< " " << std::setw(16) << std::setfill('0') << d[0] << std::dec << (valid()?", valid":", not valid") << std::endl;
std::cout << " FED user ID = " << fFedUserId << " = 0x" << std::hex << fFedUserId << std::dec << std::endl;
std::cout << " Status = " << fStatus << " = 0x" << std::hex << fStatus << std::dec << std::endl;
std::cout << " CRC = " << fCrc << " = 0x" << std::hex << fCrc << std::dec << std::endl;
std::cout << " Event length = " << fEventLength << " = 0x" << std::hex << fEventLength << std::dec << std::endl;
std::cout << " EOE = " << fEoe << " = 0x" << std::hex << fEoe << std::dec << std::endl;
}
private:
uint32_t fFedUserId;
uint16_t fStatus;
uint16_t fCrc;
uint32_t fEventLength;
uint32_t fEoe;
};
*/
/*
class HgcrocBoe {
public:
HgcrocBoe() {
fWord=0x00ff0000; // Non-existant HGCROC value
}
HgcrocBoe(uint32_t w) {
fWord=w;
}
HgcrocBoe(uint8_t e, uint8_t h, uint8_t b, uint8_t l, uint8_t n) {
fWord=(b<<24)+((18*e+h)<<16)+(l<<8)+n;
}
uint8_t bx() const {
return fWord>>24;
}
uint8_t econ() const {
return ((fWord>>16)&0xff)/18;
}
uint8_t hgcroc() const {
return ((fWord>>16)&0xff)%18;
}
uint8_t l1a() const {
return (fWord>>8)&0xff;
}
uint16_t numberOfWords() const {
return fWord&0xff;
}
uint32_t word() const {
return fWord;
}
void word(uint32_t w) {
fWord=w;
}
void print() const {
std::cout << "HgcrocBoe::print() Value = 0x" << std::hex << std::setw(8) << std::setfill('0') << fWord << std::dec << std::endl;
std::cout << " BX = " << unsigned(bx()) << std::endl;
std::cout << " ECON, HGCROC = " << unsigned(econ()) << ", " << unsigned(hgcroc()) << std::endl;
std::cout << " L1Accept = " << unsigned(l1a()) << std::endl;
std::cout << " Number of words = " << unsigned(numberOfWords()) << std::endl;
}
private:
uint32_t fWord;
};
*/
/*
class SlinkCheck {
public:
SlinkCheck() : fEventActive(false) {
nCalls=0;
fL1Accept=-1;
nHgcrocWords=0;
}
void processWords(uint64_t *d, bool be=false) {
std::cout << "SlinkCheck::processWords() call " << nCalls << " words = 0x" << std::hex << d[1] << " " << d[0] << std::dec << std::endl;
nCalls++;
assert(be);
if(!fEventActive) {
fBoe.setWords(d);
fEventActive=fBoe.valid();
if(fEventActive) {
std::cout << "SlinkCheck::processWords() L1Accept " << fL1Accept << ", new BOE found" << std::endl;
fBoe.print();
fL1Accept=(fL1Accept+1)&0xffffffff;
assert(fBoe.eventId()==fL1Accept);
for(unsigned e(0);e<5;e++) {
for(unsigned h(0);h<18;h++) {
if(e==0) completedHgcroc[e][h]=false;
if(e==1) completedHgcroc[e][h]=(h>=12);
if(e>=2) completedHgcroc[e][h]=(h>=9);
}
}
} else {
std::cout << "SlinkCheck::processWords() No BOE found" << std::endl;
fBoe.print();
}
return;
}
fEoe.setWords(d);
if(fEoe.valid()) {
assert(fEoe.fedUserId()==fBoe.sourceId());
assert(fEoe.status()==0x77);
assert(fEoe.crc()==0xff);
assert(fEoe.eventLength()==nWords);
if(nWords==0) {
std::cout << "SlinkCheck::processWords() Empty event found" << std::endl;
fBoe.print();
fEoe.print();
}
std::cout << "SlinkCheck::processWords() New EOE found" << std::endl;
fEoe.print();
fEventActive=false;
nWords=0;
return;
} else {
//std::cout << "SlinkCheck::processWords() No EOE found" << std::endl;
//fEoe.print();
}
nWords++;
fData[0]=d[0]&0xffffffff;
fData[1]=d[0]>>32;
fData[2]=d[1]&0xffffffff;
fData[3]=d[1]>>32;
for(unsigned i(0);i<4;i++) processHgcrocWord(fData[i]);
}
bool allComplete() const {
for(unsigned e(0);e<5;e++) {
for(unsigned h(0);h<18;h++) {
if(!completedHgcroc[e][h]) return false;
}
}
return true;
}
void processHgcrocWord(uint32_t w) {
if(nHgcrocWords==0) {
std::cout << "All completed =";
for(unsigned e(0);e<5;e++) {
std::cout << " ";
for(unsigned h(0);h<18;h++) {
std::cout << (completedHgcroc[e][h]?1:0);
}
}
std::cout << std::endl;
if(allComplete()) {
assert(w==0);
return;
}
fHgcrocBoe.word(w);
DEBUG_PRINT << " processHgcrocWord, fL1Accept = " << fL1Accept << " &0xff = " << (fL1Accept&0xff) << std::endl;
fHgcrocBoe.print();