204 lines
5.1 KiB
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));
|