netpp

Fernkontrolle leichtgemacht

netpp (network property protocol) vereinfacht die Entwicklung von Fernsteuerungen und Protokollen signifikant. Ursprünglich als Abstraktionsschicht für Register-basierte Protokolle eingeführt, stellt es heutzutage eine Softwarebibliothek dar, die rapide und dennoch robuste Entwicklung von Gerätesteuerungen fördert. Dies geschieht mit Hilfe einer XML Geräte-Beschreibungs-Sprache, die erlaubt, Register-Anordnungen und generische Geräteeigenschaften wie auch Betriebsarten in einer funktionalen Abstraktion (mit Hilfe eines Editors, siehe auch Screenshot unten) zu entwerfen.

Diese Beschreibung wird direkt in kompakten Quellcode übersetzt und für das Endgerät kompiliert.

Die Parameter (Register-Bits oder Kommandos) des Endgeräts werden als sog. “Properties” (Eigenschaften) abstrahiert, indem per XML eine Zuordnung erfolgt, z.B. das Property “Temperatur” wird einem i2c-Backend mit einer zugehörigen Adressbeschreibung zugeordnet.

Funktional wird so die Temperatur des Geräts z.B. wie folgt abgerufen:

t = outdoor.Temperature.get()

Unter einer Vielzahl von ähnlichen RPC-Ansätzen (JSON, GenIcam, EDDL, …) hebt sich netpp insofern hervor:

  • Typensicheres Binärprotokoll, Endian-Safe, Thread-Safe
  • Zero-Copy für Binärbuffer (Bildübertragung)
  • Universell, atomar und leichtgewichtig

XML-Bearbeitung

XML Mind editor snapshot

Für die Bearbeitung der Gerätebeschreibung sind Style-Sheets bereitgestellt, die mit dem empfohlenen Editor XML Mind XML Editor (XXE) schematisch wie oben dargestellt zusammenarbeiten. Per XSD-Schema erfolgt eine Verifikation auf Gültigkeit.

Workflow

  1. Definiere die Funktionalität (“Properties”)
  2. Schreibe Handler-Code (getter/setter)
  3. Rufe “make” auf
  4. Teste und iteriere von (1)
  5. Generiere Dokumentation und Referenz

Mit integrierten Mechanismen zur Revisionskontrolle bleiben Software, Hardware und Dokumentation in Synchronisation. Keine Fehlinformationen mehr zwischen Entwicklerteams!

Referenzanwendungen

  • Ausstattung diverser Geräteklassen mit einer uniformen Firmware und Fernsteuerungssoftware
  • Hardware-Definition von ASIC/FPGA Registern und C-Treibersource (siehe auch IP cores)
  • Hardware-Co-Simulation (model in the loop)
  • Smart Sensors (IoT), netpp on FPGA
  • Evaluations-Kit netpp node mit div. Analog-Backends zur Datenerfassung übers Netzwerk

Industrielle Kundenprojekte

  • Medizinische Diagnostik: Bildübertragung
  • Multikanal-Audioübertragung
  • Firmwareprogrammierung in Fertigungstaktstrasse
  • Smarte Sensorik: Vernetzte Schwarmintelligenz zur Powergrid-Optimierung
  • Hochskalierbare Testbench-Systeme zur Prozessüberwachung (>100 Teilnehmer)

Details

Der netpp-Stack ist äusserst kompakt. Neben Startup-Code (crt0.o) und HW-Treibern benötigen Sie kaum mehr Programmlogik für ein Bare-Metal-Betriebssystem — die Hauptschleife ist bereits als Task-Handler konzipiert.

Beispiele für die Dichte-optimierte (‘-Os’) Slave-library:

Architecture Size
avr8 24kB
ARM v5 thumb 22kB
ZPU (FPGA SoC) 19kB
msp430 17kB

Anwendungsszenarien und Optionen

  • Verwendung einer Kommunikations-DLL und eigenes GUI-Kontrolltool
  • Ansteuerung per Python, Java, Labview-VI
  • Automatisierte Generierung eines Web-Interface (Javascript, FCGI/WSGI), REST-API interface

Resourcen (englisch)