Add hidKeysDownRepeat

This commit is contained in:
TuxSH 2020-05-14 20:01:30 +01:00
parent 69483a473a
commit 6ef1dd9d4a
2 changed files with 47 additions and 2 deletions

View File

@ -91,6 +91,13 @@ Result hidInit(void);
/// Exits HID. /// Exits HID.
void hidExit(void); 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. /// Scans HID for input data.
void hidScanInput(void); void hidScanInput(void);
@ -109,7 +116,14 @@ u32 hidKeysHeld(void);
u32 hidKeysDown(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. * Individual buttons can be extracted using binary AND.
* @return 32-bit bitmask of newly released buttons. * @return 32-bit bitmask of newly released buttons.
*/ */

View File

@ -21,7 +21,8 @@ Handle hidEvents[5];
vu32* hidSharedMem; 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 touchPosition tPos;
static circlePosition cPos; static circlePosition cPos;
static accelVector aVec; 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) void hidWaitForEvent(HID_Event id, bool nextEvent)
{ {
if(id>=HIDEVENT_MAX)return; if(id>=HIDEVENT_MAX)return;
@ -195,6 +204,21 @@ void hidScanInput(void)
kDown = (~kOld) & kHeld; kDown = (~kOld) & kHeld;
kUp = 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 Id = hidSharedMem[66 + 4];//Accelerometer
if(Id>7)Id=7; if(Id>7)Id=7;
if(hidCheckSectionUpdateTime(&hidSharedMem[66], Id)==0) if(hidCheckSectionUpdateTime(&hidSharedMem[66], Id)==0)
@ -220,6 +244,13 @@ u32 hidKeysDown(void)
return kDown; return kDown;
} }
u32 hidKeysDownRepeat(void)
{
u32 tmp = kRepeat;
kRepeat = 0;
return tmp;
}
u32 hidKeysUp(void) u32 hidKeysUp(void)
{ {
return kUp; return kUp;