Skip to content

Commit

Permalink
Merge pull request #117 from concordia-fsae/AF_AF_MC_YAMCAN
Browse files Browse the repository at this point in the history
Bring up complete motor controller yamcan definition
  • Loading branch information
JoshLafleur authored Feb 11, 2025
2 parents c5efbb2 + 9a529b4 commit c4b5324
Show file tree
Hide file tree
Showing 26 changed files with 1,575 additions and 151 deletions.
21 changes: 18 additions & 3 deletions .github/workflows/standard_checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,12 @@ jobs:
submodules: 'recursive'
- name: Execute build for CFR24
run: |
scons --platform=cfr24 -j32 --flashable-bootloader
scons --platform=cfr24 -j32 --flashable-bootloader --package
- name: Archive Artifacts
uses: actions/upload-artifact@v4
with:
name: artifacts-cfr24
path: platform-artifacts/
cfr25:
runs-on: self-hosted
container:
Expand All @@ -36,7 +41,12 @@ jobs:
submodules: 'recursive'
- name: Execute build for CFR25
run: |
scons --platform=cfr25 -j32 --flashable-bootloader
scons --platform=cfr25 -j32 --flashable-bootloader --package
- name: Archive Artifacts
uses: actions/upload-artifact@v4
with:
name: artifacts-cfr25
path: platform-artifacts/
updaters:
runs-on: self-hosted
container:
Expand All @@ -52,4 +62,9 @@ jobs:
submodules: 'recursive'
- name: Execute build for all bootloader updaters
run: |
scons --targets=bl:1000,1001,1002,1003,1004,1005,1010,1011 -j32
scons --targets=bl:1000,1001,1002,1003,1004,1005,1010,1011 -j32 --package
- name: Archive Artifacts
uses: actions/upload-artifact@v4
with:
name: artifacts-bootloader_updater
path: platform-artifacts/
32 changes: 31 additions & 1 deletion SConstruct
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from os import environ
from re import compile, findall, search

from SCons.Node import NodeList
from SCons.Script import (
AddOption,
Default,
Expand All @@ -11,11 +12,12 @@ from SCons.Script import (
Exit,
GetOption,
SConscript,
File
)
from oyaml import safe_load

# create a global environment which all targets can start from
GlobalEnv = Environment(REPO_ROOT_DIR=Dir("#"), tools=[])
GlobalEnv = Environment(REPO_ROOT_DIR=Dir("#"), tools=[ "tar" ])
try:
GlobalEnv["ENV"]["TERM"] = environ["TERM"]
except Exception:
Expand Down Expand Up @@ -169,3 +171,31 @@ if PlatformEnv["ARTIFACTS"]:

openocd_gdb = debug_env.openocd_gdb(artifact, *args)
Default(openocd_gdb)

PlatformEnv.Append(
TARFLAGS = '-c -z',
)

def flatten(sequence: list) -> list:
new_list = []
for item in sequence:
if type(item) != list and type(item) != NodeList:
new_list.append(item)
else:
new_list.extend(flatten(item))
return new_list

AddOption("--package", dest="package", action="store_true")

artifacts = []
for key, value in PlatformEnv["ARTIFACTS"].items():
if type(value) is dict:
for name, val in value.items():
if "ARTIFACT" in name:
artifacts.append(val["artifact"])
plat_name = GetOption("platform") or "artifacts"
package = PlatformEnv.Tar(f"platform-artifacts/{plat_name}.tgz", [ file.abspath for file in flatten(artifacts) ])
Depends(package, artifacts)

if GetOption("package"):
Default(package)
2 changes: 1 addition & 1 deletion components/bms_boss/RTOS/include/FreeRTOSConfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ extern uint32_t SystemCoreClock;
extern void HW_TIM_configureRunTimeStatsTimer(void);
extern uint64_t HW_TIM_getBaseTick(void);
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() HW_TIM_configureRunTimeStatsTimer()
#define portGET_RUN_TIME_COUNTER_VALUE() HW_TIM_getBaseTick()
#define portGET_RUN_TIME_COUNTER_VALUE() (uint32_t)HW_TIM_getBaseTick()

#define configSTACK_DEPTH_TYPE UBaseType_t
#define configMINIMAL_STACK_SIZE (256)
Expand Down
12 changes: 11 additions & 1 deletion components/bms_boss/SConscript
Original file line number Diff line number Diff line change
Expand Up @@ -98,13 +98,15 @@ c_flags = [
"-Wno-type-limits",
"-Wno-unused-local-typedefs",
"-Wundef",
"-Wconversion",
# FIXME: When in single quotes outputs to cmdline with ""
"-include", "BuildDefines.h", # Executed one after eachother
]

free_rtos_flags = [
"-Wno-missing-prototypes",
"-Wno-cast-align",
"-Wno-conversion",
]


Expand Down Expand Up @@ -320,6 +322,7 @@ for config_id, config in configs.items():
"-DBYTE_ORDER=_BYTE_ORDER",
"-DLITTLE_ENDIAN=_LITTLE_ENDIAN",
"-Wno-inline",
"-Wno-conversion",
"-Wno-undef",
]
)
Expand Down Expand Up @@ -366,12 +369,19 @@ for config_id, config in configs.items():
# compile UDS source files
objs.extend(compile_objects(uds_env, uds_srcs, variant_dir=variant_dir, target_dir="uds/"))

