Question

J'ai une échelle HID USB que je dois aller chercher les rapports de pesée de. Je suis en mesure de le faire sur Linux en lisant 7 octets à la fois de /dev/hidraw#, mais je voudrais obtenir les mêmes informations en utilisant libusb-1.0.

Même quand je reçois des octets non nuls, j'obtiens l'erreur -9: LIBUSB_ERROR_PIPE

Je tente d'utiliser un transfert de contrôle comme ceci:

#define WEIGH_REPORT_SIZE 7

    /*
     * Open a handle to the found scale
     */
    libusb_open(dev, &handle);
#ifdef __linux__
    libusb_detach_kernel_driver(handle, 0);
#endif
    libusb_claim_interface(handle, 0);

    /*
     * Try to transfer data about status
     *
     */
    unsigned char data[WEIGH_REPORT_SIZE];
    unsigned int len = libusb_control_transfer(
        handle,
        LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_CLASS |
            LIBUSB_RECIPIENT_INTERFACE,
        HID_REPORT_GET,
        //wValue => hid report, no report ID
        0x0100,
        0x00,   //windex => interface 0
        data,
        WEIGH_REPORT_SIZE,    //wLength
        10000 //timeout => 10 sec
        );
    int i;
    printf("Got %d bytes from control transfer:\n", len);
    for(i = 0; i < WEIGH_REPORT_SIZE; i++) {
        printf("%x\n", data[i]);
    }
Était-ce utile?

La solution

Un exemple à lire à partir d'un lecteur de carte USB HID en utilisant libusb-gagnant -

http: // rowsandcolumns. blogspot.com/2011/02/read-from-magtek-card-swipe-reader-in.html

Autres conseils

HID utilise le transfert Interrompre AFAIK. Vous devez réécrire votre code pour utiliser ces derniers. Et un coup d'oeil à thouse descripteurs -. Ils vous dire quelle interface utiliser

Cela dit, je pense qu'il est beaucoup plus facile à utiliser / dev / hdiraw ??# puis libusb dans ce cas.

Essayez d'utiliser une autre valeur pour wValue (0x0300, par exemple).

Vérifiez également les paramètres de bmRequestType et bRequest:. bmRequestType doit être égale à 0xA1, bRequest - 0x01

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top