2013-07-03 3 views
2

J'essaie un échantillon C avec libusb et les choses travaillaient bien jusqu'au point où je suis en train de faire ce qui suit:libusb semi-fonctionnel, mais libusb_device_descriptor non déclaré?

libusb_device_descriptor descriptor; 
int result = libusb_get_device_descriptor(usb_device, &descriptor); 

Le compilateur me dit, que certains éléments définis dans le même en-tête libusb.h, comme d'autres structures libusb que j'utilise, n'est pas déclaré. WTH?

Voici le code complet:

#include <stdio.h> 
#include <stdlib.h> 
#include <libusb.h> 

void printdev(libusb_device *usb_device); 

/** 
* main 
*/ 
int main(void) { 
    puts("USB Test v0.0.1"); 

    libusb_device **usb_devices; 
    libusb_context *usb_context = NULL; 
    int result; 
    result = libusb_init(&usb_context); 
    ssize_t device_count; 

    if (result < 0) { 
     puts("USB initialization error!"); 
     return EXIT_FAILURE; 
    } 

    libusb_set_debug(usb_context, 1); 
    device_count = libusb_get_device_list(usb_context, &usb_devices); 

    if (device_count < 0) { 
     puts("Unable to get USB device list!"); 
     return EXIT_FAILURE; 
    } 

    char message[24]; 
    sprintf(message, "%d USB Devices found", (int)device_count); 
    puts(message); 

    ssize_t i; 
    for (i = 0; i < device_count; i++) { 

    } 

    libusb_free_device_list(usb_devices, 1); 
    libusb_exit(usb_context); 

    return EXIT_SUCCESS; 
} 

/** 
* 
*/ 
void printdev(libusb_device *usb_device) 
{ 
    libusb_device_descriptor descriptor; 
    int result = libusb_get_device_descriptor(usb_device, &descriptor); 

    if (result < 0) { 
     puts("Failed to get device descriptor"); 
     return; 
    } 
} 

Si je laisse/commenter la fonction printdev, le code compile et main() fonctionne parfaitement. Mais pourquoi diable les structs sont-ils utilisés dans main, comme libusb_device et libusb_context définis, mais libusb_device_descriptor ne l'est pas?

Voici mon sortie du compilateur:

23:18:07 **** Incremental Build of configuration debug for project usb_test **** 
make all 
Building file: ../src/usb_test.c 
Invoking: GCC C Compiler 
gcc -I/usr/local/Cellar/libusb/1.0.9/include/libusb-1.0 -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/usb_test.d" -MT"src/usb_test.d" -o "src/usb_test.o" "../src/usb_test.c" 
../src/usb_test.c: In function 'printdev': 
../src/usb_test.c:52: error: 'libusb_device_descriptor' undeclared (first use in this function) 
../src/usb_test.c:52: error: (Each undeclared identifier is reported only once 
../src/usb_test.c:52: error: for each function it appears in.) 
../src/usb_test.c:52: error: expected ';' before 'descriptor' 
../src/usb_test.c:53: error: 'descriptor' undeclared (first use in this function) 
make: *** [src/usb_test.o] Error 1 

23:18:07 Build Finished (took 73ms) 

Répondre

4

J'ai étudié la Libusb.h ainsi, et le libusb_config_descriptor est type défini, vous donc pas taper struct avant libusb_config_descriptor.

+0

Triés, merci ... mon C a rouillé et a été recouvert de balanes ... –

+0

Heureux d'être d'un peu d'aide. –

2

Il n'y a pas de type libusb_device_descriptor dans libusb.h.

Il y a cependant un struct libusb_device_descriptor