gen_env = config_env.Clone()
gen_env.Append(
CCFLAGS=[
"-Wno-inline",
"-Wno-conversion",
]
)
gen_srcs = []
for generated_source in generated_sources:
gen_srcs += [generated_dir.File(generated_source)]
objs.extend(
compile_objects(
config_env,
gen_env,
gen_srcs,
variant_dir=variant_dir,
target_dir=variant_dir.Dir("generated/obj"),
Expand Down
4 changes: 3 additions & 1 deletion components/bms_boss/include/CANIO_componentSpecific.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,5 +59,7 @@ CAN_prechargeContactorState_E CANIO_tx_getContactorState(void);
#define set_elconMaxChargeCurrent(m,b,n,s) set(m,b,n,s, BMS.pack_charge_limit)
#define set_elconControlByte(m,b,n,s) set(m,b,n,s, CANIO_tx_getElconControlByte())
#define transmit_BMSB_elconChargeCommand (SYS_SFT_checkElconChargerTimeout() == false)

#define transmit_BMSB_currentLimit (SYS_SFT_checkMCTimeout() == false)
#define set_maxCharge(m,b,n,s) set(m,b,n,s, BMS.pack_charge_limit);
#define set_maxDischarge(m,b,n,s) set(m,b,n,s, BMS.pack_discharge_limit);
#include "TemporaryStubbing.h"
6 changes: 3 additions & 3 deletions components/bms_boss/include/Utility.h
Original file line number Diff line number Diff line change
Expand Up @@ -82,13 +82,13 @@ static inline uint16_t u32CountLeadingZeroes(uint32_t x)
// FLAGS
// This should get moved elsewhere at some point
#define FLAG_bits_each 16
#define WORDS_FROM_COUNT(count) (((uint16_t)count + (FLAG_bits_each - 1)) / FLAG_bits_each)
#define WORDS_FROM_COUNT(count) (uint16_t)((count + (FLAG_bits_each - 1)) / FLAG_bits_each)
#define FLAG_GET_WORD(name, flag) (name[(uint16_t)flag / FLAG_bits_each])
#define FLAG_GET_MASK(flag) (1U << ((uint16_t)flag % FLAG_bits_each))

#define FLAG_create(name, size) uint16_t(name)[WORDS_FROM_COUNT(size)]
#define FLAG_set(name, pos) FLAG_GET_WORD(name, pos) |= FLAG_GET_MASK(pos)
#define FLAG_clear(name, pos) FLAG_GET_WORD(name, pos) &= ~FLAG_GET_MASK(pos)
#define FLAG_set(name, pos) FLAG_GET_WORD(name, pos) |= (uint16_t)FLAG_GET_MASK(pos)
#define FLAG_clear(name, pos) FLAG_GET_WORD(name, pos) &= (uint16_t)~FLAG_GET_MASK(pos)
#define FLAG_get(name, pos) ((bool)((FLAG_GET_WORD(name, pos) & FLAG_GET_MASK(pos)) == FLAG_GET_MASK(pos)))
#define FLAG_assign(name, pos, value) \
do { \
Expand Down
12 changes: 6 additions & 6 deletions components/bms_boss/src/CANIO_componentSpecific.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,24 +75,24 @@ uint8_t CANIO_tx_getNLG513ControlByte(void)

CAN_prechargeContactorState_E CANIO_tx_getContactorState(void)
{
CAN_prechargeContactorState_E ret = CAN_PRECHARGECONTACTORSTATE_CONTACTORS_SNA;
CAN_prechargeContactorState_E ret = CAN_PRECHARGECONTACTORSTATE_SNA;

switch (SYS.contacts)
{
case SYS_CONTACTORS_OPEN:
ret = CAN_PRECHARGECONTACTORSTATE_CONTACTORS_OPEN;
ret = CAN_PRECHARGECONTACTORSTATE_OPEN;
break;

case SYS_CONTACTORS_PRECHARGE:
ret = CAN_PRECHARGECONTACTORSTATE_CONTACTORS_PRECHARGE_CLOSED;
ret = CAN_PRECHARGECONTACTORSTATE_PRECHARGE_CLOSED;
break;

case SYS_CONTACTORS_CLOSED:
ret = CAN_PRECHARGECONTACTORSTATE_CONTACTORS_PRECHARGE_HVP_CLOSED;
ret = CAN_PRECHARGECONTACTORSTATE_PRECHARGE_HVP_CLOSED;
break;

case SYS_CONTACTORS_HVP_CLOSED:
ret = CAN_PRECHARGECONTACTORSTATE_CONTACTORS_HVP_CLOSED;
ret = CAN_PRECHARGECONTACTORSTATE_HVP_CLOSED;
break;
}

Expand All @@ -108,4 +108,4 @@ uint8_t CANIO_tx_getElconControlByte(void)
}

return ret;
}
}
10 changes: 5 additions & 5 deletions components/bms_boss/src/Module.c
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ void Module_1kHz_TSK(void)
}
}

