This commit is contained in:
Kilian Bracher 2024-05-24 19:06:34 +02:00
parent 61e455dfcd
commit b87a0ca55c
3 changed files with 36 additions and 55 deletions

View File

@ -26,7 +26,7 @@ typedef enum { // 7 states -> 3 bit. valid transitions: (all could transition
STATE_ERROR, // ERROR -> INACTIVE, DISCHARGE, ERROR
} State;
typedef struct { // 13 errors -> 4 bit
typedef struct {
uint16_t bms_timeout : 1;
uint16_t bms_checksum_fail : 1;
uint16_t bms_overtemp : 1;
@ -58,7 +58,6 @@ extern StateHandle state;
void sm_init();
void sm_update();
int sm_get_state_code();
State sm_update_inactive();
State sm_update_precharge();
@ -71,7 +70,7 @@ State sm_update_error();
typedef enum { RELAY_MAIN, RELAY_PRECHARGE } Relay;
void sm_set_relay_positions(State state);
void sm_set_relay(Relay relay, bool closed);
void sm_check_precharge_discharge(int *is_closed, int should_close);
void sm_check_precharge_discharge(bool *is_closed, bool should_close);
void sm_check_errors();

View File

@ -9,6 +9,7 @@
#include "AMS_HighLevel.h"
//#include "TMP1075.h"
#include "can-halal.h"
#include "state_machine.h"
void can_init(CAN_HandleTypeDef* hcan) { ftcan_init(hcan); }
@ -20,7 +21,7 @@ with format of:
*/
void can_handle_send_status() {
static uint8_t data[8];
//data[0] = state. (sm_get_state_code() << 5); //save 5 bit since codes are from 0-6
//ftcan_transmit(id, data, sizeof(data));
static uint8_t data[8] = {};
data[0] = (state.current_state << 5); //save 5 bit since codes are from 0-6
ftcan_transmit(CAN_ID_OUT, data, sizeof(data));
}

View File

@ -22,7 +22,7 @@ void sm_update(){
switch (state.current_state) {
case STATE_INACTIVE:
state.current_state = sm_update_inactive(); // moniter only
state.current_state = sm_update_inactive(); // monitor only
break;
case STATE_PRECHARGE:
state.current_state = sm_update_precharge(); // set PRECHARGE and turn on cooling at 50% or such
@ -48,25 +48,6 @@ void sm_update(){
//status_led_state(state.current_state, (ErrorKind) state.error_type);
}
int sm_get_state_code(){
switch (state.current_state) {
case STATE_INACTIVE:
return 0;
case STATE_PRECHARGE:
return 1;
case STATE_READY:
return 2;
case STATE_ACTIVE:
return 3;
case STATE_DISCHARGE:
return 4;
case STATE_CHARGING:
return 5;
default: // either STATE_ERROR or something went severly wrong
return 6;
}
}
State sm_update_inactive(){
switch (state.target_state) {
case STATE_PRECHARGE:
@ -194,7 +175,7 @@ void sm_set_relay(Relay relay, bool closed){
}
void sm_check_precharge_discharge(int *is_closed, int should_close){}
void sm_check_precharge_discharge(bool *is_closed, bool should_close){}
// compare RELAY_BATT_SIDE and RELAY_ESC_SIDE
// if (state.current_state == STATE_PRECHARGE && (RELAY_ESC_SIDE < RELAY_BAT_SIDE)) //-> don't switch from PRECHARGE to READY
// if (state.current_state == STATE_DISCHARGE && (RELAY_ESC_SIDE > 12V)) -> don't switch from DISCHARGE to INACTIVE