getMapping static method
Returns a mapping to be used when decoding
This mapping contains the weight each bit will have towards a decoded value
Implementation
static List<int> getMapping(int length, int start, DBCSignalType signalType) {
if (signalType == DBCSignalType.INTEL) {
List<int> data = List.filled(64, 0);
int exp = 0;
List<int> indexes = List.filled(length, 0);
int idxIdx = 0;
while (idxIdx < indexes.length) {
indexes[idxIdx++] = start++;
}
for (int byte = 0; byte < maxPayload; byte++) {
int offset = byte * byteLen;
for (int bit = offset; bit < offset + byteLen; bit++) {
if (indexes.contains(bit)) {
data[bit] = pow(2, exp++).toInt();
}
}
}
return data;
} else {
List<int> data = List.filled(64, 0);
int exp = length - 1;
int trueStart = start;
if (start.remainder(byteLen) < length) {
trueStart = start - start.remainder(byteLen);
} else {
trueStart = start - length + 1;
}
List<int> indexes = List.filled(length, 0);
int idxIdx = 0;
int rem = 0;
rem = start.remainder(byteLen) == 0 ? 8 : start.remainder(byteLen) + 1;
rem = min(rem, length);
while (idxIdx < indexes.length) {
indexes[idxIdx] = trueStart + rem - 1;
idxIdx++;
trueStart--;
if ((trueStart + rem) % byteLen == 0) {
trueStart += (byteLen + rem + (length - idxIdx).remainder(byteLen));
rem = (length - idxIdx).remainder(byteLen) == 0
? 8
: (length - idxIdx).remainder(byteLen);
}
}
for (int byte = 0; byte < maxPayload; byte++) {
int offset = byte * byteLen;
for (int bit = byteLen - 1 + offset; bit >= offset; bit--) {
if (indexes.contains(bit)) {
data[bit] = pow(2, exp--).toInt();
}
}
}
return data;
}
}