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
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
- Definiere die Funktionalität («Properties»)
- Schreibe Handler-Code (getter/setter)
- Rufe «make» auf
- Teste und iteriere von (1)
- 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
- Neu: 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)
- Download eval distribution: [ netpp for Windows Executable v0.50rc1 ] [ quick start instructions ]
Make sure to install Python 2.7 first: [ Python 2.7.13 release for win32 ] - netpp HOWTO: [PDF]
- API reference OpenSource v0.3x [ HTML ]
- Misc information: [ Further netpp notes and updates ]