Program Listing for File feedback.c¶
↰ Return to documentation for file (mainboard/Src/feedback.c
)
#include "feedback.h"
#include "main.h"
feedback_t feedback;
void feedback_read(feedback_t fb_mask) {
//initialize the feedback value to 0 on the mask bits;
feedback &= (~fb_mask);
for (uint8_t i = 0; i < FEEDBACK_N; ++i) {
if ((1U << i) & fb_mask) {
HAL_GPIO_WritePin(MUX_A0_GPIO_Port, MUX_A0_Pin, (i & 0b00000001));
HAL_GPIO_WritePin(MUX_A1_GPIO_Port, MUX_A1_Pin, (i & 0b00000010));
HAL_GPIO_WritePin(MUX_A2_GPIO_Port, MUX_A2_Pin, (i & 0b00000100));
HAL_GPIO_WritePin(MUX_A3_GPIO_Port, MUX_A3_Pin, (i & 0b00001000));
feedback |= (HAL_GPIO_ReadPin(MUX_IN_GPIO_Port, MUX_IN_Pin) << i);
}
}
}
bool feedback_check(feedback_t fb_check_mask, feedback_t fb_value, error_id error_id) {
//remove not used bit with the mask and find the ones that differ with the xor
uint16_t difference = (fb_check_mask & feedback) ^ fb_value;
for (uint8_t i = 0; i < FEEDBACK_N; i++) {
if (fb_check_mask & (1U << i)) {
error_toggle_check(difference & (1 << i), error_id, i);
}
}
return feedback == fb_value;
}
// //this check is performed during ON state and from PRECHARGE TO ON
// bool pack_feedback_check_on() {
// uint16_t difference = pd_feedback ^ FEEDBACK_ON;
// for (uint8_t i = 0; i < FEEDBACK_N; i++) {
// error_toggle_check(difference & (1 << i), ERROR_FEEDBACK_HARD, i);
// }
// return pd_feedback == FEEDBACK_ON;
// }
// bool pack_feedback_check_charge() {
// uint16_t difference = pd_feedback ^ FEEDBACK_CHARGE;
// for (uint8_t i = 0; i < FEEDBACK_N; i++) {
// error_toggle_check(difference & (1 << i), ERROR_FEEDBACK_HARD, i);
// }
// return pd_feedback == FEEDBACK_CHARGE;
// }