libusb_open - LIBUSB_ERROR_ACCESS

Benutzeravatar
Garfield
Beiträge: 215
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.2 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Garfield »

Wenn es nicht mit der hwdb.bin klappt, kann man die JSON von der Seite https://sebastianlang.net/software/usb-ids-api/ nehmen.
Gruß Garfield

Benutzeravatar
Garfield
Beiträge: 215
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.2 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Garfield »

Die Liste von Sebastian Lang ist kürzer als die von lsusb. lsusb kennt meine laptopinterne Kamera,
Dateianhänge
USB-IDs.zip
(388.17 KiB) 316-mal heruntergeladen
Bildschirmfoto vom 2025-11-17 15-02-55.png
Bildschirmfoto vom 2025-11-17 15-02-55.png (18.53 KiB) 373 mal betrachtet
Bildschirmfoto vom 2025-11-17 14-59-48.png
Bildschirmfoto vom 2025-11-17 14-59-48.png (18.27 KiB) 373 mal betrachtet
Gruß Garfield

Benutzeravatar
Garfield
Beiträge: 215
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.2 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Garfield »

Damit schliesse ich mit dem Thema vorerst ab.
Dateianhänge
LibUsb.zip
(361.36 KiB) 106-mal heruntergeladen
Bildschirmfoto vom 2025-11-19 21-11-52.png
Bildschirmfoto vom 2025-11-19 21-11-52.png (40.67 KiB) 272 mal betrachtet
Gruß Garfield

Benutzeravatar
Garfield
Beiträge: 215
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.2 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Garfield »

Irgendwie lässt es mich doch nicht in Ruhe. Auf https://github.com/hansiglaser/pas-libu ... libusb-1.0 gibt es ein paar Consolentestprogramme, von denen bei mir nur eines funktioniert:
.../pas-libusb-libusb-1.0/src/examples$ ./test1library
Using libusb(x) v1.0.27.11882
Found 4 devices:
Bus 2 Device 1: ID 1D6B:0003, port: 0, Speed: unknown (5)
Bus 1 Device 2: ID 04F2:B685, port: 8, port path from HCD: 0, Speed: 480 Mbit/s (USB HighSpeed)
Bus 1 Device 3: ID 8087:0029, port: 14, port path from HCD: 0, Speed: 12 Mbit/s (USB FullSpeed)
Bus 1 Device 1: ID 1D6B:0002, port: 0, Speed: 480 Mbit/s (USB HighSpeed)
Das GUI-Example funktioniert auch:
Dateianhänge
Bildschirmfoto vom 2025-11-25 08-44-58.png
Bildschirmfoto vom 2025-11-25 08-44-58.png (46.84 KiB) 161 mal betrachtet
Gruß Garfield

Benutzeravatar
AlterPascaler
Beiträge: 91
Registriert: Mo 26. Jun 2023, 18:56
OS, Lazarus, FPC: Linux, Lazarus, Free Pascal
CPU-Target: xxBit
Wohnort: Deutschland, NRW

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von AlterPascaler »

Hallo,
vor langer Zeit habe ich mich auch mit LibUsb unter Linux beschäftigt. Damit du auf dein Usb Device im User Mode zugreifen kannst, kannst du eine UDEV Rule anlegen.

Hier https://gitlab.com/FpTuxe/tblibusb findest du den Link zu meiner Lib. Unter "examples" findest du zwei Beispiele die Mouse Events anzeigen. Aber Achtung! Verwende dafür eine zweite Mouse, damit du dein LapTop noch bedienen kannst.

Die Lib habe ich bist Heute noch im Einsatz.

Aber ich muss dich warnen, USB ist viel komplizierten für den Anwender als Netzwerk oder RS232. Mal schnell ist nicht!
Was hast du den vor?

VG
AlterPascaler
Viele Grüße
AlterPascaler

Benutzeravatar
Garfield
Beiträge: 215
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 24.04 LTS (Laz 4.2 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Garfield »

Vielen Dank.

Im Moment möchte ich auf das An- und Abstecken eines USB-Scanners reagieren und den Scanner erkennen.
Gruß Garfield

Mathias
Beiträge: 7133
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: libusb_open - LIBUSB_ERROR_ACCESS

Beitrag von Mathias »

Garfield hat geschrieben: Fr 28. Nov 2025, 23:20 Vielen Dank.

Im Moment möchte ich auf das An- und Abstecken eines USB-Scanners reagieren und den Scanner erkennen.
Ich habe mal kurz die KI gefragt, und schon kam ein funktionierendes Programm:

Code: Alles auswählen

// gcc main.c -o main -lusb-1.0

#include <libusb-1.0/libusb.h>
#include <stdio.h>

static int LIBUSB_CALL hotplug_callback(struct libusb_context *ctx, struct libusb_device *dev,
                                       libusb_hotplug_event event, void *user_data) {
    struct libusb_device_descriptor desc;
    libusb_get_device_descriptor(dev, &desc);

    if (event == LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED) {
        printf("USB Gerät angeschlossen: VID=0x%04x, PID=0x%04x\n", desc.idVendor, desc.idProduct);
    } else if (event == LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT) {
        printf("USB Gerät entfernt: VID=0x%04x, PID=0x%04x\n", desc.idVendor, desc.idProduct);
    }
    return 0;
}

int main() {
    libusb_context *ctx = NULL;
    int rc;

    rc = libusb_init(&ctx);
    if (rc < 0) {
        fprintf(stderr, "libusb Init Fehler: %d\n", rc);
        return 1;
    }

    if (!libusb_has_capability(LIBUSB_CAP_HAS_HOTPLUG)) {
        fprintf(stderr, "Hotplug wird von dieser libusb-Version/Plattform nicht unterstützt.\n");
        libusb_exit(ctx);
        return 1;
    }

    libusb_hotplug_callback_handle handle;
    rc = libusb_hotplug_register_callback(ctx,
                                          LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED | LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT,
                                          0,
                                          LIBUSB_HOTPLUG_MATCH_ANY,
                                          LIBUSB_HOTPLUG_MATCH_ANY,
                                          LIBUSB_HOTPLUG_MATCH_ANY,
                                          hotplug_callback,
                                          NULL,
                                          &handle);
    if (rc != LIBUSB_SUCCESS) {
        fprintf(stderr, "Fehler beim Registrieren des Callbacks: %d\n", rc);
        libusb_exit(ctx);
        return 1;
    }

    printf("Warte auf USB Events... (Strg+C zum Beenden)\n");
    while (1) {
        libusb_handle_events_completed(ctx, NULL);
    }

    libusb_hotplug_deregister_callback(ctx, handle);
    libusb_exit(ctx);
    return 0;
}
Ausgabe bei Veränderung:

Code: Alles auswählen

./main 
Warte auf USB Events... (Strg+C zum Beenden)
USB Gerät entfernt: VID=0x1902, PID=0x8301
USB Gerät angeschlossen: VID=0x1902, PID=0x8301
USB Gerät entfernt: VID=0x1902, PID=0x8301
USB Gerät entfernt: VID=0x0409, PID=0x005a
USB Gerät angeschlossen: VID=0x0409, PID=0x005a
USB Gerät angeschlossen: VID=0x1902, PID=0x8301
Die Doppelereignisse kamen, als ich direkt ein Hub ein und aus steckte.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten