From 9b920bf2fa16d4e08647f9d0f557eca00b7bf064 Mon Sep 17 00:00:00 2001 From: Andrey Date: Wed, 15 Nov 2023 00:28:43 -0500 Subject: [PATCH] getBitRangeMsb --- firmware/controllers/lua/lua_lib.h | 13 +++++++++++++ unit_tests/tests/lua/test_lua_e65.cpp | 13 ++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/firmware/controllers/lua/lua_lib.h b/firmware/controllers/lua/lua_lib.h index 2ca63f7cb8..04b7387c4b 100644 --- a/firmware/controllers/lua/lua_lib.h +++ b/firmware/controllers/lua/lua_lib.h @@ -108,6 +108,19 @@ function getBitRange(data, bitIndex, bitWidth) \n\ end \n\ " +#define GET_BIT_RANGE_MSB " \ +function getBitRangeMsb(data, bitIndex, bitWidth) \n\ + byteIndex = bitIndex >> 3 \n\ + shift = bitIndex - byteIndex * 8 \n\ + value = data[1 + byteIndex] \n\ + if (shift + bitWidth > 8) then \n\ + value = value + data[0 + byteIndex] * 256 \ + end \n\ + mask = (1 << bitWidth) - 1 \n\ + return (value >> shift) & mask \n\ +end \n\ +" + #define SET_BIT_RANGE_LSB " \ function setBitRange(data, totalBitIndex, bitWidth, value) \ local byteIndex = totalBitIndex >> 3 \ diff --git a/unit_tests/tests/lua/test_lua_e65.cpp b/unit_tests/tests/lua/test_lua_e65.cpp index 8d6c42272d..392cfc8b53 100644 --- a/unit_tests/tests/lua/test_lua_e65.cpp +++ b/unit_tests/tests/lua/test_lua_e65.cpp @@ -92,7 +92,18 @@ TEST(LuaE65, gearTorque) { return getBitRange(data, 12, 12) end)"; - EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(realdata).value_or(0), 800); + EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(realdata).value_or(0), 0x320); +} + +TEST(LuaE65, offtopicTestGetBitRangeMsb) { + const char* realdata = GET_BIT_RANGE_MSB R"( + + function testFunc() + data = {0x9F, 0x01, 0x32, 0x20, 0x23, 0x30, 0xFF, 0x43} + return getBitRangeMsb(data, 12, 12) + end)"; + + EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(realdata).value_or(0), 0x9F0); } TEST(LuaE65, gearTorque2) {