Hi all,
I'm getting familiar with usb programming.
I can find my device based on a string search, but cannot read it.
My explore() counts the items connected and if one -
and only one - is connected, then opens it.
This works fine, but when I try to read it I get error -16
/* Device or resource busy */
Any ide, please?
Code:
/* main.c */
#include <stdio.h>
#include <string.h>
#include <usb.h>
#include "myusbfunctions.h"
#define BREAK_HERE raise(SIGINT)
char version[] = "This is my string";
struct usb_device *curr_dev;
struct usb_dev_handle *curr_udev;
int timeout = 2200;
#define buflen 64
char buffer[buflen];
int main(void)
{
int i;
i=explore(); /* nr of matches */
if (0==i)
{
printf("No abs chip was found\n");
exit(0);
}
else
{
if (i>1)
{
printf("Confict: more than one chip was found\n");
exit(0);
}
}
printf("%s\n", version);
//BREAK_HERE;
//i = usb_interrupt_read(curr_udev, curr_dev->config->interface->altsetting->endpoint->bEndpointAddress, buffer, curr_dev->config->interface->altsetting->endpoint->wMaxPacketSize, timeout);
i=usb_interrupt_read(curr_udev, 0x81, buffer, 64, 2200);
printf("i=%d\n",i);
usb_close (curr_udev);
return 0;
}
/* eof main.c */
and
Code:
/* myusbfunctions.h */
extern struct usb_device *curr_dev;
extern struct usb_dev_handle *curr_udev;
extern int usb_interrupt_read(usb_dev_handle *dev, int ep, char *bytes, int size, int timeout);
int explore (void)
{
struct usb_bus *bus;
struct usb_device *dev;
extern char version[];
int nr=0 ;
usb_init();
usb_find_busses();
usb_find_devices();
for (bus = usb_busses; bus; bus = bus->next)
{
for (dev = bus->devices; dev; dev = dev->next)
{
int ret;
char string[256];
usb_dev_handle *udev;
udev = usb_open(dev);
if (udev)
{
if (dev->descriptor.iManufacturer)
{
ret = usb_get_string_simple(udev, dev->descriptor.iManufacturer, string, sizeof(string));
}
if (dev->descriptor.iProduct)
{
ret = usb_get_string_simple(udev, dev->descriptor.iProduct, string, sizeof(string));
if (ret > 0)
{
if (0==strcmp(version,string)) /* match */
{
curr_dev = dev; /* copy device */
nr++;
}
}
}
usb_close (udev);
}
}
}
if (nr == 1)
{
curr_udev = usb_open(curr_dev);
}
return nr;
}
/* eof myusbfunctions.h */