From: Jacob Z. <ja...@ya...> - 2006-04-25 17:11:29
|
Hi, I've been using libusb-0.1.12 (Linux RedHat 7.3) to read mouse movement. The following test code can read the movement but the system keeps losing memory until it runs out of memory & reboots. The 'top' program shows that my user program 'usbtest' does not grow in memory; but the System memory used, grows in size & the system memory free decreases rapidly. Any explanation as to why the system's losing memory? Am i missing some type of release() memory call here? The same symptoms occured when using the default libusb that shipped with RH 7.3 & libusb-0.1.12. Any tips would be much appreciated. // Compiled with //g++ usbtest.c -I/usb/libusb-0.1.12 -L/usb/libusb-0.1.12/.libs -lusb -lusbpp -o usbtest #include <stdio.h> #include <string.h> #include <usb.h> #include <assert.h> usb_dev_handle *locate_xsv(void); #define SZ 512 int main (int argc,char **argv) { struct usb_dev_handle *xsv_handle; struct usb_device *xsv_device; int open_status; int curX=0, curY=0, curZ=0, lastX, lastY, lastZ; char buf[SZ]=""; memset(buf,0, SZ ); usb_init(); usb_set_debug(2); if ((xsv_handle = locate_xsv())==0) { printf("Could not open the XSV device\n"); return (-1); } open_status = usb_set_configuration(xsv_handle,1); printf("conf_stat=%d\n",open_status); open_status = usb_claim_interface(xsv_handle,0); printf("claim_stat=%d\n",open_status); open_status = usb_set_altinterface(xsv_handle,0); printf("alt_stat=%d\n",open_status); int bytes=0; unsigned char ch, byte1=0, byte2; bool Xmov, Ymov,Zmov; unsigned int state =0, evttype=0; while(1) { bytes = usb_bulk_read(xsv_handle, 0x81 ,buf,8,5); //mouse // bytes = usb_interrupt_read(xsv_handle, 0x81 ,buf,8,500); //mouse //assert(0); // byte 2 : >0 == DOWN, <0 ==UP // byte 1 : >0 == RIGHT, <0 ==LEFT if(bytes >0) { /*printf("bytes(%d)\n",bytes); for(int i=0;i<25;i++) { ch = buf[i]; printf(" %x ", ch); } printf("\n");*/ if (buf[2]>0) { printf("qDOWN\n"); }else if (buf[2]<0) { printf("qUP\n"); } if (buf[1]>0) { printf("qRIGHT\n"); }else if (buf[1]<0) { printf("qqqqqLEFT\n"); } } } } usb_dev_handle *locate_xsv(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.idVendor == 0x09da /*mouse*/) // if (dev->descriptor.idVendor == 0x04e7 /*elo*/) { located++; device_handle = usb_open(dev); printf(" Device Found @ Address %s \n", dev->filename); printf(" Vendor ID 0x0%x\n",dev->descriptor.idVendor); printf(" Product ID 0x0%x\n",dev->descriptor.idProduct); } else printf("** usb device %s found **\n", dev->filename); } } if (device_handle==0) return (0); else return (device_handle); } __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com |