User Tools

Site Tools


googlesummerofcode

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
googlesummerofcode [2011/01/19 14:04] glaubitzgooglesummerofcode [2013/05/16 11:39] (current) – [General] glaubitz
Line 7: Line 7:
 We are using the popular revision control system //git// to manage our code base online. The code can be checked out with git any time with the command: We are using the popular revision control system //git// to manage our code base online. The code can be checked out with git any time with the command:
 <code> <code>
-git clone git://minidisc.dyndns.org/linux-minidisc+git clone git://z6.physik.fu-berlin.de/linux-minidisc.git
 </code> </code>
 Since you may not have yet **write** access to our source repository yet (read access is always possible), you should create patches with your code changes with the help of git and send them to the mailing list of this project. This wiki page explains how to create and manage patches using git: [[writeandsubmitpatch]]. The mailing list can be found here: [[https://lists.fu-berlin.de/listinfo/linux-minidisc]]. Since you may not have yet **write** access to our source repository yet (read access is always possible), you should create patches with your code changes with the help of git and send them to the mailing list of this project. This wiki page explains how to create and manage patches using git: [[writeandsubmitpatch]]. The mailing list can be found here: [[https://lists.fu-berlin.de/listinfo/linux-minidisc]].
Line 40: Line 40:
     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.
Line 63: Line 61:
  
   * 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 librariesA 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 layerHowever, 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 ===
googlesummerofcode.1295445854.txt.gz · Last modified: 2011/01/19 14:04 by glaubitz

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki