====== XML-Struktur einer CV-Definitionsdatei 2.0 ===== Diese Seite beschreibt die zweite Struktur Version von CV-Definitionsdateien. Die neue Version wird im ersten Release (Sep/Okt '16) vorerst nur bei den Decoder Definitionen Anwendung finden. (BiDiB-Node Definitionen bleiben unberührt) Vorkonfigurierte Decoder Definitionen können zukünftig von der neuen Decoder Datenbank [[http://Decoderdb.de|Decoder DB]] bezogen werden. Das neue Format wird in einem überarbeiteten Editor im neusten Release vom [[:monitor|BiDiB-Monitor]] unterstützt. === Hinweise === * Alle XML-Tags und Attribute sind Case-Sensitiv im camelCase Format. Groß- und Kleinschreibung muss beachtet werden. neu: (alt: ) ===== 1. Grundstruktur ===== Die XML-Datei besteht aus folgenden Teilen.\\ 1) Informationen zur Version der Datei.\\ 2) Infromationen zur Firmware.\\ 2.1) Decoder auf denen diese Firmware installiert werden kann.\\ 2.2) Cv Angaben entsprechend der unterstützen Protokolle.\\ 2.2.1) Auflistung aller verfügbaren CVs.\\ 2.2.2) Einordnung der CVs in eine Baumstruktur.\\ ... ---- ===== 2. Dateiversion ===== Der Versions-Abschnitt liefert Information über die Datei. ^ Attribut ^ Beschreibung ^ | createdBy| Ersteller der Datei (optional) | | creatorLink | Link zum Ersteller (optional) | | author | Author der Datei (optional) | | created| Erstellungsdatum der Datei (optional) | | lastUpdate | Letztes Änderungsdatum der Datei | ---- ===== 3. Firmware ===== Der Firmware-Abschnitt beinhaltet alle Informationen zur Firmware ^ Attribut ^ Beschreibung ^ | version| Versionsnummer der Firmware (optional)| | versionExtension | Erweiterungsbeschreibung der Firmware | | releaseDate | Veröffentlichungsdatum der Firmware | | manufacturerId| Hersteller ID | | decoderDBLink | DecoderDB Link zur Firmware | ==== 3.1 Decoderreferenzen ==== Innerhalb jeder Firmware werden alle Decoder angegeben, für die diese Firmware anwendbar ist. Dabei werden Decoder über ihren Namen sowie Typ referenziert. ==== 3.2 Protokolle ==== Innerhalb jeder Firmware werden alle Decoder angegeben, für die diese Firmware anwendbar ist. Dabei werden Decoder über ihren Namen sowie Typ referenziert. ---- ===== 3. CV definieren ===== Eine **** Definition bildet immer einen Endknoten in der Baumstruktur.\\ Eine CV wird mit folgendem XML-Block definiert:\\ ^ Datentyp (Type) ^ Beschreibung ^ | Byte | Wertebereich 0 - 255 (8 Bit)| | Bit | Es können bis zu 8 Bits definiert werden, Anzeige als Checkboxen | | Radio | Es können bis zu 255 Werte definiert werden, Anzeige als Radio-Buttons | | DccLongAddr | Lange Lok-Adresse | | DccAccAddr | Lange Zubehör-Adresse | | Int | Wertebereich 0 - 65.535 (16 Bit, little endian) | | SignedByte | Wertebereich -128 - 127 (8 Bit) | | Long | Wertebereich 0 - 4.294.967.295 (32 Bit, little endian) | | DccAddrRG | Für BiDiB, siehe unten | | GBM16TReverser | Für BiDiB, siehe unten | ^ Attribut ^ Beschreibung ^ | Number | Die Nummer der CV | | Type | siehe oben | | Min | Minimalwert für diese CV | | Max | Maximalwert für diese CV | | Default | Standardwert der CV | | Low | Bei Type "Int", "DccLongAddr" und "DccAccAddr" wird hier die CV des Lowbyte eingetragen | | High | Bei Type "Int", "DccLongAddr" und "DccAccAddr" wird hier die CV des Lowbyte eingetragen | | Index31 | Wert für Index-CV 31 | | Index32 | Wert für Index-CV 32 | | Activebits | Type "Bit": Einschränkung auf einzelne Bits, durch ; getrennt | | Mode | Änderbarkeit: "rw" = read/write, "ro" = read only, "wo" = write only, "w" = write, "h" = hide | | Rebootneeded | CV-Änderung wird erst bei einem Neustart des Knoten wirksam - "true" (BiDiB) | **** definiert den beschreibenden Text der CV: ^ Attribut ^ Beschreibung ^ | Lang | Sprache des beschreibenden Textes. (de, en, ...) | | Text | Beschreibung der CV in der jeweiligen Sprache. | | Help | Hilfebeschreibung der CV in der jeweiligen Sprache. | **__Gültige Werte vorgeben :__** Bei den CV-Typen „Bit“ und „Byte“, können dem Anwender, mit **Min** **Max** und **Values** Werte für die CV vorgegeben werden.\\ Wenn **Values** eine, durch „;“ getrennte, Liste von Werten enthält, werden **Min** und **Max** nicht berücksichtigt. ---- ==== 3.1. CV-Type "Byte" ==== Durch Mausklick auf eine CV vom Type "**Byte**", wird im unteren, rechten Bereich eine Eingabemaske\\ für den Bytewert angezeigt.\\ {{:monitor:byte-maske.png?nolink|}}\\ \\ Über die Attribute **Min**, **Max** und **Values** können die möglichen Eingaben vorgegeben werden.\\ \\ __Beispiele für **Type="Byte":**__\\ Hier wird die Eingabe nicht eingegrenzt. Alle Werte von 0 bis 255 sind möglich. Der Standard-Wert ist 5. Hier wird die Eingabe über die **Min**- und **Max**-Werte auf 3 bis 20 eingegrenzt.\\ Hier wird die Eingabe über **Values** auf die Werte 4, 6, 13 und 20 beschränkt.\\ **Min** und **Max** werden ignoriert. ---- ==== 3.2. CV-Type "Bit" ==== {{ :monitor:bit-maske.png?nolink&200|}}Ist der Type „Bit“ für die CV angeben, werden für jedes Bit Checkboxen angezeigt. Es können mehrere Bits aktiviert sein. Über das Tag **** (siehe oben) kann für jedes Bit eine Beschreibung und ein Hilfetext hinterlegt werden. ^ Attribut ^ Beschreibung ^ | Number | Bit-Nummer beginnend mit 0 | ---- ==== 3.3. CV-Type "Bit" mit Gruppierung ==== In dem "normalen" CV-Type "**Bit**" können alle Bits gleichzeitig angeklickt werden.\\ Für eine Auswahlliste ist es aber Sinnvoll, immer nur eine Option zuzulassen.\\ Wählt man eine Option an, werden die anderen "abgewählt" (Radiobutton).\\ Um beide Möglichkeiten zu kombinieren, wurde das Attribut "**Group**" eingeführt. Das Attribut "**Group**" gibt an, welche Bits als Auswahlliste verwendet werden.\\ Die anderen Bits können, wie im CV-Type "**Bit**", weiter an- und abgeklickt werden. Im Beispiel oben werden 2 Gruppen definiert. Damit werden * die Bits 0-1 und 2-3 als Radiobutton verwendet. * Bit 7 ist weiterhin eine Checkbox. {{:monitor:cv-type-bit-radiobits.png|}} ---- ==== 3.4. CV-Type "Radio" ==== {{ :monitor:radio-maske.png|}} ---- __**Beispiel:**__ ---- ==== 3.5. CV-Type "Radio" mit Gruppierung ==== Mit Hilfe des Attributes "Group" können Radio-Buttons zu Gruppen aufgeteilt werden. Alle Radios, die keiner Gruppe zugewießen sind, bilden die letzte Gruppe. Die ausgewälten Radios der Gruppen werden addiert. {{:monitor:radiogroups.png|}} ---- ==== 3.6. CV-Type "DccLongAddr" ==== ---- ==== 3.7. CV-Type "DccAccAddr" ==== ---- ==== 3.8. CVs über Indexregister CV31 und CV32 ansprechen ==== ---- ==== 3.9. CV-Type "SignedByte" (BiDiB) ==== {{ :monitor:signedchar-maske.png|}} Durch Mausklick auf eine CV vom Type „**SignedByte**“, wird im unteren, rechten Bereich eine Eingabemaske für den Bytewert angezeigt. Im Unterschied zum Type "**Byte**" können hier auch negative Werte eingegeben werden. Ansonsten sind die Attribute wie beim Type "**Byte**" zu verwenden.\\ \\ __Beispiele für **Type="SignedByte":**__\\ \\ Hier wird die Eingabe über die **Min**- und **Max**-Werte auf den Bereich -20 bis 20 begrenzt.\\ ---- ==== 3.10. CV-Type "Int" ==== {{ :monitor:int-maske.png?nolink|}} Der Type „Int“ setzt sich immer aus zwei CV’s zusammen und bilden Low-Byte und High-Byte.\\ Beim Klick auf eines der beiden CV wird geprüft, ob die Partner CV vorhanden ist.\\ Wenn ja, wird im rechten, unteren Bereich eine Eingabemaske angezeigt.\\ Beide CV’s müssen mit den Attribute **Low** und **High** aufeinander verweisen.\\ \\ \\ \\ \\ **__Beispiel:__** ---- ==== 3.11. CV-Type "DccAddrRG" (BiDiB) ==== Der Type „DccAddrRG“ setzt sich immer aus zwei CV’s zusammen. Die erste CV ist angegeben, die zweite ist die nächsthöhere CV. Dieser Type arbeitet ähnlich wie „Int“.\\ Die eingegebene Integer-Zahl wird hier aber in den oberen 15 Bit gespeichert. Optisch wird der Wert also verdoppelt. Es ist also nur ein Wert zwischen 0 und 32767 möglich.\\ Das untere Bit der Lowbyte CV wird aber extra über zwei Radio-Button "R" und "G" gesetzt.\\ Der gültige Eingabebereich wird über die Attribute **Min** und **Max** der Lowbyte CV bestimmt.\\ Beide CV’s müssen mit den Attribute **Low** und **High** aufeinander verweisen.\\ **__Beispiel:__** ---- ==== 3.12. CV-Type "GBM16TReverser" (BiDiB) ==== **Dieser Type ist nur für einen GBM16T zugelassen.**\\ Beim Anklicken einer CV-Zeile vom diesem Type, prüft der Monitor, ob es sich um eine CV\\ für die Kehrschleifenkonfiguratione eines GBM16T handelt und ob die UID zu einem GBMBoost passt.\\ Wenn nicht, ist diese CV nicht änderbar.\\ Wenn alles passt, wird die Maske zur Konfiguration der Kehrschleife angezeigt.\\ {{:monitor:gbm16treverser.png?nolink|}} __**Beispiel:**__ ---- ==== 3.13. CV-Type "Long" (BiDiB) ==== {{:monitor:cv-long.png|}} \\ Durch Mausklick auf eine CV vom Type „**Long**“, wird im unteren, rechten Bereich eine Eingabemaske für den Wert angezeigt. \\ Der Type „**Long**“ besteht aus vier aufeinander folgenden CV's. \\ Beginnend mit der CV-Nummer die im Attribut **Number** angegeben ist. \\ \\ __Beispiele für **Type="Long":**__\\ \\ Hier wird der Long-Wert in den CV's 154, 155, 156 und 157 abgebildet. ---- ===== 4. Templates ===== Innerhalb der Tags **** (mit s) können Templates definiert werden, die es vereinfachen, mehrfach vorkommende CV-Strukturen, in der Baumstruktur abzubilden. Jedes Template wird mit dem Tag **** (ohne s) definiert. Hier ein Beispiel für die CV's der LED-Ports der LightControl) Hier bitte nicht wundern, das die CV's mit den Nummern 0 bis 4 definiert sind. Die benötigten CV-Nummern werden später in der Baumstruktur, per Offset definiert. ===== 5. Baumstruktur definieren ===== Die eigentliche Baumstruktur wird innerhalb des Tags **** definiert. Mit dem Tag **** wird ein Knoten in der Baumstruktur angelegt.\\ Mit dem Tag **** innerhalb von **** wird der Text des Knoten hinterlegt. Innerhalb von **** werden per Template (Siehe 4.) oder\\ CVRef die CV's abgebildet. \\ \\ Beispiel für einen einfachen{{ :monitor:gbmboost-cv-beispiel.jpg|}}\\ Knoten vom GBMBoost:\\ \\ \\ \\ ... ==== 5.1. Knoten mit Template ==== Um ein Template zu verwenden, kann das ****-Tag mit folgenden Attributen versehen werden:\\ ^ Attribut ^ Beschreibung ^ | Template | Name des Templates. | | Count | Angabe, wie oft das Template wiederholt werden soll. | | Offset | Angabe, mit welcher CV-Nummer die Nummerierung der CV's beginnt. | | Next | Multiplikator des Offset das jeweilige Template (Count). | Beispiel: {{ :monitor:gbm16t-cv-template.jpg|}} Hier wird das Template GBM16T angezogen. Es wird 3 mal angewendet. Beim ersten mal wird ein Offset von 10000 verwendet. Wenn also im Template die erste CV mit Nummer 0 definiert ist, wird im Baum diese CV als 10000 dargestellt.\\ Das zweite mal wird der Wert von Next auf das Offset addiert.\\ Also wird CV 0 hier mit 20000 dargestellt. Das dritte mal dann mit 30000.\\ \\ Wie im **Nodetext**-Tag zu sehen ist, kann die Variable **%%d** als durchlaufende Nummer (Index, Count) verwendet werden, um den Knoten einen entsprechenden Namen zu geben. Die Variable **%%p** kann gleich wie %%dverwendet werden, ist aber um +1 höher als der Index. ---- ==== 5.2. Repeater ==== Mit dem **Repeater**-Tag kann eine //for-Schleife// für CV-Values definiert werden. Beispiel: Die nachfolgende Abbildung zeigt das Resultat des Beispiels oben. {{ :monitor:cv-repeater.png |}}