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
|