Skip to content

Commit

Permalink
Made Nodes platform dependant and not variant dependant. Variants to …
Browse files Browse the repository at this point in the history
…be used for hardware variants. IE: PCBA ID
  • Loading branch information
JoshLafleur committed Oct 27, 2024
1 parent 2e9d2b1 commit cfbdd0f
Show file tree
Hide file tree
Showing 6 changed files with 140 additions and 180 deletions.
5 changes: 2 additions & 3 deletions SConstruct
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,8 @@ if platform:
if targets:
# TODO: Handle
pass
for parts in platforms[platform]["ecu"]:
for id in parts:
target_dict[id] = parts[id]
for part in platforms[platform]["ecu"]:
target_dict[part] = platforms[platform]["ecu"][part]
else:
print(
f"Platform string '{platform}' does not match any platform in 'site_scons/platforms.yaml'"
Expand Down
240 changes: 124 additions & 116 deletions components/bms_worker/SConscript
Original file line number Diff line number Diff line change
Expand Up @@ -295,126 +295,134 @@ binaries_crced = []
asms = []

for config_id, config in configs.items():
variant_dir = BUILDS_DIR.Dir(
"_".join(config["description"].split(" ")) + f"_{config_id}"
)
generated_dir = variant_dir.Dir("generated")
makedirs(generated_dir.abspath, exist_ok=True)

generated_sources = NETWORK_ENV.GenerateNodes({ f"bmsw_{config['options']['canIdOffset']}": generated_dir, })

if "features" in config:
features = {"features": env.GenerateFeatures(feature_definitions, config["features"]) }
generated_features = render_generated_files(features, renderers["featureDefs"], generated_dir)
else:
generated_features = None

if "options" in config:
generated_defs = render_generated_files(config["options"], renderers["buildDefs"], generated_dir)
else:
generated_defs = None

## actually compile stuff
include_dirs = paths + [generated_dir]
env["CPPPATH"] = include_dirs

uds_env = env.Clone()
uds_env.Append(
CCFLAGS=[
"-Wno-missing-prototypes",
"-Wno-unused-parameter",
"-DBYTE_ORDER=_BYTE_ORDER",
"-DLITTLE_ENDIAN=_LITTLE_ENDIAN",
"-Wno-inline",
"-Wno-conversion",
]
)

rtos_env.Append(
CPPPATH=paths,
CCFLAGS=common_flags + c_flags + free_rtos_flags,
)

objs = [] # store objects here

# compile platform files
objs.extend(
compile_objects(
env,
platform_src_files,
variant_dir=variant_dir,
target_dir="embedded/",
CPPPATH=paths + [generated_dir],
nodes = []
try:
nodes = list(range(0, CONFIG_IDS[config_id]["nodes"]))
except Exception as e:
print("No nodeId specified, assuming Network Node 0.")
nodes = [ 0 ]

for nodeId in nodes:
variant_dir = BUILDS_DIR.Dir(
"_".join(config["description"].split(" ")) + f"_{config_id}/Node{nodeId}"
)
)

# compile rtos source files
objs.extend(
compile_objects(
rtos_env,
rtos_src_files,
variant_dir=variant_dir,
target_dir="FreeRTOS/",
CPPPATH=paths + [generated_dir],
generated_dir = variant_dir.Dir("generated")
makedirs(generated_dir.abspath, exist_ok=True)

generated_sources = NETWORK_ENV.GenerateNodes({ f"bmsw_{nodeId}": generated_dir, })

if "features" in config:
features = {"features": env.GenerateFeatures(feature_definitions, config["features"]) }
generated_features = render_generated_files(features, renderers["featureDefs"], generated_dir)
else:
generated_features = None

if "options" in config and config["options"] is not None:
generated_defs = render_generated_files(config["options"], renderers["buildDefs"], generated_dir)
else:
generated_defs = None

## actually compile stuff
include_dirs = paths + [generated_dir]
env["CPPPATH"] = include_dirs

uds_env = env.Clone()
uds_env.Append(
CCFLAGS=[
"-Wno-missing-prototypes",
"-Wno-unused-parameter",
"-DBYTE_ORDER=_BYTE_ORDER",
"-DLITTLE_ENDIAN=_LITTLE_ENDIAN",
"-Wno-inline",
"-Wno-conversion",
]
)

rtos_env.Append(
CPPPATH=paths,
CCFLAGS=common_flags + c_flags + free_rtos_flags,
)
)

gen_srcs = []
for generated_source in generated_sources:
gen_srcs += [generated_dir.File(generated_source)]

# compile project source files
objs.extend(
compile_objects(
env,
src_files,
variant_dir=variant_dir,
CPPPATH=paths + [generated_dir],

objs = [] # store objects here

# compile platform files
objs.extend(
compile_objects(
env,
platform_src_files,
variant_dir=variant_dir,
target_dir="embedded/",
CPPPATH=paths + [generated_dir],
)
)
)

# compile UDS source files
objs.extend(compile_objects(uds_env, uds_srcs, variant_dir=variant_dir, target_dir="uds/"))

objs.extend(
compile_objects(
env,
gen_srcs,
variant_dir=variant_dir,
target_dir=variant_dir.Dir("generated/obj"),
CPPPATH=paths + [generated_dir],

# compile rtos source files
objs.extend(
compile_objects(
rtos_env,
rtos_src_files,
variant_dir=variant_dir,
target_dir="FreeRTOS/",
CPPPATH=paths + [generated_dir],
)
)
)


# link all the compiled objects into an elf
elf, map = env.Program(
variant_dir.File(ARTIFACT_NAME + ".elf"),
objs,
MAPFILE=variant_dir.File(ARTIFACT_NAME + ".map"),
)
elfs.append(elf)
Depends(elf, env["LINKSCRIPT"])
Clean(elf, variant_dir)

# generate a binary for flashing
binary = env.Bin(source=elf)
binaries.append(binary)

crc_env = PLATFORM_ENV.Clone(tools=["hextools"])

# generate the CRCd binary
binaries_crced.append(
crc_env.InjectMpeg2CRC(source=binary, start_addr=APP_START_ADDR)
)

# Generate compile_commands.json
compile_db = env.CompilationDatabase(variant_dir.File("compile_commands.json"))
Depends(compile_db, objs)
# generate it by default
Default(compile_db)
# add an alias to _only_ generate the compilation database
env.Alias("compiledb", compile_db)

gen_srcs = []
for generated_source in generated_sources:
gen_srcs += [generated_dir.File(generated_source)]

# compile project source files
objs.extend(
compile_objects(
env,
src_files,
variant_dir=variant_dir,
CPPPATH=paths + [generated_dir],
)
)

# compile UDS source files
objs.extend(compile_objects(uds_env, uds_srcs, variant_dir=variant_dir, target_dir="uds/"))

objs.extend(
compile_objects(
env,
gen_srcs,
variant_dir=variant_dir,
target_dir=variant_dir.Dir("generated/obj"),
CPPPATH=paths + [generated_dir],
)
)


# link all the compiled objects into an elf
elf, map = env.Program(
variant_dir.File(ARTIFACT_NAME + ".elf"),
objs,
MAPFILE=variant_dir.File(ARTIFACT_NAME + ".map"),
)
elfs.append(elf)
Depends(elf, env["LINKSCRIPT"])
Clean(elf, variant_dir)

# generate a binary for flashing
binary = env.Bin(source=elf)
binaries.append(binary)

crc_env = PLATFORM_ENV.Clone(tools=["hextools"])

# generate the CRCd binary
binaries_crced.append(
crc_env.InjectMpeg2CRC(source=binary, start_addr=APP_START_ADDR)
)

# Generate compile_commands.json
compile_db = env.CompilationDatabase(variant_dir.File("compile_commands.json"))
Depends(compile_db, objs)
# generate it by default
Default(compile_db)
# add an alias to _only_ generate the compilation database
env.Alias("compiledb", compile_db)

Default(binaries_crced)

Expand Down
1 change: 0 additions & 1 deletion components/bms_worker/src/CAN/CANIO-tx.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
#include "string.h"

// imports for data access
#include "BuildDefines_generated.h"
#include "BatteryMonitoring.h"
#include "Cooling.h"
#include "Environment.h"
Expand Down
42 changes: 0 additions & 42 deletions components/bms_worker/variants.yaml
Original file line number Diff line number Diff line change
@@ -1,48 +1,6 @@
configs:
0:
description: BMS Worker
options:
canIdOffset: 0
features:
feature_bmsw_faults: false
feature_uds: true

1:
description: BMS Worker
options:
canIdOffset: 1
features:
feature_bmsw_faults: false
feature_uds: true

2:
description: BMS Worker
options:
canIdOffset: 2
features:
feature_bmsw_faults: false
feature_uds: true

3:
description: BMS Worker
options:
canIdOffset: 3
features:
feature_bmsw_faults: false
feature_uds: true

4:
description: BMS Worker
options:
canIdOffset: 4
features:
feature_bmsw_faults: false
feature_uds: true

5:
description: BMS Worker
options:
canIdOffset: 5
features:
feature_bmsw_faults: false
feature_uds: true
30 changes: 13 additions & 17 deletions site_scons/platforms.yaml
Original file line number Diff line number Diff line change
@@ -1,19 +1,15 @@
cfr24:
ecu:
- bmsw:
- 0
- 1
- 2
- 3
- 4
- 5
- bmsb:
- 0
- bl:
- 0 # BMS Worker
- 1 # BMS Worker
- 2 # BMS Worker
- 3 # BMS Worker
- 4 # BMS Worker
- 5 # BMS Worker
- 10 # BMS Boss
bmsw:
0:
nodes: 6
bmsb:
0:
bl:
0: # BMS Worker
1: # BMS Worker
2: # BMS Worker
3: # BMS Worker
4: # BMS Worker
5: # BMS Worker
10: # BMS Boss
2 changes: 1 addition & 1 deletion site_scons/site_tools/variants.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ def GenerateVariants(env, variants_file: FS.File, config_ids: List[int] = list()
if config_ids:
return dict(filter(lambda item: item[0] in config_ids, variants["configs"].items()))

return variants["configs"]
return variants["configs"]


def generate(env):
Expand Down

0 comments on commit cfbdd0f

Please sign in to comment.