Both sides previous revisionPrevious revision | Last revisionBoth sides next revision |
googlesummerofcode [2011/01/19 14:04] – glaubitz | googlesummerofcode [2011/01/26 22:24] – glaubitz |
---|
Task: Implement code to allow transfer of **new** tracks onto a Hi-MD disk through the facilities of //libhimd//. This functionality will be used in [[qhimdtransfer]] so that users can transfer MP3 tracks to their Hi-MD Walkman. Implementing this code involves a number of steps until the actual MP3 data is written to the HiMD disk: | Task: Implement code to allow transfer of **new** tracks onto a Hi-MD disk through the facilities of //libhimd//. This functionality will be used in [[qhimdtransfer]] so that users can transfer MP3 tracks to their Hi-MD Walkman. Implementing this code involves a number of steps until the actual MP3 data is written to the HiMD disk: |
| |
<code> | - cut the mp3 file into frames. |
1) Cut the mp3 file into frames. | - gather the frames into blocks of 16384-64=16320 Bytes. |
2) Gather the frames into blocks of 16384-64=16320 Bytes. | - obfuscate these blocks with the track/disc specific MP3 encoding key |
3) Obfuscate these blocks with the track/disc specific MP3 encoding key ( | - write these blocks into one or more contiguous chunks in the ATDATAxx.HMA file |
4) Write these blocks into one or more contiguous chunks in the ATDATAxx.HMA file | - write fragment entries for the contiguous chunks into the fragment table in the TRKIDXxx.HMA file (experience with handling fragments is present from split/join/delete) |
5) Write fragment entries for the contiguous chunks into the fragment table in the TRKIDXxx.HMA file (experience with handling fragments is present from split/join/delete) | - write a track entry that points to the first fragment entry (experience with handling track entries is present from rename/split/join/delete). |
6) Write a track entry that points to the first fragment entry (experience with handling track entries is present from rename/split/join/delete). | - add the track to the main track descriptor index list (experience with this list is present from delete/move/split/join) |
7) Add the track to the main track descriptor index list (experience with this list is present from delete/move/split/join) | |
</code> | |
| |
Thus, essentially, writing a track to a HiMD involves only cutting the source MP3 file with the help of the library //libmad// into frames, then gather these frames into block sizes of 16384-64=16320 Bytes (because 32 Bytes are required for a header and a footer block), obfuscating the frames with a simple algorithm and then finally writing the data onto the HiMD and adding an appropriate entry to the TrackIndex file. | Thus, essentially, writing a track to a HiMD involves only cutting the source MP3 file with the help of the library //libmad// into frames, then gather these frames into block sizes of 16384-64=16320 Bytes (because 32 Bytes are required for a header and a footer block), obfuscating the frames with a simple algorithm and then finally writing the data onto the HiMD and adding an appropriate entry to the TrackIndex file. |
| |
* Implement SCSI-device support into libhimd - Required expertise: **Expert** | * Implement SCSI-device support into libhimd - Required expertise: **Expert** |
Task: HiMD Walkman present themselves as USB mass storage devices (which are formatted with a FAT filesystem by default) when connecting them to a PC over USB. Most of the data operation, that is transferring tracks from the HiMD medium and to it, can be handled with simple file-based I/O. However, there are a few functions in the HiMD Walkman which can only be accessed through SCSI commands (SCSI-over-USB to be more exact). These include formatting a HiMD (see: basictools/himdformat.c in the git repository), reading the diskid (see: [[himddiskformat#the_diskid]]) and many more. We have already reverse-engineered all the commands (see: [[himdscsi]]) and also written some example code demonstrating these SCSI commands on Linux. It would be very nice, however, to have this SCSI-functionality implemented platform-independent into //libhimd//, thus not using the SCSI programming API of a certain operating system but using the libraries here [[http://developer.berlios.de/projects/libschily/|libschily]] to implement SCSI for all operating systems supported by these SCSI libraries. A sample implementation can be found in //himdscsitest.c//.**Benefits**: Users will be able to access all functionality beyond transferring audio to and from the disk of their HiMD devices with free software. | Task: HiMD Walkman present themselves as USB mass storage devices (which are formatted with a FAT filesystem by default) when connecting them to a PC over USB. Most of the data operation, that is transferring tracks from the HiMD medium and to it, can be handled with simple file-based I/O. However, there are a few functions in the HiMD Walkman which can only be accessed through SCSI commands (SCSI-over-USB to be more exact). These include formatting a HiMD (see: basictools/himdformat.c in the git repository), reading the diskid (see: [[himddiskformat#the_diskid]]) and many more. We have already reverse-engineered all the commands (see: [[himdscsi]]) and also written some example code demonstrating these SCSI commands on Linux. It would be very nice, however, to have this SCSI-functionality implemented platform-independent into //libhimd//. The original idea was to use [[http://developer.berlios.de/projects/libschily/|libschily]] to implement the SCSI support layer. However, we have found a new, better and easier solution using code from the //dvd+rw-tools// (see: [[https://lists.fu-berlin.de/pipermail/linux-minidisc/2010-December/msg00000.html]]). **Benefits**: Users will be able to access all functionality beyond transferring audio to and from the disk of their HiMD devices with free software. |
| |
=== libnetmd === | === libnetmd === |