Board: Basisbibliothek
Die Basisbibliothek brBaseDLL beinhaltet alle Funktionen zum Parametrieren und Interagieren mit dem Deltaboard. Wir haben fast alle Befehle sowohl zum statischen Aufruf, als auch zur objektorientierten Nutzung verfügbar gemacht. Die statischen Funktionen haben den Vorteil, schnell und ohne Kenntnisse der objektorientierten Programmierung mit dem Deltaboard zu interagieren. Hierbei wird bei jedem Aufruf automatisch eine Interfaceverbindung aufgebaut und nach dem Verarbeiten des Befehl auch wieder abgebaut. Daneben bietet die objektorientierte Nutzung der Bibliothek den Vorteil, dass nach einmaligem Aufbau der Interfaceverbindung diese für alle weiteren Befehle zur Verfügung steht. Durch die permanent bestehende Verbindung wird vor allem bei häufigen bzw. in schneller Folge abgearbeiteten Funktionsaufrufen ein erheblicher Performancegewinn erreicht. Daneben sind mache Funktionen ausschließlich objektorientiert nutzbar.
Für die Kommunikation stehen prinzipiell die 3 Schnittstellen USB, Ethernet und COM zur Verfügung. Das Netzwerkziel wird über die IP-Adresse selektiert, der Ausgabe-COM-Port über die Nummer gemäß Windows Geräte-Manager (z.B. "COM3"). Zum Selektieren des zu öffnenden Deltaboard USB Devices gibt es 3 Optionen:
- "usb" öffnet stets das erste gefundene Deltaboard USB Device
- "usb" mit angehängtem Indexwert öffnet das USB Device gemäß der Indexposition in der Liste aller gefundenen Devices (Indexpositionen beginnen bei 0, z.B. "usb1" öffnet das 2. gefundene Device)
- "usp_port" mit angehängtem Indexwert öffnet das Device am USB Port mit dem angegebenen Indexwert (z.B. "usb_port16" öffnet das Deltaboard Device an USB Port #16). Der Vorteil dieser Option ist, dass das Deltaboard im Gegensatz zu den anderen Möglichkeiten gezielt selektiert werden kann. Der USB Port wird in den USB Controller Eigenschaften im Windows Geräte-Manager anzeigt und ist unabhängig der softwareseitigen internen Abläufe beim Auflisten der Devices immer gleich.
Als Hilfe listet der statische Funktionsaufruf ctrl_findDeltaboardUSBDevices alle Portnummern verfügbarer Deltaboard USB Devices in einem Array auf. Aus diesem sind auch die möglichen Indexpositionen für die zweite Option ersichtlich.
Die folgende Tabelle zeigt eine Aufstellung der statischen und objektorientierten (oo) Funktionen der Deltaboard Basisbibliothek brBaseDLL. Diese Softwarebibliothek steht sowohl für Windows (C#) als auch für Linux zur Verfügung:
Beschreibung | Art | Funktion | Parameter |
Funktionen zur Verbindungsbereitstellung | |||
Konstruktor | public brBase(String io_interface, Boolean info) | io_interface = Interface zur Datenübertragung (usb.., IP-Adresse, COM..) info = Statusinformationen ausgeben / nicht ausgeben | |
Interface öffnen | statisch | nicht verfügbar | |
oo | public Boolean OpenInterface() | ||
Interface schließen | statisch | nicht verfügbar | |
oo | public Boolean CloseInterface() | ||
Deltaboard USB Devices identifizieren | statisch | public static Boolean ctrl_findDeltaboardUSBDevices(out byte[] usb_ports, Boolean info) | usb_ports = Array mit den USB Portnummern der gefundenen Deltaboards (Ausgabeparameter) info = Statusinformationen ausgeben / nicht ausgeben |
oo | nicht verfügbar | ||
allgemeine Funktionen | |||
Heartbeat | statisch | public static Boolean ctrl_heartbeat(String io_interface, String target, Boolean info) | io_interface = Interface zur Datenübertragung (usb.., IP-Adresse, COM..) target = Zielkomponente (user, conn) info = Statusinformationen ausgeben / nicht ausgeben |
oo | public Boolean ctrl_heartbeat(String target) | ||
Debug-IOs setzen | statisch | public static Boolean ctrl_setDebugIOs(String io_interface, byte io_vector, Boolean info) | io_interface = Interface zur Datenübertragung (usb.., IP-Adresse, COM..) io_vector = Bitvektor zum Setzen der IO-Werte info = Statusinformationen ausgeben / nicht ausgeben |
oo | public Boolean ctrl_setDebugIOs(byte io_vector) | ||
UART-Verbindung für Virtual COM-Port routen | statisch | public static Boolean ctrl_route_UART(String io_interface, String target, Boolean info) | io_interface = Interface zur Datenübertragung (usb.., IP-Adresse, COM..) target = Zielkomponente (user, conn) info = Statusinformationen ausgeben / nicht ausgeben |
oo | public Boolean ctrl_route_UART(String target) | ||
Netzwerkparameter speichern | statisch | public static Boolean ctrl_saveEthernetParameter(String io_interface, String mac, String ip, String subnet, String gateway, Boolean info) | io_interface = Interface zur Datenübertragung(usb.., IP-Adresse, COM..) mac = MAC-Adresse für das Netzwerkinterface ip = IP-Adresse für das Netzwerk subnet = Subnet-IP-Adresse für das Netzwerk gateway = Gateway-IP-Adresse für das Netzwerk info = Statusinformationen ausgeben / nicht ausgeben |
oo | public Boolean ctrl_saveEthernetParameter(String mac, String ip, String subnet, String gateway) | ||
Netzwerkparameter auslesen | statisch | public static Boolean ctrl_loadEthernetParameter(String io_interface, out String mac, out String ip, out String subnet, out String gateway, Boolean info) | io_interface = Interface zur Datenübertragung (usb.., IP-Adresse, COM..) mac = MAC-Adresse für das Netzwerkinterface (Ausgabeparameter) ip = IP-Adresse für das Netzwerk (Ausgabeparameter) subnet = Subnet-IP-Adresse für das Netzwerk (Ausgabeparameter) gateway = Gateway-IP-Adresse für das Netzwerk (Ausgabeparameter) info = Statusinformationen ausgeben / nicht ausgeben |
oo | public Boolean ctrl_loadEthernetParameter(out String mac, out String ip, out String subnet, out String gateway) | ||
Programmierung des Nutzer-/FMC-Konnektor-FPGA | |||
Bit-Datei nicht-flüchtig im Flash speichern (automatisches Laden zum Systemstart) | statisch | public static Boolean ctrl_saveUserfile(String io_interface, String target, String filepath, Boolean info) | io_interface = Interface zur Datenübertragung (usb.., IP-Adresse, COM..) target = Zielkomponente (user, conn) filepath = Dateipfad zur Bit-Datei, welche im Flash gespeichert werden soll info = Statusinformationen ausgeben / nicht ausgeben |
oo | public Boolean ctrl_saveUserfile(String target, String filepath) | ||
Bit-Datei flüchtig ins FPGA laden | statisch | public static Boolean ctrl_progUserfile(String io_interface, String target, String filepath, Boolean info) | io_interface = Interface zur Datenübertragung (usb.., IP-Adresse, COM..) target = Zielkomponente (user, conn) filepath = Dateipfad zur bit-Datei, mit welcher das FPGA konfiguriert werden soll info = Statusinformationen ausgeben / nicht ausgeben |
oo | public Boolean ctrl_progUserfile(String target, String filepath) | ||
Bit-Datei aus Flash erneut laden | statisch | public static Boolean ctrl_reloadUserfile(String io_interface, String target, Boolean info) | io_interface = Interface zur Datenübertragung (usb.., IP-Adresse, COM..) target = Zielkomponente (user, conn) info = Statusinformationen ausgeben / nicht ausgeben |
oo | public Boolean ctrl_reloadUserfile(String target) | ||
Parameterinterface des Nutzer-/FMC-Konnektor-FPGAs | |||
allgemeines Interaktionspaket zur Parametrierung | statisch | public static Boolean ctrl_sendCommand(String io_interface, String target, byte command, byte[] attachment, out byte[] feedback, Boolean info) | io_interface = Interface zur Datenübertragung (usb.., IP-Adresse, COM..) target = Zielkomponente (user, conn) command = Befehlsnummer attachment = zu sendender Paketanhang/-inhalt feedback = empfangener Anhang/Inhalt des Feedbackpaketes (Ausgabewert) info = Statusinformationen ausgeben (ja/nein) |
oo | public Boolean ctrl_sendCommand(String target, byte command, byte[] attachment, out byte[] feedback) | ||
Dateninterface des Nutzer-FPGA | |||
Datenabruf und -speicherung in Datei starten | statisch | nicht verfügbar | filepath = Pfad zur Datei, in der die Daten gespeichert werden sollen |
oo | public Boolean stream_readData_start(String filepath) | ||
Datenabruf und -speicherung in Datei beenden | statisch | nicht verfügbar | |
oo | public Boolean stream_readData_stop() | ||
Daten abrufen und als Array zurückliefern (Angabe der Datenmenge) | statisch | public static Boolean stream_readData_array(String stream_interface, UInt32 numberOfBytes, out byte[] value_array, Boolean info) | stream_interface = Interface für den Datenstream (usb.., IP-Adresse) numberOfBytes = Anzahl der auszulesenden Bytes value_array = Array mit dem ausgelesenen Datenpaket (Ausgabewert) info = Statusinformationen ausgeben (ja/nein) |
oo | public Boolean stream_readData_array(UInt32 numberOfBytes, out byte[] value_array) | ||
Daten abrufen und in Datei speichern (Angabe der Datenmenge) | statisch | public static Boolean stream_readData_size(String stream_interface, UInt32 numberOfBytes, String filepath, Boolean info) | stream_interface = Interface für den Datenstream (usb.., IP-Adresse) numberOfBytes = Anzahl der auszulesenden Bytes filepath = Pfad zur Datei, in der die Daten gespeichert werden sollen info = Statusinformationen ausgeben (ja/nein) |
oo | public Boolean stream_readData_size(UInt32 numberOfBytes, String filepath) | ||
Daten abrufen und in Datei speichern (Angabe der Übertragungsdauer) | statisch | public static Boolean stream_readData_ms(String stream_interface, UInt32 milliseconds, String filepath, Boolean info) | stream_interface = Interface für den Datenstream (usb.., IP-Adresse) milliseconds = Dauer der Aufzeichnung in ms filepath = Pfad zur Datei, in der die Daten gespeichert werden sollen info = Statusinformationen ausgeben (ja/nein) |
oo | public Boolean stream_readData_ms(UInt32 milliseconds, String filepath) | ||
Datensendung aus Datei starten | statisch | nicht verfügbar | filepath = Pfad zur Datei, aus der die Daten gelesen werden sollen |
oo | public Boolean stream_writeData_start(String filepath) | ||
Datensendung aus Datei beenden | statisch | nicht verfügbar | |
oo | public Boolean stream_writeData_stop() | ||
Daten aus Array senden (Angabe der Datenmenge) | statisch | public static Boolean stream_writeData_array(String stream_interface, UInt32 numberOfBytes, byte[] value_array, Boolean info) | stream_interface = Interface für den Datenstream (usb.., IP-Adresse) numberOfBytes = Anzahl der zu sendenden Bytes value_array = Array mit dem zu sendenden Datenpaket info = Statusinformationen ausgeben (ja/nein) |
oo | public Boolean stream_writeData_array(UInt32 numberOfBytes, byte[] value_array) | ||
Daten aus Datei senden (Angabe der Datenmenge) | statisch | public static Boolean stream_writeData_size(String stream_interface, UInt32 numberOfBytes, String filepath, Boolean info) | stream_interface = Interface für den Datenstream (usb.., IP-Adresse) numberOfBytes = Anzahl der zu übertragenden Bytes filepath = Pfad zur Datei, aus der die Daten gelesen werden sollen info = Statusinformationen ausgeben (ja/nein) |
oo | public Boolean stream_writeData_size(UInt32 numberOfBytes, String filepath) | ||
Daten aus Datei senden (Angabe der Übertragungsdauer) | statisch | public static Boolean stream_writeData_ms(String stream_interface, UInt32 milliseconds, String filepath, Boolean info) | stream_interface = Interface für den Datenstream (usb.., IP-Adresse) milliseconds = Dauer der Sendung in ms filepath = Pfad zur Datei, aus der die Daten gelesen werden sollen info = Statusinformationen ausgeben (ja/nein) |
oo | public Boolean stream_writeData_ms(UInt32 milliseconds, String filepath) |
Hier haben wir einige Beispiele für objektorientierte Funktionsaufrufe zusammengestellt:
- ein Objekt der Bibliothek instanziieren; es soll über USB Port 17 kommunizieren und Statusinformationen ausgeben
- brBase my_db = new brBase("usb_port17", true);
- das Interface zur Kommunikation öffnen
- my_db.OpenInterface();
- einen Heartbeat vom Nutzer-FPGA abrufen
- my_db.ctrl_heartbeat("user");
- bit-Datei für das FMC-Konnektor-FPGA fest im Speicher ablegen
- my_db.ctrl_saveUserfile("conn", "mynewfile.bit");
- ein 500kB großes Datenpaket abrufen und in einer Datei sichern
- my_db.stream_readData_size(500000, "mydata.bit");
- das Interface schließen
- my_db.CloseInterface();
- einen Heartbeat vom Nutzer-FPGA über das erste verfügbare USB Interface abrufen und Statusinformationen über die Konsole ausgeben lassen
-
- ctrl_heartbeat("usb", "user", true);
- Setzen der Debug-IOs über das LAN Interface: IO_0 und IO_3 auf High, alle anderen IOs auf Low, Statusinformationen nicht anzeigen
- ctrl_setDebugIOs("192.168.1.50", 0x05, false);
- Netzwerkparameter über den Virtual COM-Port anpassen, Statusinformationen ausgeben
- ctrl_saveEthernetParameter("COM4", "01:B3:99:C0:55:BD", "192.168.1.50", "255.255.255.0", "192.168.1.1", true);
- bit-Datei für das FMC-Konnektor-FPGA über das erste verfügbare USB Interface fest im Speicher ablegen
- ctrl_saveUserfile("usb0", "conn", "mynewfile.bit", true);
- ein 2 Megabyte großes Datenpaket über USB Port 16 abrufen und als Array zurückgeben
- stream_readData_array("usb_port16", 2000000, out my_array, true);
- Daten aus einer Datei für 500 ms über das LAN Interface an das Board senden
- stream_writeData_ms("192.168.1.50", 500, "tx_file.bit", false);