MCPcopy Create free account
hub / github.com/BernardoGiordano/Checkpoint / cartScan

Method cartScan

3ds/source/loader.cpp:652–700  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

650}
651
652void TitleCatalog::cartScan(void)
653{
654 TitleCatalog& self = get();
655
656 bool oldCardIn;
657 FSUSER_CardSlotIsInserted(&oldCardIn);
658
659 while (self.mDoCartScan.test_and_set()) {
660 bool cardIn = false;
661
662 FSUSER_CardSlotIsInserted(&cardIn);
663 if (cardIn != oldCardIn) {
664 bool power;
665 FSUSER_CardSlotGetCardIFPowerStatus(&power);
666 if (cardIn) {
667 if (!power) {
668 FSUSER_CardSlotPowerOn(&power);
669 }
670 while (!power && self.mDoCartScan.test_and_set()) {
671 FSUSER_CardSlotGetCardIFPowerStatus(&power);
672 }
673 svcSleepThread(500'000'000);
674 for (size_t i = 0; i < 10; i++) {
675 if ((oldCardIn = self.scanCard())) {
676 break;
677 }
678 }
679 }
680 else {
681 FSUSER_CardSlotPowerOff(&power);
682 if (!self.mLoading) {
683 {
684 std::lock_guard<std::mutex> lock(self.mMutex);
685 if (!self.mSaves.empty() && self.mSaves.at(0).mediaType() == MEDIATYPE_GAME_CARD) {
686 self.mIcons.erase(self.mSaves.at(0).id());
687 self.mSaves.erase(self.mSaves.begin());
688 }
689 if (!self.mExtdatas.empty() && self.mExtdatas.at(0).mediaType() == MEDIATYPE_GAME_CARD) {
690 self.mIcons.erase(self.mExtdatas.at(0).id());
691 self.mExtdatas.erase(self.mExtdatas.begin());
692 }
693 }
694 self.mGeneration.fetch_add(1);
695 }
696 oldCardIn = false;
697 }
698 }
699 }
700}
701
702void TitleCatalog::cartScanFlagTestAndSet(void)
703{

Callers

nothing calls this directly

Calls 8

scanCardMethod · 0.95
getFunction · 0.85
mediaTypeMethod · 0.80
atMethod · 0.80
emptyMethod · 0.45
eraseMethod · 0.45
idMethod · 0.45
beginMethod · 0.45

Tested by

no test coverage detected