LabVIEWForum.de
USB Descriptor auslesen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: USB Descriptor auslesen (/Thread-USB-Descriptor-auslesen)



USB Descriptor auslesen - TDO88 - 20.07.2023 13:11

Hallo Zusammen,

ich habe ein HID Gerät, welches über USB am Rechner angeschlossen ist.
Gibt es die Möglichkeit den USB Device Descriptor davon auszulesen?

Habe bisher noch keine Möglichkeit dafür gefunden. Scheinbar kann man das über die HID.dll machen, jedoch weiß ich nicht genau, wie ich diese in meinen Code integrieren kann. Eine .h Datei davon finde ich nicht um die DLL zu importieren und um den DLL Aufruf direkt auzuführen, bin ich mir unsicher, wie ich die Übergabeparameter definieren soll.

Hat da jemand Erfahrung?

Gruß
TDO


RE: USB Descriptor auslesen - Martin.Henz - 20.07.2023 16:15

Hallo TDO,

Microsoft hat jede Menge Infos zur HID API: https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/_hid/


RE: USB Descriptor auslesen - TDO88 - 21.07.2023 06:37

Hallo Martin,

vielen Dank für den Link.
Auf der Seite war ich schon, komme mit diesen Infos aber leider nicht weiter. Es gibt da ja z.B. die Funktion
Code:
BOOLEAN HidD_GetPhysicalDescriptor(
  [in]  HANDLE HidDeviceObject,
  [out] PVOID  Buffer,
  [in]  ULONG  BufferLength
);

Parameters

[in] HidDeviceObject

Specifies an open handle to a top-level collection.

[out] Buffer

Pointer to a caller-allocated buffer that the routine uses to return the requested physical descriptor.

[in] BufferLength

Specifies the length, in bytes, of the buffer at Buffer.

Wie bekomme ich jetzt aber ein Handle auf das HID Gerät, welches ich ansprechen möchte?
Welchen Datentypen muss ich dann beim Parameter Buffer benutzen?

Grüße


RE: USB Descriptor auslesen - Martin.Henz - 22.07.2023 13:06

Wie du an das HidDeviceObject kommst: Da hilft nur die Suchmaschine deiner Wahl zu befragen, oder auf der MS webseite zu suchen :-)
Codebeispiele finden sich ja auch dazu.

Das was du vor hast scheint mir ohne das passende Vorwissen nichts zu sein, was mal eben schnell implementiert werden kann.


RE: USB Descriptor auslesen - th13 - 24.07.2023 09:32

(21.07.2023 06:37 )TDO88 schrieb:  [code]BOOLEAN HidD_GetPhysicalDescriptor(
[in] HANDLE HidDeviceObject,
[out] PVOID Buffer,
[in] ULONG BufferLength
);
Welchen Datentypen muss ich dann beim Parameter Buffer benutzen?
ULONG ist U32, PVIOD ist ein Zeiger auf deinen Puffer (also der Rückgabestring), da sollte "unsigned pointer-sized integer" und "pointer to value" funktionieren.
HANDLE ist wahrscheinlich auch ein unsigned Integer.

(21.07.2023 06:37 )TDO88 schrieb:  Wie bekomme ich jetzt aber ein Handle auf das HID Gerät, welches ich ansprechen möchte?
Such nach C/C++ oder C#-Code, den du untersuchen kannst, zB hier: https://chromium.googlesource.com/chromium/src.git/+/62.0.3178.1/third_party/libusb/src/libusb/os/windows_usb.c
Du wirst hier aber nur wenige Leute finden, die sich mit der Windows-API auskennen. Evtl. ist es auch einfacher, du schreibst den Code zum Auslesen in C++ oder C#, packst das ganze in eine DLL und übergibst an LabVIEW nur den String, hier zB C#-Code: https://stackoverflow.com/questions/52217169/get-data-from-usb-device-descriptor

Calling C/C++ DLLs from LabVIEW


RE: USB Descriptor auslesen - Martin.Henz - 24.07.2023 17:20

(24.07.2023 09:32 )th13 schrieb:  Calling C/C++ DLLs from LabVIEW

Bitte nicht ausgerechnet diesen Link verbreiten. Ich kannte das bis heute noch nicht. Das was da steht ist in weiten Teilen schlicht falsch.


RE: USB Descriptor auslesen - rolfk - 25.08.2023 11:13

(24.07.2023 17:20 )Martin.Henz schrieb:  
(24.07.2023 09:32 )th13 schrieb:  Calling C/C++ DLLs from LabVIEW

Bitte nicht ausgerechnet diesen Link verbreiten. Ich kannte das bis heute noch nicht. Das was da steht ist in weiten Teilen schlicht falsch.

Schlicht falsch ist definitive übertrieben. Teilweise könnte es noch mehr und spezifischere Erklärungen gebrauchen, aber!!! Das endet sehr schnell in C Details, die der Durchschnitt-LabVIEW-Programmierer ohnehin nicht mehr begreifen kann. Das Problem ist komplex und in vielen Fällen schlicht nicht ausgiebig zu erklären auf eine Weise, die ein nicht C Programmierer überhaupt begreifen könnte.

Was sicher ein Update vertragen könnte ist die Anpassung an die heutige Welt wo 64-bit mehr und mehr Standard wird. Diese Dokumente stammen alle noch aus einer Zeit wo 32-bit der Standard war und teilweise selbst noch nicht mal eine Option in LabVIEW. LabVIEW kennt erst seit 2009 auch eine 64-bit Version und erst seit 2014 auf nicht Windows Systemen. Aber selbst dann war es lange Zeit noch der Tenor "Wer braucht überhaupt 64-bit?" und "Warum sollte ich mich mit der Möglichkeit von 64-bit Systemen abgeben? Das benütze ich eh nie im Leben!"

Übrigens ist ein HANDLE immer eine Pointer sized integer, persönlich bevorzuge ich dabei Unsigned aber es ist wichtiger um es konsistent überall signed oder unsigned zu machen, dann welchen davon man wählt.