Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
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