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