Skip to content
Draft
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
3 changes: 3 additions & 0 deletions ECU/Application/Inc/CANdler.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include <stdbool.h>
#include <stdint.h>

#include "CubeCAN.h"
#include "GRCAN_BUS_ID.h"
#include "GRCAN_CUSTOM_ID.h"
#include "GRCAN_MSG_ID.h"
Expand All @@ -10,6 +11,8 @@
#ifndef CANDLER_H
#define CANDLER_H

void CANdler_Callback(const CubeCAN_Config_Context *const context, const CAN_Identifier *const identifier, const uint8_t *const data, const uint8_t size);

void ECU_CAN_MessageHandler(ECU_StateData *state_data, GRCAN_BUS_ID bus_id, GRCAN_MSG_ID msg_id, GRCAN_NODE_ID sender_id, uint8_t *data, uint32_t data_length);

void ECU_CAN_DTI_MessageHandler(ECU_StateData *state_data, GRCAN_CUSTOM_ID id, uint8_t *data, uint32_t data_length);
Expand Down
6 changes: 3 additions & 3 deletions ECU/Application/Inc/CANutils.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
#define ECU_STATE_DATA_SEND_INTERVAL_MS 20
void ECU_CAN_Send(GRCAN_BUS_ID bus, GRCAN_NODE_ID destNode, GRCAN_MSG_ID messageID, void *data, uint32_t size);
void ECU_CAN_Send_DTI(GRCAN_CUSTOM_ID msgID, void *data, uint32_t size);
void SendECUStateDataOverCAN(const ECU_StateData *stateData);
void SendECUAnalogDataOverCAN(const ECU_StateData *stateData);
void SendECUConfigOverCAN(const ECU_StateData *stateData);
// void SendECUStateDataOverCAN(const ECU_StateData *stateData);
// void SendECUAnalogDataOverCAN(const ECU_StateData *stateData);
// void SendECUConfigOverCAN(const ECU_StateData *stateData);
#endif
8 changes: 8 additions & 0 deletions ECU/Application/Inc/CubeCAN_Config.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#ifndef CUBE_CAN_CONFIG_H
#define CUBE_CAN_CONFIG_H

#define CUBEMX_CAN_TX_QUEUE_SIZE 16U
#define CUBEMX_CAN_MAX_INSTANCES 3U
#define ECU_CAN_MAX_DATA_BYTES 64 // Replacing FDCAN_MAX_DATA_BYTES macro since can.h doesnt exist anymore

#endif
6 changes: 3 additions & 3 deletions ECU/Application/Inc/StateData.h
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
#include <stdbool.h>
#include <stdint.h>

#include "CubeCAN.h"
#include "GRCAN_MSG_DATA.h"
#include "StateMachine.h"
#include "can.h"

#ifndef _STATEDATA_H_
#define _STATEDATA_H_
Expand Down Expand Up @@ -124,8 +124,8 @@ typedef volatile struct ECU_StateData {

GR_ECU_State ecu_state;

CANHandle *primary_can;
CANHandle *data_can;
CubeCAN_Handle *data_can;
CubeCAN_Handle *primary_can;
} ECU_StateData;

#endif
6 changes: 3 additions & 3 deletions ECU/Application/Inc/StateTicks.h
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
#include "CubeCAN.h"
#include "StateData.h"
#include "StateMachine.h"
#include "adc.h"
#include "can.h"

#ifndef _STATE_TICKS_H_
#define _STATE_TICKS_H_

extern CANHandle *primary_can;
extern CANHandle *data_can;
extern CubeCAN_Handle *primary_can;
extern CubeCAN_Handle *data_can;

