AIM SmartyCam CAN: Difference between revisions
No edit summary |
|||
Line 11: | Line 11: | ||
<pre> | <pre> | ||
--AIM Smarty Cam Stream For Race Capture | |||
--how frequently we poll for CAN messages | |||
tickRate = 30 | |||
--the CAN baud rate | |||
CAN_baud = 1000000 | |||
--CAN channel to listen on. 0=first CAN channel, 1=second | |||
CAN_chan = 0 | |||
--1 for Big Endian (MSB) mode; 0 for Little Endian mode (LSB) | |||
be_mode = 0 | |||
--add your virtual channels here | |||
tpsId = addChannel("TPS", 10, 0, 0, 100, "%") | |||
tempId = addChannel("EngineTemp", 1, 0, 0, 200, 'C') | |||
oilTempId = addChannel("OilTemp", 1, 0, 0, 200, 'C') | |||
rpmId = addChannel("RPM", 10, 0, 0, 10000, 'RPM') | |||
fuelId = addChannel("Fuel", 1, 0, 0, 60, "L") | |||
oilPresId = addChannel("OilPressure", 10, 0, 0, 10, 'Bar') | |||
--customize here for CAN channel mapping | |||
--format is: [CAN Id] = function(data) map_chan(<channel id>, data, <CAN offset>, <CAN length>, <multiplier>, <adder>) | |||
CAN_map = { | |||
[1056] = function(data) map_chan(rpmId, data, 0, 2, 1, 0) map_chan(tempId, data, 6, 2, 0.1, 0) end, | |||
[1057] = function(data) map_chan(oilTempId, data, 4, 2, 0.1, 0) map_chan(OilPresId, data, 6, 2, 0.01, 0) end, | |||
[1058] = function(data) map_chan(tpsId, data, 2, 1, 1, 0) end , | |||
[1070] = function(data) map_chan(fuelId, data, 0, 1, 1, 0) end | |||
} | |||
function onTick() | |||
processCAN(CAN_chan) | |||
end | |||
--===========do not edit below=========== | |||
function processCAN(chan) | |||
repeat | |||
local id, e, data = rxCAN(chan) | |||
if id ~= nil then | |||
local map = CAN_map[id] | |||
if map ~= nil then | |||
map(data) | |||
end | |||
end | |||
until id == nil | |||
end | |||
--Map CAN channel, little endian format | |||
function map_chan_le(cid, data, offset, len, mult, add) | |||
offset = offset + 1 | |||
local value = 0 | |||
local shift = 1 | |||
while len > 0 do | |||
value = value + (data[offset] * shift) | |||
shift = shift * 256 | |||
offset = offset + 1 | |||
len = len - 1 | |||
end | |||
setChannel(cid, (value * mult) + add) | |||
end | |||
--Map CAN channel, big endian format | |||
function map_chan_be(cid, data, offset, len, mult, add) | |||
offset = offset + 1 | |||
local value = 0 | |||
while len > 0 do | |||
value = (value * 256) + data[offset] | |||
offset = offset + 1 | |||
len = len - 1 | |||
end | |||
setChannel(cid, (value * mult) + add) | |||
end | |||
map_chan = (be_mode == 1) and map_chan_be or map_chan_le | |||
initCAN(CAN_chan, CAN_baud) | |||
setTickRate(tickRate) | |||
</pre> | </pre> |
Revision as of 19:07, 9 March 2015
Introduction
Under Development
Pictures
Connections
CAN database
Integration Script
--AIM Smarty Cam Stream For Race Capture --how frequently we poll for CAN messages tickRate = 30 --the CAN baud rate CAN_baud = 1000000 --CAN channel to listen on. 0=first CAN channel, 1=second CAN_chan = 0 --1 for Big Endian (MSB) mode; 0 for Little Endian mode (LSB) be_mode = 0 --add your virtual channels here tpsId = addChannel("TPS", 10, 0, 0, 100, "%") tempId = addChannel("EngineTemp", 1, 0, 0, 200, 'C') oilTempId = addChannel("OilTemp", 1, 0, 0, 200, 'C') rpmId = addChannel("RPM", 10, 0, 0, 10000, 'RPM') fuelId = addChannel("Fuel", 1, 0, 0, 60, "L") oilPresId = addChannel("OilPressure", 10, 0, 0, 10, 'Bar') --customize here for CAN channel mapping --format is: [CAN Id] = function(data) map_chan(<channel id>, data, <CAN offset>, <CAN length>, <multiplier>, <adder>) CAN_map = { [1056] = function(data) map_chan(rpmId, data, 0, 2, 1, 0) map_chan(tempId, data, 6, 2, 0.1, 0) end, [1057] = function(data) map_chan(oilTempId, data, 4, 2, 0.1, 0) map_chan(OilPresId, data, 6, 2, 0.01, 0) end, [1058] = function(data) map_chan(tpsId, data, 2, 1, 1, 0) end , [1070] = function(data) map_chan(fuelId, data, 0, 1, 1, 0) end } function onTick() processCAN(CAN_chan) end --===========do not edit below=========== function processCAN(chan) repeat local id, e, data = rxCAN(chan) if id ~= nil then local map = CAN_map[id] if map ~= nil then map(data) end end until id == nil end --Map CAN channel, little endian format function map_chan_le(cid, data, offset, len, mult, add) offset = offset + 1 local value = 0 local shift = 1 while len > 0 do value = value + (data[offset] * shift) shift = shift * 256 offset = offset + 1 len = len - 1 end setChannel(cid, (value * mult) + add) end --Map CAN channel, big endian format function map_chan_be(cid, data, offset, len, mult, add) offset = offset + 1 local value = 0 while len > 0 do value = (value * 256) + data[offset] offset = offset + 1 len = len - 1 end setChannel(cid, (value * mult) + add) end map_chan = (be_mode == 1) and map_chan_be or map_chan_le initCAN(CAN_chan, CAN_baud) setTickRate(tickRate)