📄 kpd_test_misc1.c
字号:
UINT16 received_event;
T_RV_HDR* msg_p;
BOOL exit_test = FALSE;
T_KPD_SUBSCRIBER subscriber_id0, subscriber_id1;
T_KPD_VIRTUAL_KEY_TABLE notified_keys;
T_RV_RETURN kpd_return_path;
UINT32 kpd_id_waited[] = {(UINT32)RV_OK, (UINT32)RV_OK, (UINT32)RV_OK, KPD_TIMER_REPEAT, KPD_TIMER_REPEAT};
UINT32 kpd_id_obtained[] = {1,1,1,0,0};
UINT32 kpd_range_waited[] = {3600, 4400};
BOOL KpdResult = TRUE;
BOOL repeat_first = FALSE;
BOOL repeat_second = FALSE;
UINT32 start_time = 0;
UINT32 intermediate_time = 0;
UINT32 end_time = 0;
UINT32 calculated_time1 = 0;
UINT32 calculated_time2 = 0;
/* Structure allocation in RTEST */
T_result_info *format;
if (rvf_get_buf(rtest_get_mb_id(), sizeof(T_result_info), (T_RVF_BUFFER**) &format) == RVF_RED)
{
rtest_send_result(TEST_FAILED);
RV_TEST_TRACE_ERROR("Memory allocation error - test not started");
return;
}
strcpy (format->test_ref, KPD_101_REF);
strcpy (format->test_name, KPD_101_NAME);
strcpy (format->test_comment, KPD_101_COMMENT);
format->display_format = DIS_LONG;
format->display_base = DIS_DEC;
gen_display_header (format);
/** Subscriber 1 **/
/* Keypad registration */
kpd_return_path.addr_id = rtest_get_addr_id() + 0;
kpd_return_path.callback_func = NULL;
notified_keys.nb_notified_keys = KPD_NB_PHYSICAL_KEYS;
kpd_subscribe (&subscriber_id0,
KPD_DEFAULT_MODE,
¬ified_keys,
kpd_return_path);
/* registration for long_press time value change */
kpd_id_obtained[0] = (UINT32)kpd_register_for_timerchanges(subscriber_id0, KPD_TIMER_REPEAT);
/* Kpdsub1TimerChange */
strcpy (format->var_name, KPD_101_VAR_SUB1);
KpdResult &= gen_display_table_result(&kpd_id_waited[0], &kpd_id_obtained[0], sizeof(kpd_id_waited[0]), format);
#if (KPD_TIME_RESOLUTION == NORMAL_RESOLUTION)
kpd_define_key_notification(subscriber_id0,¬ified_keys, KPD_FIRST_PRESS_NOTIF|KPD_RELEASE_NOTIF|KPD_LONG_PRESS_NOTIF|KPD_INFINITE_REPEAT_NOTIF, 10, 20);
#else
kpd_define_key_notification(subscriber_id0,¬ified_keys, KPD_FIRST_PRESS_NOTIF|KPD_RELEASE_NOTIF|KPD_LONG_PRESS_NOTIF|KPD_INFINITE_REPEAT_NOTIF, 1000, 2000);
#endif
/** Subscriber 2 **/
/* Keypad registration */
kpd_return_path.addr_id = 0;
kpd_return_path.callback_func = keypad_notification101;
notified_keys.nb_notified_keys = KPD_NB_PHYSICAL_KEYS;
kpd_subscribe (&subscriber_id1,
KPD_DEFAULT_MODE,
¬ified_keys,
kpd_return_path);
/* registration for long_press time value change */
kpd_id_obtained[1] = (UINT32)kpd_register_for_timerchanges(subscriber_id1, KPD_TIMER_REPEAT);
/* Kpdsub2TimerChange */
strcpy (format->var_name, KPD_101_VAR_SUB2);
KpdResult &= gen_display_table_result(&kpd_id_waited[1], &kpd_id_obtained[1], sizeof(kpd_id_waited[1]), format);
/* Display test steps on the LCD screen */
LCD_WriteString (1, 0, "\n\n\nPress key *", NORMAL);
/* loop to process messages */
while (!exit_test)
{
/* Wait for the necessary events (infinite wait for a msg in the mailbox 0). */
received_event = rvf_wait(RVF_TASK_MBOX_0_EVT_MASK,0);
if (received_event & RVF_TASK_MBOX_0_EVT_MASK)
{
/*debounce delay = 13 ms*/
rvf_delay(1);
/* Read the message */
msg_p = (T_RV_HDR *) rvf_read_mbox(0);
if (msg_p->dest_addr_id == (rtest_get_addr_id() + 0))
{
switch (msg_p->msg_id)
{
case KPD_KEY_EVENT_MSG:
{
T_KPD_KEY_EVENT_MSG* msg_key_event_p = (T_KPD_KEY_EVENT_MSG*) msg_p;
/* long press event => start timer*/
if(msg_key_event_p->key_info.press_state == KPD_LONG_PRESS)
{
start_time = rvf_get_tick_count();
}
/* repeat press event => stop timer */
if(msg_key_event_p->key_info.press_state == KPD_REPEAT_PRESS)
{
if(repeat_first == TRUE && repeat_second == FALSE)
{
end_time = rvf_get_tick_count();
repeat_second = TRUE;
}
if(repeat_first == FALSE && repeat_second == FALSE)
{
intermediate_time = rvf_get_tick_count();
repeat_first = TRUE;
}
}
display_message(msg_key_event_p, 2);
/* Key * pressed */
if( (msg_key_event_p->key_info.virtual_key_id == KPD_KEY_STAR) )
{
#if (KPD_TIME_RESOLUTION == NORMAL_RESOLUTION)
kpd_id_obtained[2] = kpd_define_key_notification(subscriber_id0,¬ified_keys, KPD_FIRST_PRESS_NOTIF|KPD_RELEASE_NOTIF|KPD_LONG_PRESS_NOTIF|KPD_INFINITE_REPEAT_NOTIF, 20, 40);
#else
kpd_id_obtained[2] = kpd_define_key_notification(subscriber_id0,¬ified_keys, KPD_FIRST_PRESS_NOTIF|KPD_RELEASE_NOTIF|KPD_LONG_PRESS_NOTIF|KPD_INFINITE_REPEAT_NOTIF, 2000, 4000);
#endif
}
if (repeat_first == TRUE && repeat_second == TRUE)
{
calculated_time1 = intermediate_time - start_time;
calculated_time1 = RVF_TICKS_TO_MS(calculated_time1);
calculated_time2 = end_time - intermediate_time;
calculated_time2 = RVF_TICKS_TO_MS(calculated_time2);
kpd_unsubscribe(&subscriber_id0);
kpd_unsubscribe(&subscriber_id1);
exit_test = TRUE;
}
break;
}
case KPD_TIMER_CHANGED_MSG:
{
T_KPD_TIMER_CHANGED_MSG* msg_changed_event_p = (T_KPD_TIMER_CHANGED_MSG*) msg_p;
/* timer change event */
if( msg_changed_event_p->timer_type == KPD_REPEAT_PRESS)
{
kpd_test_trace("Repeat press timer change message for subscriber 1");
kpd_id_obtained[3] = (UINT32)msg_changed_event_p->timer_type;
LCD_WriteString (1, 0, "\n\n\nPress a Key (not *)\nduring 8 seconds", NORMAL);
}
break;
}
case KPD_MSG_1: /* call back message */
{
T_TEST_PARAM* kpd_callback_msg = (T_TEST_PARAM*) msg_p;
kpd_id_obtained[4] = (UINT32)kpd_callback_msg->MessageReceived;
break;
}
case KPD_STATUS_MSG:
kpd_test_trace("Received status message in mailbox 0");
break;
default :
break;
}
rvf_free_buf(msg_p);
}
}
}
/* KpdSub1DefineNotif */
strcpy (format->var_name, KPD_101_VAR_NOTIF1);
KpdResult &= gen_display_table_result(&kpd_id_waited[2], &kpd_id_obtained[2], sizeof(kpd_id_waited[2]), format);
/* KpdSub1TimerChangeMsg */
strcpy(format->var_name, KPD_101_VAR_MSG1);
KpdResult &= gen_display_table_result(&kpd_id_waited[3], &kpd_id_obtained[3], sizeof(kpd_id_waited[3]), format);
/* KpdSub2TimerChangeMsg */
strcpy(format->var_name, KPD_101_VAR_MSG2);
KpdResult &= gen_display_table_result(&kpd_id_waited[4], &kpd_id_obtained[4], sizeof(kpd_id_waited[4]), format);
/* KpdCalculatedTime1 */
strcpy (format->var_name, KPD_101_VAR_TIME1);
KpdResult &= gen_display_table_result_compare_UINT(&kpd_range_waited[0], &kpd_range_waited[1], &calculated_time1, format);
/* KpdCalculatedTime2 */
strcpy (format->var_name, KPD_101_VAR_TIME2);
KpdResult &= gen_display_table_result_compare_UINT(&kpd_range_waited[0], &kpd_range_waited[1], &calculated_time2, format);
/*return test_verdict;*/
gen_display_report (KpdResult);
if (KpdResult)
{
rtest_send_result(TEST_PASSED);
}
else
{
rtest_send_result(TEST_FAILED);
}
/* Free structure allocation in RTEST */
rvf_free_buf (format);
}
/************************************************************************/
/**
* kpd_test_misc102
*
* Check new driver software allows to use higher or normal time value resolution
*
* @param : NA
*
* @return : void
*/
void kpd_test_misc102(void)
{
UINT16 received_event;
T_RV_HDR* msg_p;
BOOL exit_test = FALSE;
T_KPD_SUBSCRIBER subscriber_id;
T_KPD_VIRTUAL_KEY_TABLE notified_keys;
T_RV_RETURN kpd_return_path;
#if (KPD_TIME_RESOLUTION == NORMAL_RESOLUTION)
UINT32 kpd_id_waited[] = {NORMAL_RESOLUTION, (UINT32)RV_OK, (UINT32)RV_OK};
UINT32 kpd_long_press_waited[] = {3600, 4400}; /* 1st elt = min value - 2nd elt = max value */
UINT32 kpd_repeat_waited[] = {900, 1100};
#else
UINT32 kpd_id_waited[] = {HARDWARE_RESOLUTION, (UINT32)RV_OK, (UINT32)RV_OK};
UINT32 kpd_long_press_waited[] = {1800, 2200}; /* 1st elt = min value - 2nd elt = max value */
UINT32 kpd_repeat_waited[] = {450, 550};
#endif
UINT32 kpd_id_obtained[] = {0,1,1};
BOOL KpdResult = TRUE;
UINT32 first_time = 0;
UINT32 long_time = 0;
UINT32 repeat_time1 = 0;
UINT32 repeat_time2 = 0;
UINT32 calculated_time = 0;
BOOL repeat_first = FALSE;
BOOL repeat_second = FALSE;
/* Structure allocation in RTEST */
T_result_info *format;
if (rvf_get_buf(rtest_get_mb_id(), sizeof(T_result_info), (T_RVF_BUFFER**) &format) == RVF_RED)
{
rtest_send_result(TEST_FAILED);
RV_TEST_TRACE_ERROR("Memory allocation error - test not started");
return;
}
strcpy (format->test_ref, KPD_102_REF);
strcpy (format->test_name, KPD_102_NAME);
strcpy (format->test_comment, KPD_102_COMMENT);
format->display_format = DIS_LONG;
format->display_base = DIS_DEC;
gen_display_header (format);
/* Check the time resolution */
kpd_id_obtained[0] = KPD_TIME_RESOLUTION;
/* KpdTimeREsolution */
strcpy (format->var_name, KPD_102_VAR_RES);
KpdResult &= gen_display_table_result(&kpd_id_waited[0], &kpd_id_obtained[0], sizeof(kpd_id_waited[0]), format);
/* Keypad registration */
kpd_return_path.addr_id = rtest_get_addr_id() + 0;
kpd_return_path.callback_func = NULL;
notified_keys.nb_notified_keys = KPD_NB_PHYSICAL_KEYS;
kpd_subscribe (&subscriber_id,
KPD_DEFAULT_MODE,
¬ified_keys,
kpd_return_path);
/* registration for long_press and repeat time values change */
kpd_id_obtained[1] = (UINT32)kpd_register_for_timerchanges(subscriber_id, KPD_TIMER_REPEAT | KPD_TIMER_LONG_PRESS);
/* KpdSubTimerChange */
strcpy (format->var_name, KPD_102_VAR_SUB);
KpdResult &= gen_display_table_result(&kpd_id_waited[1], &kpd_id_obtained[1], sizeof(kpd_id_waited[1]), format);
/* define keypad notification */
#if (KPD_TIME_RESOLUTION == NORMAL_RESOLUTION)
kpd_id_obtained[2] = kpd_define_key_notification(subscriber_id,
¬ified_keys,
KPD_FIRST_PRESS_NOTIF|KPD_LONG_PRESS_NOTIF|KPD_INFINITE_REPEAT_NOTIF,
40,10);
#else
kpd_id_obtained[2] = (UINT32)kpd_define_key_notification(subscriber_id,
¬ified_keys,
KPD_FIRST_PRESS_NOTIF|KPD_LONG_PRESS_NOTIF|KPD_INFINITE_REPEAT_NOTIF,
2000,500);
#endif
/* KpdDefineNotif */
strcpy (format->var_name, KPD_102_VAR_NOTIF);
KpdResult &= gen_display_table_result(&kpd_id_waited[2], &kpd_id_obtained[2], sizeof(kpd_id_waited[2]), format);
/* Display test steps on the LCD screen */
LCD_WriteString (1, 0, "\n\n\nPress a key 15 seconds", NORMAL);
/* loop to process messages */
while (!exit_test)
{
/* Wait for the necessary events (infinite wait for a msg in the mailbox 0). */
received_event = rvf_wait(RVF_TASK_MBOX_0_EVT_MASK,0);
if (received_event & RVF_TASK_MBOX_0_EVT_MASK)
{
/*debounce delay = 13 ms*/
rvf_delay(1);
/* Read the message */
msg_p = (T_RV_HDR *) rvf_read_mbox(0);
if (msg_p->dest_addr_id == (rtest_get_addr_id() + 0))
{
switch (msg_p->msg_id)
{
case KPD_KEY_EVENT_MSG:
{
T_KPD_KEY_EVENT_MSG* msg_key_event_p = (T_KPD_KEY_EVENT_MSG*) msg_p;
display_message(msg_key_event_p, 2);
/* Key First press event => start timer */
if (msg_key_event_p->key_info.press_state == KPD_FIRST_PRESS)
{
first_time = rvf_get_tick_count();
}
/* Key Long press event => intermediate timer */
if (msg_key_event_p->key_info.press_state == KPD_LONG_PRESS)
{
long_time = rvf_get_tick_count();
}
/* repeat press event => stop timer */
if(msg_key_event_p->key_info.press_state == KPD_REPEAT_PRESS)
{
if(repeat_first == TRUE && repeat_second == FALSE)
{
repeat_time2 = rvf_get_tick_count();
repeat_second = TRUE;
}
if(repeat_first == FALSE && repeat_second == FALSE)
{
repeat_time1 = rvf_get_tick_count();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -