Einleitung

Mit oser machen Sie selbst komplexeste Datenstrukturen einfach handhabbar. oser ermöglicht die einfache Beschreibung, Modifikation und Validierung aber auch das Enkodieren und Dekodieren von Datenstrukturen.

Vorteile
  1. Zeit- und Kostenersparnis: Reduzieren Sie Entwicklungszeiten, indem Sie Datenstrukturen beschreiben anstatt Abstraktoren selber zu implementieren.
  2. Geringer Entwicklungsaufwand: oser enthält alle allgemeinen Bausteine, die Sie zur Datenabstraktion benötigen. Abhängigkeiten innerhalb der Datenstrukturen sind einfach abbildbar.
  3. Einfache Wartung: Die Modifikation bestehender Abstraktionen ist mit sehr geringem Aufwand möglich.
Anwendungsbeispiele

Abstraktion, Analyse und Modifikation von Netzwerkprotokollen, EEPROM-Inhalten, Flash-Inhalten, RAM-Inhalten oder binären Dateien zu Test-, Debug- und Entwicklungszwecken.

Documentation

Die Dokumentation befindet sich hier.

Examples
EEPROM content:

oser soll verwendet werden, um folgenden EEPROM-Inhalt zu abstrahieren.

Entry Type Position Description
type U8 0 the module type
serial number String[9] 1 .. 9 serial number: four upper case letters, a minus and four digits
hardware-type U8 10 the hardware-type
calibration F32[2] 11 .. 18 calibration factors
crc U32 12 .. 22 32-bit CRC, polynomial 0x1EDC6F41

Alle Werte sollen als Big-Endian gespeichert werden.

Mit Hilfe der folgenden Abstraktion wird dieser EEPROM-Inhalt abstrahiert und kann gelesen, modifiziert und erstellt werden.

>>> import oser
>>>
>>>
>>> class EEPROM(oser.ByteStruct):
...     def __init__(self):
...         super(EEPROM, self).__init__()
...         self.type = oser.UBInt8(0)
...         self.serial_number = oser.RegularExpressionMatch(pattern=b"[A-Z]{4}-[0-9]{4}", length=9, value=b"AAAA-0000")
...         self.hardware_type = oser.UBInt8(0)
...         self.calibration = oser.Array(length=2, prototype=oser.BFloat)
...         self.crc = oser.CRCB32(strict=True, polynomial=0x1EDC6F41)
...
>>>
>>> eeprom = EEPROM()
>>> eeprom.type.set(3)
>>> eeprom.serial_number.set(b"ABCD-1234")
>>> eeprom.hardware_type.set(23)
>>> for ii in range(2):
...     eeprom.calibration[ii].set((.1+ii)**3)
...
>>> binary = eeprom.encode()
>>> print(oser.to_hex(binary))
   0|  1|  2|  3|  4|  5|  6|  7|  8|  9| 10| 11| 12| 13| 14| 15| 16| 17| 18| 19| 20| 21| 22
\x03\x41\x42\x43\x44\x2d\x31\x32\x33\x34\x17\x3a\x83\x12\x6f\x3f\xaa\x5e\x35\x24\xe2\x96\x41
>>> print(eeprom.introspect())
   -    -  EEPROM():
   0 \x03      type: 3 (UBInt8)
   -    -      serial_number: RegularExpressionMatch():
   1 \x41          'A'
   2 \x42          'B'
   3 \x43          'C'
   4 \x44          'D'
   5 \x2d          '-'
   6 \x31          '1'
   7 \x32          '2'
   8 \x33          '3'
   9 \x34          '4'
  10 \x17      hardware_type: 23 (UBInt8)
   -    -      calibration: Array():
   -    -      [
  11 \x3a          @0: 0.0010000000000000002 (BFloat)
  12 \x83
  13 \x12
  14 \x6f
  15 \x3f          @1: 1.3310000000000004 (BFloat)
  16 \xaa
  17 \x5e
  18 \x35
   -    -      ]
  19 \x24      crc: 618829377 (CRCB32)
  20 \xe2
  21 \x96
  22 \x41
Contact
Ihr Name*
Firma
Adresse
Postleitzahl
Ort
Land
EMail-Adresse*
Telefonnummer
Nachricht*
Die mit * markierten Felder müssen angegeben werden.