FU Logo
  • Startseite
  • Kontakt
  • Impressum
  • Home
  • Listenauswahl
  • Anleitungen

Re: [linux-minidisc] netmd download

thread -->
date -->
  • From: manner.moe@gmx.de
  • To: linux-minidisc@lists.fu-berlin.de
  • Date: Thu, 4 Nov 2010 19:46:52 +0100
  • Reply-to: manner.moe@gmx.de
  • Subject: Re: [linux-minidisc] netmd download


>Betreff : [linux-minidisc] netmd download
>Gesendet: 30.10.2010 21:03:28
>An : "linux-minidisc@lists.fu-berlin.de"
>Von: "manner.moe@gmx.de"

>----- Originale Nachricht -----

>I logged USB transfer while SonicStage download and found some commands i 
>don´t know.
>(see attached text file)

O.K., i made some more tests and usb logs.
The attached text file shows all commands from SonicStage start to SonicStage 
close 
There seems to be a general command to access TOC data, there are several 
comments
in the text file to describe my interpretation of some commands.

regards,
Thomas


# downloading 1 Track with SonicStage on MZ-NH1
# - starts at opening SonicStage and ends on closing SonicStage
# - download part and reading track list are not displayed, we already know this
# - known commands are replaced by their function names in libnetmd.py
# - some commands are grouped with their corresponding open/close commands to make it easier to read
#
# - following commands are replaced, too
#   these are not implemented in libnetmd, it´s just a sample of how they could be implemented
#
#   => 00 18 08 00 $m 00   # accesDeviceDescriptor()
#   <= 09 18 08 00 $m 00   # $m (length: 1 Byte) = mode (0x01=open; 0x00 = close)
#
#   => 00 18 09 00 ff 00 00 00 00 00                     # getConfigDescriptor()
#   <= 09 18 09 00 10 00 00 37 00 00 00 35 00 02 00 02   # not verified, looks like a kind of configuration descriptor
#      00 02 10 00 18 00 00 0d 00 0b 01 10 01 03 01 20
#      03 00 02 10 00 00 1a 4e 65 74 4d 44 10 ff 00 00
#      00 01 48 69 2d 4d 44 65 78 33 57 61 6c 6b 6d 61
#      6e
#
#   => 00 18 08 80 00 $m 00         # accessDeviceSettings()
#   <= 09 18 08 80 00 $m 00         # $m (length: 1 Byte) = mode (0x01=open; 0x00 = close) 
#
#   => 00 18 08 10 $p $s $m 00      # accessTOC()   ,,, this includes cacheTOC() and syncTOC()
#   <= 09 18 08 10 $p $s $m 00      # $p (length: 1 Byte) = part (0x10=data; 0x18=titles)
#                                   # $s (length: 1 Byte) = subpart (0x00=medium; 0x01= disc/group; 0x02=track)
#                                   # $m (length: 1 Byte) = mode (0x00 = close; 0x01=open; 0x03=open writable)
#
#      This seems to open direct TOC acces to disc and not to cloned TOC in device internal memory
#      cacheTOC() can be replaced by accessTOC() part:titles / subpart:track / mode:open writable
#      syncTOC() can be replaced by accessTOC() part:titles / subpart:track / mode:close
#
#      writing disc title uses this method of TOC access, too.
#      => 00 18 08 10 18 01 03 00      # accessTOC() part:titles / subpart:disc/group / mode:open writable
#      <= 09 18 08 10 18 01 03 00
#      => 00 18 07 02 20 18 01 ....    # setDiscTitle()
#      <= 09 18 07 02 20 18 01 ....
#      => 00 18 08 10 18 01 00 00      # accessTOC() part:titles / subpart:disc/group / mode:close
#      <= 09 18 08 10 18 01 00 00
#
#   No warranty, this is just my own interpretation of these commands ;)


accesDeviceDescriptor() mode:open
getConfigDescriptor()
accesDeviceDescriptor() mode:close

getStatus()

=> 02 18 41 ff 00 00 20 10 01 00 00 20 10 01 00 01
<= 08 18 41 ff 00 00 20 10 01 00 00 20 10 01 00 01   # STATUS_NOT_IMPLEMENTED on NH1

=> 02 18 42 ff 00 00 20 10 01 00 00 00 00 00 00 00
<= 08 18 42 ff 00 00 20 10 01 00 00 00 00 00 00 00   # STATUS_NOT_IMPLEMENTED on NH1

=> 02 18 c1 ff 60 00
<= 08 18 c1 ff 60 00                                 # STATUS_NOT_IMPLEMENTED on NH1

=> 02 ff b2 70
<= 08 ff b2 70                                       # STATUS_NOT_IMPLEMENTED on NH1

