Da keiner anscheinend vollständige die libusb in pb portiert hat und ich das grad brauche, hier zum einen die lusb0_usb.h vollständig und dann noch einmal angefangen die dll befehle zu mappen, aber da hänge ich grad fest.
Code: Alles auswählen
EnableExplicit
IncludeFile "usbHeader.pb" ;constants and structures we need for libusb0.dll
Global libUsbID = OpenLibrary(#PB_Any, "libusb0.dll")
;Define Function-Pointers for CallFunctionFast
If IsLibrary(libUsbID)
Define _usb_get_version = GetFunction(libUsbID, "usb_get_version")
;-Core Functions
Define _usb_init = GetFunction(libUsbID, "usb_init")
Define _usb_find_busses = GetFunction(libUsbID, "usb_find_busses")
Define _usb_find_devices = GetFunction(libUsbID, "usb_find_devices")
Define _usb_get_busses = GetFunction(libUsbID, "usb_get_busses")
;-Device operations
Define _usb_open = GetFunction(libUsbID, "usb_open")
Define _usb_close = GetFunction(libUsbID, "usb_close")
Define _usb_set_configuration = GetFunction(libUsbID, "usb_set_configuration")
Define _usb_set_altinterface = GetFunction(libUsbID, "usb_set_altinterface")
Define _usb_resetep = GetFunction(libUsbID, "usb_resetep")
Define _usb_clear_halt = GetFunction(libUsbID, "usb_clear_halt")
Define _usb_reset = GetFunction(libUsbID, "usb_reset")
Define _usb_claim_interface = GetFunction(libUsbID, "usb_claim_interface")
Define _usb_release_interface = GetFunction(libUsbID, "usb_release_interface")
;-Control Transfer
Define _usb_control_msg = GetFunction(libUsbID, "usb_control_msg")
Define _usb_get_string = GetFunction(libUsbID, "usb_get_string")
Define _usb_get_string_simple = GetFunction(libUsbID, "usb_get_string_simple")
Define _usb_get_descriptor = GetFunction(libUsbID, "usb_get_descriptor")
Define _usb_get_descriptor_by_endpoint = GetFunction(libUsbID, "usb_get_descriptor_by_endpoint")
;-Bulk Transfer
Define _usb_bulk_write = GetFunction(libUsbID, "usb_bulk_write")
Define _usb_bulk_read = GetFunction(libUsbID, "usb_bulk_read")
;-Interrupt Transfer
Define _usb_interrupt_write = GetFunction(libUsbID, "usb_interrupt_write")
Define _usb_interrupt_read = GetFunction(libUsbID, "usb_interrupt_read")
;-Non Portable
Define _usb_get_driver_np = GetFunction(libUsbID, "usb_get_driver_np")
Define _usb_detach_kernel_driver_np = GetFunction(libUsbID, "usb_detach_kernel_driver_np")
EndIf
; ----------------------------------------------------------------------
; allready tested and works fine
Procedure usb_init()
Shared _usb_init
ProcedureReturn CallFunctionFast(_usb_init)
EndProcedure
Procedure usb_find_busses()
Shared _usb_find_busses
ProcedureReturn CallFunctionFast(_usb_find_busses)
EndProcedure
Procedure usb_find_devices()
Shared _usb_find_devices
ProcedureReturn CallFunctionFast(_usb_find_devices)
EndProcedure
Procedure usb_get_busses()
ProcedureReturn CallFunction(libUsbID, "usb_get_busses")
EndProcedure
Procedure usb_get_version()
ProcedureReturn CallFunction(libUsbID, "usb_get_version")
EndProcedure
; ----------------------------------------------------------------------
; Don't work for me, but don't know why :(
Procedure usb_open(*dev.usb_device) ;returns *usb_dev_handle
Shared _usb_open
If *dev = 0
ProcedureReturn 0
EndIf
ProcedureReturn CallFunctionFast(_usb_open, *dev)
EndProcedure
; Not Tested
Procedure usb_close(*dev.usb_dev_handle) ;returns 0 if success
Shared _usb_close
If *dev = 0
ProcedureReturn -1
EndIf
ProcedureReturn CallFunctionFast(_usb_close, *dev)
EndProcedure
Procedure usb_set_configuration(*dev.usb_dev_handle, configuration.l) ;returns 0 if success
Shared _usb_set_configuration
If *dev = 0
ProcedureReturn -1
EndIf
ProcedureReturn CallFunctionFast(_usb_set_configuration, *dev, configuration)
EndProcedure
Procedure usb_set_altinterface(*dev.usb_dev_handle, alternate.l)
Shared _usb_set_altinterface
If *dev = 0
ProcedureReturn -1
EndIf
ProcedureReturn CallFunctionFast(_usb_set_altinterface, *dev, alternate)
EndProcedure
; usb_resetep is deprecated. Use usb_clear_halt
Procedure usb_resetep(*dev.usb_dev_handle, ep.l)
Shared _usb_resetep
If *dev = 0
ProcedureReturn -1
EndIf
ProcedureReturn CallFunctionFast(_usb_resetep, *dev, ep)
EndProcedure
Procedure usb_clear_halt(*dev.usb_dev_handle, ep.l)
Shared _usb_clear_halt
If *dev = 0
ProcedureReturn -1
EndIf
ProcedureReturn CallFunctionFast(_usb_clear_halt, *dev, ep)
EndProcedure
Procedure usb_reset(*dev.usb_dev_handle)
Shared _usb_reset
If *dev = 0
ProcedureReturn -1
EndIf
ProcedureReturn CallFunctionFast(_usb_reset, *dev)
EndProcedure
Procedure usb_claim_interface(*dev.usb_dev_handle, hInterface.l)
Shared _usb_claim_interface
If *dev = 0
ProcedureReturn -1
EndIf
ProcedureReturn CallFunctionFast(_usb_claim_interface, *dev, hInterface)
EndProcedure
Procedure usb_release_interface(*dev.usb_dev_handle, hInterface)
Shared _usb_release_interface
If *dev = 0
ProcedureReturn -1
EndIf
ProcedureReturn CallFunctionFast(_usb_release_interface, *dev, hInterface)
EndProcedure
Procedure usb_control_msg(*dev.usb_dev_handle, requesttype.l, request.l, value.l, index.l, *bytes.c, size.l, timeout.l)
Shared _usb_control_msg
If *dev = 0
ProcedureReturn -1
EndIf
ProcedureReturn CallFunctionFast(_usb_control_msg, *dev, requesttype, request, value, index, *bytes, size, timeout)
EndProcedure
Procedure usb_get_string(*dev.usb_dev_handle, index.l, langid.l, *buf.c, buflen.i)
Shared _usb_get_string
If *dev = 0
ProcedureReturn -1
EndIf
ProcedureReturn CallFunctionFast(_usb_get_string, *dev, index, langid, *buf, buflen)
EndProcedure
Procedure usb_get_string_simple(*dev.usb_dev_handle, index.l, *buf.c, buflen.i)
Shared _usb_get_string_simple
If *dev = 0
ProcedureReturn -1
EndIf
ProcedureReturn CallFunctionFast(_usb_get_string_simple, *dev, index, *buf, buflen)
EndProcedure
Procedure usb_get_descriptor(*dev.usb_dev_handle, type.c, index.c, *buf.l, size.l)
Shared _usb_get_descriptor
If *dev = 0
ProcedureReturn -1
EndIf
ProcedureReturn CallFunctionFast(_usb_get_descriptor, *dev, type, index, *buf, size)
EndProcedure
Procedure usb_get_descriptor_by_endpoint(*dev.usb_dev_handle, ep.l, type.c, index.c, *buf.l, size.l)
Shared _usb_get_descriptor_by_endpoint
If *dev = 0
ProcedureReturn -1
EndIf
ProcedureReturn CallFunctionFast(_usb_get_descriptor_by_endpoint, *dev, ep, type, index, *buf, size)
EndProcedure
Procedure usb_bulk_write(*dev.usb_dev_handle, ep.l, *bytes.c, size.l, timeout.l)
Shared _usb_bulk_write
If *dev = 0
ProcedureReturn -1
EndIf
ProcedureReturn CallFunctionFast(_usb_bulk_write, *dev, ep, *bytes, size, timeout)
EndProcedure
Procedure usb_bulk_read(*dev.usb_dev_handle, ep.l, *bytes.c, size.l, timeout.l)
Shared _usb_bulk_read
If *dev = 0
ProcedureReturn -1
EndIf
ProcedureReturn CallFunctionFast(_usb_bulk_read, *dev, ep, *bytes, size, timeout)
EndProcedure
Procedure usb_interrupt_write(*dev.usb_dev_handle, ep.l, *bytes.c, size.l, timeout.l)
Shared _usb_interrupt_write
If *dev = 0
ProcedureReturn -1
EndIf
ProcedureReturn CallFunctionFast(_usb_interrupt_write, *dev, ep, *bytes, size, timeout)
EndProcedure
Procedure usb_interrupt_read(*dev.usb_dev_handle, ep.l, *bytes.c, size.l, timeout.l)
Shared _usb_interrupt_read
If *dev = 0
ProcedureReturn -1
EndIf
ProcedureReturn CallFunctionFast(_usb_interrupt_read, *dev, ep, *bytes, size, timeout)
EndProcedure
Procedure usb_get_driver_np(*dev.usb_dev_handle, hInterface.l, *name.c, namelen.l)
Shared _usb_get_driver_np
If *dev = 0
ProcedureReturn -1
EndIf
ProcedureReturn CallFunctionFast(_usb_get_driver_np, *dev, hInterface, *name, namelen)
EndProcedure
Procedure usb_detach_kernel_driver_np(*dev.usb_dev_handle, hInterface.l)
Shared _usb_detach_kernel_driver_np
If *dev = 0
ProcedureReturn -1
EndIf
ProcedureReturn CallFunctionFast(_usb_detach_kernel_driver_np, *dev, hInterface)
EndProcedure
DisableExplicit
und hier noch ein kleines beispiel, dass alle Daten von vorhandenen Busse und Devices ausgibt.
usb_init() muss immer vor irgendwelchen anderen usblib Zugriffen aufgerufen werden. Die dll wird autom. geladen, muss mal also nicht selbst machen.
Ein Gerät wird nur erkannt, wenn das Gerät auch für libusb oder libusbk installiert wurde. Dabei spielt es keine Rolle ob es eine Filter Installation ist oder nicht.
Falls jemand weiß, warum das mit dem usb_open() nicht funktioniert, nicht schüchtern sein und bitte bescheid geben. Dann kann ich das ganze vervollständigen.
Werd mal schauen, ob vielleicht ein paar Privilegien benötigt werden. Ich bin mir ziemlich sicher, das hängt mit dem CreateFile_() zusammen, dass innerhalb von usb_open in der dll aufgerufen wird. wenn ich diese schritte selbst über pb mache, scheitert es an CreateFile_(). Result ist immer -1.