📄 key.c
字号:
#include "std.h"
#include "buffer.h"
#include "key.h"
#include "Platform.h"
#include "sleep.h"
Un_Sizet_1 g_ucVK_Value; /* 转换好的标准按键信息 */
KeyboardDataStruct t_KeyboardData; /* 用于按键扫描的信息 */
KeyInfo g_KeyInfo;
Byte t_VirtualKeyBuffer[VIRTUALKEYBUFFERSIZE];
/* 所有按键处理都由这里进入
这里会读取已经转换好的标准键值,并进行处理
*/
void KeyProcess(void)
{
}
Bool tdClearKeyInFIFO(FifoHandle fh, Byte ucKeyCode)
{
Byte ucTemp, ucRealIndex;
Bool bHeadChanged = _FALSE_;
Bool bTailChanged = _FALSE_;
Bool bFinishSwap = _FALSE_;
if (fh->ucHead == fh->ucTail || ucKeyCode == 0)
return _FALSE_;
ucTemp = fh->ucHead;
ucRealIndex= fh->ucHead;
while (ucRealIndex != fh->ucTail)
{
if (!bFinishSwap)
{
if (fh->ucData[ucRealIndex] == ucKeyCode)
{
ucTemp = ucRealIndex;
while ((ucTemp != fh->ucTail) && (fh->ucData[ucTemp] == ucKeyCode))
{
ucTemp++;
if (ucTemp >= fh->ucSize)
ucTemp = 0;
}
if (ucTemp != fh->ucTail) //find fh->ucData[ucTemp] != ucKeyCode
{
fh->ucData[ucRealIndex] = fh->ucData[ucTemp];
fh->ucData[ucTemp] = ucKeyCode;
}
else //ucTemp == fh->ucTail
{
fh->ucData[ucRealIndex] = 0;
bFinishSwap = _TRUE_;
}
}
}
else
fh->ucData[ucRealIndex] = 0;
ucRealIndex++;
if (ucRealIndex >= fh->ucSize)
ucRealIndex = 0;
}
//reset tail
ucTemp = fh->ucHead;
while (ucTemp != fh->ucTail)
{
if (fh->ucData[ucTemp] == 0)
{
fh->ucTail = ucTemp;
break;
}
ucTemp++;
if (ucTemp >= fh->ucSize)
ucTemp = 0;
}
return _TRUE_;
}
Bool KeyboardScan(Void)
{
Un_Sizet_1 ucVirtualKey = GetKeyCode();
if ( ucVirtualKey )
{
if ( ucVirtualKey == t_KeyboardData.ucLastKey )
{
if ( t_KeyboardData.wFirstDelay &&
tdCompareTickCount(t_KeyboardData.dwLastTick, t_KeyboardData.wFirstDelay))
{
if(g_KeyInfo.bFastRepeatKeyEnable||g_KeyInfo.bSlowRepeatKeyEnable)
{
tdAddVirtualKey(ucVirtualKey);
g_KeyInfo.bRepeatKeyDown = _TRUE_;
}
//set g_KeyInfo.bKeyboardDown flag
g_KeyInfo.bKeyboardDown = _TRUE_;
if(g_KeyInfo.bSlowRepeatKeyEnable)
t_KeyboardData.dwLastTick = tdGetTickCount() - t_KeyboardData.wFirstDelay
+ t_KeyboardData.wRepeatDelay*4;
else
t_KeyboardData.dwLastTick = tdGetTickCount() - t_KeyboardData.wFirstDelay
+ t_KeyboardData.wRepeatDelay;
}
}
else
{
g_KeyInfo.bFastRepeatKeyEnable = _FALSE_;
g_KeyInfo.bSlowRepeatKeyEnable = _FALSE_;
g_KeyInfo.bRepeatKeyDown = _FALSE_;
tdAddVirtualKey( ucVirtualKey );
//set g_KeyInfo.bKeyboardDown flag
g_KeyInfo.bKeyboardDown = _TRUE_;
t_KeyboardData.ucLastKey = ucVirtualKey;
t_KeyboardData.dwLastTick = tdGetTickCount();
}
return _TRUE_;
}
else
{
if (g_KeyInfo.bKeyboardDown)
{
if (g_KeyInfo.bRepeatKeyDown) //clear repeat key in fifo
tdClearKeyInFIFO((FifoHandle)t_VirtualKeyBuffer, t_KeyboardData.ucLastKey);
g_KeyInfo.bKeyboardDown = _FALSE_;
g_KeyInfo.bRepeatKeyDown = _FALSE_;
if (g_KeyInfo.bKeyStatusUpEnable)
tdAddVirtualKey(t_KeyboardData.ucLastKey | _VK_STATUS_UP_);
}
t_KeyboardData.ucLastKey = 0;
return _FALSE_;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -