Looks great. Thanks! On Fri, Jun 12, 2015 at 1:56 PM, Robert Kausch <[email protected]> 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 >> >> >> > >
