Skip to content

Instantly share code, notes, and snippets.

@m3m0r7
Created October 12, 2021 10:35
Show Gist options
  • Save m3m0r7/da2489279de1d5a1e6504b8fcfb13d14 to your computer and use it in GitHub Desktop.
Save m3m0r7/da2489279de1d5a1e6504b8fcfb13d14 to your computer and use it in GitHub Desktop.
<?php
$ffi = FFI::cdef(file_get_contents(__DIR__ . '/libusb.h'), '/usr/local/Cellar/libusb/1.0.24/lib/libusb-1.0.0.dylib');
$dh = $ffi->new('libusb_device_handle *');
$path = $ffi->new('uint8_t[8]');
$sdata = $ffi->new('uint8_t[255]');
$init = $ffi->libusb_init(null);
$devices = $ffi->new('libusb_device **');
$size = $ffi->libusb_get_device_list(null, FFI::addr($devices));
for ($x = 0; $x < $size; $x++) {
$device = $devices[$x];
$desc = $ffi->new('libusb_device_descriptor');
$r = $ffi->libusb_get_device_descriptor($device, FFI::addr($desc));
$err = $ffi->libusb_open($device, FFI::addr($dh));
if ($err < 0) {
continue;
}
try {
$r = $ffi->libusb_get_string_descriptor_ascii($dh, $desc->iManufacturer, $sdata, FFI::sizeof($sdata));
$m = [];
for ($i = 0; $i < 255; $i++) {
$m[] = chr($sdata[$i]);
}
$m = trim(implode($m));
$r = $ffi->libusb_get_string_descriptor_ascii($dh, $desc->iProduct, $sdata, FFI::sizeof($sdata));
$p = [];
for ($i = 0; $i < 255; $i++) {
$p[] = chr($sdata[$i]);
}
$p = trim(implode($p));
$r = $ffi->libusb_get_string_descriptor_ascii($dh, $desc->iSerialNumber, $sdata, FFI::sizeof($sdata));
$s = [];
for ($i = 0; $i < 255; $i++) {
$s[] = chr($sdata[$i]);
}
$s = trim(implode($s));
printf(
"%04x/%04x (bus %d, device %d), Manufacturer: %s, Product: %s, SN: %s\n",
$desc->idVendor,
$desc->idProduct,
$ffi->libusb_get_bus_number($device),
$ffi->libusb_get_device_address($device),
$m,
$p,
$s
);
} finally {
$ffi->libusb_release_interface($dh, 0);
$ffi->libusb_close($dh);
}
}
$ffi->libusb_free_device_list($devices, 1);
$ffi->libusb_exit(null);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment