diff --git a/Autogen/CAN/Doc/GRCAN.CANdo b/Autogen/CAN/Doc/GRCAN.CANdo index c33c1b26e..776e321e8 100644 --- a/Autogen/CAN/Doc/GRCAN.CANdo +++ b/Autogen/CAN/Doc/GRCAN.CANdo @@ -4058,7 +4058,7 @@ Message ID: Elapsed Cycles: bit_start: 0 comment: - Represents total number of clock cycles in main excluding delay + Represents the total number of clock cycles elapsed for 10 iterations of the main loop data type: u32 units: Clock Cycles data type: u8 diff --git a/Autogen/CAN/Inc/GRCAN_MSG_DATA.h b/Autogen/CAN/Inc/GRCAN_MSG_DATA.h index c5bf2f20c..bf6fe2b6a 100644 --- a/Autogen/CAN/Inc/GRCAN_MSG_DATA.h +++ b/Autogen/CAN/Inc/GRCAN_MSG_DATA.h @@ -405,7 +405,7 @@ typedef struct { uint16_t steering_angle_signal; /** 4-20 mA signal (Byte 14) */ uint16_t aux_signal; -} GRCAN_ECU_PEDALS_DATA_MSG; +} GRCAN_ECU_ANALOG_DATA_MSG; /** GPS LAT */ typedef struct { @@ -465,4 +465,13 @@ typedef struct { uint16_t dgps_w; } GRCAN_UVW_DGPS_MSG; +/** ECU Performance */ +typedef struct { + /** + * Represents the total number of clock cycles elapsed for 10 iterations of the main loop + * data type: u32 + * units: Clock Cycles (Byte 0) */ + uint32_t elapsed_cycles; +} GRCAN_ECU_PERFORMANCE_MSG; + #endif diff --git a/Autogen/CAN/Inc/GRCAN_MSG_ID.h b/Autogen/CAN/Inc/GRCAN_MSG_ID.h index d589fa470..08d12cf49 100644 --- a/Autogen/CAN/Inc/GRCAN_MSG_ID.h +++ b/Autogen/CAN/Inc/GRCAN_MSG_ID.h @@ -33,7 +33,7 @@ typedef enum { MSG_TCM_STATUS = 0x029, MSG_TCM_RESOURCE_UTILIZATION = 0x02A, MSG_DASH_WARNING_FLAGS = 0x02B, - MSG_ECU_PEDALS_DATA = 0x02E, + MSG_ECU_ANALOG_DATA = 0x02E, MSG_GPS_LAT = 0x031, MSG_GPS_LON = 0x032, MSG_GPS_ALT = 0x033, @@ -41,6 +41,7 @@ typedef enum { MSG_GPS_QY = 0x035, MSG_GPS_RZ = 0x036, MSG_UVW_DGPS = 0x030, + MSG_ECU_PERFORMANCE = 0x123, } GRCAN_MSG_ID; #endif // CAN_MSG_IDS_H diff --git a/ECU/Application/Inc/CANdler.h b/ECU/Application/Inc/CANdler.h index 7072f5ad4..048243634 100644 --- a/ECU/Application/Inc/CANdler.h +++ b/ECU/Application/Inc/CANdler.h @@ -1,14 +1,14 @@ #include #include -#include "GR_OLD_BUS_ID.h" -#include "GR_OLD_MSG_ID.h" -#include "GR_OLD_NODE_ID.h" +#include "GRCAN_BUS_ID.h" +#include "GRCAN_MSG_ID.h" +#include "GRCAN_NODE_ID.h" #include "StateData.h" #ifndef CANDLER_H #define CANDLER_H -void ECU_CAN_MessageHandler(ECU_StateData *state_data, GR_OLD_BUS_ID bus_id, GR_OLD_MSG_ID msg_id, GR_OLD_NODE_ID sender_id, uint8_t *data, uint32_t data_length); +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); #endif diff --git a/ECU/Application/Inc/CANutils.h b/ECU/Application/Inc/CANutils.h index a7011d9fa..aa79cfb1d 100644 --- a/ECU/Application/Inc/CANutils.h +++ b/ECU/Application/Inc/CANutils.h @@ -1,15 +1,15 @@ #include -#include "GR_OLD_BUS_ID.h" -#include "GR_OLD_MSG_ID.h" -#include "GR_OLD_NODE_ID.h" +#include "GRCAN_BUS_ID.h" +#include "GRCAN_MSG_ID.h" +#include "GRCAN_NODE_ID.h" #include "StateData.h" #ifndef CANUTILS_H #define CANUTILS_H #define ECU_STATE_DATA_SEND_INTERVAL_MS 20 -void ECU_CAN_Send(GR_OLD_BUS_ID bus, GR_OLD_NODE_ID destNode, GR_OLD_MSG_ID messageID, void *data, uint32_t size); +void ECU_CAN_Send(GRCAN_BUS_ID bus, GRCAN_NODE_ID destNode, GRCAN_MSG_ID messageID, void *data, uint32_t size); void SendECUStateDataOverCAN(ECU_StateData *stateData); #endif diff --git a/ECU/Application/Inc/StateData.h b/ECU/Application/Inc/StateData.h index 3bad50701..1ba6ccfca 100644 --- a/ECU/Application/Inc/StateData.h +++ b/ECU/Application/Inc/StateData.h @@ -1,7 +1,7 @@ #include #include -#include "GR_OLD_MSG_DAT.h" +#include "GRCAN_MSG_DATA.h" #include "StateMachine.h" #ifndef _STATEDATA_H_ @@ -79,10 +79,13 @@ typedef volatile struct ECU_StateData { float estop_sense; float driving_heat_capacity_1; float driving_heat_capacity_2; + uint16_t bse_signal; + uint16_t bspd_signal; uint16_t APPS1_Signal; uint16_t APPS2_Signal; uint16_t Brake_R_Signal; uint16_t Brake_F_Signal; + uint16_t aux_signal; uint8_t status_bits[3]; int8_t ping_block[3]; /** Node timeout status bits (1=OK, 0=Timeout) */ uint8_t powerlevel_torquemap; /** Power lvl (4b) & torque map (4b) */ diff --git a/ECU/Application/Src/CANdler.c b/ECU/Application/Src/CANdler.c index f6e67c0e5..bba4df9fa 100644 --- a/ECU/Application/Src/CANdler.c +++ b/ECU/Application/Src/CANdler.c @@ -2,9 +2,9 @@ #include -#include "GR_OLD_BUS_ID.h" -#include "GR_OLD_MSG_ID.h" -#include "GR_OLD_NODE_ID.h" +#include "GRCAN_BUS_ID.h" +#include "GRCAN_MSG_ID.h" +#include "GRCAN_NODE_ID.h" #include "Logomatic.h" #include "Pinging.h" #include "StateData.h" @@ -14,24 +14,24 @@ extern ECU_StateData stateLump; -void ReportBadMessageLength(GR_OLD_BUS_ID bus_id, GR_OLD_MSG_ID msg_id, GR_OLD_NODE_ID sender_id) +void ReportBadMessageLength(GRCAN_BUS_ID bus_id, GRCAN_MSG_ID msg_id, GRCAN_NODE_ID sender_id) { // TODO Ideally change some state data to note a bad message, ie if BCU // 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); } -void ReportUnhandledMessage(GR_OLD_BUS_ID bus_id, GR_OLD_MSG_ID msg_id, GR_OLD_NODE_ID sender_id) +void ReportUnhandledMessage(GRCAN_BUS_ID bus_id, GRCAN_MSG_ID msg_id, GRCAN_NODE_ID sender_id) { // Filtering likely needs to be adjusted if this is happening often LOGOMATIC("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, GR_OLD_BUS_ID bus_id, GR_OLD_MSG_ID msg_id, GR_OLD_NODE_ID sender_id, uint8_t *data, uint32_t data_length) +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) { switch (msg_id) { case MSG_DEBUG_2_0: - if (data_length > sizeof(GR_OLD_DEBUG_2_MSG)) { + if (data_length > sizeof(GRCAN_DEBUG_2_0_MSG)) { ReportBadMessageLength(bus_id, msg_id, sender_id); break; } @@ -39,7 +39,7 @@ void ECU_CAN_MessageHandler(ECU_StateData *state_data, GR_OLD_BUS_ID bus_id, GR_ break; case MSG_DEBUG_FD: - if (data_length > sizeof(GR_OLD_DEBUG_2_MSG)) { + if (data_length > sizeof(GRCAN_DEBUG_FD_MSG)) { ReportBadMessageLength(bus_id, msg_id, sender_id); break; } @@ -47,72 +47,76 @@ void ECU_CAN_MessageHandler(ECU_StateData *state_data, GR_OLD_BUS_ID bus_id, GR_ break; case MSG_PING: - if (data_length != sizeof(GR_OLD_PING_MSG)) { + if (data_length != sizeof(GRCAN_PING_MSG)) { ReportBadMessageLength(bus_id, msg_id, sender_id); break; } - respondToPing(sender_id, ((GR_OLD_PING_MSG *)data)->timestamp); + respondToPing(sender_id, ((GRCAN_PING_MSG *)data)->timestamp); break; case MSG_BCU_STATUS_1: - if (data_length != sizeof(GR_OLD_BCU_STATUS_1_MSG)) { + if (data_length != sizeof(GRCAN_BCU_STATUS_1_MSG)) { ReportBadMessageLength(bus_id, msg_id, sender_id); break; } - GR_OLD_BCU_STATUS_1_MSG *bcu_status_1 = (GR_OLD_BCU_STATUS_1_MSG *)data; - state_data->tractivebattery_soc = bcu_status_1->tractivebattery_soc; + GRCAN_BCU_STATUS_1_MSG *bcu_status_1 = (GRCAN_BCU_STATUS_1_MSG *)data; + state_data->tractivebattery_soc = bcu_status_1->accumulator_soc; state_data->glv_soc = bcu_status_1->glv_soc; state_data->ts_voltage = bcu_status_1->ts_voltage * 0.01; break; case MSG_BCU_STATUS_2: - if (data_length != sizeof(GR_OLD_BCU_STATUS_2_MSG)) { + if (data_length != sizeof(GRCAN_BCU_STATUS_2_MSG)) { ReportBadMessageLength(bus_id, msg_id, sender_id); break; } - GR_OLD_BCU_STATUS_2_MSG *bcu_status_2 = (GR_OLD_BCU_STATUS_2_MSG *)data; + GRCAN_BCU_STATUS_2_MSG *bcu_status_2 = (GRCAN_BCU_STATUS_2_MSG *)data; state_data->max_cell_temp_c = bcu_status_2->max_cell_temp * 0.25; - state_data->bcu_error_warning_bits = bcu_status_2->error_bits; - state_data->ir_minus = GETBIT(bcu_status_2->precharge_bits, 1); - state_data->ir_plus = GETBIT(bcu_status_2->precharge_bits, 2); - state_data->bcu_software_latch = GETBIT(bcu_status_2->precharge_bits, 3); + state_data->bcu_error_warning_bits = bcu_status_2->status_flags; + state_data->ir_minus = GETBIT(bcu_status_2->precharge_latch_flags, 1); + state_data->ir_plus = GETBIT(bcu_status_2->precharge_latch_flags, 2); + state_data->bcu_software_latch = GETBIT(bcu_status_2->precharge_latch_flags, 3); break; case MSG_INVERTER_STATUS_1: - if (data_length != sizeof(GR_OLD_INVERTER_STATUS_1_MSG)) { + if (data_length != sizeof(GRCAN_INVERTER_STATUS_1_MSG)) { ReportBadMessageLength(bus_id, msg_id, sender_id); break; } - GR_OLD_INVERTER_STATUS_1_MSG *inverter_status_1 = (GR_OLD_INVERTER_STATUS_1_MSG *)data; + GRCAN_INVERTER_STATUS_1_MSG *inverter_status_1 = (GRCAN_INVERTER_STATUS_1_MSG *)data; UNUSED(inverter_status_1); break; case MSG_INVERTER_STATUS_3: - if (data_length != sizeof(GR_OLD_INVERTER_STATUS_3_MSG)) { + if (data_length != sizeof(GRCAN_INVERTER_STATUS_3_MSG)) { ReportBadMessageLength(bus_id, msg_id, sender_id); break; } - GR_OLD_INVERTER_STATUS_3_MSG *inverter_status_3 = (GR_OLD_INVERTER_STATUS_3_MSG *)data; + GRCAN_INVERTER_STATUS_3_MSG *inverter_status_3 = (GRCAN_INVERTER_STATUS_3_MSG *)data; state_data->inverter_fault_map = inverter_status_3->fault_bits; break; /* case MSG_STEERING_STATUS: - if (data_length != sizeof(GR_OLD_STEERING_STATUS_MSG)) { + if (data_length != sizeof(GRCAN_STEERING_STATUS_MSG)) { ReportBadMessageLength(bus_id, msg_id, sender_id); break; } - GR_OLD_STEERING_STATUS_MSG *steering_status = (GR_OLD_STEERING_STATUS_MSG *)data; + GRCAN_STEERING_STATUS_MSG *steering_status = (GRCAN_STEERING_STATUS_MSG *)data; state_data->powerlevel_torquemap = steering_status->encoder_bits; break; */ + + // TODO: fix when sensors done + /* case MSG_SAM_REAR_WHEELSPEED: - if (data_length != sizeof(GR_OLD_SAM_REAR_WHEELSPEED_MSG)) { + if (data_length != sizeof(GRCAN_SAM_REAR_WHEELSPEED_MSG)) { ReportBadMessageLength(bus_id, msg_id, sender_id); break; } - GR_OLD_SAM_REAR_WHEELSPEED_MSG *encoder_status = (GR_OLD_SAM_REAR_WHEELSPEED_MSG *)data; + GRCAN_SAM_REAR_WHEELSPEED_MSG *encoder_status = (GRCAN_SAM_REAR_WHEELSPEED_MSG *)data; state_data->rr_wheel_rpm = encoder_status->wheel_speed * 0.1 - 32768; // TODO: find out which wheel this actually measures: one or 4 sensors? state_data->vehicle_speed_mph = state_data->rr_wheel_rpm * WHEEL_RPM_TO_MPH_RATIO; break; + */ default: ReportUnhandledMessage(bus_id, msg_id, sender_id); break; diff --git a/ECU/Application/Src/CANutils.c b/ECU/Application/Src/CANutils.c index a05d12ea5..4cd1e8197 100644 --- a/ECU/Application/Src/CANutils.c +++ b/ECU/Application/Src/CANutils.c @@ -1,8 +1,8 @@ #include "CANutils.h" -#include "GR_OLD_BUS_ID.h" -#include "GR_OLD_MSG_DAT.h" -#include "GR_OLD_MSG_ID.h" +#include "GRCAN_BUS_ID.h" +#include "GRCAN_MSG_ID.h" +#include "GRCAN_NODE_ID.h" #include "Logomatic.h" #include "StateData.h" #include "StateTicks.h" @@ -13,7 +13,7 @@ uint32_t lastTickECUStateDataSent = 0; -void ECU_CAN_Send(GR_OLD_BUS_ID bus, GR_OLD_NODE_ID destNode, GR_OLD_MSG_ID messageID, void *data, uint32_t size) +void ECU_CAN_Send(GRCAN_BUS_ID bus, GRCAN_NODE_ID destNode, GRCAN_MSG_ID messageID, void *data, uint32_t size) { if (size > FDCAN_MAX_DATA_BYTES) { size = FDCAN_MAX_DATA_BYTES; @@ -39,10 +39,10 @@ void ECU_CAN_Send(GR_OLD_BUS_ID bus, GR_OLD_NODE_ID destNode, GR_OLD_MSG_ID mess memcpy(&(msg.data), data, size); switch (bus) { - case GR_OLD_BUS_PRIMARY: + case GRCAN_BUS_PRIMARY: can_send(primary_can, &msg); break; - case GR_OLD_BUS_DATA: + case GRCAN_BUS_DATA: can_send(data_can, &msg); break; default: @@ -112,7 +112,7 @@ void SendECUStateDataOverCAN(ECU_StateData *stateData) LOGOMATIC("Sending ECU State Data over CAN"); - ECU_CAN_Send(GR_OLD_BUS_PRIMARY, GR_ALL, MSG_ECU_STATUS_1, (void *)&messages.ECUStatusMsgOne, sizeof(messages.ECUStatusMsgOne)); - ECU_CAN_Send(GR_OLD_BUS_PRIMARY, GR_ALL, MSG_ECU_STATUS_2, (void *)&messages.ECUStatusMsgTwo, sizeof(messages.ECUStatusMsgTwo)); - ECU_CAN_Send(GR_OLD_BUS_PRIMARY, GR_ALL, MSG_ECU_STATUS_3, (void *)&messages.ECUStatusMsgThree, sizeof(messages.ECUStatusMsgThree)); + ECU_CAN_Send(GRCAN_BUS_PRIMARY, ALL, MSG_ECU_STATUS_1, (void *)&messages.ECUStatusMsgOne, sizeof(messages.ECUStatusMsgOne)); + ECU_CAN_Send(GRCAN_BUS_PRIMARY, ALL, MSG_ECU_STATUS_2, (void *)&messages.ECUStatusMsgTwo, sizeof(messages.ECUStatusMsgTwo)); + ECU_CAN_Send(GRCAN_BUS_PRIMARY, ALL, MSG_ECU_STATUS_3, (void *)&messages.ECUStatusMsgThree, sizeof(messages.ECUStatusMsgThree)); } diff --git a/ECU/Application/Src/Lights.c b/ECU/Application/Src/Lights.c index 66eb5832e..af4a10ae4 100644 --- a/ECU/Application/Src/Lights.c +++ b/ECU/Application/Src/Lights.c @@ -74,8 +74,8 @@ void BMSLights(ECU_StateData *stateLump) light |= stateLump->ts_voltage > CRITICAL_TS_VOLTAGE; light |= bmsFailure(stateLump); // TODO: interrupted/missing BMS vals - GR_OLD_DASH_CONFIG_MSG message = {.led_bits = light}; - ECU_CAN_Send(GR_OLD_BUS_PRIMARY, GR_DASH_PANEL, MSG_DASH_CONFIG, &message, sizeof(message)); + GRCAN_DASH_CONFIG_MSG message = {.led_bits = light}; + ECU_CAN_Send(GRCAN_BUS_PRIMARY, Dash_Panel, MSG_DASH_CONFIG, &message, sizeof(message)); } void IMDLights(ECU_StateData *stateLump) @@ -83,8 +83,8 @@ void IMDLights(ECU_StateData *stateLump) uint8_t light = 0; // TODO: isolation failure? light |= imdFailure(stateLump); - GR_OLD_DASH_CONFIG_MSG message = {.led_bits = (light << 1)}; - ECU_CAN_Send(GR_OLD_BUS_PRIMARY, GR_DASH_PANEL, MSG_DASH_CONFIG, &message, sizeof(message)); + GRCAN_DASH_CONFIG_MSG message = {.led_bits = (light << 1)}; + ECU_CAN_Send(GRCAN_BUS_PRIMARY, Dash_Panel, MSG_DASH_CONFIG, &message, sizeof(message)); } void BSPDLights(ECU_StateData *stateLump) @@ -92,8 +92,8 @@ void BSPDLights(ECU_StateData *stateLump) uint8_t light = 0; // TODO: isolation failure? light |= bspdFailure(stateLump); - GR_OLD_DASH_CONFIG_MSG message = {.led_bits = (light << 2)}; - ECU_CAN_Send(GR_OLD_BUS_PRIMARY, GR_DASH_PANEL, MSG_DASH_CONFIG, &message, sizeof(message)); + GRCAN_DASH_CONFIG_MSG message = {.led_bits = (light << 2)}; + ECU_CAN_Send(GRCAN_BUS_PRIMARY, Dash_Panel, MSG_DASH_CONFIG, &message, sizeof(message)); } void lightControl(ECU_StateData *stateData) diff --git a/ECU/Application/Src/Pinging.c b/ECU/Application/Src/Pinging.c index 55aa9d3d2..45f7ea138 100644 --- a/ECU/Application/Src/Pinging.c +++ b/ECU/Application/Src/Pinging.c @@ -1,16 +1,15 @@ #include "Pinging.h" #include "CANutils.h" -#include "GR_OLD_MSG_DAT.h" -#include "GR_OLD_MSG_ID.h" -#include "GR_OLD_NODE_ID.h" +#include "GRCAN_BUS_ID.h" +#include "GRCAN_MSG_ID.h" +#include "GRCAN_NODE_ID.h" #include "StateUtils.h" // add new pingable devices here, arrays are updated automagically #define PING_LIST(OP) \ - OP(GR_BCU, 0) \ - OP(GR_DASH_PANEL, 1) \ - OP(GR_CCU, 2) + OP(BCU, 0) \ + OP(Dash_Panel, 1) // Converts PING_LIST into a list of the first column (IDs) #define PING_LIST_AS_ID(id, index) id, @@ -42,7 +41,7 @@ void pingAll(void) } sentTimestamps[i] = timestamp; - ECU_CAN_Send(GR_OLD_BUS_PRIMARY, IDsToBePinged[i], MSG_PING, &(GR_OLD_PING_MSG){timestamp}, sizeof(GR_OLD_PING_MSG)); + ECU_CAN_Send(GRCAN_BUS_PRIMARY, IDsToBePinged[i], MSG_PING, &(GRCAN_PING_MSG){timestamp}, sizeof(GRCAN_PING_MSG)); } } diff --git a/ECU/Application/Src/StateTicks.c b/ECU/Application/Src/StateTicks.c index 0a7d949c8..4da4490c0 100644 --- a/ECU/Application/Src/StateTicks.c +++ b/ECU/Application/Src/StateTicks.c @@ -4,10 +4,10 @@ #include "CANutils.h" #include "ComparatorMacros.h" -#include "GR_OLD_BUS_ID.h" -#include "GR_OLD_MSG_DAT.h" -#include "GR_OLD_MSG_ID.h" -#include "GR_OLD_NODE_ID.h" +#include "GRCAN_BUS_ID.h" +#include "GRCAN_MSG_DATA.h" +#include "GRCAN_MSG_ID.h" +#include "GRCAN_NODE_ID.h" #include "Logomatic.h" #include "StateData.h" #include "StateMachine.h" @@ -28,6 +28,7 @@ ECU_StateData stateLump = {.ecu_state = GR_GLV_ON, .bcu_software_latch = 1}; static uint32_t buzzer_start_millis; static uint32_t last_can_inverter_request_millis; +static uint32_t last_can_tcm_request_millis; // TODO: implement CANHandle *primary_can; CANHandle *data_can; @@ -88,7 +89,7 @@ void ECU_GLV_On(ECU_StateData *stateData) if (stateData->ts_voltage >= SAFE_VOLTAGE_LIMIT) { ECU_Transition_To_Tractive_System_Discharge(stateData); LOGOMATIC("Error: TS Voltage >= %d!\n", SAFE_VOLTAGE_LIMIT); - ECU_CAN_Send(GR_OLD_BUS_PRIMARY, GR_DEBUGGER, MSG_DEBUG_2_0, "TS-Runwy", 8); + ECU_CAN_Send(GRCAN_BUS_PRIMARY, Debugger, MSG_DEBUG_2_0, "TS-Runwy", 8); return; } @@ -102,8 +103,8 @@ void ECU_GLV_On(ECU_StateData *stateData) void ECU_Transition_To_Precharge_Engaged(ECU_StateData *stateData) { /*send message to BCU to start precharging*/ - GR_OLD_BCU_PRECHARGE_MSG message = {.precharge = 1}; // Go TS Active/Precharge - ECU_CAN_Send(GR_OLD_BUS_PRIMARY, GR_BCU, MSG_BCU_PRECHARGE, &message, sizeof(message)); + GRCAN_BCU_PRECHARGE_MSG message = {.set_ts_active = 1}; // Go TS Active/Precharge + ECU_CAN_Send(GRCAN_BUS_PRIMARY, BCU, MSG_BCU_PRECHARGE, &message, sizeof(message)); stateData->ecu_state = GR_PRECHARGE_ENGAGED; LOGOMATIC("PRECHARGE START to PRECHARGE ENGAGED!\n"); return; @@ -120,7 +121,7 @@ void ECU_Precharge_Engaged(ECU_StateData *stateData) if (!stateData->ts_active_button_active || CommunicationError(stateData)) { ECU_Transition_To_Tractive_System_Discharge(stateData); LOGOMATIC("ERROR or ts_active OFF! PRECHARGE ENGAGED to TS DISCHARGE START!\n"); - ECU_CAN_Send(GR_OLD_BUS_PRIMARY, GR_DEBUGGER, MSG_DEBUG_2_0, "TS-P-ITR", 8); + ECU_CAN_Send(GRCAN_BUS_PRIMARY, Debugger, MSG_DEBUG_2_0, "TS-P-ITR", 8); return; } } @@ -136,13 +137,23 @@ void ECU_Precharge_Complete(ECU_StateData *stateData) if (CriticalError(stateData)) { ECU_Transition_To_Tractive_System_Discharge(stateData); LOGOMATIC("Error: Critical Error Occurred. Discharging Tractive System.\n"); - ECU_CAN_Send(GR_OLD_BUS_PRIMARY, GR_DEBUGGER, MSG_DEBUG_2_0, "HV-CritE", 8); + ECU_CAN_Send(GRCAN_BUS_PRIMARY, Debugger, MSG_DEBUG_2_0, "HV-CritE", 8); return; } if (PressingBrake(stateData) && stateData->rtd_button_active) { - GR_OLD_INVERTER_CONFIG_MSG message = {.max_ac_current = 0xFFFF, .max_dc_current = 0xFFFF, .abs_max_motor_rpm = 0xFFFF, .motor_direction = 0}; - ECU_CAN_Send(GR_OLD_BUS_PRIMARY, GR_GR_INVERTER_1, MSG_INVERTER_CONFIG, &message, sizeof(message)); + GRCAN_INVERTER_CONFIG_MSG inverter_message = {.max_ac_current = 0xFFFF, .max_dc_current = 0xFFFF, .absolute_max_rpm_limit = 0xFFFF, .motor_direction = 0}; + ECU_CAN_Send(GRCAN_BUS_PRIMARY, GR_Inverter, MSG_INVERTER_CONFIG, &inverter_message, sizeof(inverter_message)); + GRCAN_ECU_ANALOG_DATA_MSG pedals_message = {.bspd_signal = stateData->bspd_signal, + .bse_signal = stateData->bse_signal, + .apps_1_signal = stateData->APPS1_Signal, + .apps_2_signal = stateData->APPS2_Signal, + .brakeline_f_signal = stateData->Brake_F_Signal, + .brakeline_r_signal = stateData->Brake_R_Signal, + // TODO: include steering wheel data + .steering_angle_signal = 0, + .aux_signal = stateData->aux_signal}; + ECU_CAN_Send(GRCAN_BUS_DATA, TCM, MSG_ECU_ANALOG_DATA, &pedals_message, sizeof(pedals_message)); LOGOMATIC("PRECHARGE COMPLETE to DRIVE START/ACTIVE!\n"); ECU_Transition_To_Drive_Active(stateData); return; @@ -161,7 +172,7 @@ void ECU_Drive_Active(ECU_StateData *stateData) if (!stateData->ts_active_button_active || CriticalError(stateData)) { ECU_Transition_To_Tractive_System_Discharge(stateData); LOGOMATIC("Error: Critical Error Occured. Discharging Tractive System.\n"); - ECU_CAN_Send(GR_OLD_BUS_PRIMARY, GR_DEBUGGER, MSG_DEBUG_2_0, "DA-CritE", 8); + ECU_CAN_Send(GRCAN_BUS_PRIMARY, Debugger, MSG_DEBUG_2_0, "DA-CritE", 8); return; } @@ -201,8 +212,23 @@ void ECU_Drive_Active(ECU_StateData *stateData) } if (stateData->millisSinceBoot - last_can_inverter_request_millis > 10) { - GR_OLD_INVERTER_COMMAND_MSG message = {.ac_current = torque_request * 100 + 32768, .dc_current = torque_request * 100 + 32768, .drive_enable = 1, .rpm_limit = 0}; - ECU_CAN_Send(GR_OLD_BUS_PRIMARY, GR_GR_INVERTER_1, MSG_INVERTER_COMMAND, &message, sizeof(message)); + GRCAN_INVERTER_COMMAND_MSG message = {.set_ac_current = torque_request * 100 + 32768, .set_dc_current = torque_request * 100 + 32768, .drive_enable = 1, .rpm_limit = 0}; + ECU_CAN_Send(GRCAN_BUS_PRIMARY, GR_Inverter, MSG_INVERTER_COMMAND, &message, sizeof(message)); + last_can_inverter_request_millis = stateData->millisSinceBoot; + } + + // placeholder for pedal data + if (stateData->millisSinceBoot - last_can_tcm_request_millis > 10) { + GRCAN_ECU_ANALOG_DATA_MSG message = {.bspd_signal = stateData->bspd_signal, + .bse_signal = stateData->bse_signal, + .apps_1_signal = stateData->APPS1_Signal, + .apps_2_signal = stateData->APPS2_Signal, + .brakeline_f_signal = stateData->Brake_F_Signal, + .brakeline_r_signal = stateData->Brake_R_Signal, + // TODO: include steering wheel data + .steering_angle_signal = 0, + .aux_signal = stateData->aux_signal}; + ECU_CAN_Send(GRCAN_BUS_DATA, TCM, MSG_ECU_ANALOG_DATA, &message, sizeof(message)); last_can_inverter_request_millis = stateData->millisSinceBoot; } } @@ -211,8 +237,8 @@ void ECU_Transition_To_Tractive_System_Discharge(ECU_StateData *stateData) { stateData->ecu_state = GR_TS_DISCHARGE; LOGOMATIC("ECU: BCU discharge Tractive System\n"); - GR_OLD_BCU_PRECHARGE_MSG message = {.precharge = 0}; - ECU_CAN_Send(GR_OLD_BUS_PRIMARY, GR_BCU, MSG_BCU_PRECHARGE, &message, sizeof(message)); + GRCAN_BCU_PRECHARGE_MSG message = {.set_ts_active = 0}; + ECU_CAN_Send(GRCAN_BUS_PRIMARY, BCU, MSG_BCU_PRECHARGE, &message, sizeof(message)); stateData->dischargeStartMillis = stateData->millisSinceBoot; } @@ -232,6 +258,6 @@ void ECU_Tractive_System_Discharge(ECU_StateData *stateData) */ if (stateData->millisSinceBoot - stateData->dischargeStartMillis > TRACTIVE_SYSTEM_MAX_PERMITTED_DISCHARGE_TIME_MILLIS) { LOGOMATIC("Warning: Tractive System fails to discharge in time.\n"); - ECU_CAN_Send(GR_OLD_BUS_PRIMARY, GR_DEBUGGER, MSG_DEBUG_2_0, "TS-D-TLE", 8); + ECU_CAN_Send(GRCAN_BUS_PRIMARY, Debugger, MSG_DEBUG_2_0, "TS-D-TLE", 8); } } diff --git a/ECU/Core/Inc/main.h b/ECU/Core/Inc/main.h index de0c4f788..4881b24dc 100644 --- a/ECU/Core/Inc/main.h +++ b/ECU/Core/Inc/main.h @@ -43,7 +43,7 @@ extern "C" { /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ -#include "GR_OLD_NODE_ID.h" +#include "GRCAN_NODE_ID.h" /* USER CODE END Includes */ /* Exported types ------------------------------------------------------------*/ @@ -58,7 +58,7 @@ extern "C" { /* Exported macro ------------------------------------------------------------*/ /* USER CODE BEGIN EM */ -#define LOCAL_GR_ID GR_ECU +#define LOCAL_GR_ID ECU /* USER CODE END EM */ /* Exported functions prototypes ---------------------------------------------*/ diff --git a/ECU/Core/Src/main.c b/ECU/Core/Src/main.c index 0ad5307fc..ef55b6fb4 100644 --- a/ECU/Core/Src/main.c +++ b/ECU/Core/Src/main.c @@ -19,7 +19,7 @@ /* Includes ------------------------------------------------------------------*/ #include "main.h" -#include "GR_OLD_BUS_ID.h" +#include "GRCAN_BUS_ID.h" #include "StateData.h" #include "StateTicks.h" #include "adc.h" @@ -117,18 +117,18 @@ void read_digital(void) void write_adc_values_to_state_data() { // analog - // TODO: bse signal idk what to do ADC_outputs[0] - // TODO: bspd signal --> ADC_outputs[1], find use + stateLump.bse_signal = ADC_outputs[0]; + stateLump.bspd_signal = ADC_outputs[1]; stateLump.APPS1_Signal = ADC_outputs[2]; stateLump.APPS2_Signal = ADC_outputs[3]; stateLump.Brake_F_Signal = ADC_outputs[4]; stateLump.Brake_R_Signal = ADC_outputs[5]; - // TODO: Aux signal idk what to do with it ADC1_outputs[6] + stateLump.aux_signal = ADC_outputs[6]; // TODO: determine conversion factors for all of these (uint to float) - stateLump.bspd_sense = ADC_outputs[6]; - stateLump.imd_sense = ADC_outputs[7]; - stateLump.ams_sense = ADC_outputs[8]; + stateLump.bspd_sense = ADC_outputs[7]; + stateLump.imd_sense = ADC_outputs[8]; + stateLump.ams_sense = ADC_outputs[9]; } void ADC_Configure(void) @@ -139,44 +139,6 @@ void ADC_Configure(void) LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_ADC12); LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA); - // OLD ADC (FOR REF) - /* - // Initialize the ADC1 - ADC_Group_Init(ADC1, PS_8); // TODO: change prescalar l8r - ADC_Regular_Group_Init(ADC1, RANKS_7); - - // Initialize the pins and channels - Pin_Ports p1 = {0}; - p1.port = GPIOC; - p1.pin = LL_GPIO_PIN_0 | LL_GPIO_PIN_1 | LL_GPIO_PIN_2 | LL_GPIO_PIN_3; - ADC_Init_Pins(&p1); - Pin_Ports p2 = {0}; - p2.port = GPIOB; - p2.pin = LL_GPIO_PIN_0 | LL_GPIO_PIN_1 | LL_GPIO_PIN_14; - ADC_Init_Pins(&p2); - ADC_Channel_Init(ADC1, RANK_1, ADC_CHANNEL_6, SINGLE_ENDED, SAMPLINGTIME_247CYCLES_5); - ADC_Channel_Init(ADC1, RANK_2, ADC_CHANNEL_7, SINGLE_ENDED, SAMPLINGTIME_247CYCLES_5); - ADC_Channel_Init(ADC1, RANK_3, ADC_CHANNEL_8, SINGLE_ENDED, SAMPLINGTIME_247CYCLES_5); - ADC_Channel_Init(ADC1, RANK_4, ADC_CHANNEL_9, SINGLE_ENDED, SAMPLINGTIME_247CYCLES_5); - ADC_Channel_Init(ADC1, RANK_5, ADC_CHANNEL_15, SINGLE_ENDED, SAMPLINGTIME_247CYCLES_5); - ADC_Channel_Init(ADC1, RANK_6, ADC_CHANNEL_12, SINGLE_ENDED, SAMPLINGTIME_247CYCLES_5); - ADC_Channel_Init(ADC1, RANK_7, ADC_CHANNEL_5, SINGLE_ENDED, SAMPLINGTIME_247CYCLES_5); - - // Initialize ADC2 - ADC_Init(ADC2, RESOLUTION_12, RIGHT); - ADC_Regular_Group_Init(ADC2, RANKS_4); - - // Initialize the pins and channels - Pin_Ports p3 = {0}; - p3.port = GPIOA; - p3.pin = LL_GPIO_PIN_15; - ADC_Init_Pins(&p3); - ADC_Channel_Init(ADC2, RANK_1, ADC_CHANNEL_15, SINGLE_ENDED, SAMPLINGTIME_247CYCLES_5); - ADC_Channel_Init(ADC2, RANK_2, ADC_CHANNEL_13, SINGLE_ENDED, SAMPLINGTIME_247CYCLES_5); - ADC_Channel_Init(ADC2, RANK_3, ADC_CHANNEL_3, SINGLE_ENDED, SAMPLINGTIME_247CYCLES_5); - ADC_Channel_Init(ADC2, RANK_4, ADC_CHANNEL_4, SINGLE_ENDED, SAMPLINGTIME_247CYCLES_5); - */ - // ADC 1 ADC_Init_Values Init_Vals_ADC1 = {0}; Init_Vals_ADC1.ADC = ADC1; @@ -245,14 +207,14 @@ void ADC_Configure(void) void CAN1_rx_callback(uint32_t ID, void *data, uint32_t size) { - ECU_CAN_MessageHandler(&stateLump, GR_OLD_BUS_PRIMARY, + ECU_CAN_MessageHandler(&stateLump, GRCAN_BUS_PRIMARY, (0x000FFF00 & ID) >> 8, // TODO: Double check (0xFF00000 & ID) >> 20, data, size); } void CAN2_rx_callback(uint32_t ID, void *data, uint32_t size) { - ECU_CAN_MessageHandler(&stateLump, GR_OLD_BUS_DATA, (0x000FFF00 & ID) >> 8, (0xFF00000 & ID) >> 20, data, size); + ECU_CAN_MessageHandler(&stateLump, GRCAN_BUS_DATA, (0x000FFF00 & ID) >> 8, (0xFF00000 & ID) >> 20, data, size); } void CAN_Configure() @@ -413,6 +375,11 @@ int main(void) MX_FDCAN2_Init(); /* USER CODE BEGIN 2 */ + // Initialize DWT + CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; + DWT->CYCCNT = 0; + DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk; + // Initialize CAN CAN_Configure(); @@ -425,22 +392,34 @@ int main(void) /* Infinite loop */ /* USER CODE BEGIN WHILE */ + uint32_t elapsed_cycles, cycle_counter_accumulator = -1; while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ + if (cycle_counter_accumulator == 10) { + elapsed_cycles = DWT->CYCCNT; + LOGOMATIC("Cycles elapsed for 10 iterations of the main loop: %lu\n", elapsed_cycles); + GRCAN_ECU_PERFORMANCE_MSG performance_message = {.elapsed_cycles = elapsed_cycles}; + ECU_CAN_Send(GRCAN_BUS_DATA, TCM, MSG_ECU_PERFORMANCE, &performance_message, sizeof(GRCAN_ECU_PERFORMANCE_MSG)); + cycle_counter_accumulator = 0; + DWT->CYCCNT = 0; + } else { + cycle_counter_accumulator++; + } + static uint32_t nextPing; if (MillisecondsSinceBoot() >= nextPing) { pingAll(); if (nextPing != 0) { - if (getRTT(GR_BCU) == PINGTIMEOUT_VALUE) { + if (getRTT(BCU) == PINGTIMEOUT_VALUE) { LOGOMATIC("ERROR: BCU is not responding to pings!\n"); } - if (getRTT(GR_DASH_PANEL) == PINGTIMEOUT_VALUE) { + if (getRTT(Dash_Panel) == PINGTIMEOUT_VALUE) { LOGOMATIC("ERROR: Dash Panel is not responding to pings!\n"); } - if (getRTT(GR_CCU) != PINGTIMEOUT_VALUE) { + if (getRTT(CCU) != PINGTIMEOUT_VALUE) { // halt if CCU is connected return 1; } diff --git a/ECU/Test/Inc/main.h b/ECU/Test/Inc/main.h index 256e979a3..870afe0e1 100644 --- a/ECU/Test/Inc/main.h +++ b/ECU/Test/Inc/main.h @@ -1,2 +1,2 @@ -#include "GR_OLD_NODE_ID.h" -#define LOCAL_GR_ID GR_ECU +#include "GRCAN_NODE_ID.h" +#define LOCAL_GR_ID ECU