getStatus()

stop()

getStatus()

accesDeviceDescriptor() mode:open
getConfigDescriptor()
accesDeviceDescriptor() mode:close

=> 02 18 00 08 00 46 f0 03 01 03 30 ff 00 10 01 00
   00
<= 08 18 00 08 00 46 f0 03 01 03 30 ff 00 10 01 00   # STATUS_NOT_IMPLEMENTED on NH1
   00

accessTOC() part:data / subpart:medium / mode:open
getDiscCapacity()
accessTOC() part:data / subpart:medium / mode:close

accessTOC() part:data / subpart:medium / mode:open
getDiscFlags()
accessTOC() part:data / subpart:medium / mode:close

acquire()

accessTOC() part:data / subpart:medium / mode:open
getDiscFlags()
accessTOC() part:data / subpart:medium / mode:close

accessTOC() part:data / subpart:medium / mode:open
getDiscFlags()
accessTOC() part:data / subpart:medium / mode:close

accessTOC() part:titles / subpart:disc/group / mode:open
getDiscTitle() wchar_value = 0
accessTOC() part:titles / subpart:disc/group / mode:close

accessTOC() part:titles / subpart:disc/group / mode:open
getDiscTitle() wchar_value = 1
accessTOC() part:titles / subpart:disc/group / mode:close

=> 02 18 41 ff 00 00 20 10 01 00 00 20 10 01 00 01
<= 08 18 41 ff 00 00 20 10 01 00 00 20 10 01 00 01   # STATUS_NOT_IMPLEMENTED on NH1

=> 02 18 42 ff 00 00 20 10 01 00 00 00 00 00 00 00
<= 08 18 42 ff 00 00 20 10 01 00 00 00 00 00 00 00   # STATUS_NOT_IMPLEMENTED on NH1

=> 02 18 c1 ff 60 00
<= 08 18 c1 ff 60 00                                 # STATUS_NOT_IMPLEMENTED on NH1

=> 02 ff b2 70
<= 08 ff b2 70                                       # STATUS_NOT_IMPLEMENTED on NH1

=> 02 18 41 ff 00 00 20 10 01 00 00 20 10 01 00 01
<= 08 18 41 ff 00 00 20 10 01 00 00 20 10 01 00 01   # STATUS_NOT_IMPLEMENTED on NH1

=> 02 18 42 ff 00 00 20 10 01 00 00 00 00 00 00 00
<= 08 18 42 ff 00 00 20 10 01 00 00 00 00 00 00 00   # STATUS_NOT_IMPLEMENTED on NH1

=> 02 18 c1 ff 60 00
<= 08 18 c1 ff 60 00                                 # STATUS_NOT_IMPLEMENTED on NH1

=> 02 ff b2 70
<= 08 ff b2 70                                       # STATUS_NOT_IMPLEMENTED on NH1

accesDeviceDescriptor() mode:open
getConfigDescriptor()
accesDeviceDescriptor() mode:close

accesDeviceDescriptor() mode:open
getConfigDescriptor()
accesDeviceDescriptor() mode:close

getStatus()

=> 00 18 00 08 00 46 f0 03 01 04 80 ff
<= 09 18 00 08 00 46 f0 03 01 04 80 00 03 00

=> 02 18 41 ff 00 00 20 10 01 00 00 20 10 01 00 01
<= 08 18 41 ff 00 00 20 10 01 00 00 20 10 01 00 01   # STATUS_NOT_IMPLEMENTED on NH1

=> 02 18 42 ff 00 00 20 10 01 00 00 00 00 00 00 00
<= 08 18 42 ff 00 00 20 10 01 00 00 00 00 00 00 00   # STATUS_NOT_IMPLEMENTED on NH1

=> 02 18 c1 ff 60 00
<= 08 18 c1 ff 60 00                                 # STATUS_NOT_IMPLEMENTED on NH1

=> 02 ff b2 70
<= 08 ff b2 70                                       # STATUS_NOT_IMPLEMENTED on NH1

accessTOC() part:data / subpart:medium / mode:open
getDiscFlags()
accessTOC() part:data / subpart:medium / mode:close

accessTOC() part:titles / subpart:disc/group / mode:open
getDiscTitle()
accessTOC() part:titles / subpart:disc/group / mode:close

accessTOC() part:data / subpart:disc/group / mode:open
getTrackCount()
accessTOC() part:data / subpart:disc/group / mode:close

=> 02 18 d1 ff 01 00 00 00 88 08 01 00 00            # these three commands seems to be sent to the
<= 0c 18 d1 ff 01 00 00 00 88 08 01 00 00            # device right before stop() command 
                                                     # maybe a kind of preparation for stop() command 
=> 02 18 d1 ff 01 00 00 00 88 08 00 80 00            # as "stop write process" (remove overwrite head from disc surface),
<= 0c 18 d1 ff 01 00 00 00 88 08 00 80 00            # move laser to "park position" etc.

=> 02 18 d1 ff 01 00 00 00 88 08 00 c0 00
<= 0c 18 d1 ff 01 00 00 00 88 08 00 c0 00

stop()

accessTOC() part:data / subpart:medium / mode:open
getDiscCapacity()
accessTOC() part:data / subpart:medium / mode:close

accessDeviceSettings() mode:open
getRecordingParameters()
accessDeviceSettings() mode:close

accessTOC() part:data / subpart:medium / mode:open
getDiscCapacity()
accessTOC() part:data / subpart:medium / mode:close

accessDeviceSettings() mode:open
getRecordingParameters()
accessDeviceSettings() mode:close

accessTOC() part:data / subpart:medium / mode:open
getDiscCapacity()
accessTOC() part:data / subpart:medium / mode:close

accessDeviceSettings() mode:open
getRecordingParameters()
accessDeviceSettings() mode:close

accessTOC() part:data / subpart:medium / mode:open
getDiscCapacity()
accessTOC() part:data / subpart:medium / mode:close

accessDeviceSettings() mode:open
getRecordingParameters()
accessDeviceSettings() mode:close

accessTOC() part:titles / subpart:disc/group / mode:open
getDiscTitle()
accessTOC() part:titles / subpart:disc/group / mode:close

accessTOC() part:data / subpart:disc/group / mode:open
getTrackCount()
accessTOC() part:data / subpart:disc/group / mode:open

accessTOC() part:data / subpart:disc/group / mode:open
getTrackCount()
accessTOC() part:data / subpart:disc/group / mode:open

accessTOC() part:titles / subpart:disc/group / mode:open
getDiscTitle()
accessTOC() part:titles / subpart:disc/group / mode:close

accessTOC() part:data / subpart:disc/group / mode:open
getTrackCount()
accessTOC() part:data / subpart:disc/group / mode:open

accessTOC() part:data / subpart:medium / mode:open
getDiscCapacity()
accessTOC() part:data / subpart:medium / mode:close

accessDeviceSettings() mode:open
getRecordingParameters()
accessDeviceSettings() mode:close

... (several times getDiscTitle() and getTrackCount() )

... (reading track list: getTrackInfo() for length, encoding, flags and title on all tracks)

... (several times getStatus())

accessTOC() part:data / subpart:medium / mode:open
getDiscCapacity()
accessTOC() part:data / subpart:medium / mode:close

accessDeviceSettings() mode:open
getRecordingParameters()
accessDeviceSettings() mode:close

accessTOC() part:data / subpart:medium / mode:open
getDiscCapacity()
accessTOC() part:data / subpart:medium / mode:close

accessDeviceSettings() mode:open
getRecordingParameters()
accessDeviceSettings() mode:close

... (several times getDiscCapacity() and getRecordingParameters() )

accessTOC() part:data / subpart:disc/group / mode:open
getTrackCount()
accessTOC() part:data / subpart:disc/group / mode:open

... (downloading track from enterSecureSession() to leaveSecureSession() as we already know )

accessTOC() part:titles / subpart:disc/group / mode:open
getDiscTitle()
accessTOC() part:titles / subpart:disc/group / mode:close

accessTOC() part:data / subpart:disc/group / mode:open
getTrackCount()
accessTOC() part:data / subpart:disc/group / mode:open

... (several times getDiscTitle() and getTrackCount() )

=> 02 18 d1 ff 01 00 00 00 88 08 01 00 00
<= 0c 18 d1 ff 01 00 00 00 88 08 01 00 00

=> 02 18 d1 ff 01 00 00 00 88 08 00 80 00
<= 0c 18 d1 ff 01 00 00 00 88 08 00 80 00

=> 02 18 d1 ff 01 00 00 00 88 08 00 c0 00
<= 0c 18 d1 ff 01 00 00 00 88 08 00 c0 00

stop()

... (reading track list: getTrackInfo() for length, encoding, flags and title on all tracks)

... (several times getStatus())


stop()

release()












thread -->
date -->
  • linux-minidisc - November 2010 - Archives indexes sorted by:
    [ thread ] [ subject ] [ author ] [ date ]
  • Complete archive of the linux-minidisc mailing list
  • More info on this list...

Hilfe

  • FAQ
  • Dienstbeschreibung
  • ZEDAT Beratung
  • postmaster@lists.fu-berlin.de

Service-Navigation

  • Startseite
  • Listenauswahl

Einrichtung Mailingliste

  • ZEDAT-Portal
  • Mailinglisten Portal