Benutzer-Werkzeuge

Webseiten-Werkzeuge


decoderdb

BiDiB-DecoderDB

Die BiDiB-DecoderDB ist ein offenes Verzeichnis (Repository) für Decoder und Firmwaredefinitionen.
Definitionen werden derzeit von BiDiB-Monitor verwendet, um eine komfortable Unterstützung bei der Verwaltung und Bearbeitung von Konfigurationsvariablen (CVs) des lokalen Fahrezug/Decoder-Bestands zu bieten.

Jeder Interessierte ist eingeladen zur stetigen Verbesserung und Erweiterung der beizutragen.

Die Daten sind hierfür in einem öffentlichen Github Repository abgelegt.
Um Daten zu ändern wird Github Account sowie eine Freigabe durch das BiDiB-Team benötigt.

Decoders & Firmware

Das Verzeichnis enthält zwei Arten von Daten: Decoderdefinitionen und Firmwaredefinitionen. Die Decoderdefinition beschreibt die grundlegenden Spezifikationen eines Decoders wie Produktkennungen, Abmessungen, elektrische Grenzwerte, aber auch Verweise auf Produktbilder und Handbücher.

Die Firmwaredefinition enthält die Beschreibungen aller für die jeweilige Firmwareversion verfügbaren Konfigurationsvariablen. Sie enthält außerdem eine Strukturdefinition, die eine einfache Navigation durch die große Variablenmenge ermöglicht.

Der Verweis zwischen Decoderdefinition und Firmwaredefinition erfolgt über eine Liste von Decodernamen innerhalb der Firmwaredefinition.

Firmwaredefinition

Eine Firmwaredefinition hat im Wesentlichen 3 Hauptbestandteile.

  1. Decoder → eine Liste aller Decoder für die diese Definition gültig ist
  2. CVs → Liste aller verfügbaren CVs bzw. CV Gruppen
  3. Struktur → Definition der Navigationstruktur incl. Referenzen zu den jeweiligen CVs

Die gesamte Definitionsstrukture sieht dabei wie folgt aus.

{
    "firmware": {
        "decoders": []
        "protocol": {
            "cvs": [],
            "cvStructure": [],
            "type": "dcc"
        },
        "version": "31.57",
        "releaseDate": "2014-05-24T00:00:00.000",
        "manufacturerId": 145,
        "manufacturerExtendedId": 0,
     },     
    "version": {
        "createdBy": "...",
        "creatorLink": ...",
        "author": "...",
        "lastUpdate": "2025-10-25T20:46:48.860Z",
        "created": "2016-05-09T00:00:00.000"
    }
}
        

Die Listen für CVs und die Struktur sind dabei unter dem Knoten 'protocol' zu finden.

Decoder

Ein Decoder wird über den Namen, die TypIds und den Decodertyp definiert.

{
   "name":"Car Decoder V5",
   "typeIds":"50",
   "type":3
}

Aktuell funktioniert die Auflösung zur Decoderdefinition ausschließlich über den Namen.

CVs

Ein CV bzw. CVGroup Objekt ist die eigentliche Beschreibung der Konfigurationsvariablen. Neben der CV Nummer (number) und dem Typ (type) ist die Id (id) eines der wichtigsten Elemente in der Beschreibung, da dieses zur Referenzierung in der Struktur verwendet wird. Die Id kann der CV Nummer entsprechen, aber auch eine beliebige Zeichenfolge enthalten. Sie muss jedoch innerhalb der gesammten CV/Cv-Gruppen Liste eindeutig sein.

Zusätzliche Elemente sind der Standardwert (defaultValue), die Zugriffsrechte (mode), zulässige Werte (possibleValues) und die Beschreibung (descriptions)

{
   "number": 1,
   "type": "byte",
   "id": "1",
   "defaultValue": 3,
   "mode": "rw",
   "possibleValues": "1-127",
   "descriptions": [
      {
         "language": "de",
         "text": "Adresse kurz"
      }
   ]
},

Eine CV Gruppe stellt entsprechend eine Zusammenfassung von CVs dar.

{
   "id": "10",
   "type": "dccLongAddr",   
   "defaultValue": 0,
   "mode": "rw",
   "possibleValues": "0-10239",
   "descriptions": [
      {
         "language": "de",
         "text": "Adresse lang"
      }
   ]
   "cvs": [
      {
         "number": 18,
         "type": "byte",
         "defaultValue": 0,
         "mode": "rw",
         "possibleValues": "0-255",
         "descriptions": [
            {
               "language": "de",
               "text": "Niederwertiges Byte"
            }
         ]
      },
      {
         "number": 17,
         "type": "byte",
         "defaultValue": 192,
         "mode": "rw",
         "possibleValues": "192-231",
         "descriptions": [
            {
               "language": "de",
               "text": "Höherwertiges Byte"
            }
         ]
      }
   ],
},

CV Struktur

Über die CV Struktur wird wie Unterteilung der CVs/CVGruppen in die jeweiligen Kategorien definiert. Aus dieser ergibt sind z.B. die Navigationsstruktur im BiDiB-Monitor. Die cvStructure enthält Kategorie-Objekte welche jeweils aus der Bescreibung (descriptions) und einer Liste aus Unterelementen besteht. Diese Unterelemente können wiederum Kategorie-Objekte oder Cv-Referenzen sein.

{
    "descriptions": [
        {
            "language": "de",
            "text": "Adressen"
        }
    ],
    "items": [
        {
            "id": "1"
        },
        {
            "id": "10"
        },
        {
            "id": "229"
        },
        {
            "id": "1726",
            "activeItems": "bit:5"
        }
        
    ]
}

Das Feld id referenziert hierbei auf die id des jeweiligen Cv/CvGruppen Objekts. Zusätzlich ist es möglich über activeItems nur Teile des referenzierten Objektes auszuwählen.

Displayformat

{y:F}

y referenziert den y.Wert (0-basierte Zählung)

F ist wie der Formatiert werden soll

