kopia lustrzana https://gitlab.com/sane-project/backends
Merge branch 'master' of ssh://kitno-guest@git.debian.org/git/sane/sane-backends
commit
4a91ba9e8f
23
ChangeLog
23
ChangeLog
|
@ -1,3 +1,26 @@
|
|||
2009-06-22 Nicolas Martin <nicols-guest at users.alioth.debian.org>
|
||||
* backend/pixma_imageclass.c, backend/pixma_mp730.c, doc/descriptions/pixma.desc:
|
||||
- Added duplex ADF scan for Canon ImageCLASS D480.
|
||||
- Fixed ImageCLASS MF5770 grayscale scanning.
|
||||
- Moved ImageCLASS MF5730 and MF5750 to pixma_mp730.c (similarity with MF5770).
|
||||
- Updated documentation.
|
||||
|
||||
2009-06-20 Mattias Ellert <mattias.ellert@fysast.uu.se>
|
||||
* po/sane-backends.sv.po: Updated Swedish translations.
|
||||
* backend/hp5400_internal.h, backend/hp5590_cmds.c,
|
||||
backend/hp5590_low.c, backend/net.c: Add missing includes.
|
||||
|
||||
2009-06-20 Nicolas Martin <nicols-guest at users.alioth.debian.org>
|
||||
* backend/pixma_imageclass.c, doc/descriptions/pixma.desc, doc/sane-pixma.man:
|
||||
Added Canon imageCLASS D480 support to the pixma backend.
|
||||
|
||||
2009-06-17 Stéphane Voltz <stef.dev at free.fr>
|
||||
* backend/lexmark_low.c: f3/f4 registers assignement cleanup
|
||||
|
||||
2009-06-18 Nicolas Martin <nicols-guest at users.alioth.debian.org>
|
||||
* backend/pixma_mp150.c:
|
||||
Fixed typo in pixma backend for MX320 declaration.
|
||||
|
||||
2009-06-17 m. allan noah <kitno455 at gmail dot com>
|
||||
* backend/canon_dr.[ch], backend/canon_dr-cmd.h: backend v30
|
||||
- add fine cal support for machines with internal buffer (2050/2080)
|
||||
|
|
|
@ -456,13 +456,13 @@ libsane_epson_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
|
|||
libsane_epson_la_LIBADD = $(COMMON_LIBS) libepson.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo ../sanei/sanei_config2.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_scsi.lo ../sanei/sanei_pio.lo $(SCSI_LIBS) $(USB_LIBS)
|
||||
EXTRA_DIST += epson.conf.in
|
||||
|
||||
libepson2_la_SOURCES = epson2.c epson2.h epson2_scsi.c epson2_scsi.h epson_usb.c epson2_net.c epson2_net.h epson2-io.c epson2-io.h epson2-commands.c epson2-commands.h epson2-ops.c epson2-ops.h
|
||||
libepson2_la_SOURCES = epson2.c epson2.h epson2_scsi.c epson2_scsi.h epson_usb.c epson2_net.c epson2_net.h epson2-io.c epson2-io.h epson2-commands.c epson2-commands.h epson2-ops.c epson2-ops.h epson2-cct.c
|
||||
libepson2_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=epson2
|
||||
|
||||
nodist_libsane_epson2_la_SOURCES = epson2-s.c
|
||||
libsane_epson2_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=epson2
|
||||
libsane_epson2_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
|
||||
libsane_epson2_la_LIBADD = $(COMMON_LIBS) libepson2.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo ../sanei/sanei_config2.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_scsi.lo ../sanei/sanei_pio.lo ../sanei/sanei_tcp.lo ../sanei/sanei_udp.lo $(SCSI_LIBS) $(USB_LIBS) $(SOCKET_LIBS)
|
||||
libsane_epson2_la_LIBADD = $(COMMON_LIBS) libepson2.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo ../sanei/sanei_config2.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_scsi.lo ../sanei/sanei_pio.lo ../sanei/sanei_tcp.lo ../sanei/sanei_udp.lo $(SCSI_LIBS) $(USB_LIBS) $(SOCKET_LIBS) $(MATH_LIB)
|
||||
EXTRA_DIST += epson2.conf.in
|
||||
|
||||
libfujitsu_la_SOURCES = fujitsu.c fujitsu.h fujitsu-scsi.h
|
||||
|
|
|
@ -148,7 +148,8 @@ libepson2_la_LIBADD =
|
|||
am_libepson2_la_OBJECTS = libepson2_la-epson2.lo \
|
||||
libepson2_la-epson2_scsi.lo libepson2_la-epson_usb.lo \
|
||||
libepson2_la-epson2_net.lo libepson2_la-epson2-io.lo \
|
||||
libepson2_la-epson2-commands.lo libepson2_la-epson2-ops.lo
|
||||
libepson2_la-epson2-commands.lo libepson2_la-epson2-ops.lo \
|
||||
libepson2_la-epson2-cct.lo
|
||||
libepson2_la_OBJECTS = $(am_libepson2_la_OBJECTS)
|
||||
libfujitsu_la_LIBADD =
|
||||
am_libfujitsu_la_OBJECTS = libfujitsu_la-fujitsu.lo
|
||||
|
@ -529,7 +530,8 @@ libsane_epson2_la_DEPENDENCIES = $(COMMON_LIBS) libepson2.la \
|
|||
sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_scsi.lo \
|
||||
../sanei/sanei_pio.lo ../sanei/sanei_tcp.lo \
|
||||
../sanei/sanei_udp.lo $(am__DEPENDENCIES_1) \
|
||||
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
|
||||
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
|
||||
$(am__DEPENDENCIES_1)
|
||||
nodist_libsane_epson2_la_OBJECTS = libsane_epson2_la-epson2-s.lo
|
||||
libsane_epson2_la_OBJECTS = $(nodist_libsane_epson2_la_OBJECTS)
|
||||
libsane_epson2_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
|
||||
|
@ -1883,12 +1885,12 @@ nodist_libsane_epson_la_SOURCES = epson-s.c
|
|||
libsane_epson_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=epson
|
||||
libsane_epson_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
|
||||
libsane_epson_la_LIBADD = $(COMMON_LIBS) libepson.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo ../sanei/sanei_config2.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_scsi.lo ../sanei/sanei_pio.lo $(SCSI_LIBS) $(USB_LIBS)
|
||||
libepson2_la_SOURCES = epson2.c epson2.h epson2_scsi.c epson2_scsi.h epson_usb.c epson2_net.c epson2_net.h epson2-io.c epson2-io.h epson2-commands.c epson2-commands.h epson2-ops.c epson2-ops.h
|
||||
libepson2_la_SOURCES = epson2.c epson2.h epson2_scsi.c epson2_scsi.h epson_usb.c epson2_net.c epson2_net.h epson2-io.c epson2-io.h epson2-commands.c epson2-commands.h epson2-ops.c epson2-ops.h epson2-cct.c
|
||||
libepson2_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=epson2
|
||||
nodist_libsane_epson2_la_SOURCES = epson2-s.c
|
||||
libsane_epson2_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=epson2
|
||||
libsane_epson2_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
|
||||
libsane_epson2_la_LIBADD = $(COMMON_LIBS) libepson2.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo ../sanei/sanei_config2.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_scsi.lo ../sanei/sanei_pio.lo ../sanei/sanei_tcp.lo ../sanei/sanei_udp.lo $(SCSI_LIBS) $(USB_LIBS) $(SOCKET_LIBS)
|
||||
libsane_epson2_la_LIBADD = $(COMMON_LIBS) libepson2.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo ../sanei/sanei_config2.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_scsi.lo ../sanei/sanei_pio.lo ../sanei/sanei_tcp.lo ../sanei/sanei_udp.lo $(SCSI_LIBS) $(USB_LIBS) $(SOCKET_LIBS) $(MATH_LIB)
|
||||
libfujitsu_la_SOURCES = fujitsu.c fujitsu.h fujitsu-scsi.h
|
||||
libfujitsu_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=fujitsu
|
||||
nodist_libsane_fujitsu_la_SOURCES = fujitsu-s.c
|
||||
|
@ -2724,6 +2726,7 @@ distclean-compile:
|
|||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdll_la-dll.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdmc_la-dmc.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libepjitsu_la-epjitsu.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libepson2_la-epson2-cct.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libepson2_la-epson2-commands.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libepson2_la-epson2-io.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libepson2_la-epson2-ops.Plo@am__quote@
|
||||
|
@ -3160,6 +3163,13 @@ libepson2_la-epson2-ops.lo: epson2-ops.c
|
|||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libepson2_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libepson2_la-epson2-ops.lo `test -f 'epson2-ops.c' || echo '$(srcdir)/'`epson2-ops.c
|
||||
|
||||
libepson2_la-epson2-cct.lo: epson2-cct.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libepson2_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libepson2_la-epson2-cct.lo -MD -MP -MF $(DEPDIR)/libepson2_la-epson2-cct.Tpo -c -o libepson2_la-epson2-cct.lo `test -f 'epson2-cct.c' || echo '$(srcdir)/'`epson2-cct.c
|
||||
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libepson2_la-epson2-cct.Tpo $(DEPDIR)/libepson2_la-epson2-cct.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='epson2-cct.c' object='libepson2_la-epson2-cct.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libepson2_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libepson2_la-epson2-cct.lo `test -f 'epson2-cct.c' || echo '$(srcdir)/'`epson2-cct.c
|
||||
|
||||
libfujitsu_la-fujitsu.lo: fujitsu.c
|
||||
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libfujitsu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libfujitsu_la-fujitsu.lo -MD -MP -MF $(DEPDIR)/libfujitsu_la-fujitsu.Tpo -c -o libfujitsu_la-fujitsu.lo `test -f 'fujitsu.c' || echo '$(srcdir)/'`fujitsu.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libfujitsu_la-fujitsu.Tpo $(DEPDIR)/libfujitsu_la-fujitsu.Plo
|
||||
|
|
|
@ -81,7 +81,6 @@
|
|||
#include "abaton.h"
|
||||
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
|
||||
static int num_devices;
|
||||
static Abaton_Device *first_dev;
|
||||
|
|
|
@ -47,7 +47,6 @@
|
|||
# define PATH_MAX 1024
|
||||
#endif
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
|
||||
#undef Byte
|
||||
#define Byte SANE_Byte
|
||||
|
|
|
@ -135,7 +135,6 @@
|
|||
|
||||
#include "apple.h"
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
|
||||
static int num_devices;
|
||||
static Apple_Device *first_dev;
|
||||
|
|
|
@ -85,7 +85,6 @@
|
|||
#define ARTEC_SUB 16
|
||||
#define ARTEC_LAST_MOD "05/26/2001 17:28 EST"
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
|
||||
#ifndef PATH_MAX
|
||||
#define PATH_MAX 1024
|
||||
|
|
|
@ -36,7 +36,6 @@ typedef SANE_Byte Artec48U_Packet[ARTEC48U_PACKET_SIZE];
|
|||
#define HIBYTE(w) ((SANE_Byte)(((SANE_Word)(w) >> 8) & 0xFF))
|
||||
#define LOBYTE(w) ((SANE_Byte)(w))
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
|
||||
#define CHECK_DEV_NOT_NULL(dev, func_name) \
|
||||
do { \
|
||||
|
|
|
@ -118,7 +118,6 @@ typedef struct AS6E_Scan
|
|||
#define READPIPE 0
|
||||
#define WRITEPIPE 1
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
|
||||
#define SCAN_BUF_SIZE 32768
|
||||
|
||||
|
|
|
@ -1182,7 +1182,6 @@ Lexmark X4500 MFP
|
|||
#define AVISION_INQUIRY_SIZE_V2 0x88
|
||||
#define AVISION_INQUIRY_SIZE_MAX AVISION_INQUIRY_SIZE_V2
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
|
||||
#define AVISION_BASE_RES 300
|
||||
|
||||
|
|
|
@ -206,7 +206,6 @@ typedef enum
|
|||
} BH_Option;
|
||||
|
||||
/* macros for accessing the value for an option within a scanning context */
|
||||
#define MM_PER_INCH 25.4
|
||||
#define _OPT_VAL_WORD(s, o) ((s)->val[(o)].w)
|
||||
#define _OPT_VAL_WORD_THOUSANDTHS(s, o) \
|
||||
(SANE_UNFIX(_OPT_VAL_WORD((s), (o))) * 1000.0 / MM_PER_INCH)
|
||||
|
|
|
@ -127,7 +127,6 @@
|
|||
#define SANE_I18N(text) text
|
||||
#endif
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
|
||||
static SANE_Byte primaryHigh[256], primaryLow[256], secondaryHigh[256],
|
||||
secondaryLow[256]; /* modification for FB1200S */
|
||||
|
|
|
@ -397,7 +397,6 @@ enum {
|
|||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
#define MM_PER_UNIT_UNFIX SANE_UNFIX(SANE_FIX(MM_PER_INCH / 1200.0))
|
||||
#define MM_PER_UNIT_FIX SANE_FIX(SANE_UNFIX(SANE_FIX(MM_PER_INCH / 1200.0)))
|
||||
|
||||
|
|
|
@ -117,7 +117,6 @@ struct scanner
|
|||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
#define MM_PER_UNIT_UNFIX SANE_UNFIX(SANE_FIX(MM_PER_INCH / 1200.0))
|
||||
#define MM_PER_UNIT_FIX SANE_FIX(SANE_UNFIX(SANE_FIX(MM_PER_INCH / 1200.0)))
|
||||
|
||||
|
|
|
@ -1872,7 +1872,6 @@ sense_handler (int scsi_fd, unsigned char * result, void *arg)
|
|||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
/* ilu per mm */
|
||||
|
||||
#define length_quant SANE_UNFIX(SANE_FIX(MM_PER_INCH / 2700.0))
|
||||
|
|
|
@ -263,7 +263,6 @@ struct scanner
|
|||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
#define MM_PER_UNIT_UNFIX SANE_UNFIX(SANE_FIX(MM_PER_INCH / 1200.0))
|
||||
#define MM_PER_UNIT_FIX SANE_FIX(SANE_UNFIX(SANE_FIX(MM_PER_INCH / 1200.0)))
|
||||
|
||||
|
|
|
@ -341,10 +341,6 @@
|
|||
#define PATH_MAX (1024)
|
||||
#endif
|
||||
|
||||
#ifndef MM_PER_INCH
|
||||
#define MM_PER_INCH 25.4
|
||||
#endif
|
||||
|
||||
#define walloc(x) (x *)malloc(sizeof(x))
|
||||
#define walloca(x) (x *)alloca(sizeof(x))
|
||||
|
||||
|
|
|
@ -0,0 +1,552 @@
|
|||
/* epson2 hardware colour correction coefficients
|
||||
* Copyright (C) 2001-2009 SEIKO EPSON Corporation
|
||||
* Copyright (C) 2009 Tower Technologies
|
||||
*
|
||||
* License: GPLv2
|
||||
*
|
||||
* This file is part of the SANE epson2 backend and has been derived
|
||||
* from the epkowa backend distributed with Image Scan!
|
||||
*
|
||||
*/
|
||||
|
||||
/*! Hardware colour correction coefficients (CCC).
|
||||
|
||||
Each entry starts with a unique identifier, followed by four CCC
|
||||
profiles; the first is for reflective materials, the second for
|
||||
colour negatives, the third for monochrome negatives, and the
|
||||
fourth and last one is for colour positives.
|
||||
*/
|
||||
|
||||
#define DEBUG_DECLARE_ONLY
|
||||
|
||||
#include "epson2.h"
|
||||
|
||||
const struct epson_profile epson_cct_profiles[] = {
|
||||
{0x00, /* default */
|
||||
{{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x05, /* ES-6000H */
|
||||
{{1.1419,-0.0596,-0.0825,-0.1234, 1.2812,-0.1413, 0.0703,-0.5720, 1.5016},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.1419,-0.0596,-0.0825,-0.1234, 1.2812,-0.1413, 0.0703,-0.5720, 1.5016}}},
|
||||
{0x06, /* GT-6600 */
|
||||
{{1.1442,-0.0705,-0.0737,-0.0702, 1.1013,-0.0311,-0.0080,-0.3588, 1.3668},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x07, /* GT-7600 */
|
||||
{{1.1967,-0.1379,-0.0588,-0.0538, 1.0385, 0.0153, 0.0348,-0.4070, 1.3721},
|
||||
{1.0010,-0.0010, 0.0000,-0.1120, 1.1710,-0.0590, 0.0000,-0.0910, 1.0920},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.1967,-0.1379,-0.0588,-0.0538, 1.0385, 0.0153, 0.0348,-0.4070, 1.3721}}},
|
||||
{0x0D, /* ES-2000 */
|
||||
{{1.1980,-0.1365,-0.0616,-0.1530, 1.1729,-0.0198,-0.0025,-0.2776, 1.2801},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.1980,-0.1365,-0.0616,-0.1530, 1.1729,-0.0198,-0.0025,-0.2776, 1.2801}}},
|
||||
{0x0F, /* ES-8500 */
|
||||
{{1.0961,-0.0181,-0.0779,-0.1279, 1.1957,-0.0678, 0.0315,-0.3891, 1.3576},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0961,-0.0181,-0.0779,-0.1279, 1.1957,-0.0678, 0.0315,-0.3891, 1.3576}}},
|
||||
{0x15, /* GT-6700 */
|
||||
{{1.0999,-0.0425,-0.0574,-0.0806, 1.0835,-0.0028, 0.0057,-0.2924, 1.2866},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x16, /* GT-8700 */
|
||||
{{1.2020,-0.1518,-0.0502,-0.0847, 1.1385,-0.0538, 0.0059,-0.3255, 1.3196},
|
||||
{1.0030,-0.0030, 0.0000,-0.0980, 1.1500,-0.0520,-0.0030,-0.0840, 1.0880},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.2456,-0.1617,-0.0839,-0.1160, 1.1862,-0.0702,-0.0036,-0.3438, 1.3473}}},
|
||||
{0x18, /* GT-7700 */
|
||||
{{1.1339,-0.0526,-0.0813,-0.1177, 1.1661,-0.0485,-0.0030,-0.3298, 1.3328},
|
||||
{1.0010,-0.0010, 0.0000,-0.1120, 1.1710,-0.0590, 0.0000,-0.0910, 1.0920},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.2066,-0.0360,-0.1706,-0.1313, 1.2523,-0.1210,-0.0299,-0.3377, 1.3676}}},
|
||||
{0x1A, /* ES-9000H */
|
||||
{{1.0986, 0.0235,-0.1221,-0.1294, 1.0896, 0.0399, 0.0928,-0.6043, 1.5115},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x1B, /* ES-2200 */
|
||||
{{1.1855,-0.1372,-0.0483,-0.2060, 1.2468,-0.0407, 0.0358,-0.3059, 1.2701},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.1976,-0.1182,-0.0794,-0.1578, 1.2720,-0.1142, 0.0122,-0.3467, 1.3345}}},
|
||||
{0x1D, /* GT-7200 */
|
||||
{{1.0675,-0.0586,-0.0088,-0.0332, 0.9716, 0.0616, 0.0175,-0.4054, 1.3879},
|
||||
{1.0090,-0.0090, 0.0000,-0.0390, 1.0750,-0.0360,-0.0070,-0.1060, 1.1130},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.1394,-0.0829,-0.0564,-0.0003, 1.0008,-0.0004,-0.0059,-0.3674, 1.3733}}},
|
||||
{0x1F, /* GT-8200 */
|
||||
{{1.0800,-0.0607,-0.0193,-0.0787, 1.0846,-0.0059, 0.0135,-0.3334, 1.3199},
|
||||
{1.0040,-0.0040, 0.0000,-0.0780, 1.1360,-0.0570,-0.0020,-0.0810, 1.0830},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.1334,-0.0929,-0.0405,-0.0418, 1.0689,-0.0271,-0.0521,-0.3262, 1.3783}}},
|
||||
{0x21, /* GT-9700 */
|
||||
{{1.0919,-0.0739,-0.0180,-0.0941, 1.1150,-0.0209, 0.0220,-0.3744, 1.3524},
|
||||
{1.0090,-0.0100, 0.0010,-0.0720, 1.1310,-0.0600, 0.0000,-0.1000, 1.1000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.1374,-0.1396, 0.0021,-0.0489, 1.0655,-0.0166, 0.0081,-0.3492, 1.3411}}},
|
||||
{0x23, /* GT-7300 */
|
||||
{{1.0339,-0.0166,-0.0173,-0.0117, 0.9797, 0.0319, 0.0010,-0.3609, 1.3599},
|
||||
{1.0090,-0.0090, 0.0000,-0.0390, 1.0750,-0.0360,-0.0070,-0.1060, 1.1130},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.1666,-0.0898,-0.0768,-0.0076, 1.0157,-0.0081, 0.0012,-0.3048, 1.3036}}},
|
||||
{0x25, /* GT-8300 */
|
||||
{{1.0800,-0.0607,-0.0193,-0.0787, 1.0846,-0.0059, 0.0135,-0.3334, 1.3199},
|
||||
{1.0040,-0.0040, 0.0000,-0.0780, 1.1360,-0.0570,-0.0020,-0.0810, 1.0830},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.1334,-0.0929,-0.0405,-0.0418, 1.0689,-0.0271,-0.0521,-0.3262, 1.3783}}},
|
||||
{0x27, /* GT-9300 */
|
||||
{{1.0919,-0.0739,-0.0180,-0.0941, 1.1150,-0.0209, 0.0220,-0.3744, 1.3524},
|
||||
{1.0083,-0.0094, 0.0011,-0.0760, 1.1379,-0.0619,-0.0002,-0.0945, 1.0947},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.1952,-0.1519,-0.0433,-0.0932, 1.1613,-0.0681,-0.0418,-0.3140, 1.3558}}},
|
||||
{0x29, /* GT-9800F */
|
||||
{{1.0369,-0.0210,-0.0160,-0.0820, 1.1160,-0.0341, 0.0150,-0.5035, 1.4885},
|
||||
{1.0122,-0.0151, 0.0029,-0.0861, 1.1402,-0.0542,-0.0061,-0.1607, 1.1669},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.1764,-0.1749,-0.0014,-0.0590, 1.0983,-0.0393, 0.0208,-0.5194, 1.4986}}},
|
||||
{0x2B, /* ES-7000H */
|
||||
{{1.0305,-0.0116,-0.0189,-0.0936, 1.1245,-0.0309,-0.0072,-0.1413, 1.1485},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x32, /* GT-9400 */
|
||||
{{1.0932,-0.0529,-0.0403,-0.1077, 1.1416,-0.0338, 0.0079,-0.5525, 1.5446},
|
||||
{1.0259,-0.0356, 0.0097,-0.1085, 1.2225,-0.1140,-0.0046,-0.1848, 1.1894},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.2720,-0.2665,-0.0054,-0.0672, 1.1301,-0.0629,-0.0048,-0.3917, 1.3965}}},
|
||||
{0x2D, /* CC-600PX */
|
||||
{{1.0436,-0.0078,-0.0359,-0.0169, 1.0114, 0.0056, 0.0308,-0.4425, 1.4117},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x3A, /* PM-A850 */
|
||||
{{1.1150,-0.0677,-0.0473,-0.1179, 1.1681,-0.0502, 0.0052,-0.4858, 1.4806},
|
||||
{1.0133,-0.0151, 0.0017,-0.1216, 1.2207,-0.0991,-0.0003,-0.1512, 1.1515},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.2105,-0.1644,-0.0461,-0.1124, 1.1945,-0.0820,-0.0450,-0.3367, 1.3817}}},
|
||||
{0x36, /* CX5300/CX5400 */
|
||||
{{1.0848,-0.0153,-0.0695,-0.0902, 1.0611, 0.0291, 0.0344,-0.5002, 1.4658},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x34, /* GT-X700 */
|
||||
{{1.1032,-0.0590,-0.0442,-0.1915, 1.3371,-0.1456, 0.0387,-0.5804, 1.5417},
|
||||
{1.0232,-0.0258, 0.0026,-0.1296, 1.2882,-0.1587,-0.0011,-0.1928, 1.1940},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.2662,-0.2664, 0.0002,-0.1050, 1.3168,-0.2118,-0.0058,-0.4370, 1.4428}}},
|
||||
{0x38, /* RX500/RX510 */
|
||||
{{1.1150,-0.0677,-0.0473,-0.1179, 1.1681,-0.0502, 0.0052,-0.4858, 1.4806},
|
||||
{1.0133,-0.0151, 0.0017,-0.1216, 1.2207,-0.0991,-0.0003,-0.1512, 1.1515},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.2105,-0.1644,-0.0461,-0.1124, 1.1945,-0.0820,-0.0450,-0.3367, 1.3817}}},
|
||||
{0x37, /* CX6300/CX6400 */
|
||||
{{0.9640, 0.1455,-0.1095, 0.0108, 1.1933,-0.2041, 0.0071,-0.3487, 1.3416},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x3F, /* ES-10000G */
|
||||
{{1.1223,-0.0985,-0.0238,-0.0847, 1.1502,-0.0655, 0.0118,-0.5022, 1.4904},
|
||||
{1.0077,-0.0129, 0.0052,-0.0904, 1.1785,-0.0881, 0.0000,-0.1528, 1.1528},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.1927,-0.1646,-0.0280,-0.0655, 1.1033,-0.0378, 0.0034,-0.4173, 1.4139}}},
|
||||
{0x41, /* GT-F500/F550 */
|
||||
{{1.0732,-0.0581,-0.0150,-0.0897, 1.1553,-0.0657,-0.0179,-0.6500, 1.6679},
|
||||
{1.0163,-0.0203, 0.0040,-0.1125, 1.1797,-0.0672,-0.0091,-0.2343, 1.2434},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.2437,-0.2022,-0.0415,-0.0352, 1.0735,-0.0383,-0.0188,-0.5020, 1.5209}}},
|
||||
{0x43, /* GT-F600 */
|
||||
{{1.0782,-0.0697,-0.0085,-0.1605, 1.2862,-0.1257, 0.0148,-0.5854, 1.5706},
|
||||
{1.0136,-0.0151, 0.0016,-0.1836, 1.3422,-0.1586,-0.0014,-0.1851, 1.1865},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.1491,-0.1456,-0.0035,-0.0990, 1.2657,-0.1666, 0.0015,-0.3868, 1.3853}}},
|
||||
{0x46, /* CX3500/CX3600/CX4500/CX4600 */
|
||||
{{0.9828, 0.0924,-0.0752, 0.0255, 1.1510,-0.1765, 0.0049,-0.3250, 1.3201},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x48, /* PM-A700/RX420/RX430 */
|
||||
{{0.9716, 0.0927,-0.0643, 0.0010, 1.1068,-0.1078, 0.0101,-0.3046, 1.2945},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x49, /* CX6500/CX6600 */
|
||||
{{0.9640, 0.1455,-0.1095, 0.0108, 1.1933,-0.2041, 0.0071,-0.3487, 1.3416},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x4B, /* PM-A870 */
|
||||
{{1.1150,-0.0677,-0.0473,-0.1179, 1.1681,-0.0502, 0.0052,-0.4858, 1.4806},
|
||||
{1.0133,-0.0151, 0.0017,-0.1216, 1.2207,-0.0991,-0.0003,-0.1512, 1.1515},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.2105,-0.1644,-0.0461,-0.1124, 1.1945,-0.0820,-0.0450,-0.3367, 1.3817}}},
|
||||
{0x4D, /* PM-A900 */
|
||||
{{1.1011,-0.0824,-0.0186,-0.0970, 1.1991,-0.1021,-0.0161,-0.6247, 1.6408},
|
||||
{1.0259,-0.0356, 0.0097,-0.1085, 1.2225,-0.1140,-0.0046,-0.1848, 1.1894},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.2150,-0.2074,-0.0076,-0.0521, 1.1430,-0.0909,-0.0204,-0.4156, 1.4360}}},
|
||||
{0x4F, /* GT-X800 */
|
||||
{{1.1052,-0.0850,-0.0202,-0.1050, 1.2294,-0.1245,-0.0486,-0.4160, 1.4646},
|
||||
{1.0255,-0.0272, 0.0017,-0.0919, 1.2098,-0.1180,-0.0021,-0.1296, 1.1317},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.2950,-0.2619,-0.0332,-0.0562, 1.1587,-0.1025,-0.0397,-0.3100, 1.3497}}},
|
||||
{0x51, /* LP-A500 */
|
||||
{{1.0614,-0.0361,-0.0253,-0.1081, 1.1320,-0.0240,-0.0536,-0.2045, 1.2580},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x52, /* GT-F520/F570 */
|
||||
{{1.0978,-0.0806,-0.0173,-0.0802, 1.1515,-0.0713,-0.0476,-0.4656, 1.5132},
|
||||
{1.0192,-0.0192, 0.0000,-0.0974, 1.1846,-0.0872,-0.0031,-0.1797, 1.1828},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.2490,-0.2030,-0.0460,-0.0469, 1.1046,-0.0577,-0.0361,-0.3857, 1.4217}}},
|
||||
{0x54, /* GT-X750 */
|
||||
{{1.0905,-0.0654,-0.0251,-0.1030, 1.1801,-0.0771,-0.0685,-0.4238, 1.4923},
|
||||
{1.0206,-0.0207, 0.0000,-0.0890, 1.1770,-0.0880,-0.0014,-0.1450, 1.1464},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.3041,-0.2907,-0.0134,-0.0383, 1.0908,-0.0525,-0.0327,-0.2947, 1.3275}}},
|
||||
{0x56, /* LP-M5500 */
|
||||
{{1.0784,-0.0560,-0.0224,-0.1793, 1.2234,-0.0441,-0.0041,-0.2636, 1.2677},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x57, /* Stylus CX3700/CX3800/DX3800 */
|
||||
{{0.9828, 0.0924,-0.0752, 0.0255, 1.1510,-0.1765, 0.0049,-0.3250, 1.3201},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x58, /* PX-A650/Stylus CX4700/CX4800/DX4800 */
|
||||
{{0.9716, 0.0927,-0.0643, 0.0010, 1.1068,-0.1078, 0.0101,-0.3046, 1.2945},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x59, /* Stylus CX4100/CX4200/DX4200 */
|
||||
{{0.9716, 0.0927,-0.0643, 0.0010, 1.1068,-0.1078, 0.0101,-0.3046, 1.2945},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x5B, /* Stylus CX7700/CX7800 */
|
||||
{{0.9764, 0.1095,-0.0859, 0.0149, 1.1154,-0.1303, 0.0051,-0.2851, 1.2800},
|
||||
{1.0024,-0.0149, 0.0124,-0.2569, 1.3432,-0.0864,-0.0043,-0.1306, 1.1349},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.1003,-0.0493,-0.0510,-0.1607, 1.2748,-0.1142,-0.0059,-0.3161, 1.3220}}},
|
||||
{0x5D, /* Stylus Photo RX520/RX530 */
|
||||
{{0.9764, 0.1095,-0.0859, 0.0149, 1.1154,-0.1303, 0.0051,-0.2851, 1.2800},
|
||||
{1.0024,-0.0149, 0.0124,-0.2569, 1.3432,-0.0864,-0.0043,-0.1306, 1.1349},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.1003,-0.0493,-0.0510,-0.1607, 1.2748,-0.1142,-0.0059,-0.3161, 1.3220}}},
|
||||
{0x5F, /* Stylus Photo RX640/RX650 */
|
||||
{{1.0697,-0.0561,-0.0137,-0.0824, 1.1291,-0.0467,-0.0390,-0.5218, 1.5608},
|
||||
{1.0208,-0.0209, 0.0000,-0.0923, 1.2017,-0.1093,-0.0020,-0.1290, 1.1310},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.2606,-0.2125,-0.0482,-0.0567, 1.1441,-0.0874,-0.0431,-0.3490, 1.3921}}},
|
||||
{0x61, /* PM-A950 */
|
||||
{{1.0921,-0.0722,-0.0199,-0.0831, 1.1550,-0.0718,-0.0452,-0.3721, 1.4173},
|
||||
{1.0168,-0.0168, 0.0000,-0.0953, 1.1928,-0.0975,-0.0012,-0.1235, 1.1247},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.2603,-0.2763, 0.0155,-0.0398, 1.1033,-0.0635,-0.0249,-0.2675, 1.2924}}},
|
||||
{0x63, /* GT-X900 */
|
||||
{{1.0976,-0.0789,-0.0187,-0.0958, 1.1821,-0.0863,-0.0565,-0.4179, 1.4744},
|
||||
{1.0250,-0.0267, 0.0016,-0.0930, 1.2108,-0.1178,-0.0022,-0.1296, 1.1317},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.3111,-0.2979,-0.0132,-0.0441, 1.1148,-0.0707,-0.0348,-0.2971, 1.3319}}},
|
||||
{0x65, /* ES-H300 */
|
||||
{{1.0359,-0.0146,-0.0213,-0.0752, 1.0963,-0.0211,-0.0456,-0.3238, 1.3693},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x66, /* GT-S600/F650, Perfection V10/V100 */
|
||||
{{1.0878,-0.0667,-0.0211,-0.0892, 1.1513,-0.0622,-0.0654,-0.5175, 1.5829},
|
||||
{1.0208,-0.0209, 0.0000,-0.0923, 1.2017,-0.1093,-0.0020,-0.1290, 1.1310},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.2688,-0.2522,-0.0166,-0.0559, 1.1291,-0.0733,-0.0377,-0.3519, 1.3896}}},
|
||||
{0x68, /* GT-F700, Perfection V350 */
|
||||
{{1.0950,-0.0646,-0.0305,-0.0792, 1.1398,-0.0606,-0.0123,-0.5175, 1.5298},
|
||||
{1.0258,-0.0306, 0.0048,-0.0995, 1.2173,-0.1178,-0.0054,-0.1242, 1.1296},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.2697,-0.2501,-0.0195,-0.0351, 1.1236,-0.0885,-0.0131,-0.3268, 1.3400}}},
|
||||
{0x6A, /* Stylus CX2800/CX2900/ME200 */
|
||||
{{0.9828, 0.0924,-0.0752, 0.0255, 1.1510,-0.1765, 0.0049,-0.3250, 1.3201},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x6B, /* Stylus PX-A620, CX3900/DX4000 */
|
||||
{{0.9828, 0.0924,-0.0752, 0.0255, 1.1510,-0.1765, 0.0049,-0.3250, 1.3201},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x6C, /* Stylus CX5900/CX6000/DX6000 */
|
||||
{{0.9716, 0.0927,-0.0643, 0.0010, 1.1068,-0.1078, 0.0101,-0.3046, 1.2945},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x70, /* Stylus Photo RX560/RX580/RX590 */
|
||||
{{0.9533, 0.0885,-0.0418, 0.0033, 1.0627,-0.0660,-0.0137,-0.1904, 1.2041},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x71, /* PM-A920 */
|
||||
{{1.0697,-0.0561,-0.0137,-0.0824, 1.1291,-0.0467,-0.0390,-0.5218, 1.5608},
|
||||
{1.0208,-0.0209, 0.0000,-0.0923, 1.2017,-0.1093,-0.0020,-0.1290, 1.1310},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.2606,-0.2125,-0.0482,-0.0567, 1.1441,-0.0874,-0.0431,-0.3490, 1.3921}}},
|
||||
{0x73, /* PM-A970 */
|
||||
{{1.0828,-0.0739,-0.0089,-0.0895, 1.1597,-0.0702,-0.0531,-0.4291, 1.4822},
|
||||
{1.0258,-0.0306, 0.0048,-0.0995, 1.2173,-0.1178,-0.0054,-0.1242, 1.1296},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.2579,-0.2384,-0.0195,-0.0569, 1.1454,-0.0884,-0.0411,-0.3072, 1.3483}}},
|
||||
{0x75, /* PM-T990 */
|
||||
{{1.0828,-0.0739,-0.0089,-0.0895, 1.1597,-0.0702,-0.0531,-0.4291, 1.4822},
|
||||
{1.0258,-0.0306, 0.0048,-0.0995, 1.2173,-0.1178,-0.0054,-0.1242, 1.1296},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.2579,-0.2384,-0.0195,-0.0569, 1.1454,-0.0884,-0.0411,-0.3072, 1.3483}}},
|
||||
{0x77, /* Stylus CX4900/CX5000/DX5000 */
|
||||
{{0.9716, 0.0927,-0.0643, 0.0010, 1.1068,-0.1078, 0.0101,-0.3046, 1.2945},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x78, /* LP-M5600 */
|
||||
{{1.0784,-0.0560,-0.0224,-0.1793, 1.2234,-0.0441,-0.0041,-0.2636, 1.2677},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x79, /* AcuLaser CX21 */
|
||||
{{1.0614,-0.0361,-0.0253,-0.1081, 1.1320,-0.0240,-0.0536,-0.2045, 1.2580},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x7A, /* GT-F670, Perfection V200 */
|
||||
{{1.1754,-0.1173,-0.0580,-0.0687, 1.1307,-0.0620,-0.0255,-0.4699, 1.4954},
|
||||
{1.0150,-0.0173, 0.0022,-0.0853, 1.2238,-0.1384,-0.0073,-0.1490, 1.1562},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.4283,-0.4335, 0.0052,-0.0170, 1.1308,-0.1138,-0.0147,-0.2230, 1.2377}}},
|
||||
{0x7C, /* GT-X770, Perfection V500 */
|
||||
{{1.2470,-0.2041,-0.0429,-0.1920, 1.2918,-0.0998,-0.0100,-0.2503, 1.2603},
|
||||
{1.0050,-0.0076, 0.0026,-0.2532, 1.1289, 0.1243,-0.0733,-0.0960, 1.1693},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.4724,-0.4599,-0.0125,-0.0876, 1.1562,-0.0686,-0.0097,-0.2278, 1.2375}}},
|
||||
{0x7E, /* Stylus CX4300/CX4400/CX5500/CX5600/DX4400 */
|
||||
{{0.9828, 0.0924,-0.0752, 0.0255, 1.1510,-0.1765, 0.0049,-0.3250, 1.3201},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x7F, /* PX-A640, Stylus CX7300/CX7400/DX7400 */
|
||||
{{1.0936,-0.0142,-0.0795,-0.0001, 1.0951,-0.0949, 0.0308,-0.2967, 1.2659},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x80, /* PX-A740, Stylus CX8300/CX8400/DX8400 */
|
||||
{{1.0936,-0.0142,-0.0795,-0.0001, 1.0951,-0.0949, 0.0308,-0.2967, 1.2659},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x81, /* PX-FA700, Stylus CX9300F/CX9400Fax/DX9400F */
|
||||
{{1.1090,-0.0304,-0.0786, 0.0194, 1.1078,-0.1272,-0.0077,-0.1293, 1.1370},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x82, /* PM-T960 */
|
||||
{{1.1622,-0.1102,-0.0519,-0.0717, 1.1060,-0.0343,-0.0248,-0.4138, 1.4385},
|
||||
{0.9913, 0.0082, 0.0005,-0.1259, 1.0452, 0.0807,-0.0072,-0.0767, 1.0839},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.3900,-0.3008,-0.0892,-0.0254, 1.0890,-0.0636,-0.0300,-0.2501, 1.2801}}},
|
||||
{0x84, /* PM-A940, Stylus Photo RX680/RX685/RX690 */
|
||||
{{1.0934,-0.0042,-0.0892, 0.0052, 1.1019,-0.1071, 0.0259,-0.2651, 1.2392},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x85, /* PM-A840/A840S, Stylus Photo RX585/RX595/RX610 */
|
||||
{{1.0534, 0.0399,-0.0934, 0.0098, 1.0589,-0.0687, 0.0016,-0.1131, 1.1115},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x86, /* GT-D1000, GT-1500 */
|
||||
{{1.1945,-0.1413,-0.0532,-0.1929, 1.2525,-0.0596,-0.0235,-0.2761, 1.2996},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x87, /* GT-X970 */
|
||||
{{1.1978,-0.1417,-0.0561,-0.0852, 1.1610,-0.0758,-0.0395,-0.3212, 1.3607},
|
||||
{1.0000, 0.0009,-0.0009,-0.1268, 1.0523, 0.0745,-0.0075,-0.0873, 1.0948},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.4475,-0.3957,-0.0518,-0.0138, 1.0644,-0.0506,-0.0199,-0.2050, 1.2249}}},
|
||||
{0x97, /* LP-M5000 */
|
||||
{{1.1115,-0.0377,-0.0738,-0.0658, 1.0624, 0.0034, 0.0042,-0.2883, 1.2841},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x89, /* LP-M6000 */
|
||||
{{1.1115,-0.0377,-0.0738,-0.0658, 1.0624, 0.0034, 0.0042,-0.2883, 1.2841},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x8A, /* ES-H7200, GT-20000 */
|
||||
{{1.1221,-0.0396,-0.0825,-0.0718, 1.0822,-0.0104, 0.0112,-0.2995, 1.2883},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x8B, /* GT-F720/S620, Perfection V30/V300 */
|
||||
{{1.2402,-0.1891,-0.0511,-0.1535, 1.2008,-0.0473,-0.0316,-0.3293, 1.3609},
|
||||
{1.0027,-0.0048, 0.0021,-0.2067, 1.0878, 0.1189,-0.0408,-0.0767, 1.1175},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.4524,-0.4346,-0.0178,-0.0601, 1.1273,-0.0672,-0.0173,-0.1823, 1.1996}}},
|
||||
{0x8D, /* Stylus NX200/SX200/TX200 */
|
||||
{{1.0936,-0.0142,-0.0795,-0.0001, 1.0951,-0.0949, 0.0308,-0.2967, 1.2659},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x8E, /* PX-501A, Stylus NX400/SX400/TX400 */
|
||||
{{1.0936,-0.0142,-0.0795,-0.0001, 1.0951,-0.0949, 0.0308,-0.2967, 1.2659},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x8F, /* Stylus NX300 / Stylus Office BX300F/TX300F / ME Office 600F */
|
||||
{{1.1090,-0.0304,-0.0786, 0.0194, 1.1078,-0.1272,-0.0077,-0.1293, 1.1370},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x90, /* PX-601F, Stylus SX600FW/TX600FW / Stylus Office BX600FW / WorkForce 600 */
|
||||
{{1.0316, 0.0864,-0.1180, 0.0268, 1.1111,-0.1379, 0.0213,-0.2235, 1.2022},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x91, /* EP-901A/901F, Artisan 800 / Stylus Photo PX800FW/FX800FW */
|
||||
{{1.0777, 0.0152,-0.0929, 0.0244, 1.1221,-0.1465, 0.0103,-0.1544, 1.1441},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x92, /* EP-801A, Artisan 700 / Stylus Photo PX700W/TX700W */
|
||||
{{1.0777, 0.0152,-0.0929, 0.0244, 1.1221,-0.1465, 0.0103,-0.1544, 1.1441},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x93, /* PX-401A, Stylus NX100/SX100/TX100 / ME 300 */
|
||||
{{1.0934,-0.0042,-0.0892, 0.0052, 1.1019,-0.1071, 0.0259,-0.2651, 1.2392},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
{0x96, /* WorkForce 500 */
|
||||
{{1.1090,-0.0304,-0.0786, 0.0194, 1.1078,-0.1272,-0.0077,-0.1293, 1.1370},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000},
|
||||
{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}},
|
||||
|
||||
{ 0xFF, { } } /* terminator */
|
||||
};
|
||||
|
||||
const struct epson_profile_map epson_cct_models[] = {
|
||||
{"GT-10000", 0x05 },
|
||||
{"ES-6000", 0x05 },
|
||||
{"Perfection610", 0x06 },
|
||||
{"GT-6600", 0x06A },
|
||||
{"Perfection1200", 0x07 },
|
||||
{"GT-7600", 0x07 },
|
||||
{"Expression1600", 0x0D },
|
||||
{"ES-2000", 0x0D },
|
||||
{"Expression1640XL", 0x0F },
|
||||
{"ES-8500", 0x0F },
|
||||
{"Perfection640", 0x15 },
|
||||
{"GT-6700", 0x15 },
|
||||
{"Perfection1640", 0x16 },
|
||||
{"GT-8700", 0x16 },
|
||||
{"Perfection1240", 0x18 },
|
||||
{"GT-7700", 0x18 },
|
||||
{"GT-30000", 0x1A },
|
||||
{"ES-9000H", 0x1A },
|
||||
{"Expression1680", 0x1B },
|
||||
{"ES-2200", 0x1B },
|
||||
{"GT-7200", 0x1D },
|
||||
{"GT-8200", 0x1F },
|
||||
{"GT-9700", 0x21 },
|
||||
{"GT-7300", 0x23 },
|
||||
{"GT-8300", 0x25 },
|
||||
{"GT-9300", 0x27 },
|
||||
{"GT-9800", 0x29 },
|
||||
{"ES-7000H", 0x2B },
|
||||
{"LP-A500", 0x51 },
|
||||
{"AL-CX11", 0x51 },
|
||||
{"GT-9400", 0x32 },
|
||||
{"CC-600PX", 0x2D },
|
||||
{"PM-A850", 0x3A },
|
||||
{"CX5400", 0x36 },
|
||||
{"GT-X700", 0x34 },
|
||||
{"RX500", 0x38 },
|
||||
{"PX-A650", 0x37 },
|
||||
{"ES-10000G", 0x3F },
|
||||
{"Expression10000", 0x3F },
|
||||
{"CX4600", 0x46 },
|
||||
{"CX6600", 0x49 },
|
||||
{"CX3600", 0x46 },
|
||||
{"RX420", 0x48 },
|
||||
{"PM-A700", 0x48 },
|
||||
{"PM-A870", 0x4B },
|
||||
{"GT-F500", 0x41 },
|
||||
{"GT-F600", 0x43 },
|
||||
{"PM-A900", 0x4D },
|
||||
{"GT-X800", 0x4F },
|
||||
{"GT-X750", 0x54 },
|
||||
{"LP-M5500", 0x56 },
|
||||
{"LP-M5600", 0x78 },
|
||||
{"GT-F520", 0x52 },
|
||||
{"CX3800", 0x57 },
|
||||
{"CX7800", 0x5B },
|
||||
{"PM-A750", 0x5D },
|
||||
{"CX4800", 0x58 },
|
||||
{"CX4200", 0x59 },
|
||||
{"PM-A950", 0x61 },
|
||||
{"PM-A890", 0x5F },
|
||||
{"GT-X900", 0x63 },
|
||||
{"CX4000", 0x6B },
|
||||
{"CX3000v", 0x6A },
|
||||
{"ES-H300", 0x65 },
|
||||
{"CX6000", 0x6C },
|
||||
{"PM-A820", 0x70 },
|
||||
{"PM-A920", 0x71 },
|
||||
{"PM-A970", 0x73 },
|
||||
{"PM-T990", 0x75 },
|
||||
{"CX5000", 0x77 },
|
||||
{"GT-S600", 0x66 },
|
||||
{"GT-F700", 0x68 },
|
||||
{"AL-CX21", 0x79 },
|
||||
{"GT-F670", 0x7A },
|
||||
{"GT-X770", 0x7C },
|
||||
{"CX4400", 0x7E },
|
||||
{"CX7400", 0x7F },
|
||||
{"CX8400", 0x80 },
|
||||
{"CX9400Fax", 0x81 },
|
||||
{"PM-T960", 0x82 },
|
||||
{"PM-A940", 0x84 },
|
||||
{"PM-A840", 0x85 },
|
||||
{"GT-D1000", 0x86 },
|
||||
{"GT-X970", 0x87 },
|
||||
{"LP-M5000", 0x97 },
|
||||
{"LP-M6000", 0x89 },
|
||||
{"ES-H7200", 0x8A },
|
||||
{"GT-20000", 0x8A },
|
||||
{"NX200", 0x8D },
|
||||
{"NX400", 0x8E },
|
||||
{"NX100", 0x93 },
|
||||
{"NX300", 0x8F },
|
||||
{"WorkForce 600", 0x90 },
|
||||
{"Artisan 800", 0x91 },
|
||||
{"Artisan 700", 0x92 },
|
||||
{"WorkForce 500", 0x96 },
|
||||
{"GT-F720", 0x8B },
|
||||
{"GT-S620", 0x8B },
|
||||
{"GT-S50", 0x00 },
|
||||
{"GT-S80", 0x00 },
|
||||
{"PID 0851", 0x98 },
|
||||
{"PID 084D", 0x99 },
|
||||
{"PID 084F", 0x9A },
|
||||
{"PID 0854", 0x9B },
|
||||
{"PID 0856", 0x9C },
|
||||
|
||||
{ } /* terminator */
|
||||
};
|
|
@ -20,6 +20,7 @@
|
|||
#include "sane/config.h"
|
||||
|
||||
#include <byteorder.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "epson2.h"
|
||||
#include "epson2-io.h"
|
||||
|
@ -125,17 +126,158 @@ esci_set_scan_area(Epson_Scanner * s, int x, int y, int width, int height)
|
|||
return e2_cmd_simple(s, params, 8);
|
||||
}
|
||||
|
||||
static int
|
||||
get_roundup_index(double frac[], int n)
|
||||
{
|
||||
int i, index = -1;
|
||||
double max_val = 0.0;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
|
||||
if (frac[i] < 0)
|
||||
continue;
|
||||
|
||||
if (max_val < frac[i]) {
|
||||
index = i;
|
||||
max_val = frac[i];
|
||||
}
|
||||
}
|
||||
|
||||
return index;
|
||||
}
|
||||
|
||||
static int
|
||||
get_rounddown_index(double frac[], int n)
|
||||
{
|
||||
int i, index = -1;
|
||||
double min_val = 1.0;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
|
||||
if (frac[i] > 0)
|
||||
continue;
|
||||
|
||||
if (min_val > frac[i]) {
|
||||
index = i;
|
||||
min_val = frac[i];
|
||||
}
|
||||
}
|
||||
|
||||
return index;
|
||||
}
|
||||
|
||||
static unsigned char
|
||||
int2cpt(int val)
|
||||
{
|
||||
if (val >= 0) {
|
||||
|
||||
if (val > 127)
|
||||
val = 127;
|
||||
|
||||
return (unsigned char) val;
|
||||
|
||||
} else {
|
||||
|
||||
val = -val;
|
||||
|
||||
if (val > 127)
|
||||
val = 127;
|
||||
|
||||
return (unsigned char) (0x80 | val);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
round_cct(double org_cct[], int rnd_cct[])
|
||||
{
|
||||
int loop = 0;
|
||||
int i, j, sum[3];
|
||||
double mult_cct[9], frac[9];
|
||||
|
||||
for (i = 0; i < 9; i++) {
|
||||
mult_cct[i] = org_cct[i] * 32;
|
||||
rnd_cct[i] = (int) floor(mult_cct[i] + 0.5);
|
||||
}
|
||||
|
||||
do {
|
||||
for (i = 0; i < 3; i++) {
|
||||
|
||||
int k = i * 3;
|
||||
|
||||
if ((rnd_cct[k] == 11) &&
|
||||
(rnd_cct[k] == rnd_cct[k + 1]) &&
|
||||
(rnd_cct[k] == rnd_cct[k + 2])) {
|
||||
|
||||
rnd_cct[k + i]--;
|
||||
mult_cct[k + i] = rnd_cct[k + i];
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
|
||||
int k = i * 3;
|
||||
|
||||
for (sum[i] = j = 0; j < 3; j++)
|
||||
sum[i] += rnd_cct[k + j];
|
||||
}
|
||||
|
||||
for (i = 0; i < 9; i++)
|
||||
frac[i] = mult_cct[i] - rnd_cct[i];
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
|
||||
int k = i * 3;
|
||||
|
||||
if (sum[i] < 32) {
|
||||
|
||||
int index = get_roundup_index(&frac[k], 3);
|
||||
if (index != -1) {
|
||||
rnd_cct[k + index]++;
|
||||
mult_cct[k + index] = rnd_cct[k + index];
|
||||
sum[i]++;
|
||||
}
|
||||
|
||||
} else if (sum[i] > 32) {
|
||||
|
||||
int index = get_rounddown_index(&frac[k], 3);
|
||||
if (index != -1) {
|
||||
rnd_cct[k + index]--;
|
||||
mult_cct[k + index] = rnd_cct[k + index];
|
||||
sum[i]--;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
while ((++loop < 2)
|
||||
&& ((sum[0] != 32) || (sum[1] != 32) || (sum[2] != 32)));
|
||||
}
|
||||
|
||||
static void
|
||||
profile_to_colorcoeff(double *profile, unsigned char *color_coeff)
|
||||
{
|
||||
int cc_idx[] = { 4, 1, 7, 3, 0, 6, 5, 2, 8 };
|
||||
int i, color_table[9];
|
||||
|
||||
round_cct(profile, color_table);
|
||||
|
||||
for (i = 0; i < 9; i++)
|
||||
color_coeff[i] = int2cpt(color_table[cc_idx[i]]);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Sends the "set color correction coefficients" command with the
|
||||
* currently selected parameters to the scanner.
|
||||
*/
|
||||
|
||||
SANE_Status
|
||||
esci_set_color_correction_coefficients(Epson_Scanner * s)
|
||||
esci_set_color_correction_coefficients(Epson_Scanner * s, SANE_Word *table)
|
||||
{
|
||||
SANE_Status status;
|
||||
unsigned char params[2];
|
||||
signed char cct[9];
|
||||
unsigned char data[9];
|
||||
double cct[9];
|
||||
|
||||
DBG(8, "%s\n", __func__);
|
||||
if (!s->hw->cmd->set_color_correction_coefficients) {
|
||||
|
@ -150,21 +292,23 @@ esci_set_color_correction_coefficients(Epson_Scanner * s)
|
|||
if (status != SANE_STATUS_GOOD)
|
||||
return status;
|
||||
|
||||
cct[0] = s->val[OPT_CCT_1].w;
|
||||
cct[1] = s->val[OPT_CCT_2].w;
|
||||
cct[2] = s->val[OPT_CCT_3].w;
|
||||
cct[3] = s->val[OPT_CCT_4].w;
|
||||
cct[4] = s->val[OPT_CCT_5].w;
|
||||
cct[5] = s->val[OPT_CCT_6].w;
|
||||
cct[6] = s->val[OPT_CCT_7].w;
|
||||
cct[7] = s->val[OPT_CCT_8].w;
|
||||
cct[8] = s->val[OPT_CCT_9].w;
|
||||
cct[0] = SANE_UNFIX(table[0]);
|
||||
cct[1] = SANE_UNFIX(table[1]);
|
||||
cct[2] = SANE_UNFIX(table[2]);
|
||||
cct[3] = SANE_UNFIX(table[3]);
|
||||
cct[4] = SANE_UNFIX(table[4]);
|
||||
cct[5] = SANE_UNFIX(table[5]);
|
||||
cct[6] = SANE_UNFIX(table[6]);
|
||||
cct[7] = SANE_UNFIX(table[7]);
|
||||
cct[8] = SANE_UNFIX(table[8]);
|
||||
|
||||
profile_to_colorcoeff(cct, data);
|
||||
|
||||
DBG(11, "%s: %d,%d,%d %d,%d,%d %d,%d,%d\n", __func__,
|
||||
cct[0], cct[1], cct[2], cct[3],
|
||||
cct[4], cct[5], cct[6], cct[7], cct[8]);
|
||||
data[0] , data[1], data[2], data[3],
|
||||
data[4], data[5], data[6], data[7], data[8]);
|
||||
|
||||
return e2_cmd_simple(s, params, 9);
|
||||
return e2_cmd_simple(s, data, 9);
|
||||
}
|
||||
|
||||
SANE_Status
|
||||
|
|
|
@ -39,7 +39,7 @@ SANE_Status esci_set_zoom(Epson_Scanner * s, unsigned char x, unsigned char y);
|
|||
SANE_Status esci_set_resolution(Epson_Scanner * s, int x, int y);
|
||||
SANE_Status esci_set_scan_area(Epson_Scanner * s, int x, int y, int width,
|
||||
int height);
|
||||
SANE_Status esci_set_color_correction_coefficients(Epson_Scanner * s);
|
||||
SANE_Status esci_set_color_correction_coefficients(Epson_Scanner * s, SANE_Word *table);
|
||||
SANE_Status esci_set_gamma_table(Epson_Scanner * s);
|
||||
|
||||
SANE_Status esci_request_status(SANE_Handle handle, unsigned char *scanner_status);
|
||||
|
|
|
@ -19,12 +19,10 @@
|
|||
|
||||
#include "sane/config.h"
|
||||
|
||||
#include <stdlib.h> /* malloc */
|
||||
#include <unistd.h> /* sleep */
|
||||
|
||||
#include <sys/select.h>
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "byteorder.h"
|
||||
|
||||
|
@ -34,107 +32,68 @@
|
|||
#include "epson2-io.h"
|
||||
#include "epson2-commands.h"
|
||||
|
||||
static EpsonCmdRec epson_cmd[] = {
|
||||
|
||||
/*
|
||||
* request identity
|
||||
* | request identity2
|
||||
* | | request status
|
||||
* | | | request command parameter
|
||||
* | | | | set color mode
|
||||
* | | | | | start scanning
|
||||
* | | | | | | set data format
|
||||
* | | | | | | | set resolution
|
||||
* | | | | | | | | set zoom
|
||||
* | | | | | | | | | set scan area
|
||||
* | | | | | | | | | | set brightness
|
||||
* | | | | | | | | | | | set gamma
|
||||
* | | | | | | | | | | | | set halftoning
|
||||
* | | | | | | | | | | | | | set color correction
|
||||
* | | | | | | | | | | | | | | initialize scanner
|
||||
* | | | | | | | | | | | | | | | set speed
|
||||
* | | | | | | | | | | | | | | | | set lcount
|
||||
* | | | | | | | | | | | | | | | | | mirror image
|
||||
* | | | | | | | | | | | | | | | | | | set gamma table
|
||||
* | | | | | | | | | | | | | | | | | | | set outline emphasis
|
||||
* | | | | | | | | | | | | | | | | | | | | set dither
|
||||
* | | | | | | | | | | | | | | | | | | | | | set color correction coefficients
|
||||
* | | | | | | | | | | | | | | | | | | | | | | request extended status
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | control an extension
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | | forward feed / eject
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | | | feed
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | | | | request push button status
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | | | | | control auto area segmentation
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | | | | | | set film type
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | | | | | | | set exposure time
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | set bay
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | set threshold
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | set focus position
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | request focus position
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | request extended identity
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | request scanner status
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
* request identity
|
||||
* | request identity2
|
||||
* | | request status
|
||||
* | | | request condition
|
||||
* | | | | set color mode
|
||||
* | | | | | start scanning
|
||||
* | | | | | | set data format
|
||||
* | | | | | | | set resolution
|
||||
* | | | | | | | | set zoom
|
||||
* | | | | | | | | | set scan area
|
||||
* | | | | | | | | | | set brightness
|
||||
* | | | | | | | | | | | set gamma
|
||||
* | | | | | | | | | | | | set halftoning
|
||||
* | | | | | | | | | | | | | set color correction
|
||||
* | | | | | | | | | | | | | | initialize scanner
|
||||
* | | | | | | | | | | | | | | | set speed
|
||||
* | | | | | | | | | | | | | | | | set lcount
|
||||
* | | | | | | | | | | | | | | | | | mirror image
|
||||
* | | | | | | | | | | | | | | | | | | set gamma table
|
||||
* | | | | | | | | | | | | | | | | | | | set outline emphasis
|
||||
* | | | | | | | | | | | | | | | | | | | | set dither
|
||||
* | | | | | | | | | | | | | | | | | | | | | set color correction coefficients
|
||||
* | | | | | | | | | | | | | | | | | | | | | | request extension status
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | control an extension
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | | forward feed / eject
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | | | feed
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | | | | request push button status
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | | | | | control auto area segmentation
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | | | | | | set film type
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | | | | | | | set exposure time
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | set bay
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | set threshold
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | set focus position
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | request focus position
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | request extended identity
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | request scanner status
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
* | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
*/
|
||||
{"A1", 'I', 0x0, 'F', 'S', 0x0, 'G', 0x0, 'R', 0x0, 'A', 0x0,
|
||||
{-0, 0, 0}, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x00, 0x00, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0},
|
||||
{"A2", 'I', 0x0, 'F', 'S', 0x0, 'G', 'D', 'R', 'H', 'A', 'L',
|
||||
{-3, 3, 0}, 'Z', 'B', 0x0, '@', 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x00, 0x00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0},
|
||||
{"B1", 'I', 0x0, 'F', 'S', 'C', 'G', 'D', 'R', 0x0, 'A', 0x0,
|
||||
{-0, 0, 0}, 0x0, 'B', 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x00, 0x00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0},
|
||||
{"B2", 'I', 0x0, 'F', 'S', 'C', 'G', 'D', 'R', 'H', 'A', 'L',
|
||||
{-3, 3, 0}, 'Z', 'B', 0x0, '@', 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x00, 0x00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0},
|
||||
{"B3", 'I', 0x0, 'F', 'S', 'C', 'G', 'D', 'R', 'H', 'A', 'L',
|
||||
{-3, 3, 0}, 'Z', 'B', 'M', '@', 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 'm',
|
||||
'f', 'e', 0x00, 0x00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0},
|
||||
{"B4", 'I', 0x0, 'F', 'S', 'C', 'G', 'D', 'R', 'H', 'A', 'L',
|
||||
{-3, 3, 0}, 'Z', 'B', 'M', '@', 'g', 'd', 0x0, 'z', 'Q', 'b', 'm',
|
||||
'f', 'e', 0x00, 0x00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0},
|
||||
{"B5", 'I', 0x0, 'F', 'S', 'C', 'G', 'D', 'R', 'H', 'A', 'L',
|
||||
{-3, 3, 0}, 'Z', 'B', 'M', '@', 'g', 'd', 'K', 'z', 'Q', 'b', 'm',
|
||||
'f', 'e', 0x00, 0x00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0},
|
||||
{"B6", 'I', 0x0, 'F', 'S', 'C', 'G', 'D', 'R', 'H', 'A', 'L',
|
||||
{-3, 3, 0}, 'Z', 'B', 'M', '@', 'g', 'd', 'K', 'z', 'Q', 'b', 'm',
|
||||
'f', 'e', 0x00, 0x00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0},
|
||||
{"B7", 'I', 0x0, 'F', 'S', 'C', 'G', 'D', 'R', 'H', 'A', 'L',
|
||||
{-4, 3, 0}, 'Z', 'B', 'M', '@', 'g', 'd', 'K', 'z', 'Q', 'b', 'm',
|
||||
'f', 'e', '\f', 0x00, '!', 's', 'N', 0x0, 0x0, 't', 0x0, 0x0, 'I',
|
||||
'F'},
|
||||
{"B8", 'I', 0x0, 'F', 'S', 'C', 'G', 'D', 'R', 'H', 'A', 'L',
|
||||
{-4, 3, 0}, 'Z', 'B', 'M', '@', 'g', 'd', 'K', 'z', 'Q', 'b', 'm',
|
||||
'f', 'e', '\f', 0x19, '!', 's', 'N', 0x0, 0x0, 0x0, 'p', 'q', 'I',
|
||||
'F'},
|
||||
{"F5", 'I', 0x0, 'F', 'S', 'C', 'G', 'D', 'R', 'H', 'A', 'L',
|
||||
{-3, 3, 0}, 'Z', 0x0, 'M', '@', 'g', 'd', 'K', 'z', 'Q', 0x0, 'm',
|
||||
0x0, 'e', '\f', 0x00, 0x0, 0x0, 'N', 'T', 'P', 0x0, 0x0, 0x0, 0x0,
|
||||
0x0},
|
||||
{"D1", 'I', 'i', 'F', 0x0, 'C', 'G', 'D', 'R', 0x0, 'A', 0x0,
|
||||
{-0, 0, 0}, 'Z', 0x0, 0x0, '@', 'g', 'd', 0x0, 'z', 0x0, 0x0, 0x0,
|
||||
'f', 0x0, 0x00, 0x00, '!', 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0},
|
||||
{"D7", 'I', 'i', 'F', 0x0, 'C', 'G', 'D', 'R', 0x0, 'A', 0x0,
|
||||
{-0, 0, 0}, 'Z', 0x0, 0x0, '@', 'g', 'd', 0x0, 'z', 0x0, 0x0, 0x0,
|
||||
'f', 0x0, 0x00, 0x00, '!', 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0},
|
||||
{"D8", 'I', 'i', 'F', 0x0, 'C', 'G', 'D', 'R', 0x0, 'A', 0x0,
|
||||
{-0, 0, 0}, 'Z', 0x0, 0x0, '@', 'g', 'd', 0x0, 'z', 0x0, 0x0, 0x0,
|
||||
'f', 'e', 0x00, 0x00, '!', 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0},
|
||||
|
||||
static struct EpsonCmd epson_cmd[] = {
|
||||
{"A1",'I', 0 ,'F','S', 0 ,'G', 0 ,'R', 0 ,'A', 0 ,{ 0, 0, 0}, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
|
||||
{"A2",'I', 0 ,'F','S', 0 ,'G','D','R','H','A','L',{-3, 3, 0},'Z','B', 0 ,'@', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
|
||||
{"B1",'I', 0 ,'F','S','C','G','D','R', 0 ,'A', 0 ,{ 0, 0, 0}, 0 ,'B', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
|
||||
{"B2",'I', 0 ,'F','S','C','G','D','R','H','A','L',{-3, 3, 0},'Z','B', 0 ,'@', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
|
||||
{"B3",'I', 0 ,'F','S','C','G','D','R','H','A','L',{-3, 3, 0},'Z','B','M','@', 0 , 0 , 0 , 0 , 0 , 0 ,'m','f','e', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
|
||||
{"B4",'I', 0 ,'F','S','C','G','D','R','H','A','L',{-3, 3, 0},'Z','B','M','@','g','d', 0 ,'z','Q','b','m','f','e', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
|
||||
{"B5",'I', 0 ,'F','S','C','G','D','R','H','A','L',{-3, 3, 0},'Z','B','M','@','g','d','K','z','Q','b','m','f','e', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
|
||||
{"B6",'I', 0 ,'F','S','C','G','D','R','H','A','L',{-3, 3, 0},'Z','B','M','@','g','d','K','z','Q','b','m','f','e', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
|
||||
{"B7",'I', 0 ,'F','S','C','G','D','R','H','A','L',{-4, 3, 0},'Z','B','M','@','g','d','K','z','Q','b','m','f','e','\f', 0 ,'!','s','N', 0 , 0 ,'t', 0 , 0 ,'I','F'},
|
||||
{"B8",'I', 0 ,'F','S','C','G','D','R','H','A','L',{-4, 3, 0},'Z','B','M','@','g','d','K','z','Q','b','m','f','e','\f', 0x19,'!','s','N', 0 , 0 ,'t','p','q','I','F'},
|
||||
/* XXX 'f' probably not supported on F5 */
|
||||
{"F5",'I', 0 ,'F','S','C','G','D','R','H','A','L',{-3, 3, 0},'Z', 0 ,'M','@','g','d','K','z','Q', 0 ,'m','f','e','\f', 0 , 0 , 0 ,'N','T','P', 0 , 0 , 0 , 0 , 0 },
|
||||
{"D1",'I','i','F', 0 ,'C','G','D','R', 0 ,'A', 0 ,{ 0, 0, 0},'Z', 0 , 0 ,'@','g','d', 0 ,'z', 0 , 0 ,'m','f', 0 , 0 , 0 ,'!', 0 , 0 , 0 , 0 ,'t', 0 , 0 , 0 , 0 },
|
||||
{"D2",'I','i','F', 0 ,'C','G','D','R', 0 ,'A', 0 ,{ 0, 0, 0},'Z', 0 , 0 ,'@','g','d', 0 ,'z', 0 , 0 ,'m','f','e', 0 , 0 ,'!', 0 ,'N', 0 , 0 ,'t', 0 , 0 , 0 , 0 },
|
||||
{"D7",'I','i','F', 0 ,'C','G','D','R', 0 ,'A', 0 ,{ 0, 0, 0},'Z', 0 , 0 ,'@','g','d', 0 ,'z', 0 , 0 , 0 ,'f','e','\f', 0 ,'!', 0 ,'N', 0 , 0 ,'t', 0 , 0 , 0 , 0 },
|
||||
{"D8",'I','i','F', 0 ,'C','G','D','R', 0 ,'A', 0 ,{ 0, 0, 0},'Z', 0 , 0 ,'@','g','d', 0 ,'z', 0 , 0 ,'0','f','e','\f', 0 ,'!', 0 ,'N', 0 , 0 ,'t', 0 , 0 , 0 , 0 },
|
||||
};
|
||||
|
||||
|
||||
|
||||
extern struct mode_param mode_params[];
|
||||
|
||||
/* Define the different scan sources */
|
||||
|
@ -156,10 +115,10 @@ static int film_params[] = { 0, 1, 2, 3 };
|
|||
extern const int halftone_params[];
|
||||
|
||||
static const int dropout_params[] = {
|
||||
0x00, /* none */
|
||||
0x10, /* red */
|
||||
0x20, /* green */
|
||||
0x30 /* blue */
|
||||
0x00, /* none */
|
||||
0x10, /* red */
|
||||
0x20, /* green */
|
||||
0x30 /* blue */
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -169,17 +128,15 @@ static const int dropout_params[] = {
|
|||
* and one array to mark the user defined color correction (color_userdefined[]).
|
||||
*/
|
||||
static const int color_params[] = {
|
||||
0x00,
|
||||
0x01,
|
||||
0x00, /* None */
|
||||
0x01, /* Auto */
|
||||
0x01, /* User defined */
|
||||
0x10,
|
||||
0x20,
|
||||
0x40,
|
||||
0x80
|
||||
};
|
||||
|
||||
static const SANE_Range outline_emphasis_range = { -2, 2, 0 };
|
||||
|
||||
|
||||
void
|
||||
e2_dev_init(Epson_Device *dev, const char *devname, int conntype)
|
||||
{
|
||||
|
@ -187,6 +144,8 @@ e2_dev_init(Epson_Device *dev, const char *devname, int conntype)
|
|||
dev->model = NULL;
|
||||
dev->connection = conntype;
|
||||
|
||||
dev->model_id = 0;
|
||||
|
||||
dev->sane.name = devname;
|
||||
dev->sane.model = NULL;
|
||||
|
||||
|
@ -201,6 +160,8 @@ e2_dev_init(Epson_Device *dev, const char *devname, int conntype)
|
|||
dev->need_color_reorder = SANE_FALSE;
|
||||
dev->need_double_vertical = SANE_FALSE;
|
||||
|
||||
dev->cct_profile = &epson_cct_profiles[0]; /* default profile */
|
||||
|
||||
dev->cmd = &epson_cmd[EPSON_LEVEL_DEFAULT];
|
||||
|
||||
/* Change default level when using a network connection */
|
||||
|
@ -217,6 +178,26 @@ e2_dev_init(Epson_Device *dev, const char *devname, int conntype)
|
|||
SANE_Status
|
||||
e2_dev_post_init(struct Epson_Device *dev)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* find cct model id */
|
||||
for (i = 0; epson_cct_models[i].name != NULL; i++) {
|
||||
if (strcmp(epson_cct_models[i].name, dev->model) == 0) {
|
||||
dev->model_id = epson_cct_models[i].id;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* find cct profile */
|
||||
for (i = 0; epson_cct_profiles[i].model != 0xFF; i++) {
|
||||
if (epson_cct_profiles[i].model == dev->model_id) {
|
||||
dev->cct_profile = &epson_cct_profiles[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
DBG(1, "CCT model id is 0x%02x, profile offset %d\n", dev->model_id, i);
|
||||
|
||||
/* If we have been unable to obtain supported resolutions
|
||||
* due to the fact we are on the network transport,
|
||||
* add some convenient ones
|
||||
|
|
268
backend/epson2.c
268
backend/epson2.c
|
@ -197,6 +197,7 @@ static const SANE_String_Const dropout_list[] = {
|
|||
static const SANE_Bool color_userdefined[] = {
|
||||
SANE_FALSE,
|
||||
SANE_TRUE,
|
||||
SANE_TRUE,
|
||||
SANE_FALSE,
|
||||
SANE_FALSE,
|
||||
SANE_FALSE,
|
||||
|
@ -204,7 +205,8 @@ static const SANE_Bool color_userdefined[] = {
|
|||
};
|
||||
|
||||
static const SANE_String_Const color_list[] = {
|
||||
SANE_I18N("No Correction"),
|
||||
SANE_I18N("None"),
|
||||
SANE_I18N("Automatic"),
|
||||
SANE_I18N("User defined"),
|
||||
SANE_I18N("Impact-dot printers"),
|
||||
SANE_I18N("Thermal printers"),
|
||||
|
@ -213,6 +215,21 @@ static const SANE_String_Const color_list[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
/* cct profile has precedence over normal color correction */
|
||||
static const SANE_String_Const cct_mode_list[] = {
|
||||
"Automatic",
|
||||
"Reflective",
|
||||
"Colour negatives",
|
||||
"Monochrome negatives",
|
||||
"Colour positives",
|
||||
NULL
|
||||
};
|
||||
|
||||
enum {
|
||||
CCT_AUTO, CCT_REFLECTIVE, CCT_COLORNEG, CCT_MONONEG,
|
||||
CCT_COLORPOS
|
||||
};
|
||||
|
||||
/*
|
||||
* Gamma correction:
|
||||
* The A and B level scanners work differently than the D level scanners,
|
||||
|
@ -282,6 +299,7 @@ static const SANE_String_Const bay_list[] = {
|
|||
/* minimum, maximum, quantization */
|
||||
static const SANE_Range u8_range = { 0, 255, 0 };
|
||||
static const SANE_Range s8_range = { -127, 127, 0 };
|
||||
static const SANE_Range fx_range = { SANE_FIX(-2.0), SANE_FIX(2.0), 0 };
|
||||
|
||||
static const SANE_Range outline_emphasis_range = { -2, 2, 0 };
|
||||
|
||||
|
@ -907,7 +925,7 @@ sane_get_devices(const SANE_Device ***device_list, SANE_Bool __sane_unused__ loc
|
|||
|
||||
DBG(5, "%s - results:\n", __func__);
|
||||
|
||||
for (i = 0, dev = first_dev; i < num_devices; dev = dev->next, i++) {
|
||||
for (i = 0, dev = first_dev; i < num_devices && dev; dev = dev->next, i++) {
|
||||
DBG(1, " %d (%d): %s\n", i, dev->connection, dev->model);
|
||||
devlist[i] = &dev->sane;
|
||||
}
|
||||
|
@ -924,7 +942,7 @@ init_options(Epson_Scanner *s)
|
|||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < NUM_OPTIONS; ++i) {
|
||||
for (i = 0; i < NUM_OPTIONS; i++) {
|
||||
s->opt[i].size = sizeof(SANE_Word);
|
||||
s->opt[i].cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT;
|
||||
}
|
||||
|
@ -1134,16 +1152,14 @@ init_options(Epson_Scanner *s)
|
|||
s->opt[OPT_COLOR_CORRECTION].name = "color-correction";
|
||||
s->opt[OPT_COLOR_CORRECTION].title = SANE_I18N("Color correction");
|
||||
s->opt[OPT_COLOR_CORRECTION].desc =
|
||||
SANE_I18N
|
||||
("Sets the color correction table for the selected output device.");
|
||||
SANE_I18N("Sets the color correction table for the selected output device.");
|
||||
|
||||
s->opt[OPT_COLOR_CORRECTION].type = SANE_TYPE_STRING;
|
||||
s->opt[OPT_COLOR_CORRECTION].size = 32;
|
||||
s->opt[OPT_COLOR_CORRECTION].size = max_string_size(color_list);
|
||||
s->opt[OPT_COLOR_CORRECTION].cap |= SANE_CAP_ADVANCED;
|
||||
s->opt[OPT_COLOR_CORRECTION].constraint_type =
|
||||
SANE_CONSTRAINT_STRING_LIST;
|
||||
s->opt[OPT_COLOR_CORRECTION].constraint_type = SANE_CONSTRAINT_STRING_LIST;
|
||||
s->opt[OPT_COLOR_CORRECTION].constraint.string_list = color_list;
|
||||
s->val[OPT_COLOR_CORRECTION].w = 5; /* scanner default: CRT monitors */
|
||||
s->val[OPT_COLOR_CORRECTION].w = 0;
|
||||
|
||||
if (!s->hw->cmd->set_color_correction)
|
||||
s->opt[OPT_COLOR_CORRECTION].cap |= SANE_CAP_INACTIVE;
|
||||
|
@ -1173,25 +1189,7 @@ init_options(Epson_Scanner *s)
|
|||
if (!s->hw->cmd->set_threshold)
|
||||
s->opt[OPT_THRESHOLD].cap |= SANE_CAP_INACTIVE;
|
||||
|
||||
s->opt[OPT_CCT_GROUP].title =
|
||||
SANE_I18N("Color correction coefficients");
|
||||
s->opt[OPT_CCT_GROUP].desc =
|
||||
SANE_I18N("Matrix multiplication of RGB");
|
||||
s->opt[OPT_CCT_GROUP].type = SANE_TYPE_GROUP;
|
||||
s->opt[OPT_CCT_GROUP].cap = SANE_CAP_ADVANCED;
|
||||
|
||||
|
||||
/* color correction coefficients */
|
||||
s->opt[OPT_CCT_1].name = "cct-1";
|
||||
s->opt[OPT_CCT_2].name = "cct-2";
|
||||
s->opt[OPT_CCT_3].name = "cct-3";
|
||||
s->opt[OPT_CCT_4].name = "cct-4";
|
||||
s->opt[OPT_CCT_5].name = "cct-5";
|
||||
s->opt[OPT_CCT_6].name = "cct-6";
|
||||
s->opt[OPT_CCT_7].name = "cct-7";
|
||||
s->opt[OPT_CCT_8].name = "cct-8";
|
||||
s->opt[OPT_CCT_9].name = "cct-9";
|
||||
|
||||
/*
|
||||
s->opt[OPT_CCT_1].title = SANE_I18N("Green");
|
||||
s->opt[OPT_CCT_2].title = SANE_I18N("Shift green to red");
|
||||
s->opt[OPT_CCT_3].title = SANE_I18N("Shift green to blue");
|
||||
|
@ -1215,72 +1213,44 @@ init_options(Epson_Scanner *s)
|
|||
SANE_I18N("Adds to green based on blue level");
|
||||
s->opt[OPT_CCT_8].desc = SANE_I18N("Adds to red based on blue level");
|
||||
s->opt[OPT_CCT_9].desc = SANE_I18N("Controls blue level");
|
||||
|
||||
s->opt[OPT_CCT_1].type = SANE_TYPE_INT;
|
||||
s->opt[OPT_CCT_2].type = SANE_TYPE_INT;
|
||||
s->opt[OPT_CCT_3].type = SANE_TYPE_INT;
|
||||
s->opt[OPT_CCT_4].type = SANE_TYPE_INT;
|
||||
s->opt[OPT_CCT_5].type = SANE_TYPE_INT;
|
||||
s->opt[OPT_CCT_6].type = SANE_TYPE_INT;
|
||||
s->opt[OPT_CCT_7].type = SANE_TYPE_INT;
|
||||
s->opt[OPT_CCT_8].type = SANE_TYPE_INT;
|
||||
s->opt[OPT_CCT_9].type = SANE_TYPE_INT;
|
||||
|
||||
s->opt[OPT_CCT_1].cap |= SANE_CAP_ADVANCED | SANE_CAP_INACTIVE;
|
||||
s->opt[OPT_CCT_2].cap |= SANE_CAP_ADVANCED | SANE_CAP_INACTIVE;
|
||||
s->opt[OPT_CCT_3].cap |= SANE_CAP_ADVANCED | SANE_CAP_INACTIVE;
|
||||
s->opt[OPT_CCT_4].cap |= SANE_CAP_ADVANCED | SANE_CAP_INACTIVE;
|
||||
s->opt[OPT_CCT_5].cap |= SANE_CAP_ADVANCED | SANE_CAP_INACTIVE;
|
||||
s->opt[OPT_CCT_6].cap |= SANE_CAP_ADVANCED | SANE_CAP_INACTIVE;
|
||||
s->opt[OPT_CCT_7].cap |= SANE_CAP_ADVANCED | SANE_CAP_INACTIVE;
|
||||
s->opt[OPT_CCT_8].cap |= SANE_CAP_ADVANCED | SANE_CAP_INACTIVE;
|
||||
s->opt[OPT_CCT_9].cap |= SANE_CAP_ADVANCED | SANE_CAP_INACTIVE;
|
||||
|
||||
s->opt[OPT_CCT_1].unit = SANE_UNIT_NONE;
|
||||
s->opt[OPT_CCT_2].unit = SANE_UNIT_NONE;
|
||||
s->opt[OPT_CCT_3].unit = SANE_UNIT_NONE;
|
||||
s->opt[OPT_CCT_4].unit = SANE_UNIT_NONE;
|
||||
s->opt[OPT_CCT_5].unit = SANE_UNIT_NONE;
|
||||
s->opt[OPT_CCT_6].unit = SANE_UNIT_NONE;
|
||||
s->opt[OPT_CCT_7].unit = SANE_UNIT_NONE;
|
||||
s->opt[OPT_CCT_8].unit = SANE_UNIT_NONE;
|
||||
s->opt[OPT_CCT_9].unit = SANE_UNIT_NONE;
|
||||
|
||||
s->opt[OPT_CCT_1].constraint_type = SANE_CONSTRAINT_RANGE;
|
||||
s->opt[OPT_CCT_2].constraint_type = SANE_CONSTRAINT_RANGE;
|
||||
s->opt[OPT_CCT_3].constraint_type = SANE_CONSTRAINT_RANGE;
|
||||
s->opt[OPT_CCT_4].constraint_type = SANE_CONSTRAINT_RANGE;
|
||||
s->opt[OPT_CCT_5].constraint_type = SANE_CONSTRAINT_RANGE;
|
||||
s->opt[OPT_CCT_6].constraint_type = SANE_CONSTRAINT_RANGE;
|
||||
s->opt[OPT_CCT_7].constraint_type = SANE_CONSTRAINT_RANGE;
|
||||
s->opt[OPT_CCT_8].constraint_type = SANE_CONSTRAINT_RANGE;
|
||||
s->opt[OPT_CCT_9].constraint_type = SANE_CONSTRAINT_RANGE;
|
||||
|
||||
s->opt[OPT_CCT_1].constraint.range = &s8_range;
|
||||
s->opt[OPT_CCT_2].constraint.range = &s8_range;
|
||||
s->opt[OPT_CCT_3].constraint.range = &s8_range;
|
||||
s->opt[OPT_CCT_4].constraint.range = &s8_range;
|
||||
s->opt[OPT_CCT_5].constraint.range = &s8_range;
|
||||
s->opt[OPT_CCT_6].constraint.range = &s8_range;
|
||||
s->opt[OPT_CCT_7].constraint.range = &s8_range;
|
||||
s->opt[OPT_CCT_8].constraint.range = &s8_range;
|
||||
s->opt[OPT_CCT_9].constraint.range = &s8_range;
|
||||
|
||||
s->val[OPT_CCT_1].w = 32;
|
||||
s->val[OPT_CCT_2].w = 0;
|
||||
s->val[OPT_CCT_3].w = 0;
|
||||
s->val[OPT_CCT_4].w = 0;
|
||||
s->val[OPT_CCT_5].w = 32;
|
||||
s->val[OPT_CCT_6].w = 0;
|
||||
s->val[OPT_CCT_7].w = 0;
|
||||
s->val[OPT_CCT_8].w = 0;
|
||||
s->val[OPT_CCT_9].w = 32;
|
||||
*/
|
||||
|
||||
/* "Advanced" group: */
|
||||
s->opt[OPT_ADVANCED_GROUP].title = SANE_I18N("Advanced");
|
||||
s->opt[OPT_ADVANCED_GROUP].desc = "";
|
||||
s->opt[OPT_ADVANCED_GROUP].type = SANE_TYPE_GROUP;
|
||||
s->opt[OPT_ADVANCED_GROUP].cap = SANE_CAP_ADVANCED;
|
||||
s->opt[OPT_ADVANCED_GROUP].cap |= SANE_CAP_ADVANCED;
|
||||
|
||||
/* "Color correction" group: */
|
||||
s->opt[OPT_CCT_GROUP].title = SANE_I18N("Color correction");
|
||||
s->opt[OPT_CCT_GROUP].desc = "";
|
||||
s->opt[OPT_CCT_GROUP].type = SANE_TYPE_GROUP;
|
||||
s->opt[OPT_CCT_GROUP].cap |= SANE_CAP_ADVANCED;
|
||||
|
||||
s->opt[OPT_CCT_MODE].name = "cct-mode";
|
||||
s->opt[OPT_CCT_MODE].title = "CCT Mode";
|
||||
s->opt[OPT_CCT_MODE].desc = "Color correction profile mode";
|
||||
s->opt[OPT_CCT_MODE].type = SANE_TYPE_STRING;
|
||||
s->opt[OPT_CCT_MODE].cap |= SANE_CAP_ADVANCED;
|
||||
s->opt[OPT_CCT_MODE].size = max_string_size(cct_mode_list);
|
||||
s->opt[OPT_CCT_MODE].constraint_type = SANE_CONSTRAINT_STRING_LIST;
|
||||
s->opt[OPT_CCT_MODE].constraint.string_list = cct_mode_list;
|
||||
s->val[OPT_CCT_MODE].w = CCT_AUTO;
|
||||
|
||||
s->opt[OPT_CCT_PROFILE].name = "cct-profile";
|
||||
s->opt[OPT_CCT_PROFILE].title = "CCT Profile";
|
||||
s->opt[OPT_CCT_PROFILE].desc = "Color correction profile data";
|
||||
s->opt[OPT_CCT_PROFILE].type = SANE_TYPE_FIXED;
|
||||
s->opt[OPT_CCT_PROFILE].cap |= SANE_CAP_ADVANCED;
|
||||
s->opt[OPT_CCT_PROFILE].unit = SANE_UNIT_NONE;
|
||||
s->opt[OPT_CCT_PROFILE].constraint_type = SANE_CONSTRAINT_RANGE;
|
||||
s->opt[OPT_CCT_PROFILE].constraint.range = &fx_range;
|
||||
s->opt[OPT_CCT_PROFILE].size = 9 * sizeof(SANE_Word);
|
||||
s->val[OPT_CCT_PROFILE].wa = s->cct_table;
|
||||
|
||||
/* if (!s->hw->cmd->set_color_correction)
|
||||
s->opt[OPT_FILM_TYPE].cap |= SANE_CAP_INACTIVE;
|
||||
*/
|
||||
|
||||
/* mirror */
|
||||
s->opt[OPT_MIRROR].name = "mirror";
|
||||
|
@ -1663,6 +1633,7 @@ getvalue(SANE_Handle handle, SANE_Int option, void *value)
|
|||
case OPT_GAMMA_VECTOR_R:
|
||||
case OPT_GAMMA_VECTOR_G:
|
||||
case OPT_GAMMA_VECTOR_B:
|
||||
case OPT_CCT_PROFILE:
|
||||
memcpy(value, sval->wa, sopt->size);
|
||||
break;
|
||||
|
||||
|
@ -1678,15 +1649,8 @@ getvalue(SANE_Handle handle, SANE_Int option, void *value)
|
|||
case OPT_BRIGHTNESS:
|
||||
case OPT_SHARPNESS:
|
||||
case OPT_AUTO_EJECT:
|
||||
case OPT_CCT_1:
|
||||
case OPT_CCT_2:
|
||||
case OPT_CCT_3:
|
||||
case OPT_CCT_4:
|
||||
case OPT_CCT_5:
|
||||
case OPT_CCT_6:
|
||||
case OPT_CCT_7:
|
||||
case OPT_CCT_8:
|
||||
case OPT_CCT_9:
|
||||
/* case OPT_CCT_1:
|
||||
*/
|
||||
case OPT_THRESHOLD:
|
||||
case OPT_BIT_DEPTH:
|
||||
case OPT_WAIT_FOR_BUTTON:
|
||||
|
@ -1694,6 +1658,7 @@ getvalue(SANE_Handle handle, SANE_Int option, void *value)
|
|||
break;
|
||||
|
||||
case OPT_MODE:
|
||||
case OPT_CCT_MODE:
|
||||
case OPT_ADF_MODE:
|
||||
case OPT_HALFTONE:
|
||||
case OPT_DROPOUT:
|
||||
|
@ -1865,8 +1830,8 @@ setvalue(SANE_Handle handle, SANE_Int option, void *value, SANE_Int *info)
|
|||
Option_Value *sval = &(s->val[option]);
|
||||
|
||||
SANE_Status status;
|
||||
const SANE_String_Const *optval;
|
||||
int optindex;
|
||||
const SANE_String_Const *optval = NULL;
|
||||
int optindex = 0;
|
||||
SANE_Bool reload = SANE_FALSE;
|
||||
|
||||
DBG(17, "%s: option = %d, value = %p\n", __func__, option, value);
|
||||
|
@ -1880,16 +1845,9 @@ setvalue(SANE_Handle handle, SANE_Int option, void *value, SANE_Int *info)
|
|||
DBG(17, "%s: constrained val = %d\n", __func__,
|
||||
*(SANE_Word *) value);
|
||||
|
||||
s->option_has_changed = SANE_TRUE;
|
||||
|
||||
optval = NULL;
|
||||
optindex = 0;
|
||||
|
||||
|
||||
if (sopt->constraint_type == SANE_CONSTRAINT_STRING_LIST) {
|
||||
optval = search_string_list(sopt->constraint.string_list,
|
||||
(char *) value);
|
||||
|
||||
if (optval == NULL)
|
||||
return SANE_STATUS_INVAL;
|
||||
optindex = optval - sopt->constraint.string_list;
|
||||
|
@ -1900,21 +1858,12 @@ setvalue(SANE_Handle handle, SANE_Int option, void *value, SANE_Int *info)
|
|||
case OPT_GAMMA_VECTOR_R:
|
||||
case OPT_GAMMA_VECTOR_G:
|
||||
case OPT_GAMMA_VECTOR_B:
|
||||
case OPT_CCT_PROFILE:
|
||||
memcpy(sval->wa, value, sopt->size); /* Word arrays */
|
||||
break;
|
||||
|
||||
case OPT_CCT_1:
|
||||
case OPT_CCT_2:
|
||||
case OPT_CCT_3:
|
||||
case OPT_CCT_4:
|
||||
case OPT_CCT_5:
|
||||
case OPT_CCT_6:
|
||||
case OPT_CCT_7:
|
||||
case OPT_CCT_8:
|
||||
case OPT_CCT_9:
|
||||
sval->w = *((SANE_Word *) value); /* Simple values */
|
||||
break;
|
||||
|
||||
case OPT_CCT_MODE:
|
||||
case OPT_ADF_MODE:
|
||||
case OPT_DROPOUT:
|
||||
case OPT_FILM_TYPE:
|
||||
case OPT_BAY:
|
||||
|
@ -1957,16 +1906,19 @@ setvalue(SANE_Handle handle, SANE_Int option, void *value, SANE_Int *info)
|
|||
case OPT_MODE:
|
||||
{
|
||||
SANE_Bool isColor = mode_params[optindex].color;
|
||||
SANE_Bool userDefined =
|
||||
/* SANE_Bool userDefined =
|
||||
color_userdefined[s->val[OPT_COLOR_CORRECTION].w];
|
||||
|
||||
SANE_Bool canCCT = isColor && userDefined; */
|
||||
|
||||
sval->w = optindex;
|
||||
|
||||
/* halftoning available only on bw scans */
|
||||
if (s->hw->cmd->set_halftoning != 0)
|
||||
setOptionState(s,
|
||||
mode_params[optindex].depth ==
|
||||
1, OPT_HALFTONE, &reload);
|
||||
setOptionState(s, mode_params[optindex].depth == 1,
|
||||
OPT_HALFTONE, &reload);
|
||||
|
||||
/* disable dropout on non-color scans */
|
||||
setOptionState(s, !isColor, OPT_DROPOUT, &reload);
|
||||
|
||||
if (s->hw->cmd->set_color_correction)
|
||||
|
@ -1974,24 +1926,9 @@ setvalue(SANE_Handle handle, SANE_Int option, void *value, SANE_Int *info)
|
|||
OPT_COLOR_CORRECTION, &reload);
|
||||
|
||||
if (s->hw->cmd->set_color_correction_coefficients) {
|
||||
setOptionState(s, isColor
|
||||
/*XXX setOptionState(s, isColor
|
||||
&& userDefined, OPT_CCT_1, &reload);
|
||||
setOptionState(s, isColor
|
||||
&& userDefined, OPT_CCT_2, &reload);
|
||||
setOptionState(s, isColor
|
||||
&& userDefined, OPT_CCT_3, &reload);
|
||||
setOptionState(s, isColor
|
||||
&& userDefined, OPT_CCT_4, &reload);
|
||||
setOptionState(s, isColor
|
||||
&& userDefined, OPT_CCT_5, &reload);
|
||||
setOptionState(s, isColor
|
||||
&& userDefined, OPT_CCT_6, &reload);
|
||||
setOptionState(s, isColor
|
||||
&& userDefined, OPT_CCT_7, &reload);
|
||||
setOptionState(s, isColor
|
||||
&& userDefined, OPT_CCT_8, &reload);
|
||||
setOptionState(s, isColor
|
||||
&& userDefined, OPT_CCT_9, &reload);
|
||||
*/
|
||||
}
|
||||
|
||||
/* if binary, then disable the bit depth selection */
|
||||
|
@ -2015,10 +1952,6 @@ setvalue(SANE_Handle handle, SANE_Int option, void *value, SANE_Int *info)
|
|||
break;
|
||||
}
|
||||
|
||||
case OPT_ADF_MODE:
|
||||
sval->w = optindex;
|
||||
break;
|
||||
|
||||
case OPT_BIT_DEPTH:
|
||||
sval->w = *((SANE_Word *) value);
|
||||
mode_params[s->val[OPT_MODE].w].depth = sval->w;
|
||||
|
@ -2032,18 +1965,10 @@ setvalue(SANE_Handle handle, SANE_Int option, void *value, SANE_Int *info)
|
|||
|
||||
case OPT_COLOR_CORRECTION:
|
||||
{
|
||||
SANE_Bool f = color_userdefined[optindex];
|
||||
/* SANE_Bool f = color_userdefined[optindex]; */
|
||||
|
||||
sval->w = optindex;
|
||||
setOptionState(s, f, OPT_CCT_1, &reload);
|
||||
setOptionState(s, f, OPT_CCT_2, &reload);
|
||||
setOptionState(s, f, OPT_CCT_3, &reload);
|
||||
setOptionState(s, f, OPT_CCT_4, &reload);
|
||||
setOptionState(s, f, OPT_CCT_5, &reload);
|
||||
setOptionState(s, f, OPT_CCT_6, &reload);
|
||||
setOptionState(s, f, OPT_CCT_7, &reload);
|
||||
setOptionState(s, f, OPT_CCT_8, &reload);
|
||||
setOptionState(s, f, OPT_CCT_9, &reload);
|
||||
/*XXX setOptionState(s, f, OPT_CCT_1, &reload); */
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -2241,6 +2166,19 @@ sane_get_parameters(SANE_Handle handle, SANE_Parameters *params)
|
|||
return SANE_STATUS_GOOD;
|
||||
}
|
||||
|
||||
static void e2_load_cct_profile(struct Epson_Scanner *s, unsigned int index)
|
||||
{
|
||||
s->cct_table[0] = SANE_FIX(s->hw->cct_profile->cct[index][0]);
|
||||
s->cct_table[1] = SANE_FIX(s->hw->cct_profile->cct[index][1]);
|
||||
s->cct_table[2] = SANE_FIX(s->hw->cct_profile->cct[index][2]);
|
||||
s->cct_table[3] = SANE_FIX(s->hw->cct_profile->cct[index][3]);
|
||||
s->cct_table[4] = SANE_FIX(s->hw->cct_profile->cct[index][4]);
|
||||
s->cct_table[5] = SANE_FIX(s->hw->cct_profile->cct[index][5]);
|
||||
s->cct_table[6] = SANE_FIX(s->hw->cct_profile->cct[index][6]);
|
||||
s->cct_table[7] = SANE_FIX(s->hw->cct_profile->cct[index][7]);
|
||||
s->cct_table[8] = SANE_FIX(s->hw->cct_profile->cct[index][8]);
|
||||
}
|
||||
|
||||
/*
|
||||
* This function is part of the SANE API and gets called from the front end to
|
||||
* start the scan process.
|
||||
|
@ -2289,9 +2227,26 @@ sane_start(SANE_Handle handle)
|
|||
return status;
|
||||
}
|
||||
|
||||
|
||||
if (s->val[OPT_COLOR_CORRECTION].w == 1) { /* Automatic */
|
||||
|
||||
if (0) { /* XXX TPU */
|
||||
|
||||
/* XXX check this */
|
||||
if (s->val[OPT_FILM_TYPE].w == 0)
|
||||
e2_load_cct_profile(s, CCTP_COLORPOS);
|
||||
else
|
||||
e2_load_cct_profile(s, CCTP_COLORNEG);
|
||||
|
||||
} else {
|
||||
e2_load_cct_profile(s, CCTP_REFLECTIVE);
|
||||
}
|
||||
}
|
||||
|
||||
/* ESC m, user defined color correction */
|
||||
if (s->val[OPT_COLOR_CORRECTION].w == 1) {
|
||||
status = esci_set_color_correction_coefficients(s);
|
||||
if (color_userdefined[s->val[OPT_COLOR_CORRECTION].w]) {
|
||||
status = esci_set_color_correction_coefficients(s,
|
||||
s->cct_table);
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
return status;
|
||||
}
|
||||
|
@ -2304,7 +2259,6 @@ sane_start(SANE_Handle handle)
|
|||
if (status != SANE_STATUS_GOOD)
|
||||
return status;
|
||||
|
||||
|
||||
/*
|
||||
status = sane_get_parameters(handle, NULL);
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
|
|
321
backend/epson2.h
321
backend/epson2.h
|
@ -19,7 +19,7 @@
|
|||
#define epson2_h
|
||||
|
||||
#undef BACKEND_NAME
|
||||
#define BACKEND_NAME epson2
|
||||
#define BACKEND_NAME epson2
|
||||
#define DEBUG_NOT_STATIC
|
||||
|
||||
#include <sys/ioctl.h>
|
||||
|
@ -36,13 +36,12 @@
|
|||
#include <sys/types.h>
|
||||
#endif
|
||||
|
||||
#include <string.h> /* for memset and memcpy */
|
||||
#include <string.h> /* for memset and memcpy */
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
#include "../include/sane/sane.h"
|
||||
#include "../include/sane/sanei_backend.h"
|
||||
#include "../include/sane/sanei_debug.h"
|
||||
#include "sane/sane.h"
|
||||
#include "sane/sanei_backend.h"
|
||||
#include "sane/sanei_debug.h"
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define __func__ __FUNCTION__
|
||||
|
@ -51,10 +50,10 @@
|
|||
/* I cast my vote for C99... :) */
|
||||
#endif
|
||||
|
||||
#define EPSON2_CONFIG_FILE "epson2.conf"
|
||||
#define EPSON2_CONFIG_FILE "epson2.conf"
|
||||
|
||||
#ifndef PATH_MAX
|
||||
#define PATH_MAX (1024)
|
||||
#define PATH_MAX (1024)
|
||||
#endif
|
||||
|
||||
#ifndef XtNumber
|
||||
|
@ -67,12 +66,6 @@
|
|||
#define DEVICE_NAME_LEN (16) /* length of device name in extended status */
|
||||
|
||||
|
||||
/* some string constants that are used in the config file */
|
||||
|
||||
#define SANE_EPSON_CONFIG_USB "usb"
|
||||
#define SANE_EPSON_CONFIG_PIO "pio"
|
||||
#define SANE_EPSON_CONFIG_NET "net"
|
||||
|
||||
/* string constants for GUI elements that are not defined SANE-wide */
|
||||
|
||||
#define SANE_NAME_GAMMA_CORRECTION "gamma-correction"
|
||||
|
@ -86,14 +79,11 @@
|
|||
#define SANE_EPSON_WAIT_FOR_BUTTON_TITLE SANE_I18N("Wait for Button")
|
||||
#define SANE_EPSON_WAIT_FOR_BUTTON_DESC SANE_I18N("After sending the scan command, wait until the button on the scanner is pressed to actually start the scan process.");
|
||||
|
||||
/* misc constants */
|
||||
|
||||
#define LINES_SHUFFLE_MAX 17 /* 2 x 8 lines plus 1 */
|
||||
|
||||
#define SANE_EPSON_MAX_RETRIES 120 /* how often do we retry during warmup ? */
|
||||
|
||||
#ifndef MM_PER_INCH
|
||||
#define MM_PER_INCH 25.4
|
||||
#endif
|
||||
#define SANE_EPSON_MAX_RETRIES 14 /* warmup max retry */
|
||||
#define CMD_SIZE_EXT_STATUS 42
|
||||
|
||||
/* NOTE: you can find these codes with "man ascii". */
|
||||
#define STX 0x02
|
||||
|
@ -107,6 +97,8 @@
|
|||
#define S_ACK "\006"
|
||||
#define S_CAN "\030"
|
||||
|
||||
/* status bits */
|
||||
|
||||
#define STATUS_FER 0x80 /* fatal error */
|
||||
#define STATUS_NOT_READY 0x40 /* scanner is in use on another interface */
|
||||
#define STATUS_AREA_END 0x20 /* area end */
|
||||
|
@ -114,8 +106,6 @@
|
|||
#define STATUS_EXT_COMMANDS 0x02 /* scanners supports extended commands */
|
||||
#define STATUS_RESERVED 0x01 /* this should be always 0 */
|
||||
|
||||
#define CMD_SIZE_EXT_STATUS 42
|
||||
|
||||
#define EXT_STATUS_FER 0x80 /* fatal error */
|
||||
#define EXT_STATUS_FBF 0x40 /* flat bed scanner */
|
||||
#define EXT_STATUS_ADFT 0x20 /* page type ADF */
|
||||
|
@ -181,170 +171,197 @@
|
|||
* scanner with SANE get in touch with me and we can work something out - khk
|
||||
*/
|
||||
|
||||
#define EPSON_LEVEL_DEFAULT EPSON_LEVEL_B3
|
||||
#define EPSON_LEVEL_DEFAULT EPSON_LEVEL_B3
|
||||
|
||||
typedef struct
|
||||
struct EpsonCmd
|
||||
{
|
||||
char *level;
|
||||
char *level;
|
||||
|
||||
unsigned char request_identity;
|
||||
unsigned char request_identity2; /* new request identity command for Dx command level */
|
||||
unsigned char request_status;
|
||||
unsigned char request_condition;
|
||||
unsigned char set_color_mode;
|
||||
unsigned char start_scanning;
|
||||
unsigned char set_data_format;
|
||||
unsigned char set_resolution;
|
||||
unsigned char set_zoom;
|
||||
unsigned char set_scan_area;
|
||||
unsigned char set_bright;
|
||||
SANE_Range bright_range;
|
||||
unsigned char set_gamma;
|
||||
unsigned char set_halftoning;
|
||||
unsigned char set_color_correction;
|
||||
unsigned char initialize_scanner;
|
||||
unsigned char set_speed; /* B4 and later */
|
||||
unsigned char set_lcount;
|
||||
unsigned char mirror_image; /* B5 and later */
|
||||
unsigned char set_gamma_table; /* B4 and later */
|
||||
unsigned char set_outline_emphasis; /* B4 and later */
|
||||
unsigned char set_dither; /* B4 and later */
|
||||
unsigned char set_color_correction_coefficients; /* B3 and later */
|
||||
unsigned char request_extended_status; /* get extended status from scanner */
|
||||
unsigned char control_an_extension; /* for extension control */
|
||||
unsigned char eject; /* for extension control */
|
||||
unsigned char feed;
|
||||
unsigned char request_push_button_status;
|
||||
unsigned char control_auto_area_segmentation;
|
||||
unsigned char set_film_type; /* for extension control */
|
||||
unsigned char set_exposure_time; /* F5 only */
|
||||
unsigned char set_bay; /* F5 only */
|
||||
unsigned char set_threshold;
|
||||
unsigned char set_focus_position; /* B8 only */
|
||||
unsigned char request_focus_position; /* B8 only */
|
||||
unsigned char request_extended_identity;
|
||||
unsigned char request_scanner_status;
|
||||
} EpsonCmdRec, *EpsonCmd;
|
||||
unsigned char request_identity;
|
||||
unsigned char request_identity2; /* new request identity level Dx */
|
||||
unsigned char request_status;
|
||||
unsigned char request_condition;
|
||||
unsigned char set_color_mode;
|
||||
unsigned char start_scanning;
|
||||
unsigned char set_data_format;
|
||||
unsigned char set_resolution;
|
||||
unsigned char set_zoom;
|
||||
unsigned char set_scan_area;
|
||||
unsigned char set_bright;
|
||||
SANE_Range bright_range;
|
||||
unsigned char set_gamma;
|
||||
unsigned char set_halftoning;
|
||||
unsigned char set_color_correction;
|
||||
unsigned char initialize_scanner;
|
||||
unsigned char set_speed; /* B4 and later */
|
||||
unsigned char set_lcount;
|
||||
unsigned char mirror_image; /* B5 and later */
|
||||
unsigned char set_gamma_table; /* B4 and later */
|
||||
unsigned char set_outline_emphasis; /* B4 and later */
|
||||
unsigned char set_dither; /* B4 and later */
|
||||
unsigned char set_color_correction_coefficients; /* B3 and later */
|
||||
unsigned char request_extended_status; /* get extended status from scanner */
|
||||
unsigned char control_an_extension; /* for extension control */
|
||||
unsigned char eject; /* for extension control */
|
||||
unsigned char feed;
|
||||
unsigned char request_push_button_status;
|
||||
unsigned char control_auto_area_segmentation;
|
||||
unsigned char set_film_type; /* for extension control */
|
||||
unsigned char set_exposure_time; /* F5 only */
|
||||
unsigned char set_bay; /* F5 only */
|
||||
unsigned char set_threshold;
|
||||
unsigned char set_focus_position; /* B8 only */
|
||||
unsigned char request_focus_position; /* B8 only */
|
||||
unsigned char request_extended_identity;
|
||||
unsigned char request_scanner_status;
|
||||
};
|
||||
|
||||
enum
|
||||
{ OPT_NUM_OPTS =
|
||||
0, OPT_MODE_GROUP, OPT_MODE, OPT_BIT_DEPTH, OPT_HALFTONE, OPT_DROPOUT,
|
||||
OPT_BRIGHTNESS, OPT_SHARPNESS, OPT_GAMMA_CORRECTION, OPT_COLOR_CORRECTION,
|
||||
OPT_RESOLUTION, OPT_THRESHOLD, OPT_ADVANCED_GROUP, OPT_MIRROR,
|
||||
OPT_AAS, OPT_GAMMA_VECTOR_R, OPT_GAMMA_VECTOR_G, OPT_GAMMA_VECTOR_B,
|
||||
OPT_WAIT_FOR_BUTTON, OPT_CCT_GROUP, OPT_CCT_1, OPT_CCT_2, OPT_CCT_3,
|
||||
OPT_CCT_4, OPT_CCT_5, OPT_CCT_6, OPT_CCT_7, OPT_CCT_8, OPT_CCT_9,
|
||||
OPT_PREVIEW_GROUP, OPT_PREVIEW, OPT_GEOMETRY_GROUP,
|
||||
OPT_TL_X, OPT_TL_Y, OPT_BR_X, OPT_BR_Y, OPT_EQU_GROUP,
|
||||
OPT_SOURCE, OPT_AUTO_EJECT, OPT_FILM_TYPE, OPT_FOCUS, OPT_BAY,
|
||||
OPT_EJECT, OPT_ADF_MODE, NUM_OPTIONS
|
||||
enum {
|
||||
OPT_NUM_OPTS = 0,
|
||||
OPT_MODE_GROUP, OPT_MODE, OPT_BIT_DEPTH, OPT_HALFTONE, OPT_DROPOUT,
|
||||
OPT_BRIGHTNESS, OPT_SHARPNESS, OPT_GAMMA_CORRECTION, OPT_COLOR_CORRECTION,
|
||||
OPT_RESOLUTION, OPT_THRESHOLD, OPT_ADVANCED_GROUP, OPT_MIRROR,
|
||||
OPT_AAS, OPT_GAMMA_VECTOR_R, OPT_GAMMA_VECTOR_G, OPT_GAMMA_VECTOR_B,
|
||||
OPT_WAIT_FOR_BUTTON, OPT_CCT_GROUP, OPT_CCT_MODE, OPT_CCT_PROFILE,
|
||||
OPT_PREVIEW_GROUP, OPT_PREVIEW, OPT_GEOMETRY_GROUP,
|
||||
OPT_TL_X, OPT_TL_Y, OPT_BR_X, OPT_BR_Y, OPT_EQU_GROUP,
|
||||
OPT_SOURCE, OPT_AUTO_EJECT, OPT_FILM_TYPE, OPT_FOCUS, OPT_BAY,
|
||||
OPT_EJECT, OPT_ADF_MODE, NUM_OPTIONS
|
||||
};
|
||||
|
||||
typedef enum
|
||||
{ /* hardware connection to the scanner */
|
||||
SANE_EPSON_NODEV, /* default, no HW specified yet */
|
||||
SANE_EPSON_SCSI, /* SCSI interface */
|
||||
SANE_EPSON_PIO, /* parallel interface */
|
||||
SANE_EPSON_USB, /* USB interface */
|
||||
SANE_EPSON_NET /* network interface */
|
||||
{ /* hardware connection to the scanner */
|
||||
SANE_EPSON_NODEV, /* default, no HW specified yet */
|
||||
SANE_EPSON_SCSI, /* SCSI interface */
|
||||
SANE_EPSON_PIO, /* parallel interface */
|
||||
SANE_EPSON_USB, /* USB interface */
|
||||
SANE_EPSON_NET /* network interface */
|
||||
} Epson_Connection_Type;
|
||||
|
||||
struct epson_profile
|
||||
{
|
||||
unsigned int model;
|
||||
double cct[4][9];
|
||||
};
|
||||
|
||||
enum {
|
||||
CCTP_REFLECTIVE = 0, CCTP_COLORNEG,
|
||||
CCTP_MONONEG, CCTP_COLORPOS
|
||||
};
|
||||
|
||||
struct epson_profile_map
|
||||
{
|
||||
char *name;
|
||||
unsigned int id;
|
||||
};
|
||||
|
||||
extern const struct epson_profile epson_cct_profiles[];
|
||||
extern const struct epson_profile_map epson_cct_models[];
|
||||
|
||||
/* hardware description */
|
||||
|
||||
struct Epson_Device
|
||||
{
|
||||
struct Epson_Device *next;
|
||||
struct Epson_Device *next;
|
||||
|
||||
char *name;
|
||||
char *model;
|
||||
char *name;
|
||||
char *model;
|
||||
|
||||
unsigned int model_id;
|
||||
|
||||
SANE_Device sane;
|
||||
SANE_Int level;
|
||||
SANE_Range dpi_range;
|
||||
SANE_Device sane;
|
||||
SANE_Int level;
|
||||
SANE_Range dpi_range;
|
||||
|
||||
SANE_Range *x_range; /* x range w/out extension */
|
||||
SANE_Range *y_range; /* y range w/out extension */
|
||||
SANE_Range *x_range; /* x range w/out extension */
|
||||
SANE_Range *y_range; /* y range w/out extension */
|
||||
|
||||
SANE_Range fbf_x_range; /* flattbed x range */
|
||||
SANE_Range fbf_y_range; /* flattbed y range */
|
||||
SANE_Range adf_x_range; /* autom. document feeder x range */
|
||||
SANE_Range adf_y_range; /* autom. document feeder y range */
|
||||
SANE_Range tpu_x_range; /* transparency unit x range */
|
||||
SANE_Range tpu_y_range; /* transparency unit y range */
|
||||
SANE_Range fbf_x_range; /* flattbed x range */
|
||||
SANE_Range fbf_y_range; /* flattbed y range */
|
||||
SANE_Range adf_x_range; /* autom. document feeder x range */
|
||||
SANE_Range adf_y_range; /* autom. document feeder y range */
|
||||
SANE_Range tpu_x_range; /* transparency unit x range */
|
||||
SANE_Range tpu_y_range; /* transparency unit y range */
|
||||
|
||||
Epson_Connection_Type connection;
|
||||
/* hardware interface type */
|
||||
Epson_Connection_Type connection;
|
||||
|
||||
SANE_Int *res_list; /* list of resolutions */
|
||||
SANE_Int res_list_size; /* number of entries in this list */
|
||||
SANE_Int last_res; /* last selected resolution */
|
||||
SANE_Int last_res_preview; /* last selected preview resolution */
|
||||
SANE_Int *res_list; /* list of resolutions */
|
||||
SANE_Int res_list_size; /* number of entries in this list */
|
||||
SANE_Int last_res; /* last selected resolution */
|
||||
SANE_Int last_res_preview; /* last selected preview resolution */
|
||||
|
||||
SANE_Word *resolution_list; /* for display purposes we store a second copy */
|
||||
SANE_Word *resolution_list; /* for display purposes we store a second copy */
|
||||
|
||||
SANE_Bool extension; /* extension is installed */
|
||||
SANE_Int use_extension; /* use the installed extension */
|
||||
SANE_Bool TPU; /* TPU is installed */
|
||||
SANE_Bool TPU2; /* TPU2 is installed */
|
||||
SANE_Bool ADF; /* ADF is installed */
|
||||
SANE_Bool duplex; /* does the ADF handle duplex scanning */
|
||||
SANE_Bool focusSupport; /* does this scanner have support for "set focus position" ? */
|
||||
SANE_Bool color_shuffle; /* does this scanner need color shuffling */
|
||||
SANE_Bool extension; /* extension is installed */
|
||||
SANE_Int use_extension; /* use the installed extension */
|
||||
SANE_Bool TPU; /* TPU is installed */
|
||||
SANE_Bool TPU2; /* TPU2 is installed */
|
||||
SANE_Bool ADF; /* ADF is installed */
|
||||
SANE_Bool duplex; /* does the ADF handle duplex scanning */
|
||||
SANE_Bool focusSupport; /* does this scanner have support for "set focus position" ? */
|
||||
SANE_Bool color_shuffle; /* does this scanner need color shuffling */
|
||||
|
||||
SANE_Int maxDepth; /* max. color depth */
|
||||
SANE_Word *depth_list;
|
||||
SANE_Int maxDepth; /* max. color depth */
|
||||
SANE_Word *depth_list;
|
||||
|
||||
SANE_Int optical_res; /* optical resolution */
|
||||
SANE_Int max_line_distance;
|
||||
SANE_Int optical_res; /* optical resolution */
|
||||
SANE_Int max_line_distance;
|
||||
|
||||
SANE_Bool need_double_vertical;
|
||||
SANE_Bool need_color_reorder;
|
||||
SANE_Bool need_reset_on_source_change;
|
||||
SANE_Bool need_double_vertical;
|
||||
SANE_Bool need_color_reorder;
|
||||
SANE_Bool need_reset_on_source_change;
|
||||
|
||||
SANE_Bool wait_for_button; /* do we have to wait until the scanner button is pressed? */
|
||||
SANE_Bool wait_for_button; /* do we have to wait until the scanner button is pressed? */
|
||||
|
||||
SANE_Bool extended_commands;
|
||||
SANE_Bool extended_commands;
|
||||
|
||||
EpsonCmd cmd;
|
||||
struct EpsonCmd *cmd;
|
||||
const struct epson_profile *cct_profile;
|
||||
};
|
||||
|
||||
typedef struct Epson_Device Epson_Device;
|
||||
|
||||
|
||||
/* an instance of a scanner */
|
||||
|
||||
struct Epson_Scanner
|
||||
{
|
||||
struct Epson_Scanner *next;
|
||||
int fd;
|
||||
Epson_Device *hw;
|
||||
SANE_Option_Descriptor opt[NUM_OPTIONS];
|
||||
Option_Value val[NUM_OPTIONS];
|
||||
SANE_Parameters params;
|
||||
SANE_Bool block;
|
||||
SANE_Bool eof;
|
||||
SANE_Byte *buf, *end, *ptr;
|
||||
SANE_Bool canceling;
|
||||
SANE_Bool focusOnGlass;
|
||||
SANE_Byte currentFocusPosition;
|
||||
/* SANE_Word gamma_table [ 4] [ 256]; */
|
||||
SANE_Word gamma_table[3][256];
|
||||
SANE_Int retry_count;
|
||||
SANE_Byte *line_buffer[LINES_SHUFFLE_MAX];
|
||||
/* buffer lines for color shuffling */
|
||||
SANE_Int color_shuffle_line; /* current line number for color shuffling */
|
||||
SANE_Int line_distance; /* current line distance */
|
||||
SANE_Int current_output_line; /* line counter when color shuffling */
|
||||
SANE_Int lines_written; /* debug variable */
|
||||
SANE_Bool option_has_changed; /* did one of the options change it's value? */
|
||||
SANE_Int left, top, lcount;
|
||||
unsigned char *netbuf, *netptr;
|
||||
size_t netlen;
|
||||
struct Epson_Scanner *next;
|
||||
struct Epson_Device *hw;
|
||||
|
||||
int fd;
|
||||
|
||||
/* extended image data handshaking */
|
||||
SANE_Int ext_block_len;
|
||||
SANE_Int ext_last_len;
|
||||
SANE_Int ext_blocks;
|
||||
SANE_Int ext_counter;
|
||||
SANE_Option_Descriptor opt[NUM_OPTIONS];
|
||||
Option_Value val[NUM_OPTIONS];
|
||||
SANE_Parameters params;
|
||||
|
||||
SANE_Bool block;
|
||||
SANE_Bool eof;
|
||||
SANE_Byte *buf, *end, *ptr;
|
||||
SANE_Bool canceling;
|
||||
SANE_Word gamma_table[3][256];
|
||||
SANE_Word cct_table[9];
|
||||
SANE_Int retry_count;
|
||||
|
||||
/* buffer lines for color shuffling */
|
||||
SANE_Byte *line_buffer[LINES_SHUFFLE_MAX];
|
||||
SANE_Int color_shuffle_line; /* current line number for color shuffling */
|
||||
SANE_Int line_distance; /* current line distance */
|
||||
SANE_Int current_output_line; /* line counter when color shuffling */
|
||||
SANE_Int lines_written; /* debug variable */
|
||||
|
||||
SANE_Int left, top, lcount;
|
||||
SANE_Bool focusOnGlass;
|
||||
SANE_Byte currentFocusPosition;
|
||||
|
||||
/* network buffers */
|
||||
unsigned char *netbuf, *netptr;
|
||||
size_t netlen;
|
||||
|
||||
/* extended image data handshaking */
|
||||
SANE_Int ext_block_len;
|
||||
SANE_Int ext_last_len;
|
||||
SANE_Int ext_blocks;
|
||||
SANE_Int ext_counter;
|
||||
};
|
||||
|
||||
typedef struct Epson_Scanner Epson_Scanner;
|
||||
|
@ -357,4 +374,4 @@ struct mode_param
|
|||
int depth;
|
||||
};
|
||||
|
||||
#endif /* epson2_h */
|
||||
#endif
|
||||
|
|
|
@ -115,11 +115,12 @@ sanei_epson_net_read(Epson_Scanner *s, unsigned char *buf, size_t wanted,
|
|||
return 0;
|
||||
}
|
||||
|
||||
} else if (wanted < size && s->netlen == size) {
|
||||
/* } else if (wanted < size && s->netlen == size) { */
|
||||
} else {
|
||||
DBG(23, "%s: partial read\n", __func__);
|
||||
|
||||
read = sanei_tcp_read(s->fd, s->netbuf, size);
|
||||
if (read < 0) {
|
||||
if (read != size) {
|
||||
*status = SANE_STATUS_IO_ERROR;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -640,7 +640,6 @@ struct fujitsu
|
|||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
#define MM_PER_UNIT_UNFIX SANE_UNFIX(SANE_FIX(MM_PER_INCH / 1200.0))
|
||||
#define MM_PER_UNIT_FIX SANE_FIX(SANE_UNFIX(SANE_FIX(MM_PER_INCH / 1200.0)))
|
||||
|
||||
|
|
|
@ -69,7 +69,6 @@
|
|||
if (status != SANE_STATUS_GOOD) return status; \
|
||||
} while (SANE_FALSE)
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
|
||||
/* Flags */
|
||||
#define GENESYS_FLAG_UNTESTED (1 << 0) /* Print a warning for these scanners */
|
||||
|
|
|
@ -70,7 +70,6 @@
|
|||
#define HIBYTE(w) ((SANE_Byte)(((SANE_Word)(w) >> 8) & 0xFF))
|
||||
#define LOBYTE(w) ((SANE_Byte)(w))
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
|
||||
/* return if an error occured while the function was called */
|
||||
#ifdef MAX_DEBUG
|
||||
|
|
|
@ -47,6 +47,7 @@ extern int sanei_debug_hp; */
|
|||
#define DEBUG_DECLARE_ONLY
|
||||
|
||||
#include "../include/sane/config.h"
|
||||
#include "../include/sane/sanei_backend.h"
|
||||
|
||||
#include "../include/lassert.h"
|
||||
#include <string.h>
|
||||
|
|
|
@ -69,6 +69,7 @@
|
|||
extern int sanei_debug_hp; */
|
||||
#define DEBUG_DECLARE_ONLY
|
||||
#include "../include/sane/config.h"
|
||||
#include "../include/sane/sanei_backend.h"
|
||||
#include "../include/lalloca.h"
|
||||
|
||||
#include <stdio.h>
|
||||
|
|
|
@ -70,7 +70,6 @@
|
|||
|
||||
#define HP_CONFIG_FILE STRINGIFY(BACKEND_NAME) ".conf"
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
#define DEVPIX_PER_INCH 300.0
|
||||
#define MM_PER_DEVPIX (MM_PER_INCH / DEVPIX_PER_INCH)
|
||||
|
||||
|
|
|
@ -117,7 +117,6 @@
|
|||
typedef int (*rts8801_callback) (void *param, unsigned bytes, void *data);
|
||||
|
||||
#define DEBUG 1
|
||||
#define MM_PER_INCH 25.4
|
||||
#define SCANNER_UNIT_TO_FIXED_MM(number) SANE_FIX(number * MM_PER_INCH / 1200)
|
||||
#define FIXED_MM_TO_SCANNER_UNIT(number) SANE_UNFIX(number) * 1200 / MM_PER_INCH
|
||||
|
||||
|
|
|
@ -27,7 +27,6 @@
|
|||
#define min(a, b) (((a) < (b)) ? (a) : (b))
|
||||
#define max(a, b) (((a) > (b)) ? (a) : (b))
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
|
|
|
@ -52,6 +52,7 @@
|
|||
tables and stores the results of a scan. - 19/02/2003 Martijn
|
||||
*/
|
||||
|
||||
#include "../include/_stdint.h"
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define PACKED __attribute__ ((packed))
|
||||
|
|
|
@ -55,6 +55,7 @@
|
|||
#include <string.h>
|
||||
|
||||
#include "../include/sane/sanei_debug.h"
|
||||
#include "../include/_stdint.h"
|
||||
#include "hp5590_low.h"
|
||||
#include "hp5590_cmds.h"
|
||||
|
||||
|
|
|
@ -53,6 +53,7 @@
|
|||
|
||||
#include "../include/sane/sanei_debug.h"
|
||||
#include "../include/sane/sanei_usb.h"
|
||||
#include "../include/_stdint.h"
|
||||
#include "hp5590_low.h"
|
||||
|
||||
/* Debug levels */
|
||||
|
|
|
@ -521,7 +521,6 @@ typedef struct mode_page_connect
|
|||
} MP_CXN;
|
||||
|
||||
/* 1 inch = 6 picas = 72 points = 25.4 mm */
|
||||
#define MM_PER_INCH 25.4
|
||||
#define DEFAULT_MUD 1200 /* WHY ? */
|
||||
/* BASIC MEASUREMENT UNIT
|
||||
* 00H INCH
|
||||
|
|
|
@ -76,7 +76,6 @@
|
|||
#include "ibm.h"
|
||||
#include "ibm-scsi.c"
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
#define MAX(a,b) ((a) > (b) ? (a) : (b))
|
||||
|
||||
static int num_devices = 0;
|
||||
|
|
|
@ -201,7 +201,6 @@ getbitfield (unsigned char *pageaddr, int mask, int shift)
|
|||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
#define mmToIlu(mm) (((mm) * dev->x_resolution) / MM_PER_INCH)
|
||||
#define iluToMm(ilu) (((ilu) * MM_PER_INCH) / dev->x_resolution)
|
||||
|
||||
|
|
|
@ -477,6 +477,9 @@ sanei_lexmark_low_init (Lexmark_Device * dev)
|
|||
}
|
||||
|
||||
/* set up per model constant values */
|
||||
dev->shadow_regs[0xf3] = 0xf8;
|
||||
dev->shadow_regs[0xf4] = 0x7f;
|
||||
|
||||
switch (dev->model.sensor_type)
|
||||
{
|
||||
case X1100_B2_SENSOR:
|
||||
|
@ -519,8 +522,6 @@ sanei_lexmark_low_init (Lexmark_Device * dev)
|
|||
dev->shadow_regs[0xc9] = 0x3b;
|
||||
dev->shadow_regs[0xed] = 0xc2;
|
||||
dev->shadow_regs[0xee] = 0x02;
|
||||
dev->shadow_regs[0xf5] = 0xf8;
|
||||
dev->shadow_regs[0xf6] = 0x7f;
|
||||
status = SANE_STATUS_GOOD;
|
||||
break;
|
||||
case X1100_2C_SENSOR:
|
||||
|
@ -604,8 +605,6 @@ sanei_lexmark_low_init (Lexmark_Device * dev)
|
|||
dev->shadow_regs[0xca] = 0x0a;
|
||||
dev->shadow_regs[0xe2] = 0xf8;
|
||||
dev->shadow_regs[0xe3] = 0x2a;
|
||||
dev->shadow_regs[0xf3] = 0xf8;
|
||||
dev->shadow_regs[0xf4] = 0x7f;
|
||||
status = SANE_STATUS_GOOD;
|
||||
break;
|
||||
case X1200_USB2_SENSOR:
|
||||
|
@ -652,8 +651,6 @@ sanei_lexmark_low_init (Lexmark_Device * dev)
|
|||
dev->shadow_regs[0xca] = 0x0a;
|
||||
dev->shadow_regs[0xe2] = 0xf8;
|
||||
dev->shadow_regs[0xe3] = 0x2a;
|
||||
dev->shadow_regs[0xf3] = 0xf8;
|
||||
dev->shadow_regs[0xf4] = 0x7f;
|
||||
status = SANE_STATUS_GOOD;
|
||||
break;
|
||||
case A920_SENSOR:
|
||||
|
@ -702,8 +699,6 @@ sanei_lexmark_low_init (Lexmark_Device * dev)
|
|||
dev->shadow_regs[0xc2] = 0x80;
|
||||
dev->shadow_regs[0xc4] = 0x20;
|
||||
dev->shadow_regs[0xc8] = 0x04;
|
||||
dev->shadow_regs[0xf3] = 0xf8;
|
||||
dev->shadow_regs[0xf4] = 0x7f;
|
||||
status = SANE_STATUS_GOOD;
|
||||
break;
|
||||
case X1200_SENSOR:
|
||||
|
@ -1124,8 +1119,8 @@ sanei_lexmark_low_open_device (Lexmark_Device * dev)
|
|||
shadow_regs[0xb0] = 0x2c;
|
||||
shadow_regs[0x10] = 0x97;
|
||||
shadow_regs[0x10] = 0x87;
|
||||
shadow_regs[0xf4] = 0xf8;
|
||||
shadow_regs[0xf5] = 0x7f;
|
||||
shadow_regs[0xf3] = 0xf8;
|
||||
shadow_regs[0xf4] = 0x7f;
|
||||
#else
|
||||
result = sanei_usb_open (dev->sane.name, &(dev->devnum));
|
||||
#endif
|
||||
|
@ -2341,8 +2336,6 @@ sanei_lexmark_low_find_start_line (Lexmark_Device * dev)
|
|||
dev->shadow_regs[0x92] = 0x20;
|
||||
dev->shadow_regs[0xea] = 0x00;
|
||||
dev->shadow_regs[0xeb] = 0x00;
|
||||
dev->shadow_regs[0xf3] = 0xf8;
|
||||
dev->shadow_regs[0xf4] = 0x7f;
|
||||
break;
|
||||
case A920_SENSOR:
|
||||
dev->shadow_regs[0x2c] = 0x0d;
|
||||
|
|
|
@ -63,7 +63,6 @@
|
|||
#endif
|
||||
|
||||
#define MA1509_CONFIG_FILE "ma1509.conf"
|
||||
#define MM_PER_INCH 25.4
|
||||
|
||||
/* Convenience macros */
|
||||
#if defined(MIN)
|
||||
|
|
|
@ -162,7 +162,6 @@ getbitfield (unsigned char *pageaddr, int mask, int shift)
|
|||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
#define mmToIlu(mm) (((mm) * 1200) / MM_PER_INCH)
|
||||
#define iluToMm(ilu) (((ilu) * MM_PER_INCH) / 1200)
|
||||
|
||||
|
|
|
@ -85,7 +85,6 @@
|
|||
# define PATH_MAX 1024
|
||||
#endif
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
|
||||
#define SCSI_BUFF_SIZE sanei_scsi_max_request_size
|
||||
|
||||
|
|
|
@ -78,7 +78,6 @@
|
|||
|
||||
#endif /* HAVE_AUTHORIZATION */
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
|
||||
#define ENDIAN_TYPE(d) { unsigned i, test = 0; \
|
||||
for (i=0; i < sizeof(int); i++ ) \
|
||||
|
|
|
@ -55,7 +55,6 @@
|
|||
# define PATH_MAX 1024
|
||||
#endif
|
||||
#define MUSTEK_CONFIG_FILE "mustek.conf"
|
||||
#define MM_PER_INCH 25.4
|
||||
|
||||
#define MAX_WAITING_TIME 60 /* How long to wait for scanner to become ready */
|
||||
#define MAX_LINE_DIST 40 /* Extra lines needed for LD correction */
|
||||
|
|
|
@ -56,7 +56,6 @@
|
|||
#define DISABLE(OPTION) s->opt[OPTION].cap |= SANE_CAP_INACTIVE
|
||||
#define IS_ACTIVE(OPTION) (((s->opt[OPTION].cap) & SANE_CAP_INACTIVE) == 0)
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
#define MUSTEK_USB_CONFIG_FILE "mustek_usb.conf"
|
||||
#define SCAN_BUFFER_SIZE (64 * 1024)
|
||||
|
||||
|
|
|
@ -60,7 +60,6 @@
|
|||
#define RIE(function) do {status = function; if (status != SANE_STATUS_GOOD) \
|
||||
return status;} while (SANE_FALSE)
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
#define SCAN_BUFFER_SIZE (64 * 1024)
|
||||
#define MAX_RESOLUTIONS 12
|
||||
#define DEF_LINEARTTHRESHOLD 128
|
||||
|
|
|
@ -49,6 +49,7 @@
|
|||
|
||||
#include "../include/sane/config.h"
|
||||
#include "../include/lalloca.h"
|
||||
#include "../include/_stdint.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
|
|
|
@ -115,7 +115,6 @@
|
|||
#define BUILD 9
|
||||
|
||||
#define PIE_CONFIG_FILE "pie.conf"
|
||||
#define MM_PER_INCH 25.4
|
||||
|
||||
#define LINEART_STR "Lineart"
|
||||
#define HALFTONE_STR "Halftone"
|
||||
|
|
|
@ -63,7 +63,6 @@ extern int errno;
|
|||
|
||||
#include "pint.h"
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
#define DECIPOINTS_PER_MM (720.0 / MM_PER_INCH)
|
||||
#define TWELVEHUNDS_PER_MM (1200.0 / MM_PER_INCH)
|
||||
|
||||
|
|
|
@ -71,17 +71,17 @@
|
|||
#define MF4100_PID 0x26a3
|
||||
#define MF4600_PID 0x26b0
|
||||
#define MF4010_PID 0x26b4
|
||||
#define D480_PID 0x26ed
|
||||
/* the following are all untested */
|
||||
#define MF5630_PID 0x264e
|
||||
#define MF5650_PID 0x264f
|
||||
#define MF8100_PID 0x2659
|
||||
#define MF5730_PID 0x265d
|
||||
#define MF5750_PID 0x265e
|
||||
#define MF3110_PID 0x2660
|
||||
#define MF3200_PID 0x2684
|
||||
#define MF6500_PID 0x2686
|
||||
|
||||
|
||||
|
||||
enum iclass_state_t
|
||||
{
|
||||
state_idle,
|
||||
|
@ -178,6 +178,7 @@ activate (pixma_t * s, uint8_t x)
|
|||
{
|
||||
case MF4200_PID:
|
||||
case MF4600_PID:
|
||||
case D480_PID:
|
||||
return iclass_exec (s, &mf->cb, 1);
|
||||
break;
|
||||
case MF4100_PID:
|
||||
|
@ -198,11 +199,14 @@ select_source (pixma_t * s)
|
|||
{
|
||||
iclass_t *mf = (iclass_t *) s->subdriver;
|
||||
uint8_t *data = pixma_newcmd (&mf->cb, cmd_select_source, 10, 0);
|
||||
data[0] = (s->param->source == PIXMA_SOURCE_ADF) ? 2 : 1;
|
||||
data[0] = (s->param->source == PIXMA_SOURCE_ADF ||
|
||||
s->param->source == PIXMA_SOURCE_ADFDUP) ? 2 : 1;
|
||||
data[5] = (s->param->source == PIXMA_SOURCE_ADFDUP) ? 3 : 0;
|
||||
switch (s->cfg->pid)
|
||||
{
|
||||
case MF4200_PID:
|
||||
case MF4600_PID:
|
||||
case D480_PID:
|
||||
return iclass_exec (s, &mf->cb, 0);
|
||||
break;
|
||||
case MF4100_PID:
|
||||
|
@ -233,6 +237,7 @@ send_scan_param (pixma_t * s)
|
|||
{
|
||||
case MF4200_PID:
|
||||
case MF4600_PID:
|
||||
case D480_PID:
|
||||
return iclass_exec (s, &mf->cb, 0);
|
||||
break;
|
||||
case MF4100_PID:
|
||||
|
@ -308,6 +313,7 @@ read_error_info (pixma_t * s, void *buf, unsigned size)
|
|||
{
|
||||
case MF4200_PID:
|
||||
case MF4600_PID:
|
||||
case D480_PID:
|
||||
error = iclass_exec (s, &mf->cb, 0);
|
||||
break;
|
||||
case MF4100_PID:
|
||||
|
@ -667,16 +673,15 @@ static const pixma_scan_ops_t pixma_iclass_ops = {
|
|||
const pixma_config_t pixma_iclass_devices[] = {
|
||||
DEV ("Canon imageCLASS MF4270", "MF4270", MF4200_PID, 600, 640, 877, PIXMA_CAP_ADF),
|
||||
DEV ("Canon imageCLASS MF4150", "MF4100", MF4100_PID, 600, 640, 877, PIXMA_CAP_ADF),
|
||||
DEV ("Canon imageCLASS MF4690", "MF4690", MF4600_PID, 600, 640, 877, PIXMA_CAP_ADF),
|
||||
DEV ("Canon imageCLASS D480", "D480", D480_PID, 600, 640, 877, PIXMA_CAP_ADFDUP),
|
||||
/* FIXME: the following capabilities all need updating/verifying */
|
||||
DEV ("Canon imageCLASS MF5630", "MF5630", MF5630_PID, 600, 640, 877, PIXMA_CAP_ADF),
|
||||
DEV ("Canon laserBase MF5650", "MF5650", MF5650_PID, 600, 640, 877, PIXMA_CAP_ADF),
|
||||
DEV ("Canon imageCLASS MF8170c", "MF8170c", MF8100_PID, 600, 640, 877, PIXMA_CAP_ADF),
|
||||
DEV ("Canon imageCLASS MF5730", "MF5730", MF5730_PID, 600, 640, 877, PIXMA_CAP_ADF),
|
||||
DEV ("Canon imageCLASS MF5750", "MF5750", MF5750_PID, 600, 640, 877, PIXMA_CAP_ADF),
|
||||
DEV ("Canon imageCLASS MF3110", "MF3110", MF3110_PID, 600, 640, 877, 0),
|
||||
DEV ("Canon imageCLASS MF3240", "MF3240", MF3200_PID, 600, 640, 877, 0),
|
||||
DEV ("Canon imageClass MF6500", "MF6500", MF6500_PID, 600, 640, 877, PIXMA_CAP_ADF),
|
||||
DEV ("Canon imageCLASS MF4690", "MF4690", MF4600_PID, 600, 640, 877, PIXMA_CAP_ADF),
|
||||
DEV ("Canon imageCLASS MF4010", "MF4010", MF4010_PID, 600, 640, 877, 0),
|
||||
DEV (NULL, NULL, 0, 0, 0, 0, 0)
|
||||
};
|
||||
|
|
|
@ -1441,7 +1441,7 @@ const pixma_config_t pixma_mp150_devices[] = {
|
|||
DEVICE ("Canon PIXMA MP190", "MP190", MP190_PID, 600, 638, 877, PIXMA_CAP_CIS),
|
||||
|
||||
/* PIXMA 2009 vintage */
|
||||
DEVICE ("Canon PIXMA MX320", "MX320", MX330_PID, 1200, 638, 1050, PIXMA_CAP_CIS | PIXMA_CAP_ADF),
|
||||
DEVICE ("Canon PIXMA MX320", "MX320", MX320_PID, 1200, 638, 1050, PIXMA_CAP_CIS | PIXMA_CAP_ADF),
|
||||
DEVICE ("Canon PIXMA MX330", "MX330", MX330_PID, 1200, 638, 1050, PIXMA_CAP_CIS | PIXMA_CAP_ADF),
|
||||
DEVICE ("Canon PIXMA MX860", "MX860", MX860_PID, 2400, 638, 1050, PIXMA_CAP_CIS | PIXMA_CAP_ADFDUP),
|
||||
|
||||
|
|
|
@ -62,18 +62,20 @@
|
|||
#define IMAGE_BLOCK_SIZE (0xc000)
|
||||
#define CMDBUF_SIZE 512
|
||||
|
||||
#define MP730_PID 0x262f
|
||||
#define MP700_PID 0x2630
|
||||
|
||||
#define MP360_PID 0x263c
|
||||
#define MP370_PID 0x263d
|
||||
#define MP390_PID 0x263e
|
||||
#define MP700_PID 0x2630
|
||||
|
||||
#define MP740_PID 0x264c /* Untested */
|
||||
#define MP710_PID 0x264d
|
||||
#define MP730_PID 0x262f
|
||||
|
||||
#define MF5730_PID 0x265d /* Untested */
|
||||
#define MF5750_PID 0x265e /* Untested */
|
||||
#define MF5770_PID 0x265f
|
||||
|
||||
|
||||
enum mp730_state_t
|
||||
{
|
||||
state_idle,
|
||||
|
@ -285,6 +287,8 @@ handle_interrupt (pixma_t * s, int timeout)
|
|||
case MP360_PID:
|
||||
case MP370_PID:
|
||||
case MP390_PID:
|
||||
case MF5730_PID:
|
||||
case MF5750_PID:
|
||||
case MF5770_PID:
|
||||
if (len != 16)
|
||||
{
|
||||
|
@ -332,6 +336,8 @@ has_ccd_sensor (pixma_t * s)
|
|||
return (s->cfg->pid == MP360_PID ||
|
||||
s->cfg->pid == MP370_PID ||
|
||||
s->cfg->pid == MP390_PID ||
|
||||
s->cfg->pid == MF5730_PID ||
|
||||
s->cfg->pid == MF5750_PID ||
|
||||
s->cfg->pid == MF5770_PID);
|
||||
}
|
||||
|
||||
|
@ -369,27 +375,47 @@ step1 (pixma_t * s)
|
|||
return PIXMA_ENO_PAPER;
|
||||
if (has_ccd_sensor (s))
|
||||
{
|
||||
/* MF5770: Wait 10 sec before starting for 1st page only */
|
||||
if (s->cfg->pid == MF5770_PID && s->param->adf_pageid == 0)
|
||||
switch (s->cfg->pid)
|
||||
{
|
||||
tmo = 10; /* like Windows driver, 10 sec CCD calibration ? */
|
||||
while (--tmo >= 0)
|
||||
{
|
||||
error = handle_interrupt (s, 1000); \
|
||||
if (s->cancel) \
|
||||
return PIXMA_ECANCELED; \
|
||||
if (error != PIXMA_ECANCELED && error < 0) \
|
||||
return error;
|
||||
PDBG (pixma_dbg (2, "CCD Calibration ends in %d sec.\n", tmo));
|
||||
}
|
||||
case MF5730_PID:
|
||||
case MF5750_PID:
|
||||
case MF5770_PID:
|
||||
/* MF57x0: Wait 10 sec before starting for 1st page only */
|
||||
if (s->param->adf_pageid == 0)
|
||||
{
|
||||
tmo = 10; /* like Windows driver, 10 sec CCD calibration ? */
|
||||
while (--tmo >= 0)
|
||||
{
|
||||
error = handle_interrupt (s, 1000); \
|
||||
if (s->cancel) \
|
||||
return PIXMA_ECANCELED; \
|
||||
if (error != PIXMA_ECANCELED && error < 0) \
|
||||
return error;
|
||||
PDBG (pixma_dbg (2, "CCD Calibration ends in %d sec.\n", tmo));
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
activate (s, 0);
|
||||
error = calibrate (s);
|
||||
|
||||
/* MF5770: calibration returns PIXMA_STATUS_FAILED */
|
||||
if (s->cfg->pid == MF5770_PID && error == PIXMA_ECANCELED)
|
||||
error = read_error_info (s, NULL, 0);
|
||||
switch (s->cfg->pid)
|
||||
{
|
||||
case MF5730_PID:
|
||||
case MF5750_PID:
|
||||
case MF5770_PID:
|
||||
/* MF57x0: calibration returns PIXMA_STATUS_FAILED */
|
||||
if (error == PIXMA_ECANCELED)
|
||||
error = read_error_info (s, NULL, 0);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (error >= 0)
|
||||
error = activate (s, 0);
|
||||
|
@ -582,14 +608,17 @@ mp730_fill_buffer (pixma_t * s, pixma_imagebuf_t * ib)
|
|||
/* n = number of full lines (rows) we have in the buffer. */
|
||||
if (n != 0)
|
||||
{
|
||||
if (s->param->channels != 1 && s->cfg->pid != MF5770_PID)
|
||||
if (s->param->channels != 1 &&
|
||||
s->cfg->pid != MF5730_PID &&
|
||||
s->cfg->pid != MF5750_PID &&
|
||||
s->cfg->pid != MF5770_PID)
|
||||
{
|
||||
/* color */
|
||||
/* color, and not an MF57x0 */
|
||||
pack_rgb (mp->imgbuf, n, mp->raw_width, mp->lbuf);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* grayscale */
|
||||
/* grayscale or MF57x0 */
|
||||
memcpy (mp->lbuf, mp->imgbuf, n * s->param->line_size);
|
||||
}
|
||||
block_size = n * s->param->line_size;
|
||||
|
@ -690,7 +719,9 @@ const pixma_config_t pixma_mp730_devices[] = {
|
|||
DEVICE ("Canon MultiPASS MP730", "MP730", MP730_PID, 1200, 637, 868, PIXMA_CAP_ADF),
|
||||
DEVICE ("Canon MultiPASS MP740", "MP740", MP740_PID, 1200, 637, 868, PIXMA_CAP_ADF),
|
||||
|
||||
DEVICE ("Canon imageCLASS MF5770", "MF5770", MF5770_PID, 600, 640, 877, PIXMA_CAP_ADF),
|
||||
DEVICE ("Canon imageCLASS MF5730", "MF5730", MF5730_PID, 1200, 636, 868, PIXMA_CAP_ADF),
|
||||
DEVICE ("Canon imageCLASS MF5750", "MF5750", MF5750_PID, 1200, 636, 868, PIXMA_CAP_ADF),
|
||||
DEVICE ("Canon imageCLASS MF5770", "MF5770", MF5770_PID, 1200, 636, 868, PIXMA_CAP_ADF),
|
||||
|
||||
DEVICE (NULL, NULL, 0, 0, 0, 0, 0)
|
||||
};
|
||||
|
|
|
@ -475,7 +475,6 @@ typedef struct {
|
|||
|
||||
#ifndef __KERNEL__
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
|
||||
#define PLUSTEK_CONFIG_FILE "plustek_pp.conf"
|
||||
|
||||
|
|
|
@ -106,7 +106,6 @@
|
|||
|
||||
/************************ some definitions ***********************************/
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
|
||||
#define PLUSTEK_CONFIG_FILE "plustek.conf"
|
||||
|
||||
|
|
|
@ -71,7 +71,6 @@
|
|||
|
||||
#include "ricoh.h"
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
#define MAX(a,b) ((a) > (b) ? (a) : (b))
|
||||
|
||||
static int num_devices = 0;
|
||||
|
|
|
@ -57,7 +57,6 @@
|
|||
#define DBG_io2 7 /* io functions that are called very often */
|
||||
#define DBG_data 8 /* log image data */
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
|
||||
/* Flags */
|
||||
#define RTS8891_FLAG_UNTESTED (1 << 0) /* Print a warning for these scanners */
|
||||
|
|
|
@ -41,7 +41,6 @@
|
|||
#define BACKEND_NAME s9036
|
||||
#include "../include/sane/sanei_backend.h"
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
|
||||
#undef Byte
|
||||
#define Byte SANE_Byte
|
||||
|
|
|
@ -229,7 +229,6 @@ CDB;
|
|||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
#define length_quant SANE_UNFIX(SANE_FIX(MM_PER_INCH / 600))
|
||||
#define mmToIlu(mm) ((mm) / length_quant)
|
||||
#define iluToMm(ilu) ((ilu) * length_quant)
|
||||
|
|
|
@ -119,7 +119,6 @@ typedef struct SM3840_Scan
|
|||
|
||||
#define SM3840_CONFIG_FILE "sm3840.conf"
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
|
||||
#define SCAN_BUF_SIZE 65536
|
||||
|
||||
|
|
|
@ -192,7 +192,6 @@ struct sp15c
|
|||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
#define length_quant SANE_UNFIX(SANE_FIX(MM_PER_INCH / 1200.0))
|
||||
#define mmToIlu(mm) ((mm) / length_quant)
|
||||
#define iluToMm(ilu) ((ilu) * length_quant)
|
||||
|
|
|
@ -103,7 +103,6 @@ static ST400_Model st400_models[] = {
|
|||
{ 0, NULL, 0, NULL, 0, 0, 0, NULL, NULL, NULL, NULL }
|
||||
};
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
|
||||
static ST400_Device *st400_devices = NULL;
|
||||
static unsigned int st400_num_devices = 0;
|
||||
|
|
|
@ -76,7 +76,6 @@
|
|||
|
||||
#define TAMARACK_CONFIG_FILE "tamarack.conf"
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
|
||||
static int num_devices;
|
||||
static Tamarack_Device *first_dev;
|
||||
|
|
|
@ -214,7 +214,6 @@ getbitfield (unsigned char *pageaddr, int mask, int shift)
|
|||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
#define mmToIlu(mm) (((mm) * dev->def->x_resolution_max) / MM_PER_INCH)
|
||||
#define iluToMm(ilu) (((ilu) * MM_PER_INCH) / dev->def->x_resolution_max)
|
||||
|
||||
|
|
|
@ -237,7 +237,6 @@ getbitfield (unsigned char *pageaddr, int mask, int shift)
|
|||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
#define mmToIlu(mm) (((mm) * dev->def->x_resolution_max) / MM_PER_INCH)
|
||||
#define iluToMm(ilu) (((ilu) * MM_PER_INCH) / dev->def->x_resolution_max)
|
||||
|
||||
|
|
|
@ -228,7 +228,6 @@ getbitfield (unsigned char *pageaddr, int mask, int shift)
|
|||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
#define mmToIlu(mm) (((mm) * 300) / MM_PER_INCH)
|
||||
#define iluToMm(ilu) (((ilu) * MM_PER_INCH) / 300)
|
||||
|
||||
|
|
|
@ -46,7 +46,6 @@
|
|||
#ifndef test_h
|
||||
#define test_h
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
|
||||
typedef enum
|
||||
{
|
||||
|
|
|
@ -101,7 +101,6 @@ in ADF mode this is done often:
|
|||
|
||||
#define BACKEND_NAME umax
|
||||
#define UMAX_CONFIG_FILE "umax.conf"
|
||||
#define MM_PER_INCH 25.4
|
||||
|
||||
/* ------------------------------------------------------------ SANE INTERNATIONALISATION ------------------ */
|
||||
|
||||
|
|
|
@ -182,7 +182,6 @@ static const SANE_String_Const astra_models[] =
|
|||
#define UMAX_PP_MODE_GRAYSCALE 1
|
||||
#define UMAX_PP_MODE_COLOR 2
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
#define MM_TO_PIXEL(mm, res) (SANE_UNFIX(mm) * (float )res / MM_PER_INCH)
|
||||
#define PIXEL_TO_MM(px, res) (SANE_FIX((float )(px * MM_PER_INCH / (res / 10)) / 10.0))
|
||||
|
||||
|
|
|
@ -16,7 +16,6 @@
|
|||
|
||||
#define UNCONST(ptr) ((void *)(long)(ptr))
|
||||
|
||||
#define MM_PER_INCH 25.4
|
||||
#define PNT_PER_MM (1200. / MM_PER_INCH)
|
||||
|
||||
#define PADDING_SIZE 16
|
||||
|
|
|
@ -241,7 +241,7 @@
|
|||
:interface "USB Ethernet"
|
||||
:usbid "0x04a9" "0x172c"
|
||||
:status :good
|
||||
:comment "Works in flatbed and ADF simplex. ADF Duplex supported, but no report yet."
|
||||
:comment "All resolutions supported (up to 2400DPI). Flatbed, ADF simplex and Duplex supported."
|
||||
|
||||
:model "PIXMA MX7600"
|
||||
:interface "USB Ethernet"
|
||||
|
@ -297,6 +297,12 @@
|
|||
:status :good
|
||||
:comment "All resolutions supported (up to 600DPI)"
|
||||
|
||||
:model "imageCLASS D480"
|
||||
:interface "USB"
|
||||
:usbid "0x04a9" "0x26ed"
|
||||
:status :good
|
||||
:comment "All resolutions supported (up to 600DPI). Flatbed, ADF simplex and Duplex supported."
|
||||
|
||||
:model "imageCLASS MF5630"
|
||||
:interface "USB"
|
||||
:usbid "0x04a9" "0x264e"
|
||||
|
@ -331,7 +337,7 @@
|
|||
:interface "USB"
|
||||
:usbid "0x04a9" "0x265f"
|
||||
:status :good
|
||||
:comment "All resolutions supported (up to 600DPI) in color. Grayscale not working yet in preview (75 dpi capable ?)."
|
||||
:comment "All resolutions supported (up to 600DPI)."
|
||||
|
||||
:model "imageCLASS MF3110"
|
||||
:interface "USB"
|
||||
|
|
|
@ -30,7 +30,7 @@ MultiPASS MP700, MP730, PIXMA MP750 (no grayscale)
|
|||
.br
|
||||
ImageCLASS MF4010, MF4018, MF4120, MF4122, MF4140, MF4150
|
||||
.br
|
||||
ImageCLASS MF4270, MF5770
|
||||
ImageCLASS MF4270, MF5770, D480
|
||||
.RE
|
||||
.PP
|
||||
The following models are not well tested and/or the scanner sometimes hangs
|
||||
|
|
|
@ -56,6 +56,10 @@
|
|||
#define M_PI 3.14159265358979323846
|
||||
#endif
|
||||
|
||||
#ifndef MM_PER_INCH
|
||||
#define MM_PER_INCH 25.4
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SIGPROCMASK
|
||||
# define SIGACTION sigaction
|
||||
#else
|
||||
|
|
Plik diff jest za duży
Load Diff
Ładowanie…
Reference in New Issue