since I needed an autodetection of an usb device ...
Code: Select all
CompilerIf #PB_Compiler_IsMainFile
EnableExplicit
CompilerEndIf
CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
ImportC "/lib/i386-linux-gnu/libudev.so"
CompilerElse
ImportC "/lib/x86_64-linux-gnu/libudev.so"
CompilerEndIf
udev_new.i()
udev_unref.i(*udev)
udev_enumerate_new.i(*udev)
udev_enumerate_add_match_subsystem.i(*enumerate, subsystem.p-UTF8)
udev_enumerate_scan_devices.i(*enumerate)
udev_enumerate_get_list_entry.i(*enumerate)
udev_list_entry_get_next.i(*list_entry)
udev_list_entry_get_name_.i(*list_entry) As "udev_list_entry_get_name"
udev_device_new_from_syspath.i(*udev, path.p-UTF8)
udev_device_get_devnode_.i(*dev) As "udev_device_get_devnode"
udev_device_get_parent_with_subsystem_devtype.i(*dev, subsystem.p-UTF8, devtype.p-UTF8)
udev_device_get_sysattr_value_.i(*dev, sysattr.p-UTF8) As "udev_device_get_sysattr_value"
udev_device_unref.i(*dev)
udev_enumerate_unref.i(*enumerate)
EndImport
Procedure.s udev_list_entry_get_name(*list_entry)
Protected *path, Result$
*path = udev_list_entry_get_name_(*list_entry)
If *path
Result$ = PeekS(*path, -1, #PB_UTF8)
EndIf
ProcedureReturn Result$
EndProcedure
Procedure.s udev_device_get_devnode(*dev)
Protected *DevNode, Result$
*DevNode = udev_device_get_devnode_(*dev)
If *DevNode
Result$ = PeekS(*DevNode, -1, #PB_UTF8)
EndIf
ProcedureReturn Result$
EndProcedure
Procedure.s udev_device_get_sysattr_value(*dev, sysattr$)
Protected *Value, Result$
*Value = udev_device_get_sysattr_value_(*dev, sysattr$)
If *Value
Result$ = PeekS(*Value, -1, #PB_UTF8)
EndIf
ProcedureReturn Result$
EndProcedure
CompilerIf #PB_Compiler_IsMainFile
Define udev.i, enumerate.i, devices.i, list_entry.i, path$, dev.i
Define usb_DevicePath.i, usb_DevicePath$, value$
Define usb_handler.i, Count.i
Dim usb_buffer.a(64)
udev = udev_new()
If udev
;Debug udev
enumerate = udev_enumerate_new(udev)
;Debug enumerate
udev_enumerate_add_match_subsystem(enumerate, "hidraw")
udev_enumerate_scan_devices(enumerate)
devices = udev_enumerate_get_list_entry(enumerate)
;Debug devices
list_entry = devices
While list_entry
;Debug list_entry
path$ = udev_list_entry_get_name(list_entry)
Debug path$
dev = udev_device_new_from_syspath(udev, path$)
usb_DevicePath$ = udev_device_get_devnode(dev)
Debug usb_DevicePath$
dev = udev_device_get_parent_with_subsystem_devtype(dev, "usb", "usb_device")
If dev
value$ = udev_device_get_sysattr_value(dev, "product")
If value$ <> ""
Debug value$
EndIf
udev_device_unref(dev)
EndIf
list_entry = udev_list_entry_get_next(list_entry)
Wend
udev_enumerate_unref(enumerate)
udev_unref(udev)
EndIf
CompilerEndIf