nicht wirklich schönere Fixes für FSN
This commit is contained in:
@ -6,7 +6,6 @@
|
|||||||
#include "can-halal.h"
|
#include "can-halal.h"
|
||||||
|
|
||||||
extern int can_ams_last_tick;
|
extern int can_ams_last_tick;
|
||||||
extern TSState request_state;
|
|
||||||
|
|
||||||
HAL_StatusTypeDef can_init(FDCAN_HandleTypeDef* handle) {
|
HAL_StatusTypeDef can_init(FDCAN_HandleTypeDef* handle) {
|
||||||
TRY(ftcan_init(handle));
|
TRY(ftcan_init(handle));
|
||||||
@ -18,9 +17,9 @@ HAL_StatusTypeDef can_init(FDCAN_HandleTypeDef* handle) {
|
|||||||
|
|
||||||
HAL_StatusTypeDef can_update_state(){
|
HAL_StatusTypeDef can_update_state(){
|
||||||
uint8_t data;
|
uint8_t data;
|
||||||
if (request_state == TS_ACTIVE){
|
if (ts_state.target_state == TS_ACTIVE){
|
||||||
data = 0x01;
|
data = 0x01;
|
||||||
} else if (request_state == TS_INACTIVE) {
|
} else if (ts_state.target_state == TS_INACTIVE) {
|
||||||
data = 0x00;
|
data = 0x00;
|
||||||
} else {
|
} else {
|
||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
@ -38,6 +37,7 @@ void ftcan_msg_received_cb(uint16_t id, size_t len, const uint8_t* data) {
|
|||||||
case CAN_ID_AMS_SIGNALS:
|
case CAN_ID_AMS_SIGNALS:
|
||||||
break;
|
break;
|
||||||
case CAN_ID_AMS_ERROR:
|
case CAN_ID_AMS_ERROR:
|
||||||
|
ts_state.target_state = TS_INACTIVE;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -149,6 +149,7 @@ int main(void)
|
|||||||
/* USER CODE BEGIN 3 */
|
/* USER CODE BEGIN 3 */
|
||||||
if (HAL_GetTick() - can_ams_last_tick > AMS_TIMEOUT) {
|
if (HAL_GetTick() - can_ams_last_tick > AMS_TIMEOUT) {
|
||||||
error_led_init();
|
error_led_init();
|
||||||
|
change_ts_state(TS_INACTIVE);
|
||||||
led_blink(&htim3, COLOR_ERROR, 0);
|
led_blink(&htim3, COLOR_ERROR, 0);
|
||||||
} else {
|
} else {
|
||||||
led_blink(&htim3, COLOR_HEARTBEAT, 1000);
|
led_blink(&htim3, COLOR_HEARTBEAT, 1000);
|
||||||
@ -157,11 +158,14 @@ int main(void)
|
|||||||
// SHOW_STATE(check_sdc_state());
|
// SHOW_STATE(check_sdc_state());
|
||||||
// SHOW_STATE(can_update_state());
|
// SHOW_STATE(can_update_state());
|
||||||
TSON = HAL_GPIO_ReadPin(TS_ON_GPIO_Port, TS_ON_Pin);
|
TSON = HAL_GPIO_ReadPin(TS_ON_GPIO_Port, TS_ON_Pin);
|
||||||
if (TSON == 1){
|
uint8_t sdc_closed = HAL_GPIO_ReadPin(SDC_ON_GPIO_Port, SDC_ON_Pin);
|
||||||
|
if (TSON == 1 && sdc_closed) {
|
||||||
change_ts_state(TS_ACTIVE);
|
change_ts_state(TS_ACTIVE);
|
||||||
}
|
}
|
||||||
check_sdc_state();
|
check_sdc_state();
|
||||||
can_update_state();
|
can_update_state();
|
||||||
|
|
||||||
|
HAL_Delay(100);
|
||||||
}
|
}
|
||||||
/* USER CODE END 3 */
|
/* USER CODE END 3 */
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,10 +2,9 @@
|
|||||||
#include "can.h"
|
#include "can.h"
|
||||||
#include "scs_sdc.h"
|
#include "scs_sdc.h"
|
||||||
|
|
||||||
TSStateHandle ts_state;
|
TSStateHandle ts_state = {.current_state = TS_INACTIVE, .target_state = TS_INACTIVE};
|
||||||
IMDData imd_data;
|
IMDData imd_data;
|
||||||
uint8_t led_state;
|
uint8_t led_state;
|
||||||
TSState request_state = TS_INACTIVE;
|
|
||||||
|
|
||||||
void error_led_init() {
|
void error_led_init() {
|
||||||
HAL_GPIO_WritePin(AMS_ERROR_GPIO_Port, AMS_ERROR_Pin, GPIO_PIN_SET);
|
HAL_GPIO_WritePin(AMS_ERROR_GPIO_Port, AMS_ERROR_Pin, GPIO_PIN_SET);
|
||||||
@ -21,26 +20,30 @@ void ts_handle_ams_status(const uint8_t* data) {
|
|||||||
imd_data.ok = data[6] & 0b10000000;
|
imd_data.ok = data[6] & 0b10000000;
|
||||||
led_state = data[7];
|
led_state = data[7];
|
||||||
|
|
||||||
if ((led_state | 0b00000010) == 0b10) {
|
if ((led_state & 0b00000010) == 0b10) {
|
||||||
|
HAL_GPIO_WritePin(IMD_ERROR_GPIO_Port, IMD_ERROR_Pin, GPIO_PIN_SET);
|
||||||
|
} else {
|
||||||
|
HAL_GPIO_WritePin(IMD_ERROR_GPIO_Port, IMD_ERROR_Pin, GPIO_PIN_RESET);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((led_state & 0b00000100) == 0b100) {
|
||||||
HAL_GPIO_WritePin(AMS_ERROR_GPIO_Port, AMS_ERROR_Pin, GPIO_PIN_SET);
|
HAL_GPIO_WritePin(AMS_ERROR_GPIO_Port, AMS_ERROR_Pin, GPIO_PIN_SET);
|
||||||
} else {
|
} else {
|
||||||
HAL_GPIO_WritePin(AMS_ERROR_GPIO_Port, AMS_ERROR_Pin, GPIO_PIN_RESET);
|
HAL_GPIO_WritePin(AMS_ERROR_GPIO_Port, AMS_ERROR_Pin, GPIO_PIN_RESET);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((led_state | 0b00000100) == 0b100) {
|
if (ts_state.current_state == TS_ERROR || ts_state.current_state == TS_DISCHARGE || ((led_state & 0b110) > 0)) {
|
||||||
HAL_GPIO_WritePin(IMD_ERROR_GPIO_Port, IMD_ERROR_Pin, GPIO_PIN_SET);
|
ts_state.target_state = TS_INACTIVE;
|
||||||
} else {
|
|
||||||
HAL_GPIO_WritePin(IMD_ERROR_GPIO_Port, IMD_ERROR_Pin, GPIO_PIN_RESET);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HAL_StatusTypeDef change_ts_state(TSState state) {
|
HAL_StatusTypeDef change_ts_state(TSState state) {
|
||||||
if (state == TS_ACTIVE) {
|
if (state == TS_ACTIVE) {
|
||||||
request_state = TS_ACTIVE;
|
ts_state.target_state = TS_ACTIVE;
|
||||||
|
|
||||||
return HAL_OK;
|
return HAL_OK;
|
||||||
} else if (state == TS_INACTIVE){
|
} else if (state == TS_INACTIVE){
|
||||||
request_state = TS_INACTIVE;
|
ts_state.target_state = TS_INACTIVE;
|
||||||
|
|
||||||
return HAL_OK;
|
return HAL_OK;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user