Skip to content
Open
Show file tree
Hide file tree
Changes from all 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
117 changes: 100 additions & 17 deletions SConscript
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ def to_c_uint32(x):
return "{" + 'U,'.join(map(str, nums)) + "U}"


def build_project(project_name, project, main, extra_flags):
def build_project(project_name, project, main, shared, extra_flags):
project_dir = Dir(f'./board/obj/{project_name}/')

flags = project["FLAGS"] + extra_flags + common_flags + [
Expand Down Expand Up @@ -100,28 +100,72 @@ def build_project(project_name, project, main, extra_flags):

startup = env.Object(project["STARTUP_FILE"])

shared += [
"./crypto/rsa.c",
"./crypto/sha.c",
"./board/libc.c",
"./board/early_init.c",
"./board/critical.c",
"./board/drivers/led.c",
"./board/drivers/pwm.c",
"./board/drivers/gpio.c",
"./board/drivers/fake_siren.c",
"./board/stm32h7/lli2c.c",
"./board/stm32h7/clock.c",
"./board/drivers/clock_source.c",
"./board/stm32h7/sound.c",
"./board/stm32h7/llflash.c",
"./board/stm32h7/stm32h7_config.c",
"./board/drivers/registers.c",
"./board/drivers/interrupts.c",
"./board/provision.c",
"./board/stm32h7/peripherals.c",
"./board/stm32h7/llusb.c",
"./board/drivers/usb.c",
"./board/drivers/spi.c",
"./board/drivers/timers.c",
"./board/stm32h7/lladc.c",
"./board/stm32h7/llspi.c",
"./board/faults.c",
"./board/boards/unused_funcs.c",
"./board/utils.c",
"./board/globals.c",
"./board/obj/gitversion.c",
"./board/stm32h7/lluart.c",
"./board/drivers/uart.c",
]

# Build bootstub
bs_env = env.Clone()
bs_obj_dir = Dir(f'./board/obj/{project_name}/bootstub')
bs_env = env.Clone(OBJPREFIX=bs_obj_dir)

bs_env.Append(CFLAGS="-DBOOTSTUB", ASFLAGS="-DBOOTSTUB", LINKFLAGS="-DBOOTSTUB")
bs_elf = bs_env.Program(f"{project_dir}/bootstub.elf", [
startup,
"./crypto/rsa.c",
"./crypto/sha.c",
"./board/bootstub.c",
])
"./board/flasher.c",
] + shared)
bs_env.Objcopy(f"./board/obj/bootstub.{project_name}.bin", bs_elf)

# Build + sign main (aka app)
main_elf = env.Program(f"{project_dir}/main.elf", [
startup,
main
], LINKFLAGS=[f"-Wl,--section-start,.isr_vector={project['APP_START_ADDRESS']}"] + flags)
"./board/can_comms.c",
"./board/drivers/fan.c",
"./board/power_saving.c",
"./board/stm32h7/llfdcan.c",
"./board/drivers/harness.c",
"./board/drivers/bootkick.c",
"./board/stm32h7/llfan.c",
"./board/drivers/fdcan.c",
"./board/drivers/can_common.c",
main,
] + shared, LINKFLAGS=[f"-Wl,--section-start,.isr_vector={project['APP_START_ADDRESS']}"] + flags)
main_bin = env.Objcopy(f"{project_dir}/main.bin", main_elf)
sign_py = File(f"./crypto/sign.py").srcnode().relpath
sign_py = File(f"crypto/sign.py").srcnode().relpath
env.Command(f"./board/obj/{project_name}.bin.signed", main_bin, f"SETLEN=1 {sign_py} $SOURCE $TARGET {cert_fn}")



