952 lines
29 KiB
C
952 lines
29 KiB
C
#include "ut_fault.h"
|
|
|
|
#include "..\..\src\hw\board\utils\faults.h"
|
|
|
|
static int ut_fault_process(fault_t* fault, uint8_t w_trig, uint8_t f_trig, fault_cfg_t* cfg, uint8_t exp_out, fault_t* exp_out_fault, fault_cfg_t* exp_out_cfg)
|
|
{
|
|
printf("W-Trig:%d F-trig:%d \n", w_trig, f_trig);
|
|
printf("Severity:%d W-time:%d F-time:%d \n", fault->severity, fault->w_time, fault->f_time);
|
|
printf("Delay:%d WtoF:%d \n", cfg->delay, cfg->wtof);
|
|
|
|
uint8_t out = fault_process(fault, w_trig, f_trig, cfg);
|
|
|
|
printf("Output:%d Expected:%d\n", out, exp_out);
|
|
printf(" Output: Severity:%d W-time:%d F-time:%d \n", fault->severity, fault->w_time, fault->f_time);
|
|
printf("Expected: Severity:%d W-time:%d F-time:%d \n", exp_out_fault->severity, exp_out_fault->w_time, exp_out_fault->f_time);
|
|
printf("Delay:%d WtoF:%d \n", cfg->delay, cfg->wtof);
|
|
|
|
if((out==exp_out)&&(fault->severity==exp_out_fault->severity)&&(fault->w_time==exp_out_fault->w_time)&&(fault->f_time==exp_out_fault->f_time)&&(cfg->delay==exp_out_cfg->delay)&&(cfg->wtof==exp_out_cfg->wtof))
|
|
{
|
|
printf("PASS\n\n");
|
|
return 1;
|
|
}
|
|
else
|
|
{
|
|
printf("FAIL\n\n");
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
int ut_fault_process_test(void)
|
|
{
|
|
printf("******************************************************\n");
|
|
printf("uint8_t fault_process(fault_t* fault, uint8_t w_trig, uint8_t f_trig, fault_cfg_t* cfg)\n");
|
|
|
|
int test_res;
|
|
int pass = 1;
|
|
|
|
fault_t fault;
|
|
uint8_t w_trig;
|
|
uint8_t f_trig;
|
|
fault_cfg_t cfg;
|
|
|
|
uint8_t exp_out;
|
|
fault_t exp_out_fault;
|
|
fault_cfg_t exp_out_cfg;
|
|
|
|
// NORMAL NO FAULT CONDITION *************************************************************************
|
|
// No change test, start form OK
|
|
fault.severity = FAULT_LVL_OK;
|
|
fault.w_time = 0;
|
|
fault.f_time = 0;
|
|
w_trig = 0;
|
|
f_trig = 0;
|
|
cfg.delay = 0;
|
|
cfg.wtof = 0;
|
|
exp_out = 0;
|
|
exp_out_fault.severity = FAULT_LVL_OK;
|
|
exp_out_fault.w_time = 0;
|
|
exp_out_fault.f_time = 0;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// STARTING CONDITIONS *************************************************************************
|
|
// Warning trigger test, start form OK
|
|
fault.severity = FAULT_LVL_OK;
|
|
fault.w_time = 0;
|
|
fault.f_time = 0;
|
|
w_trig = 1;
|
|
f_trig = 0;
|
|
cfg.delay = 0;
|
|
cfg.wtof = 0;
|
|
exp_out = 0;
|
|
exp_out_fault.severity = FAULT_LVL_WARNING;
|
|
exp_out_fault.w_time = 0;
|
|
exp_out_fault.f_time = 0;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Fault trigger test, start form OK
|
|
fault.severity = FAULT_LVL_OK;
|
|
fault.w_time = 0;
|
|
fault.f_time = 0;
|
|
w_trig = 0;
|
|
f_trig = 1;
|
|
cfg.delay = 0;
|
|
cfg.wtof = 0;
|
|
exp_out = 1;
|
|
exp_out_fault.severity = FAULT_LVL_FAULT;
|
|
exp_out_fault.w_time = 0;
|
|
exp_out_fault.f_time = 0;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Warning and Fault trigger test, start form OK
|
|
fault.severity = FAULT_LVL_OK;
|
|
fault.w_time = 0;
|
|
fault.f_time = 0;
|
|
w_trig = 1;
|
|
f_trig = 1;
|
|
cfg.delay = 0;
|
|
cfg.wtof = 0;
|
|
exp_out = 1;
|
|
exp_out_fault.severity = FAULT_LVL_FAULT;
|
|
exp_out_fault.w_time = 0;
|
|
exp_out_fault.f_time = 0;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Wrong start severity WARNING, with no triggers
|
|
fault.severity = FAULT_LVL_WARNING;
|
|
fault.w_time = 0;
|
|
fault.f_time = 0;
|
|
w_trig = 0;
|
|
f_trig = 0;
|
|
cfg.delay = 0;
|
|
cfg.wtof = 0;
|
|
exp_out = 0;
|
|
exp_out_fault.severity = FAULT_LVL_OK;
|
|
exp_out_fault.w_time = 0;
|
|
exp_out_fault.f_time = 0;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Wrong start severity FAULT, with no triggers
|
|
fault.severity = FAULT_LVL_FAULT;
|
|
fault.w_time = 0;
|
|
fault.f_time = 0;
|
|
w_trig = 0;
|
|
f_trig = 0;
|
|
cfg.delay = 0;
|
|
cfg.wtof = 0;
|
|
exp_out = 0;
|
|
exp_out_fault.severity = FAULT_LVL_OK;
|
|
exp_out_fault.w_time = 0;
|
|
exp_out_fault.f_time = 0;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Wrong start times, with no triggers
|
|
fault.severity = FAULT_LVL_OK;
|
|
fault.w_time = 78;
|
|
fault.f_time = 56;
|
|
w_trig = 0;
|
|
f_trig = 0;
|
|
cfg.delay = 0;
|
|
cfg.wtof = 0;
|
|
exp_out = 0;
|
|
exp_out_fault.severity = FAULT_LVL_OK;
|
|
exp_out_fault.w_time = 0;
|
|
exp_out_fault.f_time = 0;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
|
|
// TIME INCREASE TESTS - SECOND ITERATION WITH TRIGGER ACTIVE *************************************************************************
|
|
// Warning time increase with continuing warning condition
|
|
fault.severity = FAULT_LVL_WARNING;
|
|
fault.w_time = 45;
|
|
fault.f_time = 0;
|
|
w_trig = 1;
|
|
f_trig = 0;
|
|
cfg.delay = 0;
|
|
cfg.wtof = 0;
|
|
exp_out = 0;
|
|
exp_out_fault.severity = FAULT_LVL_WARNING;
|
|
exp_out_fault.w_time = 46;
|
|
exp_out_fault.f_time = 0;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Fault and warning time increase with continuing fault only condition
|
|
fault.severity = FAULT_LVL_FAULT;
|
|
fault.w_time = 78;
|
|
fault.f_time = 23;
|
|
w_trig = 0;
|
|
f_trig = 1;
|
|
cfg.delay = 0;
|
|
cfg.wtof = 0;
|
|
exp_out = 1;
|
|
exp_out_fault.severity = FAULT_LVL_FAULT;
|
|
exp_out_fault.w_time = 79;
|
|
exp_out_fault.f_time = 24;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Fault and warning time increase with continuing both triggers condition
|
|
fault.severity = FAULT_LVL_FAULT;
|
|
fault.w_time = 57;
|
|
fault.f_time = 12;
|
|
w_trig = 1;
|
|
f_trig = 1;
|
|
cfg.delay = 0;
|
|
cfg.wtof = 0;
|
|
exp_out = 1;
|
|
exp_out_fault.severity = FAULT_LVL_FAULT;
|
|
exp_out_fault.w_time = 58;
|
|
exp_out_fault.f_time = 13;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Time increase and transition to fault with both triggers
|
|
fault.severity = FAULT_LVL_WARNING;
|
|
fault.w_time = 0;
|
|
fault.f_time = 0;
|
|
w_trig = 1;
|
|
f_trig = 1;
|
|
cfg.delay = 0;
|
|
cfg.wtof = 0;
|
|
exp_out = 1;
|
|
exp_out_fault.severity = FAULT_LVL_FAULT;
|
|
exp_out_fault.w_time = 1;
|
|
exp_out_fault.f_time = 1;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Warning time increase and transition to fault with only fault trigger
|
|
fault.severity = FAULT_LVL_WARNING;
|
|
fault.w_time = 0;
|
|
fault.f_time = 0;
|
|
w_trig = 0;
|
|
f_trig = 1;
|
|
cfg.delay = 0;
|
|
cfg.wtof = 0;
|
|
exp_out = 1;
|
|
exp_out_fault.severity = FAULT_LVL_FAULT;
|
|
exp_out_fault.w_time = 1;
|
|
exp_out_fault.f_time = 1;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Time saturation
|
|
fault.severity = FAULT_LVL_FAULT;
|
|
fault.w_time = 65535;
|
|
fault.f_time = 65535;
|
|
w_trig = 1;
|
|
f_trig = 1;
|
|
cfg.delay = 0;
|
|
cfg.wtof = 0;
|
|
exp_out = 1;
|
|
exp_out_fault.severity = FAULT_LVL_FAULT;
|
|
exp_out_fault.w_time = 65535;
|
|
exp_out_fault.f_time = 65535;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Fallback to warning and time increase
|
|
fault.severity = FAULT_LVL_FAULT;
|
|
fault.w_time = 784;
|
|
fault.f_time = 457;
|
|
w_trig = 1;
|
|
f_trig = 0;
|
|
cfg.delay = 0;
|
|
cfg.wtof = 0;
|
|
exp_out = 0;
|
|
exp_out_fault.severity = FAULT_LVL_WARNING;
|
|
exp_out_fault.w_time = 785;
|
|
exp_out_fault.f_time = 0;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Fallback to OK and time reset from fault
|
|
fault.severity = FAULT_LVL_FAULT;
|
|
fault.w_time = 784;
|
|
fault.f_time = 457;
|
|
w_trig = 0;
|
|
f_trig = 0;
|
|
cfg.delay = 0;
|
|
cfg.wtof = 0;
|
|
exp_out = 0;
|
|
exp_out_fault.severity = FAULT_LVL_OK;
|
|
exp_out_fault.w_time = 0;
|
|
exp_out_fault.f_time = 0;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Fallback to OK and time reset from warning
|
|
fault.severity = FAULT_LVL_WARNING;
|
|
fault.w_time = 479;
|
|
fault.f_time = 0;
|
|
w_trig = 0;
|
|
f_trig = 0;
|
|
cfg.delay = 0;
|
|
cfg.wtof = 0;
|
|
exp_out = 0;
|
|
exp_out_fault.severity = FAULT_LVL_OK;
|
|
exp_out_fault.w_time = 0;
|
|
exp_out_fault.f_time = 0;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// FAULT DELAY TESTS *************************************************************************
|
|
// Not transition to fault
|
|
fault.severity = FAULT_LVL_OK;
|
|
fault.w_time = 0;
|
|
fault.f_time = 0;
|
|
w_trig = 1;
|
|
f_trig = 1;
|
|
cfg.delay = 100;
|
|
cfg.wtof = 0;
|
|
exp_out = 0;
|
|
exp_out_fault.severity = FAULT_LVL_WARNING;
|
|
exp_out_fault.w_time = 0;
|
|
exp_out_fault.f_time = 0;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Not transition to fault second time
|
|
fault.severity = FAULT_LVL_WARNING;
|
|
fault.w_time = 0;
|
|
fault.f_time = 0;
|
|
w_trig = 1;
|
|
f_trig = 1;
|
|
cfg.delay = 100;
|
|
cfg.wtof = 0;
|
|
exp_out = 0;
|
|
exp_out_fault.severity = FAULT_LVL_WARNING;
|
|
exp_out_fault.w_time = 1;
|
|
exp_out_fault.f_time = 1;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Not transition to fault before limit
|
|
fault.severity = FAULT_LVL_WARNING;
|
|
fault.w_time = 128;
|
|
fault.f_time = 98;
|
|
w_trig = 1;
|
|
f_trig = 1;
|
|
cfg.delay = 100;
|
|
cfg.wtof = 0;
|
|
exp_out = 0;
|
|
exp_out_fault.severity = FAULT_LVL_WARNING;
|
|
exp_out_fault.w_time = 129;
|
|
exp_out_fault.f_time = 99;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Transition to fault at limit
|
|
fault.severity = FAULT_LVL_WARNING;
|
|
fault.w_time = 358;
|
|
fault.f_time = 99;
|
|
w_trig = 1;
|
|
f_trig = 1;
|
|
cfg.delay = 100;
|
|
cfg.wtof = 0;
|
|
exp_out = 1;
|
|
exp_out_fault.severity = FAULT_LVL_FAULT;
|
|
exp_out_fault.w_time = 359;
|
|
exp_out_fault.f_time = 100;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Transition to fault after limit
|
|
fault.severity = FAULT_LVL_WARNING;
|
|
fault.w_time = 786;
|
|
fault.f_time = 100;
|
|
w_trig = 1;
|
|
f_trig = 1;
|
|
cfg.delay = 100;
|
|
cfg.wtof = 0;
|
|
exp_out = 1;
|
|
exp_out_fault.severity = FAULT_LVL_FAULT;
|
|
exp_out_fault.w_time = 787;
|
|
exp_out_fault.f_time = 101;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Continued fault condition
|
|
fault.severity = FAULT_LVL_FAULT;
|
|
fault.w_time = 101;
|
|
fault.f_time = 101;
|
|
w_trig = 1;
|
|
f_trig = 1;
|
|
cfg.delay = 100;
|
|
cfg.wtof = 0;
|
|
exp_out = 1;
|
|
exp_out_fault.severity = FAULT_LVL_FAULT;
|
|
exp_out_fault.w_time = 102;
|
|
exp_out_fault.f_time = 102;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Fallback to warning
|
|
fault.severity = FAULT_LVL_FAULT;
|
|
fault.w_time = 101;
|
|
fault.f_time = 101;
|
|
w_trig = 1;
|
|
f_trig = 0;
|
|
cfg.delay = 100;
|
|
cfg.wtof = 0;
|
|
exp_out = 0;
|
|
exp_out_fault.severity = FAULT_LVL_WARNING;
|
|
exp_out_fault.w_time = 102;
|
|
exp_out_fault.f_time = 0;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Fallback to OK
|
|
fault.severity = FAULT_LVL_FAULT;
|
|
fault.w_time = 101;
|
|
fault.f_time = 101;
|
|
w_trig = 0;
|
|
f_trig = 0;
|
|
cfg.delay = 100;
|
|
cfg.wtof = 0;
|
|
exp_out = 0;
|
|
exp_out_fault.severity = FAULT_LVL_OK;
|
|
exp_out_fault.w_time = 0;
|
|
exp_out_fault.f_time = 0;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Allready was fault condition, with lower time - fixes to correct state
|
|
fault.severity = FAULT_LVL_FAULT;
|
|
fault.w_time = 45;
|
|
fault.f_time = 45;
|
|
w_trig = 1;
|
|
f_trig = 1;
|
|
cfg.delay = 100;
|
|
cfg.wtof = 0;
|
|
exp_out = 0;
|
|
exp_out_fault.severity = FAULT_LVL_WARNING;
|
|
exp_out_fault.w_time = 46;
|
|
exp_out_fault.f_time = 46;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// WARNING TO FAULT TRANSITION TESTS *************************************************************************
|
|
// Not transition to fault
|
|
fault.severity = FAULT_LVL_OK;
|
|
fault.w_time = 0;
|
|
fault.f_time = 0;
|
|
w_trig = 1;
|
|
f_trig = 0;
|
|
cfg.delay = 0;
|
|
cfg.wtof = 200;
|
|
exp_out = 0;
|
|
exp_out_fault.severity = FAULT_LVL_WARNING;
|
|
exp_out_fault.w_time = 0;
|
|
exp_out_fault.f_time = 0;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Not transition to fault
|
|
fault.severity = FAULT_LVL_WARNING;
|
|
fault.w_time = 0;
|
|
fault.f_time = 0;
|
|
w_trig = 1;
|
|
f_trig = 0;
|
|
cfg.delay = 0;
|
|
cfg.wtof = 200;
|
|
exp_out = 0;
|
|
exp_out_fault.severity = FAULT_LVL_WARNING;
|
|
exp_out_fault.w_time = 1;
|
|
exp_out_fault.f_time = 0;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Not transition to fault before limit
|
|
fault.severity = FAULT_LVL_WARNING;
|
|
fault.w_time = 198;
|
|
fault.f_time = 0;
|
|
w_trig = 1;
|
|
f_trig = 0;
|
|
cfg.delay = 0;
|
|
cfg.wtof = 200;
|
|
exp_out = 0;
|
|
exp_out_fault.severity = FAULT_LVL_WARNING;
|
|
exp_out_fault.w_time = 199;
|
|
exp_out_fault.f_time = 0;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Not Transition to fault at limit
|
|
fault.severity = FAULT_LVL_WARNING;
|
|
fault.w_time = 199;
|
|
fault.f_time = 0;
|
|
w_trig = 1;
|
|
f_trig = 0;
|
|
cfg.delay = 0;
|
|
cfg.wtof = 200;
|
|
exp_out = 0;
|
|
exp_out_fault.severity = FAULT_LVL_WARNING;
|
|
exp_out_fault.w_time = 200;
|
|
exp_out_fault.f_time = 0;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Transition to fault after limit
|
|
fault.severity = FAULT_LVL_WARNING;
|
|
fault.w_time = 200;
|
|
fault.f_time = 0;
|
|
w_trig = 1;
|
|
f_trig = 0;
|
|
cfg.delay = 0;
|
|
cfg.wtof = 200;
|
|
exp_out = 1;
|
|
exp_out_fault.severity = FAULT_LVL_FAULT;
|
|
exp_out_fault.w_time = 201;
|
|
exp_out_fault.f_time = 1;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Continued fault
|
|
fault.severity = FAULT_LVL_FAULT;
|
|
fault.w_time = 201;
|
|
fault.f_time = 1;
|
|
w_trig = 1;
|
|
f_trig = 0;
|
|
cfg.delay = 0;
|
|
cfg.wtof = 200;
|
|
exp_out = 1;
|
|
exp_out_fault.severity = FAULT_LVL_FAULT;
|
|
exp_out_fault.w_time = 202;
|
|
exp_out_fault.f_time = 2;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Fallback to ok
|
|
fault.severity = FAULT_LVL_FAULT;
|
|
fault.w_time = 247;
|
|
fault.f_time = 0;
|
|
w_trig = 0;
|
|
f_trig = 0;
|
|
cfg.delay = 0;
|
|
cfg.wtof = 200;
|
|
exp_out = 0;
|
|
exp_out_fault.severity = FAULT_LVL_OK;
|
|
exp_out_fault.w_time = 0;
|
|
exp_out_fault.f_time = 0;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// WARNING TO FAULT TRANSITION WITH FAULT DELAY TESTS *************************************************************************
|
|
// Not transition to fault
|
|
fault.severity = FAULT_LVL_OK;
|
|
fault.w_time = 0;
|
|
fault.f_time = 0;
|
|
w_trig = 1;
|
|
f_trig = 0;
|
|
cfg.delay = 50;
|
|
cfg.wtof = 200;
|
|
exp_out = 0;
|
|
exp_out_fault.severity = FAULT_LVL_WARNING;
|
|
exp_out_fault.w_time = 0;
|
|
exp_out_fault.f_time = 0;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Not transition to fault
|
|
fault.severity = FAULT_LVL_OK;
|
|
fault.w_time = 0;
|
|
fault.f_time = 0;
|
|
w_trig = 1;
|
|
f_trig = 1;
|
|
cfg.delay = 50;
|
|
cfg.wtof = 200;
|
|
exp_out = 0;
|
|
exp_out_fault.severity = FAULT_LVL_WARNING;
|
|
exp_out_fault.w_time = 0;
|
|
exp_out_fault.f_time = 0;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
fault.severity = FAULT_LVL_OK;
|
|
fault.w_time = 0;
|
|
fault.f_time = 0;
|
|
w_trig = 0;
|
|
f_trig = 1;
|
|
cfg.delay = 50;
|
|
cfg.wtof = 200;
|
|
exp_out = 0;
|
|
exp_out_fault.severity = FAULT_LVL_WARNING;
|
|
exp_out_fault.w_time = 0;
|
|
exp_out_fault.f_time = 0;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Transition to fault at delay
|
|
fault.severity = FAULT_LVL_WARNING;
|
|
fault.w_time = 49;
|
|
fault.f_time = 49;
|
|
w_trig = 1;
|
|
f_trig = 1;
|
|
cfg.delay = 50;
|
|
cfg.wtof = 200;
|
|
exp_out = 1;
|
|
exp_out_fault.severity = FAULT_LVL_FAULT;
|
|
exp_out_fault.w_time = 50;
|
|
exp_out_fault.f_time = 50;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// No Transition to fault at wtof
|
|
fault.severity = FAULT_LVL_WARNING;
|
|
fault.w_time = 200;
|
|
fault.f_time = 0;
|
|
w_trig = 1;
|
|
f_trig = 0;
|
|
cfg.delay = 50;
|
|
cfg.wtof = 200;
|
|
exp_out = 0;
|
|
exp_out_fault.severity = FAULT_LVL_WARNING;
|
|
exp_out_fault.w_time = 201;
|
|
exp_out_fault.f_time = 1;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// No Transition to fault before wtof + delay
|
|
fault.severity = FAULT_LVL_WARNING;
|
|
fault.w_time = 248;
|
|
fault.f_time = 48;
|
|
w_trig = 1;
|
|
f_trig = 0;
|
|
cfg.delay = 50;
|
|
cfg.wtof = 200;
|
|
exp_out = 0;
|
|
exp_out_fault.severity = FAULT_LVL_WARNING;
|
|
exp_out_fault.w_time = 249;
|
|
exp_out_fault.f_time = 49;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Transition to fault before wtof + delay
|
|
fault.severity = FAULT_LVL_WARNING;
|
|
fault.w_time = 249;
|
|
fault.f_time = 49;
|
|
w_trig = 1;
|
|
f_trig = 0;
|
|
cfg.delay = 50;
|
|
cfg.wtof = 200;
|
|
exp_out = 1;
|
|
exp_out_fault.severity = FAULT_LVL_FAULT;
|
|
exp_out_fault.w_time = 250;
|
|
exp_out_fault.f_time = 50;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Continued wtof fault condition
|
|
fault.severity = FAULT_LVL_FAULT;
|
|
fault.w_time = 250;
|
|
fault.f_time = 50;
|
|
w_trig = 1;
|
|
f_trig = 0;
|
|
cfg.delay = 50;
|
|
cfg.wtof = 200;
|
|
exp_out = 1;
|
|
exp_out_fault.severity = FAULT_LVL_FAULT;
|
|
exp_out_fault.w_time = 251;
|
|
exp_out_fault.f_time = 51;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
// Continued wtof fault condition, without warning trigger
|
|
fault.severity = FAULT_LVL_FAULT;
|
|
fault.w_time = 350;
|
|
fault.f_time = 150;
|
|
w_trig = 0;
|
|
f_trig = 1;
|
|
cfg.delay = 50;
|
|
cfg.wtof = 200;
|
|
exp_out = 1;
|
|
exp_out_fault.severity = FAULT_LVL_FAULT;
|
|
exp_out_fault.w_time = 351;
|
|
exp_out_fault.f_time = 151;
|
|
exp_out_cfg.delay = cfg.delay;
|
|
exp_out_cfg.wtof = cfg.wtof;
|
|
test_res = ut_fault_process(&fault, w_trig, f_trig, &cfg, exp_out, &exp_out_fault, &exp_out_cfg);
|
|
if(!test_res) pass = 0;
|
|
|
|
return pass;
|
|
}
|
|
|
|
static int ut_fault_is_active(fault_t* fault, uint8_t exp_out, fault_t* exp_out_fault)
|
|
{
|
|
printf("Severity:%d W-time:%d F-time:%d \n", fault->severity, fault->w_time, fault->f_time);
|
|
|
|
uint8_t out = fault_is_active(fault);
|
|
|
|
printf("Output:%d Expected:%d\n", out, exp_out);
|
|
printf(" Output: Severity:%d W-time:%d F-time:%d \n", fault->severity, fault->w_time, fault->f_time);
|
|
printf("Expected: Severity:%d W-time:%d F-time:%d \n", exp_out_fault->severity, exp_out_fault->w_time, exp_out_fault->f_time);
|
|
|
|
if((out==exp_out)&&(fault->severity==exp_out_fault->severity)&&(fault->w_time==exp_out_fault->w_time)&&(fault->f_time==exp_out_fault->f_time))
|
|
{
|
|
printf("PASS\n\n");
|
|
return 1;
|
|
}
|
|
else
|
|
{
|
|
printf("FAIL\n\n");
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
int ut_fault_is_active_test(void)
|
|
{
|
|
printf("******************************************************\n");
|
|
printf("uint8_t fault_is_active(fault_t* fault)\n");
|
|
|
|
int test_res;
|
|
int pass = 1;
|
|
|
|
fault_t fault;
|
|
|
|
uint8_t exp_out;
|
|
fault_t exp_out_fault;
|
|
|
|
fault.severity = FAULT_LVL_OK;
|
|
fault.w_time = 500;
|
|
fault.f_time = 300;
|
|
exp_out = 0;
|
|
exp_out_fault.severity = fault.severity;
|
|
exp_out_fault.w_time = fault.w_time;
|
|
exp_out_fault.f_time = fault.f_time;
|
|
test_res = ut_fault_is_active(&fault, exp_out, &exp_out_fault);
|
|
if(!test_res) pass = 0;
|
|
|
|
fault.severity = FAULT_LVL_WARNING;
|
|
fault.w_time = 500;
|
|
fault.f_time = 300;
|
|
exp_out = 0;
|
|
exp_out_fault.severity = fault.severity;
|
|
exp_out_fault.w_time = fault.w_time;
|
|
exp_out_fault.f_time = fault.f_time;
|
|
test_res = ut_fault_is_active(&fault, exp_out, &exp_out_fault);
|
|
if(!test_res) pass = 0;
|
|
|
|
fault.severity = FAULT_LVL_FAULT;
|
|
fault.w_time = 500;
|
|
fault.f_time = 300;
|
|
exp_out = 1;
|
|
exp_out_fault.severity = fault.severity;
|
|
exp_out_fault.w_time = fault.w_time;
|
|
exp_out_fault.f_time = fault.f_time;
|
|
test_res = ut_fault_is_active(&fault, exp_out, &exp_out_fault);
|
|
if(!test_res) pass = 0;
|
|
|
|
return pass;
|
|
}
|
|
|
|
static int ut_fault_is_warning(fault_t* fault, uint8_t exp_out, fault_t* exp_out_fault)
|
|
{
|
|
printf("Severity:%d W-time:%d F-time:%d \n", fault->severity, fault->w_time, fault->f_time);
|
|
|
|
uint8_t out = fault_is_warning(fault);
|
|
|
|
printf("Output:%d Expected:%d\n", out, exp_out);
|
|
printf(" Output: Severity:%d W-time:%d F-time:%d \n", fault->severity, fault->w_time, fault->f_time);
|
|
printf("Expected: Severity:%d W-time:%d F-time:%d \n", exp_out_fault->severity, exp_out_fault->w_time, exp_out_fault->f_time);
|
|
|
|
if((out==exp_out)&&(fault->severity==exp_out_fault->severity)&&(fault->w_time==exp_out_fault->w_time)&&(fault->f_time==exp_out_fault->f_time))
|
|
{
|
|
printf("PASS\n\n");
|
|
return 1;
|
|
}
|
|
else
|
|
{
|
|
printf("FAIL\n\n");
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
int ut_fault_is_warning_test(void)
|
|
{
|
|
printf("******************************************************\n");
|
|
printf("uint8_t fault_is_warning(fault_t* fault)\n");
|
|
|
|
int test_res;
|
|
int pass = 1;
|
|
|
|
fault_t fault;
|
|
|
|
uint8_t exp_out;
|
|
fault_t exp_out_fault;
|
|
|
|
fault.severity = FAULT_LVL_OK;
|
|
fault.w_time = 500;
|
|
fault.f_time = 300;
|
|
exp_out = 0;
|
|
exp_out_fault.severity = fault.severity;
|
|
exp_out_fault.w_time = fault.w_time;
|
|
exp_out_fault.f_time = fault.f_time;
|
|
test_res = ut_fault_is_warning(&fault, exp_out, &exp_out_fault);
|
|
if(!test_res) pass = 0;
|
|
|
|
fault.severity = FAULT_LVL_WARNING;
|
|
fault.w_time = 500;
|
|
fault.f_time = 300;
|
|
exp_out = 1;
|
|
exp_out_fault.severity = fault.severity;
|
|
exp_out_fault.w_time = fault.w_time;
|
|
exp_out_fault.f_time = fault.f_time;
|
|
test_res = ut_fault_is_warning(&fault, exp_out, &exp_out_fault);
|
|
if(!test_res) pass = 0;
|
|
|
|
fault.severity = FAULT_LVL_FAULT;
|
|
fault.w_time = 500;
|
|
fault.f_time = 300;
|
|
exp_out = 1;
|
|
exp_out_fault.severity = fault.severity;
|
|
exp_out_fault.w_time = fault.w_time;
|
|
exp_out_fault.f_time = fault.f_time;
|
|
test_res = ut_fault_is_warning(&fault, exp_out, &exp_out_fault);
|
|
if(!test_res) pass = 0;
|
|
|
|
return pass;
|
|
}
|
|
|
|
static int ut_fault_reset(fault_t* fault, fault_t* exp_out_fault)
|
|
{
|
|
printf("Severity:%d W-time:%d F-time:%d \n", fault->severity, fault->w_time, fault->f_time);
|
|
|
|
fault_reset(fault);
|
|
|
|
printf(" Output: Severity:%d W-time:%d F-time:%d \n", fault->severity, fault->w_time, fault->f_time);
|
|
printf("Expected: Severity:%d W-time:%d F-time:%d \n", exp_out_fault->severity, exp_out_fault->w_time, exp_out_fault->f_time);
|
|
|
|
if((fault->severity==exp_out_fault->severity)&&(fault->w_time==exp_out_fault->w_time)&&(fault->f_time==exp_out_fault->f_time))
|
|
{
|
|
printf("PASS\n\n");
|
|
return 1;
|
|
}
|
|
else
|
|
{
|
|
printf("FAIL\n\n");
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
int ut_fault_reset_test(void)
|
|
{
|
|
printf("******************************************************\n");
|
|
printf("void fault_reset(fault_t* fault)\n");
|
|
|
|
int test_res;
|
|
int pass = 1;
|
|
|
|
fault_t fault;
|
|
|
|
fault_t exp_out_fault;
|
|
|
|
fault.severity = FAULT_LVL_OK;
|
|
fault.w_time = 0;
|
|
fault.f_time = 0;
|
|
exp_out_fault.severity = FAULT_LVL_OK;
|
|
exp_out_fault.w_time = 0;
|
|
exp_out_fault.f_time = 0;
|
|
test_res = ut_fault_reset(&fault, &exp_out_fault);
|
|
if(!test_res) pass = 0;
|
|
|
|
fault.severity = FAULT_LVL_WARNING;
|
|
fault.w_time = 500;
|
|
fault.f_time = 0;
|
|
exp_out_fault.severity = FAULT_LVL_OK;
|
|
exp_out_fault.w_time = 0;
|
|
exp_out_fault.f_time = 0;
|
|
test_res = ut_fault_reset(&fault, &exp_out_fault);
|
|
if(!test_res) pass = 0;
|
|
|
|
fault.severity = FAULT_LVL_FAULT;
|
|
fault.w_time = 1000;
|
|
fault.f_time = 500;
|
|
exp_out_fault.severity = FAULT_LVL_OK;
|
|
exp_out_fault.w_time = 0;
|
|
exp_out_fault.f_time = 0;
|
|
test_res = ut_fault_reset(&fault, &exp_out_fault);
|
|
if(!test_res) pass = 0;
|
|
|
|
return pass;
|
|
}
|
|
|