|
我用的是CPU自带的扫描方式,在原来按键的基础上做的。基本思路还是原来的处理,只是加了一些键,用了25个键,以其中一个按键为例,代码修改大概是这样的:
1:s3c6410kbd.cpp先修改这个数组_BUTTON_EVENT{key_switch, //切换键
。
。
。
KEYNUM
}BUTTON_EVENT;
}
2:s3c6410kbd.cpp中再修改函数WaitforKeyEventThread()
HandleUp[key_switch]= CreateEvent(NULL,FALSE,FALSE,(TEXT("key_switch_UP")));
HandleDown[key_switch] = CreateEvent(NULL,FALSE,FALSE,(TEXT("key_switch_DOWN")));
if((NULL == HandleUp[key_switch]) || (NULL == HandleDown[key_switch]))
{
RETAILMSG(1,(TEXT("::Create key_switch button event failed!!\r\n")));
}
。
。
。
while( 1 )
{
singleNum = WaitForMultipleObjects( KEYNUM, HandleDown, FALSE, INFINITE);
//RETAILMSG(1,(TEXT("(singleNum is %d))**\r\n"),singleNum));
if ( ! ResetEvent( HandleDown[singleNum]) )
{
RETAILMSG(1,(TEXT("::ResetEvent Error !!\r\n")));
MessageBox(NULL, L"ResetEvent Error", L"Error", MB_OK);
}
switch( singleNum )
{
case key_switch:
scan_code=0x25; //VK_F1
SetEvent( m_hevInterrupt );
delay(10);
SetEvent( m_hevInterrupt );
//printf("Press key_9\r\n");
RETAILMSG(1,(TEXT("::key_switch !!\r\n")));
break;
3:在keyscan.cpp中扫描Key_Scan_Thread()中是这样改的
//if(KEY_EVENT[R][C]==KEY_EVENT[0][0])
if(( R==0) && (C==0) )
{
Key_Press_Down[key_switch]=1;
HandleUp_Down[key_switch]=TRUE;
SetEvent(HandleDown[key_switch]);
}
else
{
Key_Press_Down[key_switch]=0;
HandleUp_Down[key_switch]=FALSE;
}
4:keysan.cpp定义事件Create_Key_Event
//-------------定义事件----------------------------
//"key_switch" Button Event
HandleUp[key_switch]= CreateEvent(NULL,FALSE,FALSE,(TEXT("key_switch_UP")));
HandleDown[key_switch] = CreateEvent(NULL,FALSE,FALSE,(TEXT("key_switch_DOWN")));
if((NULL == HandleUp[key_switch]) || (NULL == HandleDown[key_switch]))
{
RETAILMSG(1,(TEXT("::Create key_switch button event failed!!\r\n")));
goto ButtonThreadFail;
}
其余24个键和这个方法一样处理的,
现象就是有时候能灵,有时候不灵,楼上的热心人帮看看吧 |
|