mirror of
https://github.com/openmoh/openmohaa.git
synced 2025-04-28 21:57:57 +03:00
76 lines
No EOL
1.9 KiB
C
76 lines
No EOL
1.9 KiB
C
#include "..\nonport.h"
|
|
#include "key.h"
|
|
|
|
#define KEY_REPEAT_START 25 // Number of frames before start of key repeat
|
|
#define KEY_REPEAT_SPAN 10 // Number of frames of key repeat interval
|
|
|
|
static KeyInformation KeyInfo;
|
|
|
|
/*---------------------------------------------------------------------------*
|
|
Name: KeyRead
|
|
|
|
Description: Edit key input information
|
|
Detect pressing trigger, releasing trigger, and pressing hold repeat
|
|
*---------------------------------------------------------------------------*/
|
|
const KeyInformation * KeyRead(void)
|
|
{
|
|
static u16 repeat_count[12];
|
|
int i;
|
|
u16 r;
|
|
|
|
r = PAD_Read();
|
|
KeyInfo.trg = 0x0000;
|
|
KeyInfo.up = 0x0000;
|
|
KeyInfo.rep = 0x0000;
|
|
|
|
for( i = 0 ; i < 12 ; i ++ )
|
|
{
|
|
if( r & ( 0x0001 << i ) )
|
|
{
|
|
if( !( KeyInfo.cnt & ( 0x0001 << i ) ) )
|
|
{
|
|
KeyInfo.trg |= ( 0x0001 << i ); // Pressing trigger input
|
|
repeat_count[ i ] = 1;
|
|
}
|
|
else
|
|
{
|
|
if( repeat_count[ i ] > KEY_REPEAT_START )
|
|
{
|
|
KeyInfo.rep |= ( 0x0001 << i ); // Pressing hold repeat
|
|
repeat_count[ i ] = KEY_REPEAT_START - KEY_REPEAT_SPAN;
|
|
}
|
|
else
|
|
{
|
|
repeat_count[ i ] ++;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if( KeyInfo.cnt & ( 0x0001 << i ) )
|
|
{
|
|
KeyInfo.up |= ( 0x0001 << i ); // Releasing trigger input
|
|
}
|
|
}
|
|
}
|
|
KeyInfo.cnt = r; // Unprocessed key input
|
|
|
|
return &KeyInfo;
|
|
}
|
|
|
|
void WaitForA(void)
|
|
{
|
|
while(1)
|
|
{
|
|
SVC_WaitVBlankIntr();
|
|
KeyRead();
|
|
if(KEY_A_PRESSED(&KeyInfo))
|
|
break;
|
|
}
|
|
}
|
|
|
|
void KeyInit(void)
|
|
{
|
|
// empty call of key input information acquisition (pushing the A button in IPL)
|
|
KeyRead();
|
|
} |