diff options
| author | SND\MaddTheSane_cp <SND\MaddTheSane_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2013-09-16 20:31:07 +0000 |
|---|---|---|
| committer | SND\MaddTheSane_cp <SND\MaddTheSane_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2013-09-16 20:31:07 +0000 |
| commit | a5a97b02c0205f0cc98327389ec88672ddd769f2 (patch) | |
| tree | e1b7254679180d8e9413c3b10fb8b2e3c91691aa /macosx/plugins/DFCdrom/macsrc | |
| parent | 481101a05a77e2cc5b22cc94a5319748aeb5c031 (diff) | |
| download | pcsxr-a5a97b02c0205f0cc98327389ec88672ddd769f2.tar.gz | |
Wait for a new physical CD to be inserted when ejecting the CD on OS X.
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@87220 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'macosx/plugins/DFCdrom/macsrc')
| -rwxr-xr-x | macosx/plugins/DFCdrom/macsrc/PluginConfigController.m | 28 | ||||
| -rwxr-xr-x | macosx/plugins/DFCdrom/macsrc/cdr-macosx.c | 76 | ||||
| -rwxr-xr-x | macosx/plugins/DFCdrom/macsrc/cfg.c | 4 |
3 files changed, 54 insertions, 54 deletions
diff --git a/macosx/plugins/DFCdrom/macsrc/PluginConfigController.m b/macosx/plugins/DFCdrom/macsrc/PluginConfigController.m index df20efb2..6417a102 100755 --- a/macosx/plugins/DFCdrom/macsrc/PluginConfigController.m +++ b/macosx/plugins/DFCdrom/macsrc/PluginConfigController.m @@ -91,11 +91,11 @@ void ReadConfig() NSDictionary *keyValues; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults registerDefaults:@{PrefsKey: @{@"Threaded": @YES, - @"Cache Size": @64, - @"Speed": @0}}]; - + @"Cache Size": @64, + @"Speed": @0}}]; + keyValues = [defaults dictionaryForKey:PrefsKey]; - + ReadMode = ([keyValues[@"Threaded"] boolValue] ? THREADED : NORMAL); CacheSize = [keyValues[@"Cache Size"] intValue]; CdrSpeed = [keyValues[@"Speed"] integerValue]; @@ -113,12 +113,12 @@ void ReadConfig() - (IBAction)ok:(id)sender { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - + NSMutableDictionary *writeDic = [keyValues mutableCopy]; - + writeDic[@"Threaded"] = ([Cached intValue] ? @YES : @NO); writeDic[@"Cache Size"] = @([CacheSize integerValue]); - + switch ([CdSpeed indexOfSelectedItem]) { case 1: writeDic[@"Speed"] = @1; break; case 2: writeDic[@"Speed"] = @2; break; @@ -128,11 +128,11 @@ void ReadConfig() case 6: writeDic[@"Speed"] = @32; break; default: writeDic[@"Speed"] = @0; break; } - + // write to defaults [defaults setObject:writeDic forKey:PrefsKey]; [defaults synchronize]; - + // and set global values accordingly ReadConfig(); @@ -143,15 +143,15 @@ void ReadConfig() - (void)loadValues { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - + ReadConfig(); - + // load from preferences - self.keyValues = [NSMutableDictionary dictionaryWithDictionary:[defaults dictionaryForKey:PrefsKey]]; - + self.keyValues = [[NSMutableDictionary alloc] initWithDictionary:[defaults dictionaryForKey:PrefsKey]]; + [Cached setIntValue:[keyValues[@"Threaded"] intValue]]; [CacheSize setIntegerValue:[keyValues[@"Cache Size"] integerValue]]; - + switch ([keyValues[@"Speed"] intValue]) { case 1: [CdSpeed selectItemAtIndex:1]; break; case 2: [CdSpeed selectItemAtIndex:2]; break; diff --git a/macosx/plugins/DFCdrom/macsrc/cdr-macosx.c b/macosx/plugins/DFCdrom/macsrc/cdr-macosx.c index 94cf8996..7c423757 100755 --- a/macosx/plugins/DFCdrom/macsrc/cdr-macosx.c +++ b/macosx/plugins/DFCdrom/macsrc/cdr-macosx.c @@ -38,29 +38,29 @@ 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; } @@ -70,45 +70,45 @@ static void FindCdDevice(char *dev) { io_iterator_t media_iterator; CFMutableDictionaryRef classes_to_match; const char *name, *cd = kIOCDMediaClass, *dvd = kIODVDMediaClass; - + dev[0] = '\0'; name = cd; - + start: classes_to_match = IOServiceMatching(name); if (classes_to_match == NULL) goto end; - + CFDictionarySetValue(classes_to_match, CFSTR(kIOMediaEjectableKey), - kCFBooleanTrue); - - kern_result = IOServiceGetMatchingServices(kIOMasterPortDefault, - classes_to_match, &media_iterator); - + kCFBooleanTrue); + + kern_result = IOServiceGetMatchingServices(kIOMasterPortDefault, + classes_to_match, &media_iterator); + if (kern_result != KERN_SUCCESS) goto end; - + next_media = IOIteratorNext(media_iterator); if (next_media != 0) { char psz_buf[0x32]; size_t dev_path_length; CFTypeRef str_bsd_path; - + do { str_bsd_path = IORegistryEntryCreateCFProperty(next_media, - CFSTR(kIOBSDNameKey), kCFAllocatorDefault, 0); - + CFSTR(kIOBSDNameKey), kCFAllocatorDefault, 0); + if (str_bsd_path == NULL) { IOObjectRelease(next_media); continue; } - + strcpy(psz_buf, "/dev/r"); dev_path_length = strlen(psz_buf); - + if (CFStringGetCString(str_bsd_path, (char *)&psz_buf + dev_path_length, - sizeof(psz_buf) - dev_path_length, kCFStringEncodingASCII)) + sizeof(psz_buf) - dev_path_length, kCFStringEncodingASCII)) { strcpy(dev, psz_buf); - + if (IsPsxDisc(dev)) { CFRelease(str_bsd_path); IOObjectRelease(next_media); @@ -116,14 +116,14 @@ start: return; } } - + CFRelease(str_bsd_path); IOObjectRelease(next_media); } while ((next_media = IOIteratorNext(media_iterator)) != 0); } - + IOObjectRelease(media_iterator); - + end: if (dev[0] == '\0') { if (name == cd) { @@ -136,15 +136,15 @@ end: int OpenCdHandle(const char *dev) { if (dev != NULL && dev[0] != '\0') strcpy(cdDevice, dev); else if (cdDevice[0] == '\0') FindCdDevice(cdDevice); - + cdHandle = open(cdDevice, O_RDONLY, 0); if (cdHandle < 0) return -1; - + if (CdrSpeed > 0) { u_int16_t speed = kCDSpeedMin * CdrSpeed; ioctl(cdHandle, DKIOCCDSETSPEED, &speed); } - + return 0; } @@ -183,23 +183,23 @@ long ReadSector(crdata *cr) { int lba; dk_cd_read_t r; char buf[CD_FRAMESIZE_RAW]; - + if (cdHandle < 0) return -1; - + lba = msf_to_lba(cr->msf.cdmsf_min0, cr->msf.cdmsf_sec0, cr->msf.cdmsf_frame0); - + memset(&r, 0, sizeof(r)); - + r.offset = lba * CD_FRAMESIZE_RAW; r.sectorArea = 0xF8; r.sectorType = kCDSectorTypeUnknown; r.bufferLength = CD_FRAMESIZE_RAW; r.buffer = buf; // ??? Why using cr->buf directly does not work in threaded mode? - + if (ioctl(cdHandle, DKIOCCDREAD, &r) != kIOReturnSuccess) { return -1; } - + memcpy(cr->buf, buf, CD_FRAMESIZE_RAW); return 0; } @@ -215,7 +215,7 @@ long StopCDDA() { long GetStatus(int playing, struct CdrStat *stat) { memset(stat, 0, sizeof(struct CdrStat)); stat->Type = 0x01; - + // Close and reopen the CD handle. If opening failed, // then there is no CD in drive. // Note that this WILL be screwed if user inserted another @@ -225,7 +225,7 @@ long GetStatus(int playing, struct CdrStat *stat) { close(cdHandle); cdHandle = -1; } - + cdHandle = open(cdDevice, O_RDONLY, 0); if (cdHandle < 0) { // No CD in drive @@ -237,7 +237,7 @@ long GetStatus(int playing, struct CdrStat *stat) { ioctl(cdHandle, DKIOCCDSETSPEED, &speed); } } - + return 0; } diff --git a/macosx/plugins/DFCdrom/macsrc/cfg.c b/macosx/plugins/DFCdrom/macsrc/cfg.c index 6b5c1513..21a9be2b 100755 --- a/macosx/plugins/DFCdrom/macsrc/cfg.c +++ b/macosx/plugins/DFCdrom/macsrc/cfg.c @@ -39,7 +39,7 @@ void LoadConf() { CacheSize = 64; CdrSpeed = 0; SpinDown = SPINDOWN_VENDOR_SPECIFIC; - + ReadConfig(); } @@ -50,4 +50,4 @@ long CDRconfigure() { void CDRabout() { AboutDlgProc(); -}
\ No newline at end of file +} |
