Skip to content

Commit 71cac35

Browse files
committed
Implement more performant algorithm to get value for little endian
1 parent 9a347c9 commit 71cac35

File tree

1 file changed

+5
-7
lines changed

1 file changed

+5
-7
lines changed

src/message.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,8 @@ Message::ParseSignalsStatus Message::parseSignals(const std::vector<uint8_t>& da
3434
uint32_t start_bit = 8 * (signal.start_bit / 8) + (7 - (signal.start_bit % 8)); // Calculation taken from python CAN
3535
v = data_big_endian << start_bit;
3636
v = v >> (len - signal.size);
37-
} else {
38-
const uint32_t shiftLeft = (len - (signal.size + signal.start_bit));
39-
v = data_little_endian << shiftLeft;
40-
v = v >> (shiftLeft + signal.start_bit);
41-
}
37+
} else
38+
v = data_little_endian >> signal.start_bit;
4239

4340
if (signal.is_signed && signal.size > 1) {
4441
switch (signal.size) {
@@ -61,14 +58,15 @@ Message::ParseSignalsStatus Message::parseSignals(const std::vector<uint8_t>& da
6158
if (negative)
6259
nativeInt = v | ~((1 << signal.size) - 1); // invert all bits above signal.size
6360
else
64-
nativeInt = v;
61+
nativeInt = v & ((1 << signal.size) - 1); // masking
6562
values.push_back(nativeInt * signal.factor + signal.offset);
6663
break;
6764
}
6865
}
6966
} else {
7067
// use only the relevant bits
71-
values.push_back((v & ((1 << signal.size) - 1)) * signal.factor + signal.offset);
68+
v = v & ((1 << signal.size) - 1); // masking
69+
values.push_back(v * signal.factor + signal.offset);
7270
}
7371
}
7472
return ParseSignalsStatus::Success;

0 commit comments

Comments
 (0)