/* Attach USB scanner */ static SANE_Status attach_scanner_usb (const char *device_name) { PKV_DEV dev; SANE_Word vendor, product; DBG (DBG_error, "attaching USB scanner %s\n", device_name); sanei_usb_get_vendor_product_byname(device_name,&vendor,&product); dev = (PKV_DEV) malloc (sizeof (KV_DEV)); if (dev == NULL) return SANE_STATUS_NO_MEM; memset (dev, 0, sizeof (KV_DEV)); dev->bus_mode = KV_USB_BUS; dev->usb_fd = -1; dev->scsi_fd = -1; strcpy (dev->device_name, device_name); dev->buffer0 = (unsigned char *) malloc (SCSI_BUFFER_SIZE + 12); dev->buffer = dev->buffer0 + 12; if (dev->buffer0 == NULL) { free (dev); return SANE_STATUS_NO_MEM; } dev->scsi_type = 6; strcpy (dev->scsi_type_str, "ADF Scanner"); strcpy (dev->scsi_vendor, "Panasonic"); strcpy (dev->scsi_product, product == (int) KV_S1020C ? "KV-S1020C" : product == (int) KV_S1025C ? "KV-S1025C" : product == (int) KV_S1045C ? "KV-S1045C" : "KV-S10xxC"); strcpy (dev->scsi_version, "1.00"); /* Set SANE_Device */ dev->sane.name = dev->device_name; dev->sane.vendor = dev->scsi_vendor; dev->sane.model = dev->scsi_product; dev->sane.type = dev->scsi_type_str; /* Add into g_devices chain */ dev->next = g_devices; g_devices = dev; return SANE_STATUS_GOOD; }
/** get id for all devices names * loop on all existing devices and get vendor * and product id by name. * @param expected count * @return 1 on success, else 0 */ static int test_vendor_by_devname (void) { int i; SANE_Status status; SANE_Word vendor, product; device_list_type mock; /* loop on detected devices and open them */ for (i = 0; i < device_number; i++) { if (devices[i].missing == 0 && devices[i].devname != NULL) { /* get device id */ status = sanei_usb_get_vendor_product_byname (devices[i].devname, &vendor, &product); if (status != SANE_STATUS_GOOD) { printf ("ERROR: couldn't query device %s!\n", devices[i].devname); return 0; } if (vendor == 0 || product == 0) { printf ("ERROR: incomplete device id for %s!\n", devices[i].devname); return 0; } printf ("%s is %04x:%04x\n", devices[i].devname, vendor, product); } } /* add mock device */ create_mock_device ("mock", &mock); store_device (mock); status = sanei_usb_get_vendor_product_byname ("mock", &vendor, &product); if (status != SANE_STATUS_GOOD) { printf ("ERROR: getting vendor for mock devname!\n"); return 0; } if (vendor != mock.vendor || product != mock.product) { printf ("ERROR: wrong vendor/product for mock devname!\n"); return 0; } /* remove mock device */ device_number--; free (devices[device_number].devname); devices[device_number].devname = NULL; /* try go get id for an invalid devname */ status = sanei_usb_get_vendor_product_byname ("invalid devname", &vendor, &product); if (status == SANE_STATUS_GOOD) { printf ("ERROR: unexpected success getting id for invalid devname!\n"); return 0; } printf ("\n"); return 1; }