F kann folgende Werte annehmen:

  M0xXXX = Maskierung mit einer hexadezimal-Zahl XXX (Ergebnis wird nach rechts geshiftet um die Anzahl der Bits die in der Maske XXX rechts 0 sind)
  M0dDDD = Maskierung von Dezimalstellen wobei für jede zu übernehmende Dezimalstellen in DDD eine 1 und ansonsten eine 0 gesetzt wird
  X = Ausgabe der Zahl als Hexadezimal-Wert
  F = Ausgabe nach number patterns (Escape-Zeichen \):
  0     Replaced by a digit (or zero if there aren't enough digits).
  #     Replaced by a digit (or nothing if there aren't enough). Often used to show the position of the ",".

Außerdem sind mehrere Formatblöcke hiereinander erlaubt:

{y:F1:F2}

Hier mal mit Worten erklärt:

Annahme wir haben die Ergebnisse in einen Array (bis zu 4 CVs einer Gruppe passen in einen Array-Platz als unsigned 32 bit Zahl):

Uint32 readErg[laenge]

Beispiel:

readErg[0]=125

readErg[1]=11

jetzt habe wir den den Displayformat-String:

V{0:X}.{1:X}

Dann wird alles was nicht in den geschweiften Klammern ist wird 1:1 als Text ausgegeben. Die geschweifte Klammer gibt an wie ein Wert in den String „reinformatiert“ wird.

Die Zahl vor dem Doppelpunkt bezog sich immer auf das n-te Element von readErg (0-basiert). Hinter dem Doppelpunkt kommt wie formatiert wird.

X als Format steht für die einfache Hexadezimale Ausgabe

Unser Beispiel ergibt bei

V{0:X}.{1:X} → V7D.B

F Dezimal-Ausgabe nach number patterns (Escape-Zeichen \): 0 Replaced by a digit (or zero if there aren't enough digits). # Replaced by a digit (or nothing if there aren't enough). Often used to show the position of the „,“.

Beispiel für readErg[1]=11

{1:00#} ergibt 011

{1:0#} ergibt 11

{1:#} ergibt 11

Dann gab es Dezimal-Maskierformatter die mit M0d anfangen

„V{0:M0d110}.{0:M0d1}“

Wobei die 0 oder 1 hinter dem M0d angeben, ob eine Dezimalstelle in den String aufgenommen wird.

Das Beispiel ergibt mit readErg[0]=125 also:

V12.5

Dann gab es HexaDezimal-Maskierformatter die mit M0x anfangen, Beispiel:

{0:M0xFF00} mit readErg[0]=0x4001

Es wird jetzt zunächst 0x4001 & 0xFF00 berechnet → 0x4000, dann wird noch berechnet viele Bit-Stellen von rechts gezählt bei der Mask 0 sind 0xFF00 hat 16 Bit rechts 0 also wird nur das Ergebnis 0x4000 um 16 bit nach rechts geshiftet, ergebnis: 0x40

Desweiteren gab es die Möglichkeit mehrere Formatdinger zu Ketten also

{0:M0xFF00:00#} mit readErg[0]=0x4001 ergab ja im vorherigen Beispiel im ersten Schritt 0x40 und dann über den zweiten Number-Pattern-Formatter aus den 0x40 (=64) → 064

Daten Bearbeiten

Um Änderungen an den Decoder- oder Firmware-Definitionen vorzunehmen, klonen Sie einfach dieses Repository, bearbeiten Sie die JSON-Dateien im Ordner repo/[decoder/firmware] und übertragen Sie die Änderungen anschließend. Da dieses Repository als Community-Projekt konzipiert ist, sind hochwertige Beiträge sehr willkommen!

Um die mühsame manuelle Bearbeitung der JSON-Dateien zu vermeiden, steht ein Editor zur Verfügung. Der Editor kann entweder über die veröffentlichte Online-Version oder direkt aus dem Repository heraus aufgerufen werden.

Mit dem Editor lassen sich die lokalen Repo-Dateien komfortabel bearbeiten. Sobald die Arbeit abgeschlossen und die Änderungen gespeichert sind, müssen sie manuell übertragen und übertragen werden.

Der Editor benötigt in jedem Fall Lese- und Schreibzugriff auf den lokalen Repository-Ordner /repo. Es wird danach gefragt, sobald Sie versuchen, den Bearbeitungsmodus für eine Decoder- oder Firmware-Definition zu aktivieren.

* Zur Bearbeitung mit dem Editor wird aktuell ein Chromium basierender Browser (Chrome/Edge) benötigt.

BiDiB-Monitor

Um das neue Repository mit BiBiB-Monitor zu verwenden, müssen die Synchronisierungseinstellungen angepasst werden. Ersetzen Sie den vorhandenen Wert für die Service-Update-URL durch https://decoderdb.bidib.org/repository.json .

![Service-URL aktualisieren](./docs/bidib-monitor-decoderdb-update.png "Service-URL aktualisieren")

Der Service-Autorisierungscode kann unverändert bleiben oder leer sein.

Da die Dateien nun im JSON-Format anstatt im XML-Format bereitgestellt werden, ist eine Version von BiBiB-Monitor 10.8.3 oder neuer erforderlich. Der allgemeine Workflow bleibt unverändert: „Nach Updates suchen“ → neue Dateien herunterladen → Dateien sind einsatzbereit.

Beim Herunterladen werden die alten Dateien im *.decdb-Format nicht gelöscht, da die Synchronisierung mit der ursprünglichen DecoderDB weiterhin parallel genutzt werden kann. Die neue BiBiB-Monitor Version lädt jedoch vorzugsweise zuerst die *.json-Dateien.

Änderungen Testen

Solange der Editor die vollständige Vorschau der CV-Definitionen nicht unterstützt, kann der BiBiB-Monitor zum Testen verwendet werden.

Daher muss die geänderte Datei aus dem Repository-Ordner in den entsprechenden Ordner innerhalb des BiBiB-Benutzerdatenverzeichnisses kopiert werden.

Decoder_145_MS450.json

[PathToRepository]\repo\decoder\145\Decoder_145_MS450.json -> C:\users\[USERNAME]\.bidib\decoder\145\Decoder_145_MS450.json

Starten Sie anschließend den BiBiB-Monitor oder, falls dieser bereits gestartet ist, öffnen Sie die Einstellungen des Decoder-Datenrepositorys und klicken Sie auf die Schaltfläche „Definitionen neu laden“.

Die Änderungen sollten nun im Decoder-Dialog sichbar sein.

decoderdb.txt · Zuletzt geändert: von RS200

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki