legacy/experimental/java-libburnia/src/test/org/pykix/libburnia/test/Test.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();
}
}