===== XML-Struktur einer CV-Definitionsdatei ===== **ACHTUNG:** Alle XML-Tags sind Case-Sensitiv. Groß- und Kleinschreibung muss beachtet werden. ist also nicht das Gleiche wie ===== 1. Grundstruktur ===== Die XML-Datei besteht aus drei Teilen.\\ Im ersten Teil werden Informationen zur Version der Datei hinterlegt.\\ Im zweiten können (optional) Templates für mehrfach vorkommende CV-Blöcke definiert werden.\\ Im dritten Abschnitt wird die Baumstruktur festgelegt und die CV’s definiert.\\ Alle Teile müssen innerhalb von **** stehen.\\ ===== 2. Konvention für Dateinamen ===== Der Wizard und der Monitor verwenden folgende Konvention um eine entsprechende Knoten-CV-XML in Abhängigkeit von der Firmware-Version des Knoten anzuziehen: BiDiBCV-13-104.xml --> gilt für alle Versionen > 2.02.255 ^^ ^^ BiDiBCV-13-104-2.02.xml --> gilt für alle Versionen > 2.02.02 && <= 2.02.255 ^^ ^^ BiDiBCV-13-104-2.02.02.xml --> gilt für alle Versionen <= 2.02.02 Die Knoten-CV-XMLs werden entweder von den Tools mitgeliefert oder sie werden an folgendem Ort gesucht: ${userhome}\.bidib\data\BiDiBNodeVendorData ===== 3. Info-Abschitt ===== Der Info-Abschnitt der Datei liefert Information über die Datei selber. {{ :monitor:cvxml-info-bereich.jpg?nolink|}}\\ Die Attribute **Version**, **Author** und **Description** können beliebigen Text enthalten. **Pid** und **Vendor** enthalten die entsprechenden Teile der UID in dezimalen Werten. **Lastupdate** gibt das Datum der letzten Änderung in **YYYYMMTT** an.\\ Diese Daten werden im Monitor dann wie im Bild rechts dargestellt. ===== 4. CV definieren ===== Eine **** Definition bildet immer einen Endknoten in der Baumstruktur.\\ Eine CV wird mit folgendem XML-Block definiert:\\ ^ Attribut ^ Beschreibung ^ | Number | Die Nummer der CV | | Type | Datentype. „Byte“, "Int", "Bit", "DCC_ADDR_RG", "GBM16TReverser", "SignedChar" oder "Radio" | | Min | Minimalwert für diese CV, nur bei "Byte" | | Max | Maximalwert für diese CV, nur bei "Byte" | | Low | Bei Type "Int" wird hier die CV des Lowbyte eingetragen | | High | Bei Type "Int" wird hier die CV des Lowbyte eingetragen | | Values | Gültige Werte bei "Byte", durch ; getrennt oder Bitmuster für "Bit" | | 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" | | Radiovalues | Es kann ein Wert für die Optionen bei Type "Radio" und "Bit" (mit Radiobits) vorgegeben werden. | | Radiobits | Gibt bei Type "Bit" an, welche Bits als Radiobutton verwendet werden (siehe 4.2) | **** definiert den beschreibenden Text der CV: ^ Attribut ^ Beschreibung ^ | Lang | Sprache des beschreibenden Textes. Im Moment wird nur "de-DE" und "en-EN" ausgewertet. | | 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.\\ ==== 4.1. CV-Type "Bit" ==== {{ :monitor:bit-maske.png?nolink&200|}}Ist der Type „Bit“ für die CV angeben, öffnet sich beim Anklicken des CV in der Baumstruktur eine Eingabemaske in der jedes zugelassene Bit einzeln gesetzt werden kann.\\ **__Beispiele für Type="Bit":__**\\ **Min** und **Max** werden hier nicht berücksichtig.\\ In **Values** kann eine Bitmaske vorgegeben werden. Ein Integerwert zwischen 0 und 255 gibt an, welche Bits im Eingabefeld freigegeben sind.\\ **Values="1"** nur Bit 0 kann auf 0 oder 1 gesetzt werden.\\ **Values="5"** nur Bit 0 und 2 können auf 0 oder 1 gesetzt werden.\\ \\ Über das Tag **** kann für jedes Bit eine Beschreibung (Attribut //Text//) und ein Hilfetext (Attribut //Help//) hinterlegt werden.\\ Das Attribute **Bitnum** beginnt bei 1. ^ Attribut ^ Beschreibung ^ | Bitnum | Bitnummer beginnend mit 1 | | Lang | Sprache des beschreibenden Textes. Im Moment wird nur "de-DE" und "en-EN" ausgewertet. | | Text | Beschreibung der CV in der jeweiligen Sprache. | | Help | Hilfebeschreibung des Bit in der jeweiligen Sprache. | ==== 4.2. CV-Type "Bit" mit Attribut "Radiobits" ==== 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 "**Radiobits**" eingeführt. Das Attribute "**Radiobits**" 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 wird Radiobits="15" verwendet (Bitmuster = 0000 1111). Damit werden die Bits 0-3 als Radiobutton verwendet. {{:monitor:cv-type-bit-radiobits.png|}} ==== 4.3. 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 ü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. Hier wird die Eingabe nicht eingegrenzt. Alle Werte von 0 bis 255 sind möglich. ==== 4.4. 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:__** ==== 4.5. CV-Type "DCC_ADDR_RG" ==== Der Type „DCC_ADDR_RG“ 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. Wenn ja, wird im rechten, unteren Bereich eine Eingabemaske angezeigt.\\ 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:__** ==== 4.6. CV-Type "DccAccAddr" ==== Der Type ''DccAccAddr'' 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. Falls dies zutrifft werden im rechten, unteren Bereich Eingabefelder angezeigt, über welche die DCC Accessory Adresse geändert werden kann. Beide CV’s müssen mit den Attribute **Low** und **High** aufeinander verweisen.\\ **__Beispiel:__** ==== 4.7. CV-Type "GBM16TReverser" ==== **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:**__ ==== 4.8. CV-Type "Radio" ==== **Der CV-Type "Radio" ist zur Zeit nur im BiDiB-Monitor verwendbar. ** Ist der Type ''Radio'' für die CV angeben, öffnet sich beim Anklicken der CV in der Baumstruktur eine Eingabemaske in der eine Auswahlliste von max. 16 möglichen Optionen angezeigt wird.{{ :monitor:radio-maske.png|}} Es können auch mehr als 16 Optionen per '''' angegeben werden, aber nur die ersten 16 können den RadioButtons zugewiesen werden (siehe unten "RadioGroups"). Mit dem Attribute ''Radiovalues'' kann ein Wert für jede der 16 möglichen Optionen vorgegeben werden. __**Beispiel:**__ Radiovalues="0,15,3" Klick auf Option 0 -> CV hat Wert 0 \\ Klick auf Option 1 -> CV hat Wert 15 \\ Klick auf Option 2 -> CV hat Wert 3 Ist ''Radiovalues'' nicht vorhanden, werden den Optionen die Werte 0-15 zugewiesen. __**Beispiel:**__ Attribute ''RadioGroups'': Die, per '''' aufgelisteten Auswahlmöglichkeiten, können in zwei Gruppen aufgeteilt werden werden. Die beiden Gruppen bestehen jeweils aus der Auflistung (durch Komma getrennt) der Bitnum-Nummern. Die beiden Gruppen werden durch ein '';'' getrennt. * Die Bitnum-Nummern vor dem '';'', werden als RadioButton dargestellt und dürfen nur die ersten 16 Bitnum-Nummern enthalten. * Die Bitnum-Nummern nach dem '';'' werden in der Combobox aufgelistet und kann jede vorkommende Bitnum-Nummer enthalten. __**Beispiel:**__ RadioGroups="1,2,3,4,5,6,7,8,9,10,11,12,13;14,15" Hier werden die Werte für die RadioButton 1-13 als RadioButton dargestellt. \\ Die Werte der RadioButton 14 und 15 als Auswahl in einer Combobox angezeigt. \\ Der CV-Wert wird dann aus der Addition beider Eingaben gebildet. __**Beispiel-XML:**__ {{:monitor:radiogroups.png|}} ==== 4.9. CV-Type "SignedChar" ==== {{ :monitor:signedchar-maske.png|}} Durch Mausklick auf eine CV vom Type „**SignedChar**“, 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="SignedChar":**__\\ \\ Hier wird die Eingabe über die **Min**- und **Max**-Werte auf den Bereich -20 bis 20 begrenzt.\\ ==== 4.10. CV-Type "Long" ==== Implementiert ab Wizard vom 14.10.2015 und Monitor ab Version 0.6.4.8.\\ \\ {{: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 4 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.11. CV-Type "String" ==== Implementiert ab Wizard vom 11.02.2017 Es können neu auch Strings für //CV-Nummern// (z.B. "TEST") verwendet werden: ==== 4.12. CV-Type "BiDiB_UID" ==== Der CV-Type ''BiDiB_UID'' wird verwendet, um die ''Unique ID'' eines BiDiB-Knoten in den CV zu definieren. Diese Definition belegt 7 aufeinanderfolgende CVs, in welcher uid_cls_l uid_cls_h uid_vid uid_pid_l uid_pid_h uid_ser_l uid_ser_h abgelegt werden. Anwendung in einem Template: Der nachfolgende Block erzeugt 4 Pairings beginnend an der CV 100: ==== 4.13. CV-Type "NodeID" ==== Der CV-Type ''NodeID'' wird verwendet, um die ''Knoten-ID'' eines BiDiB-Knoten in den CV zu definieren. Diese Definition belegt 5 aufeinanderfolgende CVs (wie ''UniqueID'' aber ohne Classbits) , in welcher uid_vid uid_pid_l uid_pid_h uid_ser_l uid_ser_h abgelegt werden. Anwendung in einem Template: Der nachfolgende Block erzeugt 4 Knoten-IDs beginnend an der CV 100: ==== 4.14. CV-Type "MAC_Address" ==== Der CV-Type ''MAC_Address'' wird verwendet, um die ''MAC Adresse'' in den CV zu definieren. Diese Definition belegt 6 aufeinanderfolgende CVs, in welcher byte 1 byte 2 byte 3 byte 4 byte 5 byte 6 abgelegt werden. Anwendung in einem Template: Der nachfolgende Block erzeugt 4 MAC-Adressen beginnend an der CV 100: ===== 5. 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. ===== 6. 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\\ CV-Definition (siehe 3.) die CV's abgebildet. \\ \\ Beispiel für einen einfachen{{ :monitor:gbmboost-cv-beispiel.jpg|}}\\ Knoten vom GBMBoost:\\ \\ \\ \\ ... ==== 6.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. ---- ==== 6.2. Repeater ==== Mit dem **Repeater**-Tag kann eine //for-Schleife// für CV-Values definiert werden. Die Werte für ''Offset'', ''Count'' und ''Next'' sind mandatory. Beispiel: Die nachfolgende Abbildung zeigt das Resultat des Beispiels oben. {{ :monitor:cv-repeater.png |}}