Add hidKeysDownRepeat

This commit is contained in:
TuxSH 2020-05-14 20:01:30 +01:00 committed by fincs
parent 69483a473a
commit 1bafb08f34
2 changed files with 47 additions and 2 deletions

View File

@ -91,6 +91,13 @@ Result hidInit(void);
/// Exits HID.
void hidExit(void);
/**
* @brief Sets the key repeat parameters for @ref hidKeysRepeat.
* @param delay Initial delay.
* @param interval Repeat interval.
*/
void hidSetRepeatParameters(u32 delay, u32 interval);
/// Scans HID for input data.
void hidScanInput(void);
@ -109,7 +116,14 @@ u32 hidKeysHeld(void);
u32 hidKeysDown(void);
/**
* @brief Returns a bitmask of newly released buttons, this frame.
* @brief Returns a bitmask of newly pressed or repeated buttons, this frame.
* Individual buttons can be extracted using binary AND.
* @return 32-bit bitmask of newly pressed or repeated buttons.
*/
u32 hidKeysDownRepeat(void);
/**
* @brief Returns a bitmask of newly released buttons, this frame.
* Individual buttons can be extracted using binary AND.
* @return 32-bit bitmask of newly released buttons.
*/

View File

@ -21,7 +21,8 @@ Handle hidEvents[5];
vu32* hidSharedMem;
static u32 kOld, kHeld, kDown, kUp;
static u32 kOld, kHeld, kDown, kUp, kRepeat;
static u32 kDelay = 30, kInterval = 15, kCount = 30;
static touchPosition tPos;
static circlePosition cPos;
static accelVector aVec;
@ -104,6 +105,14 @@ void hidExit(void)
}
}
void hidSetRepeatParameters(u32 delay, u32 interval)
{
kDelay = delay;
kInterval = interval;
kCount = kDelay;
kRepeat = 0;
}
void hidWaitForEvent(HID_Event id, bool nextEvent)
{
if(id>=HIDEVENT_MAX)return;
@ -195,6 +204,21 @@ void hidScanInput(void)
kDown = (~kOld) & kHeld;
kUp = kOld & (~kHeld);
if (kDelay)
{
if (kHeld != kOld)
{
kCount = kDelay;
kRepeat = kDown;
}
if (--kCount == 0)
{
kCount = kInterval;
kRepeat = kHeld;
}
}
Id = hidSharedMem[66 + 4];//Accelerometer
if(Id>7)Id=7;
if(hidCheckSectionUpdateTime(&hidSharedMem[66], Id)==0)
@ -220,6 +244,13 @@ u32 hidKeysDown(void)
return kDown;
}
u32 hidKeysDownRepeat(void)
{
u32 tmp = kRepeat;
kRepeat = 0;
return tmp;
}
u32 hidKeysUp(void)
{
return kUp;