AIM SmartyCam CAN
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)