Reworked measurement ADC to use safety controller
This commit is contained in:
@@ -83,6 +83,7 @@ static volatile struct error_flag flags[] = {
|
||||
ERR_FLAG_ENTRY(ERR_FLAG_SAFETY_ADC, true),
|
||||
ERR_FLAG_ENTRY(ERR_FLAG_SYSTICK, true),
|
||||
ERR_FLAG_ENTRY(ERR_FLAG_WTCHDG_FIRED, true),
|
||||
ERR_FLAG_ENTRY(ERR_FLAG_UNCAL, false),
|
||||
};
|
||||
|
||||
static volatile struct timing_mon timings[] = {
|
||||
@@ -183,6 +184,11 @@ static void safety_controller_process_checks()
|
||||
}
|
||||
|
||||
int safety_controller_report_error(enum safety_flag flag)
|
||||
{
|
||||
return safety_controller_report_error_with_key(flag, 0x0UL);
|
||||
}
|
||||
|
||||
int safety_controller_report_error_with_key(enum safety_flag flag, uint32_t key)
|
||||
{
|
||||
uint32_t i;
|
||||
int ret = -1;
|
||||
@@ -190,6 +196,7 @@ int safety_controller_report_error(enum safety_flag flag)
|
||||
for (i = 0; i < COUNT_OF(flags); i++) {
|
||||
if (flags[i].flag & flag) {
|
||||
flags[i].error_state = true;
|
||||
flags[i].key = key;
|
||||
ret = 0;
|
||||
}
|
||||
}
|
||||
@@ -239,8 +246,14 @@ void safety_controller_report_analog_value(enum analog_value_monitor monitor, fl
|
||||
|
||||
void safety_controller_init()
|
||||
{
|
||||
|
||||
/* Init default flag states */
|
||||
safety_controller_report_error_with_key(ERR_FLAG_MEAS_ADC_OFF | ERR_FLAG_MEAS_ADC_UNSTABLE,
|
||||
MEAS_ADC_SAFETY_FLAG_KEY);
|
||||
|
||||
safety_adc_init();
|
||||
watchdog_setup(WATCHDOG_PRESCALER);
|
||||
|
||||
}
|
||||
|
||||
static void safety_controller_check_stack()
|
||||
@@ -400,7 +413,7 @@ int safety_controller_ack_flag_with_key(enum safety_flag flag, uint32_t key)
|
||||
|
||||
found_flag = find_error_flag(flag);
|
||||
if (found_flag) {
|
||||
if (!found_flag->persistent && found_flag->key == key) {
|
||||
if (!found_flag->persistent && (found_flag->key == key || !key)) {
|
||||
found_flag->error_state = false;
|
||||
ret = 0;
|
||||
} else {
|
||||
@@ -411,4 +424,19 @@ int safety_controller_ack_flag_with_key(enum safety_flag flag, uint32_t key)
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool safety_controller_get_flags_by_mask(enum safety_flag mask)
|
||||
{
|
||||
uint32_t i;
|
||||
bool ret = false;
|
||||
|
||||
for (i = 0; i < COUNT_OF(flags); i++) {
|
||||
if (flags[i].flag & mask) {
|
||||
ret = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/** @} */
|
||||
|
Reference in New Issue
Block a user