Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Local dcs-bios compile #257

Merged
merged 9 commits into from
Sep 28, 2023
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion Scripts/DCS-BIOS/BIOS.lua
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@ package.path = lfs.writedir() .. [[Scripts\DCS-BIOS\lib\modules\aircraft_modules
package.path = lfs.writedir() .. [[Scripts\DCS-BIOS\lib\modules\common_modules\?.lua;]] .. package.path
package.path = lfs.writedir() .. [[Scripts\DCS-BIOS\lib\modules\documentation\?.lua;]] .. package.path
package.path = lfs.writedir() .. [[Scripts\DCS-BIOS\lib\modules\memory_map\?.lua;]] .. package.path
package.path = lfs.writedir() .. [[Scripts\DCS-BIOS\lib\common\?.lua;]] .. package.path

dofile(lfs.writedir()..[[Scripts\DCS-BIOS\lib\common\common.lua]])
dofile(lfs.writedir()..[[Scripts\DCS-BIOS\lib\Util.lua]])
dofile(lfs.writedir()..[[Scripts\DCS-BIOS\lib\ProtocolIO.lua]])
dofile(lfs.writedir()..[[Scripts\DCS-BIOS\lib\Protocol.lua]])
Expand Down Expand Up @@ -106,7 +108,7 @@ dofile(lfs.writedir()..[[Scripts\DCS-BIOS\BIOSConfig.lua]])

--Saves aliases for each aircraft for external programs
local function saveAliases()
local JSON = loadfile([[Scripts\JSON.lua]])()
local JSON = GetJSON()()
local file, err = io.open(lfs.writedir()..[[Scripts\DCS-BIOS\doc\json\AircraftAliases.json]], "w")
local json_string = JSON:encode_pretty(BIOS.dbg.aircraftNameToModuleNames)
if file then
Expand Down
18 changes: 18 additions & 0 deletions Scripts/DCS-BIOS/LocalCompile.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
-- This can be used to run the DCS-BIOS JSON generation locally without
-- starting a DCS mission
-- DCS-BIOS wiki have information on how to install the lua interpreter. No need to install
-- additional lua modules such as socket etc.
-- Execute => lua LocalCompile-lua

local dcs_variant = "DCS"
DCS_USER_DIR_ROOT = os.getenv ("USERPROFILE").."\\Saved Games\\"..dcs_variant.."\\"
DCS_INSTALLATION_ROOT = [[D:\DCS World]]

lfs = {}
---@diagnostic disable-next-line: duplicate-set-field
lfs.writedir = function() return DCS_USER_DIR_ROOT end

-- Include these that will mock the DCS APIs and the socket.
dofile(lfs.writedir()..[[Scripts\DCS-BIOS\test\mocking_compile\DCS_API_mocks.lua]])
dofile(lfs.writedir()..[[Scripts\DCS-BIOS\test\mocking_compile\socket.lua]])
dofile(lfs.writedir()..[[Scripts\DCS-BIOS\BIOS.lua]])
2 changes: 1 addition & 1 deletion Scripts/DCS-BIOS/lib/A-10C.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1095,7 +1095,7 @@ defineToggleSwitch("ANT_EGIHQTOD", 54, 3017, 708, "Antenna Panel", "EGI HQ TOD S

definePotentiometer("RWR_BRT", 29, 3001, 16, {0.15, 0.85}, "RWR", "Display Brightness")

local JSON = loadfile([[Scripts\JSON.lua]])()
local JSON = GetJSON()()
local cdu_indicator_data_file = io.open(lfs.writedir()..[[Scripts\DCS-BIOS\src\json\A-10C_CDU.json]], "r")
local cdu_indicator_data

Expand Down
2 changes: 1 addition & 1 deletion Scripts/DCS-BIOS/lib/AH-64D.lua
Original file line number Diff line number Diff line change
Expand Up @@ -403,7 +403,7 @@ definePotentiometer("CPG_KU_BRT", 30, 3050, 621, {0, 1}, "CPG Keyboard Unit", "G
defineString("CPG_KU_DISPLAY", function() return txt_CPG_KU end, 22, "CPG Keyboard Unit", "Gunner Keyboard Unit Display")

-- Enhanced Up-Front Display
local JSON = loadfile([[Scripts\JSON.lua]])()
local JSON = GetJSON()()
local eufd_indicator_data_file = io.open(lfs.writedir()..[[Scripts\DCS-BIOS\src\json\AH-64D_EUFD.json]], "r")
local eufd_indicator_data
if(eufd_indicator_data_file ~= nil) then
Expand Down
File renamed without changes.
2 changes: 1 addition & 1 deletion Scripts/DCS-BIOS/lib/Protocol.lua
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ end
function BIOS.protocol.endModule()
if BIOSdevMode == 1 then
local function saveDoc()
local JSON = loadfile([[Scripts\JSON.lua]])()
local JSON = GetJSON()()
local file, err = io.open(lfs.writedir()..[[Scripts\DCS-BIOS\doc\json\]]..moduleBeingDefined.name..".json", "w")
local json_string = JSON:encode_pretty(moduleBeingDefined.documentation)
if file then
Expand Down
8 changes: 8 additions & 0 deletions Scripts/DCS-BIOS/lib/common/common.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
function GetJSON()
local json = loadfile([[Scripts\JSON.lua]])
if(json == nil) then
json = loadfile(DCS_INSTALLATION_ROOT.."\\Scripts"..[[\JSON.lua]])
end

return json
end
280 changes: 280 additions & 0 deletions Scripts/DCS-BIOS/test/mocking_compile/DCS_API_mocks.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,280 @@
---@diagnostic disable: duplicate-set-field

---@class CockpitDevice
--- DCS Cockpit Device
CockpitDevice = {}

loadfile = loadfile

--- @func Sets command for a device
--- @param command_id integer
--- @param value integer
function CockpitDevice:SetCommand(command_id, value) end

--- @func Sets a device's argument?
--- @param argument_id integer
--- @param value integer
function CockpitDevice:set_argument_value(argument_id, value) end

--- @func Sets a device's frequency
--- @param frequency number
function CockpitDevice:set_frequency(frequency) end

--- @func Gets a device's frequency
--- @return number
function CockpitDevice:get_frequency()
return 0
end

--- @func Gets a device based on the device ID as specified in devices.lua
--- @param argument_id integer
--- @return number The current value of the CockpitDevice
function CockpitDevice:get_argument_value(argument_id)
return 0
end

--- @func Makes the device perform an action
--- @param command_id integer
--- @param argument number
function CockpitDevice:performClickableAction(command_id, argument) end

--- @func Gets a device based on the device ID as specified in devices.lua
--- @param device_id integer
--- @return CockpitDevice
function GetDevice(device_id)
return CockpitDevice
end

--- @func Gets the draw value for a certain animation
--- @param draw_argument_id integer
--- @return number
function LoGetAircraftDrawArgumentValue(draw_argument_id)
return 0
end

--- Contains Postions and Altitude
--- @class LatLongAlt
--- @diagnostic disable-next-line: duplicate-doc-field
--- @field Lat number
--- @diagnostic disable-next-line: duplicate-doc-field
--- @field Long number
--- @diagnostic disable-next-line: duplicate-doc-field
--- @field Alt number Altitude in meters
LatLongAlt = {}

--- Contains Aircraft Data
--- @class AicraftData
--- @diagnostic disable-next-line: duplicate-doc-field
--- @field Name string
--- @diagnostic disable-next-line: duplicate-doc-field
--- @field Heading number
--- @diagnostic disable-next-line: duplicate-doc-field
--- @field LatLongAlt LatLongAlt
AicraftData = { Name = "Test", Heading = 0, LatLongAlt({ Lat = 0, Long = 0, Alt = 0 }) }

--- @func Returns SelfData that holds information about the aircraft
--- @return AicraftData
function LoGetSelfData()
return AicraftData
end

--- @func Returns the simulation time
--- @return number
function LoGetModelTime()
return 0
end

--- @func Returns the mission start time
--- @return number
function LoGetMissionStartTime()
return 0
end

--- @func Returns whether own ships/aircraft data can be exported.
--- @return boolean
function LoIsOwnshipExportAllowed()
return true
end

--- @func Returns pilot's name
--- @return string
function LoGetPilotName()
return "Neil Armstrong"
end

--- @func Returns indicated airspeed
--- @return number
function LoGetIndicatedAirSpeed()
return 0
end

--- Contains acceleration info for all dimensions
--- @class AccelerationUnit
--- @diagnostic disable-next-line: duplicate-doc-field
--- @field x number
--- @diagnostic disable-next-line: duplicate-doc-field
--- @field y number
--- @diagnostic disable-next-line: duplicate-doc-field
--- @field z number
AccelerationUnit = { x = 0, y = 0, z = 0 }

--- @func Returns G Load
--- @return AccelerationUnit
function LoGetAccelerationUnits()
return AccelerationUnit
end

--- @func Returns ADI pitch, band, yaw
--- @return number
function LoGetADIPitchBankYaw()
return unpack({ 0, 0, 0 })
end

--- @class CounterMeasures
--- @diagnostic disable-next-line: duplicate-doc-field
--- @field chaff number
--- @diagnostic disable-next-line: duplicate-doc-field
--- @field flare number
CounterMeasures = { chaff = 0, flare = 0 }

--- @func Returns information about countermeasures
--- @return CounterMeasures
function LoGetSnares()
return CounterMeasures
end

--- @func Returns a list of strings for a cockpit indicator (screen)
--- @return table<string>
function list_indication(indicator_id)
return { "A", "B", "C" }
end

--- @class CockpitPage
--- @diagnostic disable-next-line: duplicate-doc-field
--- @field sub string
CockpitPage = {}

--- @func Searches for matches in CockpitPage
--- @param search_value string
--- @return CockpitPage
function CockpitPage:match(search_value)
return CockpitPage
end

--- @func sub? CockpitPage
--- @param index integer
--- @return string
function CockpitPage:sub(index)
return "A"
end

--- @func Returns a list of pages (cockpit screens)
--- @return table<CockpitPage>
function list_cockpit_params()
return { CockpitPage }
end

--- @func Maps value to from input_range to output_range
--- @param argument_value number
--- @param input_range table
--- @param output_range table
--- @return number
function ValueConvert(argument_value, input_range, output_range)
return 0
end

--- @func Returns altitude above sea level
--- @return number
function LoGetAltitudeAboveSeaLevel()
return 0
end

--- @func Returns altitude above ground level
--- @return number
function LoGetAltitudeAboveGroundLevel()
return 0
end

--- @func Returns vertical velocity
--- @return number
function LoGetVerticalVelocity()
return 0
end

--- @func Returns true air speed
--- @return number
function LoGetTrueAirSpeed()
return 0
end

--- @func Returns mach number
--- @return number
function LoGetMachNumber()
return 0
end

--- @func Returns angle of attack
--- @return number
function LoGetAngleOfAttack()
return 0
end

--- @func Returns glide deviation
--- @return number
function LoGetGlideDeviation()
return 0
end

--- @func Returns side deviation
--- @return number
function LoGetSideDeviation()
return 0
end

--- @func Returns slip ball position
--- @return number
function LoGetSlipBallPosition()
return 0
end

--- @class EngineSide
--- @diagnostic disable-next-line: duplicate-doc-field
--- @field right number
--- @diagnostic disable-next-line: duplicate-doc-field
--- @field left number
EngineSide = { right = 0, left = 0 }

--- @class EngineInformation
--- @diagnostic disable-next-line: duplicate-doc-field
--- @field RPM EngineSide
--- @diagnostic disable-next-line: duplicate-doc-field
--- @field Temperature EngineSide
--- @diagnostic disable-next-line: duplicate-doc-field
--- @field HydraulicPressure EngineSide
--- @diagnostic disable-next-line: duplicate-doc-field
--- @field FuelConsumption EngineSide
EngineInformation = { RPM = EngineSide, Temperature = EngineSide, HydraulicPressure = EngineSide, FuelConsumption = EngineSide }

--- @func Returns engine information
--- @return EngineInformation
function LoGetEngineInfo()
return EngineInformation
end

--- @class GearValue
--- @diagnostic disable-next-line: duplicate-doc-field
--- @field right number
--- @diagnostic disable-next-line: duplicate-doc-field
--- @field left number
GearValue = { right = 0, left = 0 }

--- @class MechanicalInformation
--- @diagnostic disable-next-line: duplicate-doc-field
--- @field gear GearValue
MechanicalInformation = { gear = GearValue }

--- @func Returns mechanical information
--- @return MechanicalInformation
function LoGetMechInfo()
return MechanicalInformation
end
6 changes: 6 additions & 0 deletions Scripts/DCS-BIOS/test/mocking_compile/socket.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module("socket", package.seeall)

---@diagnostic disable-next-line: lowercase-global
socket = {}

return socket