base_project_h7 = {
"STARTUP_FILE": "./board/stm32h7/startup_stm32h7x5xx.s",
"LINKER_SCRIPT": "./board/stm32h7/stm32h7x5_flash.ld",
Expand All @@ -137,32 +181,71 @@ base_project_h7 = {
}

# Common autogenerated includes
with open("board/obj/gitversion.h", "w") as f:
with open("./board/obj/gitversion.c", "w") as f:
version = get_version(BUILDER, BUILD_TYPE)
f.write(f'extern const uint8_t gitversion[{len(version)}];\n')
f.write('#include "gitversion.h"\n')
f.write(f'const uint8_t gitversion[{len(version)}] = "{version}";\n')

with open("board/obj/version", "w") as f:
with open("./board/obj/gitversion.h", "w") as f:
version = get_version(BUILDER, BUILD_TYPE)
f.write("#pragma once\n")
f.write("#include <stdint.h>\n")
f.write(f'extern const uint8_t gitversion[{len(version)}];\n')

with open("./board/obj/version", "w") as f:
f.write(f'{get_version(BUILDER, BUILD_TYPE)}')

certs = [get_key_header(n) for n in ["debug", "release"]]
with open("board/obj/cert.h", "w") as f:
with open("./board/obj/cert.h", "w") as f:
for cert in certs:
f.write("\n".join(cert) + "\n")

# panda fw
build_project("panda_h7", base_project_h7, "./board/main.c", [])
panda_main = [
"./board/main_comms.c",
"./board/main.c",
"./board/drivers/simple_watchdog.c",
]

panda_shared = [
"./board/stm32h7/board.c",
"./board/boards/tres.c",
"./board/boards/red.c",
"./board/boards/cuatro.c",
"./board/main_definitions.c"
]

build_project("panda_h7", base_project_h7, panda_main, panda_shared, ["-DPANDA"])

# panda jungle fw
flags = [
"-DPANDA_JUNGLE",
]
if os.getenv("FINAL_PROVISIONING"):
flags += ["-DFINAL_PROVISIONING"]
build_project("panda_jungle_h7", base_project_h7, "./board/jungle/main.c", flags)

jungle_main = [
"./board/jungle/main_comms.c",
"./board/jungle/main.c",
]
jungle_shared = [
"./board/jungle/stm32h7/board.c",
"./board/jungle/boards/board_v2.c",
]
build_project("panda_jungle_h7", base_project_h7, jungle_main, jungle_shared, flags)

# body fw
build_project("body_h7", base_project_h7, "./board/body/main.c", ["-DPANDA_BODY"])
body_main = [
"./board/body/main.c",
"./board/body/main_comms.c",
]
body_shared = [
"./board/body/boards/board_body.c",
"./board/body/stm32h7/board.c",
"./board/body/motor_control.c",
"./board/body/motor_encoder.c"
]

build_project("body_h7", base_project_h7, body_main, body_shared, ["-DPANDA_BODY"])

# test files
if GetOption('extras'):
Expand Down
29 changes: 29 additions & 0 deletions board/board_forward.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#pragma once

#include <stdint.h>
#include <stdbool.h>

#include "board/boards/boot_state.h"

typedef bool (*board_get_button)(void);
typedef bool (*board_read_som_gpio)(void);
typedef float (*board_get_channel_power)(uint8_t channel);
typedef uint16_t (*board_get_sbu_mV)(uint8_t channel, uint8_t sbu);
typedef uint32_t (*board_read_current_mA)(void);
typedef uint32_t (*board_read_voltage_mV)(void);
typedef void (*board_board_tick)(void);
typedef void (*board_enable_can_transceiver)(uint8_t transceiver, bool enabled);
typedef void (*board_enable_header_pin)(uint8_t pin_num, bool enabled);
typedef void (*board_init_bootloader)(void);
typedef void (*board_init)(void);
typedef void (*board_set_amp_enabled)(bool enabled);
typedef void (*board_set_bootkick)(BootState state);
typedef void (*board_set_can_mode)(uint8_t mode);
typedef void (*board_set_fan_enabled)(bool enabled);
typedef void (*board_set_harness_orientation)(uint8_t orientation);
typedef void (*board_set_ignition)(bool enabled);
typedef void (*board_set_individual_ignition)(uint8_t bitmask);
typedef void (*board_set_ir_power)(uint8_t percentage);
typedef void (*board_set_panda_individual_power)(uint8_t port_num, bool enabled);
typedef void (*board_set_panda_power)(bool enabled);
typedef void (*board_set_siren)(bool enabled);
38 changes: 38 additions & 0 deletions board/board_struct.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#pragma once

#include "board/config.h"
#include "board/board_forward.h"
#include "board/boards/boot_state.h"

typedef struct board {
struct harness_configuration *harness_config;
GPIO_TypeDef * const led_GPIO[3];
const uint8_t led_pin[3];
const uint8_t led_pwm_channels[3]; // leave at 0 to disable PWM
const bool has_spi;
const bool has_fan;
const uint16_t avdd_mV;
const uint8_t fan_enable_cooldown_time;
board_init init;
board_init_bootloader init_bootloader;
board_board_tick board_tick;
board_set_panda_power set_panda_power;
board_get_button get_button;
board_enable_can_transceiver enable_can_transceiver;
board_set_can_mode set_can_mode;
board_read_voltage_mV read_voltage_mV;
board_read_current_mA read_current_mA;
board_set_ir_power set_ir_power;
board_set_fan_enabled set_fan_enabled;
board_set_siren set_siren;
board_set_bootkick set_bootkick;
board_read_som_gpio read_som_gpio;
board_set_amp_enabled set_amp_enabled;
board_set_panda_individual_power set_panda_individual_power;
board_set_ignition set_ignition;
board_set_individual_ignition set_individual_ignition;
board_set_harness_orientation set_harness_orientation;
board_enable_header_pin enable_header_pin;
board_get_channel_power get_channel_power;
board_get_sbu_mV get_sbu_mV;
} board;
62 changes: 0 additions & 62 deletions board/boards/board_declarations.h

This file was deleted.

7 changes: 7 additions & 0 deletions board/boards/boot_state.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#pragma once

typedef enum {
BOOT_STANDBY,
BOOT_BOOTKICK,
BOOT_RESET,
} BootState;
Loading
Loading