[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Libcdio-devel] [PATCH] Try ejecting using eject command on Linux
From: |
Rocky Bernstein |
Subject: |
Re: [Libcdio-devel] [PATCH] Try ejecting using eject command on Linux |
Date: |
Fri, 12 Jun 2015 14:00:51 -0400 |
Looks great. Thanks!
On Fri, Jun 12, 2015 at 1:56 PM, Robert Kausch <address@hidden>
wrote:
> Turns out it's all much simpler...
>
> We are opening devices in O_RDONLY mode by default, but to run the
> PREVENT_ALLOW_MEDIUM_REMOVAL MMC command on Linux, we need to open it with
> O_RDWR. I changed eject_media_linux to make sure the device is opened with
> O_RDWR and everything works beautifully now.
>
> The patch is quite simple, so I already pushed it to git. I will check if
> other OS need similar adjustments in the next few days.
>
> Robert
>
>
> Am 12.06.2015 um 19:15 schrieb Thomas Schmitt:
>
>> Hi,
>>
>> Maybe CDROM's now have a "suspended" state that you need get out of?
>>>
>> It could be about "standby power condition" (SPC-3 5.9).
>> Table 39 says:
>> "While in the standby power condition (see 3.1.107):
>> a) A device server is not capable of processing media access commands;
>> [...]
>> "
>>
>> But on the other hand, START/STOP UNIT is supposed to override
>> resp. change the power condition. Especially the value 0 of bits
>> 4 to 7 of byte 4 is promised to "process the START and LOEJ bits"
>> which are bits 0 resp. 1 of byte 4. (LOEJ = Load/Eject)
>> SBC-2 table 49.
>>
>> I have this reminder in libburn/sbc.c:
>>
>> /* START STOP UNIT as of SBC-1 and SBC-2
>> 0: Opcode 0x1B
>> 1: bit0= Immed
>> bit1-7= reserved
>> 2: reserved
>> 3: reserved
>> 4: bit0= Start (else Stop unit)
>> bit1= Load/Eject (according to Start resp. Stop)
>> bit2-3= reserved
>> bit4-7= Power Condition
>> 0= Start Valid: process Start and Load/Eject bits
>> 1= assume Active state
>> 2= assume Idle state
>> 3= assume Standby state
>> (5= SBC-1 only: assume Sleep state)
>> 7= transfer control of power conditions to logical unit
>> 10= force idle condition timer to 0
>> 11= force standby condition timer to 0
>> All others are reserved.
>> 5: Control (set to 0)
>> */
>>
>> The sequence which libburn uses with
>> xorriso -scsi_log on -outdev /dev/sr0 -eject all
>> is inconclusive in this aspect. It has a START UNIT command which
>> should bonk the drive out of its sleep, before anything else
>> happens.
>>
>> ...
>>
>> START/STOP UNIT
>> 1b 00 00 00 01 00
>> 15070 us [ 1096565 ]
>>
>> ... some drive inspection ...
>>
>> START/STOP UNIT
>> 1b 01 00 00 00 00
>> 1186603 us [ 2406124 ]
>>
>> TEST UNIT READY
>> 00 00 00 00 00 00
>> +++ sense data = 71 00 02 00 00 00 00 0A 00 00 00 00 04 07 00 80 FF FF
>> +++ key=2 asc=04h ascq=07h
>> 23600 us [ 2930067 ]
>>
>> TEST UNIT READY
>> 00 00 00 00 00 00
>> +++ sense data = 71 00 02 00 00 00 00 0A 00 00 00 00 04 07 00 80 FF FF
>> +++ key=2 asc=04h ascq=07h
>> 53081 us [ 3483470 ]
>>
>> TEST UNIT READY
>> 00 00 00 00 00 00
>> 306 us [ 3983994 ]
>>
>> PREVENT/ALLOW MEDIA REMOVAL
>> 1e 00 00 00 00 00
>> 242 us [ 3984516 ]
>>
>> START/STOP UNIT
>> 1b 00 00 00 02 00
>> 1547037 us [ 5531605 ]
>>
>> I.e. start unit with tray action (= load),
>> stop unit without tray action,
>> unlock tray,
>> stop unit with tray action (= eject).
>> After this command the tray is out. (Needs 1.5 seconds. :))
>>
>> The final command from libburn confirms this:
>>
>> START/STOP UNIT
>> 1b 01 00 00 00 00
>> +++ sense data = 70 00 02 00 00 00 00 0A 00 00 00 00 3A 02 00 00 00 00
>> +++ key=2 asc=3Ah ascq=02h
>> 946 us [ 5532752 ]
>>
>> Sense codes seen:
>> 2 04 07 LOGICAL UNIT NOT READY, OPERATION IN PROGRESS
>> 2 3A 02 MEDIUM NOT PRESENT TRAY OPEN
>>
>>
>> ftp://www.t10.org/t10/document.05/05-344r0.pdf
>>>
>> Oops. SBC-3. I thought they want money since a few years.
>> Table 49 is in there.
>> Maybe SPC-3 (or SPC-4) is hidden there too.
>>
>>
>> Have a nice day :)
>>
>> Thomas
>>
>>
>>
>
>
Re: [Libcdio-devel] [PATCH] Try ejecting using eject command on Linux, Rocky Bernstein, 2015/06/12
[Libcdio-devel] Fixed disc eject support on OS X, Robert Kausch, 2015/06/14