213 lines
5.8 KiB
Java
213 lines
5.8 KiB
Java
|
/*
|
||
|
* Test.java
|
||
|
*
|
||
|
* Copyright (c) 2007 Vreixo Formoso
|
||
|
*
|
||
|
* This library is free software; you can redistribute it and/or modify
|
||
|
* it under the terms of the GNU General Public License as published by
|
||
|
* the Free Software Foundation; either version 2 of the License, or
|
||
|
* (at your option) any later version.
|
||
|
* See COPYING file for details.
|
||
|
*/
|
||
|
|
||
|
package org.pykix.libburnia.test;
|
||
|
|
||
|
import java.util.Arrays;
|
||
|
|
||
|
import org.pykix.libburnia.libburn.BlockType;
|
||
|
import org.pykix.libburnia.libburn.Burn;
|
||
|
import org.pykix.libburnia.libburn.BurnException;
|
||
|
import org.pykix.libburnia.libburn.BurnSource;
|
||
|
import org.pykix.libburnia.libburn.Disc;
|
||
|
import org.pykix.libburnia.libburn.DiscStatus;
|
||
|
import org.pykix.libburnia.libburn.Drive;
|
||
|
import org.pykix.libburnia.libburn.DriveInfo;
|
||
|
import org.pykix.libburnia.libburn.DriveStatus;
|
||
|
import org.pykix.libburnia.libburn.FormatDesc;
|
||
|
import org.pykix.libburnia.libburn.Formats;
|
||
|
import org.pykix.libburnia.libburn.Message;
|
||
|
import org.pykix.libburnia.libburn.MultiCaps;
|
||
|
import org.pykix.libburnia.libburn.Profile;
|
||
|
import org.pykix.libburnia.libburn.Progress;
|
||
|
import org.pykix.libburnia.libburn.ReadOpts;
|
||
|
import org.pykix.libburnia.libburn.ScsiAdr;
|
||
|
import org.pykix.libburnia.libburn.Session;
|
||
|
import org.pykix.libburnia.libburn.Source;
|
||
|
import org.pykix.libburnia.libburn.SpeedDescriptor;
|
||
|
import org.pykix.libburnia.libburn.Track;
|
||
|
import org.pykix.libburnia.libburn.WriteOpts;
|
||
|
import org.pykix.libburnia.libburn.WriteType;
|
||
|
import org.pykix.libburnia.libburn.Message.Severity;
|
||
|
|
||
|
public class Test {
|
||
|
|
||
|
private static int blankDisc(Drive drive, boolean fast)
|
||
|
throws InterruptedException, BurnException {
|
||
|
|
||
|
DiscStatus state = drive.getDiscStatus();
|
||
|
Profile profile = drive.getProfile();
|
||
|
|
||
|
System.out.println("Disc state: " + state);
|
||
|
|
||
|
if (profile == Profile.DVD_RW_RESTRICTED_OVERWITE) {
|
||
|
/* formatted DVD-RW will get blanked to sequential state */
|
||
|
} else if (state == DiscStatus.BLANK) {
|
||
|
System.err.println(
|
||
|
"IDLE: Blank media detected. Will leave it untouched");
|
||
|
return 2;
|
||
|
} else if (state == DiscStatus.FULL ||
|
||
|
state == DiscStatus.APPENDABLE) {
|
||
|
/* this is what libburner is willing to blank */
|
||
|
} else if (state == DiscStatus.EMPTY) {
|
||
|
System.err.println("FATAL: No media detected in drive");
|
||
|
return 0;
|
||
|
} else {
|
||
|
System.err.println("FATAL: Unsuitable drive and media state");
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
if( !drive.isErasable() ) {
|
||
|
System.err.println("FATAL : Media is not of erasable type");
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
System.out.println("Beginning to " + (fast?"fast":"full") + "-blank media.");
|
||
|
|
||
|
drive.erase(fast);
|
||
|
|
||
|
Thread.sleep(1000);
|
||
|
|
||
|
Progress p = new Progress();
|
||
|
|
||
|
while ( drive.getDriveStatus(p) != DriveStatus.IDLE ) {
|
||
|
|
||
|
System.out.printf("Blanking ( %.1f%% done )\n",
|
||
|
(float) p.getSector() * 100 / p.getSectors() );
|
||
|
Thread.sleep(1000);
|
||
|
}
|
||
|
|
||
|
System.out.println("Done");
|
||
|
return 1;
|
||
|
|
||
|
}
|
||
|
|
||
|
private static int writeImage(Drive drive, String path)
|
||
|
throws InterruptedException, BurnException {
|
||
|
|
||
|
WriteOpts wo = drive.newWriteOpts();
|
||
|
|
||
|
wo.setMulti(true);
|
||
|
wo.setWriteType(WriteType.SAO, BlockType.MODE2_OK);
|
||
|
|
||
|
BurnSource src = new Source(path, null);
|
||
|
|
||
|
Disc disc = new Disc();
|
||
|
Session s = new Session();
|
||
|
Track t = new Track();
|
||
|
t.setSource(src);
|
||
|
s.addTrack(t, 0);
|
||
|
disc.addSession(s, 0);
|
||
|
|
||
|
wo.precheckWrite(disc, false);
|
||
|
|
||
|
drive.write(wo, disc);
|
||
|
|
||
|
Thread.sleep(1000);
|
||
|
|
||
|
Progress p = new Progress();
|
||
|
|
||
|
while ( drive.getDriveStatus(p) != DriveStatus.IDLE ) {
|
||
|
|
||
|
System.out.printf("Blanking ( %.1f%% done )\n",
|
||
|
(float) p.getSector() * 100 / p.getSectors() );
|
||
|
Thread.sleep(1000);
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
public static void main(String[] args) throws BurnException, InterruptedException {
|
||
|
|
||
|
Burn.initialize();
|
||
|
// Message.setSeverities(Severity.ALL, Severity.ALL, "Test: ");
|
||
|
|
||
|
// DriveInfo[] drives = Burn.scan();
|
||
|
// Drive drive = drives[0].getDrive();
|
||
|
|
||
|
// drive.grab(true);
|
||
|
|
||
|
System.out.println(Burn.convertFsAdr("/dev/sr0"));
|
||
|
|
||
|
DriveInfo info = Burn.scanAndGrab("/dev/sg1", true);
|
||
|
|
||
|
Drive drive = info.getDrive();
|
||
|
|
||
|
// ScsiAdr ad = ScsiAdr.obtainScsiAdr(info.getAdr());
|
||
|
// System.out.println(Burn.getVersion());
|
||
|
// Burn.setSignalHandler( new Burn.SignalHandler() {
|
||
|
// public int handleSignal(int signum, int flag) {
|
||
|
// System.err.println("handled signal " + signum);
|
||
|
// System.err.flush();
|
||
|
// return -1;
|
||
|
// }
|
||
|
// }, 0);
|
||
|
|
||
|
Formats fs = drive.getFormats();
|
||
|
|
||
|
System.out.println("blsas = " + fs.getBlSas() +
|
||
|
", size = " + fs.getSize() +
|
||
|
", status = " + fs.getStatus());
|
||
|
|
||
|
FormatDesc fd = drive.getFormatDescr(0);
|
||
|
|
||
|
System.out.println(" Type = " + fd.getType() +
|
||
|
", size = " + fd.getSize() );
|
||
|
|
||
|
// WriteOpts wo = drive.newWriteOpts();
|
||
|
//
|
||
|
// System.out.println(drive.getAvailableSpace(wo));
|
||
|
|
||
|
// drive.readAtip();
|
||
|
//
|
||
|
// MultiCaps mc = drive.getMultiCaps(WriteType.SAO);
|
||
|
//
|
||
|
// System.out.println( mc.getCurrentProfile() );
|
||
|
//
|
||
|
// mc = drive.getMultiCaps(WriteType.SAO);
|
||
|
// System.out.println( mc.isWritingPossible() );
|
||
|
|
||
|
// System.out.println( drive.getTrackNwa(null, 2) );
|
||
|
|
||
|
// SpeedDescriptor[] sl = drive.getSpeedList();
|
||
|
//
|
||
|
// for ( SpeedDescriptor sd : sl ) {
|
||
|
// System.out.println( sd.getWriteSpeed() + " " + sd.getSource() );
|
||
|
// }
|
||
|
//
|
||
|
// Message msg;
|
||
|
// while ( (msg = Message.obtain(Severity.ALL)) != null ) {
|
||
|
// System.out.println(msg.getMsgText());
|
||
|
// }
|
||
|
|
||
|
// blankDisc(drive, true);
|
||
|
// writeImage(drive, "/home/metalpain/image.iso");
|
||
|
|
||
|
// ReadOpts opts = drive.newReadOpts();
|
||
|
|
||
|
// System.out.println( drive.getWriteSpeed() );
|
||
|
|
||
|
// long i = 0;
|
||
|
// while( i++ < 10000000000L) {
|
||
|
// //System.out.print("aa");
|
||
|
// }
|
||
|
|
||
|
drive.release(false);
|
||
|
|
||
|
// drives[0].forget(0);
|
||
|
info.forget(0);
|
||
|
|
||
|
Burn.finish();
|
||
|
}
|
||
|
|
||
|
}
|