Bug #676
Updated by Stephen Wood about 2 years ago
I don't know if this is an Analyzer decoder bug or if hcana's TIBlobModule needs to be written differently.
PipeliningModule::LoadBank in non multiblock uses FindIDWord to find the end of the bank by looking for a particular pattern. When it calls TIBlobModule::LoadSlot (from hcana) it sometimes returns a pointer to the end of the bank that is too early. One of the words in the TIBlobModule is the TI time which can be anything. So sometimes the TI time matches the pattern that FindIDWord is looking for.
A non-problematic bank looks like:
<uint32 data_type="0x1" tag="4" num="0">
0x85422301 0xff112001 0x4010002 0x223 0x8bee531b
0x8d400006 0xfd4f1110 0xfd4f1110
</uint32>
The 0xbee531b word is the TI time and 0x8d400006 is the trailer word pattern pattern that FindIdWord matches. (kBlockTrailer and slot 21).
A problematic bank looks like:
<uint32 data_type="0x1" tag="4" num="0">
0x85422401 0xff112001 0x4010002 0x224 0x8d6d1fbf
0x8d400006 0xfd4f1110 0xfd4f1110
</uint32>
Here 0x8d6d1fbf is the TI time, but it matches the pattern because FindIdWord only looks at the 10 bits.
I can simply ignore the length that is sent to TIBlobModule::LoadSlot, but that seems unsatisfatory.
I suppose the same issue could be in FindEventsInBlock for fMultiBlockMode. If so, maybe not all the events in a block might be found if a payload word matches the block trailer.