mirror of
https://github.com/Atmosphere-NX/Atmosphere
synced 2024-12-22 20:31:14 +00:00
pf2: drv::IsDetected
This commit is contained in:
parent
a2f611edb7
commit
60ea1dade2
5 changed files with 63 additions and 0 deletions
|
@ -23,6 +23,7 @@ namespace ams::prfile2::pdm {
|
||||||
namespace part {
|
namespace part {
|
||||||
|
|
||||||
pdm::Error CheckDataEraseRequest(HandleType part_handle, bool *out);
|
pdm::Error CheckDataEraseRequest(HandleType part_handle, bool *out);
|
||||||
|
pdm::Error CheckMediaDetect(HandleType part_handle, bool *out);
|
||||||
pdm::Error CheckMediaInsert(HandleType part_handle, bool *out);
|
pdm::Error CheckMediaInsert(HandleType part_handle, bool *out);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -30,6 +31,7 @@ namespace ams::prfile2::pdm {
|
||||||
namespace disk {
|
namespace disk {
|
||||||
|
|
||||||
pdm::Error CheckDataEraseRequest(HandleType disk_handle, bool *out);
|
pdm::Error CheckDataEraseRequest(HandleType disk_handle, bool *out);
|
||||||
|
pdm::Error CheckMediaDetect(HandleType disk_handle, bool *out);
|
||||||
pdm::Error CheckMediaInsert(HandleType disk_handle, bool *out);
|
pdm::Error CheckMediaInsert(HandleType disk_handle, bool *out);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@ namespace ams::prfile2::drv {
|
||||||
|
|
||||||
pf::Error Initialize(Volume *volume);
|
pf::Error Initialize(Volume *volume);
|
||||||
|
|
||||||
|
bool IsDetected(Volume *volume);
|
||||||
bool IsInserted(Volume *volume);
|
bool IsInserted(Volume *volume);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,31 @@ namespace ams::prfile2::pdm::disk {
|
||||||
return pdm::Error_Ok;
|
return pdm::Error_Ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pdm::Error CheckMediaDetect(HandleType disk_handle, bool *out) {
|
||||||
|
/* Check parameters. */
|
||||||
|
Disk *disk = GetDisk(disk_handle);
|
||||||
|
if (out == nullptr || disk == nullptr) {
|
||||||
|
return pdm::Error_InvalidParameter;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Default to no status change detected. */
|
||||||
|
*out = false;
|
||||||
|
|
||||||
|
/* Detect status change via disk nbc detect. */
|
||||||
|
volatile NonBlockingProtocolType nbc;
|
||||||
|
do {
|
||||||
|
do {
|
||||||
|
nbc = disk->nbc;
|
||||||
|
} while ((nbc & 1) != 0);
|
||||||
|
if (nbc != disk->nbc_detect) {
|
||||||
|
*out = true;
|
||||||
|
}
|
||||||
|
} while (nbc != disk->nbc);
|
||||||
|
|
||||||
|
return pdm::Error_Ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
pdm::Error CheckMediaInsert(HandleType disk_handle, bool *out) {
|
pdm::Error CheckMediaInsert(HandleType disk_handle, bool *out) {
|
||||||
/* Check parameters. */
|
/* Check parameters. */
|
||||||
Disk *disk = GetDisk(disk_handle);
|
Disk *disk = GetDisk(disk_handle);
|
||||||
|
|
|
@ -37,6 +37,33 @@ namespace ams::prfile2::pdm::part {
|
||||||
return pdm::disk::CheckDataEraseRequest(part->disk_handle, out);
|
return pdm::disk::CheckDataEraseRequest(part->disk_handle, out);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pdm::Error CheckMediaDetect(HandleType part_handle, bool *out) {
|
||||||
|
/* Check parameters. */
|
||||||
|
Partition *part = GetPartition(part_handle);
|
||||||
|
if (out == nullptr || part == nullptr) {
|
||||||
|
return pdm::Error_InvalidParameter;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get the disk (unsafe/not checked). */
|
||||||
|
Disk *disk = GetDiskUnsafe(part->disk_handle);
|
||||||
|
|
||||||
|
/* Default to no status change detected. */
|
||||||
|
*out = false;
|
||||||
|
|
||||||
|
/* Detect status change via partition nbc detect. */
|
||||||
|
volatile NonBlockingProtocolType nbc;
|
||||||
|
do {
|
||||||
|
do {
|
||||||
|
nbc = disk->nbc;
|
||||||
|
} while ((nbc & 1) != 0);
|
||||||
|
if (nbc != part->nbc_detect) {
|
||||||
|
*out = true;
|
||||||
|
}
|
||||||
|
} while (nbc != disk->nbc);
|
||||||
|
|
||||||
|
return pdm::Error_Ok;
|
||||||
|
}
|
||||||
|
|
||||||
pdm::Error CheckMediaInsert(HandleType part_handle, bool *out) {
|
pdm::Error CheckMediaInsert(HandleType part_handle, bool *out) {
|
||||||
/* Check parameters. */
|
/* Check parameters. */
|
||||||
Partition *part = GetPartition(part_handle);
|
Partition *part = GetPartition(part_handle);
|
||||||
|
|
|
@ -42,6 +42,14 @@ namespace ams::prfile2::drv {
|
||||||
return pf::Error_Ok;
|
return pf::Error_Ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IsDetected(Volume *volume) {
|
||||||
|
/* Check detect status changed. */
|
||||||
|
/* NOTE: Error is not checked here. */
|
||||||
|
bool detected = false;
|
||||||
|
pdm::part::CheckMediaDetect(volume->partition_handle, std::addressof(detected));
|
||||||
|
return detected;
|
||||||
|
}
|
||||||
|
|
||||||
bool IsInserted(Volume *volume) {
|
bool IsInserted(Volume *volume) {
|
||||||
/* Check inserted. */
|
/* Check inserted. */
|
||||||
/* NOTE: Error is not checked here. */
|
/* NOTE: Error is not checked here. */
|
||||||
|
|
Loading…
Reference in a new issue