Skip to content

Commit 70ad718

Browse files
committed
Wait for MMCE to reattach
1 parent 15a51dc commit 70ad718

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

libogc/mmce.c

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ distribution.
4040
typedef struct {
4141
s32 result;
4242
bool attached;
43+
bool reattach;
4344
u8 cmd[3];
4445
u32 cmdLen;
4546
u32 mode;
@@ -184,6 +185,7 @@ s32 MMCE_SetAccessMode(s32 chan, u8 mode)
184185
if (!err) {
185186
MMCEControlBlock *cb = &__MMCE[chan];
186187
cb->result = MMCE_RESULT_BUSY;
188+
cb->reattach = true;
187189
cb->repeat = 0;
188190

189191
if (chan < EXI_CHANNEL_2)
@@ -320,9 +322,10 @@ s32 MMCE_SetGameID(s32 chan, const char gameID[10])
320322
static s32 ExiHandler(s32 chan, s32 dev)
321323
{
322324
MMCEControlBlock *cb = &__MMCE[chan];
325+
cb->reattach = false;
323326

324327
if (!cb->repeat) {
325-
cb->result = MMCE_RESULT_READY;
328+
cb->result = !EXI_Probe(chan) ? MMCE_RESULT_NOCARD : MMCE_RESULT_READY;
326329
LWP_ThreadBroadcast(cb->syncQueue);
327330

328331
if (chan < EXI_CHANNEL_2)
@@ -455,11 +458,16 @@ s32 MMCE_WriteSectors(s32 chan, u32 sector, u16 numSectors, const void *buffer)
455458
static s32 ExtHandler(s32 chan, s32 dev)
456459
{
457460
MMCEControlBlock *cb = &__MMCE[chan];
458-
459-
EXI_RegisterEXICallback(chan, NULL);
460461
cb->attached = false;
461-
cb->result = MMCE_RESULT_NOCARD;
462-
LWP_ThreadBroadcast(cb->syncQueue);
462+
463+
if (cb->reattach) {
464+
cb->exiCallback = NULL;
465+
EXI_RegisterEXICallback(chan, ExiHandler);
466+
} else {
467+
EXI_RegisterEXICallback(chan, NULL);
468+
cb->result = MMCE_RESULT_NOCARD;
469+
LWP_ThreadBroadcast(cb->syncQueue);
470+
}
463471

464472
return TRUE;
465473
}
@@ -574,6 +582,7 @@ static bool __mmce_shutdown(DISC_INTERFACE *disc)
574582
}
575583

576584
__MMCE[chan].attached = false;
585+
__MMCE[chan].reattach = false;
577586
EXI_Detach(chan);
578587
return true;
579588
}

0 commit comments

Comments
 (0)