Another attempt to make quick starting (aborting) more reliable

This commit is contained in:
Maschell 2024-06-29 19:25:17 +02:00
parent 98bb92fdb2
commit 645dacf630

View File

@ -1,13 +1,10 @@
#include <malloc.h>
#include "QuickStartUtils.h"
#include "BootUtils.h"
#include "MenuUtils.h"
#include "QuickStartUtils.h"
#include "logger.h"
#include <coreinit/exit.h>
#include <coreinit/foreground.h>
#include <coreinit/launch.h>
#include <coreinit/memdefaultheap.h>
#include <coreinit/thread.h>
#include <nn/acp/title.h>
@ -118,11 +115,12 @@ private:
class QuickStartAutoAbort {
public:
QuickStartAutoAbort() {
OSCreateAlarm(&mAlarm);
OSCreateAlarm(&mDRCConnectedAlarm);
OSSetPeriodicAlarm(&mDRCConnectedAlarm,
OSSecondsToTicks(10),
OSGetTime() + OSSecondsToTicks(10),
OSSecondsToTicks(1),
&AbortOnDRCDisconnect);
OSCreateAlarm(&mAlarm);
OSSetAlarm(&mAlarm, OSSecondsToTicks(120), AbortQuickStartTitle);
mDRCConnected = IsDRCConnected();
}
@ -130,6 +128,9 @@ public:
OSCancelAlarm(&mDRCConnectedAlarm);
OSCancelAlarm(&mAlarm);
OSWaitAlarm(&mDRCConnectedAlarm);
OSWaitAlarm(&mAlarm);
// Reconnect the DRC if it was connected at launch but then disconnected;
if (mDRCConnected && !IsDRCConnected()) {
DEBUG_FUNCTION_LINE("Wake up GamePad");
@ -140,12 +141,14 @@ public:
static bool IsDRCConnected() {
CCRCDCDrcState state = {};
CCRCDCSysGetDrcState(CCR_CDC_DESTINATION_DRC0, &state);
return state.state != 0;
if (CCRCDCSysGetDrcState(CCR_CDC_DESTINATION_DRC0, &state) != 0) {
return false;
}
return true;
}
static void AbortQuickStartTitle(OSAlarm *alarm, OSContext *) {
DEBUG_FUNCTION_LINE("Selecting a title takes too long, lets abort the quick start menu");
DEBUG_FUNCTION_LINE_INFO("GamePad was disconnected, lets abort the quick start menu");
CCRSysCaffeineBootCheckAbort();
}