stats[MODULE_1kHz_TASK].total_percentage = ulTaskGetRunTimePercent(NULL);
stats[MODULE_1kHz_TASK].total_percentage = (uint8_t)ulTaskGetRunTimePercent(NULL);
}

/**
Expand All @@ -94,7 +94,7 @@ void Module_100Hz_TSK(void)
}
}

stats[MODULE_100Hz_TASK].total_percentage = ulTaskGetRunTimePercent(NULL);
stats[MODULE_100Hz_TASK].total_percentage = (uint8_t)ulTaskGetRunTimePercent(NULL);
}

/**
Expand All @@ -111,7 +111,7 @@ void Module_10Hz_TSK(void)
}
}

stats[MODULE_10Hz_TASK].total_percentage = ulTaskGetRunTimePercent(NULL);
stats[MODULE_10Hz_TASK].total_percentage = (uint8_t)ulTaskGetRunTimePercent(NULL);
}

/**
Expand All @@ -128,15 +128,15 @@ void Module_1Hz_TSK(void)
}
}

stats[MODULE_1Hz_TASK].total_percentage = ulTaskGetRunTimePercent(NULL);
stats[MODULE_1Hz_TASK].total_percentage = (uint8_t)ulTaskGetRunTimePercent(NULL);
}

/**
* @brief Idle task used by FreeRTOS
*/
void Module_ApplicationIdleHook()
{
stats[MODULE_IDLE_TASK].total_percentage = ulTaskGetRunTimePercent(NULL);
stats[MODULE_IDLE_TASK].total_percentage = (uint8_t)ulTaskGetRunTimePercent(NULL);
}

