Witam,

Bawię sie własnie biblioteką libusb pod linuksem, napisalem taki prosty kod:

#include <stdio.h>
#include <usb.h>

usb_dev_handle *locate_pen(void);

int main (int argc,char **argv)
{
 struct usb_dev_handle *dev_handle;
	int send_status;
	int open_status1, open_status2, open_status3;
	unsigned char send_data=0xff;
	unsigned char receive_data=0;
	
 usb_init();
 //usb_set_debug(2);
 
 dev_handle=locate_pen();
	if (dev_handle==0) 
	{
		printf("Nie mozna odnalezc urzadzenia\n");
		return (-1);
	} 
	
 printf(" *** Otwieranie urzadzenia ***\n");
 
 open_status1 = usb_set_configuration(dev_handle,1);	
 open_status2 = usb_claim_interface(dev_handle,0);
 open_status3 = usb_set_altinterface(dev_handle,0);

 if(open_status1<0||open_status2<0||open_status3<0)
	{
	 printf("Blad\n\n");
	 return -1;
	}

	
 printf("conf_stat=%d\n",open_status1);	
 printf("claim_stat=%d\n",open_status2);
 printf("alt_stat=%d\n",open_status3);	
	
 printf(" *** Wysylanie danych ***\n");
	
 send_status=usb_bulk_write(dev_handle,4,&send_data,1,500);
 printf("TX stat=%d\n",send_status);
	
 printf(" *** Pobieranie danych ***\n");
 usb_bulk_read(dev_handle,3,&receive_data,1,500);	
 printf("RX stat=%d -> RX char=%d\n",send_status,receive_data);
	
  return 0;	
}


usb_dev_handle *locate_pen(void) 
{
	unsigned char located = 0;
	struct usb_bus *bus;
	struct usb_device *dev;
	usb_dev_handle *device_handle = 0;

 		
	usb_find_busses();
	usb_find_devices();
 
 	for (bus = usb_busses; bus; bus = bus->next)
	{
		for (dev = bus->devices; dev; dev = dev->next)	
		{
			if (dev->descriptor.idProduct == 8552) 
			{	
				located++;
				device_handle = usb_open(dev);
				printf("Znaleziono szukane urzadzenie pod adresem %s \n", dev->filename);
				printf("** Vendor ID 0x0%x **\n",dev->descriptor.idVendor);
				printf("** Product ID 0x0%x **\n",dev->descriptor.idProduct);
			}			
		}	
  }

 if (device_handle==0) return (0);
 else return (device_handle);  	
}

Do testow uzywam pendriva. Wszystko dziala do momentu otwarcia urzadzania (czyli wykrywane jest dobrze, pobieranie info tez dziala).
Ale zawsze open_status1 <0 (pozostale tez).

Otrzymuje taki wynik:

Znaleziono szukane urzadzenie pod adresem 005

  • Vendor ID 0x0ea0 **
  • Product ID 0x02168 **
    *** Otwieranie urzadzenia ***
    Blad

To jakis problem ze sprzetem, czy ja robie cos zle?

[edit]
Moze to cos wiecej pomoze - po wlaczeniu trybu debuggowania komunikaty sa takie:

usb_set_debug: Setting debugging level to 2 (on)
usb_os_find_busses: Found 005
usb_os_find_busses: Found 004
usb_os_find_busses: Found 003
usb_os_find_busses: Found 002
usb_os_find_busses: Found 001
usb_os_find_devices: Found 002 on 005
usb_os_find_devices: Found 001 on 005
error obtaining child information: Inappropriate ioctl for device
usb_os_find_devices: Found 001 on 004
usb_os_find_devices: Found 001 on 003
usb_os_find_devices: Found 001 on 002
usb_os_find_devices: Found 001 on 001
Znaleziono szukane urzadzenie pod adresem 002
** Vendor ID 0x0ea0 **
** Product ID 0x02168 **
 *** Otwieranie urzadzenia ***
Check that you have permissions to write to 005/002 and, if you don't, that you set up hotplug (http://linux-hotplug.sourceforge.net/) correctly.
USB error: could not claim interface 0: Device or resource busy
Nie mozna utworzyc interfejsu
USB error: error sending control message: Broken pipe

Nie mam pod reka niczego innego podpinanego do usb zeby sprawdzic