Definition
-- @/lua/vehicle/ve_utils.lua:36
function tableFromHeaderTable(entry)
if #entry == 0 then
return {}
end
--local function processTableWithSchema(vehicle, keyEntry, entry, newList)
-- its a list, so a table for us. Verify that the first row is the header
local header = entry[1]
if type(header) ~= "table" then
log("W", "tableFromHeaderTable", "*** Invalid table header: " .. dumpsz(entry, 2) .. " - " .. debug.tracesimple())
return false
end
local headerSize = #header
local localOptions = {}
local output = {}
local outputidx = 1
-- walk the list entries
for i = 2, #entry do
local rowValue = entry[i]
if type(rowValue) ~= "table" then
log("W", "tableFromHeaderTable", "*** Invalid table row: " .. dumps(rowValue))
return false
end
if tableIsDict(rowValue) then
-- case where options is a dict on its own, filling a whole line
localOptions = tableMerge(localOptions, deepcopy(rowValue))
else
-- allow last type to be the options always
if #rowValue > headerSize + 1 then -- and type(rowValue[#rowValue]) ~= "table" then
log("W", "tableFromHeaderTable", "*** Invalid table header, must be as long as all table cells (plus one additional options column):")
log("W", "tableFromHeaderTable", "*** Table header: " .. dumps(header))
log("W", "tableFromHeaderTable", "*** Mismatched row: " .. dumps(rowValue))
return false
end
local newRow
if next(localOptions) == nil then
newRow = {}
else
newRow = deepcopy(localOptions)
end
local rvcc = 0
for rk, rv in pairs(rowValue) do
--log('D', "jbeam.processTableWithSchema", "### "..header[rk].."//"..tostring(newRow[header[rk]]))
if header[rk] ~= nil then
newRow[header[rk]] = rv
end
-- check if inline options are provided, merge them then
if rvcc >= headerSize and type(rv) == "table" and tableIsDict(rv) and #rowValue > headerSize then
tableMerge(newRow, rv)
break
end
rvcc = rvcc + 1
end
if newRow.id ~= nil then
newRow.name = newRow.id -- this keeps the name for debugging or alike
newRow.id = nil
end
output[outputidx] = newRow
outputidx = outputidx + 1
end
end
return output
end
Callers
@/lua/vehicle/controller/drivingDynamics/supervisors/components/motorTorqueControl.lua
--TODO we should make sure there's at least dummy data for all existing wheelGroups, even if not configured in jbeam to avoid expensive runtime checks
local wheelGroupSettings = tableFromHeaderTable(jbeamData.tractionControl.wheelGroupSettings or {})
if wheelGroupSettings then
if jbeamData.yawControl.PIDSettings then
jbeamPIDSettings = tableFromHeaderTable(jbeamData.yawControl.PIDSettings)
else
@/lua/vehicle/controller/drivingDynamics/actuators/adaptiveDampers.lua
local modeData = tableFromHeaderTable(jbeamData.modes or {})
@/lua/vehicle/powertrain/combustionEngine.lua
local baseTorqueTable = tableFromHeaderTable(jbeamData.torque)
local rawBasePoints = {}
if jbeamData.torqueModMult then
local multTorqueTable = tableFromHeaderTable(jbeamData.torqueModMult)
local rawTorqueMultPoints = {}
if jbeamData.torqueModIntake then
local intakeTorqueTable = tableFromHeaderTable(jbeamData.torqueModIntake)
local rawIntakePoints = {}
if jbeamData.torqueModExhaust then
local exhaustTorqueTable = tableFromHeaderTable(jbeamData.torqueModExhaust)
local rawExhaustPoints = {}
if jbeamData.torqueCompressionBrake then
local compressionBrakeTorqueTable = tableFromHeaderTable(jbeamData.torqueCompressionBrake)
local rawPoints = {}
@/lua/vehicle/controller/esc.lua
if escConfigs.throttleFactorAssingment then
throttleFactorAssingment = tableFromHeaderTable(escConfigs.throttleFactorAssingment)
else
@/lua/vehicle/controller/tech/screens.lua
end
local screens = tableFromHeaderTable(jbeamData.screenDefinitions)
@/lua/vehicle/controller/drivingDynamics/supervisors/components/brakeControl.lua
controlParameters.tractionControl.wheelBrakingPID = {}
local wheelGroupSettings = tableFromHeaderTable(jbeamData.tractionControl.wheelGroupSettings or {})
local wheelGroupSettingsLookup = {}
local jbeamPIDSettings = tableFromHeaderTable(jbeamData.yawControl.PIDSettings or {})
controlParameters.absControl.wheelSettings = {}
local wheelSettings = tableFromHeaderTable(jbeamData.absControl.wheelSettings or {})
for _, wheelSetting in pairs(wheelSettings) do
@/lua/vehicle/controller/propAnimation/hPattern.lua
local function init(jbeamData)
local gearCoordinateTable = tableFromHeaderTable(jbeamData.gearCoordinates or {})
gearCoordinates = {}
@/lua/vehicle/controller/gauges/genericGauges.lua
local mergedConfig = {}
for _, v in pairs(tableFromHeaderTable(config)) do
mergedConfig[v.deviceName] = mergedConfig[v.deviceName] or {}
local mergedConfig = {}
for _, v in pairs(tableFromHeaderTable(config)) do
mergedConfig[v.moduleName] = mergedConfig[v.moduleName] or {}
@/lua/vehicle/electrics.lua
--convert data into a usable table
jbeamSmootherSettings = tableFromHeaderTable(jbeamSmootherSettings)
local jbeamCustomValues = jbeamData.customValues or {}
jbeamCustomValues = tableFromHeaderTable(jbeamCustomValues)
--merge default and jbeam data for final settings
@/lua/vehicle/controller/pneumatics/airbrakes.lua
local torqueTable = tableFromHeaderTable(jbeamData.brakeTorque)
local rawPoints = {}
-- reuse vars for spring brake torque table
torqueTable = tableFromHeaderTable(jbeamData.springBrakeTorque)
rawPoints = {}
@/lua/vehicle/controller/tirePressureControl.lua
activeGroupPressureElectricsName = jbeamData.activeGroupPressureElectricsName or (M.name .. "_activeGroupPressure")
local wheelGroupData = tableFromHeaderTable(jbeamData.wheelGroups or {})
for _, wheelGroup in pairs(wheelGroupData) do
@/lua/vehicle/powertrain/electricMotor.lua
end
local torqueTable = tableFromHeaderTable(jbeamData.torque)
local points = {}
if jbeamData.regenTorqueCurve then
local regenTorqueTable = tableFromHeaderTable(jbeamData.regenTorqueCurve)
points = {}
@/lua/vehicle/controller/lightbar.lua
-- Process mode configurations from jbeam data
modes = tableFromHeaderTable(jbeamData.modes)
for _, vm in pairs(modes) do
-- Convert mode config into usable format
local configEntries = tableFromHeaderTable(deepcopy(vm.config))
vm.config = nil
@/lua/vehicle/controller/advancedCouplerControl.lua
openForceTimer = 0,
openForceConditions = tableFromHeaderTable(jbeamData.openForceConditions or {}),
attachUIMessage = jbeamData.attachUIMessage,
local nodeData = tableFromHeaderTable(jbeamData.couplerNodes)
@/lua/vehicle/controller/controlModes.lua
local function init(jbeamData)
controlModes = tableFromHeaderTable(jbeamData.modes)
local config = tableFromHeaderTable(jbeamData.config)
configurations = {}
@/lua/vehicle/controller/bypassDampers.lua
local damperJbeamData = tableFromHeaderTable(jbeamData.dampers or {})
for _, damperData in pairs(damperJbeamData) do
local zoneJbeamData = tableFromHeaderTable(jbeamData.zones or {})
@/lua/vehicle/controller/propAnimation/dualAxisLever.lua
targetModeQueue = dequeue.new()
local modeCoordinateTable = tableFromHeaderTable(jbeamData.orderedModeCoordinates or {})
modeCoordinates = {}
--"impulse" mode like "M+" and "M-" need special treatment so that both their positions are just 1 away from the base
local impulseModeCoordinateTable = tableFromHeaderTable(jbeamData.impulseModeCoordinates or {})
for _, impulseMode in pairs(impulseModeCoordinateTable) do
local modeChangesTable = tableFromHeaderTable(jbeamData.modeChanges or {})
modeChanges = {}
@/lua/vehicle/powertrain/manualGearbox.lua
local synchroSettings = tableFromHeaderTable(jbeamData.synchronizerSettings or {})
local synchroSettingLookup = {}
@/lua/vehicle/controller/drivingDynamics/actuators/adaptiveTorsionBars.lua
local modeData = tableFromHeaderTable(jbeamData.modes or {})
@/lua/vehicle/controller/pneumatics.lua
if jbeamData.pressureLevels then
for _, v in pairs(tableFromHeaderTable(jbeamData.pressureLevels)) do
pressureLevels[v.name] = v.pressure
@/lua/vehicle/controller/driveModes.lua
local defaults = jbeamData.defaultSettings
local defaultSettingData = tableFromHeaderTable(defaults)
for _, v in pairs(defaultSettingData) do
local modeSettings = tableFromHeaderTable(mode.settings or {})
if modeSettings then
@/lua/vehicle/controller/propAnimation/singleAxisLever.lua
local function init(jbeamData)
local gearCoordinateTable = tableFromHeaderTable(jbeamData.gearCoordinates or {})
gearCoordinates = {}