Skip to content
RealMerlin edited this page Mar 18, 2021 · 4 revisions

EDS - EEPROM Data System

Das EDS ist ein sehr einfaches Datenablage-System fuer EEPROMs. Alle Firmwares verwenden EDS, um Daten der Devices speichern zu koennen. EDS teilt den vorhandenen Speicherplatz in Leerblocks auf; davon lassen sich Blocks allozieren und mit Daten fuellen.

Design-Ziel war es, ein moeglichst einfaches Datenablage-System zu schaffen, das fuer den Betrieb nur sehr Verwaltungsplatz verbraucht. Performance ist zweitrangig, da die Config im Normalfall nur einmal beim Booten oder Reload geladen wird.

eds-layout

EEPROM

Der erste Teil (32 Bytes) des EEPROMs werden von EDS nicht verwendet; hier legt canix einige system-relevante Daten ab, wie z.B. den Board-Typ, die Groesse und CRC16 Checksumme der Firmware etc.

Der kleine rote Bereich gehoert schon zum EDS; hier liegt der sogn. Magic Code, zwei Bytes mit den Werten 0xE4 und 0x7D. Findet die EDS Initialisierungsfunktion diesen Magic Code nicht, so geht es davon aus, dass noch kein EDS Bereich formatiert wurde und formatiert ihn. Dies ist der hellblaue Bereich; hier werden die EDS Blocks abgelegt.

EDS Block

Alle Blocks liegen direkt hintereinander; ihre Groesse variiert und ist im size Feld des Blocks eingetragen. Ob ein Block verwendet oder frei ist, ergibt sich aus dem Wert des type Felds: bei 0 ist der Block frei, andernfalls ist er belegt und vom Typ type.

In der Graphik sind die belegten Blocks roetlich, die freien Blocks grau gefaerbt.

Nach den type und size Feldern folgenden die Daten; die Groesse ist vom Block-Typ abhaengig.

EDS Verwaltung mit telican

telican stellt, sofern es Verbindung zu einem Board hat, das EDS unterstuetzt, folgende Befehle zur Verfuegung:

show conf

zeigt die gesamte EDS Konfiguration an; die Ausgabe-Form kann direkt auch zum Erzeugen verwendet werden:

> show conf
# EDS-Address: 34
create taster
set port 0
set feature 0
set gruppe 38
exit
# EDS-Address: 39
create taster
set port 1
set feature 0
set gruppe 39
exit
> 

Zeilen mit '#' werden als Kommentare ignoriert; show conf zeigt die Adressen, an denen der jeweils folgende Block liegt, als Kommentar.

Achtung: Dies ist die Block-Adresse; die Daten des Blocks beginnen nach dem Header, d.h. nach 2 weiteren Bytes!

Hinweis: Es wird die Konfiguration, die im EEPROM abgelegt ist angezeigt, und nicht die aktuell laufende Konfiguration. Diese ist im Normalfall gleich, kann aber, wenn schon im EDS editiert wurde, davon abweichen!

Format

Formatiert den EDS Bereich im EEPROM; dabei gehen natuerlich alle Daten verloren. Daher wird dieser Befehl auch gross geschrieben, um gegen Vertipper besser geschuetzt zu sein.

defragment

Defragmentiert den EDS Bereich; d.h. es werden mehrere, hintereinander liegendende Leer-Bloecke zu einem Leer-Block zusammengefasst.

edit

Editiert den Block, der an der angegebenen Adresse liegt. Siehe Befehl list:

list

Zeigt die Informationen in Anhaengikeit vom Kontext an; Beispiel:

> list
{taster}@34
{taster}@39
{taster}@44
{taster}@49
{taster}@54
{taster}@59
{rolladen}@64
{rolladen}@79
{powerport}@94
{lichtzone}@102
> edit 34
EDS/{taster}@34 > list
uint8_t port 0
uint8_t feature 0
uint8_t gruppe 38
EDS/{taster}@34 > 

