Hi Maria The issue may be that interrupt is not getting clear The USB state is not getting cleared. Please try using usb_clear_halt and it should work.
Thanks Amruth p.v --- On Fri, 9/5/08, Marian Aldenhövel <[EMAIL PROTECTED]> wrote: > From: Marian Aldenhövel <[EMAIL PROTECTED]> > Subject: Re: [libhid-discuss] Still can't interrupt_read() properly > To: "libhid-discuss List" <[email protected]> > Date: Friday, September 5, 2008, 8:18 AM > Hi, > > I have reproduced the problem in a simple testcase based on > libhid_test.c to > make sure that it was not something unrelated in the rest > of my read program. > > The attached simple program sends the same command three > times. The device > acts on it three times, but the results do not come back > the second and third > time. The second and third attempts fail with different > results. > > Ciao, MM > -- > Marian Aldenhövel, Rosenhain 23, 53123 Bonn > http://www.marian-aldenhoevel.de > "I ran some quick calculations on it. He's about > 80% on the right > track. That leaves him only 20% dead when he > crashes." Bob C > #include <hid.h> > #include <stdio.h> > #include <string.h> > #include <unistd.h> /* for getopt() */ > > int main() > { > HIDInterface* hid; > int iface_num = 0; > hid_return ret; > > unsigned short vendor_id = 0x0590; > unsigned short product_id = 0x0034; > > HIDInterfaceMatcher matcher = { vendor_id, product_id, > NULL, NULL, 0 }; > > /* see include/debug.h for possible values */ > hid_set_debug(HID_DEBUG_ALL); > hid_set_debug_stream(stderr); > > /* passed directly to libusb */ > hid_set_usb_debug(1); > > ret = hid_init(); > if (ret != HID_RET_SUCCESS) { > fprintf(stderr, "hid_init failed with return code > %d\n", ret); > return 1; > } > > hid = hid_new_HIDInterface(); > if (hid == 0) { > fprintf(stderr, "hid_new_HIDInterface() failed, > out of memory?\n"); > return 1; > } > > ret = hid_force_open(hid, iface_num, &matcher, 3); > if (ret != HID_RET_SUCCESS) { > fprintf(stderr, "hid_force_open failed with return > code %d\n", ret); > return 1; > } > > ret = hid_write_identification(stdout, hid); > if (ret != HID_RET_SUCCESS) { > fprintf(stderr, "hid_write_identification failed > with return code %d\n", ret); > return 1; > } > > ret = hid_dump_tree(stdout, hid); > if (ret != HID_RET_SUCCESS) { > fprintf(stderr, "hid_dump_tree failed with return > code %d\n", ret); > return 1; > } > > int sendloop; > for (sendloop = 0 ; sendloop < 3 ; sendloop++) { > unsigned char const SEND_PACKET_LEN = 11; > char const PACKET[11] = { 0x02, 0x00, 0x03, 0x43, 0x30, > 0x30, 0x00, 0x00, 0x00, 0x00, 0x00 }; > > const int PATHLEN=3; > const int PATH_IN[3] = { 0xff000001, 0xff000021, > 0xff000121 }; > > ret = hid_set_output_report(hid, PATH_IN, PATHLEN, > PACKET, SEND_PACKET_LEN); > if (ret != HID_RET_SUCCESS) { > fprintf(stderr, "hid_set_output_report failed with > return code %d\n", ret); > } > > const int size = 11; > char buffer[11]; > ret = hid_interrupt_read(hid,0x81,buffer,size,1000); > if (ret != HID_RET_SUCCESS) { > fprintf(stderr, "hid_get_input_report failed with > return code %d\n", ret); > } > > fprintf(stderr, "reply is > [%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d]\n", > > buffer[0],buffer[1],buffer[2],buffer[3],buffer[4],buffer[5], > > buffer[6],buffer[7],buffer[8],buffer[9],buffer[10]); > > } > > ret = hid_close(hid); > if (ret != HID_RET_SUCCESS) { > fprintf(stderr, "hid_close failed with return code > %d\n", ret); > return 1; > } > > hid_delete_HIDInterface(&hid); > > ret = hid_cleanup(); > if (ret != HID_RET_SUCCESS) { > fprintf(stderr, "hid_cleanup failed with return > code %d\n", ret); > return 1; > } > > return 0; > } > _______________________________________________ > libhid-discuss mailing list > [email protected] > http://lists.alioth.debian.org/mailman/listinfo/libhid-discuss _______________________________________________ libhid-discuss mailing list [email protected] http://lists.alioth.debian.org/mailman/listinfo/libhid-discuss

