Donnerstag, 21. Juni 2012

yab - Anzahl der angeschlossenen USB- Geräte je USB- Controller ermitteln

In den letzten beiden Posts "yab - die Anzahl der USB- Controller ermitteln" und "yab - Anzahl der angeschlossenen USB- Geräte ermitteln" habe ich Euch bereits gezeigt wie man die Anzahl der USB- Controller bzw. die Anzahl der angeschlossenen USB- Geräte ermitteln kann. Im heutigen Post möchte ich Euch zeigen, wie man die Anzahl angeschlossener USB- Geräte je USB- Controller ermitteln kann.

Zu diesem Zweck bedienen wir uns wieder bei der Sub- Routine "GetUSBControllerCount.yab". Mit dem Ergebnis aus dieser Sub- Routine bauen wir uns den Device- Pfad zusammen und rufen diesen zusammen mit dem Kommandozeilen- Befehl "listusb" auf. Der Zähler für die USB- Geräte wird dabei solange erhöht bis das Ergebnis die Zeichenkette "Cannot open USB device:" enthält. Ist dies der Fall, ist kein weiteres USB- Gerät an diesem USB- Controller verfügbar und die Verarbeitung wird abgebrochen.

Als Parameter für die Sub- Routine wird die Nummer des entsprechenden USB- Controller übergeben. Folgendes Beispiel sowie die Sub- Routine selbst, sollen dies veranschaulichen. Zur einwandfreien Funktion ist ebenfalls wieder die Sub- Routine "GetUSBControllerCount.yab" erforderlich. Gewürzt mit jeder Menge Kommentaren sollte sich die Sub- Routine prinzipiell von selbst erklären.

Beispiel

import GetUSBControllerCount

print "Anzahl der USB- Geräte je USB- COntroller:"

for i = 1 to _GetUSBControllerCount()

  Devices$ = str$(_GetUSBControllerDevicesCount())
  print "USB- Controller (" + str$(i) + ") = " + Devices$

next i


Sub- Routine

export sub _GetUSBControllerDevicesCount(ControllerNumber)

  // lokale Variablen- Definition
  local SystemInput$
  local Device$
  local NoDevice
  
  dim Line$(1)

  NoDevice = false

  // den Pfad zum entsprechenden USB- Device "zusammenbauen"
  Device$ = "/dev/bus/usb/" + str$(ControllerNumber) + "/"

  while (NoDevice = false)

    // Den Befehl "listusb -v" mit dem generierten Device- Pfad
    // aufrufen und Ergebnis in SystemInput$ speichern.
    SystemInput$ = system$("listusb " + Device$ + str$(Counter))

    // Prüfen ob die Ausgabe den String "Cannot open USB device:"
    // enthält, wenn ja ist kein weiteres Device verfügbar, Abbruch.
    if not instr(SystemInput$, "Cannot open USB device:") then

      Counter = Counter + 1   

    else

      // wenn kein weiteres USB- Gerät gefunden wird, abbrechen
      NoDevice = true
      break

    endif

  wend

  // Ergebnis zurückgeben
  return Counter
 
end sub


(getestet mit Haiku R1 Alpha 3 und yab 1.5)

Keine Kommentare:

Kommentar veröffentlichen