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

📄 hw_vx979key.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
字号:
/******************************************************************/
/*   Copyright (C) 2007 ROCK-CHIPS FUZHOU . All Rights Reserved.  */
/*******************************************************************
File :  hw_vx979key.c
Desc :  VX979按键消息\接口函数的实现

Author : huangxinyu
Date : 2007-07-09
Notes :

$Log: hw_vx979key.c,v $
Revision 1.4  2008/06/25 06:24:02  HSL
修改按键检测流程,按键检测统一集中在 RockKeyScanning 函数里面.

Revision 1.3  2008/06/23 09:54:06  HSL
增加 AD按键的支持,修改按键消息发送和长按检测接口.

Revision 1.2  2008/06/19 04:43:32  Administrator
代码整理!

Revision 1.1.1.1  2008/05/07 04:15:08  Administrator
no message

Revision 1.1.1.1  2008/03/06 13:29:06  Lingzhaojun
no message

Revision 1.1  2007/11/26 14:31:30  Huangxinyu
增加vx979key目录

Revision 1.4  2007/10/15 09:16:37  Huangxinyu
根据RK27提交修改driver

Revision 1.3  2007/10/08 02:38:45  Lingzhaojun
添加版本自动注释脚本

*********************************************************************/

#include "include.h"
#include "hw_include.h"
#include "hw_gpio.h"
#include "hw_vx979key.h"
#include "keyglobal.h"

#if (KEY_TYPE == VX979KEY)

static  UINT16  gKeyPortState;     /* 用于记录 按键 PIO 的状态,相应位为高表示按下,相应位为低表示没有按下或弹起 */
static  UINT8   gKeyPioState;               /*  用于记录GPIO口用作keyboard之前的状态,在反初始化时可恢复 */
extern unsigned short AdcValue[4];

KEYEXT  UINT16   gKeyIOMasks[] =
    {PIO_MENU_MASK, PIO_FFW_MASK, PIO_FFD_MASK, PIO_UP_MASK,  PIO_PLAY_MASK };
/**************************************************************************
* 函数描述: 导航键初始化
* 入口参数: 无
* 出口参数: 无
* 返回值:   无
***************************************************************************/
void RockKey_PowerOnInit(void)
{
    gKeyPioState = GPIO_GetPortDirection(PIO_KEY);
    GPIO_PullUpDown(GPIOPortA_Pin7, GPIOPort_NoPull);
    GPIO_SetPinDirection(GPIOPortA_Pin7, GPIO_IN);
    GPIO_SetPinDirection(GPIOPortC_Pin1, GPIO_IN);
    GPIO_SetPinDirection(GPIOPortC_Pin2, GPIO_IN);
    GPIO_SetPinDirection(GPIOPortC_Pin3, GPIO_IN);
    GPIO_SetPinDirection(GPIOPortC_Pin4, GPIO_IN);
    GPIO_SetPinDirection(GPIOPortC_Pin6, GPIO_IN);
    GPIO_SetPinLevel(GPIOPortC_Pin1, GPIO_LOW);
    GPIO_SetPinLevel(GPIOPortC_Pin2, GPIO_LOW);
    GPIO_SetPinLevel(GPIOPortC_Pin3, GPIO_LOW);
    GPIO_SetPinLevel(GPIOPortC_Pin4, GPIO_LOW);
    GPIO_SetPinLevel(GPIOPortC_Pin6, GPIO_LOW);

}

/**************************************************************************
* 函数描述: 导航键硬件检测
* 入口参数: 无
* 出口参数: 无
* 返回值:   无
***************************************************************************/
void RockKeyScanning(void)
{
    UINT8 pioData;
    UINT16 keys;
    UINT16 tempADCValue;

    //GPIO_SetPortDirection(PIO_KEY, 0x0); // set key port to input

    pioData = GPIO_GetPortLevel(PIO_KEY);
    for (keys = 0; keys < (UINT8)MAX_PIO_KEYS; keys++)
    {
        if ((pioData & gKeyIOMasks[keys]) == 0)         //为低,按键没有按下
        {
            if (gKeyPortState & (0x0001 << keys))      /* 原来是按下 状态 */
            {
                gKeyPortState &= ~(0x0001 << keys);
                // RockStopTimer( TID_KEY_BASE-KEY_SCAN_MIN+keys );
                RockKeySendKeyMsg(0 , KEY_SCAN_MIN + keys );
            }
        }
        else /* 按键按下 */
        {
            if ((gKeyPortState & (0x0001 << keys)) == 0) /* 原来是 弹起 状态 */
            {
                gKeyPortState |= 0x0001 << keys;
                RockKeySendKeyMsg(1 , KEY_SCAN_MIN + keys );
            }
        }
    }
#if 1
    //  GPIO_SetPinDirection(GPIOPortA_Pin7, GPIO_IN);
    pioData = GPIO_GetPinLevel(GPIOPortA_Pin7);
    if (pioData == 1)    //
    {
        if ((gKeyPortState & (0x0001 << MAX_PIO_KEYS)) == 0)  // 原来是弹起状态
        {
            gKeyPortState |= 0x0001 << MAX_PIO_KEYS;
            RockKeySendKeyMsg(1, MAX_PIO_KEYS );
        }
    }
    else
    {
        if (gKeyPortState & (0x0001 << MAX_PIO_KEYS))  // 原来是按下状态
        {
            gKeyPortState &= ~(0x0001 << MAX_PIO_KEYS);
            RockKeySendKeyMsg(0, MAX_PIO_KEYS );
        }
    }
#endif

#if 1
    //ADC_Start(KEYBOARD_ADC, NULL);   // KEYBOARD_ADC
    //DelayMs_nops(5);
    //ADC_ReadData(&tempADCValue);
    //if( tempADCValue < 300 )
    if (AdcValue[KEYBOARD_ADC] < 300)
    {
        if ((gKeyPortState & (0x0001 << (MAX_PIO_KEYS + 1))) == 0)  // 原来是弹起状态
        {
            gKeyPortState |= 0x0001 << (MAX_PIO_KEYS + 1);
            RockKeySendKeyMsg(1, (MAX_PIO_KEYS + 1) );
        }
    }
    else
    {
        if (gKeyPortState & (0x0001 << (MAX_PIO_KEYS + 1)))  // 原来是按下状态
        {
            gKeyPortState &= ~(0x0001 << (MAX_PIO_KEYS + 1));
            RockKeySendKeyMsg(0, (MAX_PIO_KEYS + 1) );
        }
    }

#endif

}

/**************************************************************************
* 函数描述: 导航键反初始化
* 入口参数: 无
* 出口参数: 无
* 返回值:   无
***************************************************************************/
void RockKey_PowerOffDeinit(void)
{
    GPIO_SetPortDirection(PIO_KEY, gKeyPioState); // restore key port
}

#endif

⌨️ 快捷键说明

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