From 6e9c41a892ed0e0da326e0278b3221ce3f5713b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Mon, 6 Oct 2014 14:00:40 +0200 Subject: Initial import of sane-backends version 1.0.24-1.2 --- backend/xerox_mfp-usb.c | 112 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 backend/xerox_mfp-usb.c (limited to 'backend/xerox_mfp-usb.c') diff --git a/backend/xerox_mfp-usb.c b/backend/xerox_mfp-usb.c new file mode 100644 index 0000000..b9b56d8 --- /dev/null +++ b/backend/xerox_mfp-usb.c @@ -0,0 +1,112 @@ +/* + * SANE backend for Xerox Phaser 3200MFP + * Copyright 2008 ABC + * + * This program is licensed under GPL + SANE exception. + * More info at http://www.sane-project.org/license.html + */ + +#undef BACKEND_NAME +#define BACKEND_NAME xerox_mfp +#define DEBUG_DECLARE_ONLY +#define DEBUG_NOT_STATIC +#include "sane/config.h" +#include "sane/saneopts.h" +#include "sane/sanei_config.h" +#include "sane/sanei_backend.h" +#include "sane/sanei_debug.h" +#include "sane/sanei_usb.h" +#include "xerox_mfp.h" + + +extern int sanei_debug_xerox_mfp; + +int +usb_dev_request (struct device *dev, + SANE_Byte *cmd, size_t cmdlen, + SANE_Byte *resp, size_t *resplen) +{ + SANE_Status status; + size_t len = cmdlen; + + if (cmd && cmdlen) { + status = sanei_usb_write_bulk (dev->dn, cmd, &cmdlen); + if (status != SANE_STATUS_GOOD) { + DBG (1, "%s: sanei_usb_write_bulk: %s\n", __FUNCTION__, + sane_strstatus (status)); + return SANE_STATUS_IO_ERROR; + } + + if (cmdlen != len) { + DBG (1, "%s: sanei_usb_write_bulk: wanted %lu bytes, wrote %lu bytes\n", + __FUNCTION__, (size_t)len, (size_t)cmdlen); + return SANE_STATUS_IO_ERROR; + } + } + + if (resp && resplen) { + status = sanei_usb_read_bulk (dev->dn, resp, resplen); + if (status != SANE_STATUS_GOOD) { + DBG (1, "%s: sanei_usb_read_bulk: %s\n", __FUNCTION__, + sane_strstatus (status)); + return SANE_STATUS_IO_ERROR; + } + } + + return SANE_STATUS_GOOD; +} + + +SANE_Status +usb_dev_open (struct device *dev) +{ + SANE_Status status; + + DBG (3, "%s: open %p\n", __FUNCTION__, (void *)dev); + status = sanei_usb_open (dev->sane.name, &dev->dn); + if (status != SANE_STATUS_GOOD) { + DBG (1, "%s: sanei_usb_open(%s): %s\n", __FUNCTION__, + dev->sane.name, sane_strstatus (status)); + dev->dn = -1; + return status; + } + sanei_usb_clear_halt (dev->dn); + return SANE_STATUS_GOOD; +} + +void +usb_dev_close (struct device *dev) +{ + if (!dev) + return; + DBG (3, "%s: closing dev %p\n", __FUNCTION__, (void *)dev); + + /* finish all operations */ + if (dev->scanning) { + dev->cancel = 1; + /* flush READ_IMAGE data */ + if (dev->reading) + sane_read(dev, NULL, 1, NULL); + /* send cancel if not sent before */ + if (dev->state != SANE_STATUS_CANCELLED) + ret_cancel(dev, 0); + } + + sanei_usb_clear_halt (dev->dn); /* unstall for next users */ + sanei_usb_close (dev->dn); + dev->dn = -1; +} + + +/* SANE API ignores return code of this callback */ +SANE_Status +usb_configure_device (const char *devname, SANE_Status (*attach) (const char *dev)) +{ + sanei_usb_set_timeout (1000); + sanei_usb_attach_matching_devices (devname, attach); + sanei_usb_set_timeout (30000); + return SANE_STATUS_GOOD; +} + + +/* xerox_mfp-usb.c */ -- cgit v1.2.3