📄 kpd_test_misc1.c
字号:
/**
* @file kpd_test_misc1.c
*
* Gathers functions used for demonstration of KPD SWE.
*
* @author SILICOMP
* @version 0.3
*/
/*
* History:
*
* Date Author Modification
* -------------------------------------------------------------------
* 14/08/2003 Create.
* 07/04/2003 Lara MASCOLI Development of test cases [100..106]
* 08/18/2003 Denis DELAVEAU Updated test cases [100..106]
* 10/09/2003 P. Turlier Code cleaning
* 18/09/2003 S. Muraton Code cleaning
*
* (C) Copyright 2003 by Texas Instruments Incorporated, All Rights Reserved
*/
#include "rvm/rvm_api.h"
#include "rvm/rvm_use_id_list.h"
#include "r2d/lcd_messages_ti.h"
#include "r2d/lcd_messages.h"
#include "kpd/kpd_api.h"
#include "kpd_test_misc.h"
#include "tests/rv/rv_test_misc.h"
#include "kpd_test_misc1.h"
#include "kpd_test.h"
#include "tests/grd/grd_api.h"
#include "kpd_test_msg.h"
#include "tests/rtest/rtest_api.h"
#include <stdio.h>
#include <string.h>
/************************************************************************/
#ifndef _WINDOWS /* tests 104 to 106 are available only on target */
#if ((CHIPSET == 12) || (CHIPSET == 15)) /* tests 104 to 106 are available only on E-sample target */
/**
* keypad_notification100
*
* Call back function for second subscriber in kpd_test_misc100 function
*
* @param : msg_p : message received
*
* @return : void
*/
void keypad_notification100(void* msg_p)
{
/* 2nd client */
T_RV_HDR* msg_hdr_p = (T_RV_HDR*) msg_p;
T_TEST_PARAM* kpd_msg;
/* test message allocation */
if (rvf_get_msg_buf(rtest_get_mb_id(), sizeof(T_TEST_PARAM), KPD_MSG_1, (T_RVF_MSG**) &kpd_msg) == RVF_RED)
{
return;
}
/* initialize the message to send */
kpd_msg->hdr.msg_id = KPD_MSG_1;
if(msg_hdr_p->msg_id == KPD_TIMER_CHANGED_MSG)
{
/* timer change event */
T_KPD_TIMER_CHANGED_MSG* msg_changed_event_p = (T_KPD_TIMER_CHANGED_MSG*) msg_p;
kpd_msg->MessageReceived = (UINT32)msg_changed_event_p->timer_type;
kpd_test_trace("timer change event message for subscriber 2");
}
else
{
kpd_msg->MessageReceived = 0;
}
/* send the message to RTEST */
rvf_send_msg( rtest_get_addr_id(), (T_RV_HDR*) kpd_msg);
}
/**
* kpd_test_misc100
*
* Check all subscribers are informed when last subscriber have changed
* the long_press time value
*
* @param : NA
*
* @return : void
*/
void kpd_test_misc100(void)
{
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_LONG_PRESS, KPD_TIMER_LONG_PRESS};
UINT32 kpd_id_obtained[] = {1,1,1,0,0};
UINT32 kpd_range_waited[] = {1800, 2200};
BOOL KpdResult = TRUE;
UINT32 start_time = 0;
UINT32 end_time = 0;
UINT32 calculated_time = 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_100_REF);
strcpy (format->test_name, KPD_100_NAME);
strcpy (format->test_comment, KPD_100_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);
#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, 10, 0);
#else
kpd_define_key_notification(subscriber_id0,¬ified_keys, KPD_FIRST_PRESS_NOTIF|KPD_RELEASE_NOTIF|KPD_LONG_PRESS_NOTIF, 1000, 0);
#endif
/* registration for long_press time value change */
kpd_id_obtained[0] = (UINT32)kpd_register_for_timerchanges(subscriber_id0, KPD_TIMER_LONG_PRESS);
/* Kpdsub1TimerChange */
strcpy (format->var_name, KPD_100_VAR_SUB1);
KpdResult &= gen_display_table_result(&kpd_id_waited[0], &kpd_id_obtained[0], sizeof(kpd_id_waited[0]), format);
/** Subscriber 2 **/
/* Keypad registration */
kpd_return_path.addr_id = 0;
kpd_return_path.callback_func = keypad_notification100;
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_LONG_PRESS);
/* Kpdsub2TimerChange */
strcpy (format->var_name, KPD_100_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;
/* first press event => start timer*/
if(msg_key_event_p->key_info.press_state == KPD_FIRST_PRESS)
{
start_time = rvf_get_tick_count();
}
/* long press event => stop timer */
if(msg_key_event_p->key_info.press_state == KPD_LONG_PRESS)
{
end_time = rvf_get_tick_count();
}
display_message(msg_key_event_p, 2);
/* Key * pressed */
if( (msg_key_event_p->key_info.virtual_key_id == KPD_KEY_STAR) &&
(msg_key_event_p->key_info.state == KPD_KEY_RELEASED) )
{
/* Subscriber 1 change the long_press time value defined to 2 seconds*/
#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, 20, 0);
#else
kpd_id_obtained[2] = kpd_define_key_notification(subscriber_id0,¬ified_keys, KPD_FIRST_PRESS_NOTIF|KPD_RELEASE_NOTIF|KPD_LONG_PRESS_NOTIF, 2000, 0);
#endif
kpd_test_trace("===> Notification done - Wait for timerchange message");
}
/* long press event => stop timer */
if( (msg_key_event_p->key_info.press_state == KPD_KEY_RELEASED) &&
(msg_key_event_p->key_info.virtual_key_id != KPD_KEY_STAR) )
{
calculated_time = end_time - start_time;
calculated_time = RVF_TICKS_TO_MS(calculated_time);
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 == (T_KPD_TIMER_TYPE)KPD_TIMER_LONG_PRESS)
{
kpd_test_trace("Long 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 3 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_100_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_100_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_100_VAR_MSG2);
KpdResult &= gen_display_table_result(&kpd_id_waited[4], &kpd_id_obtained[4], sizeof(kpd_id_waited[4]), format);
/* KpdCalculatedTime */
strcpy (format->var_name, KPD_100_VAR_TIME);
KpdResult &= gen_display_table_result_compare_UINT(&kpd_range_waited[0], &kpd_range_waited[1], &calculated_time, 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);
}
/************************************************************************/
/**
* keypad_notification101
*
* Call back function for second subscriber in kpd_test_misc101 function
*
* @param : msg_p : message received
*
* @return : void
*/
void keypad_notification101(void* msg_p)
{
/* 2nd client */
T_RV_HDR* msg_hdr_p = (T_RV_HDR*) msg_p;
T_TEST_PARAM* kpd_msg;
if (rvf_get_msg_buf(rtest_get_mb_id(), sizeof(T_TEST_PARAM), KPD_MSG_1, (T_RVF_MSG**) &kpd_msg) == RVF_RED)
{
return;
}
/* initialize the message to send */
kpd_msg->hdr.msg_id = KPD_MSG_1;
if(msg_hdr_p->msg_id == KPD_TIMER_CHANGED_MSG)
{
/* timer change event */
T_KPD_TIMER_CHANGED_MSG* msg_changed_event_p = (T_KPD_TIMER_CHANGED_MSG*) msg_p;
kpd_msg->MessageReceived = msg_changed_event_p->timer_type;
kpd_test_trace("timer change event message for subscriber 2");
}
else
{
kpd_msg->MessageReceived = 0;
}
/* send the message to RTEST */
rvf_send_msg( rtest_get_addr_id(), (T_RV_HDR*) kpd_msg);
}
/**
* kpd_test_misc101
*
* Check all subscribers are informed when last subscriber have changed
* the repeat time value
*
* @param : NA
*
* @return : void
*/
void kpd_test_misc101(void)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -