Projekte > Optische Laufwerke > Hardware

Capabilities

MODE SENSE (10) Command - Operation Code $5A
CD Capabilities and Mechanical Status - Page Code $2A

Multi-Media Commands - 6 Kapitel 6.12. Das MODE SENSE (10) Command gibt verschiedene Parameter des Gerätes zurück. Für die Beschreibung des Commands wird auf die SCSI Primary Commands - 3 (SPC-3) verwiesen. Dort findet sich in Kapitel 6.10 MODE SENSE (10) Command eine Beschreibung des Command Descriptor Blocks, wobei im weiteren Bezug auf Kapitel 6.9 MODE SENSE (6) command genommen wird.

Der MODE SENSE (10) Command Descriptor Block:

  7 6 5 4 3 2 1 0
0 Operation Code = $5A
1 Reserviert LLBAA DBD Reserviert
2 PC PAGE CODE
3 SUBPAGE CODE
4 Reserviert
5
6
7 Allocation Length
8
9 Control

 

Die Werte:

Byte 0: Operation Code - $5A

Byte 1: LLBAA - Long LBA Accepted
Long Logical Block Addressing - Ist theoretisch bei einer Speicherkapazität von über 2,1 Terabyte notwendig. Praktisch bei XP wohl schon bei 990 Gigabyte.

Byte 1: DBD - Disable Block Descriptor
Bei Wert 0 werden keine oder mehrere Block Descriptors in den MODE SENSE Data zurückgegeben. Bei Wert 1 werden keine Block Descriptoren zurückgegeben.

Byte 2: PC - Page Control

  • 00b - Current values
  • 01b - Changeable values
  • 10b - Default values
  • 11b - Saved values

Byte 2 und 3: Page Code und Subpage Code
Die Codes sind in SCSI Primary Commands - 3 (SPC-3) Anhang D.6 und darin in Tabelle D.12 aufgeführt. Für CD Capabilities and Mechanical Status ist die Page $2A und die Sub Page $00.

Byte 7 und 8: Länge der Antwortstruktur

Byte 9: Control - ?

 

Antwortstruktur

Als Antwort erhält man eine Mode Parameter List, welche vom Gerätetyp und dem unterstützten Multi Media Command Standard abhängig ist. Sie beginnt mit einem acht Byte langen Mode Parameter (10) Header. Diesem schließt sich bis MMC-2 eine 22 Byte lange Struktur an. In MMC-3 wurde diese Struktur erweitert und kann deutlich länger sein. Deshalb wird die Länge mit $FF angegeben. Die tatsächliche Länge kann dem Mode Parameter (10) Header entnommen und der Aufruf muss gegebenenfalls mit korrigiertem Wert wiederholt werden. Eine Beschreibung des Mode Parameter (10) Header kann den Multi-Media Commands - 6 Kapitel 7.2 wie folgt entnommen werden:

  7 6 5 4 3 2 1 0
0 Mode Data Length
1
2 Reserviert
3
4
5
6 Block Descriptor Length = 0
7

 
Mode Data Length
Gibt in Bytes an, wie lang die folgende Datenstruktur ist.

Block Descriptor Length
Die Länge ist 0, da Multimediageräte keine Block Descriptors unterstützen. Für ältere SCSI logical Units sind es 8.

CD/DVD Capabilities and Mechanical Status Page (Page Code 2Ah)
Die Beschreibung der CD/DVD Capabiblities and Mechanical Status Page (Page Code $2A) findet sich in den SCSI Multimedia Commands 3 (MMC-3) in Kapitel 6.3.11:

  7 6 5 4 3 2 1 0
0 PS Reserviert Page Code ($2A)
1 Page Length (28 + 4 * (maximum number of n))
2 Reserved DVD-RAM Read DVD-R Read DVD-ROM Read Method 2 CD-RW Read CD-R Read
3 Reserved DVD-RAM Write DVD-R Write Reserved Test Write CD-RW Write CD-R Write
4 BUF Multi Session Mode2 Form2 Mode2 Form1 Digital Port (2) Digital Port (1) Composite Audio Play
5 Read Bar Code UPC ISRC C2 Pointers supported RW Deinter- leaved & corrected RW Supported CD-DA Stream is Accurate CD-DA Cmds Supported
6 Loading Mechanism Type Reserved Eject (Individual /Magazine) Prevent Jumper Lock State Lock
7 Reserved RW in Lead-In Side Change Capable S/W Slot Selection (SSS) Changer Supports Disc Present Separate Channel Mute Separate Volume Levels
8 Maximum Read Speed Supported (Veraltet)
9
10 Number of Volume Levels Supported
11
12 Buffer Size Supported
13
14 Current Reed Speed Selected (Veraltet)
15
16 Reserviert
17 Reserviert Length LSBF RCK BCKF Reserviert
18 Maximum Write Speed (Veraltet)
19
20 Current Write Speed Selected (Veraltet)
21
22 Copy Management Revision Supported
23
24 Reserved
25
26
27 Reserved Rotation Control Selected
28 Current Write Speed Selected
29
30 Number of Logical Unit Write Speed Performance Descriptor Tables (n)
31
32 Logical Unit Write Speed Performance Descriptor Block #1
33
34
35
36 Logical Unit Write Speed Performance Descriptor Block #2
37
38
39
.
.
 
n * 4 + 28 Logical Unit Write Speed Performance Descriptor Block #n
n * 4 + 29
n * 4 + 30
n * 4 + 31
  Padding

 

PS (Parameters Savable): Gibt an, ob die logische Einheit die mode page an einer hersteller spezifischen Speicherstelle speichern kann.

Page Code: Code der zurückgegebenenen Seite.

Page Length: Gibt die noch folgenden Bytes an.

DVD-RAM Read: Gibt an, ob das Gerät DVD-RAM Medien lesen kann.

DVD-R Read: Gibt an, ob das Gerät DVD-R Medien lesen kann.

DVD-ROM Read: Gibt an,ob das Gerät DVD-ROM Medien lesen kann.

Method 2: Gibt an, ob das Lesen von fixed packed tracks unterstützt wird.

CD-RW Read: Gibt an, ob CD-RW gelesen werden können.

CD-R Read: Gibt an, ob CD-R gelesen werden können.

DVD-RAM Write: Gibt an, ob DVD-RAM Medien beschrieben werden können.

DVD-R Write: Gibt an, ob DVD-R Medien beschrieben werden können.

Test Write: Gibt an, ob die Test Write function unterstützt wird.

CD-RW Write: Gibt an, ob CD-RW Medien beschrieben werden können.

CD-R Write: Gibt an, ob CD-R Medien beschrieben werden können.

BUF: Gibt an, ob für CD-R/W Buffer Underrun freie Aufnahmen unterstützt werden.

Multi Session: Gibt an, ob CDs mit mehreren Sessions gelesen werden können.

Mode2 Form2: gibt an, ob CD-Sektoren im Mode 2 Form 2 Format gelesen werden können.

Mode2 Form1: gibt an, ob CD-Sektoren im Mode 2 Form 1 Format gelesen werden können.

Digital Port (2): Gibt an, ob eine Digitalausgabe nach IEC958 auf dem Anschluss 2 unterstützt wird.

Digital Port (1): Gibt an, ob eine Digitalausgabe nach IEC958 auf dem Anschluss 1 unterstützt wird.

Composite: Gibt an, ob ein Composite Audio- und Videostream an einem unabhängigen Digitalport wiedergegeben werden können.

Audio Play: Gibt an, ob Analog Audio abgespielt werden kann.

Read Bar Code: Gibt an, ob das Lesen des Disc Bar Code und die Rückgabe der Information über den READ DISC INFORMATION Command unterstützt wird.

UPC: Gibt an, ob das Lesen der Media Catalog Number mit dem READ SUB-CHANNEL Command unterstützt werden.

ISRC: Gibt an, ob das Auslesen von International Standard Recording Code Information über den READ SUB-CHANNEL Command unterstützt wird.

C2 Pointers supported: Gibt an, ob C2 Fehlerpointer und C2 Blockfehlerflags über den READ CD Command unterstützt wird.

R-W Sub Channels Deinterleaved & corrected: Gibt an, ob die R-W Sub-Channels mit dem READ CD Command mit unverschachtelten und korrigierten Daten gelesen werden können.

Sub Channels R-W Reading Supported: gibt an, ob die R-W Sub-Channel mit dem READ CD Command gelesen werden können.

CD-DA Stream is Accurate Gibt an, ob nach einem Lesefehler weitergelesen werden kann.

CD-DA Cmds Supported: Gibt an, das Lesen von CD Audiosektoren mit dem READ CD Command unterstützt wird.

Loading Mechanism Type: Gibt den Typ des Mechanismus an:

7 6 5 Loading Mechanism Type
0 0 0 Caddy type loading mechanism
0 0 1 Tray type loading mechanism
0 1 0 Popup type loading mechanism
0 1 1 Reserviert
1 0 0 Changer with individually changeable discs
1 0 1 Changer using a Magazine mechanism
1 1 0 Reserviert
1 1 1 Reserviert

 

Eject (Individual/Magazine): Gibt an, ob der Auswurf der Medien über das START STOP UNIT Command mit dem LoEj Bit unterstützt wird. Wenn es sich um einen Wechsler mit Magazinen handelt, gibt es an, ob dieses Magazin entfernt werden kann.

Prevent Jumper: Gibt an, ob das Gerät einen physikalischen Schalter zum Sperren für den Auswurf besitzt.

Lock State: Wenn Lock gesetzt ist, gibt es an, ob das Laufwerk gesperrt ist.

Lock: Gibt an, ob das Sperren des Gerät mit den PREVENT ALLOW MEDIUM REMOVAL Command unterstützt wird.

RW in Lead-In: Gibt an, ob die rohe R-W Sub-Channel Informationen aus dem Lead-In gelesen werden können.

Side Change Capable: gibt an, ob das Gerät zweiseitige Medien unterstützt. Dies trifft normalerweise nur für Wechsler zu.

Software Slot Selection: Kontrolliert das Verhalten des LOAD/UNLOAD MEDIUM Command.

Changer Supports Disc Present: Gibt an, ob das Gerät einen Wechsler enthält.

Separate Channel Mute: Gibt an, ob die unabhängige Stummschaltung eines jeden Audiokanals über die CD Audio Control Page unterstützt wird.

Separate Volume Levels: Gibt an, ob die Lautstärkeregelung für jeden Kanal über die Audio control Page unterstützt wird.

Maximum Read Speed Supported: Die höchste unterstützte Lesegeshwindigkeit. Sie ist vom eingelegten Medium abhängig. Obwohl als veraltet bezeichnet, wird sie meist noch angegeben.

Number of Volume Levels Supported: Gibt die Anzahl der unterstützten diskrete Lautstärkelevel an. Bei Audio an und aus sind dies zwei.

Buffer Size Supported: Gibt die Größe des Speicherpuffers in kByte an.

Current Reed Speed Selected: Die gegenwärtig eingestellte Lesegeschwindigkeit. Sie ist vom eingelegten Medium abhängig. Obwohl als veraltet bezeichnet, wird sie meist noch angegeben.

Length, LSBF, RCK, BCKF: Die Flags sind nur gültig, wenn Digital Port (1) oder Digital Port (2) gesetzt sind.

Length: Die Flags sind nur gültig, wenn Digital Port (1) oder Digital Port (2) gesetzt sind.

LSBF: Die Flags sind nur gültig, wenn Digital Port (1) oder Digital Port (2) gesetzt sind.

RCK: Die Flags sind nur gültig, wenn Digital Port (1) oder Digital Port (2) gesetzt sind.

Maximum Write Speed: Die höchste unterstützte Schreibgeschwindigkeit. Sie ist vom eingelegten Medium abhängig. Obwohl als veraltet bezeichnet, wird sie meist noch angegeben.

Copy Management Revision Supported Gibt die Revision des Kopierschutzschemas an. Wenn für DVD CSS pder DPPM unterstützt wird, soll der Wert $0001 betragen.

Rotation Control Selected: Gibt an, wie die Rotation controlliert wird:

Wert Beschreibung
00b Media default rotation control
01b CAV
Andere Reserviert

 
Current Write Speed Selected: Die gegenwärtig eingelegte Schreibgeschwindigkeit. Sie ist vom eingelegten Medium abhängig. In der alten Version der Code Page belegt das Feld die Bytes 20 und 21. In der neuen Version wird es als veraltet bezeichnet, wird jedoch meist angegeben. In der neuen Version belegt das Feld die Bytes 28 und 29. Hinzu ist das Feld Rotation Control Selected in Byte 27 gekommen.

Number of Logical Unit Write Speed Performance Descriptor Tables (n): Gibt die Anzahl der folgenden Logical Unit Write Speed Performance Descriptor Blocks an.

Logical Unit Write Speed Performance Descriptor Block - Struktur:

  7 6 5 4 3 2 1 0
0 Reserved
1 Reserved Rotation Control
2 Write Speed Supported (kbytes/sec)
3

 
Hier bedeutet die Rotation Control:

Wert Beschreibung
00b CLV
01b CAV
10b Reserviert
11b

 
Padding: Sind Bytes zur Auffüllung.

 

Deklarationen

 
  {
  *  Für die Auswertung.
  }

  type
    TModeParameterHeader = record
      ModeDataLength  : Word;
      BlockDescLength : Word;
    end;
 
  type
    TLogUnitWriteSpeedPerfDescBlock = record
      Rotation   : Byte;
      WriteSpeed : Word;
    end;
 
  type
    TCapabilities = record
      PS           : Boolean;
      PageCode     : Byte;
      PageLength   : Byte;
      DVDRAMRead   : Boolean;
      DVDRRead     : Boolean;
      DVDROMRead   : Boolean;
      Method2      : Boolean;
      CDRWRead     : Boolean;
      CDRRead      : Boolean;
      DVDRAMWrite  : Boolean;
      DVDRWrite    : Boolean;
      TestWrite    : Boolean;
      CDRWWrite    : Boolean;
      CDRWrite     : Boolean;
      BUF          : Boolean;
      MultiSession : Boolean;
      Mode2Form2   : Boolean;
      Mode2Form1   : Boolean;
      DigitalPort2 : Boolean;
      DigitalPort1 : Boolean;
      Composite    : Boolean;
      AudioPlay    : Boolean;
      ReadBarCode  : Boolean;
      UPC          : Boolean;
      ISRC         : Boolean;
      C2PSup       : Boolean;
      RWDeIntlvd   : Boolean;
      RWSupported  : Boolean;
      CDDAStrIsAcc : Boolean;
      CDDACmdsSupp : Boolean;
      LoadMechType : Byte;
      Eject        : Boolean;
      PrevJumper   : Boolean;
      LockState    : Boolean;
      Lock         : Boolean;
      RWLeadIn     : Boolean;
      SideChCap    : Boolean;
      SWSlotSel    : Boolean;
      ChSDiscPres  : Boolean;
      SepChMute    : Boolean;
      SepVolLvl    : Boolean;
      NOfVolLvlSup : Word;
      BufSizeSup   : Word;
      Length       : Byte;
      LSBF         : Boolean;
      RCK          : Boolean;
      BCKF         : Boolean;
      CpyManRevSup : Word;
      RotCtrlSel   : Byte;
      CurWriSpeSel : Word;
      NumLUWSPDT   : Word;
      LUWSPDBlock  : array of TLogUnitWriteSpeedPerfDescBlock;
      {  Ab MMC-3 als veraltet bezeichnet  }
      SpeedReadMax  : Word;
      SpeedReadCur  : Word;
      SpeedWriteMax : Word;
      SpeedWriteCur : Word;
    end;
 
  type
    TWriteSpeedDesc = record
      Rotation   : String;
      WriteSpeed : String;
    end;
 
      ...
 
  {
  *  Für den Befehl.
  }
 
  const
    SCSIOP_MODE_SENSE10 = $5A;
    SCSIPC_CAPABILITIES = $2A;
 
  type
    TMODE_SENSE10_CDB = record
      OperationCode    : Byte;
      PC_PageCode      : Byte;
      SubpageCode      : Byte;
      AllocationLength : Word;
    end;
 
  type
    TCAPABILITIES_MECHANICAL_STATUS = record
      ModeParameterHeader : array[0..7] of Byte;
      Data                : array[0..$FF] of Byte;
    end;
    PCAPABILITIES_MECHANICAL_STATUS = ^TCAPABILITIES_MECHANICAL_STATUS;
 
          

 

Ausführung

Nach dem Ausfüllen des Command Descriptors Blockes wird die Abfrage ausgeführt und die Antwort ausgewertet. Es werden auch die als veraltet bezeichneten Felder ausgewertet.

 
  function TOptDrives.ReadCapabilities(aDevice: THandle): Boolean;
  {*******************************************************************************
  *  Eigenschaften und mechanischer Status.
  }
  var
    MODE_SENSE10_CDB    : TMODE_SENSE10_CDB;
    pCapaMechStatus     : PCAPABILITIES_MECHANICAL_STATUS;
    ModeParameterHeader : TModeParameterHeader;
    aCDB                : Array of Byte;
    n                   : Integer;
  begin
    Result := False;
    {
    *  Eigenschaften initialisieren.
    }
    FillChar(FDrive[FActive].Capabilities, SizeOf(FDrive[FActive].Capabilities), $00);
    {
    *  Den Command Descriptor Block füllen.
    }
    ZeroMemory(@MODE_SENSE10_CDB, SizeOf(MODE_SENSE10_CDB));
    MODE_SENSE10_CDB.OperationCode    := SCSIOP_MODE_SENSE10;
    MODE_SENSE10_CDB.PC_PageCode      := SCSIPC_CAPABILITIES;
    MODE_SENSE10_CDB.AllocationLength := SizeOf(TCAPABILITIES_MECHANICAL_STATUS);
    {
    *  Den Command Descriptor Block übertragen.
    }
    SetLength(aCDB, 10);
    aCDB[0] := MODE_SENSE10_CDB.OperationCode;
    aCDB[2] := MODE_SENSE10_CDB.PC_PageCode;
    aCDB[3] := MODE_SENSE10_CDB.SubpageCode;
    aCDB[7] := HiByte(MODE_SENSE10_CDB.AllocationLength);
    aCDB[8] := LoByte(MODE_SENSE10_CDB.AllocationLength);
    {
    *  Befehl ausführen
    }
    GetMem(pCapaMechStatus, SizeOf(TCAPABILITIES_MECHANICAL_STATUS));
    if GET_SCSI_PASS_THROUGH_DIRECT(aDrive, aCDB, pCapaMechStatus,
                                    SizeOf(TCAPABILITIES_MECHSTATUS))
    then begin
      with ModeParameterHeader
      do begin
        ModeDataLength  := CAPABILITIES_MECHSTATUS.ModeParameterHeader[0] shl 8 or
                           CAPABILITIES_MECHSTATUS.ModeParameterHeader[1];
        BlockDescLength := CAPABILITIES_MECHSTATUS.ModeParameterHeader[6] shl 8 or
                           CAPABILITIES_MECHSTATUS.ModeParameterHeader[7];
      end;
      {
      *  Prüfen, ob nach dem Mode Parameter Header Daten folgen.
      }
      if ModeParameterHeader.ModeDataLength > 6 then
      with FDrive[FActive].Capabilities
      do begin
        PS       := pCapaMechStatus.Data[0] and $80 > 0;
        PageCode := pCapaMechStatus.Data[0] and $3F;
        {
        *  Richtigkeit des PageCodes prüfen.
        }
        ifPageCode = SCSIPC_CAPABILITIES
        then begin
          PageLength := pCapaMechStatus.Data[1];
          {
          *  Prüfen, ob die Länge im gültigen Bereich liegt.
          }
          if PageLength > 0
          then begin
            DVDRAMRead    := pCapaMechStatus.Data[2] and $20 > 0;
            DVDRRead      := pCapaMechStatus.Data[2] and $10 > 0;
            DVDROMRead    := pCapaMechStatus.Data[2] and $08 > 0;
            Method2       := pCapaMechStatus.Data[2] and $04 > 0
            CDRWRead      := pCapaMechStatus.Data[2] and $02 > 0;
            CDRRead       := pCapaMechStatus.Data[2] and $01 > 0;
            DVDRAMWrite   := pCapaMechStatus.Data[3] and $20 > 0;
            DVDRWrite     := pCapaMechStatus.Data[3] and $10 > 0;
            TestWrite     := pCapaMechStatus.Data[3] and $04 > 0;
            CDRWWrite     := pCapaMechStatus.Data[3] and $02 > 0;
            CDRWrite      := pCapaMechStatus.Data[3] and $01 > 0;
            BUF           := pCapaMechStatus.Data[4] and $80 > 0;
            MultiSession  := pCapaMechStatus.Data[4] and $40 > 0;
            Mode2Form2    := pCapaMechStatus.Data[4] and $20 > 0;
            Mode2Form1    := pCapaMechStatus.Data[4] and $10 > 0;
            DigitalPort2  := pCapaMechStatus.Data[4] and $08 > 0;
            DigitalPort1  := pCapaMechStatus.Data[4] and $04 > 0;
            Composite     := pCapaMechStatus.Data[4] and $02 > 0;
            AudioPlay     := pCapaMechStatus.Data[4] and $01 > 0;
            ReadBarCode   := pCapaMechStatus.Data[5] and $80 > 0;
            UPC           := pCapaMechStatus.Data[5] and $40 > 0;
            ISRC          := pCapaMechStatus.Data[5] and $20 > 0;
            C2PSup        := pCapaMechStatus.Data[5] and $10 > 0;
            RWDeIntlvd    := pCapaMechStatus.Data[5] and $08 > 0;
            RWSupported   := pCapaMechStatus.Data[5] and $04 > 0;
            CDDAStrIsAcc  := pCapaMechStatus.Data[5] and $02 > 0;
            CDDACmdsSupp  := pCapaMechStatus.Data[5] and $01 > 0;
            LoadMechType  := pCapaMechStatus.Data[6] and $E0 shr 5;
            Eject         := pCapaMechStatus.Data[6] and $08 > 0;
            PrevJumper    := pCapaMechStatus.Data[6] and $04 > 0;
            LockState     := pCapaMechStatus.Data[6] and $02 > 0;
            Lock          := pCapaMechStatus.Data[6] and $01 > 0;
            RWLeadIn      := pCapaMechStatus.Data[7] and $20 > 0;
            SideChCap     := pCapaMechStatus.Data[7] and $10 > 0;
            SWSlotSel     := pCapaMechStatus.Data[7] and $08 > 0;
            ChSDiscPres   := pCapaMechStatus.Data[7] and $04 > 0;
            SepChMute     := pCapaMechStatus.Data[7] and $02 > 0;
            SepVolLvl     := pCapaMechStatus.Data[7] and $01 > 0;
            SpeedReadMax  := pCapaMechStatus.Data[8] shl 8 or
                             pCapaMechStatus.Data[9];
            NOfVolLvlSup  := pCapaMechStatus.Data[10] shl 8 or
                             pCapaMechStatus.Data[11];
            BufSizeSup    := pCapaMechStatus.Data[12] shl 8 or
                             pCapaMechStatus.Data[13];
            SpeedReadCur  := pCapaMechStatus.Data[14] shl 8 or
                             pCapaMechStatus.Data[15];
            Length        := pCapaMechStatus.Data[17] and $31 shr 4;
            LSBF          := pCapaMechStatus.Data[17] and $08 > 0;
            RCK           := pCapaMechStatus.Data[17] and $04 > 0;
            BCKF          := pCapaMechStatus.Data[17] and $02 > 0;
            SpeedWriteMax := pCapaMechStatus.Data[18] shl 8 or
                             pCapaMechStatus.Data[19];
            SpeedWriteCur := pCapaMechStatus.Data[20] shl 8 or
                             pCapaMechStatus.Data[21];
            CpyManRevSup  := pCapaMechStatus.Data[22] shl 8 or
                             pCapaMechStatus.Data[23];
            RotCtrlSel    := pCapaMechStatus.Data[27] and $03;
            CurWriSpeSel  := pCapaMechStatus.Data[28] shl 8 or
                             pCapaMechStatus.Data[29];
            NumLUWSPDT    := pCapaMechStatus.Data[30] shl 8 or
                             pCapaMechStatus.Data[31];
            {
            *  Blöcke abarbeiten.
            }
            if NumLUWSPDT > 0
            then begin
              SetLength(LUWSPDBlock, NumLUWSPDT);
              for n := 1 to FDrive[FActive].Capabilities.NumLUWSPDT
              do begin
                LUWSPDBlock[n - 1].Rotation
                                  := pCapaMechStatus.Data[n * 4 + 29] and $07;
                LUWSPDBlock[n - 1].WriteSpeedSupported
                                  := pCapaMechStatus.Data[n * 4 + 30] shl 8 or
                                     pCapaMechStatus.Data[n * 4 + 31];
              end;
            end;
            Result := True;
          end;
        end;
      end;
    end;
    FreeMem(pCapaMechStatus);
  end;
          

 

Demo, welche diese Funktion nutzt:

Capabilities (podCapabilitie.7z - 294 kb) MD5 (1 kb). Stand: 30. Juni 2013

Änderungen an der Demo

Datum Beschreibung
30.06.2013Kleine Überarbeitung und neuer Name.
27.01.2012Hinzu: Als veraltet bezeichnete Felder eingefügt.