/**
Expand Down
2 changes: 1 addition & 1 deletion components/bms_boss/src/Utility.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ float32_t ln(float32_t x)
// unsigned int s = (t < 0) ? (-t) : t;
bx = 1065353216 | (bx & 8388607);
x = *(float32_t*)(&bx);
return -1.49278 + (2.11263 + (-0.729104 + 0.10969 * x) * x) * x + 0.6931471806 * t;
return (float32_t)(-1.49278f + (2.11263f + (-0.729104f + 0.10969f * x) * x) * x + 0.6931471806f * (float32_t)t);
}

uint8_t* reverse_bytes(uint8_t* in, uint8_t len)
Expand Down
12 changes: 6 additions & 6 deletions components/bms_worker/include/CANIO_componentSpecific.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,10 @@
#define CANIO_UDS_BUFFER_LENGTH 8U
#define CANIO_getTimeMs() (HW_TIM_getTimeMS())

#define set_envFaultFlag(m,b,n,s) set(m,b,n,s, ENV.state == ENV_FAULT)
#define set_envErrorFlag(m, b, n, s) set(m,b,n,s, ENV.state == ENV_ERROR)
#define set_faultFlag(m, b, n, s) set(m,b,n,s, BMS.fault)
#define set_errorFlag(m, b, n, s) set(m,b,n,s, BMS.state == BMS_ERROR)
#define set_envFaultFlag(m,b,n,s) set(m,b,n,s, (ENV.state == ENV_FAULT) ? CAN_FLAG_SET : CAN_FLAG_CLEARED)
#define set_envErrorFlag(m, b, n, s) set(m,b,n,s, (ENV.state == ENV_ERROR) ? CAN_FLAG_SET : CAN_FLAG_CLEARED)
#define set_faultFlag(m, b, n, s) set(m,b,n,s, (BMS.fault) ? CAN_FLAG_SET : CAN_FLAG_CLEARED)
#define set_errorFlag(m, b, n, s) set(m,b,n,s, (BMS.state == BMS_ERROR) ? CAN_FLAG_SET : CAN_FLAG_CLEARED)
#define set_dischargeLimit(m, b, n, s) set(m,b,n,s, BMS.discharge_limit)
#define set_chargeLimit(m, b, n, s) set(m,b,n,s, BMS.charge_limit)
#define set_tempMax(m, b, n, s) set(m,b,n,s, ENV.values.max_temp)
Expand Down Expand Up @@ -87,9 +87,9 @@
#define set_fan1RPM(m, b, n, s) set(m,b,n,s, COOL.rpm[1])
#define set_fan0RPM(m, b, n, s) set(m,b,n,s, COOL.rpm[0])
#define set_coolPct1(m, b, n, s) set(m,b,n,s, COOL.percentage[1])
#define set_coolState1(m, b, n, s) set(m,b,n,s, (COOL.state[1] != COOL_OFF) ? CAN_OUTPUTSTATE_ON : CAN_OUTPUTSTATE_OFF)
#define set_coolState1(m, b, n, s) set(m,b,n,s, (COOL.state[1] != COOL_OFF) ? CAN_DIGITALSTATUS_ON : CAN_DIGITALSTATUS_OFF)
#define set_coolPct0(m, b, n, s) set(m,b,n,s, COOL.percentage[0])
#define set_coolState0(m,b,n,s) set(m,b,n,s, (COOL.state[0] != COOL_OFF) ? CAN_OUTPUTSTATE_ON : CAN_OUTPUTSTATE_OFF)
#define set_coolState0(m,b,n,s) set(m,b,n,s, (COOL.state[0] != COOL_OFF) ? CAN_DIGITALSTATUS_ON : CAN_DIGITALSTATUS_OFF)
#define set_taskUsage1kHz(m,b,n,s) set(m,b,n,s, Module_getTotalRuntimePercentage(MODULE_1kHz_TASK));
#define set_taskUsage100Hz(m,b,n,s) set(m,b,n,s, Module_getTotalRuntimePercentage(MODULE_100Hz_TASK));
#define set_taskUsage10Hz(m,b,n,s) set(m,b,n,s, Module_getTotalRuntimePercentage(MODULE_10Hz_TASK));
Expand Down
2 changes: 1 addition & 1 deletion components/bms_worker/include/Utility.h
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ static inline uint16_t u32CountLeadingZeroes(uint32_t x)
// FLAGS
// This should get moved elsewhere at some point
#define FLAG_bits_each 16
#define WORDS_FROM_COUNT(count) (((uint16_t)count + (FLAG_bits_each - 1)) / FLAG_bits_each)
#define WORDS_FROM_COUNT(count) (uint16_t)((count + (FLAG_bits_each - 1)) / FLAG_bits_each)
#define FLAG_GET_WORD(name, flag) (name[(uint16_t)flag / FLAG_bits_each])
#define FLAG_GET_MASK(flag) (1U << ((uint16_t)flag % FLAG_bits_each))

Expand Down
32 changes: 15 additions & 17 deletions components/bootloaders/STM/stm32f1/SConscript
Original file line number Diff line number Diff line change
Expand Up @@ -274,22 +274,20 @@ Alias("asms", asms)
# Return artifacts to the caller
artifacts = {}

if len(binaries) == 1:
artifacts["FLASHABLE_ARTIFACT"] = {
"artifact": binaries[0],
"addr": APP_START_ADDR,
"tools": ["st-flash"],
}

if len(elfs) == 1:
artifacts["DEBUG_ARTIFACT"] = {
"artifact": elfs[0],
"args": [],
"tools": ["gcc-arm-none-eabi", "openocd"],
"env": {
"OPENOCD_INTERFACE": "stlink",
"OPENOCD_MCU": "stm32f103c8",
},
}
artifacts["FLASHABLE_ARTIFACT"] = {
"artifact": binaries_crced,
"addr": APP_START_ADDR,
"tools": ["st-flash"],
}

artifacts["DEBUG_ARTIFACT"] = {
"artifact": elfs,
"args": [],
"tools": ["gcc-arm-none-eabi", "openocd"],
"env": {
"OPENOCD_INTERFACE": "stlink",
"OPENOCD_MCU": "stm32f103c8",
},
}

Return("artifacts")
Loading

0 comments on commit c4b5324

Please sign in to comment.