int main() { int r; // return values r = libusb_init(NULL); if (r < 0) error("ERROR: failed to initialize libusb (r = %d)\n", r); libusb_set_debug(NULL, 3); libusb_device **list; ssize_t cnt = libusb_get_device_list(NULL, &list); if (cnt < 0) error("ERROR: failed to get device list (cnt = %d)\n", cnt); for (ssize_t i = 0; i < cnt; i++) { libusb_device *dev = list[i]; struct libusb_device_descriptor desc; int r = libusb_get_device_descriptor(dev, &desc); if (r < 0) error("ERROR: failed to get device descriptor (r = %d)\n", r); if (desc.idVendor == pololuVendorID) { for (int j = 0; j < NUM_PRODUCT_IDS && smc_count < 2; j++) { if (desc.idProduct == smcProductIDs[j]) { libusb_device_handle *handle; r = libusb_open(dev, &handle); if (r < 0) error("ERROR: failed to open device (r = %d)\n", r); smc_list[smc_count] = handle; smc_count++; char buf[100]; r = libusb_get_string_descriptor_ascii(handle, desc.iSerialNumber, buf, sizeof(buf)); if (r < 0) error("ERROR: failed to get serial number string from device (r = %d)\n", r); switch(desc.idProduct) { case 0x98: printf("18v15"); break; case 0x9A: printf("24v12"); break; case 0x9C: printf("18v25"); break; case 0x9E: printf("24v23"); break; case 0xA1: printf("18v7"); break; } printf(" #%s\n", buf); break; } } } } if (smc_count == 1) printf("1 Simple Motor Controller found.\n", smc_count); else printf("%d Simple Motor Controllers found.\n", smc_count); printf("Sending ExitSafeStart...\n"); for (int i = 0; i < smc_count; i++) { r = libusb_control_transfer(smc_list[i], 0x40, ExitSafeStart, 0, 0, NULL, 0, 5000); if (r < 0) error("ERROR: failed to exit safe start (r = %d)\n", r); } set_speeds(3200, 3200); sleep(4); set_speeds(0, 0); /*char c; while (1) { scanf("%c", &c); fflush(stdin); printf("input: %c\n", c); switch (c) { case 'w': set_speeds(3200, 3200); break; case 'a': set_speeds(-3200, 3200); break; case 's': set_speeds(-3200, -3200); break; case 'd': set_speeds(3200, -3200); break; default: set_speeds(0, 0); } usleep(500000); }*/ for (int i = 0; i < smc_count; i++) libusb_close(smc_list[i]); libusb_free_device_list(list, 1); libusb_exit(NULL); return 0; }
int main() { ROBOT = CREATE_ROBOT; create_connect(); set_speeds(); create_full(); // test_modest_forward_backward(); test_modest_left_right(); return SUCCESS; }