00001 /** 00002 @author Mario Danic, Thomas Schmitt 00003 00004 @mainpage Libburnia Documentation Index 00005 00006 @section intro Introduction 00007 00008 Libburnia is an open-source project for reading, mastering and writing 00009 optical discs. 00010 For now this means CD-R, CD-RW, DVD-RAM, DVD+RW, DVD+R, DVD+R/DL, DVD-RW, DVD-R. 00011 00012 Not supported yet are DVD-R/DL, HD-DVD, BD (blue ray). Testers for 00013 BD and DVD-R/DL are wanted, though. 00014 00015 The project comprises of several more or less interdependent parts which 00016 together strive to be a usable foundation for application development. 00017 These are libraries, language bindings, and middleware binaries which emulate 00018 classical (and valuable) Linux tools. 00019 00020 Our scope is currently Linux 2.4 and 2.6 only. For ports to other systems 00021 we would need : login on a development machine resp. a live OS on CD or DVD, 00022 advise from a system person about the equivalent of Linux sg or FreeBSD CAM, 00023 volunteers for testing of realistic use cases. 00024 00025 We have a well tested code base for burning data and audio CDs and many DVD 00026 types. The burn API is quite comprehensively documented and can be used to 00027 build a presentable application. 00028 We have a functional binary which emulates the core use cases of cdrecord in 00029 order to prove that usability, and in order to allow you to explore libburn's 00030 scope by help of existing cdrecord frontends. 00031 00032 ISO 9660 filesystems with Rock Ridge and Joliet extensions can be created 00033 and manipulated quite freely. This capability together with our burn capability 00034 makes possible a single binary application which covers all steps of image 00035 composition, updating and writing. Quite unique in the Linux world. 00036 00037 @subsection components The project components (list subject to growth, hopefully): 00038 00039 - libburn is the library by which preformatted data get onto optical media. 00040 It uses either /dev/sgN (e.g. on kernel 2.4 with ide-scsi) or 00041 /dev/srM or /dev/hdX (e.g. on kernel 2.6). 00042 libburn is the foundation of our cdrecord emulation. Its code is 00043 independent of cdrecord. Its DVD capabilities are learned from 00044 studying the code of dvd+rw-tools and MMC-5 specs. No code but only 00045 the pure SCSI knowledge has been taken from dvd+rw-tools, though. 00046 00047 - libisofs is the library to pack up hard disk files and directories into a 00048 ISO 9660 disk image. This may then be brought to CD via libburn. 00049 libisofs is to be the foundation of our upcoming mkisofs emulation. 00050 00051 - libisoburn is an add-on to libburn and libisofs which coordinates both and 00052 also allows to grow ISO-9660 filesystem images on multi-session 00053 media as well as on overwriteable media via the same API. 00054 All media peculiarities are handled automatically. 00055 00056 - cdrskin is a limited cdrecord compatibility wrapper for libburn. 00057 cdrecord is a powerful GPL'ed burn program included in Joerg 00058 Schilling's cdrtools. cdrskin strives to be a second source for 00059 the services traditionally provided by cdrecord. Additionally it 00060 provides libburn's DVD capabilities, where only -sao is compatible 00061 with cdrecord. 00062 cdrskin does not contain any bytes copied from cdrecord's sources. 00063 Many bytes have been copied from the message output of cdrecord 00064 runs, though. 00065 See cdrskin/README for more. 00066 00067 - xorriso is an application of all three libraries which creates, loads, 00068 manipulates and writes ISO 9660 filesystem images with 00069 Rock Ridge extensions. Manipulation is not only adding or 00070 overwriting of files but also deletion, renaming, and attribute 00071 changing. 00072 See xorriso/README for more 00073 00074 - "test" is a collection of application gestures and examples given by the 00075 authors of the library features. The burn API example of libburn 00076 is named test/libburner.c . The API for media information inquiry is 00077 demonstrated in test/telltoc.c . 00078 Explore these examples if you look for inspiration. 00079 00080 We strive to be a responsive upstream. 00081 00082 Our libraries are committed to maintain older feature sets in newer versions. 00083 This applies to source code headers (API) as well as to linkable objects (ABI). 00084 The only exception from this rule is about non-release versions x.y.*[13579] 00085 which are allowed to introduce new features, change those new features in 00086 any way and even may revoke such new features before the next release of 00087 x.y.*[02468]. As soon as it is released, a feature is promised to persist. 00088 00089 SONAMES: 00090 libburn.so.4 (since 0.3.4, March 2007), 00091 libisofs.so.6 (since 0.6.2, February 2008), 00092 libisoburn.so.1 (since 0.1.0, February 2008). 00093 00094 00095 @section using Using the libraries 00096 00097 Our build system is based on autotools. 00098 User experience tells us that you will need at least autotools version 1.7. 00099 00100 To build libburn and its subprojects it should be sufficient to go into 00101 its toplevel directory and execute 00102 00103 - ./bootstrap (needed if you downloaded from SVN) 00104 00105 - ./configure 00106 00107 - make 00108 00109 To make the libraries accessible for running resp. developing applications 00110 00111 - make install 00112 00113 Both libraries are written in C language and get built by autotools. 00114 Thus we expect them to be useable by a wide range of Linux-implemented 00115 languages and development tools. 00116 00117 00118 @section libburner Libburner 00119 00120 libburner is a minimal demo application for the library libburn 00121 (see: libburn/libburn.h) as provided on http://libburnia-project.org . 00122 It can list the available devices, can blank a CD-RW or DVD-RW and 00123 can burn to recordable CD and recordable single layer DVD. 00124 00125 It's main purpose, nevertheless, is to show you how to use libburn and also 00126 to serve the libburnia team as reference application. libburner does indeed 00127 define the standard way how above three gestures can be implemented and 00128 stay upward compatible for a good while. 00129 00130 @subsection libburner-help Libburner --help 00131 <pre> 00132 Usage: test/libburner 00133 [--drive <address>|<driveno>|"-"] [--audio] 00134 [--blank_fast|--blank_full|--format_overwrite] 00135 [--try_to_simulate] 00136 [--multi] [<one or more imagefiles>|"-"] 00137 Examples 00138 A bus scan (needs rw-permissions to see a drive): 00139 test/libburner --drive - 00140 Burn a file to drive chosen by number, leave appendable: 00141 test/libburner --drive 0 --multi my_image_file 00142 Burn a file to drive chosen by persistent address, close: 00143 test/libburner --drive /dev/hdc my_image_file 00144 Blank a used CD-RW (is combinable with burning in one run): 00145 test/libburner --drive /dev/hdc --blank_fast 00146 Blank a used DVD-RW (is combinable with burning in one run): 00147 test/libburner --drive /dev/hdc --blank_full 00148 Format a DVD-RW to avoid need for blanking before re-use: 00149 test/libburner --drive /dev/hdc --format_overwrite 00150 Burn two audio tracks (to CD only): 00151 lame --decode -t /path/to/track1.mp3 track1.cd 00152 test/dewav /path/to/track2.wav -o track2.cd 00153 test/libburner --drive /dev/hdc --audio track1.cd track2.cd 00154 Burn a compressed afio archive on-the-fly: 00155 ( cd my_directory ; find . -print | afio -oZ - ) | \ 00156 test/libburner --drive /dev/hdc - 00157 To be read from *not mounted* media via: afio -tvZ /dev/hdc 00158 </pre> 00159 libburner has two companions, telltoc and dewav, which help to perform some 00160 peripheral tasks of burning. 00161 00162 telltoc prints a table of content (sessions, tracks and leadouts), it tells 00163 about type and state of media, and also is able to provide the necessary 00164 multi-session information for program mkisofs option -C. Especially helpful 00165 are its predictions with "Write multi" and "Write modes" where availability 00166 of "TAO" indicates that tracks of unpredicted length can be written. 00167 See: test/telltoc --help. 00168 00169 dewav extracts raw byte-swapped audio data from files of format .wav (MS WAVE) 00170 or .au (SUN Audio). See example in libburner --help. 00171 00172 @subsection libburner-source Sourceode of libburner 00173 00174 Click on blue names of functions, structures, variables, etc in oder to 00175 get to the according specs of libburn API or libburner sourcecode. 00176 00177 @include libburner.c 00178 */