Code: Alles auswählen
procedure TfrmUSB.FormClose(Sender: TObject);
begin
libusb_exit(ctx);
end;
procedure TfrmUSB.btnDeviceClick(Sender: TObject);
var
aDevList : pplibusb_device;
aDev : plibusb_device;
aDevDesc : libusb_device_descriptor;
aDevCount : Int64;
aErrorCode : Integer;
i : Integer;
aDevHandle : plibusb_device_handle;
aManufacturer : Array[0..255] of AnsiChar;
aProduct : Array[0..255] of AnsiChar;
begin
if (mmoDevice.Lines.Count > 0)
then mmoDevice.Lines.Add('');
mmoDevice.Lines.Add('Start Suche');
// Init
aDevList := nil;
aDev := nil;
// Die Geräteliste holen
aDevCount := libusb_get_device_list(ctx, aDevList);
mmoDevice.Lines.Add(Format('Anzahl Geräte: %d', [aDevCount]));
// Wenn mehrere Geräte...
if (aDevCount > 0)
then begin
i := 0;
while (i < aDevCount)
do begin
// Gerät holen
aDev := aDevList[i];
if aDev <> nil
then begin
// Beschreibung holen
aErrorCode := libusb_get_device_descriptor(aDev, aDevDesc);
if (aErrorCode < 0)
then begin
mmoDevice.Lines.Add(Format('%2.d - %s', [aErrorCode, libusb_error_name(aErrorCode)]));
end
else begin
// Gerät mit VID und PID öffnen
aDevHandle := nil;
aDevHandle := libusb_open_device_with_vid_pid(ctx, aDevDesc.idVendor, aDevDesc.idProduct);
if (aDevHandle <> nil)
then begin
// Den Hersteller- und Produktnamen holen
FillChar(aManufacturer, SizeOf(aManufacturer), 0);
libusb_get_string_descriptor_ascii(aDevHandle, aDevDesc.iManufacturer, @aManufacturer[0], SizeOf(aManufacturer));
FillChar(aProduct, SizeOf(aProduct), 0);
libusb_get_string_descriptor_ascii(aDevHandle, aDevDesc.idProduct, @aProduct[0], SizeOf(aProduct));
mmoDevice.Lines.Add(Format('- Bus %.3d Device %.3d: %.4x:%.4x %s, %s',
[libusb_get_bus_number(aDev), libusb_get_device_address(aDev),
aDevDesc.idVendor, aDevDesc.idProduct,
aManufacturer, aProduct]));
end
else begin;
mmoDevice.Lines.Add(Format('- Bus %.3d Device %.3d: %.4x:%.4x',
[libusb_get_bus_number(aDev), libusb_get_device_address(aDev),
aDevDesc.idVendor, aDevDesc.idProduct]));
end;
end;
end;
inc(i);
end;
end;
libusb_free_device_list(aDevList, 0);
mmoDevice.Lines.Add('Fertig.');
end;
procedure TfrmUSB.FormCreate(Sender: TObject);
var
aVersion: plibusb_version;
begin
ctx := nil;
libusb_init(ctx);
stbVersion.Panels.Items[0].Width := 70;
stbVersion.Panels.Items[1].Width := 130;
stbVersion.Panels.Items[2].Width := 200;
aVersion := libusb_get_version();
stbVersion.Panels.Items[0].Text := ' libUSB';
stbVersion.Panels.Items[1].Text := Format('Version %d.%d.%d',
[aVersion^.major, aVersion^.minor, aVersion^.micro]);
stbVersion.Panels.Items[2].Text := aVersion^.describe;
end;
Nach der Diskussion viewtopic.php?t=17423 denke ich, dass es vermutlich an der libusb.pas liegt. Ich denke, ich werde eine neue erstellen, in welcher nur das benötigte enthalten sein wird.