commit 2a1b47ea2848e122d614681e107ac8733805e089
Author: Christophe Fergeau <cferg...@mandriva.com>
Date:   Thu Feb 4 12:09:14 2010 +0100

    doc trying to give an overview of how it all works
    
    "all" = explain which files are generated by libgpod, when they are
    generated, why they are needed, ...

 README.overview |  102 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 102 insertions(+), 0 deletions(-)
---
diff --git a/README.overview b/README.overview
new file mode 100644
index 0000000..a02ad5c
--- /dev/null
+++ b/README.overview
@@ -0,0 +1,102 @@
+Introduction:
+
+The goal of this document is to provide an overview of the various parts/files
+involved when libgpod interacts with a device. Ideally it will be helpful to
+help application writers/distributors/... figure out what's going wrong when 
+trying to interact with an iPod-like device.
+
+Please note that not all devices need all these steps (especially the
+hash58/hash72 stuff and the sqlite databases), see the table at the end for
+more details
+
+
+Overview:
+
+* device is plugged in
+
+HAL/udev detects the insertion and runs a callout. This callout sends the
+appropriate commands (raw SCSI/USB commands or special AFC command) to the
+device to get an XML file describing the device capabilities (artwork formats
+supported, serial number, ...) and dumps this XML file to
+iPod_Control/Device/SysInfoExtended for future use by libgpod. libgpod doesn't 
+do it directly because sending these SCSI/USB commands might need elevated
+priviledges.
+
+* the application uses libgpod to read the device content
+
+iPod_Control/iTunes/iTunesDB is accessed as well as a few other files. If
+the device needs an hash72 (either in its iTunesDB or because it's using sqlite
+databases), then the necessary information is extracted from the existing 
+iTunesDB to generate an iPod_Control/Device/HashInfo file (if it doesn't
+exist) which will be useful to generate any hash72 we need for this device.
+
+* the application uses libgpod to write to the device
+
+libgpod generates an iPod_Control/iTunes/iTunesDB file. If an hash58 is needed
+then the device FirewireID is used to generate it. If an hash72 is needed
+then the HashInfo file is used to generate it. If the device uses sqlite
+databases, they are generated as well. Post process SQL commands are then 
+extracted from the device (either by getting them from SysInfoExtended or by 
+getting them through AFC) and executed after the sqlite database generation. 
+These post process commands are useful to make sure the sqlite databases layout
+matches what the current device firmware expects.
+
+
+Glossary:
+
+iTunesDB: binary file containing information about all the songs, playlists, 
...
+stored on the device. On recent devices (iPhoneOS 3.x, Nano 5g), it's replaced
+by iTunesCDB which is a compressed version of iTunesDB.
+
+sqlite: recent devices (iPhoneOS 3.x, Nano5g) use sqlite databases instead
+of an iTunesDB to store song information, playlists, ... More accurately, they 
+have both an iTunesCDB (compressed iTunesDB) used by iTunes to know the device
+content and sqlite databases used by the device. Along with these sqlite
+databases, there's a .cbk file which contains checksum information and a hash72
+for the sqlite data.
+
+iPhoneOS: umbrella for iPhone-like devices, ie iPhones, iPod Touch and (likely)
+iPad. On these devices, what matters is the firmware version, not the device
+type.
+
+hash58: first iTunesDB hashing scheme introduced by Apple. It appeared in the 
+iPod Nano Video (3g)  and iPod Classic and was used by iPhoneOS 1.x. It's fully
+reverse-engineered and uses the iPod FirewireID (called this way even on USB
+devices) as part of the calculation.
+
+hash72: hashing scheme that was first introduced in iPhoneOS 2.x and has then
+been used on the iPod Nano with a camera (5g). It was much more complicated to 
+reverse engineer and is not yet 100% known. However, given a file with a valid
+hash72, we can extract some hashing data to be able to generate valid hash72
+hashes for any file. 
+
+
+
+iPod feature matrix:
+
+               SysInfoExtended   hash58   hash72   sqlite   iTunesCDB
+iPod 1G                             no       no       no       no          no
+iPod 2G                             no       no       no       no          no
+iPod 3G                             no       no       no       no          no
+Mini 1G                             no       no       no       no          no
+Mini 2G                             no       no       no       no          no
+
+iPod 4G                     yes       no       no       no          no
+iPod 5G                     yes       no       no       no          no
+Nano 1G                     yes       no       no       no          no
+Nano 2G                     yes       no       no       no          no
+
+iPod Classic                yes      yes       no       no          no
+Nano3G                      yes      yes       no       no          no
+Nano4G                      yes      yes       no       no          no
+iPhoneOS 1.x                yes      yes       no       no          no
+
+iPhoneOS 2.x                yes       no      yes       no          no
+
+Nano5G                      yes   yes[1]      yes      yes         yes
+iPhoneOS 3.x                yes       no      yes      yes         yes
+
+
+[1] surprisingly, the Nano5G uses a hash58 for its iTunesCDB and a hash72 
+for its sqlite cbk file. iPhoneOS 3.x uses hash72 everywhere.
+

------------------------------------------------------------------------------
The Planet: dedicated and managed hosting, cloud storage, colocation
Stay online with enterprise data centers and the best network in the business
Choose flexible plans and management services without long-term contracts
Personal 24x7 support from experience hosting pros just a phone call away.
http://p.sf.net/sfu/theplanet-com
_______________________________________________
gtkpod-cvs2 mailing list
gtkpod-cvs2@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2

Reply via email to