Skip to content

Commit

Permalink
gamecard: add smarter delay to detection thread
Browse files Browse the repository at this point in the history
Lets us respond in a better way to sudden gamecard status changes during the 3 second wait period.
  • Loading branch information
DarkMatterCore committed Apr 21, 2024
1 parent ec99386 commit 56053e8
Showing 1 changed file with 19 additions and 7 deletions.
26 changes: 19 additions & 7 deletions source/core/gamecard.c
Original file line number Diff line number Diff line change
Expand Up @@ -695,17 +695,29 @@ static void gamecardDetectionThreadFunc(void *arg)
/* Free gamecard info before proceeding. */
gamecardFreeInfo(true);

/* Retrieve current gamecard insertion status. */
/* Only proceed if we're dealing with a status change. */
if (gamecardIsInserted())
/* Delay gamecard access by GAMECARD_ACCESS_DELAY full seconds. This is done to to avoid conflicts with HOS / sysmodules. */
/* We will periodically check if the gamecard is still inserted during this period. */
/* If the gamecard is taken out before reaching the length of the delay, we won't try to access it. */
time_t start = time(NULL);
bool gc_delay_passed = false;

while(gamecardIsInserted())
{
/* Don't access the gamecard immediately to avoid conflicts with HOS / sysmodules. */
utilsSleep(GAMECARD_ACCESS_DELAY);
time_t now = time(NULL);
time_t diff = (now - start);

if (diff >= GAMECARD_ACCESS_DELAY)
{
gc_delay_passed = true;
break;
}

/* Load gamecard info. */
gamecardLoadInfo();
utilsAppletLoopDelay();
}

/* Load gamecard info (if applicable). */
if (gc_delay_passed) gamecardLoadInfo();

/* Signal user mode gamecard status change event. */
ueventSignal(&g_gameCardStatusChangeEvent);
}
Expand Down

0 comments on commit 56053e8

Please sign in to comment.