Refactor chronometer functions

This commit is contained in:
Aurora Wright 2017-06-04 18:52:52 +02:00
parent cab54d1b31
commit 4429cb2095

View File

@ -36,6 +36,10 @@
static void startChrono(void) static void startChrono(void)
{ {
bool isChronoStarted = false;
if(isChronoStarted) return;
REG_TIMER_CNT(0) = 0; //67MHz REG_TIMER_CNT(0) = 0; //67MHz
for(u32 i = 1; i < 4; i++) REG_TIMER_CNT(i) = 4; //Count-up for(u32 i = 1; i < 4; i++) REG_TIMER_CNT(i) = 4; //Count-up
@ -43,6 +47,8 @@ static void startChrono(void)
REG_TIMER_CNT(0) = 0x80; //67MHz; enabled REG_TIMER_CNT(0) = 0x80; //67MHz; enabled
for(u32 i = 1; i < 4; i++) REG_TIMER_CNT(i) = 0x84; //Count-up; enabled for(u32 i = 1; i < 4; i++) REG_TIMER_CNT(i) = 0x84; //Count-up; enabled
isChronoStarted = true;
} }
static u64 chrono(void) static u64 chrono(void)
@ -58,6 +64,7 @@ static u64 chrono(void)
u32 waitInput(bool isMenu) u32 waitInput(bool isMenu)
{ {
static u64 dPadDelay = 0ULL; static u64 dPadDelay = 0ULL;
u64 initialValue = 0ULL;
u32 key, u32 key,
oldKey = HID_PAD; oldKey = HID_PAD;
@ -65,6 +72,7 @@ u32 waitInput(bool isMenu)
{ {
dPadDelay = dPadDelay > 0ULL ? 87ULL : 143ULL; dPadDelay = dPadDelay > 0ULL ? 87ULL : 143ULL;
startChrono(); startChrono();
initialValue = chrono();
} }
while(true) while(true)
@ -79,7 +87,7 @@ u32 waitInput(bool isMenu)
continue; continue;
} }
if(key == oldKey && (!isMenu || (!(key & DPAD_BUTTONS) || chrono() < dPadDelay))) continue; if(key == oldKey && (!isMenu || (!(key & DPAD_BUTTONS) || chrono() - initialValue < dPadDelay))) continue;
//Make sure the key is pressed //Make sure the key is pressed
u32 i; u32 i;
@ -104,7 +112,10 @@ void mcuPowerOff(void)
void wait(u64 amount) void wait(u64 amount)
{ {
startChrono(); startChrono();
while(chrono() < amount);
u64 initialValue = chrono();
while(chrono() - initialValue < amount);
} }
void error(const char *fmt, ...) void error(const char *fmt, ...)