Skip to content

Commit

Permalink
Create shared CANIO layer. Port BMSB/BMSW to use this layer
Browse files Browse the repository at this point in the history
  • Loading branch information
JoshLafleur committed Nov 29, 2024
1 parent 3442955 commit 9b52a1e
Show file tree
Hide file tree
Showing 27 changed files with 411 additions and 878 deletions.
25 changes: 15 additions & 10 deletions components/bms_boss/HW/HW_can.c
Original file line number Diff line number Diff line change
Expand Up @@ -123,8 +123,9 @@ void HW_CAN_init(void)
HAL_CAN_ActivateNotification(&hcan, CAN_ENABLED_INTERRUPTS);
}

void HW_CAN_activateFifoNotifications(CAN_RxFifo_E rxFifo)
void HW_CAN_activateFifoNotifications(CAN_bus_E bus, CAN_RxFifo_E rxFifo)
{
UNUSED(bus);
uint32_t it = rxFifo == CAN_RX_FIFO_0 ? CAN_IER_FMPIE0 : CAN_IER_FMPIE1;
uint32_t itFull = rxFifo == CAN_RX_FIFO_0 ? CAN_IER_FFIE0 : CAN_IER_FFIE1;
HAL_CAN_ActivateNotification(&hcan, it);
Expand All @@ -151,7 +152,7 @@ static bool CAN_checkMbFree(CAN_HandleTypeDef* canHandle, CAN_TxMailbox_E mailbo
* @param msg message data
* @return exit code
*/
static HAL_StatusTypeDef CAN_sendMsg(CAN_HandleTypeDef* canHandle, CAN_TxMessage_T msg)
static HAL_StatusTypeDef CAN_sendMsgOnPeripheral(CAN_HandleTypeDef* canHandle, CAN_TxMessage_T msg)
{
HAL_CAN_StateTypeDef state = canHandle->State;

Expand Down Expand Up @@ -213,16 +214,17 @@ static HAL_StatusTypeDef CAN_sendMsg(CAN_HandleTypeDef* canHandle, CAN_TxMessage
* @param len TODO
* @return TODO
*/
bool CAN_sendMsgBus0(CAN_TxMailbox_E mailbox, CAN_data_T data, uint16_t id, uint8_t len)
bool CAN_sendMsg(CAN_bus_E bus, CAN_TxMailbox_E mailbox, CAN_data_T data, uint16_t id, uint8_t len)
{
UNUSED(bus);
CAN_TxMessage_T msg = {0};

msg.id = id;
msg.data = data;
msg.mailbox = mailbox;
msg.lengthBytes = len;

return CAN_sendMsg(&hcan, msg) == HAL_OK;
return CAN_sendMsgOnPeripheral(&hcan, msg) == HAL_OK;
}


Expand All @@ -234,8 +236,9 @@ bool CAN_sendMsgBus0(CAN_TxMailbox_E mailbox, CAN_data_T data, uint16_t id, uint
* @param rx pointer to a CAN_RxMessage_T where the message will be stored
* @retval HAL status
*/
bool CAN_getRxMessageBus0(CAN_RxFifo_E rxFifo, CAN_RxMessage_T* rx)
bool CAN_getRxMessage(CAN_bus_E bus, CAN_RxFifo_E rxFifo, CAN_RxMessage_T* rx)
{
UNUSED(bus);
if ((hcan.State != HAL_CAN_STATE_READY) && (hcan.State != HAL_CAN_STATE_LISTENING))
{
// Update error code
Expand Down Expand Up @@ -326,8 +329,9 @@ bool CAN_getRxMessageBus0(CAN_RxFifo_E rxFifo, CAN_RxMessage_T* rx)
* This parameter can be a value of @arg CAN_receive_FIFO_number.
* @retval Number of messages available in Rx FIFO.
*/
uint8_t CAN_getRxFifoFillLevelBus0(CAN_RxFifo_E rxFifo)
uint8_t CAN_getRxFifoFillLevel(CAN_bus_E bus, CAN_RxFifo_E rxFifo)
{
UNUSED(bus);
if ((hcan.State != HAL_CAN_STATE_READY) && (hcan.State != HAL_CAN_STATE_LISTENING))
{
// CAN peripheral is not ready
Expand Down Expand Up @@ -361,8 +365,9 @@ uint8_t CAN_getRxFifoFillLevelBus0(CAN_RxFifo_E rxFifo)
* This parameter can be a value of @arg CAN_receive_FIFO_number.
* @retval Number of messages available in Rx FIFO.
*/
bool CAN_getRxFifoEmptyBus0(CAN_RxFifo_E rxFifo)
bool CAN_getRxFifoEmpty(CAN_bus_E bus, CAN_RxFifo_E rxFifo)
{
UNUSED(bus);
if ((hcan.State != HAL_CAN_STATE_READY) && (hcan.State != HAL_CAN_STATE_LISTENING))
{
// CAN peripheral is not ready
Expand Down Expand Up @@ -435,7 +440,7 @@ static void CAN_RxMsgPending_ISR(CAN_HandleTypeDef* canHandle, CAN_RxFifo_E fifo
}
#endif // FEATURE_UDS
#else // FEATURE_CANRX_SWI == FEATURE_DISABLED
CANRX_BUS_VEH_notify(fifoId);
CANRX_notify(CAN_BUS_VEH, fifoId);
#endif // FEATURE_CANRX_SWI
}
}
Expand Down Expand Up @@ -549,7 +554,7 @@ void HAL_CAN_RxFifo0FullCallback(CAN_HandleTypeDef* canHandle)
CAN_RxMsgPending_ISR(canHandle, CAN_RX_FIFO_0);
#if FEATURE_IS_ENABLED(FEATURE_CANRX_SWI)
HAL_CAN_DeactivateNotification(canHandle, CAN_IER_FFIE0);
SWI_invokeFromISR(CANRX_BUS_VEH_swi);
SWI_invokeFromISR(CANRX_swi);
#endif // FEATURE_CANRX_SWI
}

Expand All @@ -563,7 +568,7 @@ void HAL_CAN_RxFifo1FullCallback(CAN_HandleTypeDef* canHandle)
CAN_RxMsgPending_ISR(canHandle, CAN_RX_FIFO_1);
#if FEATURE_IS_ENABLED(FEATURE_CANRX_SWI)
HAL_CAN_DeactivateNotification(canHandle, CAN_IER_FFIE1);
SWI_invokeFromISR(CANRX_BUS_VEH_swi);
SWI_invokeFromISR(CANRX_swi);
#endif // FEATURE_CANRX_SWI
}

Expand Down
10 changes: 5 additions & 5 deletions components/bms_boss/HW/include/HW_can.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@

void HW_CAN_start(void);
void HW_CAN_init(void);
void HW_CAN_activateFifoNotifications(CAN_RxFifo_E rxFifo);
bool CAN_sendMsgBus0(CAN_TxMailbox_E mailbox, CAN_data_T data, uint16_t id, uint8_t len);
bool CAN_getRxMessageBus0(CAN_RxFifo_E rxFifo, CAN_RxMessage_T* rx);
uint8_t CAN_getRxFifoFillLevelBus0(CAN_RxFifo_E rxFifo);
bool CAN_getRxFifoEmptyBus0(CAN_RxFifo_E rxFifo);
void HW_CAN_activateFifoNotifications(CAN_bus_E bus, CAN_RxFifo_E rxFifo);
bool CAN_sendMsg(CAN_bus_E bus, CAN_TxMailbox_E mailbox, CAN_data_T data, uint16_t id, uint8_t len);
bool CAN_getRxMessage(CAN_bus_E bus, CAN_RxFifo_E rxFifo, CAN_RxMessage_T* rx);
uint8_t CAN_getRxFifoFillLevel(CAN_bus_E bus, CAN_RxFifo_E rxFifo);
bool CAN_getRxFifoEmpty(CAN_bus_E bus, CAN_RxFifo_E rxFifo);
8 changes: 4 additions & 4 deletions components/bms_boss/RTOS/FreeRTOSResources.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,8 @@ extern void Module_1Hz_TSK(void);
extern void Module_ApplicationIdleHook(void);

// SWIs
RTOS_swiHandle_T* CANRX_BUS_VEH_swi;
RTOS_swiHandle_T* CANTX_BUS_VEH_swi;
RTOS_swiHandle_T* CANRX_swi;
RTOS_swiHandle_T* CANTX_swi;

// task definitions
RTOS_taskDesc_t ModuleTasks[] = {
Expand Down Expand Up @@ -238,8 +238,8 @@ void RTOS_createResources(void)
/*
* create SWI handles
*/
CANTX_BUS_VEH_swi = SWI_create(RTOS_SWI_PRI_0, &CANTX_BUS_VEH_SWI);
CANRX_BUS_VEH_swi = SWI_create(RTOS_SWI_PRI_0, &CANRX_BUS_VEH_SWI);
CANTX_swi = SWI_create(RTOS_SWI_PRI_0, &CANTX_SWI);
CANRX_swi = SWI_create(RTOS_SWI_PRI_0, &CANRX_SWI);

/*
* Create tasks
Expand Down
7 changes: 5 additions & 2 deletions components/bms_boss/SConscript
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ UDS_DIR = LIBS_DIR.Dir("uds")
ISOTP_DIR = LIBS_DIR.Dir("isotp")
SHARED_CODE = Dir("#/components/shared/code")
SHARED_LIBS = SHARED_CODE.Dir("libs")
SHARED_APP = SHARED_CODE.Dir("app")

env = PLATFORM_ENV.Clone(
tools=[
Expand Down Expand Up @@ -128,6 +129,7 @@ LIBS_INCLUDE_DIRS = [
UDS_DIR.Dir("include"),
ISOTP_DIR.Dir("include"),
SHARED_LIBS,
SHARED_APP,
]

PROJECT_INCLUDE_DIRS = [
Expand All @@ -139,8 +141,9 @@ PROJECT_INCLUDE_DIRS = [
project_source_files = [
SRC_DIR.File("SystemManager.c"),
SRC_DIR.File("Module.c"),
SRC_DIR.File("CAN/CANIO-tx.c"),
SRC_DIR.File("CAN/CANIO-rx.c"),
SRC_DIR.File("CAN/CANRX_componentSpecific.c"),
SHARED_APP.File("CAN/CANIO-tx.c"),
SHARED_APP.File("CAN/CANIO-rx.c"),
SRC_DIR.File("IO.c"),
SRC_DIR.File("ENV.c"),
SRC_DIR.File("Sys.c"),
Expand Down
2 changes: 2 additions & 0 deletions components/bms_boss/include/BMS.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
* @brief Header file for BMS manager
*/

#pragma once

#include "stdbool.h"
#include "stdint.h"

Expand Down
48 changes: 48 additions & 0 deletions components/bms_boss/include/CAN/CANRX_componentSpecific.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/**
RX_config* CAN.h
* Header file for CANRX configuration
*/

#pragma once


/******************************************************************************
* I N C L U D E S
******************************************************************************/

#include "HW_tim.h"
#include "SigTx.c"
// imports for data access
#include "IO.h"
#include "BMS.h"
#include "Sys.h"
#include "IMD.h"
#include "ENV.h"

/******************************************************************************
* P R I V A T E F U N C T I O N P R O T O T Y P E S
******************************************************************************/

uint8_t CANIO_tx_getNLG513ControlByte(void);
CAN_prechargeContactorState_E CANIO_tx_getContactorState(void);

/******************************************************************************
* D E F I N E S
******************************************************************************/

#define CANIO_UDS_BUFFER_LENGTH 8U
#define CANIO_getTimeMs() (HW_TIM_getTimeMS())

#define set_criticalDataCounter(m,b,n,s) set(m,b,n,s, cantx_counter.counter_100Hz)
#define set_packChargeLimit(m,b,n,s) set(m,b,n,s, BMS.pack_charge_limit)
#define set_packDischargeLimit(m,b,n,s) set(m,b,n,s, BMS.pack_discharge_limit)
#define set_packVoltage(m,b,n,s) set(m,b,n,s, BMS.pack_voltage)
#define set_packCurrent(m,b,n,s) set(m,b,n,s, BMS.pack_current)
#define set_packContactorState(m,b,n,s) set(m,b,n,s, CANIO_tx_getContactorState())
#define set_nlg513ControlByte(m,b,n,s) set(m,b,n,s, CANIO_tx_getNLG513ControlByte())
#define set_nlg513MaxMainsCurrent(m,b,n,s) set(m,b,n,s, 16.0f)
#define set_nlg513MaxChargeVoltage(m,b,n,s) set(m,b,n,s, BMS_CONFIGURED_PACK_MAX_VOLTAGE)
#define set_nlg513MaxChargeCurrent(m,b,n,s) set(m,b,n,s, BMS.pack_charge_limit)
#define transmit_BMSB_brusaChargeCommand (SYS_SFT_checkChargerTimeout() == false)

#include "TemporaryStubbing.h"
19 changes: 0 additions & 19 deletions components/bms_boss/include/CAN/CANRX_config.h

This file was deleted.

2 changes: 2 additions & 0 deletions components/bms_boss/include/IMD.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
* @brief Header file for IMD manager
*/

#pragma once

#include <stdbool.h>

#include "FloatTypes.h"
Expand Down
Loading

0 comments on commit 9b52a1e

Please sign in to comment.