Hinweis: Der Kontext-Prompt wurde in der Version 2.0 mit der Einfuehrung von OAP etwas erweitert; das Schluesselwort EDS zeigt an, dass es sich um einen EDS Kontext handelt; der Bezeichner in geschweiften Klammern ist der Objekt- oder Block-Typ, also in diesem Falle ein Taster. Hinter dem Klammeraffen steht die Adresse bzw. das sogn. Handle.

hint

Zeigt fuer Felder die Bitweise eingegeben werden Hinweise an.
Aktuell implementiert beim ''day_pattern'' in der Zeitzone und ''feature'' bei div. Devices.
z.B.

EDS/{zeitzone}@227 > hint day_pattern
# bit 7                                |--------- Sonntag
# bit 6                                ||-------- Samstag
# bit 5                                |||------- Freitag
# bit 4                                ||||------ Donnerstag
# bit 3                                |||||----- Mittwoch
# bit 2                                ||||||---- Dienstag
# bit 1                                |||||||--- Montag
# bit 0                                ||||||||-- nicht verwendet
# uint8_t                day_pattern 0b11111110 (254)
EDS/{zeitzone}@227 > set day_pattern 0b11000000

delete

Loescht einen EDS Block. Als Parameter muss die Adresse angegeben werden.

set

Setzt (im EDS Block Kontext) ein Feld auf einen bestimmten Wert. Beispiel:

EDS/{taster}@34 > list
uint8_t port 0
uint8_t feature 0
uint8_t gruppe 38
EDS/{taster}@34 > set port 5
EDS/{taster}@34 > list
uint8_t port 5
uint8_t feature 0
uint8_t gruppe 38
EDS/{taster}@34 > 

Strings werden ohne Anfuehrungszeichen angegeben. Hier ein Beispiel eines Bedienfeldes:

EDS/{taster_page}@366 > list
uint8_t page_id 202
uint8_t parent_id 8
uint8_t next_id 0
uint8_t prev_id 201
uint8_t feature 0
uint8_t gruppe 232
char[17] line0 'Garagentor'
char[17] line1 'Start/Stop'
EDS/{taster_page}@366 > set line0 Garten-Tor
EDS/{taster_page}@366 > list
uint8_t page_id 202
uint8_t parent_id 8
uint8_t next_id 0
uint8_t prev_id 201
uint8_t feature 0
uint8_t gruppe 232
char[17] line0 'Garten-Tor'
char[17] line1 'Start/Stop'
EDS/{taster_page}@366 > 

Felder die Bitweise eingegeben werden, können auch in Binaerschreibweise eingegeben werden (siehe Befehl ''hint''):

set day_pattern 0b11000000

Theoretisch koennte man aber auch andere Felder in Binaerschreibweise angeben ;-)

show all

Funktioniert wie ''show conf'' filtert aber auf einen bestimmten Block Typ
z.B.

> show all powerport
# EDS-Address: 39
create powerport
  set port 0
  set feature 12
  set gruppe0 134
  set gruppe1 129
  set gruppe2 255
  set timer 158
  set mute 255
exit
# EDS-Address: 77
create powerport
  set port 2
  set feature 12
  set gruppe0 130
  set gruppe1 129
  set gruppe2 255
  set timer 1
  set mute 255
exit

EDS ID Vergabe

Das type Feld ist 1 Byte gross, d.h. es sind EDS Typen von 1..254 moeglich. Die IDs sind folgendermassen vergeben:

ID Pool Verwendung
1..127 HCAN
128-191 persoenlicher Pool
192-223 reserviert fuer spaetere Verwendung
224-254 privater Pool (entspricht RFC1918 IPs)

Persoenlicher Pool

Wenn 2 oder mehr HCAN-Anwender gemeinsam neue EDS Block Typen benoetigen, so werden aus diesem Pool IDs zugwiesen.

Privater Pool

Aehnlich dem RFC1918 IP-Adressen koennen IDs aus diesem Bereich frei verwendet werden. Es ist sichergestellt, dass zukuenftige HCAN Releases diesen Bereich nicht verwenden, so dass hier beliebig fuer private Zwecke verwendet werden kann.

Clone this wiki locally