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