📄 kpd_scan_functions.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 + -