summaryrefslogtreecommitdiff
path: root/macosx/plugins/DFCdrom/macsrc
diff options
context:
space:
mode:
authorSND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-07-29 00:34:36 +0000
committerSND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-07-29 00:34:36 +0000
commit8d4373b70d74ff5903c13780f397bdbaa5ad4991 (patch)
treea329eae7b9c41010d23dd41300a3b1317ccbca9f /macosx/plugins/DFCdrom/macsrc
parentdf065b4bf4205db561a5fe7d5652352f6046e40f (diff)
downloadpcsxr-8d4373b70d74ff5903c13780f397bdbaa5ad4991.tar.gz
implemented config dialog for DFInput on OSX, removed HIDInput.
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@55259 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'macosx/plugins/DFCdrom/macsrc')
-rw-r--r--macosx/plugins/DFCdrom/macsrc/cdr-macosx.c55
1 files changed, 45 insertions, 10 deletions
diff --git a/macosx/plugins/DFCdrom/macsrc/cdr-macosx.c b/macosx/plugins/DFCdrom/macsrc/cdr-macosx.c
index 4b7fdfbe..806b659a 100644
--- a/macosx/plugins/DFCdrom/macsrc/cdr-macosx.c
+++ b/macosx/plugins/DFCdrom/macsrc/cdr-macosx.c
@@ -34,6 +34,36 @@
int cdHandle = -1;
char cdDevice[4096] = "";
+static int IsPsxDisc(const char *dev) {
+ int fd;
+ char buf[CD_FRAMESIZE_RAW];
+ dk_cd_read_t r;
+
+ fd = open(dev, O_RDONLY, 0);
+ if (fd < 0) return 0;
+
+ memset(&r, 0, sizeof(r));
+
+ r.offset = msf_to_lba(0, 2, 4) * CD_FRAMESIZE_RAW;
+ r.sectorArea = 0xF8;
+ r.sectorType = kCDSectorTypeUnknown;
+ r.bufferLength = CD_FRAMESIZE_RAW;
+ r.buffer = buf;
+
+ if (ioctl(fd, DKIOCCDREAD, &r) != kIOReturnSuccess) {
+ close(fd);
+ return 0;
+ }
+
+ close(fd);
+
+ if (strncmp(buf + 56, "Sony Computer Entertainment", 27) == 0) {
+ return 1;
+ }
+
+ return 0;
+}
+
static void FindCdDevice(char *dev) {
io_object_t next_media;
kern_return_t kern_result;
@@ -77,12 +107,14 @@ start:
if (CFStringGetCString(str_bsd_path, (char *)&psz_buf + dev_path_length,
sizeof(psz_buf) - dev_path_length, kCFStringEncodingASCII))
{
- CFRelease(str_bsd_path);
- IOObjectRelease(next_media);
- IOObjectRelease(media_iterator);
strcpy(dev, psz_buf);
- PRINTF("Found CD-ROM Device: %s\n", dev);
- return;
+
+ if (IsPsxDisc(dev)) {
+ CFRelease(str_bsd_path);
+ IOObjectRelease(next_media);
+ IOObjectRelease(media_iterator);
+ return;
+ }
}
CFRelease(str_bsd_path);
@@ -129,8 +161,9 @@ long GetTN(unsigned char *buffer) {
if (cdHandle < 0) return -1;
// TODO
- buffer[0] = 0;
- buffer[1] = 0;
+ buffer[0] = 1;
+ buffer[1] = 1;
+
return 0;
}
@@ -196,9 +229,11 @@ long GetStatus(int playing, struct CdrStat *stat) {
// No CD in drive
stat->Type = 0xff;
stat->Status |= 0x10;
- } else if (CdrSpeed > 0) {
- u_int16_t speed = kCDSpeedMin * CdrSpeed;
- ioctl(cdHandle, DKIOCCDSETSPEED, &speed);
+ } else {
+ if (CdrSpeed > 0) {
+ u_int16_t speed = kCDSpeedMin * CdrSpeed;
+ ioctl(cdHandle, DKIOCCDSETSPEED, &speed);
+ }
}
return 0;