INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

libusb-win32 + LV



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

11.02.2008, 08:26
Beitrag #1

heikoleinchen Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Feb 2008

8.6.1
-
de

70563
Deutschland
libusb-win32 + LV
Hi,
auf Basis des lcd2usb-Projekts nutze ich 'nen Atmel MC um irgendwelche Hardware zu steuern. Die Ansteuerung über die libusb läuft, ich würde das ganze gerne von LV8.5 (auf WinXP) aus steuern. Ich hab entsprechend dem "USB Instrument Control Tutorial" den Treiber erstellt und versucht einzubinden. Das funktioniert bei mir aber nur wenn ich eine der libusb noch nicht bekannte VID oder PID verwende, sonst nimmt Windows trotz der Visa-inf. immer den libusb-Treiber.
Fragen:
1. Ist es grundsätzlich nicht möglich Visa-USB und libusb-win32 parallel zu nutzen? (Also z.B. mal ein C-Programm und mal ein LV-Programm zu nutzen?)
2. Wenn nicht scheint ja der einzige Weg in der Verwendung der dll-Einbindung zu liegen. Lt. google hat das wohl immer mal jemanden beschäftigt, aber 'ne richtige Lösung hab ich noch nicht gefunden. Hat jemand 'nen fertiges LV-Programmgerüst der dieses "for(bus = usb_get_busses(); ....... usw.)" umsetzt und es mir / uns zur Verfügung stellt? Meine C- und LV-Kenntnisse sind nicht soo überragend, würde mir die Mühe gerne sparen, anderseits finde ich die Schiene "(z.B.) ATmega8 - libusb - LabVIEW " schön um mit wenig Aufwand praktische Geräte zu bauen, z.B. 'nen PID-Temperaturcontroller.

'ne nette Woche wünschend

heikoleinchen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.02.2008, 09:08 (Dieser Beitrag wurde zuletzt bearbeitet: 13.02.2008 09:20 von rolfk.)
Beitrag #2

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
libusb-win32 + LV
' schrieb:Hi,
auf Basis des lcd2usb-Projekts nutze ich 'nen Atmel MC um irgendwelche Hardware zu steuern. Die Ansteuerung über die libusb läuft, ich würde das ganze gerne von LV8.5 (auf WinXP) aus steuern. Ich hab entsprechend dem "USB Instrument Control Tutorial" den Treiber erstellt und versucht einzubinden. Das funktioniert bei mir aber nur wenn ich eine der libusb noch nicht bekannte VID oder PID verwende, sonst nimmt Windows trotz der Visa-inf. immer den libusb-Treiber.
Fragen:
1. Ist es grundsätzlich nicht möglich Visa-USB und libusb-win32 parallel zu nutzen? (Also z.B. mal ein C-Programm und mal ein LV-Programm zu nutzen?)
2. Wenn nicht scheint ja der einzige Weg in der Verwendung der dll-Einbindung zu liegen. Lt. google hat das wohl immer mal jemanden beschäftigt, aber 'ne richtige Lösung hab ich noch nicht gefunden. Hat jemand 'nen fertiges LV-Programmgerüst der dieses "for(bus = usb_get_busses(); ....... usw.)" umsetzt und es mir / uns zur Verfügung stellt? Meine C- und LV-Kenntnisse sind nicht soo überragend, würde mir die Mühe gerne sparen, anderseits finde ich die Schiene "(z.B.) ATmega8 - libusb - LabVIEW " schön um mit wenig Aufwand praktische Geräte zu bauen, z.B. 'nen PID-Temperaturcontroller.

'ne nette Woche wünschend

Also ich kenne libusb selber nicht aber es ist gut möglich dass sich diese Library bei Windows auf Basis ihrer Implementation beim Booten für alle ihm bekannten USB Devices einlinkt und dass dies mit der USB Registrierung mittels INF File beim späteren aufstarten von VISA so wie das eben VISA tut, einen Konflikt gibt. Da libusb eher war hat VISA das Nachsehen und Windows teilt ihm ganz einfach mit, sorry das Device ist schon durch einen Treiber geclaimt. Das Injecten von einem Treiber in den USB Stack ist etwas das man nur in ganz speziellen Fällen tun will und VISA ist dafür aus gutem Grund nicht vorgesehen.

Wenn Du also libusb unbedingt verwenden willst bleiben Dir nur drei Dinge.

1) Die VID und PID Deines Devices aus der libusb Registrierung nehmen.

