From 5c9a6c186b0db31e32dee3186ffee395d4bd2adc Mon Sep 17 00:00:00 2001 From: Grigory Chudov Date: Fri, 15 Nov 2013 21:15:22 -0500 Subject: [PATCH] CUERipper: eject button was not working when tray closed with no cd --- CUETools.Ripper.SCSI/SCSIDrive.cs | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/CUETools.Ripper.SCSI/SCSIDrive.cs b/CUETools.Ripper.SCSI/SCSIDrive.cs index 102aa19..9cd1ff1 100644 --- a/CUETools.Ripper.SCSI/SCSIDrive.cs +++ b/CUETools.Ripper.SCSI/SCSIDrive.cs @@ -589,11 +589,25 @@ namespace CUETools.Ripper.SCSI } } - public unsafe void EjectDisk() + private void DoEjectDisk(Device.StartState action) + { + EventStatusNotification status; + m_device.GetEventStatusNotification(true, Device.NotificationClass.Media, out status); + if (status.Valid && status.EventAvailable && status.EventData.Length > 1) + { + // 0 - tray closed no disc + // 1 - tray open + // 2 - tray closed, disc + action = status.EventData[1] == 1 ? Device.StartState.LoadDisk : Device.StartState.EjectDisk; + } + m_device.StartStopUnit(true, Device.PowerControl.NoChange, action); + } + + public void EjectDisk() { if (m_device != null) { - m_device.StartStopUnit(true, Device.PowerControl.NoChange, Device.StartState.EjectDisk); + DoEjectDisk(Device.StartState.EjectDisk); } else { @@ -604,7 +618,7 @@ namespace CUETools.Ripper.SCSI { try { - m_device.StartStopUnit(true, Device.PowerControl.NoChange, Device.StartState.LoadDisk); + DoEjectDisk(Device.StartState.LoadDisk); } finally {