/* * Send a single command to the RIO Karma and dump the response as ascii. */ #include #include #define RIO_VENDOR 0x045a #define RIO_PROD 0x5210 typedef struct usb_device usb_dev_t; static usb_dev_t *get_device(int vendor, int product) { struct usb_device *device; struct usb_bus *bus; for (bus = usb_busses; bus; bus=bus->next) { for (device = bus->devices; device; device=device->next) { if (device->descriptor.idVendor == vendor && device->descriptor.idProduct == product) { return device; } } } return NULL; } int main(int argc, char **argv) { int seq, cmd; if (argc < 3) { fprintf(stderr, "Usage: %s \n", argv[0]); exit(1); } seq = atoi(argv[1]); cmd = atoi(argv[1]); char riop[] = "RIOP"; char request[40]; char response[512]; usb_init(); usb_find_busses(); usb_find_devices(); usb_dev_t *device; if (!(device = get_device(RIO_VENDOR, RIO_PROD))) { fprintf(stderr, "Could not open device\n"); exit(1); } usb_dev_handle *handle = usb_open(device); if (usb_claim_interface(handle, 0) < 0) { perror("user.c"); exit(1); } usb_resetep(handle, 0x02); usb_resetep(handle, 0x88); memset(request, 0, sizeof(request)); memset(response, 0, sizeof(response)); strcpy (request, riop); request[4] = 0; request[5] = cmd; request[6] = seq; usb_bulk_write(handle, 0x02, request, sizeof(request), 1000); usb_bulk_read(handle, 0x88, response, sizeof(response), 1000); int sent = 0; while (!sent) { memset(request, 0, sizeof(request)); memset(response, 0, sizeof(response)); strcpy (request, riop); request[4] = 0x80; request[5] = 0; request[6] = seq; usb_bulk_write(handle, 0x02, request, sizeof(request), 1000); usb_bulk_read(handle, 0x88, response, sizeof(response), 1000); sent = (response[5] == request[6]); if (!sent) { fprintf(stderr, "."); usleep(10); } else { printf ("\nresult:\n%s\n", &response[7]); } } usb_release_interface(handle, 0); usb_close(handle); }