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)
Beispiele

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();


Hier haben wir einige Beispiele für statische Funktionsaufrufe zusammengestellt:

  • 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);