rusefi/firmware/config/engines/nissan_vq.lua

204 lines
5.1 KiB
Lua

// by definition this should be a copy-paste of https://github.com/rusefi/rusefi/blob/master/firmware/controllers/lua/examples/350z-ac.txt
strncpy(config->luaScript, R"(
IN_284 = 0x284 -- 644
IN_285 = 0x285 -- 645
IN_285 = 0x285
IN_35D = 0x35d
ENGINE_1_1F9_505 = 505
ENGINE_2_561 = 561
ENGINE_7_233_563 = 563
ENGINE_3_23D_573 = 573
ENGINE_4_23E_574 = 574
ENGINE_5_551_1361 = 1361
ENGINE_6_580_1408 = 1408
speedSensor = Sensor.new("VehicleSpeed")
speedSensor : setTimeout(3000)
setTickRate(100)
startUpTimer = Timer.new()
startUpTimer : reset()
rpm = 0
pps = 0
globalAcOut = 0
cltGauge = 0
function getTwoBytesMSB(data, offset, factor)
return (data[offset + 1] * 256 + data[offset + 2]) * factor
end
-- Little-endian System, "Intel"
function setTwoBytesLsb(data, offset, value)
value = math.floor(value)
data[offset + 2] = value >> 8
data[offset + 1] = value & 0xff
end
payloadENGINE_3_573 = { 0x00, 0, 0x0C, 0x01, 0x0A, 0x87, 0xFF, 0xFF }
function sendENGINE_3_573()
rpmWithSweep = startUpTimer : getElapsedSeconds() < 2 and 8000 or rpm
setTwoBytesLsb(payloadENGINE_3_573, 3, rpmWithSweep / 3.125)
payloadENGINE_3_573[2] = pps / 0.392
payloadENGINE_3_573[3] = pps / 0.392 -- Throttle_position_capped
payloadENGINE_3_573[8] = cltGauge
txCan(1, ENGINE_3_23D_573, 0, payloadENGINE_3_573)
end
payloadENGINE_7_563 = {0x79, 0xa2, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x01}
function sendENGINE_7_233_563()
local RPMread = rpm / 3.125
local RPMhi = RPMread / 256
local RPMlo = RPMread
payloadENGINE_7_563[1] = cltGauge
payloadENGINE_7_563[4] = state_233
payloadENGINE_7_563[5] = RPMlo
payloadENGINE_7_563[8] = RPMhi
state_233 = rpm > 250 and 0x10 or 0x18
txCan(1, ENGINE_7_233_563, 0, payloadENGINE_7_563) -- transmit CLT and RPM for who knows whom
end
function sendENGINE_1_505()
if rpm > 250 then
if cltValue <= 80 then
txCan(1, ENGINE_1_1F9_505, 0, fanPayloadOff)
elseif cltValue < 85 then
-- send nothing
elseif cltValue < 90 then
txCan(1, ENGINE_1_1F9_505, 0, fanPayloadLo)
else
txCan(1, ENGINE_1_1F9_505, 0, fanPayloadHi)
end
else
txCan(1, ENGINE_1_1F9_505, 0, fanPayloadOff)
end
-- print('CLT temp' ..cltValue)
end
payloadENGINE_2_561 = {0xe0, 0x80, 0x09, 0xe0, 0xd4, 0xc3, 0x4c, 0x9e}
function sendENGINE_2_231_561()
payloadENGINE_2_561[3] = pps / 0.5 -- tps or pps
txCan(1, ENGINE_2_561, 0, payloadENGINE_2_561)
end
payloadENGINE_4_574 = {0x00, 0x40, 0xff, 0x45, 0x00, 0xd6, 0x00, 0xa2}
function sendENGINE_4_23E_574()
payloadENGINE_4_574[3] = (100 - pps) / 0.392 -- data[3] -- affects desired torque converter pressure Throttle_position_inverted
payloadENGINE_4_574[7] = pps / 0.392 -- data[7] -- TPS
txCan(1, ENGINE_4_23E_574, 0, payloadENGINE_4_574)
end
CAN_721_2d1 = 721
payload721_2d1 = {0x00, 0x84, 0x00, 0x00, 0x31, 0xf8, 0x01}
function sendCan721_2d1()
txCan(1, CAN_721_2d1, 0, payload721_2d1)
end
CAN_734_2de = 734
payload734_2de = {0x0f, 0x08, 0x02, 0x00, 0x19, 0x65, 0x07, 0xa8}
function sendCan734_2de()
txCan(1, CAN_734_2de, 0, payload734_2de)
end
payloadENGINE_5 = {0x7d, 0xdb, 0x00, 0xa0, 0x00, 0x02, 0x80, 0xff}
function sendENGINE_5_551_1361()
txCan(1, ENGINE_5_551_1361, 0, payloadENGINE_5)
end
payloadENGINE_6 = {0x00, 0x82, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00}
function sendEngine6_580_1408()
txCan(1, ENGINE_6_580_1408, 0, payloadENGINE_6)
end
_10msPeriodTimer = Timer.new()
_15msPeriodTimer = Timer.new()
function onTick()
pps = getSensor("AcceleratorPedal") or 0
pps = (pps == nil and 0 or pps)
rpm = math.floor(getSensor("RPM") + 0.5)
cltValue = getSensor("CLT")
cltValue = (cltValue == nil and 0 or cltValue)
--print('ac out = ' ..globalAcOut)
if globalAcOut == 1 and rpm > 250 then
fanPayloadOff = { 0x88, 0x00 }
fanPayloadLo = { 0x88, 0x00 }
fanPayloadHi = { 0x88, 0x00 }
else
--print('ac off payload')
fanPayloadOff = { 0x00, 0x00 }
fanPayloadLo = { 0x40, 0x00 }
fanPayloadHi = { 0x80, 0x00 }
end
-- clt gauge stuff
if cltValue < 115 then
cltGauge = math.floor(cltValue * 1.5 + 0.5)
else
cltGauge = 0xF0
end
if _10msPeriodTimer : getElapsedSeconds() > 0.01 then
_10msPeriodTimer : reset()
sendENGINE_1_505()
sendENGINE_2_231_561()
sendENGINE_7_233_563()
sendENGINE_3_573()
sendENGINE_4_23E_574()
sendCan721_2d1()
sendCan734_2de()
end
if _15msPeriodTimer : getElapsedSeconds() > 0.015 then
_15msPeriodTimer : reset()
sendENGINE_5_551_1361()
sendEngine6_580_1408()
end
end
function onCanRxAbs1(bus, id, dlc, data)
kph = getTwoBytesMSB(data, 0, 0.005)
speedSensor : set(kph)
end
function onCanRxAc(bus, id, dlc, data)
--print('got CAN id=' ..id ..' dlc=' ..dlc)
--print('ac value is= '..data[1])
if data[1] == 193 then
setAcRequestState(true)
globalAcOut = 1
--print('ac is on')
else
setAcRequestState(false)
globalAcOut = 0
--print('ac is off')
end
end
function onCanRxWheelSpeed1(bus, id, dlc, data)
end
function onCanRxWheelSpeed2(bus, id, dlc, data)
end
canRxAdd(IN_284, onCanRxWheelSpeed1)
canRxAdd(IN_285, onCanRxWheelSpeed2)
canRxAdd(IN_35D, onCanRxAbs1)
canRxAdd(IN_35D, onCanRxAc)
)", efi::size(config->luaScript));