You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

111 lines
2.7 KiB

local M = {}
local cbor = require("cbor");
-- Connection settings
local ip = "127.0.0.1"
local port = 4444
local udpSocket = nil
-- Car settings
local minOilTemp = 50
local maxOilTemp = 90
local coldOilRPMCoef = 0.5
local function sendPackage(ip, port, id)
if not electrics.values.watertemp then
-- vehicle not completly initialized, skip sending package
return
end
local data = {
app = "beamNG",
car = {
brand = "none", --FIXME: value
model = "none" --FIXME: value
},
gear = electrics.values.gearIndex,
speed = electrics.values.wheelspeed or electrics.values.airspeed,
axis = {
t = electrics.values.throttle,
b = electrics.values.brake,
c = electrics.values.clutch
}
}
if electrics.values.rpm then
data.rpm = {
cur = electrics.values.rpm
}
if electrics.values.maxrpm then
data.rpm.max = electrics.values.maxrpm
local currentTempRedlineCoef = linearScale(electrics.values.oiltemp or 0, minOilTemp, maxOilTemp, coldOilRPMCoef, 1)
data.rpm.rl = electrics.values.maxrpm * currentTempRedlineCoef
end
end
if electrics.values.oiltemp then
data.oil = {
p = 0, --FIXME: value
t = electrics.values.oiltemp
}
end
if electrics.values.fuel then
data.fuel = electrics.values.fuel
end
--TODO: lights
-- lights = {
-- dash = 0, --FIXME: value
-- on = 0 --FIXME: value
-- },
--log("I", "ExtDash", "data: " .. tostring(data) )
local packet = cbor.encode( data )
udpSocket:sendto(packet, ip, port)
end
local function updateGFX(dt)
if not playerInfo.firstPlayerSeated then
return
end
sendPackage(ip, port, 0)
end
local function init(jbeamData)
minOilTemp = jbeamData.minOilTemp or minOilTemp
maxOilTemp = jbeamData.maxOilTemp or maxOilTemp
coldOilRPMCoef = jbeamData.coldOilRPMCoef or coldOilRPMCoef
end
local function onExtensionLoaded()
if not udpSocket then
udpSocket = socket.udp()
end
ip = settings.getValue("outgaugeIP")
port = tonumber(settings.getValue("outgaugePort"))
log("I", "ExtDash", "Extension loaded, connecting to " .. tostring(ip) .. " (" .. tostring(port) .. ")" )
return true
end
local function onExtensionUnloaded()
if udpSocket then
udpSocket:close()
end
udpSocket = nil
end
-- public interface
M.onExtensionLoaded = onExtensionLoaded
M.onExtensionUnloaded = onExtensionUnloaded
M.init = init
M.updateGFX = updateGFX
-- other functions
M.sendPackage = sendPackage
return M