USB HID help

For issues with communication ports, protocols, etc.
I3I2UI/I0
Posts: 90
Joined: Jun 03, 2005 10:39
Location: Germany

Post by I3I2UI/I0 »

Only tested on WinME.

Code: Select all

#Include Once "windows.bi"
#Include Once "win\setupapi.bi"
#Include Once "win\ocidl.bi"

Type HIDD_ATTRIBUTES
  size As Dword
  VendorID As Word
  ProductID As Word
  VersionNumber As Word
End Type
Dim As HIDD_ATTRIBUTES HIDAttributes

Type my_DEVICE_INTERFACE_DETAIL_DATA
  cbSize As Integer
  txt As ZString*160
End Type
Dim As my_DEVICE_INTERFACE_DETAIL_DATA SPDEVICEINTERFACEDETAILDATA

Dim HDEVINFO As hDevInfo
Dim As SP_DEVINFO_DATA  DeviceInfoData
Dim As SP_DEVICE_INTERFACE_DATA Spdeviceinterfacedata
Dim buffersize As Integer
Dim hPort As HANDLE
Dim As WString*128 WS

Screen 18
Color ,1:Cls:Color 14, 1

Dim guid As GUID
Dim guids As LPOLESTR
Dim As Any Ptr hLib = DylibLoad( "hid.dll" )
Dim HidD_GetHidGuid As Sub(ByVal guidv As guid Ptr) _
= DyLibSymbol(hlib, "HidD_GetHidGuid")

Dim HidD_GetAttributes As _
Function(ByVal As HANDLE, ByVal As Any Ptr)As Integer _
= DyLibSymbol(hlib, "HidD_GetAttributes")

Dim HidD_GetManufacturerString As _
Function(ByVal As HANDLE, ByVal As Any Ptr, ByVal As Integer)As Integer _
= DyLibSymbol(hlib, "HidD_GetManufacturerString")

Dim HidD_GetProductString As _
Function(ByVal As HANDLE, ByVal As Any Ptr, ByVal As Integer)As Integer _
= DyLibSymbol(hlib, "HidD_GetProductString")

Dim HidD_GetSerialNumberString As _
Function(ByVal As HANDLE, ByVal As Any Ptr, ByVal As Integer)As Integer _
= DyLibSymbol(hlib, "HidD_GetSerialNumberString")

If hLib = 0 Then
  Print "Dylibload(hid.dll) failed"
  Sleep : End
Else
  HidD_GetHidGuid(@guid)
  StringFromIID(@guid,@guids)
  Print "USB_HID_GUID: ";*guids
End If


hDevInfo = SetupDiGetClassDevs(@guid,0,0,DIGCF_PRESENT Or DIGCF_DEVICEINTERFACE)
If hDevInfo = INVALID_HANDLE_VALUE Then
  Print "SetupDiGetClassDevs failed"
  Sleep : End
End If

DeviceInfoData.cbSize = SizeOf(SP_DEVINFO_DATA)
SetupDiEnumDeviceInfo(hDevInfo, 0, @DeviceInfoData)
StringFromIID(@DeviceInfoData. ClassGuid, @guids)
Print "ClassGuid: " ; *guids

Dim MemberIndex As Integer
Do
  Spdeviceinterfacedata.cbSize = SizeOf(SP_DEVICE_INTERFACE_DATA)
  If SetupDiEnumDeviceInterfaces(hDevInfo, 0, @guid, MemberIndex, _
    @SpDeviceInterfaceData) = 0 Then

    If GetLastError() = ERROR_NO_MORE_ITEMS Then Exit Do
  EndIf
  StringFromIID(@Spdeviceinterfacedata.InterfaceClassGuid, @guids)
  Print :Print "InterfaceClassGuid: " ; *guids


  buffersize=SizeOf(my_DEVICE_INTERFACE_DETAIL_DATA)
  SPDEVICEINTERFACEDETAILDATA.cbSize = 5 '$%#@ :(
  If SetupDiGetDeviceInterfaceDetail(hDevInfo, @Spdeviceinterfacedata, _
    Cast(Any Ptr, @SPDEVICEINTERFACEDETAILDATA), buffersize, 0, 0) = 0 Then

    If GetLastError() = ERROR_INSUFFICIENT_BUFFER Then Exit Do
  End If
  Print "DevicePathName: " ; SPDEVICEINTERFACEDETAILDATA.txt

  SetLastError(0)
  hPort = CreateFile(StrPtr(SPDEVICEINTERFACEDETAILDATA.txt), _
  GENERIC_READ Or GENERIC_WRITE, _
  FILE_SHARE_READ Or FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0)

  If hPort = 0 Then Exit Do
  If GetLastError() Then Exit Do

  HIDAttributes.size = SizeOf(HIDD_ATTRIBUTES)
  HidD_GetAttributes(hPort, @HIDAttributes)
  If GetLastError() Then Exit Do
  Print  "VendorID:  " ; Hex(HIDAttributes.VendorID, 4)
  Print  "ProductID: " ; Hex(HIDAttributes.ProductID, 4)
  Print  "VersionNumber: " ; Hex(HIDAttributes.VersionNumber, 4)

  If HidD_GetManufacturerString(hPort,StrPtr(WS), 128) Then _
  Print "Manufacturer: " ; WS
  If HidD_GetProductString(hPort,StrPtr(WS), 128) Then _
  Print "Product: " ; WS
  If HidD_GetSerialNumberString(hPort,StrPtr(WS), 128) Then _
  Print "SerialNumber: " ; WS

  MemberIndex = MemberIndex + 1
Loop

SetupDiDestroyDeviceInfoList @hDevInfo
If hPort Then CloseHandle(hPort)
If hLib Then DylibFree hLib

Sleep
nobozoz
Posts: 238
Joined: Nov 17, 2005 6:24
Location: Chino Hills, CA, USA

Post by nobozoz »

I3I2UI/I0,

Your code compiled under fb v.21b (03-09-2009) runs nicely on WINXP/PRO SP3.

Found my Dell USB keyboard, but there are more to find.

Thanks.
test1234
Posts: 40
Joined: Sep 29, 2006 17:10

Post by test1234 »

Thank You I3I2UI/I0 !!!
Excellent Work !!!
sparHawk85
Posts: 2
Joined: Feb 04, 2008 12:40

Post by sparHawk85 »

Firstly your code example has helped me very much on my to getting web cam data.

i perhaps think that
cbSize As Integer
should have a uinteger instead of integer.

anyway, thank you.
Oceano
Posts: 43
Joined: Jun 05, 2009 20:37
Contact:

Post by Oceano »

Hi sparHawk85,

You could put your program?

Thank you very much.
Post Reply