Repo unification
This commit is contained in:
854
firmware/tests/ut_hw/ut_buttons.c
Normal file
854
firmware/tests/ut_hw/ut_buttons.c
Normal file
@@ -0,0 +1,854 @@
|
||||
#include "ut_buttons.h"
|
||||
|
||||
#include "..\mock_board\mock_board_din.h"
|
||||
#include "..\mock_board\mock_board_dout.h"
|
||||
|
||||
#include "..\..\src\hw\buttons.h"
|
||||
|
||||
static const uint8_t NOT_ACCESED_DIN_CH = 255;
|
||||
static const uint8_t NOT_ACCESED_DIN_LVL = BSP_DIN_LOW;
|
||||
|
||||
static const uint8_t NOT_ACCESED_DOUT_CH = 255;
|
||||
static const int8_t NOT_ACCESED_DOUT_LVL = BSP_DOUT_HIZ;
|
||||
|
||||
static int ut_btn_reset(btn_t* btn, btn_t* exp_btn)
|
||||
{
|
||||
printf(" Input: State:%d New-State:%d State-time:%d Transition-cntr:%d Debounce-act:%d \n", btn->state, btn->new_state, btn->state_time, btn->transition_cntr, btn->dbnc_active);
|
||||
|
||||
btn_reset(btn);
|
||||
|
||||
printf(" Output: State:%d New-State:%d State-time:%d Transition-cntr:%d Debounce-act:%d \n", btn->state, btn->new_state, btn->state_time, btn->transition_cntr, btn->dbnc_active);
|
||||
printf("Expected: State:%d New-State:%d State-time:%d Transition-cntr:%d Debounce-act:%d \n", exp_btn->state, exp_btn->new_state, exp_btn->state_time, exp_btn->transition_cntr, exp_btn->dbnc_active);
|
||||
|
||||
int equal = 1;
|
||||
if(btn->state != exp_btn->state) equal = 0;
|
||||
if(btn->new_state != exp_btn->new_state) equal = 0;
|
||||
if(btn->state_time != exp_btn->state_time) equal = 0;
|
||||
if(btn->transition_cntr != exp_btn->transition_cntr) equal = 0;
|
||||
if(btn->dbnc_active != exp_btn->dbnc_active) equal = 0;
|
||||
|
||||
if(equal)
|
||||
{
|
||||
printf("PASS\n\n");
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("FAIL\n\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int ut_btn_reset_test(void)
|
||||
{
|
||||
printf("******************************************************\n");
|
||||
printf("void btn_reset(btn_t* btn) \n");
|
||||
|
||||
int test_res;
|
||||
int pass = 1;
|
||||
|
||||
btn_t btn;
|
||||
btn_t exp_btn;
|
||||
|
||||
// Normal 1
|
||||
btn.state = 0;
|
||||
btn.new_state = 0;
|
||||
btn.state_time = 0;
|
||||
btn.transition_cntr = 0;
|
||||
btn.dbnc_active = 0;
|
||||
exp_btn.state = 0;
|
||||
exp_btn.new_state = 0;
|
||||
exp_btn.state_time = 0;
|
||||
exp_btn.transition_cntr = 0;
|
||||
exp_btn.dbnc_active = 1;
|
||||
test_res = ut_btn_reset(&btn, &exp_btn);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
// Normal 1
|
||||
btn.state = 1;
|
||||
btn.new_state = 1;
|
||||
btn.state_time = 1000;
|
||||
btn.transition_cntr = 20;
|
||||
btn.dbnc_active = 0;
|
||||
exp_btn.state = BTN_INACTIVE;
|
||||
exp_btn.new_state = 0;
|
||||
exp_btn.state_time = 0;
|
||||
exp_btn.transition_cntr = 0;
|
||||
exp_btn.dbnc_active = 1;
|
||||
test_res = ut_btn_reset(&btn, &exp_btn);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
return pass;
|
||||
}
|
||||
|
||||
static int ut_btn_process(uint8_t lvl, btn_t* btn, btn_cfg_t* cfg, uint8_t exp_out, btn_t* exp_btn, btn_cfg_t* exp_cfg)
|
||||
{
|
||||
printf(" Input: Level:%d \n", lvl);
|
||||
printf(" Input: State:%d New-State:%d State-time:%d Transition-cntr:%d Debounce-act:%d \n", btn->state, btn->new_state, btn->state_time, btn->transition_cntr, btn->dbnc_active);
|
||||
printf(" Input: Act-Lvl:%d Debounce-lim:%d Repeat-Time:%d \n", cfg->act_lvl, cfg->dbnc_lim, cfg->repeat_time);
|
||||
|
||||
uint8_t out = btn_process(lvl, btn, cfg);
|
||||
|
||||
printf(" Output: %d \n", out);
|
||||
printf(" Output: State:%d New-State:%d State-time:%d Transition-cntr:%d Debounce-act:%d \n", btn->state, btn->new_state, btn->state_time, btn->transition_cntr, btn->dbnc_active);
|
||||
printf(" Output: Act-Lvl:%d Debounce-lim:%d Repeat-Time:%d \n", cfg->act_lvl, cfg->dbnc_lim, cfg->repeat_time);
|
||||
|
||||
printf("Expected: %d \n", exp_out);
|
||||
printf("Expected: State:%d New-State:%d State-time:%d Transition-cntr:%d Debounce-act:%d \n", exp_btn->state, exp_btn->new_state, exp_btn->state_time, exp_btn->transition_cntr, exp_btn->dbnc_active);
|
||||
printf("Expected: Act-Lvl:%d Debounce-lim:%d Repeat-Time:%d \n", exp_cfg->act_lvl, exp_cfg->dbnc_lim, exp_cfg->repeat_time);
|
||||
|
||||
int equal = 1;
|
||||
if(btn->state != exp_btn->state) equal = 0;
|
||||
if(btn->new_state != exp_btn->new_state) equal = 0;
|
||||
if(btn->state_time != exp_btn->state_time) equal = 0;
|
||||
if(btn->transition_cntr != exp_btn->transition_cntr) equal = 0;
|
||||
if(btn->dbnc_active != exp_btn->dbnc_active) equal = 0;
|
||||
if(cfg->act_lvl != exp_cfg->act_lvl) equal = 0;
|
||||
if(cfg->dbnc_lim != exp_cfg->dbnc_lim) equal = 0;
|
||||
if(cfg->repeat_time != exp_cfg->repeat_time) equal = 0;
|
||||
|
||||
if((out==exp_out)&&(equal))
|
||||
{
|
||||
printf("PASS\n\n");
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("FAIL\n\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int ut_btn_process_test(void)
|
||||
{
|
||||
printf("******************************************************\n");
|
||||
printf("uint8_t btn_process(uint8_t lvl, btn_t* btn, btn_cfg_t* cfg) \n");
|
||||
|
||||
int test_res;
|
||||
int pass = 1;
|
||||
|
||||
uint8_t lvl;
|
||||
btn_t btn;
|
||||
btn_cfg_t cfg;
|
||||
uint8_t exp_out;
|
||||
btn_t exp_btn;
|
||||
btn_cfg_t exp_cfg;
|
||||
|
||||
// No changes
|
||||
lvl = 0;
|
||||
btn.state = 0;
|
||||
btn.new_state = 0;
|
||||
btn.state_time = 0;
|
||||
btn.transition_cntr = 0;
|
||||
btn.dbnc_active = 0;
|
||||
cfg.act_lvl = 1;
|
||||
cfg.dbnc_lim = 0;
|
||||
cfg.repeat_time = 0;
|
||||
|
||||
exp_out = 0;
|
||||
exp_btn.state = 0;
|
||||
exp_btn.new_state = 0;
|
||||
exp_btn.state_time = 1;
|
||||
exp_btn.transition_cntr = 0;
|
||||
exp_btn.dbnc_active = 0;
|
||||
exp_cfg.act_lvl = cfg.act_lvl;
|
||||
exp_cfg.dbnc_lim = cfg.dbnc_lim;
|
||||
exp_cfg.repeat_time = cfg.repeat_time;
|
||||
|
||||
test_res = ut_btn_process(lvl, &btn, &cfg, exp_out, &exp_btn, &exp_cfg);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
// State time increase
|
||||
lvl = 1;
|
||||
btn.state = 0;
|
||||
btn.new_state = 0;
|
||||
btn.state_time = 12345;
|
||||
btn.transition_cntr = 0;
|
||||
btn.dbnc_active = 0;
|
||||
cfg.act_lvl = 0;
|
||||
cfg.dbnc_lim = 0;
|
||||
cfg.repeat_time = 0;
|
||||
|
||||
exp_out = 0;
|
||||
exp_btn.state = 0;
|
||||
exp_btn.new_state = 0;
|
||||
exp_btn.state_time = 12346;
|
||||
exp_btn.transition_cntr = 0;
|
||||
exp_btn.dbnc_active = 0;
|
||||
exp_cfg.act_lvl = cfg.act_lvl;
|
||||
exp_cfg.dbnc_lim = cfg.dbnc_lim;
|
||||
exp_cfg.repeat_time = cfg.repeat_time;
|
||||
|
||||
test_res = ut_btn_process(lvl, &btn, &cfg, exp_out, &exp_btn, &exp_cfg);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
// Activation, first time, act high
|
||||
lvl = 1;
|
||||
btn.state = 0;
|
||||
btn.new_state = 0;
|
||||
btn.state_time = 38455;
|
||||
btn.transition_cntr = 0;
|
||||
btn.dbnc_active = 0;
|
||||
cfg.act_lvl = 1;
|
||||
cfg.dbnc_lim = 0;
|
||||
cfg.repeat_time = 0;
|
||||
|
||||
exp_out = 1;
|
||||
exp_btn.state = 1;
|
||||
exp_btn.new_state = 1;
|
||||
exp_btn.state_time = 0;
|
||||
exp_btn.transition_cntr = 0;
|
||||
exp_btn.dbnc_active = 0;
|
||||
exp_cfg.act_lvl = cfg.act_lvl;
|
||||
exp_cfg.dbnc_lim = cfg.dbnc_lim;
|
||||
exp_cfg.repeat_time = cfg.repeat_time;
|
||||
|
||||
test_res = ut_btn_process(lvl, &btn, &cfg, exp_out, &exp_btn, &exp_cfg);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
// Activation, first time, act low
|
||||
lvl = 0;
|
||||
btn.state = 0;
|
||||
btn.new_state = 0;
|
||||
btn.state_time = 38455;
|
||||
btn.transition_cntr = 0;
|
||||
btn.dbnc_active = 0;
|
||||
cfg.act_lvl = 0;
|
||||
cfg.dbnc_lim = 0;
|
||||
cfg.repeat_time = 0;
|
||||
|
||||
exp_out = 1;
|
||||
exp_btn.state = 1;
|
||||
exp_btn.new_state = 1;
|
||||
exp_btn.state_time = 0;
|
||||
exp_btn.transition_cntr = 0;
|
||||
exp_btn.dbnc_active = 0;
|
||||
exp_cfg.act_lvl = cfg.act_lvl;
|
||||
exp_cfg.dbnc_lim = cfg.dbnc_lim;
|
||||
exp_cfg.repeat_time = cfg.repeat_time;
|
||||
|
||||
test_res = ut_btn_process(lvl, &btn, &cfg, exp_out, &exp_btn, &exp_cfg);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
// Active second time, not cleared new flag
|
||||
lvl = 1;
|
||||
btn.state = 1;
|
||||
btn.new_state = 1;
|
||||
btn.state_time = 0;
|
||||
btn.transition_cntr = 0;
|
||||
btn.dbnc_active = 0;
|
||||
cfg.act_lvl = 1;
|
||||
cfg.dbnc_lim = 0;
|
||||
cfg.repeat_time = 0;
|
||||
|
||||
exp_out = 1;
|
||||
exp_btn.state = 1;
|
||||
exp_btn.new_state = 1;
|
||||
exp_btn.state_time = 1;
|
||||
exp_btn.transition_cntr = 0;
|
||||
exp_btn.dbnc_active = 0;
|
||||
exp_cfg.act_lvl = cfg.act_lvl;
|
||||
exp_cfg.dbnc_lim = cfg.dbnc_lim;
|
||||
exp_cfg.repeat_time = cfg.repeat_time;
|
||||
|
||||
test_res = ut_btn_process(lvl, &btn, &cfg, exp_out, &exp_btn, &exp_cfg);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
// Active second time, cleared new flag
|
||||
lvl = 1;
|
||||
btn.state = 1;
|
||||
btn.new_state = 0;
|
||||
btn.state_time = 0;
|
||||
btn.transition_cntr = 0;
|
||||
btn.dbnc_active = 0;
|
||||
cfg.act_lvl = 1;
|
||||
cfg.dbnc_lim = 0;
|
||||
cfg.repeat_time = 0;
|
||||
|
||||
exp_out = 1;
|
||||
exp_btn.state = 1;
|
||||
exp_btn.new_state = 0;
|
||||
exp_btn.state_time = 1;
|
||||
exp_btn.transition_cntr = 0;
|
||||
exp_btn.dbnc_active = 0;
|
||||
exp_cfg.act_lvl = cfg.act_lvl;
|
||||
exp_cfg.dbnc_lim = cfg.dbnc_lim;
|
||||
exp_cfg.repeat_time = cfg.repeat_time;
|
||||
|
||||
test_res = ut_btn_process(lvl, &btn, &cfg, exp_out, &exp_btn, &exp_cfg);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
// Deactive, act high
|
||||
lvl = 0;
|
||||
btn.state = 1;
|
||||
btn.new_state = 0;
|
||||
btn.state_time = 60584;
|
||||
btn.transition_cntr = 0;
|
||||
btn.dbnc_active = 0;
|
||||
cfg.act_lvl = 1;
|
||||
cfg.dbnc_lim = 0;
|
||||
cfg.repeat_time = 0;
|
||||
|
||||
exp_out = 0;
|
||||
exp_btn.state = 0;
|
||||
exp_btn.new_state = 1;
|
||||
exp_btn.state_time = 0;
|
||||
exp_btn.transition_cntr = 0;
|
||||
exp_btn.dbnc_active = 0;
|
||||
exp_cfg.act_lvl = cfg.act_lvl;
|
||||
exp_cfg.dbnc_lim = cfg.dbnc_lim;
|
||||
exp_cfg.repeat_time = cfg.repeat_time;
|
||||
|
||||
test_res = ut_btn_process(lvl, &btn, &cfg, exp_out, &exp_btn, &exp_cfg);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
// Deactive, act low
|
||||
lvl = 1;
|
||||
btn.state = 1;
|
||||
btn.new_state = 0;
|
||||
btn.state_time = 558;
|
||||
btn.transition_cntr = 0;
|
||||
btn.dbnc_active = 0;
|
||||
cfg.act_lvl = 0;
|
||||
cfg.dbnc_lim = 0;
|
||||
cfg.repeat_time = 0;
|
||||
|
||||
exp_out = 0;
|
||||
exp_btn.state = 0;
|
||||
exp_btn.new_state = 1;
|
||||
exp_btn.state_time = 0;
|
||||
exp_btn.transition_cntr = 0;
|
||||
exp_btn.dbnc_active = 0;
|
||||
exp_cfg.act_lvl = cfg.act_lvl;
|
||||
exp_cfg.dbnc_lim = cfg.dbnc_lim;
|
||||
exp_cfg.repeat_time = cfg.repeat_time;
|
||||
|
||||
test_res = ut_btn_process(lvl, &btn, &cfg, exp_out, &exp_btn, &exp_cfg);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
// Debounce, first
|
||||
lvl = 1;
|
||||
btn.state = 0;
|
||||
btn.new_state = 0;
|
||||
btn.state_time = 24789;
|
||||
btn.transition_cntr = 0;
|
||||
btn.dbnc_active = 0;
|
||||
cfg.act_lvl = 1;
|
||||
cfg.dbnc_lim = 10;
|
||||
cfg.repeat_time = 0;
|
||||
|
||||
exp_out = 0;
|
||||
exp_btn.state = 0;
|
||||
exp_btn.new_state = 0;
|
||||
exp_btn.state_time = 24790;
|
||||
exp_btn.transition_cntr = 0;
|
||||
exp_btn.dbnc_active = 1;
|
||||
exp_cfg.act_lvl = cfg.act_lvl;
|
||||
exp_cfg.dbnc_lim = cfg.dbnc_lim;
|
||||
exp_cfg.repeat_time = cfg.repeat_time;
|
||||
|
||||
test_res = ut_btn_process(lvl, &btn, &cfg, exp_out, &exp_btn, &exp_cfg);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
// Debounce at end
|
||||
lvl = 1;
|
||||
btn.state = 0;
|
||||
btn.new_state = 0;
|
||||
btn.state_time = 142;
|
||||
btn.transition_cntr = 9;
|
||||
btn.dbnc_active = 1;
|
||||
cfg.act_lvl = 1;
|
||||
cfg.dbnc_lim = 10;
|
||||
cfg.repeat_time = 0;
|
||||
|
||||
exp_out = 1;
|
||||
exp_btn.state = 1;
|
||||
exp_btn.new_state = 1;
|
||||
exp_btn.state_time = 0;
|
||||
exp_btn.transition_cntr = 0;
|
||||
exp_btn.dbnc_active = 0;
|
||||
exp_cfg.act_lvl = cfg.act_lvl;
|
||||
exp_cfg.dbnc_lim = cfg.dbnc_lim;
|
||||
exp_cfg.repeat_time = cfg.repeat_time;
|
||||
|
||||
test_res = ut_btn_process(lvl, &btn, &cfg, exp_out, &exp_btn, &exp_cfg);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
// Debounce fail, act high, fail to active state
|
||||
lvl = 0;
|
||||
btn.state = 0;
|
||||
btn.new_state = 0;
|
||||
btn.state_time = 142;
|
||||
btn.transition_cntr = 5;
|
||||
btn.dbnc_active = 1;
|
||||
cfg.act_lvl = 1;
|
||||
cfg.dbnc_lim = 10;
|
||||
cfg.repeat_time = 0;
|
||||
|
||||
exp_out = 0;
|
||||
exp_btn.state = 0;
|
||||
exp_btn.new_state = 0;
|
||||
exp_btn.state_time = 143;
|
||||
exp_btn.transition_cntr = 0;
|
||||
exp_btn.dbnc_active = 0;
|
||||
exp_cfg.act_lvl = cfg.act_lvl;
|
||||
exp_cfg.dbnc_lim = cfg.dbnc_lim;
|
||||
exp_cfg.repeat_time = cfg.repeat_time;
|
||||
|
||||
test_res = ut_btn_process(lvl, &btn, &cfg, exp_out, &exp_btn, &exp_cfg);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
// Debounce fail, act low, fail to active state
|
||||
lvl = 1;
|
||||
btn.state = 0;
|
||||
btn.new_state = 0;
|
||||
btn.state_time = 257;
|
||||
btn.transition_cntr = 4;
|
||||
btn.dbnc_active = 1;
|
||||
cfg.act_lvl = 0;
|
||||
cfg.dbnc_lim = 10;
|
||||
cfg.repeat_time = 0;
|
||||
|
||||
exp_out = 0;
|
||||
exp_btn.state = 0;
|
||||
exp_btn.new_state = 0;
|
||||
exp_btn.state_time = 258;
|
||||
exp_btn.transition_cntr = 0;
|
||||
exp_btn.dbnc_active = 0;
|
||||
exp_cfg.act_lvl = cfg.act_lvl;
|
||||
exp_cfg.dbnc_lim = cfg.dbnc_lim;
|
||||
exp_cfg.repeat_time = cfg.repeat_time;
|
||||
|
||||
test_res = ut_btn_process(lvl, &btn, &cfg, exp_out, &exp_btn, &exp_cfg);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
// Before New state repeat
|
||||
lvl = 1;
|
||||
btn.state = 1;
|
||||
btn.new_state = 0;
|
||||
btn.state_time = 4998;
|
||||
btn.transition_cntr = 0;
|
||||
btn.dbnc_active = 0;
|
||||
cfg.act_lvl = 1;
|
||||
cfg.dbnc_lim = 10;
|
||||
cfg.repeat_time = 5000;
|
||||
|
||||
exp_out = 1;
|
||||
exp_btn.state = 1;
|
||||
exp_btn.new_state = 0;
|
||||
exp_btn.state_time = 4999;
|
||||
exp_btn.transition_cntr = 0;
|
||||
exp_btn.dbnc_active = 0;
|
||||
exp_cfg.act_lvl = cfg.act_lvl;
|
||||
exp_cfg.dbnc_lim = cfg.dbnc_lim;
|
||||
exp_cfg.repeat_time = cfg.repeat_time;
|
||||
|
||||
test_res = ut_btn_process(lvl, &btn, &cfg, exp_out, &exp_btn, &exp_cfg);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
// Before New state repeat
|
||||
lvl = 1;
|
||||
btn.state = 1;
|
||||
btn.new_state = 0;
|
||||
btn.state_time = 4999;
|
||||
btn.transition_cntr = 0;
|
||||
btn.dbnc_active = 0;
|
||||
cfg.act_lvl = 1;
|
||||
cfg.dbnc_lim = 10;
|
||||
cfg.repeat_time = 5000;
|
||||
|
||||
exp_out = 1;
|
||||
exp_btn.state = 1;
|
||||
exp_btn.new_state = 1;
|
||||
exp_btn.state_time = 5000;
|
||||
exp_btn.transition_cntr = 0;
|
||||
exp_btn.dbnc_active = 0;
|
||||
exp_cfg.act_lvl = cfg.act_lvl;
|
||||
exp_cfg.dbnc_lim = cfg.dbnc_lim;
|
||||
exp_cfg.repeat_time = cfg.repeat_time;
|
||||
|
||||
test_res = ut_btn_process(lvl, &btn, &cfg, exp_out, &exp_btn, &exp_cfg);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
// Before New state repeat
|
||||
lvl = 1;
|
||||
btn.state = 1;
|
||||
btn.new_state = 0;
|
||||
btn.state_time = 5000;
|
||||
btn.transition_cntr = 0;
|
||||
btn.dbnc_active = 0;
|
||||
cfg.act_lvl = 1;
|
||||
cfg.dbnc_lim = 10;
|
||||
cfg.repeat_time = 5000;
|
||||
|
||||
exp_out = 1;
|
||||
exp_btn.state = 1;
|
||||
exp_btn.new_state = 0;
|
||||
exp_btn.state_time = 5001;
|
||||
exp_btn.transition_cntr = 0;
|
||||
exp_btn.dbnc_active = 0;
|
||||
exp_cfg.act_lvl = cfg.act_lvl;
|
||||
exp_cfg.dbnc_lim = cfg.dbnc_lim;
|
||||
exp_cfg.repeat_time = cfg.repeat_time;
|
||||
|
||||
test_res = ut_btn_process(lvl, &btn, &cfg, exp_out, &exp_btn, &exp_cfg);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
// Before New state repeat
|
||||
lvl = 1;
|
||||
btn.state = 1;
|
||||
btn.new_state = 0;
|
||||
btn.state_time = 19999;
|
||||
btn.transition_cntr = 0;
|
||||
btn.dbnc_active = 0;
|
||||
cfg.act_lvl = 1;
|
||||
cfg.dbnc_lim = 10;
|
||||
cfg.repeat_time = 5000;
|
||||
|
||||
exp_out = 1;
|
||||
exp_btn.state = 1;
|
||||
exp_btn.new_state = 1;
|
||||
exp_btn.state_time = 20000;
|
||||
exp_btn.transition_cntr = 0;
|
||||
exp_btn.dbnc_active = 0;
|
||||
exp_cfg.act_lvl = cfg.act_lvl;
|
||||
exp_cfg.dbnc_lim = cfg.dbnc_lim;
|
||||
exp_cfg.repeat_time = cfg.repeat_time;
|
||||
|
||||
test_res = ut_btn_process(lvl, &btn, &cfg, exp_out, &exp_btn, &exp_cfg);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
// Before New state repeat
|
||||
lvl = 1;
|
||||
btn.state = 1;
|
||||
btn.new_state = 0;
|
||||
btn.state_time = 0xFFFE;
|
||||
btn.transition_cntr = 0;
|
||||
btn.dbnc_active = 0;
|
||||
cfg.act_lvl = 1;
|
||||
cfg.dbnc_lim = 10;
|
||||
cfg.repeat_time = 255;
|
||||
|
||||
exp_out = 1;
|
||||
exp_btn.state = 1;
|
||||
exp_btn.new_state = 0;
|
||||
exp_btn.state_time = 0xFFFF;
|
||||
exp_btn.transition_cntr = 0;
|
||||
exp_btn.dbnc_active = 0;
|
||||
exp_cfg.act_lvl = cfg.act_lvl;
|
||||
exp_cfg.dbnc_lim = cfg.dbnc_lim;
|
||||
exp_cfg.repeat_time = cfg.repeat_time;
|
||||
|
||||
test_res = ut_btn_process(lvl, &btn, &cfg, exp_out, &exp_btn, &exp_cfg);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
return pass;
|
||||
}
|
||||
|
||||
static int ut_btn_ch_process(uint8_t btn_ch, btn_t* btn, uint8_t din_lvl, uint8_t exp_out, btn_t* exp_btn, uint8_t exp_din_ch)
|
||||
{
|
||||
printf(" Input: Btn-Ch:%d Din-Lvl:%d\n", btn_ch, din_lvl);
|
||||
printf(" Input: State:%d New-State:%d State-time:%d Transition-cntr:%d Debounce-act:%d \n", btn->state, btn->new_state, btn->state_time, btn->transition_cntr, btn->dbnc_active);
|
||||
|
||||
mock_board_din_write_ch(NOT_ACCESED_DIN_CH);
|
||||
mock_board_din_write_data(exp_din_ch, din_lvl);
|
||||
|
||||
uint8_t out = btn_ch_process(btn_ch, btn);
|
||||
|
||||
uint8_t din_ch = mock_board_din_read_ch();
|
||||
|
||||
printf(" Output: %d \n", out);
|
||||
printf(" Output: State:%d New-State:%d State-time:%d Transition-cntr:%d Debounce-act:%d \n", btn->state, btn->new_state, btn->state_time, btn->transition_cntr, btn->dbnc_active);
|
||||
printf(" Output: Din-Ch:%d \n", din_ch);
|
||||
|
||||
printf("Expected: %d \n", exp_out);
|
||||
printf("Expected: State:%d New-State:%d State-time:%d Transition-cntr:%d Debounce-act:%d \n", exp_btn->state, exp_btn->new_state, exp_btn->state_time, exp_btn->transition_cntr, exp_btn->dbnc_active);
|
||||
printf("Expected: Din-Ch:%d \n", exp_din_ch);
|
||||
|
||||
int equal = 1;
|
||||
if(btn->state != exp_btn->state) equal = 0;
|
||||
if(btn->new_state != exp_btn->new_state) equal = 0;
|
||||
if(btn->state_time != exp_btn->state_time) equal = 0;
|
||||
if(btn->transition_cntr != exp_btn->transition_cntr) equal = 0;
|
||||
if(btn->dbnc_active != exp_btn->dbnc_active) equal = 0;
|
||||
|
||||
if((out==exp_out)&&(equal)&&(din_ch==exp_din_ch))
|
||||
{
|
||||
printf("PASS\n\n");
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("FAIL\n\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int ut_btn_ch_process_test(void)
|
||||
{
|
||||
printf("******************************************************\n");
|
||||
printf("uint8_t btn_ch_process(uint8_t btn_ch, btn_t* btn) \n");
|
||||
|
||||
int test_res;
|
||||
int pass = 1;
|
||||
|
||||
uint8_t btn_ch;
|
||||
btn_t btn;
|
||||
uint8_t din_lvl;
|
||||
uint8_t exp_out;
|
||||
btn_t exp_btn;
|
||||
uint8_t exp_din_ch;
|
||||
|
||||
// Mapping check 1
|
||||
btn_ch = BTN_1;
|
||||
btn.state = 0;
|
||||
btn.new_state = 0;
|
||||
btn.state_time = 150;
|
||||
btn.transition_cntr = 9;
|
||||
btn.dbnc_active = 1;
|
||||
din_lvl = BSP_DIN_LOW;
|
||||
|
||||
exp_out = 1;
|
||||
exp_btn.state = 1;
|
||||
exp_btn.new_state = 1;
|
||||
exp_btn.state_time = 0;
|
||||
exp_btn.transition_cntr = 0;
|
||||
exp_btn.dbnc_active = 0;
|
||||
exp_din_ch = BSP_DIN1;
|
||||
|
||||
test_res = ut_btn_ch_process(btn_ch, &btn, din_lvl, exp_out, &exp_btn, exp_din_ch);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
// Mapping check 2
|
||||
btn_ch = BTN_2;
|
||||
btn.state = 0;
|
||||
btn.new_state = 0;
|
||||
btn.state_time = 150;
|
||||
btn.transition_cntr = 9;
|
||||
btn.dbnc_active = 1;
|
||||
din_lvl = BSP_DIN_LOW;
|
||||
|
||||
exp_out = 1;
|
||||
exp_btn.state = 1;
|
||||
exp_btn.new_state = 1;
|
||||
exp_btn.state_time = 0;
|
||||
exp_btn.transition_cntr = 0;
|
||||
exp_btn.dbnc_active = 0;
|
||||
exp_din_ch = BSP_DIN3;
|
||||
|
||||
test_res = ut_btn_ch_process(btn_ch, &btn, din_lvl, exp_out, &exp_btn, exp_din_ch);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
// Mapping check 3
|
||||
btn_ch = BTN_3;
|
||||
btn.state = 0;
|
||||
btn.new_state = 0;
|
||||
btn.state_time = 150;
|
||||
btn.transition_cntr = 9;
|
||||
btn.dbnc_active = 1;
|
||||
din_lvl = BSP_DIN_LOW;
|
||||
|
||||
exp_out = 1;
|
||||
exp_btn.state = 1;
|
||||
exp_btn.new_state = 1;
|
||||
exp_btn.state_time = 0;
|
||||
exp_btn.transition_cntr = 0;
|
||||
exp_btn.dbnc_active = 0;
|
||||
exp_din_ch = BSP_DIN4;
|
||||
|
||||
test_res = ut_btn_ch_process(btn_ch, &btn, din_lvl, exp_out, &exp_btn, exp_din_ch);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
// Mapping check 4
|
||||
btn_ch = BTN_4;
|
||||
btn.state = 0;
|
||||
btn.new_state = 0;
|
||||
btn.state_time = 150;
|
||||
btn.transition_cntr = 9;
|
||||
btn.dbnc_active = 1;
|
||||
din_lvl = BSP_DIN_HIGH;
|
||||
|
||||
exp_out = 1;
|
||||
exp_btn.state = 1;
|
||||
exp_btn.new_state = 1;
|
||||
exp_btn.state_time = 0;
|
||||
exp_btn.transition_cntr = 0;
|
||||
exp_btn.dbnc_active = 0;
|
||||
exp_din_ch = BSP_DIN5;
|
||||
|
||||
test_res = ut_btn_ch_process(btn_ch, &btn, din_lvl, exp_out, &exp_btn, exp_din_ch);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
// Mapping check 5
|
||||
btn_ch = BTN_5;
|
||||
btn.state = 0;
|
||||
btn.new_state = 0;
|
||||
btn.state_time = 150;
|
||||
btn.transition_cntr = 9;
|
||||
btn.dbnc_active = 1;
|
||||
din_lvl = BSP_DIN_HIGH;
|
||||
|
||||
exp_out = 1;
|
||||
exp_btn.state = 1;
|
||||
exp_btn.new_state = 1;
|
||||
exp_btn.state_time = 0;
|
||||
exp_btn.transition_cntr = 0;
|
||||
exp_btn.dbnc_active = 0;
|
||||
exp_din_ch = BSP_DIN6;
|
||||
|
||||
test_res = ut_btn_ch_process(btn_ch, &btn, din_lvl, exp_out, &exp_btn, exp_din_ch);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
// Mapping check 6
|
||||
btn_ch = BTN_6;
|
||||
btn.state = 0;
|
||||
btn.new_state = 0;
|
||||
btn.state_time = 150;
|
||||
btn.transition_cntr = 9;
|
||||
btn.dbnc_active = 1;
|
||||
din_lvl = BSP_DIN_LOW;
|
||||
|
||||
exp_out = 1;
|
||||
exp_btn.state = 1;
|
||||
exp_btn.new_state = 1;
|
||||
exp_btn.state_time = 0;
|
||||
exp_btn.transition_cntr = 0;
|
||||
exp_btn.dbnc_active = 0;
|
||||
exp_din_ch = BSP_DIN7;
|
||||
|
||||
test_res = ut_btn_ch_process(btn_ch, &btn, din_lvl, exp_out, &exp_btn, exp_din_ch);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
// Mapping check 6N
|
||||
btn_ch = BTN_6N;
|
||||
btn.state = 0;
|
||||
btn.new_state = 0;
|
||||
btn.state_time = 150;
|
||||
btn.transition_cntr = 9;
|
||||
btn.dbnc_active = 1;
|
||||
din_lvl = BSP_DIN_LOW;
|
||||
|
||||
exp_out = 1;
|
||||
exp_btn.state = 1;
|
||||
exp_btn.new_state = 1;
|
||||
exp_btn.state_time = 0;
|
||||
exp_btn.transition_cntr = 0;
|
||||
exp_btn.dbnc_active = 0;
|
||||
exp_din_ch = BSP_DIN7N;
|
||||
|
||||
test_res = ut_btn_ch_process(btn_ch, &btn, din_lvl, exp_out, &exp_btn, exp_din_ch);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
// Wrong channel
|
||||
btn_ch = 0;
|
||||
btn.state = 1;
|
||||
btn.new_state = 0;
|
||||
btn.state_time = 150;
|
||||
btn.transition_cntr = 9;
|
||||
btn.dbnc_active = 1;
|
||||
din_lvl = BSP_DIN_LOW;
|
||||
|
||||
exp_out = 0;
|
||||
exp_btn.state = 1;
|
||||
exp_btn.new_state = 0;
|
||||
exp_btn.state_time = 150;
|
||||
exp_btn.transition_cntr = 9;
|
||||
exp_btn.dbnc_active = 1;
|
||||
exp_din_ch = NOT_ACCESED_DIN_CH;
|
||||
|
||||
test_res = ut_btn_ch_process(btn_ch, &btn, din_lvl, exp_out, &exp_btn, exp_din_ch);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
return pass;
|
||||
}
|
||||
|
||||
static int ut_btn_ch_set_pull(uint8_t btn_ch, int8_t lvl, int8_t exp_dout_lvl, uint8_t exp_dout_ch)
|
||||
{
|
||||
printf(" Input: Btn-Ch:%d Din-Lvl:%d\n", btn_ch, lvl);
|
||||
|
||||
mock_board_dout_write_ch(NOT_ACCESED_DOUT_CH);
|
||||
mock_board_dout_write_data(exp_dout_ch, NOT_ACCESED_DOUT_LVL);
|
||||
|
||||
btn_ch_set_pull(btn_ch, lvl);
|
||||
|
||||
uint8_t dout_ch = mock_board_dout_read_ch();
|
||||
int8_t dout = mock_board_dout_read_data(exp_dout_ch);
|
||||
|
||||
printf(" Output: Dout-Ch:%d Dout-Lvl:%d \n", dout_ch, dout);
|
||||
printf("Expected: Dout-Ch:%d Dout-Lvl:%d \n", exp_dout_ch, exp_dout_lvl);
|
||||
|
||||
if((dout==exp_dout_lvl)&&(dout_ch==exp_dout_ch))
|
||||
{
|
||||
printf("PASS\n\n");
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("FAIL\n\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int ut_btn_ch_set_pull_test(void)
|
||||
{
|
||||
printf("******************************************************\n");
|
||||
printf("void btn_ch_set_pull(uint8_t btn_ch, int8_t lvl) \n");
|
||||
|
||||
int test_res;
|
||||
int pass = 1;
|
||||
|
||||
uint8_t btn_ch;
|
||||
int8_t lvl;
|
||||
int8_t exp_dout_lvl;
|
||||
uint8_t exp_dout_ch;
|
||||
|
||||
// Mapping check 1
|
||||
btn_ch = BTN_6;
|
||||
lvl = 0;
|
||||
exp_dout_lvl = BSP_DOUT_LOW;
|
||||
exp_dout_ch = BSP_DOUT5;
|
||||
test_res = ut_btn_ch_set_pull(btn_ch, lvl, exp_dout_lvl, exp_dout_ch);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
// Mapping check 2
|
||||
btn_ch = BTN_6N;
|
||||
lvl = 1;
|
||||
exp_dout_lvl = BSP_DOUT_HIGH;
|
||||
exp_dout_ch = BSP_DOUT5;
|
||||
test_res = ut_btn_ch_set_pull(btn_ch, lvl, exp_dout_lvl, exp_dout_ch);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
// Define check 1
|
||||
btn_ch = BTN_6N;
|
||||
lvl = BTN_PULL_LOW;
|
||||
exp_dout_lvl = BSP_DOUT_LOW;
|
||||
exp_dout_ch = BSP_DOUT5;
|
||||
test_res = ut_btn_ch_set_pull(btn_ch, lvl, exp_dout_lvl, exp_dout_ch);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
// Define check 2
|
||||
btn_ch = BTN_6N;
|
||||
lvl = BTN_PULL_HIGH;
|
||||
exp_dout_lvl = BSP_DOUT_HIGH;
|
||||
exp_dout_ch = BSP_DOUT5;
|
||||
test_res = ut_btn_ch_set_pull(btn_ch, lvl, exp_dout_lvl, exp_dout_ch);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
// Define check 3
|
||||
btn_ch = BTN_6N;
|
||||
lvl = BTN_PULL_NONE;
|
||||
exp_dout_lvl = BSP_DOUT_HIZ;
|
||||
exp_dout_ch = BSP_DOUT5;
|
||||
test_res = ut_btn_ch_set_pull(btn_ch, lvl, exp_dout_lvl, exp_dout_ch);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
// Wrong channel
|
||||
btn_ch = 0;
|
||||
lvl = 0;
|
||||
exp_dout_lvl = NOT_ACCESED_DOUT_LVL;
|
||||
exp_dout_ch = NOT_ACCESED_DOUT_CH;
|
||||
test_res = ut_btn_ch_set_pull(btn_ch, lvl, exp_dout_lvl, exp_dout_ch);
|
||||
if(!test_res) pass = 0;
|
||||
|
||||
return pass;
|
||||
}
|
||||
Reference in New Issue
Block a user