It's seperated into sections with help text and description, take the warmup section as example:
Warmup: order: 2 help: No help here parts: - label: Afterstart warmup enrichment unit: % added value variable: awev value: 26 help: Afterstart warmup enrichment (%added value) - label: Afterstart warmup scaling @ 170 F unit: % of Afterstart warmup enrichment variable: awev_temp_scaling value: A0 help: Afterstart warmup scaling at 170 F (0x80 half, 0xFF same as cold) [...]
It can also handle things that need seperate calculation (the example here is wrong, but you get the idea):
Required fuel: order: 3 help: No help here parts: - label: Required fuel unit: ms variable: req_fuel value: 60 help: Injector pulse width [ms], required to supply the fuel for a single injection event at stoichiometric combustion, 100% volumetric efficiency and standard temperature. Calculated by special program which needs to be written!!!! seperate: finish: "@engineDisplacement * @nCylinders * @target_afr * @injector_flow * @rated_pressure * @actual_pressure" parts: - label: Engine displacement unit: cid variable: engineDisplacement value: 0 - label: Number of cylinders variable: nCylinders value: 0 [...]
EGO: order: 1 help: No help for EGO parts: - label: ego_conf unit: "Bitfields shouldn't use units" variable: ego_conf value: 32 help: config bit0:PID bit1:WBO2 bit2:incredible bit4:NBO2-l-target meta: bitfield bitfield: - bit: 0 label: PID - bit: 1 label: WBO2 - bit: 2 label: incredible - bit: 3 label: Unused - bit: 4 label: NBO2-l-target - bit: 5..7 label: Unused -
Hopefully in the end it will be pretty flexible system that can easily be adapted for future generations.
There's some things that need to be done, such as proper help text and descriptions and some calculations and guesses needs to be ironed out.
Unit conversion and such is up to the application to handle.