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

📄 kpd_test_misc1.c

📁 MMI层OBJ不能完全编译
💻 C
📖 第 1 页 / 共 4 页
字号:
   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,
                  &notified_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,&notified_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,&notified_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,
                  &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_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,&notified_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,&notified_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,
                  &notified_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,
					&notified_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,
					&notified_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 + -