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