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

📄 kpd_scan_functions.c

📁 MMI层OBJ不能完全编译
💻 C
字号:
/**
 * @file   kpd_scan_functions.c
 *
 * Implementation of hardware keypad interface functions.
 * These functions implement the keypad interface with the windows.
 *
 * @author   Laurent Sollier (l-sollier@ti.com)
 * @version 0.1
 */

/*
 * History:
 *
 *   Date          Author       Modification
 *  ----------------------------------------
 *  10/10/2001     L Sollier    Create
 *
 *
 * (C) Copyright 2001 by Texas Instruments Incorporated, All Rights Reserved
 */
#include "kpd/kpd_scan_functions.h"
#include "kpd/kpd_cfg.h"
#include "kpd/kpd_virtual_key_table_mgt.h"
#include "kpd/kpd_env.h"
#include "kpd/kpd_messages_i.h"
#include "kpd/pc/kpd_riviera_env.h"
#include "rvf/rvf_api.h"
#include "rvm/rvm_use_id_list.h"
#include <windows.h>

/* External declaration */
extern T_KPD_ENV_CTRL_BLK* kpd_env_ctrl_blk;


static T_KPD_PHYSICAL_KEY_ID key = KPD_PKEY_NULL;
static BOOL value_read = FALSE;
static BOOL acknowledge_key_pressed = TRUE;


/**
 * @name Functions implementation
 *
 */
/*@{*/

/**
 * function: kpd_initialize_keypad_hardware
 */
void kpd_initialize_keypad_hardware(void)
{
   /* Display Mobile */
   kpd_show_gsm();
}

/**
 * function: kpd_acknowledge_key_pressed
 */
void kpd_acknowledge_key_pressed(void)
{
   acknowledge_key_pressed = TRUE;
}

/**
 * function: kpd_key_pressed
 */
void kpd_key_pressed(UINT8 value)
{
   T_RVF_MB_STATUS mb_status;
   T_KPD_KEY_PRESSED_MSG* msg_key_pressed;


   rvf_send_trace("KPD: Key Pressed = ", 19, (UINT32) value,
                  RV_TRACE_LEVEL_DEBUG_LOW,
                  KPD_USE_ID);

   /* If keypad is not started, return immediately */
   if ( (kpd_env_ctrl_blk == 0) || (kpd_env_ctrl_blk->swe_is_initialized == FALSE) )
      return;

   /* If key is not yet read by keypad task, discard key */
   if (acknowledge_key_pressed == FALSE)
      return;

   /* Send message to the keypad task */

   /* Reserve memory for message */
   mb_status = rvf_get_buf (kpd_env_ctrl_blk->prim_id, sizeof(T_KPD_KEY_PRESSED_MSG), (void **) &msg_key_pressed);

   if (mb_status != RVF_RED) /* Memory allocation success */
   {
      /* Fill the message */
      msg_key_pressed->hdr.msg_id = KPD_KEY_PRESSED_MSG;
      msg_key_pressed->value = value;
      if (mb_status == RVF_GREEN)
         msg_key_pressed->key_to_process = TRUE;
      else
         msg_key_pressed->key_to_process = FALSE;

      /* Send message to the keypad task */
      rvf_send_msg(kpd_env_ctrl_blk->addr_id, msg_key_pressed);
   }
   else
   {
      KPD_SEND_TRACE("KPD: Not enough memory to send new key pressed", RV_TRACE_LEVEL_ERROR );
   }
   value_read = FALSE;
   acknowledge_key_pressed = FALSE;
}


/**
 * function: kpd_key_released
 */
void kpd_key_released(void)
{
   /* If keypad is not started, return immediately */
   if ( (kpd_env_ctrl_blk == 0) || (kpd_env_ctrl_blk->swe_is_initialized == FALSE) )
      return;

   while (value_read == FALSE)
   {
      Sleep(1);
   }

   key = KPD_PKEY_NULL;

   KPD_SEND_TRACE("KPD: Key Released", RV_TRACE_LEVEL_DEBUG_LOW);
}


/**
 * function: kpd_scan_keypad
 */
T_KPD_PHYSICAL_KEY_ID kpd_scan_keypad(void)
{
   T_KPD_PHYSICAL_KEY_ID ret;

   ret = key;
   value_read = TRUE;

   return ret;
}

/**
 * function: kpd_set_key_value
 */
void kpd_set_key_value(T_KPD_PHYSICAL_KEY_ID value)
{
   key = value;
}




/*@}*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -