diff options
| author | SND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-07-29 00:34:36 +0000 |
|---|---|---|
| committer | SND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-07-29 00:34:36 +0000 |
| commit | 8d4373b70d74ff5903c13780f397bdbaa5ad4991 (patch) | |
| tree | a329eae7b9c41010d23dd41300a3b1317ccbca9f /macosx/plugins/DFCdrom/macsrc | |
| parent | df065b4bf4205db561a5fe7d5652352f6046e40f (diff) | |
| download | pcsxr-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.c | 55 |
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; |