/**
* @brief Tick function for the ECU state machine.
Expand Down
36 changes: 30 additions & 6 deletions ECU/Application/Src/CANdler.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#include <math.h>
#include <stdint.h>

#include "CubeCAN.h"
#include "GRCAN_BUS_ID.h"
#include "GRCAN_CUSTOM_ID.h"
#include "GRCAN_MSG_ID.h"
Expand All @@ -12,6 +13,8 @@
#include "StateData.h"
#include "bitManipulations.h"

extern ECU_StateData stateLump;

#define WHEEL_RADIUS_INCHES 8.0f
#define WHEEL_CIRCUMFERENCE_INCHES (2.0f * (float)M_PI * WHEEL_RADIUS_INCHES)
#define WHEEL_RPM_TO_MPH_RATIO (WHEEL_CIRCUMFERENCE_INCHES / 63360.0f * 60.0f)
Expand All @@ -24,7 +27,7 @@ void ReportBadMessageLength(GRCAN_BUS_ID bus_id, GRCAN_MSG_ID msg_id, GRCAN_NODE
{
// TODO Ideally change some state data to note a bad message, ie if ACU
// that can be a comms error
LOGOMATIC("Bad ECU CAN Rx length! Bus: %d, Msg: %X, Sender: %X\n", bus_id, msg_id, sender_id);
LOGOMATIC_ERROR("Bad ECU CAN Rx length! Bus: %d, Msg: %X, Sender: %X\n", bus_id, msg_id, sender_id);
}

void ReportUnhandledMessage(GRCAN_BUS_ID bus_id, GRCAN_MSG_ID msg_id, GRCAN_NODE_ID sender_id)
Expand All @@ -33,7 +36,7 @@ void ReportUnhandledMessage(GRCAN_BUS_ID bus_id, GRCAN_MSG_ID msg_id, GRCAN_NODE
UNUSED(bus_id);
UNUSED(msg_id);
UNUSED(sender_id);
// LOGOMATIC("Unhandled ECU CAN Rx msg! Bus: %d, Msg: %X, Sender: %X\n", bus_id, msg_id, sender_id);
LOGOMATIC_ERROR("Unhandled ECU CAN Rx msg! Bus: %d, Msg: %X, Sender: %X\n", bus_id, msg_id, sender_id);
}

void ECU_CAN_MessageHandler(ECU_StateData *state_data, GRCAN_BUS_ID bus_id, GRCAN_MSG_ID msg_id, GRCAN_NODE_ID sender_id, uint8_t *data, uint32_t data_length)
Expand All @@ -44,15 +47,15 @@ void ECU_CAN_MessageHandler(ECU_StateData *state_data, GRCAN_BUS_ID bus_id, GRCA
ReportBadMessageLength(bus_id, msg_id, sender_id);
break;
}
LOGOMATIC("Received from %02X on bus %d: %.*s\n", sender_id, bus_id, (int)data_length, data);
LOGOMATIC_INFO("Received from %02X on bus %d: %.*s\n", sender_id, bus_id, (int)data_length, data);
break;

case GRCAN_DEBUG_FD:
if (data_length > 64) {
ReportBadMessageLength(bus_id, msg_id, sender_id);
break;
}
LOGOMATIC("Received from %02X on bus %d: %.*s\n", sender_id, bus_id, (int)data_length, data);
LOGOMATIC_ERROR("Received from %02X on bus %d: %.*s\n", sender_id, bus_id, (int)data_length, data);
break;

case GRCAN_PING:
Expand Down Expand Up @@ -112,8 +115,8 @@ void ECU_CAN_MessageHandler(ECU_StateData *state_data, GRCAN_BUS_ID bus_id, GRCA
}
GRCAN_DASH_STATUS_MSG *dash_data = (GRCAN_DASH_STATUS_MSG *)data;

LOGOMATIC("Dash button flags: TS Press %d | TS Hold %d | RTD Press %d | RTD Hold %d\n", dash_data->button_flags & 1, (dash_data->button_flags >> 2) & 1,
(dash_data->button_flags >> 1) & 1, (dash_data->button_flags >> 3) & 1);
LOGOMATIC_INFO("Dash button flags: TS Press %d | TS Hold %d | RTD Press %d | RTD Hold %d\n", dash_data->button_flags & 1, (dash_data->button_flags >> 2) & 1,
(dash_data->button_flags >> 1) & 1, (dash_data->button_flags >> 3) & 1);

// LET IT BE KNOWN: these things are LSB FIRST, TODO: I'll get it right later
if (state_data->ecu_state == GR_GLV_ON) {
Expand Down Expand Up @@ -183,3 +186,24 @@ void ECU_CAN_DTI_MessageHandler(ECU_StateData *state_data, GRCAN_CUSTOM_ID id, u
break;
}
}

void CANdler_Callback(const CubeCAN_Config_Context *const context, const CAN_Identifier *const identifier, const uint8_t *const data, const uint8_t size)
{

if (context == NULL || identifier == NULL || data == NULL || size == 0) {
LOGOMATIC_ERROR("CANdler_Callback: Invalid parameters received. context: %p, identifier: %p, data: %p, size: %u\n", (void *const)context, (void *const)identifier, (void *const)data,
size);
return;
}

const GRCAN_BUS_ID bus_id = context->busid_user_context;
const GRCAN_NODE_ID sender_id = identifier->tx_node_id;
const GRCAN_MSG_ID msg_id = identifier->msg_id;

if (msg_id == (GRCAN_MSG_ID)DTI_DATA_1_CAN_ID) {
ECU_CAN_DTI_MessageHandler(&stateLump, (GRCAN_CUSTOM_ID)msg_id, (uint8_t *)data, size);
return;
}

ECU_CAN_MessageHandler(&stateLump, bus_id, msg_id, sender_id, (uint8_t *)data, size);
}
Loading
Loading