Fix #1024 by changing decode channel assigment to PDs
authorSoeren Apel <soeren@apelpie.net>
Fri, 8 Sep 2017 16:14:47 +0000 (18:14 +0200)
committerSoeren Apel <soeren@apelpie.net>
Fri, 8 Sep 2017 19:01:41 +0000 (21:01 +0200)
commit6e7a4a0066c15d99c891765bbc6797d339ac0ec8
treeee477dbaaeceb596caef804ce66b7fdd770fdea2
parent03d2a4f8cacda8ad1d79b4e6a312ebe30b835a55
Fix #1024 by changing decode channel assigment to PDs

When assigning the decoder stack channels to the libsrd
instance's channels, channels that had no signal assigned
to them were still assigned anyway. This patch fixes this bug.

After doing this, another subtle bug became apparent:
The mapping between channels and bits in the data stream sent
to the PD was done via DecodeChannel->id. This is however
insufficient as the channels of the decoder stack have
IDs that may or may not match the ID needed for the data
stream. Example:

A PD has 4 channels: A, B, C and D. In PV, those channels
have the IDs 0, 1, 2 and 3. If the user only assigns A and D,
Decoder::create_decoder_inst() will use the IDs 0 and 3 as
the bit positions of those signals in the data stream sent
to libsrd. This is obviously wrong.

Hence, we now use a separate bit_id for this purpose.
pv/data/decode/decoder.cpp
pv/data/decodesignal.cpp
pv/data/decodesignal.hpp