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

📄 pckey.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
字号:
// pckey.c : 模拟 按键
// 或者模拟所有的外围设备寄存器.
//通过地址来定位.

/******************************************************************/
#include "include.h"

/******************************************************************/
#define PCK_MAX_UNHANDLE_KEYMSG                             3

//代码调度的堆空间
INT32U      PCKeyIOMap = 0;

INT32U      PCKeyIOValudBake;

/*--------------------------------------*/
/******************************************************************/
#if 0
void RockKeySendKeyMsg(INT16U press , INT16U scanCode)
{
    if (RockOSCheckMsgCount(MBGUI , MS_ISRGU_KeyInd) < PCK_MAX_UNHANDLE_KEYMSG)
    {
        INT32U  keyParam ;
        keyParam  = press;
        keyParam = (keyParam << 16) | scanCode;
        RockOSSendMsg(MBGUI , MS_ISRGU_KeyInd , (void*)keyParam);
    }
}
#endif

void RockKeyPioScanning(void)
{
    INT32U      pioData;
    INT16U      keys;
    INT32U      changedKeys;
    INT32U      haveKeyPress = 0;    //080605,huangsl,
    
    pioData = read_mem(PCK_GPIO_KEY);  //该版本都用group0 的io
    changedKeys = PCKeyIOValudBake ^ pioData;

    if( pioData )   //!=0,表明目前有按键 按下.
        haveKeyPress = 1;
    
    if (changedKeys)
    {
        for (keys = 0; keys < PCK_SCANCODE_MAX; keys++)
        {
            if (changedKeys & (0x0001 << keys)) //按键发生了变化
            {
                if (pioData & (0x0001 << keys)) //现在 按下
                {
			//		TR("Press Key[%d],IO Data=0x%x" , keys , pioData);
                    RockKeySendKeyMsg(1 , keys );
                }
                else    //现在弹起.
                {
			//		TR("Release Key[%d],IO Data=0x%x" , keys , pioData);
                    RockKeySendKeyMsg(0, keys );
                }
            }
        }
        PCKeyIOValudBake = pioData;
    }

    //080612,huangsl,用于产生长按键和 弹起检测.
    RockKeyTimerCallback(haveKeyPress );
}


// 1: down , 0 : up
void PCKeySetKeyState(int   keyScancode , int UporDown)
{
    if (!OSRunning)
        return ;

    if (keyScancode < PCK_SCANCODE_MAX)
    {
        if (UporDown == PCK_KSTATE_DOWN)
        {
            PCKeyIOMap |= (0X0001 << keyScancode);
        }
        else
        {
            PCKeyIOMap &= ~(0X0001 << keyScancode);
        }
    }

#if 1
    RockPcRegClearAll();
//            PCCoreSystemRestart(0);
#endif

}


⌨️ 快捷键说明

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