only:nissan TCU script progress
This commit is contained in:
parent
fdd9eddc3b
commit
b5fd520247
|
@ -0,0 +1,235 @@
|
|||
-- scriptname man-in-the-middle-nissan-tcu.txt
|
||||
|
||||
-- sometimes we want to cut a CAN bus and install rusEFI into that cut
|
||||
-- https://en.wikipedia.org/wiki/Man-in-the-middle_attack
|
||||
|
||||
-- this controls onCanRx rate as well!
|
||||
setTickRate(300)
|
||||
|
||||
ECU_BUS = 1
|
||||
-- really 'not ECU'
|
||||
TCU_BUS = 2
|
||||
|
||||
|
||||
TCU_251_593 = 593
|
||||
TCU_253_595 = 595
|
||||
|
||||
hexstr = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "A", "B", "C", "D", "E", "F" }
|
||||
|
||||
function toHexString(num)
|
||||
if num == 0 then
|
||||
return '0'
|
||||
end
|
||||
|
||||
local result = ""
|
||||
while num > 0 do
|
||||
local n = num % 16
|
||||
result = hexstr[n + 1] ..result
|
||||
num = math.floor(num / 16)
|
||||
end
|
||||
return result
|
||||
end
|
||||
|
||||
function arrayToString(arr)
|
||||
local str = ""
|
||||
local index = 1
|
||||
while arr[index] ~= nil do
|
||||
str = str.." "..toHexString(arr[index])
|
||||
index = index + 1
|
||||
end
|
||||
return str
|
||||
end
|
||||
|
||||
totalEcuMessages = 0
|
||||
totalTcuMessages = 0
|
||||
totalDropped = 0
|
||||
totalReplaced = 0
|
||||
|
||||
function silentDrop(bus, id, dlc, data)
|
||||
totalDropped = totalDropped + 1
|
||||
end
|
||||
|
||||
function printAndDrop(bus, id, dlc, data)
|
||||
print('Dropping ' ..arrayToString(data))
|
||||
totalDropped = totalDropped + 1
|
||||
end
|
||||
|
||||
|
||||
ENGINE_1_505 = 505
|
||||
ENGINE_2_561 = 561
|
||||
ENGINE_7_563 = 563
|
||||
ENGINE_3_573 = 573
|
||||
ENGINE_4_574 = 574
|
||||
ENGINE_5_1361 = 1361
|
||||
ENGINE_6_1408 = 1408
|
||||
|
||||
function onAnythingFromECU(bus, id, dlc, data)
|
||||
-- totalEcuMessages = totalEcuMessages + 1
|
||||
if id ~= ENGINE_1_505
|
||||
and id ~= ENGINE_2_561
|
||||
and id ~= ENGINE_7_563
|
||||
and id ~= ENGINE_3_573
|
||||
and id ~= ENGINE_4_574
|
||||
and id ~= ENGINE_5_1361
|
||||
and id ~= ENGINE_6_1408
|
||||
and id ~= 721
|
||||
and id ~= 734
|
||||
then
|
||||
print('from ECU ' ..id .." " ..arrayToString(data) .." dropped=" ..totalDropped .." replaced " ..totalReplaced)
|
||||
end
|
||||
if id < 2048 then
|
||||
txCan(TCU_BUS, id, 0, data) -- relay non-TCU message to TCU
|
||||
else
|
||||
print ("Not relaying EXT" .. id)
|
||||
end
|
||||
end
|
||||
|
||||
function relayFromECU(bus, id, dlc, data)
|
||||
totalEcuMessages = totalEcuMessages + 1
|
||||
|
||||
|
||||
txCan(TCU_BUS, id, 0, data) -- relay non-TCU message to TCU
|
||||
end
|
||||
|
||||
function onAnythingFromTCU(bus, id, dlc, data)
|
||||
totalTcuMessages = totalTcuMessages + 1
|
||||
if id ~= TCU_251_593 and id ~= TCU_253_595 then
|
||||
print('from TCU ' ..id .." " ..arrayToString(data) .." dropped=" ..totalDropped .." replaced " ..totalReplaced)
|
||||
end
|
||||
txCan(ECU_BUS, id, 0, data) -- relay non-ECU message to ECU
|
||||
end
|
||||
|
||||
--function getTwoBytesLSB(data, offset, factor)
|
||||
-- return (data[offset + 2] * 256 + data[offset + 1]) * factor
|
||||
--end
|
||||
|
||||
function getTwoBytesMSB(data, offset, factor)
|
||||
return (data[offset + 1] * 256 + data[offset + 2]) * factor
|
||||
end
|
||||
|
||||
function setTwoBytesMsb(data, offset, value)
|
||||
value = math.floor(value)
|
||||
data[offset + 1] = value >> 8
|
||||
data[offset + 2] = value & 0xff
|
||||
end
|
||||
|
||||
local rpm = 0
|
||||
|
||||
payloadENGINE_1_505 = {0x20, 0x00, 0x1a, 0x5e, 0x00, 0x00, 0x00, 0x00}
|
||||
function onENGINE_1_505(bus, id, dlc, data)
|
||||
rpm = getTwoBytesMSB(data, 2, 0.125)
|
||||
|
||||
setTwoBytesMsb(data, 2, 8 * rpm)
|
||||
txCan(TCU_BUS, ENGINE_1_505, 0, payloadENGINE_1_505)
|
||||
end
|
||||
|
||||
pps = 0
|
||||
-- 231
|
||||
payloadENGINE_2_561 = {0xe0, 0x80, 0x09, 0xe0, 0xd4, 0xc3, 0x4c, 0x9e}
|
||||
function onENGINE_2_561(bus, id, dlc, data)
|
||||
payloadENGINE_2_561[3] = pps / 0.5 -- data[3] -- tps or pps
|
||||
txCan(TCU_BUS, ENGINE_2_561, 0, payloadENGINE_2_561)
|
||||
end
|
||||
|
||||
payloadENGINE_7_563 = {0x79, 0xa2, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x01}
|
||||
-- 233
|
||||
function onENGINE_7_563(bus, id, dlc, data)
|
||||
rpm315
|
||||
payloadENGINE_7_563[4] = data[4] -- RPMlow
|
||||
payloadENGINE_7_563[7] = data[7] -- RPMhi
|
||||
txCan(TCU_BUS, ENGINE_7_563, 0, payloadENGINE_7_563)
|
||||
end
|
||||
|
||||
payloadENGINE_3_573 = {0x00, 0x0e, 0x0b, 0x0e, 0x01, 0x38, 0x00, 0x79}
|
||||
-- 23D
|
||||
function onENGINE_3_573(bus, id, dlc, data)
|
||||
-- payloadENGINE_3_573[1] = data[1]
|
||||
payloadENGINE_3_573[2] = data[2]
|
||||
pps = payloadENGINE_3_573[2] * 0.392
|
||||
payloadENGINE_3_573[3] = pps / 0.392 -- data[3] -- Throttle_position_capped
|
||||
-- payloadENGINE_3_573[7] = data[7] -- CLT
|
||||
txCan(TCU_BUS, ENGINE_3_573, 0, payloadENGINE_3_573)
|
||||
-- txCan(TCU_BUS, ENGINE_3_573, 0, data)
|
||||
end
|
||||
|
||||
ENGINE_4_574 = 574
|
||||
payloadENGINE_4_574 = {0x00, 0x40, 0xff, 0x45, 0x00, 0xd6, 0x00, 0xa2}
|
||||
-- 23E
|
||||
function onENGINE_4_574(bus, id, dlc, data)
|
||||
payloadENGINE_4_574[3] = 0xFF pps / 0.392 -- data[3] -- affects desired torque converter pressure Throttle_position_inverted
|
||||
payloadENGINE_4_574[7] = pps / 0.392 -- data[7] -- TPS
|
||||
txCan(TCU_BUS, ENGINE_4_574, 0, payloadENGINE_4_574)
|
||||
end
|
||||
|
||||
payloadENGINE_5 = {0x7d, 0xdb, 0x00, 0xa0, 0x00, 0x02, 0x80, 0xff}
|
||||
function onENGINE_5(bus, id, dlc, data)
|
||||
txCan(TCU_BUS, ENGINE_5_1361, 0, payloadENGINE_5)
|
||||
end
|
||||
|
||||
payloadENGINE_6 = {0x00, 0x82, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00}
|
||||
function onENGINE_6(bus, id, dlc, data)
|
||||
txCan(TCU_BUS, ENGINE_6_1408, 0, payloadENGINE_6)
|
||||
end
|
||||
|
||||
canRxAdd(ECU_BUS, ENGINE_1_505, onENGINE_1_505)
|
||||
canRxAdd(ECU_BUS, ENGINE_2_561, onENGINE_2_561)
|
||||
canRxAdd(ECU_BUS, ENGINE_7_563, onENGINE_7_563)
|
||||
canRxAdd(ECU_BUS, ENGINE_3_573, onENGINE_3_573)
|
||||
canRxAdd(ECU_BUS, ENGINE_4_574, onENGINE_4_574)
|
||||
canRxAdd(ECU_BUS, ENGINE_5_1361, onENGINE_5)
|
||||
canRxAdd(ECU_BUS, ENGINE_6_1408, onENGINE_6)
|
||||
|
||||
|
||||
--canRxAdd(ECU_BUS, ENGINE_4_574, silentDrop)
|
||||
--canRxAdd(ECU_BUS, ENGINE_5_1361, relayFromECU)
|
||||
--canRxAdd(ECU_BUS, ENGINE_6_1408, relayFromECU)
|
||||
|
||||
--canRxAdd(ECU_BUS, 721, silentDrop) -- required for TCU not to throw code
|
||||
--canRxAdd(ECU_BUS, 734, silentDrop) -- required for TCU not to throw code
|
||||
|
||||
|
||||
canRxAdd(ECU_BUS, 2, silentDrop)
|
||||
canRxAdd(ECU_BUS, 533, silentDrop)
|
||||
canRxAdd(ECU_BUS, 534, silentDrop)
|
||||
canRxAdd(ECU_BUS, 640, silentDrop)
|
||||
canRxAdd(ECU_BUS, 644, silentDrop)
|
||||
canRxAdd(ECU_BUS, 645, silentDrop)
|
||||
canRxAdd(ECU_BUS, 670, silentDrop)
|
||||
canRxAdd(ECU_BUS, 672, silentDrop)
|
||||
canRxAdd(ECU_BUS, 677, silentDrop)
|
||||
|
||||
canRxAdd(ECU_BUS, 861, silentDrop)
|
||||
canRxAdd(ECU_BUS, 901, silentDrop)
|
||||
|
||||
canRxAdd(ECU_BUS, 852, silentDrop)
|
||||
canRxAdd(ECU_BUS, 856, silentDrop)
|
||||
canRxAdd(ECU_BUS, 1940, silentDrop)
|
||||
canRxAdd(ECU_BUS, 1783, silentDrop)
|
||||
canRxAdd(ECU_BUS, 1477, silentDrop)
|
||||
canRxAdd(ECU_BUS, 1549, silentDrop)
|
||||
canRxAdd(ECU_BUS, 1738, silentDrop)
|
||||
canRxAdd(ECU_BUS, 1573, silentDrop)
|
||||
|
||||
|
||||
-- last option: unconditional forward of all remaining messages
|
||||
canRxAddMask(ECU_BUS, 0, 0, onAnythingFromECU)
|
||||
canRxAddMask(TCU_BUS, 0, 0, onAnythingFromTCU)
|
||||
|
||||
everySecondTimer = Timer.new()
|
||||
|
||||
_10msPeriodTimer = Timer.new()
|
||||
|
||||
function onTick()
|
||||
if everySecondTimer : getElapsedSeconds() > 1 then
|
||||
print("rpm " .. rpm .. " pps " .. pps)
|
||||
everySecondTimer : reset()
|
||||
print("Total from ECU " ..totalEcuMessages .." from TCU " ..totalTcuMessages .." dropped=" ..totalDropped .." replaced " ..totalReplaced)
|
||||
end
|
||||
|
||||
if _10msPeriodTimer : getElapsedSeconds() > 0.01 then
|
||||
_10msPeriodTimer : reset()
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
Loading…
Reference in New Issue