#include #include #include #include //--------------- Zugriff auf die Schnittstelle -------------------------- int claim_interface(libusb_device_handle *handle) { int claim, kernel; kernel = libusb_kernel_driver_active(handle,0); if(kernel == 0) printf("Kernel hat kein Zugrfiff auf die Schnittstelle\n"); else if(kernel ==1) { printf("Kernel hat Zugriff auf die Schnittstelle\n"); kernel = libusb_detach_kernel_driver(handle,0); if(kernel != 0) { fprintf(stderr,"Fehler beim Zugriffsentzug der Schnittstelle beim Kernel\n"); return EXIT_FAILURE; } printf("Kernel hat kein Zugrfiff auf die Schnittstelle\n"); } else fprintf(stderr,"Fehler\n"); claim = libusb_claim_interface(handle,0); if(claim != 0) { printf("Fehler beim Zugriff auf die Schnittstelle %d\n",claim); return EXIT_FAILURE; } printf("Zugriff auf Schnitstelle erfolgreich!\n"); return EXIT_SUCCESS; } //------------------- Schnittstelle freigeben ---------------------------------- int release_interface(libusb_device_handle *handle) { int claim; claim = libusb_release_interface(handle,0); if(claim != 0) { fprintf(stderr,"Fehler beim Deaktivieren der Schnittstelle\n"); return EXIT_FAILURE; } printf("Zugriff wurde beendet!\n"); return EXIT_SUCCESS; } //----------------- Hauptschleife ----------------------------------------- int main(void) { libusb_device *device; libusb_device_handle *handle; uint8_t status; int actual; unsigned char data[]="Hallo",buffer[255]; libusb_init(NULL); libusb_set_debug(NULL,3); handle = libusb_open_device_with_vid_pid (NULL, 0x10c4, 0xea60); if(handle == NULL) { fprintf(stderr,"Kann Handle nicht öffnen\n"); return EXIT_FAILURE; } device = libusb_get_device (handle); if(device == NULL) { fprintf(stderr,"Kann Device nicht öffnen\n"); return EXIT_FAILURE; } status = claim_interface(handle); if(status != 0) return EXIT_FAILURE; status = libusb_bulk_transfer(handle,0x01,data,sizeof(data),&actual,5000); printf("%d Bytes gesendet\n",actual); if(status != 0) { fprintf(stderr,"Fehler beim Senden!\n"); perror("Fehler"); return EXIT_FAILURE; } status = libusb_bulk_transfer(handle,0x81,buffer,sizeof(buffer),&actual,5000); printf("%d Bytes empfangen\n",actual); if(status != 0) { fprintf(stderr,"Fehler beim Empfangen!\n"); perror("Fehler"); return EXIT_FAILURE; } status = release_interface(handle); if(status != 0) return EXIT_FAILURE; libusb_close(handle); libusb_exit(NULL); return EXIT_SUCCESS; }