Files
uDCCD/firmware/tests/ut_hw/ut_buttons.c
2024-03-12 21:22:26 +02:00

855 lines
23 KiB
C

#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;
}