⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kpd_test_misc1.c

📁 MMI层OBJ不能完全编译
💻 C
📖 第 1 页 / 共 4 页
字号:
/**
 * @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,
                  &notified_keys,
                  kpd_return_path);

#if (KPD_TIME_RESOLUTION == NORMAL_RESOLUTION)
   kpd_define_key_notification(subscriber_id0,&notified_keys, KPD_FIRST_PRESS_NOTIF|KPD_RELEASE_NOTIF|KPD_LONG_PRESS_NOTIF, 10, 0);
#else
   kpd_define_key_notification(subscriber_id0,&notified_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,
                  &notified_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,&notified_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,&notified_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 + -