This commit is contained in:
parent
e695801d5d
commit
07d895dfeb
|
@ -159,12 +159,14 @@ void setProteusVwPassatB6() {
|
||||||
|
|
||||||
strncpy(config->luaScript, R"(
|
strncpy(config->luaScript, R"(
|
||||||
AIRBAG = 0x050
|
AIRBAG = 0x050
|
||||||
MOTOR_1 = 0x280
|
|
||||||
MOTOR_3 = 0x380
|
|
||||||
GRA = 0x388
|
GRA = 0x388
|
||||||
TCU_1 = 0x440
|
TCU_1 = 0x440
|
||||||
TCU_2 = 0x540
|
TCU_2 = 0x540
|
||||||
BRAKE_2 = 0x5A0
|
BRAKE_2 = 0x5A0
|
||||||
|
|
||||||
|
|
||||||
|
MOTOR_1 = 0x280
|
||||||
|
MOTOR_3 = 0x380
|
||||||
MOTOR_INFO = 0x580
|
MOTOR_INFO = 0x580
|
||||||
MOTOR_5 = 0x480
|
MOTOR_5 = 0x480
|
||||||
MOTOR_6 = 0x488
|
MOTOR_6 = 0x488
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
#define ARRAY_EQUALS "function equals(data1, data2) \
|
#define ARRAY_EQUALS "function equals(data1, data2) \
|
||||||
\
|
\
|
||||||
local index = 1 \
|
local index = 1 \
|
||||||
|
if data1 == nil then \
|
||||||
|
return -666 \
|
||||||
|
end \
|
||||||
while data1[index] ~= nil do \
|
while data1[index] ~= nil do \
|
||||||
if math.floor(data1[index]) ~= math.floor(data2[index]) then \
|
if math.floor(data1[index]) ~= math.floor(data2[index]) then \
|
||||||
return -1 - index \
|
return -1 - index \
|
||||||
|
@ -98,4 +101,21 @@ function getBitRange(data, bitIndex, bitWidth) \
|
||||||
end \
|
end \
|
||||||
"
|
"
|
||||||
|
|
||||||
|
#define SET_BIT_RANGE_LSB " \
|
||||||
|
function setBitRange(data, totalBitIndex, bitWidth, value) \
|
||||||
|
local byteIndex = totalBitIndex >> 3 \
|
||||||
|
local bitInByteIndex = totalBitIndex - byteIndex * 8 \
|
||||||
|
if (bitInByteIndex + bitWidth > 8) then \
|
||||||
|
bitsToHandleNow = 8 - bitInByteIndex \
|
||||||
|
setBitRange(data, totalBitIndex + bitsToHandleNow, bitWidth - bitsToHandleNow, value >> bitsToHandleNow) \
|
||||||
|
bitWidth = bitsToHandleNow; \
|
||||||
|
end \
|
||||||
|
mask = (1 << bitWidth) - 1 \
|
||||||
|
data[1 + byteIndex] = data[1 + byteIndex] & (~(mask << bitInByteIndex)) \
|
||||||
|
maskedValue = value & mask \
|
||||||
|
shiftedValue = maskedValue << bitInByteIndex \
|
||||||
|
data[1 + byteIndex] = data[1 + byteIndex] | shiftedValue \
|
||||||
|
end \
|
||||||
|
"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -131,25 +131,27 @@ TEST(LuaVag, unpackMotor1_torq_req) {
|
||||||
EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(realdata).value_or(0), 21.84);
|
EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(realdata).value_or(0), 21.84);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define realMotor3Packet "\ndata = { 0x00, 0x62, 0xFA, 0x00, 0x22, 0x00, 0x00, 0xFA}\n "
|
#define realMotor3Packet "\ndata = { 0x00, 0x62, 0xFA, 0xDA, 0x22, 0x00, 0x00, 0xFA}\n "
|
||||||
|
|
||||||
TEST(LuaVag, packMotor3) {
|
TEST(LuaVag, packMotor3) {
|
||||||
const char* script = PRINT_ARRAY ARRAY_EQUALS SET_TWO_BYTES R"(
|
const char* script = SET_BIT_RANGE_LSB PRINT_ARRAY ARRAY_EQUALS SET_TWO_BYTES R"(
|
||||||
|
|
||||||
function testFunc()
|
function testFunc()
|
||||||
tps = 100
|
tps = 100
|
||||||
iat = 25.5
|
iat = 25.5
|
||||||
|
desired_wheel_torque = 284.7
|
||||||
|
|
||||||
canMotor3 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
|
canMotor3 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
|
||||||
|
|
||||||
canMotor3[2] = (iat + 48) / 0.75
|
canMotor3[2] = (iat + 48) / 0.75
|
||||||
canMotor3[3] = tps / 0.4
|
canMotor3[3] = tps / 0.4
|
||||||
canMotor3[5] = 0x22
|
canMotor3[5] = 0x20
|
||||||
|
setBitRange(canMotor3, 24, 12, math.floor(desired_wheel_torque / 0.39))
|
||||||
canMotor3[8] = tps / 0.4
|
canMotor3[8] = tps / 0.4
|
||||||
|
|
||||||
print(arrayToString(canMotor3))
|
print(arrayToString(canMotor3))
|
||||||
|
|
||||||
expected = { 0x00, 0x62, 0xFA, 0x00, 0x22, 0x00, 0x00, 0xFA }
|
expected = { 0x00, 0x62, 0xFA, 0xDA, 0x22, 0x00, 0x00, 0xFA }
|
||||||
return equals(canMotor3, expected)
|
return equals(canMotor3, expected)
|
||||||
end
|
end
|
||||||
)";
|
)";
|
||||||
|
@ -180,6 +182,61 @@ TEST(LuaVag, unpackMotor3_pps) {
|
||||||
EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(script).value_or(0), 100);
|
EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(script).value_or(0), 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(LuaVag, setBitRange) {
|
||||||
|
{
|
||||||
|
const char* script = PRINT_ARRAY ARRAY_EQUALS SET_BIT_RANGE_LSB R"(
|
||||||
|
|
||||||
|
function testFunc()
|
||||||
|
data = { 0x34, 0x56, 0x00 }
|
||||||
|
setBitRange(data, 4, 8, 0xAB)
|
||||||
|
|
||||||
|
print(arrayToString(data))
|
||||||
|
|
||||||
|
expected = { 0xB4, 0x5A, 0x00 }
|
||||||
|
return equals(data, expected)
|
||||||
|
end
|
||||||
|
)";
|
||||||
|
|
||||||
|
EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(script).value_or(0), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const char* script = PRINT_ARRAY ARRAY_EQUALS SET_BIT_RANGE_LSB R"(
|
||||||
|
|
||||||
|
function testFunc()
|
||||||
|
data = { 0x00, 0x00, 0x00 }
|
||||||
|
setBitRange(data, 5, 9, 0x1FF)
|
||||||
|
|
||||||
|
print(arrayToString(data))
|
||||||
|
|
||||||
|
expected = { 0xE0, 0x3F, 0x00 }
|
||||||
|
return equals(data, expected)
|
||||||
|
end
|
||||||
|
)";
|
||||||
|
|
||||||
|
EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(script).value_or(0), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
const char* script = PRINT_ARRAY ARRAY_EQUALS SET_BIT_RANGE_LSB R"(
|
||||||
|
|
||||||
|
function testFunc()
|
||||||
|
data = { 0xFF, 0xFF, 0x00 }
|
||||||
|
setBitRange(data, 5, 9, 0x0)
|
||||||
|
|
||||||
|
print(arrayToString(data))
|
||||||
|
|
||||||
|
expected = { 0x1F, 0xC0, 0x00 }
|
||||||
|
return equals(data, expected)
|
||||||
|
end
|
||||||
|
)";
|
||||||
|
|
||||||
|
EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(script).value_or(0), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
TEST(LuaVag, unpackMotor3_iat) {
|
TEST(LuaVag, unpackMotor3_iat) {
|
||||||
const char* script = GET_BIT_RANGE_LSB realMotor3Packet R"(
|
const char* script = GET_BIT_RANGE_LSB realMotor3Packet R"(
|
||||||
function testFunc()
|
function testFunc()
|
||||||
|
@ -191,6 +248,17 @@ TEST(LuaVag, unpackMotor3_iat) {
|
||||||
EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(script).value_or(0), 25.5);
|
EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(script).value_or(0), 25.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(LuaVag, unpackMotor3_desired_wheel_torque) {
|
||||||
|
const char* script = GET_BIT_RANGE_LSB realMotor3Packet R"(
|
||||||
|
function testFunc()
|
||||||
|
desired_wheel_torque = getBitRange(data, 24, 12) * 0.39
|
||||||
|
return desired_wheel_torque
|
||||||
|
end
|
||||||
|
)";
|
||||||
|
|
||||||
|
EXPECT_NEAR_M3(testLuaReturnsNumberOrNil(script).value_or(0), 284.7);
|
||||||
|
}
|
||||||
|
|
||||||
#define realMotor6Packet "\ndata = { 0x3D, 0x54, 0x69, 0x7E, 0xFE, 0xFF, 0xFF, 0x80}\n "
|
#define realMotor6Packet "\ndata = { 0x3D, 0x54, 0x69, 0x7E, 0xFE, 0xFF, 0xFF, 0x80}\n "
|
||||||
|
|
||||||
TEST(LuaVag, unpackMotor6_actual_torq) {
|
TEST(LuaVag, unpackMotor6_actual_torq) {
|
||||||
|
|
Loading…
Reference in New Issue