2) Oder Du sprichst halt libusb so wie von Dir schon vorgeschlagen als DLL an um mit Deinem Gerät zu kommunizieren. Wie gesagt ich kenne libusb nicht und kann nicht beurteilen wie kompliziert die Parameter sind. Das Problem ist aber ganz sicher im usw. in Deinem Satz "dieses "for(bus = usb_get_busses(); ....... usw.)" umsetzt". Da ist nämlich garantiert einiges an Arbeit zu tun, da Du viele verschiedene Funktionen benötigst bevor Du mit Deinem Gerät kommunizieren kannst.

3) Mit den Autoren oder der Community von libusb überlegen wie die von Dir beschriebene Wirkingsweise angepasst werden kann. Vielleicht gibts da eine Änderung die in libusb gemacht werden könnte. Erwarte aber nicht zuviel, das was Du willst ist eine USB Benützungsweise die von Windows nicht vorgesehen ist und daher nur mit viel Aufwand gemacht werden kann und zudem die Chance auf ganz komische Effekte hat.

Im Moment habe ich leider keine Zeit um mich da einzulesen um Dir bei der DLL Einbindung zu helfen. Wenn Du LabVIEW 8.5 hast kannst Du ja mal den Bibliotheksimport-Wizard (ääh sorry: Zauberer :-) ) probieren.

Rolf Kalbermatter

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.02.2008, 10:14
Beitrag #3

heikoleinchen Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Feb 2008

8.6.1
-
de

70563
Deutschland
libusb-win32 + LV
Hallo Rolf,

Tja, danke für die Antwort.
Ich denke 2) bleibt Mittel der Wahl. Meine Vermutung / Hoffnung ist ja das es soo schwer nicht ist. Der C-Code um den handle zum Gerät zu finden sind ja nur ein paar Zeilen:
struct usb_bus *bus;
struct usb_device *dev;

usb_init();
usb_find_busses();
usb_find_devices();

for(bus = usb_get_busses(); bus; bus = bus->next) {
for(dev = bus->devices; dev; dev = dev->next) {
if((dev->descriptor.idVendor == LCD2USB_VID) &&
(dev->descriptor.idProduct == LCD2USB_PID)) {

/* open device */
if(!(handle = usb_open(dev)))
fprintf(stderr, "Error: Cannot open USB device: %sn",
usb_strerror());

break;
}
}
}

Gut, wenn's hier noch keiner gemacht hat frag ich vielleicht nochmal in anderen Foren.

Schade finde ich ja das LV unter "USB Raw" nicht die Ansteuerung jedes dem System bekannten USB-Gerätes versteht.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.02.2008, 09:48 (Dieser Beitrag wurde zuletzt bearbeitet: 18.02.2008 09:54 von rolfk.)
Beitrag #4

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
libusb-win32 + LV
' schrieb:Hallo Rolf,

Tja, danke für die Antwort.
Ich denke 2) bleibt Mittel der Wahl. Meine Vermutung / Hoffnung ist ja das es soo schwer nicht ist. Der C-Code um den handle zum Gerät zu finden sind ja nur ein paar Zeilen:
struct usb_bus *bus;
struct usb_device *dev;

usb_init();
usb_find_busses();
usb_find_devices();

for(bus = usb_get_busses(); bus; bus = bus->next) {
for(dev = bus->devices; dev; dev = dev->next) {
if((dev->descriptor.idVendor == LCD2USB_VID) &&
(dev->descriptor.idProduct == LCD2USB_PID)) {

/* open device */
if(!(handle = usb_open(dev)))
fprintf(stderr, "Error: Cannot open USB device: %sn",
usb_strerror());

break;
}
}
}

Gut, wenn's hier noch keiner gemacht hat frag ich vielleicht nochmal in anderen Foren.

Aber nachdem Du den Handle hast willst Du auch etwas damit tun. Und da Du da einen libusb handle bekommst wirst Du wohl auch libusb Funktionen verwenden müssen um mit dem Gerät zu kommunizieren. Also noch mehr Funktionen zum importieren aus libusb!

Zitat:Schade finde ich ja das LV unter "USB Raw" nicht die Ansteuerung jedes dem System bekannten USB-Gerätes versteht.

Windows erlaubt nicht mehrere Treiber für das selbe Device zu installieren und zwar mit gutem Grund. Wie stellst Du Dir das vor wenn zwei Treiber gleichzeitig ein Device anzusprechen versuchen, und vielleicht gar widersprüchliche Registereinstellungen in der Hardware vornehmen. Das geht also schon mal nicht.

Rolf Kalbermatter

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Erstellen einer USB-Device-Liste mithilfe von win32-api wonx 3 7.699 23.06.2009 16:17
Letzter Beitrag: rolfk

Gehe zu: