#include #include #include #include #include #include typedef enum { PID_UNKNOWN = 0, PID_TIGLUSB = 0xE001, PID_TI89TM = 0xE004, PID_TI84P = 0xE003, PID_TI84P_SE = 0xE008, PID_NSPIRE = 0xE012, } UsbPid; #define VID_TI 0x0451 //static struct usb_device *device = NULL; static struct usb_dev_handle *devh = NULL; static int inEP = 0x81; static int outEP = 0x02; static int open_ti_usb(usb_dev_handle *device) { struct usb_bus *bus; struct usb_device *dev; int j; static int didUsbInit = 0; if(!didUsbInit){ usb_init(); didUsbInit = 1; } usb_find_busses(); usb_find_devices(); j = 0; /* loop taken from testlibusb.c */ for (bus = usb_busses; bus; bus = bus->next) { for (dev = bus->devices; dev; dev = dev->next) { if ((dev->descriptor.idVendor == VID_TI)) { if((dev->descriptor.idProduct == PID_TI84P)||(dev->descriptor.idProduct == PID_TI84P_SE)) { j = (int)device = usb_open(dev); break; } } } } if ((j < 0) || (j == NULL)) { fprintf(stderr, "Could not find/open device\n"); r = j; goto out; } r = usb_claim_interface(device, 0); if (r < 0) { fprintf(stderr, "usb_claim_interface error %s\n", usb_strerror()); goto out; } out: return j; } void close_ti_device(usb_dev_handle *device) { if(device != NULL) { usb_release_interface(device, 0); usb_close((usb_dev_handle *)device); } } static int send_buffer(usb_dev_handle *device, char *buffer, int len){ int bytesSent; ret = usb_bulk_write(device, outEP, buffer, len, 5000); if (ret != len) { fprintf(stderr, "usb_bulk_write (%s).\n", usb_strerror()); return ret; } return 0; } static int recv_buffer(usb_dev_handle *device, char *buffer, int len){ int ret = 0; ret = usb_bulk_read(device, inEP, buffer, len, 5000); if(ret < 0) { fprintf(stderr, "usb_bulk_read (%s).\n", usb_strerror()); return ret; } return 0; }