108 lines
2.1 KiB
Plaintext
108 lines
2.1 KiB
Plaintext
function setTwoBytes(data, offset, value)
|
|
value = math.floor(value)
|
|
data[offset + 2] = value >> 8
|
|
data[offset + 1] = value & 0xff
|
|
end
|
|
|
|
R52_RPM = 0x316
|
|
|
|
data = { 0, 0, 0, 00, 0, 0 , 0, 0 }
|
|
|
|
-- just nice init position
|
|
rpm = 4000
|
|
|
|
|
|
-- https://rusefi.com/forum/viewtopic.php?f=4&t=2325
|
|
-- tested on 9286699
|
|
|
|
-- CAN Rx Channels
|
|
IDRIVE_BUTTONS = 0x267
|
|
IDRIVE_ROTARY = 0x264
|
|
|
|
-- CAN Tx Channels
|
|
IDRIVE_BRIGHTNESS = 0x202
|
|
IDRIVE_HEARBEAT = 0x560
|
|
IDRIVE_ROTARY_INIT = 0x273
|
|
|
|
brighness = 0
|
|
|
|
canRxAdd(IDRIVE_ROTARY) -- rotation
|
|
canRxAdd(IDRIVE_BUTTONS) -- buttons
|
|
|
|
setTickRate(5) -- set tick rate to 5hz
|
|
|
|
-- One time rotary initialisation
|
|
|
|
|
|
txCan(1, IDRIVE_ROTARY_INIT, 0, { 0x1D, 0xE1, 0x00, 0xF0, 0xFF, 0x7F, 0xDE, 0x04 })
|
|
|
|
function onCanRx(bus, id, dlc, data)
|
|
|
|
|
|
-- print('got CAN id=' ..id ..' dlc=' ..dlc)
|
|
|
|
if id == IDRIVE_BUTTONS then
|
|
-- print('got buttons @4=' ..data[4] ..' @6=' ..data[6])
|
|
|
|
if data[4] == 1 or data[4] == 2 then
|
|
print('got hold or release @4=' ..data[4] ..' @6=' ..data[6])
|
|
|
|
if data[6] == 2 and brighness > 0 then
|
|
brighness = brighness - 1
|
|
print('brighness ' ..brighness)
|
|
end
|
|
|
|
if data[6] == 4 and brighness < 15 then
|
|
brighness = brighness + 1
|
|
print('brighness ' ..brighness)
|
|
end
|
|
end
|
|
end
|
|
|
|
if id == IDRIVE_ROTARY then
|
|
if data[5] == 0x80 then
|
|
rightClicks = data[4]
|
|
print('rotary turned right ' ..rightClicks ..' clicks')
|
|
|
|
rpm = 400 * rightClicks
|
|
|
|
end
|
|
|
|
if data[5] == 0x7f then
|
|
print('rotary turned left ' ..255 - data[4] ..' clicks')
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
function onTick()
|
|
-- wake up, need to send once every 1.5 second but we can send more often because why not
|
|
txCan(1, IDRIVE_HEARBEAT, 0, { 3 })
|
|
txCan(1, IDRIVE_BRIGHTNESS, 0, { brighness * 16 + 0xd })
|
|
-- rpm = rpm + 300
|
|
-- if rpm > 8000 then
|
|
-- rpm = 0
|
|
-- end
|
|
|
|
setTwoBytes(data, 2, rpm * 6.39)
|
|
|
|
txCan(1, R52_RPM, 0, data)
|
|
|
|
|
|
-- 1 ABS and warm-up light but no tach
|
|
-- 3 blinker and alive
|
|
-- 4 ABS and alive
|
|
--
|
|
status2 = 2
|
|
|
|
-- status3 = 0xC0
|
|
status3 = 0x0
|
|
|
|
status4 = 0x0
|
|
-- status4 = 0xC0
|
|
-- with ABS with blinker with warm-up light
|
|
-- status4 = 0xFF
|
|
|
|
txCan(1, 0x61f, 0, { 0, 0, status2, status3, status, 0 , 0, 0 })
|
|
end
|