From 84357741a6a6e6430f199b2c3f7498e0e97da9ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Sun, 12 Feb 2023 17:35:53 +0100 Subject: New upstream version 1.2.1 --- backend/Makefile.am | 80 ++- backend/abaton.c | 18 +- backend/agfafocus.c | 10 +- backend/apple.c | 14 +- backend/artec.c | 4 +- backend/artec_eplus48u.c | 11 +- backend/avision.c | 555 +++++++++-------- backend/avision.h | 25 +- backend/bh.c | 15 +- backend/canon-sane.c | 29 +- backend/canon.c | 22 +- backend/canon630u-common.c | 13 +- backend/canon630u.c | 56 +- backend/canon_dr-cmd.h | 65 +- backend/canon_dr.c | 937 ++++++++++++++++++++++++++++- backend/canon_dr.conf.in | 4 + backend/canon_dr.h | 81 ++- backend/canon_lide70-common.c | 2 +- backend/canon_lide70.c | 10 +- backend/canon_pp-io.c | 4 +- backend/canon_pp.c | 25 +- backend/cardscan.c | 4 +- backend/coolscan.c | 14 +- backend/coolscan2.c | 15 +- backend/coolscan3.c | 15 +- backend/dc25.c | 45 +- backend/dell1600n_net.c | 10 +- backend/dll.c | 6 +- backend/dmc.c | 12 +- backend/epjitsu.c | 121 ++-- backend/epson.c | 12 +- backend/epson2.c | 17 +- backend/epson2_net.c | 10 +- backend/epson2_scsi.c | 4 +- backend/epson_scsi.c | 4 +- backend/epsonds-cmd.c | 6 +- backend/epsonds-net.c | 12 +- backend/epsonds.c | 6 +- backend/escl/escl.c | 97 ++- backend/escl/escl.h | 3 + backend/escl/escl_capabilities.c | 11 +- backend/escl/escl_devices.c | 77 ++- backend/escl/escl_newjob.c | 85 +-- backend/escl/escl_pdf.c | 51 +- backend/escl/escl_scan.c | 1 + backend/escl/escl_tiff.c | 14 +- backend/fujitsu-scsi.h | 9 +- backend/fujitsu.c | 56 +- backend/fujitsu.conf.in | 36 ++ backend/fujitsu.h | 2 +- backend/genesys.conf.in | 3 + backend/genesys/fwd.h | 2 +- backend/genesys/genesys.cpp | 226 ++++--- backend/genesys/genesys.h | 8 + backend/genesys/gl124.cpp | 37 +- backend/genesys/gl124.h | 4 +- backend/genesys/gl646.cpp | 68 +-- backend/genesys/gl646.h | 4 +- backend/genesys/gl841.cpp | 119 +++- backend/genesys/gl841.h | 4 +- backend/genesys/gl842.cpp | 21 +- backend/genesys/gl842.h | 4 +- backend/genesys/gl843.cpp | 51 +- backend/genesys/gl843.h | 4 +- backend/genesys/gl846.cpp | 32 +- backend/genesys/gl846.h | 4 +- backend/genesys/gl847.cpp | 77 ++- backend/genesys/gl847.h | 4 +- backend/genesys/image.h | 2 +- backend/genesys/image_pipeline.cpp | 2 +- backend/genesys/image_pixel.h | 2 +- backend/genesys/low.cpp | 110 ++-- backend/genesys/low.h | 37 +- backend/genesys/scanner_interface_usb.cpp | 6 +- backend/genesys/serialize.cpp | 0 backend/genesys/serialize.h | 2 +- backend/genesys/tables_model.cpp | 11 +- backend/genesys/test_scanner_interface.cpp | 4 +- backend/gt68xx_low.c | 4 +- backend/hp.c | 10 +- backend/hp3500.c | 11 +- backend/hp3900_config.c | 78 +-- backend/hp3900_debug.c | 18 +- backend/hp3900_rts8822.c | 24 +- backend/hp3900_sane.c | 18 +- backend/hp4200.c | 12 +- backend/hp5400_internal.c | 8 +- backend/hp5400_sane.c | 10 +- backend/hp5590_low.c | 5 +- backend/hs2p.c | 6 +- backend/ibm.c | 3 +- backend/kodak-cmd.h | 12 +- backend/kodak.c | 10 +- backend/kodakaio.c | 8 +- backend/kvs1025.c | 8 +- backend/kvs20xx_opt.c | 5 - backend/kvs40xx.c | 9 +- backend/kvs40xx_opt.c | 5 - backend/lexmark_low.c | 24 +- backend/ma1509.c | 2 +- backend/magicolor.c | 2 +- backend/microtek.c | 36 +- backend/microtek2.c | 122 ++-- backend/microtek2.h | 2 +- backend/mustek.c | 95 ++- backend/mustek_usb2.c | 12 +- backend/mustek_usb2_asic.c | 414 ++++++------- backend/mustek_usb2_asic.h | 179 +++--- backend/mustek_usb2_high.c | 54 +- backend/mustek_usb2_reflective.c | 40 +- backend/mustek_usb2_transparent.c | 22 +- backend/mustek_usb_high.c | 4 +- backend/nec.c | 16 +- backend/net.c | 18 +- backend/niash.c | 2 +- backend/p5.c | 8 +- backend/p5_device.c | 248 ++++---- backend/pie-scsidef.h | 9 +- backend/pie.c | 3 - backend/pieusb.c | 4 +- backend/pieusb_scancmd.c | 3 +- backend/pieusb_specific.c | 6 +- backend/pixma/pixma.c | 2 +- backend/pixma/pixma_bjnp.c | 2 +- backend/pixma/pixma_common.c | 2 +- backend/pixma/pixma_imageclass.c | 23 +- backend/pixma/pixma_mp150.c | 61 +- backend/pixma/pixma_mp730.c | 26 +- backend/plustek-pp.h | 9 - backend/plustek-pp_dbg.h | 11 - backend/plustek-pp_detect.c | 25 - backend/plustek-pp_hwdefs.h | 13 - backend/plustek-pp_image.c | 4 - backend/plustek-pp_io.c | 63 -- backend/plustek-pp_misc.c | 435 ------------- backend/plustek-pp_motor.c | 10 +- backend/plustek-pp_p12.c | 2 +- backend/plustek-pp_p48xx.c | 6 +- backend/plustek-pp_procs.h | 17 - backend/plustek-pp_ptdrv.c | 703 ---------------------- backend/plustek-pp_scan.h | 47 -- backend/plustek-pp_scandata.h | 10 - backend/plustek-usbshading.c | 2 +- backend/qcam.c | 32 +- backend/ricoh.c | 15 +- backend/rts8891.c | 21 +- backend/s9036.c | 16 +- backend/sm3600-scanusb.c | 6 +- backend/sm3600.c | 6 +- backend/sm3840.c | 9 +- backend/sm3840_lib.c | 15 +- backend/sm3840_lib.h | 10 +- backend/snapscan-options.c | 8 +- backend/snapscan-scsi.c | 3 +- backend/sp15c-scsi.h | 9 +- backend/sp15c.c | 24 +- backend/st400.c | 8 +- backend/stv680.c | 14 +- backend/tamarack.c | 8 +- backend/test-picture.c | 99 +-- backend/test.c | 172 +++--- backend/test.h | 5 +- backend/umax-scsidef.h | 2 +- backend/umax-usb.c | 6 +- backend/umax1220u.c | 44 +- backend/umax_pp_low.c | 378 +----------- backend/v4l.c | 4 +- backend/xerox_mfp.c | 45 +- backend/xerox_mfp.conf.in | 3 + backend/xerox_mfp.h | 2 + 170 files changed, 3706 insertions(+), 3903 deletions(-) delete mode 100644 backend/genesys/serialize.cpp (limited to 'backend') diff --git a/backend/Makefile.am b/backend/Makefile.am index e56e7f1..35ad206 100644 --- a/backend/Makefile.am +++ b/backend/Makefile.am @@ -18,6 +18,8 @@ DIST_LIBS_LDFLAGS = $(AM_LDFLAGS) -rpath '$(libdir)' -version-number $(V_MAJOR): LIBTOOL += --silent FIRMWARE_DIRS = artec_eplus48u gt68xx snapscan epjitsu +BUILT_SOURCES = + # Needed by most backends as they add sane_strstatus.lo to their list # of libraries to link with via libsane_${BACKEND}_la_LIBADD. Due to # the implicit dependency, automake does not notice the need to clean @@ -93,7 +95,8 @@ becfg: $(BACKEND_CONFS) SUFFIXES = .conf.in .conf .conf.in.conf: - @echo Generating $@ from $^ + $(AM_V_GEN) + @if $(AM_V_P); then echo Generating $@ from $^; fi @sed -e 's|@DATADIR@|$(datadir)|g' \ -e 's|@CONFIGDIR@|$(configdir)|g' \ -e 's|@DOCDIR@|$(docdir)|g' \ @@ -109,9 +112,9 @@ install-data-hook: install-becfg install-firmware-path $(INSTALL_LOCKPATH) # are not lost. install-becfg: becfg @# Libtool has a bug where it will sometimes symlink the last - @# installed library in $(sanelibdir) to $(sanelibdir)/libsane.*. - @# Having two libsane's can cause issues so get rid of it. - -rm -f $(DESTDIR)$(sanelibdir)/libsane.* + @# installed library in $(execsanelibdir) to libsane.*, which + @# causes a conflict with the actual libsane.* in $(libdir). + -rm -f $(DESTDIR)$(execsanelibdir)/libsane.* test -z "$(configdir)" || $(MKDIR_P) "$(DESTDIR)$(configdir)" test -z "$(configdir)/dll.d" || $(MKDIR_P) "$(DESTDIR)$(configdir)/dll.d" @list="$(BACKEND_CONFS_ENABLED) saned.conf dll.conf"; for cfg in $$list; do \ @@ -225,8 +228,11 @@ EXTRA_LTLIBRARIES = $(be_convenience_libs) $(be_dlopen_libs) lib_LTLIBRARIES = libsane.la -sanelibdir = $(libdir)/sane -sanelib_LTLIBRARIES = $(BACKEND_LIBS_ENABLED) libsane-dll.la +# The libraries in $(libdir)/sane are platform-dependent files, so they +# should be installed during "make install-exec". For that reason, the +# variable names here must contain "exec". +execsanelibdir = $(libdir)/sane +execsanelib_LTLIBRARIES = $(BACKEND_LIBS_ENABLED) libsane-dll.la COMMON_LIBS = ../lib/liblib.la $(XML_LIBS) @@ -678,6 +684,7 @@ libsane_epson_la_LIBADD = $(COMMON_LIBS) \ ../sanei/sanei_usb.lo \ ../sanei/sanei_scsi.lo \ ../sanei/sanei_pio.lo \ + ../sanei/sanei_directio.lo \ $(SCSI_LIBS) $(USB_LIBS) $(RESMGR_LIBS) EXTRA_DIST += epson.conf.in @@ -699,6 +706,7 @@ libsane_epson2_la_LIBADD = $(COMMON_LIBS) \ ../sanei/sanei_pio.lo \ ../sanei/sanei_tcp.lo \ ../sanei/sanei_udp.lo \ + ../sanei/sanei_directio.lo \ $(SCSI_LIBS) $(USB_LIBS) $(SOCKET_LIBS) $(MATH_LIB) $(RESMGR_LIBS) EXTRA_DIST += epson2.conf.in @@ -853,6 +861,7 @@ libsane_hp_la_LIBADD = $(COMMON_LIBS) \ ../sanei/sanei_scsi.lo \ ../sanei/sanei_pio.lo \ ../sanei/sanei_thread.lo \ + ../sanei/sanei_directio.lo \ $(SCSI_LIBS) $(USB_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS) EXTRA_DIST += hp.conf.in # TODO: These should be moved to ../docs/hp; don't belong here. @@ -1243,6 +1252,7 @@ libsane_mustek_la_LIBADD = $(COMMON_LIBS) \ ../sanei/sanei_thread.lo \ ../sanei/sanei_ab306.lo \ ../sanei/sanei_pa4s2.lo \ + ../sanei/sanei_directio.lo \ $(IEEE1284_LIBS) $(SCSI_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS) EXTRA_DIST += mustek.conf.in # TODO: Why are these distributed but not compiled? @@ -1261,6 +1271,7 @@ libsane_mustek_pp_la_LIBADD = $(COMMON_LIBS) \ ../sanei/sanei_config.lo \ sane_strstatus.lo \ ../sanei/sanei_pa4s2.lo \ + ../sanei/sanei_directio.lo \ $(MATH_LIB) $(IEEE1284_LIBS) EXTRA_DIST += mustek_pp.conf.in # TODO: Why are these distributed but not compiled? @@ -1420,7 +1431,9 @@ libsane_pint_la_LIBADD = $(COMMON_LIBS) \ ../sanei/sanei_config.lo \ sane_strstatus.lo -libpixma_la_SOURCES = pixma/pixma.c \ +libpixma_la_SOURCES = \ + pixma/pixma_sane_options.h \ + pixma/pixma.c \ pixma/pixma.h \ pixma/pixma_io_sanei.c \ pixma/pixma_io.h \ @@ -1437,26 +1450,25 @@ libpixma_la_SOURCES = pixma/pixma.c \ pixma/pixma_rename.h libpixma_la_CPPFLAGS = $(AM_CPPFLAGS) $(XML_CFLAGS) -DBACKEND_NAME=pixma -# Generate options files included by pixma/pixma.c from said file. -# The circular dependency means we cannot add it as a prerequisite -# for the targets that build the options files. - -$(srcdir)/pixma/pixma.c: \ - $(srcdir)/pixma/pixma_sane_options.h \ - $(srcdir)/pixma/pixma_sane_options.c - -$(srcdir)/pixma/pixma_sane_options.h: - @echo Generating $@ from $(@D)/pixma.c - @(cd $(@D); $(PYTHON) scripts/pixma_gen_options.py h < pixma.c > $(@F)) -$(srcdir)/pixma/pixma_sane_options.c: - @echo Generating $@ from $(@D)/pixma.c - @(cd $(@D); $(PYTHON) scripts/pixma_gen_options.py < pixma.c > $(@F)) +$(srcdir)/pixma/pixma_sane_options.h: $(srcdir)/pixma/pixma.c + @if $(AM_V_P); then \ + echo "Generating pixma/$(@F) from pixma/$(^F)"; \ + else \ + echo " GEN pixma/$(@F)"; \ + fi + @$(PYTHON) $(srcdir)/pixma/scripts/pixma_gen_options.py h < $^ > $@ +$(srcdir)/pixma/pixma_sane_options.c: $(srcdir)/pixma/pixma.c + @if $(AM_V_P); then \ + echo "Generating pixma/$(@F) from pixma/$(^F)"; \ + else \ + echo " GEN pixma/$(@F)"; \ + fi + @$(PYTHON) $(srcdir)/pixma/scripts/pixma_gen_options.py < $^ > $@ +BUILT_SOURCES += pixma/pixma_sane_options.c +BUILT_SOURCES += pixma/pixma_sane_options.h EXTRA_DIST += pixma/pixma_sane_options.c -EXTRA_DIST += pixma/pixma_sane_options.h EXTRA_DIST += pixma/scripts/pixma_gen_options.py -CLEANFILES += pixma/pixma_sane_options.c -CLEANFILES += pixma/pixma_sane_options.h nodist_libsane_pixma_la_SOURCES = pixma-s.c libsane_pixma_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=pixma @@ -1498,7 +1510,16 @@ libplustek_pp_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=plustek_pp nodist_libsane_plustek_pp_la_SOURCES = plustek_pp-s.c libsane_plustek_pp_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=plustek_pp libsane_plustek_pp_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS) -libsane_plustek_pp_la_LIBADD = $(COMMON_LIBS) libplustek_pp.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_pp.lo ../sanei/sanei_thread.lo $(MATH_LIB) $(IEEE1284_LIBS) $(SANEI_THREAD_LIBS) +libsane_plustek_pp_la_LIBADD = $(COMMON_LIBS) \ + libplustek_pp.la \ + ../sanei/sanei_init_debug.lo \ + ../sanei/sanei_constrain_value.lo \ + ../sanei/sanei_config.lo \ + sane_strstatus.lo \ + ../sanei/sanei_pp.lo \ + ../sanei/sanei_thread.lo \ + ../sanei/sanei_directio.lo \ + $(MATH_LIB) $(IEEE1284_LIBS) $(SANEI_THREAD_LIBS) EXTRA_DIST += plustek_pp.conf.in # TODO: Why are these distributed but not compiled? EXTRA_DIST += plustek-pp_dac.c plustek-pp_dbg.h plustek-pp_detect.c plustek-pp_genericio.c plustek-pp_hwdefs.h plustek-pp_image.c plustek-pp_io.c plustek-pp_map.c plustek-pp_misc.c plustek-pp_models.c plustek-pp_motor.c plustek-pp_p12.c plustek-pp_p12ccd.c plustek-pp_p48xx.c plustek-pp_p9636.c plustek-pp_procfs.c plustek-pp_procs.h plustek-pp_ptdrv.c plustek-pp_scale.c plustek-pp_scan.h plustek-pp_scandata.h plustek-pp_sysdep.h plustek-pp_tpa.c plustek-pp_types.h plustek-pp_wrapper.c @@ -1528,7 +1549,8 @@ libsane_qcam_la_LIBADD = $(COMMON_LIBS) \ ../sanei/sanei_constrain_value.lo \ ../sanei/sanei_config.lo \ sane_strstatus.lo \ - ../sanei/sanei_pio.lo + ../sanei/sanei_pio.lo \ + ../sanei/sanei_directio.lo EXTRA_DIST += qcam.conf.in @@ -1903,6 +1925,7 @@ libsane_umax_pp_la_LIBADD = $(COMMON_LIBS) \ ../sanei/sanei_init_debug.lo \ ../sanei/sanei_constrain_value.lo \ ../sanei/sanei_config.lo \ + ../sanei/sanei_directio.lo \ sane_strstatus.lo \ $(MATH_LIB) EXTRA_DIST += umax_pp.conf.in @@ -1939,6 +1962,7 @@ libsane_xerox_mfp_la_LIBADD = $(COMMON_LIBS) \ $(MATH_LIB) $(SOCKET_LIBS) $(USB_LIBS) $(RESMGR_LIBS) EXTRA_DIST += xerox_mfp.conf.in +nodist_libdll_preload_la_SOURCES = dll-preload.h libdll_preload_la_SOURCES = dll.c libdll_preload_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=dll -DENABLE_PRELOAD libdll_preload_la_LIBADD = ../sanei/sanei_usb.lo \ @@ -1947,7 +1971,7 @@ libdll_la_SOURCES = dll.c libdll_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=dll libdll_la_LIBADD = ../sanei/sanei_usb.lo \ $(USB_LIBS) $(XML_LIBS) -BUILT_SOURCES = dll-preload.h +BUILT_SOURCES += dll-preload.h CLEANFILES += dll-preload.h nodist_libsane_dll_la_SOURCES = dll-s.c @@ -2001,6 +2025,7 @@ PRELOADABLE_BACKENDS_LIBS = \ ../sanei/sanei_tcp.lo \ ../sanei/sanei_udp.lo \ ../sanei/sanei_magic.lo \ + ../sanei/sanei_directio.lo \ $(LIBV4L_LIBS) $(MATH_LIB) \ $(IEEE1284_LIBS) \ $(TIFF_LIBS) \ @@ -2035,6 +2060,7 @@ PRELOADABLE_BACKENDS_DEPS = ../sanei/sanei_config2.lo \ ../sanei/sanei_tcp.lo \ ../sanei/sanei_udp.lo \ ../sanei/sanei_magic.lo \ + ../sanei/sanei_directio.lo \ $(SANEI_SANEI_JPEG_LO) endif nodist_libsane_la_SOURCES = dll-s.c diff --git a/backend/abaton.c b/backend/abaton.c index 06e60f1..3aaf7ce 100644 --- a/backend/abaton.c +++ b/backend/abaton.c @@ -236,8 +236,8 @@ wait_ready (int fd) static SANE_Status sense_handler (int scsi_fd, u_char * result, void *arg) { - scsi_fd = scsi_fd; /* silence gcc */ - arg = arg; /* silence gcc */ + (void) scsi_fd; /* silence gcc */ + (void) arg; /* silence gcc */ switch (result[2] & 0x0F) { @@ -850,7 +850,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) size_t len; FILE *fp; - authorize = authorize; /* silence gcc */ + (void) authorize; /* silence gcc */ DBG_INIT (); @@ -915,7 +915,7 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only) Abaton_Device *dev; int i; - local_only = local_only; /* silence gcc */ + (void) local_only; /* silence gcc */ if (devlist) free (devlist); @@ -1399,7 +1399,7 @@ sane_read (SANE_Handle handle, SANE_Byte * buf, SANE_Int max_len, status = sanei_scsi_cmd (s->fd, test_unit_ready, sizeof (test_unit_ready), 0, 0); - if (status != SANE_STATUS_GOOD || status != SANE_STATUS_INVAL) + if (status != SANE_STATUS_GOOD && status != SANE_STATUS_INVAL) return status; return SANE_STATUS_CANCELLED; } @@ -1472,8 +1472,8 @@ sane_cancel (SANE_Handle handle) SANE_Status sane_set_io_mode (SANE_Handle handle, SANE_Bool non_blocking) { - handle = handle; /* silence gcc */ - non_blocking = non_blocking; /* silence gcc */ + (void) handle; /* silence gcc */ + (void) non_blocking; /* silence gcc */ DBG (FLOW_CONTROL, "sane_set_io_mode: Don't call me please. " "Unimplemented function\n"); @@ -1483,8 +1483,8 @@ sane_set_io_mode (SANE_Handle handle, SANE_Bool non_blocking) SANE_Status sane_get_select_fd (SANE_Handle handle, SANE_Int * fd) { - handle = handle; /* silence gcc */ - fd = fd; /* silence gcc */ + (void) handle; /* silence gcc */ + (void) fd; /* silence gcc */ DBG (FLOW_CONTROL, "sane_get_select_fd: Don't call me please. " "Unimplemented function\n"); diff --git a/backend/agfafocus.c b/backend/agfafocus.c index d972f59..f297e41 100644 --- a/backend/agfafocus.c +++ b/backend/agfafocus.c @@ -236,8 +236,8 @@ test_ready (int fd) static SANE_Status sense_handler (int scsi_fd, u_char *result, void *arg) { - scsi_fd = scsi_fd; /* silence gcc */ - arg = arg; /* silence gcc */ + (void) scsi_fd; /* silence gcc */ + (void) arg; /* silence gcc */ if (result[0]) { @@ -253,7 +253,7 @@ sense_handler (int scsi_fd, u_char *result, void *arg) static SANE_Status stop_scan (int fd) { - fd = fd; /* silence gcc */ + (void) fd; /* silence gcc */ /* XXX don't know how to stop the scanner. To be tested ! */ #if 0 @@ -1280,7 +1280,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) size_t len; FILE *fp; - authorize = authorize; /* silence gcc */ + (void) authorize; /* silence gcc */ DBG_INIT (); @@ -1335,7 +1335,7 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only) AgfaFocus_Device *dev; int i; - local_only = local_only; /* silence gcc */ + (void) local_only; /* silence gcc */ if (devlist) free (devlist); diff --git a/backend/apple.c b/backend/apple.c index 7b37248..b360e5c 100644 --- a/backend/apple.c +++ b/backend/apple.c @@ -328,8 +328,8 @@ return SANE_STATUS_GOOD; static SANE_Status sense_handler (int scsi_fd, u_char * result, void *arg) { - scsi_fd = scsi_fd; /* silence gcc */ - arg = arg; /* silence gcc */ + (void) scsi_fd; /* silence gcc */ + (void) arg; /* silence gcc */ switch (result[2] & 0x0F) { @@ -1866,7 +1866,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) size_t len; FILE *fp; - authorize = authorize; /* silence gcc */ + (void) authorize; /* silence gcc */ DBG_INIT (); @@ -1930,7 +1930,7 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only) Apple_Device *dev; int i; - local_only = local_only; /* silence gcc */ + (void) local_only; /* silence gcc */ if (devlist) free (devlist); @@ -2667,7 +2667,7 @@ sane_set_io_mode (SANE_Handle handle, SANE_Bool non_blocking) { DBG (FLOW_CONTROL,"sane_set_io_mode: Entering.\n"); - handle = handle; /* silence gcc */ + (void) handle; /* silence gcc */ if (non_blocking) { @@ -2682,8 +2682,8 @@ return SANE_STATUS_GOOD; SANE_Status sane_get_select_fd (SANE_Handle handle, SANE_Int * fd) { - handle = handle; /* silence gcc */ - fd = fd; /* silence gcc */ + (void) handle; /* silence gcc */ + (void) fd; /* silence gcc */ DBG (FLOW_CONTROL, "sane_get_select_fd: Don't call me please. " "Unimplemented function\n"); diff --git a/backend/artec.c b/backend/artec.c index ea211eb..61007c8 100644 --- a/backend/artec.c +++ b/backend/artec.c @@ -3474,7 +3474,7 @@ artec_sane_read (SANE_Handle handle, SANE_Byte * buf, SANE_Int max_len, SANE_Int SANE_Byte line_buf[ARTEC_MAX_READ_SIZE]; - DBG (7, "artec_sane_read( %p, %p, %d, %d )\n", handle, buf, max_len, *len); + DBG (7, "artec_sane_read( %p, %p, %d, %d )\n", handle, (void *) buf, max_len, *len); *len = 0; @@ -3674,7 +3674,7 @@ sane_read (SANE_Handle handle, SANE_Byte * buf, SANE_Int max_len, SANE_Int * len static SANE_Byte temp_buf[ARTEC_MAX_READ_SIZE]; static int bytes_in_buf = 0; - DBG (7, "sane_read( %p, %p, %d, %d )\n", handle, buf, max_len, *len); + DBG (7, "sane_read( %p, %p, %d, %d )\n", handle, (void *) buf, max_len, *len); DBG (9, "sane_read: bib = %d, ml = %d\n", bytes_in_buf, max_len); if (bytes_in_buf != 0) diff --git a/backend/artec_eplus48u.c b/backend/artec_eplus48u.c index a4a3c24..e96e96f 100644 --- a/backend/artec_eplus48u.c +++ b/backend/artec_eplus48u.c @@ -351,9 +351,6 @@ static void finish_shading_buffer (Artec48U_Scanner * s, SANE_Bool white) { unsigned int i, j, cnt, c, div; - unsigned long max_r; - unsigned long max_g; - unsigned long max_b; unsigned char *shading_buffer; cnt = 0; @@ -379,18 +376,12 @@ finish_shading_buffer (Artec48U_Scanner * s, SANE_Bool white) ++cnt; } } - max_r = 0; - max_g = 0; - max_b = 0; for (c = 0; c < (30720 * s->dev->epro_mult) - 5; c += 6) /*epro*/ { i = (int) shading_buffer[c] + ((int) shading_buffer[c + 1] << 8); - max_r += i; i = (int) shading_buffer[c + 2] + ((int) shading_buffer[c + 3] << 8); - max_g += i; i = (int) shading_buffer[c + 4] + ((int) shading_buffer[c + 5] << 8); - max_b += i; } } @@ -1628,7 +1619,7 @@ artec48u_device_memory_read (Artec48U_Device * dev, SANE_Status status; XDBG ((8, "%s: dev=%p, addr=0x%x, size=0x%x, data=%p\n", - function_name, (void *) dev, addr, size, data)); + function_name, (void *) dev, addr, size, (void *) data)); CHECK_DEV_ACTIVE (dev, function_name); status = sanei_usb_control_msg (dev->fd, 0xc0, 0x01, diff --git a/backend/avision.c b/backend/avision.c index b81578a..c807d9f 100644 --- a/backend/avision.c +++ b/backend/avision.c @@ -112,7 +112,7 @@ * * . . - sane_cancel() : cancel operation, kill reader_process * - * . - sane_close() : close opened scanner-device, do_cancel, free buffer and handle + * . - sane_close() : do_cancel, close opened scanner-device, free buffer and handle * - sane_exit() : terminate use of backend, free devicename and device-structure */ @@ -159,6 +159,15 @@ static Avision_HWEntry Avision_Device_List [] = { + { NULL, NULL, + 0x0638, 0x2E59, + "Avision", "AD345F", + AV_INT_BUTTON | AV_CANCEL_BUTTON | AV_USE_GRAY_FILTER, + { 0, {0, 0}, {{0, 0}, {0, 0}} } + }, + /* comment="duplex! sheetfed + flatbed scanner" */ + /* status="basic" */ + { "AVISION", "AV100CS", 0, 0, "Avision", "AV100CS", @@ -688,6 +697,15 @@ static Avision_HWEntry Avision_Device_List [] = /* comment="1 pass, 600 dpi, zero-edge" ASIC 7 */ /* status="basic" */ + { NULL, NULL, + 0x0638, 0x2a1f, + "Avision", "FB2280E", + 0, + { 0, {0, 0}, {{0, 0}, {0, 0}} } + }, + /* comment="1 pass, 600 dpi, zero-edge" ASIC 7 */ + /* status="basic" */ + { "AVISION", "AV8000S", 0, 0, "Avision", "AV8000S", @@ -1592,7 +1610,7 @@ Lexmark X4500 MFP }\ }\ -static int num_devices; +static unsigned int num_devices; static Avision_Device* first_dev; static Avision_Scanner* first_handle; static const SANE_Device** devlist = 0; @@ -2149,8 +2167,8 @@ sense_handler (int fd, u_char* sense, void* arg) uint8_t sense_key = sense[2] & 0xf; uint8_t additional_sense = sense[7]; - fd = fd; /* silence gcc */ - arg = arg; /* silence gcc */ + (void) fd; /* silence gcc */ + (void) arg; /* silence gcc */ DBG (3, "sense_handler:\n"); @@ -2690,8 +2708,8 @@ bubble_sort (uint8_t* sort_data, size_t count) for (j = (i + 1); j < count; ++j) { - ti = get_double ((sort_data + i*2)); - tj = get_double ((sort_data + j*2)); + ti = (uint16_t) get_double ((sort_data + i*2)); + tj = (uint16_t) get_double ((sort_data + j*2)); if (ti > tj) { set_double ((sort_data + i*2), tj); @@ -2708,7 +2726,7 @@ bubble_sort (uint8_t* sort_data, size_t count) /* DBG (7, "bubble_sort: %d values for average\n", k); */ if (k > 0) /* if avg to compute */ - return (uint16_t) (sum / k); + return (uint16_t) (sum /(double) k); else return (uint16_t) (sum); /* always zero? */ } @@ -2969,14 +2987,14 @@ compute_parameters (Avision_Scanner* s) SANE_UNFIX (s->val[OPT_BR_X].w), SANE_UNFIX (s->val[OPT_BR_Y].w)); /* window parameter in pixel */ - s->avdimen.tlx = s->avdimen.hw_xres * SANE_UNFIX (s->val[OPT_TL_X].w) - / MM_PER_INCH; - s->avdimen.tly = s->avdimen.hw_yres * SANE_UNFIX (s->val[OPT_TL_Y].w) - / MM_PER_INCH; - s->avdimen.brx = s->avdimen.hw_xres * SANE_UNFIX (s->val[OPT_BR_X].w) - / MM_PER_INCH; - s->avdimen.bry = s->avdimen.hw_yres * SANE_UNFIX (s->val[OPT_BR_Y].w) - / MM_PER_INCH; + s->avdimen.tlx = (long int) (s->avdimen.hw_xres * SANE_UNFIX (s->val[OPT_TL_X].w) + / MM_PER_INCH); + s->avdimen.tly = (long int) (s->avdimen.hw_yres * SANE_UNFIX (s->val[OPT_TL_Y].w) + / MM_PER_INCH); + s->avdimen.brx = (long int) (s->avdimen.hw_xres * SANE_UNFIX (s->val[OPT_BR_X].w) + / MM_PER_INCH); + s->avdimen.bry = (long int) (s->avdimen.hw_yres * SANE_UNFIX (s->val[OPT_BR_Y].w) + / MM_PER_INCH); /* line difference */ if (color_mode_is_color (s->c_mode) && @@ -2990,8 +3008,8 @@ compute_parameters (Avision_Scanner* s) /* limit bry + line_difference to real scan boundary */ { - long y_max = dev->inquiry_y_ranges[s->source_mode_dim] * - s->avdimen.hw_yres / MM_PER_INCH; + long y_max = (long int) (dev->inquiry_y_ranges[s->source_mode_dim] * + s->avdimen.hw_yres / MM_PER_INCH); DBG (3, "sane_compute_parameters: y_max: %ld, bry: %ld, line_difference: %d\n", y_max, s->avdimen.bry, s->avdimen.line_difference); @@ -3009,10 +3027,10 @@ compute_parameters (Avision_Scanner* s) /* add overscan */ if (dev->inquiry_tune_scan_length && is_adf_scan (s)) { /* some extra effort for precise rounding ... */ - int overscan = (s->avdimen.hw_yres * + int overscan = (int) ((s->avdimen.hw_yres * (SANE_UNFIX (s->val[OPT_OVERSCAN_TOP].w) + SANE_UNFIX (s->val[OPT_OVERSCAN_BOTTOM].w)) + (MM_PER_INCH - 1) - ) / MM_PER_INCH; + ) / MM_PER_INCH); DBG (3, "sane_compute_parameters: overscan lines: %d\n", overscan); s->avdimen.bry += overscan; } @@ -3171,10 +3189,10 @@ compute_parameters (Avision_Scanner* s) memset (&s->params, 0, sizeof (s->params)); - s->avdimen.hw_pixels_per_line = (s->avdimen.brx - s->avdimen.tlx); + s->avdimen.hw_pixels_per_line = (int) (s->avdimen.brx - s->avdimen.tlx); s->avdimen.hw_pixels_per_line -= s->avdimen.hw_pixels_per_line % boundary; - s->avdimen.hw_lines = (s->avdimen.bry - s->avdimen.tly - + s->avdimen.hw_lines = (int) (s->avdimen.bry - s->avdimen.tly - 2 * s->avdimen.line_difference); if (s->avdimen.interlaced_duplex && dev->scanner_type != AV_FILM) @@ -3252,7 +3270,7 @@ inquiry (Avision_Connection av_con, uint8_t* data, size_t len) memset (&inquiry, 0, sizeof(inquiry)); inquiry.opc = AVISION_SCSI_INQUIRY; - inquiry.len = len; + inquiry.len = (uint8_t) len; do { size_t size = inquiry.len; @@ -3281,7 +3299,7 @@ wait_ready (Avision_Connection* av_con, int delay) DBG (3, "wait_ready: sending TEST_UNIT_READY\n"); status = avision_cmd (av_con, test_unit_ready, sizeof (test_unit_ready), 0, 0, 0, 0); - sleep (delay); + sleep ((unsigned int) delay); switch (status) { @@ -3338,6 +3356,7 @@ wait_4_light (Avision_Scanner* s) status = avision_cmd (&s->av_con, &rcmd, sizeof (rcmd), 0, 0, &result, &size); if (status != SANE_STATUS_GOOD || size != sizeof (result)) { + status = (status != SANE_STATUS_GOOD)? status: SANE_STATUS_IO_ERROR; DBG (1, "wait_4_light: read failed (%s)\n", sane_strstatus (status)); return status; } @@ -3432,6 +3451,7 @@ get_firmware_status (Avision_Connection* av_con) status = avision_cmd (av_con, &rcmd, sizeof (rcmd), 0, 0, &result, &size); if (status != SANE_STATUS_GOOD || size != sizeof (result)) { + status = (status != SANE_STATUS_GOOD)? status: SANE_STATUS_IO_ERROR; DBG (1, "get_firmware_status: read failed (%s)\n", sane_strstatus (status)); return (status); @@ -3469,6 +3489,7 @@ get_flash_ram_info (Avision_Connection* av_con) status = avision_cmd (av_con, &rcmd, sizeof (rcmd), 0, 0, result, &size); if (status != SANE_STATUS_GOOD || size != sizeof (result)) { + status = (status != SANE_STATUS_GOOD)? status: SANE_STATUS_IO_ERROR; DBG (1, "get_flash_ram_info: read failed (%s)\n", sane_strstatus (status)); return (status); @@ -3550,21 +3571,21 @@ get_nvram_data (Avision_Scanner* s, nvram_data* nvram) } static SANE_Status -get_and_parse_nvram (Avision_Scanner* s, char* str, int n) +get_and_parse_nvram (Avision_Scanner* s, char* str, size_t n) { SANE_Status status; - int i = 0; + size_t i = 0; int x; nvram_data nvram; uint8_t inquiry_result [AVISION_INQUIRY_SIZE_V1]; status = inquiry (s->av_con, inquiry_result, sizeof(inquiry_result)); if (status == SANE_STATUS_GOOD) { - i += snprintf (str+i, n-i, "Vendor: %.8s", + i += (size_t) snprintf (str+i, n-i, "Vendor: %.8s", inquiry_result+8); - i += snprintf (str+i, n-i, "\nModel: %.16s", + i += (size_t) snprintf (str+i, n-i, "\nModel: %.16s", inquiry_result+16); - i += snprintf (str+i, n-i, "\nFirmware: %.4s", + i += (size_t) snprintf (str+i, n-i, "\nFirmware: %.4s", inquiry_result+32); } @@ -3575,32 +3596,32 @@ get_and_parse_nvram (Avision_Scanner* s, char* str, int n) if (status == SANE_STATUS_GOOD) { if (nvram.serial[0]) - i += snprintf (str+i, n-i, "\nSerial: %.24s", + i += (size_t) snprintf (str+i, n-i, "\nSerial: %.24s", nvram.serial); - if (nvram.born_year) - i += snprintf (str+i, n-i, "\nManufacturing date: %d-%d-%d", + if (get_double(nvram.born_year)) + i += (size_t) snprintf (str+i, n-i, "\nManufacturing date: %d-%d-%d", get_double(nvram.born_year), get_double(nvram.born_month), get_double(nvram.born_day)); - if (nvram.first_scan_year) - i += snprintf (str+i, n-i, "\nFirst scan date: %d-%d-%d", + if (get_double(nvram.first_scan_year)) + i += (size_t) snprintf (str+i, n-i, "\nFirst scan date: %d-%d-%d", get_double(nvram.first_scan_year), get_double(nvram.first_scan_month), get_double(nvram.first_scan_day)); x = get_quad (nvram.flatbed_scans); if (x) - i += snprintf (str+i, n-i, "\nFlatbed scans: %d", x); + i += (size_t) snprintf (str+i, n-i, "\nFlatbed scans: %d", x); x = get_quad (nvram.pad_scans); if (x) - i += snprintf (str+i, n-i, "\nPad scans: %d", x); + i += (size_t) snprintf (str+i, n-i, "\nPad scans: %d", x); x = get_quad (nvram.adf_simplex_scans); if (x) - i += snprintf (str+i, n-i, "\nADF simplex scans: %d", x); + i += (size_t) snprintf (str+i, n-i, "\nADF simplex scans: %d", x); x = get_quad (nvram.adf_duplex_scans); if (x) - i += snprintf (str+i, n-i, "\nADF duplex scans: %d", x); + i += (size_t) snprintf (str+i, n-i, "\nADF duplex scans: %d", x); } return status; @@ -3703,12 +3724,12 @@ adf_reset (Avision_Scanner* s) uint8_t payload[4]; size_t size; size_t n; - int i; + ssize_t i; DBG (3, "adf_reset\n"); /* loop twice */ for (i=1; i >= 0; i--) { - n=i; + n= (size_t) i; memset (&scmd, 0, sizeof (scmd)); memset (&payload, 0, sizeof (payload)); scmd.opc = AVISION_SCSI_SEND; @@ -3716,26 +3737,26 @@ adf_reset (Avision_Scanner* s) set_double (scmd.datatypequal, 0); size = 2; set_triple (scmd.transferlen, size); - payload[1] = 0x10 * i; /* write 0x10 the first time, 0x00 the second */ + payload[1] = (uint8_t) (0x10 * i); /* write 0x10 the first time, 0x00 the second */ status = avision_cmd (&s->av_con, &scmd, sizeof (scmd), payload, size, 0, 0); if (status != SANE_STATUS_GOOD) { - DBG (1, "adf_reset: write %d failed (%s)\n", (2-i), + DBG (1, "adf_reset: write %zu failed (%s)\n", (2-i), sane_strstatus (status)); return (status); } - DBG (3, "adf_reset: write %d complete.\n", (2-i)); + DBG (3, "adf_reset: write %zu complete.\n", (2-i)); memset (&rcmd, 0, sizeof (rcmd)); memset (&payload, 0, sizeof (payload)); rcmd.opc = AVISION_SCSI_READ; rcmd.datatypecode = AVISION_DATATYPECODE_READ_NVRAM_DATA; /* Read NVRAM data */ set_double (rcmd.datatypequal, dev->data_dq); - size = 4 - i; /* read 3 bytes the first time, 4 the second */ + size = (size_t) (4 - i); /* read 3 bytes the first time, 4 the second */ set_triple (rcmd.transferlen, size); status = avision_cmd (&s->av_con, &rcmd, sizeof (rcmd), 0, 0, payload, &size); if (status != SANE_STATUS_GOOD || size != (4-n)) { - DBG (1, "adf_reset: read %zu failed (%s)\n", (4-n), - sane_strstatus (status)); + status = (status != SANE_STATUS_GOOD)? status: SANE_STATUS_IO_ERROR; + DBG (1, "adf_reset: read %zu failed (%s)\n", (4-n), sane_strstatus (status)); return (status); } debug_print_raw (3, "adf_reset: raw data:\n", payload, size); @@ -3776,8 +3797,8 @@ get_accessories_info (Avision_Scanner* s) status = avision_cmd (&s->av_con, &rcmd, sizeof (rcmd), 0, 0, result, &size); if (status != SANE_STATUS_GOOD || size != sizeof (result)) { - DBG (1, "get_accessories_info: read failed (%s)\n", - sane_strstatus (status)); + status = (status != SANE_STATUS_GOOD)? status: SANE_STATUS_IO_ERROR; + DBG (1, "get_accessories_info: read failed (%s)\n", sane_strstatus (status)); return (status); } @@ -3839,7 +3860,7 @@ get_accessories_info (Avision_Scanner* s) /* Returns a pointer to static char* strings or NULL for cancel (we do not want to start memcmp'ing for the cancel case). */ static const char* -string_for_button (Avision_Scanner* s, int button) +string_for_button (Avision_Scanner* s, uint8_t button) { static char buffer [16]; Avision_Device* dev = s->hw; @@ -3931,6 +3952,7 @@ get_button_status (Avision_Scanner* s) status = avision_cmd (&s->av_con, &rcmd, sizeof (rcmd), 0, 0, (uint8_t*)&result, &size); if (status != SANE_STATUS_GOOD || size != sizeof (result)) { + status = (status != SANE_STATUS_GOOD)? status: SANE_STATUS_IO_ERROR; DBG (1, "get_button_status: read failed (%s)\n", sane_strstatus (status)); return status; } @@ -3982,7 +4004,7 @@ get_button_status (Avision_Scanner* s) /* simulate button press of the last button ... */ result.press_state = 0x80 | 1; - result.buttons[0] = dev->inquiry_buttons; /* 1 based */ + result.buttons[0] = (uint8_t) dev->inquiry_buttons; /* 1 based */ } } @@ -4001,7 +4023,7 @@ get_button_status (Avision_Scanner* s) char* message = message_begin; #define add_token(format,value) do { \ - int n = snprintf (message, message_end - message, "%s" format, \ + int n = snprintf (message, (size_t) (message_end - message), "%s" format, \ message == message_begin ? "" : ":", value); \ message += n > 0 ? n : 0; \ } while (0) @@ -4041,7 +4063,7 @@ get_button_status (Avision_Scanner* s) } for (i = 0; i < buttons_pressed; ++i) { - const unsigned int button = result.buttons[i] - 1; /* 1 based ... */ + const uint8_t button = result.buttons[i] - 1; /* 1 based ... */ DBG (3, "get_button_status: button %d pressed\n", button); if (button >= dev->inquiry_buttons) { DBG (1, "get_button_status: button %d not allocated as not indicated in inquiry\n", @@ -4089,6 +4111,7 @@ get_frame_info (Avision_Scanner* s) status = avision_cmd (&s->av_con, &rcmd, sizeof (rcmd), 0, 0, result, &size); if (status != SANE_STATUS_GOOD || size != sizeof (result)) { + status = (status != SANE_STATUS_GOOD)? status: SANE_STATUS_IO_ERROR; DBG (1, "get_frame_info: read failed (%s)\n", sane_strstatus (status)); return (status); } @@ -4104,10 +4127,10 @@ get_frame_info (Avision_Scanner* s) DBG (3, "get_frame_info: [2] Frame amount: %d\n", result[2]); DBG (3, "get_frame_info: [3] Mode: %s\n", BIT(result[3],4)?"APS":"Not APS"); DBG (3, "get_frame_info: [3] Exposures (if APS): %s\n", - ((i=(BIT(result[3],3)<<1)+BIT(result[2],2))==0)?"Unknown": + ((i=(size_t) (BIT(result[3],3)<<1)+BIT(result[2],2))==0)?"Unknown": (i==1)?"15":(i==2)?"25":"40"); DBG (3, "get_frame_info: [3] Film Type (if APS): %s\n", - ((i=(BIT(result[1],3)<<1)+BIT(result[0],2))==0)?"Unknown": + ((i=(size_t) (BIT(result[1],3)<<1)+BIT(result[0],2))==0)?"Unknown": (i==1)?"B&W Negative":(i==2)?"Color slide":"Color Negative"); dev->holder_type = result[0]; @@ -4157,6 +4180,7 @@ get_duplex_info (Avision_Scanner* s) status = avision_cmd (&s->av_con, &rcmd, sizeof (rcmd), 0, 0, &result, &size); if (status != SANE_STATUS_GOOD || size != sizeof (result)) { + status = (status != SANE_STATUS_GOOD)? status: SANE_STATUS_IO_ERROR; DBG (1, "get_duplex_info: read failed (%s)\n", sane_strstatus (status)); return (status); } @@ -4220,8 +4244,8 @@ set_frame (Avision_Scanner* s, SANE_Word frame) set_double (scmd.cmd.datatypequal, dev->data_dq); set_triple (scmd.cmd.transferlen, sizeof (scmd.data) ); - scmd.data[0] = dev->holder_type; - scmd.data[1] = frame; + scmd.data[0] = (uint8_t) dev->holder_type; + scmd.data[1] = (uint8_t) frame; status = avision_cmd (&s->av_con, &scmd.cmd, sizeof (scmd.cmd), &scmd.data, sizeof (scmd.data), 0, 0); @@ -4970,7 +4994,7 @@ send_tune_scan_length (Avision_Scanner* s) if (dev->hw->feature_type & AV_OVERSCAN_OPTDPI) dpi = dev->inquiry_optical_res; - top = dpi * SANE_UNFIX (s->val[OPT_OVERSCAN_TOP].w) / MM_PER_INCH; + top = (int) (dpi * SANE_UNFIX (s->val[OPT_OVERSCAN_TOP].w) / MM_PER_INCH); DBG (3, "send_tune_scan_length: top: %d\n", top); /* top offset compensation */ @@ -4986,7 +5010,7 @@ send_tune_scan_length (Avision_Scanner* s) offset += dev->hw->offset.first; /* convert to lines */ - int top_offset = dpi * offset / MM_PER_INCH; + int top_offset = (int) (dpi * offset / MM_PER_INCH); top += top_offset; DBG (3, "send_tune_scan_length: top offset: %d\n", top_offset); } @@ -5007,7 +5031,7 @@ send_tune_scan_length (Avision_Scanner* s) } scmd.datatypecode = AVISION_DATATYPECODE_ATTACH_TRUNCATE_TAIL; /* Attach/Truncate tail(right) of scan length */ - bottom = dpi * SANE_UNFIX (s->val[OPT_OVERSCAN_BOTTOM].w) / MM_PER_INCH; + bottom = (int) (dpi * SANE_UNFIX (s->val[OPT_OVERSCAN_BOTTOM].w) / MM_PER_INCH); DBG (3, "send_tune_scan_length: bottom: %d\n", bottom); /* bottom offset compensation */ @@ -5024,7 +5048,7 @@ send_tune_scan_length (Avision_Scanner* s) offset += fabs(dev->hw->offset.first); /* convert to lines */ - int bottom_offset = dpi * offset / MM_PER_INCH; + int bottom_offset = (int) (dpi * offset / MM_PER_INCH); bottom += bottom_offset; DBG (3, "send_tune_scan_length: bottom offset: %d\n", bottom_offset); } @@ -5161,14 +5185,14 @@ get_calib_format (Avision_Scanner* s, struct calibration_format* format) DBG (3, "get_calib_format: read_data: %lu bytes\n", (u_long) size); status = avision_cmd (&s->av_con, &rcmd, sizeof (rcmd), 0, 0, result, &size); if (status != SANE_STATUS_GOOD || size != sizeof (result) ) { - DBG (1, "get_calib_format: read calib. info failed (%s)\n", - sane_strstatus (status) ); + status = (status != SANE_STATUS_GOOD)? status: SANE_STATUS_IO_ERROR; + DBG (1, "get_calib_format: read calib. info failed (%s)\n", sane_strstatus (status) ); return status; } debug_print_calib_format (3, "get_calib_format", result); - format->pixel_per_line = get_double (&(result[0])); + format->pixel_per_line = (uint16_t) get_double (&(result[0])); format->bytes_per_channel = result[2]; format->lines = result[3]; format->flags = result[4]; @@ -5176,12 +5200,12 @@ get_calib_format (Avision_Scanner* s, struct calibration_format* format) format->r_gain = result[6]; format->g_gain = result[7]; format->b_gain = result[8]; - format->r_shading_target = get_double (&(result[9])); - format->g_shading_target = get_double (&(result[11])); - format->b_shading_target = get_double (&(result[13])); - format->r_dark_shading_target = get_double (&(result[15])); - format->g_dark_shading_target = get_double (&(result[17])); - format->b_dark_shading_target = get_double (&(result[19])); + format->r_shading_target = (uint16_t) get_double (&(result[9])); + format->g_shading_target = (uint16_t) get_double (&(result[11])); + format->b_shading_target = (uint16_t) get_double (&(result[13])); + format->r_dark_shading_target = (uint16_t) get_double (&(result[15])); + format->g_dark_shading_target = (uint16_t) get_double (&(result[17])); + format->b_dark_shading_target = (uint16_t) get_double (&(result[19])); /* now translate to normal! */ /* firmware return R--RG--GB--B with 3 line count */ @@ -5261,7 +5285,7 @@ set_calib_data (Avision_Scanner* s, struct calibration_format* format, { Avision_Device* dev = s->hw; - const int elements_per_line = format->pixel_per_line * format->channels; + const size_t elements_per_line = format->pixel_per_line * format->channels; SANE_Status status; @@ -5270,7 +5294,7 @@ set_calib_data (Avision_Scanner* s, struct calibration_format* format, struct command_send scmd; - int i; + size_t i; DBG (3, "set_calib_data:\n"); @@ -5295,13 +5319,13 @@ set_calib_data (Avision_Scanner* s, struct calibration_format* format, if (BIT (format->ability1, 2) ) { DBG (3, "set_calib_data: merging dark calibration data\n"); for (i = 0; i < elements_per_line; ++i) { - uint16_t value_orig = get_double_le (white_data + i*2); + uint16_t value_orig = (uint16_t) get_double_le (white_data + i*2); uint16_t value_new = value_orig; value_new &= 0xffc0; - value_new |= (get_double_le (dark_data + i*2) >> 10) & 0x3f; + value_new |= (uint16_t) ((get_double_le (dark_data + i*2) >> 10) & 0x3f); - DBG (9, "set_calib_data: element %d, dark difference %d\n", + DBG (9, "set_calib_data: element %zu, dark difference %d\n", i, value_orig - value_new); set_double_le ((white_data + i*2), value_new); @@ -5318,7 +5342,7 @@ set_calib_data (Avision_Scanner* s, struct calibration_format* format, { size_t send_size = elements_per_line * 2; DBG (3, "set_calib_data: all channels in one command\n"); - DBG (3, "set_calib_data: send_size: %lu\n", (u_long) send_size); + DBG (3, "set_calib_data: send_size: %zu\n", send_size); memset (&scmd, 0, sizeof (scmd) ); scmd.opc = AVISION_SCSI_SEND; @@ -5332,7 +5356,7 @@ set_calib_data (Avision_Scanner* s, struct calibration_format* format, } else /* send data channel by channel (some USB ones) */ { - int conv_out_size = format->pixel_per_line * 2; + size_t conv_out_size = format->pixel_per_line * 2; uint16_t* conv_out_data; /* here it is save to use 16bit data since we only move whole words around */ @@ -5356,7 +5380,7 @@ set_calib_data (Avision_Scanner* s, struct calibration_format* format, for (i = 0; i < format->pixel_per_line; ++ i) conv_out_data [i] = casted_avg_data [i * 3 + channel]; - DBG (3, "set_calib_data: sending %i bytes now\n", + DBG (3, "set_calib_data: sending %zu bytes now\n", conv_out_size); memset (&scmd, 0, sizeof (scmd)); @@ -5393,9 +5417,9 @@ set_calib_data (Avision_Scanner* s, struct calibration_format* format, static uint8_t* sort_and_average (struct calibration_format* format, uint8_t* data) { - const int elements_per_line = format->pixel_per_line * format->channels; - const int stride = format->bytes_per_channel * elements_per_line; - int i, line; + const size_t elements_per_line = format->pixel_per_line * format->channels; + const size_t stride = format->bytes_per_channel * elements_per_line; + size_t i, line; uint8_t *sort_data, *avg_data; @@ -5454,7 +5478,7 @@ compute_dark_shading_data (Avision_Scanner* s, DBG (3, "compute_dark_shading_data:\n"); if (s->hw->inquiry_max_shading_target != INVALID_DARK_SHADING) - map_value = s->hw->inquiry_max_shading_target << 8; + map_value = (uint16_t) (s->hw->inquiry_max_shading_target << 8); rgb_map_value[0] = format->r_dark_shading_target; rgb_map_value[1] = format->g_dark_shading_target; @@ -5477,7 +5501,7 @@ compute_dark_shading_data (Avision_Scanner* s, /* Avision SCSI protocol document has bad description. */ for (i = 0; i < elements_per_line; ++i) { - uint16_t tmp_data = get_double_le((data + i*2)); + uint16_t tmp_data = (uint16_t) get_double_le((data + i*2)); if (tmp_data > rgb_map_value[i % 3]) { set_double ((data + i*2), tmp_data - rgb_map_value[i % 3]); } @@ -5504,7 +5528,7 @@ compute_white_shading_data (Avision_Scanner* s, DBG (3, "compute_white_shading_data:\n"); if (s->hw->inquiry_max_shading_target != INVALID_WHITE_SHADING) - inquiry_mst = s->hw->inquiry_max_shading_target << 4; + inquiry_mst = (uint16_t) (s->hw->inquiry_max_shading_target << 4); mst[0] = format->r_shading_target; mst[1] = format->g_shading_target; @@ -5547,14 +5571,14 @@ compute_white_shading_data (Avision_Scanner* s, { int result; /* calculate calibration value for pixel i */ - uint16_t tmp_data = get_double((data + i*2)); + uint16_t tmp_data = (uint16_t) get_double((data + i*2)); if (tmp_data == INVALID_WHITE_SHADING) { tmp_data = DEFAULT_WHITE_SHADING; ++ values_invalid; } - result = ( (int)mst[i % 3] * WHITE_MAP_RANGE / (tmp_data + 0.5)); + result = (int) ( (int)mst[i % 3] * WHITE_MAP_RANGE / (tmp_data + 0.5)); /* sanity check for over-amplification, clipping */ if (result > MAX_WHITE_SHADING) { @@ -5582,7 +5606,8 @@ normal_calibration (Avision_Scanner* s) struct calibration_format calib_format; - int calib_data_size, calib_bytes_per_line; + size_t calib_data_size; + int calib_bytes_per_line; uint8_t read_type; uint8_t *calib_tmp_data; @@ -5604,7 +5629,7 @@ normal_calibration (Avision_Scanner* s) calib_bytes_per_line = calib_format.bytes_per_channel * calib_format.pixel_per_line * calib_format.channels; - calib_data_size = calib_format.lines * calib_bytes_per_line; + calib_data_size = (size_t) calib_format.lines * (size_t) calib_bytes_per_line; calib_tmp_data = malloc (calib_data_size); if (!calib_tmp_data) @@ -5889,7 +5914,7 @@ send_gamma (Avision_Scanner* s) /* interpolate gamma_values to gamma_data */ for (k = 0; k < gamma_values; ++ k, ++ i) { gamma_data [i] = (uint8_t) - (((v1 * (gamma_values - k)) + (v2 * k) ) / (double) gamma_values); + (((v1 * (double) (gamma_values - k)) + (v2 * (double) k) ) / (double) gamma_values); } } @@ -5965,7 +5990,7 @@ send_3x3_matrix (Avision_Scanner* s) a_i = (int) a_f; /* integer */ b_f = a_f - (double) a_i; /* float */ - m |= ((a_i & 0x3) << INT_PART); + m |= (uint16_t) ((a_i & 0x3) << INT_PART); m |= (uint16_t) (b_f * 1024); set_double (((uint8_t*)(&cmd.matrix.v[i])), m); } @@ -6009,6 +6034,7 @@ get_acceleration_info (Avision_Scanner* s, struct acceleration_info* info) DBG (3, "get_acceleration_info: read_data: %lu bytes\n", (u_long) size); status = avision_cmd (&s->av_con, &rcmd, sizeof (rcmd), 0, 0, result, &size); if (status != SANE_STATUS_GOOD || size != sizeof (result) ) { + status = (status != SANE_STATUS_GOOD)? status: SANE_STATUS_IO_ERROR; DBG (1, "get_acceleration_info: read accel. info failed (%s)\n", sane_strstatus (status) ); return status; @@ -6016,12 +6042,12 @@ get_acceleration_info (Avision_Scanner* s, struct acceleration_info* info) debug_print_accel_info (3, "get_acceleration_info", result); - info->total_steps = get_double (&(result[0])); - info->stable_steps = get_double (&(result[2])); - info->table_units = get_quad (&(result[4])); - info->base_units = get_quad (&(result[8])); - info->start_speed = get_double (&(result[12])); - info->target_speed = get_double (&(result[14])); + info->total_steps = (uint16_t) get_double (&(result[0])); + info->stable_steps = (uint16_t) get_double (&(result[2])); + info->table_units = (uint32_t) get_quad (&(result[4])); + info->base_units = (uint32_t) get_quad (&(result[8])); + info->start_speed = (uint16_t) get_double (&(result[12])); + info->target_speed = (uint16_t) get_double (&(result[14])); info->ability = result[16]; info->table_count = result[17]; @@ -6076,10 +6102,10 @@ send_acceleration_table (Avision_Scanner* s) needs such a dumb table and also do not know /why/ it has to be constructed this way. "Works for me" -ReneR */ { - float low_lim = 0.001; + float low_lim = (float) 0.001; float up_lim = 1.0; - uint16_t accel_steps = accel_info.total_steps - accel_info.stable_steps + 1; + uint16_t accel_steps = (uint16_t) (accel_info.total_steps - accel_info.stable_steps + 1); /* acceleration ramp */ while ((up_lim - low_lim) > 0.0001) @@ -6122,7 +6148,7 @@ send_acceleration_table (Avision_Scanner* s) int add_count; /* count total steps in table */ - int table_total = 0; + uint32_t table_total = 0; for (i = 0; i < accel_info.total_steps; i++) table_total += table_data [i]; @@ -6130,9 +6156,9 @@ send_acceleration_table (Avision_Scanner* s) if (((table_total * accel_info.table_units) % accel_info.base_units) == 0) add_count = 0; else - add_count = (accel_info.base_units - - ((table_total*accel_info.table_units) % accel_info.base_units)) - / accel_info.table_units; + add_count = (int) ((accel_info.base_units - + ((table_total*accel_info.table_units) % accel_info.base_units)) + / accel_info.table_units); /* add_count should not be bigger than 255 */ if (add_count > 255) { @@ -6142,7 +6168,7 @@ send_acceleration_table (Avision_Scanner* s) for (i = 0; i < accel_info.total_steps - 1 && add_count > 0; i++) { uint16_t temp_count = 255 - table_data [i]; - temp_count = temp_count > add_count ? add_count : temp_count; + temp_count = (uint16_t) (temp_count > add_count ? add_count : temp_count); table_data [i] += (uint8_t) temp_count; add_count -= temp_count; @@ -6186,8 +6212,8 @@ set_window (Avision_Scanner* s) Avision_Device* dev = s->hw; SANE_Status status; int base_dpi_abs, base_dpi_rel; - int transferlen; - int paralen; + size_t transferlen; + size_t paralen; int bytes_per_line; int line_count; @@ -6225,7 +6251,7 @@ set_window (Avision_Scanner* s) /* optional parameter length to use */ paralen = sizeof (cmd.window.avision) - sizeof (cmd.window.avision.type); - DBG (2, "set_window: base paralen: %d\n", paralen); + DBG (2, "set_window: base paralen: %zu\n", paralen); if (dev->hw->feature_type & AV_FUJITSU) paralen += sizeof (cmd.window.avision.type.fujitsu); @@ -6236,12 +6262,12 @@ set_window (Avision_Scanner* s) else paralen += sizeof (cmd.window.avision.type.normal) - 1; - DBG (2, "set_window: final paralen: %d\n", paralen); + DBG (2, "set_window: final paralen: %zu\n", paralen); transferlen = sizeof (cmd.window) - sizeof (cmd.window.avision) + paralen; - DBG (2, "set_window: transferlen: %d\n", transferlen); + DBG (2, "set_window: transferlen: %zu\n", transferlen); /* command setup */ cmd.cmd.opc = AVISION_SCSI_SET_WINDOW; @@ -6278,20 +6304,20 @@ set_window (Avision_Scanner* s) /* here go the most significant bits if bigger than 16 bit */ if (dev->inquiry_new_protocol && !(dev->hw->feature_type & AV_FUJITSU) ) { DBG (2, "set_window: large data-transfer support (>16bit)!\n"); - cmd.window.avision.type.normal.line_width_msb = - bytes_per_line >> 16; - cmd.window.avision.type.normal.line_count_msb = - line_count >> 16; + cmd.window.avision.type.normal.line_width_msb = (uint8_t) + (bytes_per_line >> 16); + cmd.window.avision.type.normal.line_count_msb = (uint8_t) + (line_count >> 16); } if (dev->inquiry_background_raster) - cmd.window.avision.type.normal.background_lines = s->val[OPT_BACKGROUND].w; + cmd.window.avision.type.normal.background_lines = (uint8_t) s->val[OPT_BACKGROUND].w; /* scanner should use our line-width and count */ SET_BIT (cmd.window.avision.bitset1, 6); /* set speed */ - cmd.window.avision.bitset1 |= s->val[OPT_SPEED].w & 0x07; /* only 3 bit */ + cmd.window.avision.bitset1 |= (uint8_t) (s->val[OPT_SPEED].w & 0x07); /* only 3 bit */ /* ADF scan? */ DBG (3, "set_window: source mode %d source mode dim %d\n", @@ -6371,7 +6397,7 @@ set_window (Avision_Scanner* s) /* fixed values */ cmd.window.descriptor.padding_and_bitset = 3; cmd.window.descriptor.vendor_specific = 0xFF; - cmd.window.descriptor.paralen = paralen; /* R² was: 9, later 14 */ + cmd.window.descriptor.paralen = (uint8_t) paralen; /* R² was: 9, later 14 */ /* This is normally unsupported by Avision scanners, and we do this via the gamma table - which works for all devices ... */ @@ -6443,7 +6469,7 @@ set_window (Avision_Scanner* s) debug_print_window_descriptor (5, "set_window", &(cmd.window)); - DBG (3, "set_window: sending command. Bytes: %d\n", transferlen); + DBG (3, "set_window: sending command. Bytes: %zu\n", transferlen); status = avision_cmd (&s->av_con, &cmd, sizeof (cmd.cmd), &(cmd.window), transferlen, 0, 0); @@ -6482,7 +6508,7 @@ get_background_raster (Avision_Scanner* s) dev->inquiry_background_raster_pixel, bytes_per_line); /* according to spec only 8-bit gray or color, TODO: test for bi-level scans */ - size = bytes_per_line * lines; + size = (size_t) bytes_per_line * (size_t) lines; DBG (3, "get_background_raster: buffer size: %ld\n", (long)size); @@ -6518,7 +6544,7 @@ get_background_raster (Avision_Scanner* s) else { this_lines = s->val[OPT_BACKGROUND].w; } - this_read = bytes_per_line * this_lines; + this_read = (size_t) bytes_per_line * (size_t) this_lines; DBG (3, "get_background_raster: line: %d, lines: %d, %lu bytes\n", i, this_lines, (u_long) this_read); @@ -6528,8 +6554,8 @@ get_background_raster (Avision_Scanner* s) read_size = this_read; status = avision_cmd (&s->av_con, &rcmd, sizeof (rcmd), 0, 0, dst_raster, &read_size); if (status != SANE_STATUS_GOOD || read_size != this_read) { - DBG (1, "get_background_raster: read raster failed (%s)\n", - sane_strstatus (status) ); + status = (status != SANE_STATUS_GOOD)? status: SANE_STATUS_IO_ERROR; + DBG (1, "get_background_raster: read raster failed (%s)\n", sane_strstatus (status) ); return status; } @@ -6545,7 +6571,7 @@ get_background_raster (Avision_Scanner* s) write_pnm_header (f, (color_mode_is_color (s->c_mode) ? AV_TRUECOLOR : AV_GRAYSCALE), 8, bytes_per_line / bpp, lines); - fwrite (background, 1, bytes_per_line * lines, f); + fwrite (background, 1, (size_t) bytes_per_line * (size_t) lines, f); fclose (f); } @@ -6555,7 +6581,7 @@ get_background_raster (Avision_Scanner* s) /* TODO: add 16bit per sample code? */ int l, p; - uint8_t* tmp_data = malloc (bytes_per_line); + uint8_t* tmp_data = malloc ((size_t) bytes_per_line); for (l = 0; l < lines; ++l) { uint8_t* out_data = tmp_data; @@ -6569,7 +6595,7 @@ get_background_raster (Avision_Scanner* s) out_data [p++] = *(b_ptr++); } - memcpy (background + (bytes_per_line * l), tmp_data, bytes_per_line); + memcpy (background + (bytes_per_line * l), tmp_data, (size_t) bytes_per_line); } free (tmp_data); @@ -6596,7 +6622,7 @@ get_background_raster (Avision_Scanner* s) src_raster = background + bytes_per_line * i; DBG(3, "get_background_raster: deinterlaced %d -> %d\n", i, dst_i); - memcpy(dst_raster, src_raster, bytes_per_line); + memcpy(dst_raster, src_raster, (size_t) bytes_per_line); } free (background); @@ -6619,7 +6645,7 @@ get_background_raster (Avision_Scanner* s) write_pnm_header (f, (color_mode_is_color (s->c_mode) ? AV_TRUECOLOR : AV_GRAYSCALE), 8, bytes_per_line / bpp, s->val[OPT_BACKGROUND].w); - fwrite (raster, 1, bytes_per_line * s->val[OPT_BACKGROUND].w, f); + fwrite (raster, 1, (size_t) bytes_per_line * (size_t) s->val[OPT_BACKGROUND].w, f); fclose (f); } @@ -6630,7 +6656,7 @@ get_background_raster (Avision_Scanner* s) src_ptr = background + s->avdimen.tlx * bpp; for (i = 0; i < lines; ++i) { - memmove (dst_ptr, src_ptr, s->avdimen.hw_bytes_per_line); + memmove (dst_ptr, src_ptr, (size_t) s->avdimen.hw_bytes_per_line); dst_ptr += s->avdimen.hw_bytes_per_line; src_ptr += bytes_per_line; } @@ -6659,10 +6685,10 @@ get_background_raster (Avision_Scanner* s) switch (bpp) { case 1: { - uint8_t v = - ( out_data [sy*hwbpl + sx ] * (256-xdist) + + uint8_t v = (uint8_t) + (( out_data [sy*hwbpl + sx ] * (256-xdist) + out_data [sy*hwbpl + sxx] * xdist - ) / (256); + ) / (256)); *dst++ = v; } break; @@ -6672,10 +6698,10 @@ get_background_raster (Avision_Scanner* s) int c; for (c = 0; c < 3; ++c) { - uint8_t v = - ( out_data [sy*hwbpl + sx*3 + c] * (256-xdist) + + uint8_t v = (uint8_t) + (( out_data [sy*hwbpl + sx*3 + c] * (256-xdist) + out_data [sy*hwbpl + sxx*3 + c] * xdist - ) / (256); + ) / (256)); *dst++ = v; } } @@ -6702,7 +6728,7 @@ get_background_raster (Avision_Scanner* s) write_pnm_header (f, (color_mode_is_color (s->c_mode) ? AV_TRUECOLOR : AV_GRAYSCALE), 8, s->params.bytes_per_line / bpp, s->val[OPT_BACKGROUND].w); - fwrite (raster, 1, s->params.bytes_per_line * s->val[OPT_BACKGROUND].w, f); + fwrite (raster, 1, (size_t) s->params.bytes_per_line * (size_t) s->val[OPT_BACKGROUND].w, f); fclose (f); } } @@ -6731,7 +6757,7 @@ release_unit (Avision_Scanner* s, int type) SANE_Status status; DBG (1, "release unit: type: %d\n", type); - cmd[5] = type; /* latest scanners also allow 1: release paper and 2: end job */ + cmd[5] = (char) type; /* latest scanners also allow 1: release paper and 2: end job */ status = avision_cmd (&s->av_con, cmd, sizeof (cmd), 0, 0, 0, 0); return status; } @@ -6944,8 +6970,9 @@ init_options (Avision_Scanner* s) case AV_ASIC_C5: dev->dpi_range.min = 80; break; - case AV_ASIC_C6: /* TODO: AV610 in ADF mode does not scan less than 180 or so */ - dev->dpi_range.min = 50; + case AV_ASIC_C6: /* TODO: AV610 in ADF mode does not scan less than 180 or so; */ + /* Scanjet 8250 does not work with 50 in normal mode */ + dev->dpi_range.min = 60; break; case AV_ASIC_C7: /* AV610C2 empirically tested out */ dev->dpi_range.min = 75; @@ -6983,7 +7010,7 @@ init_options (Avision_Scanner* s) s->opt[OPT_MODE].title = SANE_TITLE_SCAN_MODE; s->opt[OPT_MODE].desc = SANE_DESC_SCAN_MODE; s->opt[OPT_MODE].type = SANE_TYPE_STRING; - s->opt[OPT_MODE].size = max_string_size (dev->color_list); + s->opt[OPT_MODE].size = (SANE_Int) max_string_size (dev->color_list); s->opt[OPT_MODE].constraint_type = SANE_CONSTRAINT_STRING_LIST; s->opt[OPT_MODE].constraint.string_list = dev->color_list; s->val[OPT_MODE].s = strdup (dev->color_list[dev->color_list_default]); @@ -6994,7 +7021,7 @@ init_options (Avision_Scanner* s) s->opt[OPT_SOURCE].title = SANE_TITLE_SCAN_SOURCE; s->opt[OPT_SOURCE].desc = SANE_DESC_SCAN_SOURCE; s->opt[OPT_SOURCE].type = SANE_TYPE_STRING; - s->opt[OPT_SOURCE].size = max_string_size(dev->source_list); + s->opt[OPT_SOURCE].size = (SANE_Int) max_string_size(dev->source_list); s->opt[OPT_SOURCE].constraint_type = SANE_CONSTRAINT_STRING_LIST; s->opt[OPT_SOURCE].constraint.string_list = &dev->source_list[0]; s->val[OPT_SOURCE].s = strdup(dev->source_list[0]); @@ -7314,7 +7341,7 @@ init_options (Avision_Scanner* s) s->opt[OPT_MESSAGE].cap = SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED; s->opt[OPT_MESSAGE].size = 129; s->opt[OPT_MESSAGE].constraint_type = SANE_CONSTRAINT_NONE; - s->val[OPT_MESSAGE].s = malloc(s->opt[OPT_MESSAGE].size); + s->val[OPT_MESSAGE].s = malloc((size_t) s->opt[OPT_MESSAGE].size); s->val[OPT_MESSAGE].s[0] = 0; /* NVRAM */ @@ -7328,7 +7355,7 @@ init_options (Avision_Scanner* s) s->opt[OPT_NVRAM].unit = SANE_UNIT_NONE; s->opt[OPT_NVRAM].size = 1024; s->opt[OPT_NVRAM].constraint_type = SANE_CONSTRAINT_NONE; - s->val[OPT_NVRAM].s = malloc(s->opt[OPT_NVRAM].size); + s->val[OPT_NVRAM].s = malloc((size_t) s->opt[OPT_NVRAM].size); s->val[OPT_NVRAM].s[0] = 0; /* paper_length */ @@ -7472,11 +7499,27 @@ reader_process (void *data) return SANE_STATUS_NO_MEM; if (dev->adf_offset_compensation) { + char duplex_offtmp_fname [] = "/tmp/avision-offtmp-XXXXXX"; + + int fd = mkstemp(duplex_offtmp_fname); + if (fd == -1) { + DBG (1, "reader_process: failed to generate temporary fname for ADF offset compensation temp file\n"); + return SANE_STATUS_NO_MEM; + } + DBG (1, "reader_process: temporary fname for ADF offset compensation temp file: %s\n", + duplex_offtmp_fname); + + if (unlink(duplex_offtmp_fname) == -1) { + DBG(1, "reader_process: failed to delete temporary file prior to use: %s\n", duplex_offtmp_fname); + // continue though. + } + DBG (3, "reader_process: redirecting output data to temp file for ADF offset compensation.\n"); fp_fd = fp; - fp = fopen (s->duplex_offtmp_fname, "w+"); + fp = fdopen (fd, "w+"); if (!fp) { fclose(fp_fd); + close(fd); return SANE_STATUS_NO_MEM; } } @@ -7525,37 +7568,34 @@ reader_process (void *data) if (!s->duplex_rear_valid) { /* create new file for writing */ DBG (3, "reader_process: opening duplex rear file for writing.\n"); rear_fp = fopen (s->duplex_rear_fname, "w"); - if (! rear_fp) { - fclose (fp); - return SANE_STATUS_NO_MEM; - } } else { /* open saved rear data */ DBG (3, "reader_process: opening duplex rear file for reading.\n"); rear_fp = fopen (s->duplex_rear_fname, "r"); - if (! rear_fp) { - fclose (fp); - return SANE_STATUS_IO_ERROR; - } + } + if (! rear_fp) { + fclose (fp); + fclose (fp_fd); + return SANE_STATUS_IO_ERROR; } } /* it takes quite a few lines to saturate the (USB) bus */ - lines_per_stripe = dev->read_stripe_size; + lines_per_stripe = (unsigned int) dev->read_stripe_size; if (s->avdimen.line_difference) - lines_per_stripe += 2 * s->avdimen.line_difference; + lines_per_stripe += (2 * (unsigned int) s->avdimen.line_difference); - stripe_size = s->avdimen.hw_bytes_per_line * lines_per_stripe; - lines_per_output = lines_per_stripe - 2 * s->avdimen.line_difference; + stripe_size = (unsigned int) s->avdimen.hw_bytes_per_line * lines_per_stripe; + lines_per_output = lines_per_stripe - 2 * (unsigned int) s->avdimen.line_difference; if (s->av_con.connection_type == AV_SCSI) /* maybe better not /2 ... */ - max_bytes_per_read = dev->scsi_buffer_size / 2; + max_bytes_per_read = (unsigned int) dev->scsi_buffer_size / 2; else /* vast buffer size to saturate the bus */ max_bytes_per_read = 0x100000; - out_size = s->avdimen.hw_bytes_per_line * lines_per_output; + out_size = (unsigned int) s->avdimen.hw_bytes_per_line * lines_per_output; DBG (3, "dev->scsi_buffer_size / 2: %d\n", dev->scsi_buffer_size / 2); @@ -7576,18 +7616,18 @@ reader_process (void *data) s->avdimen.hw_yres != s->avdimen.yres) { /* layout out_data so that the interpolation history is exactly in front */ - ip_history = malloc (s->avdimen.hw_bytes_per_line + out_size); + ip_history = malloc ((size_t) s->avdimen.hw_bytes_per_line + out_size); out_data = ip_history + s->avdimen.hw_bytes_per_line; - ip_data = malloc (s->params.bytes_per_line); + ip_data = malloc ((size_t) s->params.bytes_per_line); } else { out_data = malloc (out_size); } /* calculate params for the reading loop */ - total_size = s->avdimen.hw_bytes_per_line * - (s->avdimen.hw_lines + 2 * s->avdimen.line_difference); + total_size = (size_t) s->avdimen.hw_bytes_per_line * + ((size_t) s->avdimen.hw_lines + 2 * (size_t) s->avdimen.line_difference); if (deinterlace != NONE && !s->duplex_rear_valid) total_size *= 2; @@ -7599,7 +7639,7 @@ reader_process (void *data) { raw_fp = fopen ("/tmp/sane-avision.raw", "w"); write_pnm_header (fp, s->c_mode, s->params.depth, - s->avdimen.hw_pixels_per_line, total_size / s->avdimen.hw_bytes_per_line); + s->avdimen.hw_pixels_per_line, (int) (total_size / (size_t) s->avdimen.hw_bytes_per_line)); } processed_bytes = 0; @@ -7613,7 +7653,7 @@ reader_process (void *data) background += s->params.bytes_per_line * s->val[OPT_BACKGROUND].w; DBG (5, "reader_process: dumping background raster\n"); - fwrite (background, s->params.bytes_per_line, s->val[OPT_BACKGROUND].w, fp); + fwrite (background, (size_t) s->params.bytes_per_line, (size_t) s->val[OPT_BACKGROUND].w, fp); } /* Data read; loop until all data has been processed. Might exit @@ -7636,7 +7676,7 @@ reader_process (void *data) byte_per_lines, otherwise some scanners freeze. */ if (this_read > max_bytes_per_read) this_read = (max_bytes_per_read - - max_bytes_per_read % s->avdimen.hw_bytes_per_line); + max_bytes_per_read % (unsigned int) s->avdimen.hw_bytes_per_line); if (processed_bytes + this_read > total_size) this_read = total_size - processed_bytes; @@ -7694,7 +7734,7 @@ reader_process (void *data) exit_status = status; } - stripe_fill += this_read; + stripe_fill += (unsigned int) this_read; processed_bytes += this_read; } @@ -7716,7 +7756,7 @@ reader_process (void *data) DBG (5, "reader_process: virtual this_read: %lu\n", (u_long) this_read); got = fread (stripe_data + stripe_fill, 1, this_read, rear_fp); - stripe_fill += got; + stripe_fill += (unsigned int) got; processed_bytes += got; if (got != this_read) exit_status = SANE_STATUS_EOF; @@ -7727,7 +7767,7 @@ reader_process (void *data) useful_bytes = stripe_fill; if (color_mode_is_color (s->c_mode)) - useful_bytes -= 2 * s->avdimen.line_difference * s->avdimen.hw_bytes_per_line; + useful_bytes -= (unsigned int) (2 * s->avdimen.line_difference * s->avdimen.hw_bytes_per_line); DBG (3, "reader_process: useful_bytes %i\n", useful_bytes); @@ -7737,26 +7777,26 @@ reader_process (void *data) if (deinterlace != NONE && !s->duplex_rear_valid) { /* for all lines we have in the buffer: */ - unsigned int absline = (processed_bytes - stripe_fill) / s->avdimen.hw_bytes_per_line; - unsigned int abslines = absline + useful_bytes / s->avdimen.hw_bytes_per_line; + unsigned int absline = (unsigned int) ((processed_bytes - stripe_fill) / (size_t) s->avdimen.hw_bytes_per_line); + unsigned int abslines = absline + useful_bytes / (unsigned int) s->avdimen.hw_bytes_per_line; uint8_t* ptr = stripe_data; for ( ; absline < abslines; ++absline) { DBG (9, "reader_process: deinterlacing line %d\n", absline); /* interlaced? save the back data to the rear buffer */ if ( (deinterlace == STRIPE && absline % (lines_per_stripe*2) >= lines_per_stripe) || - (deinterlace == HALF && absline >= total_size / s->avdimen.hw_bytes_per_line / 2) || + (deinterlace == HALF && absline >= total_size / (size_t) s->avdimen.hw_bytes_per_line / 2) || (deinterlace == LINE && (absline & 0x1)) ) /* last bit equals % 2 */ { DBG (9, "reader_process: saving rear line %d to temporary file.\n", absline); - fwrite (ptr, s->avdimen.hw_bytes_per_line, 1, rear_fp); + fwrite (ptr, (size_t) s->avdimen.hw_bytes_per_line, 1, rear_fp); if (deinterlace == LINE) memmove (ptr, ptr+s->avdimen.hw_bytes_per_line, - stripe_data + stripe_fill - ptr - s->avdimen.hw_bytes_per_line); + (size_t) (stripe_data + stripe_fill - ptr - s->avdimen.hw_bytes_per_line)); else ptr += s->avdimen.hw_bytes_per_line; - useful_bytes -= s->avdimen.hw_bytes_per_line; - stripe_fill -= s->avdimen.hw_bytes_per_line; + useful_bytes -= (unsigned int) s->avdimen.hw_bytes_per_line; + stripe_fill -= (unsigned int) s->avdimen.hw_bytes_per_line; } else ptr += s->avdimen.hw_bytes_per_line; @@ -7766,14 +7806,14 @@ reader_process (void *data) } if ((dev->hw->feature_type & AV_ADF_FLIPPING_DUPLEX) && s->source_mode == AV_ADF_DUPLEX && !(s->page % 2) && !s->duplex_rear_valid) { /* Here we flip the image by writing the lines from the end of the file to the beginning. */ - unsigned int absline = (processed_bytes - stripe_fill) / s->avdimen.hw_bytes_per_line; - unsigned int abslines = absline + useful_bytes / s->avdimen.hw_bytes_per_line; + unsigned int absline = (unsigned int) ((processed_bytes - stripe_fill) / (size_t) s->avdimen.hw_bytes_per_line); + unsigned int abslines = absline + useful_bytes / (unsigned int) s->avdimen.hw_bytes_per_line; uint8_t* ptr = stripe_data; for ( ; absline < abslines; ++absline) { - fseek (rear_fp, ((0 - s->params.lines) - absline - 2) * s->avdimen.hw_bytes_per_line, SEEK_SET); - fwrite (ptr, s->avdimen.hw_bytes_per_line, 1, rear_fp); - useful_bytes -= s->avdimen.hw_bytes_per_line; - stripe_fill -= s->avdimen.hw_bytes_per_line; + fseek (rear_fp, ((0 - s->params.lines) - (SANE_Int) absline - 2) * s->avdimen.hw_bytes_per_line, SEEK_SET); + fwrite (ptr, (size_t) s->avdimen.hw_bytes_per_line, 1, rear_fp); + useful_bytes -= (unsigned int) s->avdimen.hw_bytes_per_line; + stripe_fill -= (unsigned int) s->avdimen.hw_bytes_per_line; ptr += s->avdimen.hw_bytes_per_line; } DBG (9, "reader_process: after page flip: useful_bytes: %d, stripe_fill: %d\n", @@ -7813,16 +7853,16 @@ reader_process (void *data) else if (dev->inquiry_needs_line_pack) /* line-pack */ { /* TODO: add 16bit per sample code? */ - int i = 0, l, p; - const int lines = useful_bytes / s->avdimen.hw_bytes_per_line; + unsigned int i = 0, l, p; + const unsigned int lines = useful_bytes / (unsigned int) s->avdimen.hw_bytes_per_line; for (l = 0; l < lines; ++l) { - uint8_t* r_ptr = stripe_data + (s->avdimen.hw_bytes_per_line * l); + uint8_t* r_ptr = stripe_data + ((unsigned int) s->avdimen.hw_bytes_per_line * l); uint8_t* g_ptr = r_ptr + s->avdimen.hw_pixels_per_line; uint8_t* b_ptr = g_ptr + s->avdimen.hw_pixels_per_line; - for (p = 0; p < s->avdimen.hw_pixels_per_line; ++p) { + for (p = 0; p < (unsigned int) s->avdimen.hw_pixels_per_line; ++p) { out_data [i++] = *(r_ptr++); out_data [i++] = *(g_ptr++); out_data [i++] = *(b_ptr++); @@ -7846,12 +7886,12 @@ reader_process (void *data) /* Mirroring with bgr -> rgb conversion: Just mirror the * whole line */ - int l; - int lines = useful_bytes / s->avdimen.hw_bytes_per_line; + unsigned int l; + unsigned int lines = useful_bytes / (unsigned int) s->avdimen.hw_bytes_per_line; for (l = 0; l < lines; ++l) { - uint8_t* begin_ptr = out_data + (l * s->avdimen.hw_bytes_per_line); + uint8_t* begin_ptr = out_data + (l * (unsigned int) s->avdimen.hw_bytes_per_line); uint8_t* end_ptr = begin_ptr + s->avdimen.hw_bytes_per_line; while (begin_ptr < end_ptr) { @@ -7866,12 +7906,12 @@ reader_process (void *data) { /* Non-trivial Mirroring with element swapping */ - int l; - int lines = useful_bytes / s->avdimen.hw_bytes_per_line; + unsigned int l; + unsigned int lines = useful_bytes / (unsigned int) s->avdimen.hw_bytes_per_line; for (l = 0; l < lines; ++l) { - uint8_t* begin_ptr = out_data + (l * s->avdimen.hw_bytes_per_line); + uint8_t* begin_ptr = out_data + (l * (unsigned int) s->avdimen.hw_bytes_per_line); uint8_t* end_ptr = begin_ptr + s->avdimen.hw_bytes_per_line - 3; while (begin_ptr < end_ptr) { @@ -7904,8 +7944,8 @@ reader_process (void *data) s->c_mode == AV_TRUECOLOR12 || s->c_mode == AV_TRUECOLOR16) { - int l; - int lines = useful_bytes / s->avdimen.hw_bytes_per_line; + unsigned int l; + unsigned int lines = useful_bytes / (unsigned int) s->avdimen.hw_bytes_per_line; uint8_t* dark_avg_data = s->dark_avg_data; uint8_t* white_avg_data = s->white_avg_data; @@ -7923,9 +7963,9 @@ reader_process (void *data) uint16_t white_avg = WHITE_MAP_RANGE; if (dark_avg_data) - dark_avg = get_double_le (dark_avg_data); + dark_avg = (uint16_t) get_double_le (dark_avg_data); if (white_avg_data) - white_avg = get_double_le (white_avg_data); + white_avg = (uint16_t) get_double_le (white_avg_data); line_ptr = begin_ptr; for (l = 0; l < lines; ++ l) @@ -7935,11 +7975,11 @@ reader_process (void *data) if (0) v = (v - dark_avg) * white_avg / WHITE_MAP_RANGE; - v2 = v < 0xFFFF ? v : 0xFFFF; + v2 = ((uint16_t) v) < 0xFFFF ? ((uint16_t) v) : 0xFFFF; /* SANE Standard 3.2.1 "... bytes of each sample value are transmitted in the machine's native byte order." */ - *line_ptr = v2; + *line_ptr = (uint8_t) v2; line_ptr += s->avdimen.hw_bytes_per_line; } @@ -7954,19 +7994,14 @@ reader_process (void *data) /* SOFTWARE SCALING WITH INTERPOLATION (IF NECESSARY) */ - if (s->avdimen.hw_xres == s->avdimen.xres && - s->avdimen.hw_yres == s->avdimen.yres) /* No scaling */ - { - fwrite (out_data, useful_bytes, 1, fp); - line += useful_bytes / s->avdimen.hw_bytes_per_line; - } - else /* Software scaling - watch out - this code bites back! */ + if (s->avdimen.hw_xres != s->avdimen.xres || + s->avdimen.hw_yres != s->avdimen.yres) /* Software scaling */ { int x; /* for convenience in the 16bit code path */ uint16_t* out_data16 = (uint16_t*) out_data; - const int hw_line_end = hw_line + useful_bytes / s->avdimen.hw_bytes_per_line; + const int hw_line_end = hw_line + (int) useful_bytes / s->avdimen.hw_bytes_per_line; /* on-the-fly bi-linear interpolation */ while (1) { @@ -7993,6 +8028,9 @@ reader_process (void *data) break; } + DBG (8, "reader_process: out line: %d <- from: %d-%d\n", + line, sy, syy); + /* convert to offset in current stripe */ sy -= hw_line; syy -= hw_line; @@ -8002,9 +8040,6 @@ reader_process (void *data) sy = -1; } - DBG (8, "reader_process: out line: %d <- from: %d-%d\n", - line, sy, syy); - for (x = 0; x < s->params.pixels_per_line; ++x) { const double bx = (-1.0 + s->avdimen.hw_pixels_per_line) * x / s->params.pixels_per_line; const int sx = (int)floor(bx); @@ -8022,16 +8057,16 @@ reader_process (void *data) /* Repeating this over and over again is not fast, but as a seldom used code-path we want it readable. x/8 is the byte, and x%8 the bit position. */ - v = + v = (unsigned int) ( ( ((out_data [sy*hwbpl + sx/8 ] >> (7-sx%8 )) & 1) * (256-xdist) * (256-ydist) + ((out_data [sy*hwbpl + sxx/8] >> (7-sxx%8)) & 1) * xdist * (256-ydist) + ((out_data [syy*hwbpl + sx/8 ] >> (7-sx%8 )) & 1) * (256-xdist) * ydist + ((out_data [syy*hwbpl + sxx/8] >> (7-sxx%8)) & 1) * xdist * ydist - ) / (1 + 1 * 256); + ) / (1 + 1 * 256)); /* Shift and or the result together and eventually jump to the next byte. */ - *dst = (*dst << 1) | ((v>>7)&1); + *dst = (uint8_t) ((*dst << 1) | ((v>>7)&1)); if (x % 8 == 7) ++dst; } @@ -8039,13 +8074,13 @@ reader_process (void *data) case AV_GRAYSCALE: { - v = + v = (unsigned int) ( ( out_data [sy*hwbpl + sx ] * (256-xdist) * (256-ydist) + out_data [sy*hwbpl + sxx] * xdist * (256-ydist) + out_data [syy*hwbpl + sx ] * (256-xdist) * ydist + out_data [syy*hwbpl + sxx] * xdist * ydist - ) / (256 * 256); - *dst++ = v; + ) / (256 * 256)); + *dst++ = (uint8_t) v; } break; @@ -8053,13 +8088,13 @@ reader_process (void *data) case AV_GRAYSCALE16: { /* TODO: test! */ - v = + v = (unsigned int) ( ( out_data16 [sy*hwbpl + sx ] * (256-xdist) * (256-ydist) + out_data16 [sy*hwbpl + sxx] * xdist * (256-ydist) + out_data16 [syy*hwbpl + sx ] * (256-xdist) * ydist + out_data16 [syy*hwbpl + sxx] * xdist * ydist - ) / (256 * 256); - *dst16++ = v; + ) / (256 * 256)); + *dst16++ = (uint16_t) v; } break; @@ -8068,13 +8103,13 @@ reader_process (void *data) int c; for (c = 0; c < 3; ++c) { - v = + v = (unsigned int) ( ( out_data [sy*hwbpl + sx*3 + c] * (256-xdist) * (256-ydist) + out_data [sy*hwbpl + sxx*3 + c] * xdist * (256-ydist) + out_data [syy*hwbpl + sx*3 + c] * (256-xdist) * ydist + out_data [syy*hwbpl + sxx*3 + c] * xdist * ydist - ) / (256 * 256); - *dst++ = v; + ) / (256 * 256)); + *dst++ = (uint8_t) v; } } break; @@ -8086,13 +8121,13 @@ reader_process (void *data) int c; for (c = 0; c < 3; ++c) { - v = + v = (unsigned int) ( ( out_data16 [sy*hwbpl + sx*3 + c] * (256-xdist) * (256-ydist) + out_data16 [sy*hwbpl + sxx*3 + c] * xdist * (256-ydist) + out_data16 [syy*hwbpl + sx*3 + c] * (256-xdist) * ydist + out_data16 [syy*hwbpl + sxx*3 + c] * xdist * ydist - ) / (256 * 256); - *dst16++ = v; + ) / (256 * 256)); + *dst16++ = (uint16_t) v; } } break; @@ -8101,13 +8136,18 @@ reader_process (void *data) ; /* silence compiler warning */ } } - fwrite (ip_data, s->params.bytes_per_line, 1, fp); + fwrite (ip_data, (size_t) s->params.bytes_per_line, 1, fp); ++line; } /* copy one line of history for the next pass */ memcpy (ip_history, out_data + useful_bytes - s->avdimen.hw_bytes_per_line, - s->avdimen.hw_bytes_per_line); + (size_t) s->avdimen.hw_bytes_per_line); + } + else /* No scaling */ + { + fwrite (out_data, useful_bytes, 1, fp); + line += (int) useful_bytes / s->avdimen.hw_bytes_per_line; } } @@ -8116,7 +8156,7 @@ reader_process (void *data) if (stripe_fill > 0) memcpy (stripe_data, stripe_data + useful_bytes, stripe_fill); - hw_line += useful_bytes / s->avdimen.hw_bytes_per_line; + hw_line += (int) useful_bytes / s->avdimen.hw_bytes_per_line; DBG (3, "reader_process: end of iteration\n"); } /* end while not all lines or inf. mode */ @@ -8131,12 +8171,12 @@ reader_process (void *data) /* maybe we need to fill in some white data */ if (exit_status == SANE_STATUS_EOF && line < s->params.lines) { DBG (3, "reader_process: padding with white data\n"); - memset (out_data, gray_mode ? 0xff : 0x00, s->params.bytes_per_line); + memset (out_data, gray_mode ? 0xff : 0x00, (size_t) s->params.bytes_per_line); DBG (6, "reader_process: padding line %d - %d\n", line, s->params.lines); while (line < s->params.lines) { - fwrite (out_data, s->params.bytes_per_line, 1, fp); + fwrite (out_data, (size_t) s->params.bytes_per_line, 1, fp); ++line; } } @@ -8147,12 +8187,12 @@ reader_process (void *data) long lines; uint8_t* buffer; - buffer = malloc (s->params.bytes_per_line); + buffer = malloc ((size_t) s->params.bytes_per_line); lines = ftell(fp) / s->params.bytes_per_line; rewind(fp); for (long line = 0; line < lines; line++) { - fread(buffer, s->params.bytes_per_line, 1, fp); + fread(buffer, (size_t) s->params.bytes_per_line, 1, fp); if ( (!s->duplex_rear_valid && (line < s->avdimen.offset.front.top)) || (s->duplex_rear_valid && (line < s->avdimen.offset.rear.top)) ) { @@ -8166,7 +8206,7 @@ reader_process (void *data) break; /* nothing more to write, so break out here */ } - fwrite(buffer, s->params.bytes_per_line, 1, fp_fd); + fwrite(buffer, (size_t) s->params.bytes_per_line, 1, fp_fd); } } @@ -8442,7 +8482,7 @@ sane_reload_devices (void) SANE_Status sane_init (SANE_Int* version_code, SANE_Auth_Callback authorize) { - authorize = authorize; /* silence gcc */ + (void) authorize; /* silence gcc */ DBG_INIT(); @@ -8489,9 +8529,9 @@ SANE_Status sane_get_devices (const SANE_Device*** device_list, SANE_Bool local_only) { Avision_Device* dev; - int i; + unsigned int i; - local_only = local_only; /* silence gcc */ + (void) local_only; /* silence gcc */ DBG (3, "sane_get_devices:\n"); @@ -8581,7 +8621,7 @@ sane_open (SANE_String_Const devicename, SANE_Handle *handle) for (i = 0; i < 4; ++ i) for (j = 0; j < 256; ++ j) - s->gamma_table[i][j] = pow( (double) j / 255, one_over_gamma) * 255; + s->gamma_table[i][j] = (SANE_Int) (pow( (double) j / 255, one_over_gamma) * 255); } /* insert newly opened handle into list of open handles: */ @@ -8640,33 +8680,21 @@ sane_open (SANE_String_Const devicename, SANE_Handle *handle) dev->hw->offset.duplex.rear.bottom != 0) ) dev->adf_offset_compensation = SANE_TRUE; - if (dev->adf_offset_compensation) { - strncpy(s->duplex_offtmp_fname, "/tmp/avision-offtmp-XXXXXX", PATH_MAX); - - if (! mktemp(s->duplex_offtmp_fname) ) { - DBG (1, "sane_open: failed to generate temporary fname for ADF offset compensation temp file\n"); - return SANE_STATUS_NO_MEM; - } - else { - DBG (1, "sane_open: temporary fname for ADF offset compensation temp file: %s\n", - s->duplex_offtmp_fname); - } - } - if (dev->inquiry_duplex_interlaced || dev->scanner_type == AV_FILM || dev->hw->feature_type & AV_ADF_FLIPPING_DUPLEX) { /* Might need at least *DOS (Windows flavour and OS/2) portability fix However, I was told Cygwin (et al.) takes care of it. */ + + /* Create the file but close the fd. It is not used to open the file later. :( */ strncpy(s->duplex_rear_fname, "/tmp/avision-rear-XXXXXX", PATH_MAX); - if (! mkstemp(s->duplex_rear_fname) ) { + int fd = mkstemp(s->duplex_rear_fname); + if (fd == -1) { DBG (1, "sane_open: failed to generate temporary fname for duplex scans\n"); return SANE_STATUS_NO_MEM; } - else { - DBG (1, "sane_open: temporary fname for duplex scans: %s\n", - s->duplex_rear_fname); - } + DBG (1, "sane_open: temporary fname for duplex scans: %s\n", s->duplex_rear_fname); + close(fd); } /* calibrate film scanners, as this must be done without the @@ -8713,22 +8741,14 @@ void sane_close (SANE_Handle handle) { Avision_Scanner* prev; - Avision_Scanner* s = handle; + Avision_Scanner* s; int i; DBG (3, "sane_close:\n"); - /* close the device */ - if (avision_is_open (&s->av_con) ) { - avision_close (&s->av_con); - } - - /* remove handle from list of open handles: */ - prev = 0; - for (s = first_handle; s; s = s->next) { + for (prev = 0, s = first_handle; s; prev = s, s = s->next) { if (s == handle) break; - prev = s; } /* a handle we know about ? */ @@ -8740,6 +8760,12 @@ sane_close (SANE_Handle handle) if (s->scanning) do_cancel (handle); + /* close the device */ + if (avision_is_open(&s->av_con)) { + avision_close(&s->av_con); + } + + /* remove handle from list of open handles */ if (prev) prev->next = s->next; else @@ -8764,11 +8790,6 @@ sane_close (SANE_Handle handle) *(s->duplex_rear_fname) = 0; } - if (*(s->duplex_offtmp_fname)) { - unlink (s->duplex_offtmp_fname); - *(s->duplex_offtmp_fname) = 0; - } - free (handle); } @@ -8863,7 +8884,7 @@ sane_control_option (SANE_Handle handle, SANE_Int option, case OPT_GAMMA_VECTOR_R: case OPT_GAMMA_VECTOR_G: case OPT_GAMMA_VECTOR_B: - memcpy (val, s->val[option].wa, s->opt[option].size); + memcpy (val, s->val[option].wa, (size_t) s->opt[option].size); return SANE_STATUS_GOOD; /* string options: */ @@ -8923,7 +8944,7 @@ sane_control_option (SANE_Handle handle, SANE_Int option, case OPT_GAMMA_VECTOR_R: case OPT_GAMMA_VECTOR_G: case OPT_GAMMA_VECTOR_B: - memcpy (s->val[option].wa, val, s->opt[option].size); + memcpy (s->val[option].wa, val, (size_t) s->opt[option].size); return SANE_STATUS_GOOD; /* options with side-effects: */ @@ -9327,7 +9348,7 @@ sane_read (SANE_Handle handle, SANE_Byte* buf, SANE_Int max_len, SANE_Int* len) DBG (8, "sane_read: max_len: %d\n", max_len); - nread = read (s->read_fds, buf, max_len); + nread = read (s->read_fds, buf, (size_t) max_len); if (nread > 0) { DBG (8, "sane_read: got %ld bytes\n", (long) nread); } @@ -9347,7 +9368,7 @@ sane_read (SANE_Handle handle, SANE_Byte* buf, SANE_Int max_len, SANE_Int* len) } } - *len = nread; + *len = (SANE_Int) nread; /* if all data was passed through */ if (nread == 0) diff --git a/backend/avision.h b/backend/avision.h index aed6d9e..d2d84ef 100644 --- a/backend/avision.h +++ b/backend/avision.h @@ -502,7 +502,6 @@ typedef struct Avision_Scanner /* Internal data for duplex scans */ char duplex_rear_fname [PATH_MAX]; - char duplex_offtmp_fname [PATH_MAX]; SANE_Bool duplex_rear_valid; color_mode c_mode; @@ -795,17 +794,17 @@ typedef struct acceleration_info /* set/get SCSI highended (big-endian) variables. Declare them as an array * of chars endianness-safe, int-size safe ... */ -#define set_double(var,val) var[0] = ((val) >> 8) & 0xff; \ - var[1] = ((val) ) & 0xff +#define set_double(var,val) var[0] = (uint8_t) (((val) >> 8) & 0xff); \ + var[1] = (uint8_t) (((val) ) & 0xff) -#define set_triple(var,val) var[0] = ((val) >> 16) & 0xff; \ - var[1] = ((val) >> 8 ) & 0xff; \ - var[2] = ((val) ) & 0xff +#define set_triple(var,val) var[0] = (uint8_t) (((val) >> 16) & 0xff); \ + var[1] = (uint8_t) (((val) >> 8 ) & 0xff); \ + var[2] = (uint8_t) (((val) ) & 0xff) -#define set_quad(var,val) var[0] = ((val) >> 24) & 0xff; \ - var[1] = ((val) >> 16) & 0xff; \ - var[2] = ((val) >> 8 ) & 0xff; \ - var[3] = ((val) ) & 0xff +#define set_quad(var,val) var[0] = (uint8_t) (((val) >> 24) & 0xff); \ + var[1] = (uint8_t) (((val) >> 16) & 0xff); \ + var[2] = (uint8_t) (((val) >> 8 ) & 0xff); \ + var[3] = (uint8_t) (((val) ) & 0xff) #define get_double(var) ((*var << 8) + *(var + 1)) @@ -817,10 +816,10 @@ typedef struct acceleration_info (*(var + 2) << 8) + *(var + 3)) /* set/get Avision lowended (little-endian) shading data */ -#define set_double_le(var,val) var[0] = ((val) ) & 0xff; \ - var[1] = ((val) >> 8) & 0xff +#define set_double_le(var,val) var[0] = (uint8_t) (((val) ) & 0xff); \ + var[1] = (uint8_t) (((val) >> 8) & 0xff) -#define get_double_le(var) ((*(var + 1) << 8) + *var) +#define get_double_le(var) ((uint16_t) ((*(var + 1) << 8) + *(var))) #define BIT(n, p) ((n & (1 << p)) ? 1 : 0) diff --git a/backend/bh.c b/backend/bh.c index 0f2e70e..31ebe93 100644 --- a/backend/bh.c +++ b/backend/bh.c @@ -1895,6 +1895,11 @@ start_scan (BH_Scanner *s) { DBG(1, "sane_start: error opening barfile `%s'\n", s->barfname); + if (fd !=-1) + { + close(fd); + unlink(s->barfname); + } status = SANE_STATUS_IO_ERROR; } } @@ -1979,7 +1984,7 @@ sense_handler (int scsi_fd, u_char *result, void *arg) SANE_Status status = SANE_STATUS_INVAL; SANE_Char print_sense[(16 * 3) + 1]; - scsi_fd = scsi_fd; /* get rid of compiler warning */ + (void) scsi_fd; /* get rid of compiler warning */ ErrorCode = result[0] & 0x7F; ValidData = (result[0] & 0x80) != 0; sense = result[2] & 0x0f; /* Key */ @@ -3145,7 +3150,7 @@ sane_init (SANE_Int *version_code, SANE_Auth_Callback authorize) char devnam[PATH_MAX] = "/dev/scanner"; FILE *fp; - authorize = authorize; /* get rid of compiler warning */ + (void) authorize; /* get rid of compiler warning */ DBG_INIT(); DBG(3, "sane_init called\n"); @@ -3233,7 +3238,7 @@ sane_get_devices (const SANE_Device ***device_list, SANE_Bool local) int i; DBG(3, "sane_get_devices called\n"); - local = local; /* get rid of compiler warning */ + (void) local; /* get rid of compiler warning */ if (devlist) free (devlist); devlist = malloc ((num_devices + 1) * sizeof (devlist[0])); @@ -3806,7 +3811,7 @@ sane_set_io_mode (SANE_Handle handle, SANE_Bool non_blocking) return SANE_STATUS_GOOD; #else - handle = handle; /* get rid of compiler warning */ + (void) handle; /* get rid of compiler warning */ return (non_blocking == 1) ? SANE_STATUS_UNSUPPORTED : SANE_STATUS_GOOD; #endif } @@ -3828,7 +3833,7 @@ sane_get_select_fd (SANE_Handle handle, SANE_Int *fd) return SANE_STATUS_GOOD; #else - handle = handle; fd = fd; /* get rid of compiler warning */ + (void) handle; (void) fd; /* get rid of compiler warning */ return SANE_STATUS_UNSUPPORTED; #endif } diff --git a/backend/canon-sane.c b/backend/canon-sane.c index 6957aa7..e313457 100644 --- a/backend/canon-sane.c +++ b/backend/canon-sane.c @@ -1111,9 +1111,6 @@ sane_start (SANE_Handle handle) u_char cbuf[2]; /* modification for FB620S */ size_t buf_size, i; - char tmpfilename[] = "/tmp/canon.XXXXXX"; /* for FB1200S */ - char *thistmpfile; /* for FB1200S */ - DBG (1, ">> sane_start\n"); s->tmpfile = -1; /* for FB1200S */ @@ -1121,36 +1118,18 @@ sane_start (SANE_Handle handle) /******* making a tempfile for 1200 dpi scanning of FB1200S ******/ if (s->hw->info.model == FB1200) { - thistmpfile = strdup(tmpfilename); - - if (thistmpfile != NULL) - { - if (!mkstemp(thistmpfile)) - { - DBG(1, "mkstemp(thistmpfile) is failed\n"); - return (SANE_STATUS_INVAL); - } - } - else - { - DBG(1, "strdup(thistmpfile) is failed\n"); - return (SANE_STATUS_INVAL); - } - - s->tmpfile = open(thistmpfile, O_RDWR | O_CREAT | O_EXCL, 0600); + char tmpfilename[] = "/tmp/canon.XXXXXX"; /* for FB1200S */ + s->tmpfile = mkstemp(tmpfilename); if (s->tmpfile == -1) { - DBG(1, "error opening temp file %s\n", thistmpfile); + DBG(1, "error opening temp file %s\n", tmpfilename); DBG(1, "errno: %i; %s\n", errno, strerror(errno)); errno = 0; return (SANE_STATUS_INVAL); } DBG(1, " ****** tmpfile is opened ****** \n"); - - unlink(thistmpfile); - free (thistmpfile); - DBG(1, "free thistmpfile\n"); + unlink(tmpfilename); } /******************************************************************/ diff --git a/backend/canon.c b/backend/canon.c index e2ef932..d17cd01 100644 --- a/backend/canon.c +++ b/backend/canon.c @@ -817,14 +817,12 @@ attach (const char *devnam, CANON_Device ** devp) dev->sane.name = strdup (devnam); dev->sane.vendor = "CANON"; - if ((str = calloc (16 + 1, 1)) == NULL) + if ((str = strndup ((char *) ibuf + 16, 16)) == NULL) { sanei_scsi_close (fd); fd = -1; return (SANE_STATUS_NO_MEM); } - strncpy (str, (char *) (ibuf + 16), 16); - dev->sane.model = str; /* Register the fixed properties of the scanner below: - whether it is a film scanner or a flatbed scanner @@ -842,6 +840,7 @@ attach (const char *devnam, CANON_Device ** devp) if (!strncmp (str, "IX-27015", 8)) /* FS2700S */ { dev->info.model = CS2700; + dev->sane.model = strdup("FS2700S"); dev->sane.type = SANE_I18N("film scanner"); dev->adf.Status = ADF_STAT_NONE; dev->tpu.Status = TPU_STAT_NONE; @@ -857,6 +856,7 @@ attach (const char *devnam, CANON_Device ** devp) else if (!strncmp (str, "IX-27025E", 9)) /* FS2710S */ { dev->info.model = FS2710; + dev->sane.model = strdup("FS2710S"); dev->sane.type = SANE_I18N("film scanner"); dev->adf.Status = ADF_STAT_NONE; dev->tpu.Status = TPU_STAT_NONE; @@ -872,6 +872,7 @@ attach (const char *devnam, CANON_Device ** devp) else if (!strncmp (str, "IX-06035E", 9)) /* FB620S */ { dev->info.model = FB620; + dev->sane.model = strdup("FB620S"); dev->sane.type = SANE_I18N("flatbed scanner"); dev->adf.Status = ADF_STAT_NONE; dev->tpu.Status = TPU_STAT_NONE; @@ -887,6 +888,7 @@ attach (const char *devnam, CANON_Device ** devp) else if (!strncmp (str, "IX-12015E", 9)) /* FB1200S */ { dev->info.model = FB1200; + dev->sane.model = strdup("FB1200S"); dev->sane.type = SANE_I18N("flatbed scanner"); dev->adf.Status = ADF_STAT_INACTIVE; dev->tpu.Status = TPU_STAT_INACTIVE; @@ -930,6 +932,20 @@ attach (const char *devnam, CANON_Device ** devp) dev->info.has_fixed_resolutions = SANE_FALSE; } + /* + * Use the model from the device if we don't have more + * common model name for the device, otherwise free the + * string with internal model name. + * + * Please keep the memory allocation source consistent + * for model string - allocate on the heap via dynamic + * allocation. + */ + if (dev->sane.model == NULL) + dev->sane.model = str; + else + free(str); + DBG (5, "dev->sane.name = '%s'\n", dev->sane.name); DBG (5, "dev->sane.vendor = '%s'\n", dev->sane.vendor); DBG (5, "dev->sane.model = '%s'\n", dev->sane.model); diff --git a/backend/canon630u-common.c b/backend/canon630u-common.c index e6fcf33..deaef66 100644 --- a/backend/canon630u-common.c +++ b/backend/canon630u-common.c @@ -937,7 +937,10 @@ plugin_cal (CANON_Handle * s) { DBG (1, "No temp filename!\n"); s->fname = strdup ("/tmp/cal.XXXXXX"); - mkstemp (s->fname); + + /* FIXME: we should be using fd, not discarding it, and also checking for error! */ + int fd = mkstemp (s->fname); + close(fd); } s->width = 2551; s->height = 75; @@ -1546,7 +1549,7 @@ CANON_open_device (CANON_Handle * scan, const char *dev) static const char * CANON_get_device_name (CANON_Handle * scanner) { - scanner = scanner; /* Eliminate warning about unused parameters */ + (void) scanner; /* Eliminate warning about unused parameters */ return "Canoscan FB630U"; } @@ -1581,8 +1584,12 @@ CANON_start_scan (CANON_Handle * scanner) /* choose a temp file name for scan data */ scanner->fname = strdup ("/tmp/scan.XXXXXX"); - if (!mkstemp (scanner->fname)) + + /* FIXME: we should be using fd, not discarding it! */ + int fd = mkstemp (scanner->fname); + if (fd == -1) return SANE_STATUS_IO_ERROR; + close(fd); /* calibrate if needed */ rv = init (scanner->fd); diff --git a/backend/canon630u.c b/backend/canon630u.c index 659c31f..25c59d6 100644 --- a/backend/canon630u.c +++ b/backend/canon630u.c @@ -133,9 +133,9 @@ static SANE_Status optionNumOptionsCallback (SANE_Option * option, SANE_Handle handle, SANE_Action action, void *value, SANE_Int * info) { - option = option; - handle = handle; - info = info; /* Eliminate warning about unused parameters */ + (void) option; + (void) handle; + (void) info; /* Eliminate warning about unused parameters */ if (action != SANE_ACTION_GET_VALUE) return SANE_STATUS_INVAL; @@ -168,8 +168,8 @@ static SANE_Status optionCalibrateCallback (SANE_Option * option, SANE_Handle handle, SANE_Action action, void *value, SANE_Int * info) { - handle = handle; - option = option; /* Eliminate warning about unused parameters */ + (void) handle; + (void) option; /* Eliminate warning about unused parameters */ switch (action) { @@ -221,7 +221,7 @@ optionResolutionCallback (SANE_Option * option, SANE_Handle handle, SANE_Status status; SANE_Word autoValue = 75; - handle = handle; /* Eliminate warning about unused parameters */ + (void) handle; /* Eliminate warning about unused parameters */ switch (action) { @@ -268,8 +268,8 @@ static SANE_Status optionGrayscaleCallback (SANE_Option * option, SANE_Handle handle, SANE_Action action, void *value, SANE_Int * info) { - handle = handle; - option = option; /* Eliminate warning about unused parameters */ + (void) handle; + (void) option; /* Eliminate warning about unused parameters */ switch (action) { @@ -315,9 +315,9 @@ static SANE_Status optionAGainCallback (SANE_Option * option, SANE_Handle handle, SANE_Action action, void *value, SANE_Int * info) { - option = option; - handle = handle; - info = info; /* Eliminate warning about unused parameters */ + (void) option; + (void) handle; + (void) info; /* Eliminate warning about unused parameters */ switch (action) { @@ -357,9 +357,9 @@ static SANE_Status optionGammaCallback (SANE_Option * option, SANE_Handle handle, SANE_Action action, void *value, SANE_Int * info) { - option = option; - handle = handle; - info = info; /* Eliminate warning about unused parameters */ + (void) option; + (void) handle; + (void) info; /* Eliminate warning about unused parameters */ switch (action) { @@ -418,9 +418,9 @@ static SANE_Status optionTopLeftXCallback (SANE_Option * option, SANE_Handle handle, SANE_Action action, void *value, SANE_Int * info) { - option = option; - handle = handle; - value = value; /* Eliminate warning about unused parameters */ + (void) option; + (void) handle; + (void) value; /* Eliminate warning about unused parameters */ switch (action) { @@ -462,8 +462,8 @@ optionTopLeftYCallback (SANE_Option * option, SANE_Handle handle, SANE_Action action, void *value, SANE_Int * info) { /* Eliminate warnings about unused parameters */ - option = option; - handle = handle; + (void) option; + (void) handle; switch (action) { @@ -506,8 +506,8 @@ optionBotRightXCallback (SANE_Option * option, SANE_Handle handle, SANE_Action action, void *value, SANE_Int * info) { /* Eliminate warnings about unused parameters */ - option = option; - handle = handle; + (void) option; + (void) handle; switch (action) { @@ -550,8 +550,8 @@ optionBotRightYCallback (SANE_Option * option, SANE_Handle handle, SANE_Action action, void *value, SANE_Int * info) { /* Eliminate warnings about unused parameters */ - option = option; - handle = handle; + (void) option; + (void) handle; switch (action) { @@ -912,7 +912,7 @@ sane_close (SANE_Handle handle) const SANE_Option_Descriptor * sane_get_option_descriptor (SANE_Handle handle, SANE_Int option) { - handle = handle; /* Eliminate compiler warning */ + (void) handle; /* Eliminate compiler warning */ DBG (3, "sane_get_option_descriptor: option = %d\n", option); if (option < 0 || option >= NELEMS (so)) @@ -924,7 +924,7 @@ SANE_Status sane_control_option (SANE_Handle handle, SANE_Int option, SANE_Action action, void *value, SANE_Int * info) { - handle = handle; /* Eliminate compiler warning */ + (void) handle; /* Eliminate compiler warning */ DBG (3, "sane_control_option: handle=%p, opt=%d, act=%d, val=%p, info=%p\n", @@ -945,7 +945,7 @@ sane_get_parameters (SANE_Handle handle, SANE_Parameters * params) SANE_UNFIX (optionBotRightYValue - optionTopLeftYValue) / MM_IN_INCH * optionResolutionValue; - handle = handle; /* Eliminate compiler warning */ + (void) handle; /* Eliminate compiler warning */ DBG (3, "sane_get_parameters\n"); parms.depth = 8; @@ -1035,7 +1035,7 @@ sane_set_io_mode (SANE_Handle handle, SANE_Bool non_blocking) SANE_Status sane_get_select_fd (SANE_Handle handle, SANE_Int * fd) { - handle = handle; /* silence gcc */ - fd = fd; /* silence gcc */ + (void) handle; /* silence gcc */ + (void) fd; /* silence gcc */ return SANE_STATUS_UNSUPPORTED; } diff --git a/backend/canon_dr-cmd.h b/backend/canon_dr-cmd.h index e9fc54b..0ef883f 100644 --- a/backend/canon_dr-cmd.h +++ b/backend/canon_dr-cmd.h @@ -131,9 +131,12 @@ putnbyte (unsigned char *pnt, unsigned int value, unsigned int nbytes) #define IN_periph_devtype_unknown 0x1f #define get_IN_response_format(in) getbitfield(in + 0x03, 0x07, 0) #define IN_recognized 0x02 -#define get_IN_vendor(in, buf) strncpy(buf, (char *)in + 0x08, 0x08) -#define get_IN_product(in, buf) strncpy(buf, (char *)in + 0x10, 0x010) -#define get_IN_version(in, buf) strncpy(buf, (char *)in + 0x20, 0x04) +#define get_IN_vendor(in, buf) snprintf(buf, 0x08 + 1, "%.*s", \ + 0x08, (char*)in + 0x08) +#define get_IN_product(in, buf) snprintf(buf, 0x10 + 1, "%.*s", \ + 0x10, (char*)in + 0x10) +#define get_IN_version(in, buf) snprintf(buf, 0x04 + 1, "%.*s", \ + 0x04, (char*)in + 0x20) /* the VPD response */ #define get_IN_page_length(in) in[0x04] @@ -219,6 +222,7 @@ putnbyte (unsigned char *pnt, unsigned int value, unsigned int nbytes) #define SR_datatype_endorser 0x90 #define SR_datatype_fineoffset 0x90 #define SR_datatype_finegain 0x91 +#define SR_datatype_imprinters 0x96 /*DR-X10C*/ /* ==================================================================== */ /* READ */ @@ -252,7 +256,20 @@ putnbyte (unsigned char *pnt, unsigned int value, unsigned int nbytes) /*counters*/ #define R_COUNTERS_len 0x80 -#define get_R_COUNTERS_scans(in) getnbyte(in + 0x04, 4) +#define get_R_COUNTERS_total(in) getnbyte(in + 0x04, 4) +#define get_R_COUNTERS_last_srv(in) getnbyte(in + 0x44, 4) + +/*imprinters*/ +#define R_IMPRINTER_len 0x20 +#define R_PRE_IMPRINTER 0 +#define R_POST_IMPRINTER 1 +#define get_R_IMPRINTER_found(in) getbitfield(in+1, 1, 0) +/*4 bytes at in + 0: (DR-X10C) +pre-imprinter on: 0x07010000 +pre-imprinter off: 0x06000000 +post-imprinter on: 0x03010000 +post-imprinter off: 0x02000000 +*/ /*endorser unread?*/ @@ -454,6 +471,14 @@ putnbyte (unsigned char *pnt, unsigned int value, unsigned int nbytes) #define SM2_pc_buffer 0x02 #define SM2_pc_hw_enhancement 0x03 #define SM2_pc_dropout 0x06 +#define SM2_pc_date_time 0x07 +#define SM2_pc_imprinter_settings 0x33 +#define SM2_pc_imprinter_specstring 0x34 + +/* ==================================================================== */ +/* GET SCAN MODE 2 */ +#define GET_SCAN_MODE2_code 0xe4 +#define GET_SCAN_MODE2_len 12 /* ==================================================================== */ /* SET SCAN MODE 2 */ @@ -465,11 +490,15 @@ putnbyte (unsigned char *pnt, unsigned int value, unsigned int nbytes) /* the payload */ #define SSM2_PAY_len 0x10 +#define SSM2_IMPRINTER_STRING_PAY_len 0x8e /* for DF (0x00) page */ -#define set_SSM2_DF_thick(sb, val) setbitfield(sb+3, 1, 2, val) +#define set_SSM2_DF_imprint(sb, val) setbitfield(sb+2, 1, 0, val) +#define set_SSM2_DF_post_addon(sb, val) setbitfield(sb+2, 1, 1, val) #define set_SSM2_DF_len(sb, val) setbitfield(sb+3, 1, 0, val) +#define set_SSM2_DF_thick(sb, val) setbitfield(sb+3, 1, 2, val) #define set_SSM2_DF_staple(sb, val) setbitfield(sb+3, 1, 4, val) +#define set_SSM2_DF_imprint2(sb, val) setbitfield(sb+3, 1, 6, val) /* for ULTRA (0x01) page */ #define set_SSM2_ULTRA_top(sb, val) putnbyte(sb + 0x07, val, 2) @@ -489,6 +518,32 @@ putnbyte (unsigned char *pnt, unsigned int value, unsigned int nbytes) #define set_SSM2_DO_en(sb, val) sb[0x0a] = val #define set_SSM2_DO_side(sb, val) sb[0x05] = val +/* for IMPRINT DATE & TIME (0x07) */ +#define set_SSM2_imprint_year(sb, val) putnbyte(sb + 0x02, val, 2) +#define set_SSM2_imprint_month(sb, val) putnbyte(sb + 0x04, val, 1) +#define set_SSM2_imprint_day(sb, val) putnbyte(sb + 0x05, val, 1) +#define set_SSM2_imprint_hour(sb, val) putnbyte(sb + 0x06, val, 1) +#define set_SSM2_imprint_min(sb, val) putnbyte(sb + 0x07, val, 1) +#define set_SSM2_imprint_sec(sb, val) putnbyte(sb + 0x08, val, 1) + +/* for IMPRINTER SETTINGS (0x33) page */ +#define set_SSM2_postimprint_cmd(sb) sb[0x04] = 1 +#define set_SSM2_postimprint_addon(sb) setbitfield(sb, 1, 1, 1) +#define set_SSM2_imprint_hoffset(sb, val) putnbyte(sb + 0x05, val, 2) +#define set_SSM2_imprint_voffset(sb, val) putnbyte(sb + 0x07, val, 2) + +/* for IMPRINTER STRING SPECIFICATION (0x34) page */ +#define IMPRINTER_12x12_FONT 0 +#define IMPRINTER_8x12_FONT 1 +#define set_SSM2_imprint_fontsize(sb, val) setbitfield(sb + 0xA, 1, 0, val) +#define set_SSM2_imprint_spacing(sb, val) setbitfield(sb + 0xA, 1, 1, val) +#define set_SSM2_imprint_addonmode(sb, val) setbitfield(sb + 0x9, 3, 4, val) +#define IMPRINTER_0_FONT_ROT 0 +#define IMPRINTER_90_FONT_ROT 1 +#define IMPRINTER_180_FONT_ROT 2 +#define IMPRINTER_270_FONT_ROT 3 +#define set_SSM2_imprint_fontrot(sb, val) setbitfield(sb + 0x9, 3, 0, val) + /* ==================================================================== */ /* window descriptor macros for SET_WINDOW and GET_WINDOW */ diff --git a/backend/canon_dr.c b/backend/canon_dr.c index 95799e7..58299d7 100644 --- a/backend/canon_dr.c +++ b/backend/canon_dr.c @@ -3,7 +3,7 @@ This file is part of the SANE package, and implements a SANE backend for various Canon DR-series scanners. - Copyright (C) 2008-2021 m. allan noah + Copyright (C) 2008-2022 m. allan noah Yabarana Corp. www.yabarana.com provided significant funding EvriChart, Inc. www.evrichart.com provided funding and loaned equipment @@ -355,6 +355,10 @@ - rewrite do_cmd() timeout handling - remove long timeout TUR from v61 (did not help) - allow config file to set initial tur timeout for DR-X10C (#142) + v63 2022-11-18, CQ, MAN + - add support for reading the total and roller counters + v64 2022-11-18, CQ, MAN + - add complete support for imprinters on X10C (#585) SANE FLOW DIAGRAM @@ -393,6 +397,7 @@ #include /*tan*/ #include /*usleep*/ #include /*gettimeofday*/ +#include /*localtime*/ #include /*strtol*/ #include "../include/sane/sanei_backend.h" @@ -406,7 +411,7 @@ #include "canon_dr.h" #define DEBUG 1 -#define BUILD 62 +#define BUILD 64 /* values for SANE_DEBUG_CANON_DR env var: - errors 5 @@ -449,6 +454,13 @@ #define STRING_NONE SANE_I18N("None") #define STRING_JPEG SANE_I18N("JPEG") +#define STRING_IMPRINTER_8x12_FONT SANE_I18N("8x12") +#define STRING_IMPRINTER_12x12_FONT SANE_I18N("12x12") + +#define STRING_IMPRINTER_ADDON_BoW SANE_I18N("Black-on-White") +#define STRING_IMPRINTER_ADDON_BoI SANE_I18N("Black-on-Image") +#define STRING_IMPRINTER_ADDON_WoB SANE_I18N("White-on-Black") + /* Also set via config file. */ static int global_buffer_size; static int global_buffer_size_default = 2 * 1024 * 1024; @@ -494,7 +506,7 @@ static struct scanner *scanner_devList = NULL; SANE_Status sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) { - authorize = authorize; /* get rid of compiler warning */ + (void) authorize; /* get rid of compiler warning */ DBG_INIT (); DBG (10, "sane_init: start\n"); @@ -547,7 +559,7 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only) int num_devices=0; int i=0; - local_only = local_only; /* get rid of compiler warning */ + (void) local_only; /* get rid of compiler warning */ DBG (10, "sane_get_devices: start\n"); @@ -992,6 +1004,12 @@ attach_one (const char *device_name, int connType) return ret; } + /* this detects imprinters if they are available */ + ret = init_imprinters (s); + if (ret != SANE_STATUS_GOOD) { + DBG (5, "attach_one: errors while trying to detect optional imprinters, continuing\n"); + } + /* enable/read the buttons */ ret = init_panel (s); if (ret != SANE_STATUS_GOOD) { @@ -1001,6 +1019,13 @@ attach_one (const char *device_name, int connType) return ret; } + /* enable/read the lifecycle counters */ + ret = init_counters (s); + if (ret != SANE_STATUS_GOOD) { + DBG (5, "attach_one: unable to detect lifecycle counters, continuing\n"); + return ret; + } + /* sets SANE option 'values' to good defaults */ ret = init_user (s); if (ret != SANE_STATUS_GOOD) { @@ -1168,6 +1193,7 @@ init_inquire (struct scanner *s) if (strncmp ("DR", s->model_name, 2) && strncmp ("CR", s->model_name, 2) && strncmp ("P-", s->model_name, 2) + && strncmp ("R", s->model_name, 1) ) { DBG (5, "The device at '%s' is reported to be a '%s'\n", s->device_name, s->model_name); @@ -1388,8 +1414,9 @@ init_model (struct scanner *s) s->max_x_fb = s->max_x; s->max_y_fb = s->max_y; - /* missing from vpd- we will unset this for b&w machines below */ + /* missing from vpd- we will unset these for some machines below */ s->can_color = 1; + s->can_read_lifecycle_counters = 1; /* specific settings missing from vpd */ if (strstr (s->model_name,"DR-9080")){ @@ -1491,6 +1518,34 @@ init_model (struct scanner *s) s->can_monochrome=0; } + else if (strstr (s->model_name,"R40") + ){ + /* confirmed */ + s->gray_interlace[SIDE_FRONT] = GRAY_INTERLACE_C120; + s->gray_interlace[SIDE_BACK] = GRAY_INTERLACE_C120; + s->color_interlace[SIDE_FRONT] = COLOR_INTERLACE_C120; + s->color_interlace[SIDE_BACK] = COLOR_INTERLACE_C120; + s->duplex_interlace = DUPLEX_INTERLACE_2510; + /*s->duplex_offset = 320; now set in config file*/ + s->fixed_width = 1; + s->need_ccal = 1; + s->fcal_src = FCAL_SRC_SCAN; + s->fcal_dest = FCAL_DEST_SW; + s->rgb_format = 1; + s->sw_lut = 1; + + /*only in Y direction, so we trash them in X*/ + s->std_res_x[DPI_100]=0; + s->std_res_x[DPI_150]=0; + s->std_res_x[DPI_200]=0; + s->std_res_x[DPI_240]=0; + s->std_res_x[DPI_400]=0; + + /* suspected settings */ + s->ccal_version = 3; + s->has_df_ultra = 1; + } + /* copied from 2510, possibly incorrect */ else if (strstr (s->model_name,"DR-3010")){ s->rgb_format = 1; @@ -1840,6 +1895,7 @@ init_model (struct scanner *s) } else if (strstr (s->model_name,"DR-X10C")){ + int i = 0; /* Required for USB coms */ s->has_ssm = 0; @@ -1862,6 +1918,61 @@ init_model (struct scanner *s) s->std_res_y[DPI_600]=1; s->has_hwcrop = 1; + + /*valid horizontal offsets for post-imprinter*/ + s->post_imprinter_h_offset_list[++i] = 21; + s->post_imprinter_h_offset_list[++i] = 35; + s->post_imprinter_h_offset_list[++i] = 47; + s->post_imprinter_h_offset_list[++i] = 59; + s->post_imprinter_h_offset_list[++i] = 72; + s->post_imprinter_h_offset_list[++i] = 99; + s->post_imprinter_h_offset_list[++i] = 114; + s->post_imprinter_h_offset_list[++i] = 143; + s->post_imprinter_h_offset_list[++i] = 155; + s->post_imprinter_h_offset_list[++i] = 167; + s->post_imprinter_h_offset_list[++i] = 196; + s->post_imprinter_h_offset_list[++i] = 211; + s->post_imprinter_h_offset_list[++i] = 239; + s->post_imprinter_h_offset_list[++i] = 251; + s->post_imprinter_h_offset_list[++i] = 263; + s->post_imprinter_h_offset_list[++i] = 275; + s->post_imprinter_h_offset_list[++i] = 289; + s->post_imprinter_h_offset_list[0] = i; + + i = 0; + /*valid horizontal offsets for pre-imprinter*/ + s->pre_imprinter_h_offset_list[++i] = 14; + s->pre_imprinter_h_offset_list[++i] = 28; + s->pre_imprinter_h_offset_list[++i] = 41; + s->pre_imprinter_h_offset_list[++i] = 53; + s->pre_imprinter_h_offset_list[++i] = 65; + s->pre_imprinter_h_offset_list[++i] = 106; + s->pre_imprinter_h_offset_list[0] = i; + + /*valid vertical offsets for imprinters*/ + s->imprinter_v_offset_range.min = 0; + s->imprinter_v_offset_range.max = 500; + s->imprinter_v_offset_range.quant = 1; + + i = 0; + /*valid font angles for imprinters*/ + s->imprinter_font_angle_list[++i] = 0; + s->imprinter_font_angle_list[++i] = 90; + s->imprinter_font_angle_list[++i] = 180; + s->imprinter_font_angle_list[++i] = 270; + s->imprinter_font_angle_list[0] = i; + + i = 0; + s->imprint_font_size_list[i++] = STRING_IMPRINTER_8x12_FONT; + s->imprint_font_size_list[i++] = STRING_IMPRINTER_12x12_FONT; + s->imprint_font_size_list[i] = NULL; + + i = 0; + s->imprint_addon_mode_list[i++] = STRING_IMPRINTER_ADDON_BoI; + s->imprint_addon_mode_list[i++] = STRING_IMPRINTER_ADDON_BoW; + s->imprint_addon_mode_list[i++] = STRING_IMPRINTER_ADDON_WoB; + s->imprint_addon_mode_list[i++] = STRING_NONE; + s->imprint_addon_mode_list[i] = NULL; } DBG (10, "init_model: finish\n"); @@ -1869,6 +1980,30 @@ init_model (struct scanner *s) return SANE_STATUS_GOOD; } +/* + * try to detect imprinters. + */ +static SANE_Status +init_imprinters (struct scanner *s) +{ + SANE_Status ret = SANE_STATUS_GOOD; + + s->has_pre_imprinter = 0; + s->has_post_imprinter = 0; + + ret = detect_imprinter(s,R_PRE_IMPRINTER); + if(ret != SANE_STATUS_GOOD){ + return ret; + } + + ret = detect_imprinter(s,R_POST_IMPRINTER); + if(ret != SANE_STATUS_GOOD){ + return ret; + } + + return ret; +} + /* * This function enables the buttons and preloads the current panel values */ @@ -1900,6 +2035,28 @@ init_panel (struct scanner *s) return ret; } +/* + * This function disables the lifecycle counters if not available + */ +static SANE_Status +init_counters (struct scanner *s) +{ + SANE_Status ret = SANE_STATUS_GOOD; + + DBG (10, "init_counters: start\n"); + + ret = read_counters(s); + if(ret){ + DBG (5, "init_counters: disabling lifecycle counters\n"); + s->can_read_lifecycle_counters = 0; + return ret; + } + + DBG (10, "init_counters: finish\n"); + + return ret; +} + /* * set good default user values. * struct is already initialized to 0. @@ -1953,6 +2110,10 @@ init_user (struct scanner *s) s->threshold = 90; s->compress_arg = 50; + s->pre_imprint.h_offset = 65; + s->post_imprint.h_offset = 155; + s->post_imprint_addon_mode = ADDON_BoI; + DBG (10, "init_user: finish\n"); return SANE_STATUS_GOOD; @@ -2737,6 +2898,197 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option) opt->cap = SANE_CAP_INACTIVE; } + /* "Imprinter" group --------------------------------------------------- */ + if(option==OPT_IMPRINT_GROUP){ + opt->name = "imprinter-options"; + opt->title = SANE_I18N ("Imprinter Options"); + opt->desc = SANE_I18N ("Controls for imprinter units"); + opt->type = SANE_TYPE_GROUP; + opt->constraint_type = SANE_CONSTRAINT_NONE; + + /*flaming hack to get scanimage to hide group*/ + if ( !(s->has_pre_imprinter || s->has_post_imprinter) ) + opt->type = SANE_TYPE_BOOL; + } + + if(option==OPT_PRE_IMPRINT_SPECSTRING){ + opt->name = "pre-imprint-string"; + opt->title = "Pre-Imprinter string"; + opt->desc = "String specifier for the pre-imprinter text"; + opt->type = SANE_TYPE_STRING; + opt->size = IMPRINT_SPECSTRING_LEN; + if (s->has_pre_imprinter) + opt->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED; + else + opt->cap = SANE_CAP_INACTIVE; + } + + if(option==OPT_PRE_IMPRINT_H_OFFSET){ + opt->name = "pre-imprint-h-offset"; + opt->title = "Pre-Imprinter horizontal offset"; + opt->desc = "Integer specifying the horizontal positioning of the pre-imprinter"; + opt->type = SANE_TYPE_INT; + opt->unit = SANE_UNIT_MM; + opt->size = sizeof(SANE_Word); + opt->constraint_type = SANE_CONSTRAINT_WORD_LIST; + opt->constraint.word_list = s->pre_imprinter_h_offset_list; + if (s->has_pre_imprinter) + opt->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED; + else + opt->cap = SANE_CAP_INACTIVE; + } + + if(option==OPT_PRE_IMPRINT_V_OFFSET){ + opt->name = "pre-imprint-v-offset"; + opt->title = "Pre-Imprinter vertical offset"; + opt->desc = "Integer specifying the vertical positioning of the pre-imprinter"; + opt->type = SANE_TYPE_INT; + opt->unit = SANE_UNIT_MM; + opt->size = sizeof(SANE_Word); + opt->constraint_type = SANE_CONSTRAINT_RANGE; + opt->constraint.range = &s->imprinter_v_offset_range; + if (s->has_pre_imprinter) + opt->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED; + else + opt->cap = SANE_CAP_INACTIVE; + } + + if(option==OPT_PRE_IMPRINT_FONT_SIZE){ + opt->name = "pre-imprint-font-size"; + opt->title = "Pre-Imprinter font size"; + opt->desc = "Integer specifying the pre-imprint font size"; + opt->type = SANE_TYPE_STRING; + opt->constraint_type = SANE_CONSTRAINT_STRING_LIST; + opt->constraint.string_list = s->imprint_font_size_list; + opt->size = maxStringSize (opt->constraint.string_list); + if (s->has_pre_imprinter) + opt->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED; + else + opt->cap = SANE_CAP_INACTIVE; + } + + if(option==OPT_PRE_IMPRINT_FONT_ROT){ + opt->name = "pre-imprint-font-rot"; + opt->title = "Pre-Imprinter font rotation"; + opt->desc = "Integer specifying the pre-imprint font rotation"; + opt->type = SANE_TYPE_INT; + opt->unit = SANE_UNIT_NONE; + opt->size = sizeof(SANE_Word); + opt->constraint_type = SANE_CONSTRAINT_WORD_LIST; + opt->constraint.word_list = s->imprinter_font_angle_list; + if (s->has_pre_imprinter) + opt->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED; + else + opt->cap = SANE_CAP_INACTIVE; + } + + if(option==OPT_PRE_IMPRINT_SPACING){ + opt->name = "pre-imprint-spacing"; + opt->title = "Pre-Imprinter spacing"; + opt->desc = "Enables the pre-imprint extra spacing"; + opt->type = SANE_TYPE_BOOL; + if (s->has_pre_imprinter) + opt->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED; + else + opt->cap = SANE_CAP_INACTIVE; + } + + if(option==OPT_POST_IMPRINT_SPECSTRING){ + opt->name = "post-imprint-string"; + opt->title = "Post-Imprinter string"; + opt->desc = "String specifier for the post-imprinter text"; + opt->type = SANE_TYPE_STRING; + opt->size = IMPRINT_SPECSTRING_LEN; + if (s->has_post_imprinter) + opt->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED; + else + opt->cap = SANE_CAP_INACTIVE; + } + + if(option==OPT_POST_IMPRINT_H_OFFSET){ + opt->name = "post-imprint-h-offset"; + opt->title = "Post-Imprinter horizontal offset"; + opt->desc = "Integer specifying the horizontal positioning of the post-imprinter"; + opt->type = SANE_TYPE_INT; + opt->unit = SANE_UNIT_MM; + opt->size = sizeof(SANE_Word); + opt->constraint_type = SANE_CONSTRAINT_WORD_LIST; + opt->constraint.word_list = s->post_imprinter_h_offset_list; + if (s->has_post_imprinter) + opt->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED; + else + opt->cap = SANE_CAP_INACTIVE; + } + + if(option==OPT_POST_IMPRINT_V_OFFSET){ + opt->name = "post-imprint-v-offset"; + opt->title = "Post-Imprinter vertical offset"; + opt->desc = "Integer specifying the vertical positioning of the post-imprinter"; + opt->type = SANE_TYPE_INT; + opt->unit = SANE_UNIT_MM; + opt->size = sizeof(SANE_Word); + opt->constraint_type = SANE_CONSTRAINT_RANGE; + opt->constraint.range = &s->imprinter_v_offset_range; + if (s->has_post_imprinter) + opt->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED; + else + opt->cap = SANE_CAP_INACTIVE; + } + + if(option==OPT_POST_IMPRINT_FONT_SIZE){ + opt->name = "post-imprint-font-size"; + opt->title = "Post-Imprinter font size"; + opt->desc = "Integer specifying the post-imprint font size"; + opt->type = SANE_TYPE_STRING; + opt->constraint_type = SANE_CONSTRAINT_STRING_LIST; + opt->constraint.string_list = s->imprint_font_size_list; + opt->size = maxStringSize (opt->constraint.string_list); + if (s->has_post_imprinter) + opt->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED; + else + opt->cap = SANE_CAP_INACTIVE; + } + + if(option==OPT_POST_IMPRINT_FONT_ROT){ + opt->name = "post-imprint-font-rot"; + opt->title = "Post-Imprinter font rotation"; + opt->desc = "Integer specifying the post-imprint font rotation"; + opt->type = SANE_TYPE_INT; + opt->unit = SANE_UNIT_NONE; + opt->size = sizeof(SANE_Word); + opt->constraint_type = SANE_CONSTRAINT_WORD_LIST; + opt->constraint.word_list = s->imprinter_font_angle_list; + if (s->has_post_imprinter) + opt->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED; + else + opt->cap = SANE_CAP_INACTIVE; + } + + if(option==OPT_POST_IMPRINT_SPACING){ + opt->name = "post-imprint-spacing"; + opt->title = "Post-Imprinter spacing"; + opt->desc = "Enables the post-imprint extra spacing"; + opt->type = SANE_TYPE_BOOL; + if (s->has_post_imprinter) + opt->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED; + else + opt->cap = SANE_CAP_INACTIVE; + } + + if(option==OPT_POST_IMPRINT_ADDON_MODE){ + opt->name = "post-imprint-addon-mode"; + opt->title = "Post-Imprinter addon mode"; + opt->desc = "Integer specifying the type of post-imprint addon rendered in the scanned image"; + opt->type = SANE_TYPE_STRING; + opt->constraint_type = SANE_CONSTRAINT_STRING_LIST; + opt->constraint.string_list = s->imprint_addon_mode_list; + opt->size = maxStringSize (opt->constraint.string_list); + if (s->has_post_imprinter) + opt->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED; + else + opt->cap = SANE_CAP_INACTIVE; + } + /* "Sensor" group ------------------------------------------------------ */ if(option==OPT_SENSOR_GROUP){ opt->name = SANE_NAME_SENSORS; @@ -2830,6 +3182,34 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option) opt->cap = SANE_CAP_INACTIVE; } + if(option==OPT_ROLLERCOUNTER){ + opt->name = "roller-counter"; + opt->title = "Roller Counter"; + opt->desc = "Scans since last roller replacement"; + opt->type = SANE_TYPE_INT; + opt->unit = SANE_UNIT_NONE; + opt->constraint_type = SANE_CONSTRAINT_NONE; + + if (s->can_read_lifecycle_counters) + opt->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED; + else + opt->cap = SANE_CAP_INACTIVE; + } + + if(option==OPT_TOTALCOUNTER){ + opt->name = "total-counter"; + opt->title = "Total Counter"; + opt->desc = "Total scan count of the device"; + opt->type = SANE_TYPE_INT; + opt->unit = SANE_UNIT_NONE; + opt->constraint_type = SANE_CONSTRAINT_NONE; + + if (s->can_read_lifecycle_counters) + opt->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED; + else + opt->cap = SANE_CAP_INACTIVE; + } + if(option==OPT_ADF_LOADED){ opt->name = "adf-loaded"; opt->title = "ADF Loaded"; @@ -3108,6 +3488,122 @@ sane_control_option (SANE_Handle handle, SANE_Int option, *val_p = s->hwcrop; return SANE_STATUS_GOOD; + case OPT_PRE_IMPRINT_SPECSTRING: + strcpy(val, s->pre_imprint.specstring); + return SANE_STATUS_GOOD; + + case OPT_PRE_IMPRINT_H_OFFSET: + *val_p = s->pre_imprint.h_offset; + return SANE_STATUS_GOOD; + + case OPT_PRE_IMPRINT_V_OFFSET: + *val_p = s->pre_imprint.v_offset; + return SANE_STATUS_GOOD; + + case OPT_PRE_IMPRINT_FONT_SIZE: + switch (s->pre_imprint.font_size){ + case IMPRINTER_12x12_FONT: + strcpy(val, STRING_IMPRINTER_12x12_FONT); + break; + + case IMPRINTER_8x12_FONT: + strcpy(val, STRING_IMPRINTER_8x12_FONT); + break; + } + return SANE_STATUS_GOOD; + + case OPT_PRE_IMPRINT_FONT_ROT: + switch (s->pre_imprint.font_rot){ + case IMPRINTER_0_FONT_ROT: + *val_p = 0; + break; + + case IMPRINTER_90_FONT_ROT: + *val_p = 90; + break; + + case IMPRINTER_180_FONT_ROT: + *val_p = 180; + break; + + case IMPRINTER_270_FONT_ROT: + *val_p = 270; + break; + } + return SANE_STATUS_GOOD; + + case OPT_PRE_IMPRINT_SPACING: + *val_p = s->pre_imprint.spacing; + return SANE_STATUS_GOOD; + + case OPT_POST_IMPRINT_SPECSTRING: + strcpy(val, s->post_imprint.specstring); + return SANE_STATUS_GOOD; + + case OPT_POST_IMPRINT_H_OFFSET: + *val_p = s->post_imprint.h_offset; + return SANE_STATUS_GOOD; + + case OPT_POST_IMPRINT_V_OFFSET: + *val_p = s->post_imprint.v_offset; + return SANE_STATUS_GOOD; + + case OPT_POST_IMPRINT_FONT_SIZE: + switch (s->post_imprint.font_size){ + case IMPRINTER_12x12_FONT: + strcpy(val, STRING_IMPRINTER_12x12_FONT); + break; + + case IMPRINTER_8x12_FONT: + strcpy(val, STRING_IMPRINTER_8x12_FONT); + break; + } + return SANE_STATUS_GOOD; + + case OPT_POST_IMPRINT_FONT_ROT: + switch (s->post_imprint.font_rot){ + case IMPRINTER_0_FONT_ROT: + *val_p = 0; + break; + + case IMPRINTER_90_FONT_ROT: + *val_p = 90; + break; + + case IMPRINTER_180_FONT_ROT: + *val_p = 180; + break; + + case IMPRINTER_270_FONT_ROT: + *val_p = 270; + break; + } + return SANE_STATUS_GOOD; + + case OPT_POST_IMPRINT_SPACING: + *val_p = s->post_imprint.spacing; + return SANE_STATUS_GOOD; + + case OPT_POST_IMPRINT_ADDON_MODE: + switch (s->post_imprint_addon_mode){ + case ADDON_BoW: + strcpy(val, STRING_IMPRINTER_ADDON_BoW); + break; + + case ADDON_BoI: + strcpy(val, STRING_IMPRINTER_ADDON_BoI); + break; + + case ADDON_WoB: + strcpy(val, STRING_IMPRINTER_ADDON_WoB); + break; + + case ADDON_DISABLED: + strcpy(val, STRING_NONE); + break; + } + return SANE_STATUS_GOOD; + /* Sensor Group */ case OPT_START: ret = read_panel(s,OPT_START); @@ -3144,6 +3640,16 @@ sane_control_option (SANE_Handle handle, SANE_Int option, *val_p = s->panel_counter; return ret; + case OPT_ROLLERCOUNTER: + ret = read_counters(s); + *val_p = s->roller_counter; + return ret; + + case OPT_TOTALCOUNTER: + ret = read_counters(s); + *val_p = s->total_counter; + return ret; + case OPT_ADF_LOADED: ret = read_sensors(s,OPT_ADF_LOADED); *val_p = s->sensor_adf_loaded; @@ -3431,6 +3937,119 @@ sane_control_option (SANE_Handle handle, SANE_Int option, s->hwcrop = val_c; return SANE_STATUS_GOOD; + case OPT_PRE_IMPRINT_SPECSTRING: + if (strlen(val) < IMPRINT_SPECSTRING_LEN){ + strncpy(s->pre_imprint.specstring, val, IMPRINT_SPECSTRING_LEN); + return SANE_STATUS_GOOD; + } + DBG (5, "sane_control_option: pre-imprint spec string '%s' exceed the limit of %d characters\n", (SANE_String)val, IMPRINT_SPECSTRING_LEN); + return SANE_STATUS_INVAL; + + case OPT_PRE_IMPRINT_H_OFFSET: + s->pre_imprint.h_offset = val_c; + return SANE_STATUS_GOOD; + + case OPT_PRE_IMPRINT_V_OFFSET: + s->pre_imprint.v_offset = val_c; + return SANE_STATUS_GOOD; + + case OPT_PRE_IMPRINT_FONT_SIZE: + if (!strcmp (val, STRING_IMPRINTER_12x12_FONT)) { + s->pre_imprint.font_size = IMPRINTER_12x12_FONT; + } + if (!strcmp (val, STRING_IMPRINTER_8x12_FONT)) { + s->pre_imprint.font_size = IMPRINTER_8x12_FONT; + } + return SANE_STATUS_GOOD; + + case OPT_PRE_IMPRINT_FONT_ROT: + switch (val_c){ + case 0: + s->pre_imprint.font_rot = IMPRINTER_0_FONT_ROT; + break; + + case 90: + s->pre_imprint.font_rot = IMPRINTER_90_FONT_ROT; + break; + + case 180: + s->pre_imprint.font_rot = IMPRINTER_180_FONT_ROT; + break; + + case 270: + s->pre_imprint.font_rot = IMPRINTER_270_FONT_ROT; + break; + } + return SANE_STATUS_GOOD; + + case OPT_PRE_IMPRINT_SPACING: + s->pre_imprint.spacing = val_c; + return SANE_STATUS_GOOD; + + case OPT_POST_IMPRINT_SPECSTRING: + if (strlen(val) < IMPRINT_SPECSTRING_LEN){ + strncpy(s->post_imprint.specstring, val, IMPRINT_SPECSTRING_LEN); + return SANE_STATUS_GOOD; + } + DBG (5, "sane_control_option: post-imprint spec string '%s' exceed the limit of %d characters\n", (SANE_String)val, IMPRINT_SPECSTRING_LEN); + return SANE_STATUS_INVAL; + + case OPT_POST_IMPRINT_H_OFFSET: + s->post_imprint.h_offset = val_c; + return SANE_STATUS_GOOD; + + case OPT_POST_IMPRINT_V_OFFSET: + s->post_imprint.v_offset = val_c; + return SANE_STATUS_GOOD; + + case OPT_POST_IMPRINT_FONT_SIZE: + if (!strcmp (val, STRING_IMPRINTER_12x12_FONT)) { + s->post_imprint.font_size = IMPRINTER_12x12_FONT; + } + if (!strcmp (val, STRING_IMPRINTER_8x12_FONT)) { + s->post_imprint.font_size = IMPRINTER_8x12_FONT; + } + return SANE_STATUS_GOOD; + + case OPT_POST_IMPRINT_FONT_ROT: + switch (val_c){ + case 0: + s->post_imprint.font_rot = IMPRINTER_0_FONT_ROT; + break; + + case 90: + s->post_imprint.font_rot = IMPRINTER_90_FONT_ROT; + break; + + case 180: + s->post_imprint.font_rot = IMPRINTER_180_FONT_ROT; + break; + + case 270: + s->post_imprint.font_rot = IMPRINTER_270_FONT_ROT; + break; + } + return SANE_STATUS_GOOD; + + case OPT_POST_IMPRINT_SPACING: + s->post_imprint.spacing = val_c; + return SANE_STATUS_GOOD; + + case OPT_POST_IMPRINT_ADDON_MODE: + if (!strcmp (val, STRING_IMPRINTER_ADDON_BoW)) { + s->post_imprint_addon_mode = ADDON_BoW; + } + if (!strcmp (val, STRING_IMPRINTER_ADDON_BoI)) { + s->post_imprint_addon_mode = ADDON_BoI; + } + if (!strcmp (val, STRING_IMPRINTER_ADDON_WoB)) { + s->post_imprint_addon_mode = ADDON_WoB; + } + if (!strcmp (val, STRING_NONE)) { + s->post_imprint_addon_mode = ADDON_DISABLED; + } + return SANE_STATUS_GOOD; + } } /* else */ @@ -3636,6 +4255,14 @@ ssm_df (struct scanner *s) set_SSM2_DF_staple(out, 1); } + int requires_postimprint = s->has_post_imprinter && (strlen(s->post_imprint.specstring) > 0); + int requires_preimprint = s->has_pre_imprinter && (strlen(s->pre_imprint.specstring) > 0); + if (s->has_post_imprinter) + set_SSM2_DF_post_addon(out, requires_postimprint); + if (requires_postimprint || requires_preimprint){ + set_SSM2_DF_imprint(out, 1); + } + ret = do_cmd ( s, 1, 0, cmd, cmdLen, @@ -3896,6 +4523,50 @@ ssm_do (struct scanner *s) return ret; } +static SANE_Status +read_counters(struct scanner *s) +{ + SANE_Status ret = SANE_STATUS_GOOD; + + unsigned char cmd[READ_len]; + size_t cmdLen = READ_len; + + unsigned char in[R_COUNTERS_len]; + size_t inLen = R_COUNTERS_len; + + if (!s->can_read_lifecycle_counters){ + DBG(10, "read_counters: unsupported\n"); + return ret; + } + + DBG(10, "read_counters: start\n"); + + memset(cmd,0,cmdLen); + set_SCSI_opcode(cmd, READ_code); + set_R_datatype_code(cmd, SR_datatype_counters); + set_R_xfer_length(cmd, inLen); + + ret = do_cmd( + s, 1, 0, + cmd, cmdLen, + NULL, 0, + in, &inLen + ); + + if (ret == SANE_STATUS_GOOD || ret == SANE_STATUS_EOF){ + + s->total_counter = get_R_COUNTERS_total(in); + s->roller_counter = s->total_counter - get_R_COUNTERS_last_srv(in); + + DBG(10, "read_counters: total counter: %d roller_counter %d \n",s->total_counter,s->roller_counter); + ret = SANE_STATUS_GOOD; + }else{ + DBG(10, "read_counters: ERROR: %d\n",ret); + } + + return ret; +} + static SANE_Status read_sensors(struct scanner *s,SANE_Int option) { @@ -4382,6 +5053,248 @@ update_params(struct scanner *s, int calib) return ret; } +/* simplify handling cmd SANE_STATUS_EOF as SANE_STATUS_GOOD */ +SANE_Status +send_cmd(struct scanner *s, unsigned char* cmd, size_t cmdLen, + unsigned char* out, size_t outLen, + unsigned char * inBuff, size_t * inLen) +{ + SANE_Status ret=SANE_STATUS_GOOD; + + ret = do_cmd ( + s, 1, 0, + cmd, cmdLen, + out, outLen, + inBuff, inLen + ); + + if (ret == SANE_STATUS_EOF) { + ret = SANE_STATUS_GOOD; + } + + return ret; +} + +SANE_Status +send_imprint_positioning(struct scanner* s, int is_postimprint, int enabled) +{ + unsigned char cmd[SET_SCAN_MODE2_len]; + size_t cmdLen=SET_SCAN_MODE2_len; + + unsigned char out[SSM2_PAY_len]; + size_t outLen=SSM2_PAY_len; + + unsigned char out_prefix[5]={ 0x01, 0x00, 0x60, 0x00, 0x60 }; + size_t outPrefixLen=5; + + memset(cmd,0,cmdLen); + set_SCSI_opcode(cmd,SET_SCAN_MODE2_code); + set_SSM2_page_code(cmd,SM2_pc_imprinter_settings); + if (is_postimprint) + set_SSM2_postimprint_cmd(cmd); + set_SSM2_pay_len(cmd,outLen); + + memset(out,0,outLen); + memcpy(out,out_prefix,outPrefixLen); + + int h_offset; + int v_offset; + if (is_postimprint){ + if (s->post_imprint_addon_mode != ADDON_DISABLED) + set_SSM2_postimprint_addon(out); + h_offset = s->post_imprint.h_offset; + v_offset = s->post_imprint.v_offset; + + if (enabled) + DBG (10, "send_imprint_positioning: post-imprinter: h_offset: %d v_offset: %d\n",h_offset,v_offset); + }else{ + h_offset = s->pre_imprint.h_offset; + v_offset = s->pre_imprint.v_offset; + if (enabled) + DBG (10, "send_imprint_positioning: pre-imprinter: h_offset: %d v_offset: %d\n",h_offset,v_offset); + } + if(!enabled) + h_offset = v_offset = 0; + set_SSM2_imprint_hoffset(out,h_offset); + set_SSM2_imprint_voffset(out,v_offset); + + return send_cmd(s, cmd, cmdLen, out, outLen, NULL, NULL); +} + +SANE_Status +send_imprint_specstring(struct scanner* s, int is_postimprint) +{ + unsigned char cmd[SET_SCAN_MODE2_len]; + size_t cmdLen = SET_SCAN_MODE2_len; + + unsigned char out[SSM2_IMPRINTER_STRING_PAY_len]; + size_t outLen = SSM2_IMPRINTER_STRING_PAY_len; + + memset(cmd,0,cmdLen); + set_SCSI_opcode(cmd, SET_SCAN_MODE2_code); + set_SSM2_page_code(cmd, SM2_pc_imprinter_specstring); + if (is_postimprint) + set_SSM2_postimprint_cmd(cmd); + set_SSM2_pay_len(cmd, outLen); + + memset(out,0,outLen); + /* most of these bytes have yet to be identified to specific functionalities, + as they never seem to change under different imprinting mode */ + unsigned char out_prefix[32] = { + 0x01, 0x00, + 0x60, 0x00, + 0x60, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x03, 0x00, + 0x00, 0x00, + 0x01, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x01, + 0x04, 0x00, + 0x00, 0x00 + }; + memcpy(out, out_prefix, 32); + if (is_postimprint){ + set_SSM2_imprint_fontsize(out, s->post_imprint.font_size); + set_SSM2_imprint_fontrot(out, s->post_imprint.font_rot); + set_SSM2_imprint_spacing(out, s->post_imprint.spacing); + if (s->post_imprint_addon_mode != ADDON_DISABLED) + set_SSM2_imprint_addonmode(out, s->post_imprint_addon_mode); + strcpy((SANE_Char*)(out + 45), (SANE_String_Const) s->post_imprint.specstring); + DBG (10, "send_imprint_specstring: post-imprinter: font size: %d rotation: %d spacing: %d text: '%s' imprint-addon-mode: %d\n",s->post_imprint.font_size,s->post_imprint.font_rot,s->post_imprint.spacing,s->post_imprint.specstring,s->post_imprint_addon_mode); + }else{ + set_SSM2_imprint_fontsize(out, s->pre_imprint.font_size); + set_SSM2_imprint_fontrot(out, s->pre_imprint.font_rot); + set_SSM2_imprint_spacing(out, s->pre_imprint.spacing); + strcpy((SANE_Char*)(out + 45), (SANE_String_Const) s->pre_imprint.specstring); + DBG (10, "send_imprint_specstring: pre-imprinter: font size: %d rotation: %d spacing: %d text: '%s'\n",s->pre_imprint.font_size,s->pre_imprint.font_rot,s->pre_imprint.spacing,s->pre_imprint.specstring); + } + + return send_cmd(s, cmd, cmdLen, out, outLen, NULL, NULL); +} + +SANE_Status +send_imprint_date_and_time(struct scanner* s) +{ + unsigned char cmd[SET_SCAN_MODE2_len]; + size_t cmdLen = SET_SCAN_MODE2_len; + + unsigned char out[SSM2_PAY_len]; + size_t outLen = SSM2_PAY_len; + + memset(cmd,0,cmdLen); + set_SCSI_opcode(cmd, SET_SCAN_MODE2_code); + set_SSM2_page_code(cmd, SM2_pc_date_time); + set_SSM2_pay_len(cmd, outLen); + + memset(out,0,outLen); + + time_t t = time(NULL); + struct tm tM = *localtime(&t); + + set_SSM2_imprint_year(out, tM.tm_year + 1900); + set_SSM2_imprint_month(out, tM.tm_mon + 1); + set_SSM2_imprint_day(out, tM.tm_mday); + set_SSM2_imprint_hour(out, tM.tm_hour); + set_SSM2_imprint_min(out, tM.tm_min); + set_SSM2_imprint_sec(out, tM.tm_sec); + + return send_cmd(s, cmd, cmdLen, out, outLen, NULL, NULL); +} + +SANE_Status +load_imprinting_settings(struct scanner *s) +{ + SANE_Status ret = SANE_STATUS_GOOD; + + int requires_preimprint = (strlen(s->pre_imprint.specstring) > 0); + int requires_postimprint = (strlen(s->post_imprint.specstring) > 0); + int send_date_time = (s->has_pre_imprinter && requires_preimprint) || (s->has_post_imprinter && requires_postimprint); + + if (s->has_pre_imprinter){ + ret = send_imprint_positioning(s, 0, requires_preimprint); + DBG(10, "load_imprinting_settings: send_pre_imprint_positioning = %d \n", ret); + if (ret != SANE_STATUS_GOOD) + return ret; + if (requires_preimprint){ + ret = send_imprint_specstring(s, 0); + DBG(10, "load_imprinting_settings: send_pre_imprint_specstring = %d \n", ret); + if (ret != SANE_STATUS_GOOD) + return ret; + } + } + + if (s->has_post_imprinter){ + ret = send_imprint_positioning(s, 1, requires_postimprint); + DBG(10, "load_imprinting_settings: send_post_imprint_positioning = %d \n", ret); + if (ret != SANE_STATUS_GOOD) + return ret; + if (requires_postimprint){ + ret = send_imprint_specstring(s, 1); + DBG(10, "load_imprinting_settings: send_post_imprint_specstring = %d \n", ret); + if (ret != SANE_STATUS_GOOD) + return ret; + } + } + + if (send_date_time){ + ret = send_imprint_date_and_time(s); + DBG(10, "load_imprinting_settings: send_imprint_date_and_time = %d \n", ret); + } + return ret; +} + +static SANE_Status +detect_imprinter(struct scanner *s,SANE_Int option) +{ + SANE_Status ret = SANE_STATUS_GOOD; + + unsigned char cmd[READ_len]; + size_t cmdLen = READ_len; + + unsigned char in[R_IMPRINTER_len]; + size_t inLen = R_IMPRINTER_len; + + DBG (10, "detect_imprinter: start %d\n", option); + + memset(cmd,0,cmdLen); + set_SCSI_opcode(cmd, READ_code); + set_R_datatype_code(cmd, SR_datatype_imprinters); + set_R_xfer_uid(cmd, option); + set_R_xfer_length(cmd, inLen); + + ret = do_cmd( + s, 1, 0, + cmd, cmdLen, + NULL, 0, + in, &inLen + ); + + if (ret == SANE_STATUS_GOOD || ret == SANE_STATUS_EOF) { + ret = SANE_STATUS_GOOD; + } + + int imprinter_found = get_R_IMPRINTER_found(in); + const char* imprinter_type = "unknown"; + if (option == R_PRE_IMPRINTER){ + s->has_pre_imprinter = imprinter_found; + imprinter_type = "pre-imprinter"; + } + else if (option == R_POST_IMPRINTER){ + s->has_post_imprinter = imprinter_found; + imprinter_type = "post-imprinter"; + } + + DBG (10, "detect_imprinter: type: %s. found status bit: %d \n",imprinter_type,imprinter_found); + + return ret; +} + /* reset image size parameters after buffer_xxx functions changed them */ SANE_Status update_i_params(struct scanner *s) @@ -4471,6 +5384,14 @@ sane_start (SANE_Handle handle) goto errors; } + if (s->has_pre_imprinter || s->has_post_imprinter){ + ret = load_imprinting_settings(s); + if (ret != SANE_STATUS_GOOD) { + DBG (5, "sane_start: ERROR: invalid imprinting settings\n"); + goto errors; + } + } + /* reset the page counter after calibration */ s->panel_counter = 0; s->prev_page = 0; @@ -7204,7 +8125,7 @@ sense_handler (int fd, unsigned char * sensed_data, void *arg) DBG (5, "sense_handler: start\n"); /* kill compiler warning */ - fd = fd; + (void) fd; /* copy the rs return data into the scanner struct so that the caller can use it if he wants @@ -7465,8 +8386,8 @@ do_scsi_cmd(struct scanner *s, int runRS, int timeout, int ret; /*shut up compiler*/ - runRS=runRS; - timeout=timeout; + (void) runRS; + (void) timeout; DBG(10, "do_scsi_cmd: start\n"); diff --git a/backend/canon_dr.conf.in b/backend/canon_dr.conf.in index 7bce43c..399ed27 100644 --- a/backend/canon_dr.conf.in +++ b/backend/canon_dr.conf.in @@ -214,3 +214,7 @@ usb 0x1083 0x165d # P-208II usb 0x1083 0x165f + +# R40 +option duplex-offset 320 +usb 0x1083 0x1679 diff --git a/backend/canon_dr.h b/backend/canon_dr.h index 7afbb90..e84b5b7 100644 --- a/backend/canon_dr.h +++ b/backend/canon_dr.h @@ -51,6 +51,22 @@ enum scanner_Option OPT_SIDE, OPT_HW_CROP, + /*imprinter option group*/ + OPT_IMPRINT_GROUP, + OPT_PRE_IMPRINT_SPECSTRING, + OPT_PRE_IMPRINT_H_OFFSET, + OPT_PRE_IMPRINT_V_OFFSET, + OPT_PRE_IMPRINT_FONT_SIZE, + OPT_PRE_IMPRINT_FONT_ROT, + OPT_PRE_IMPRINT_SPACING, + OPT_POST_IMPRINT_SPECSTRING, + OPT_POST_IMPRINT_H_OFFSET, + OPT_POST_IMPRINT_V_OFFSET, + OPT_POST_IMPRINT_FONT_SIZE, + OPT_POST_IMPRINT_FONT_ROT, + OPT_POST_IMPRINT_SPACING, + OPT_POST_IMPRINT_ADDON_MODE, + /*sensor group*/ OPT_SENSOR_GROUP, OPT_START, @@ -60,6 +76,8 @@ enum scanner_Option OPT_COUNTONLY, OPT_BYPASSMODE, OPT_COUNTER, + OPT_ROLLERCOUNTER, + OPT_TOTALCOUNTER, OPT_ADF_LOADED, OPT_CARD_LOADED, @@ -106,6 +124,32 @@ struct img_params }; +struct imprint_params +{ + /* ------------------------------------------------------------------------------ */ + /* allowed values for post imprinter (in mm units): */ + /* 21, 35, 47, 59, 72, 99, 114, 143, 155, 167, 196, 211, 239, 251, 263, 275, 289 */ + /* allowed values for pre imprinter (in mm units): */ + /* 14, 28, 41, 53, 65, 106 */ + int h_offset; + /* --------------------------------------- */ + /* allowed values: 0 to 500 (in mm units) */ + int v_offset; + + int font_size; + int font_rot; + int spacing; + +#define IMPRINT_SPECSTRING_LEN 64 + /* ---------------------------------- */ + /* special tokens: */ + /* \TIME time in HH:MM:SS */ + /* \DMY date in DD/MM/YYYY */ + /* \YMD date in YYYY/MM/DD */ + /* [[0-9]+] scan page count */ + char specstring[IMPRINT_SPECSTRING_LEN]; +}; + struct scanner { /* --------------------------------------------------------------------- */ @@ -204,9 +248,12 @@ struct scanner int has_ssm2; /* newer scanners user this similar command */ int has_ssm_pay_head_len; /* newer scanners put the length twice in ssm */ int has_hwcrop; + int has_pre_imprinter; + int has_post_imprinter; int can_read_sensors; int can_read_panel; int can_write_panel; + int can_read_lifecycle_counters; int rgb_format; /* meaning unknown */ int padding; /* meaning unknown */ @@ -317,13 +364,34 @@ struct scanner unsigned char lut[256]; /* --------------------------------------------------------------------- */ - /* values used by the software enhancement code (deskew, crop, etc) */ + /* values used by the software enhancement code (deskew, crop, etc) */ SANE_Status deskew_stat; int deskew_vals[2]; double deskew_slope; int crop_vals[4]; + /* imprinter params */ + struct imprint_params pre_imprint; + struct imprint_params post_imprint; + enum { + /*Black-on-White*/ + ADDON_BoW = 0, + /*White-on-Black*/ + ADDON_WoB, + /*Black-on-Image*/ + ADDON_BoI, + ADDON_DISABLED + } post_imprint_addon_mode; + + /* imprinter param constraints */ + SANE_Int pre_imprinter_h_offset_list[7]; + SANE_Int post_imprinter_h_offset_list[18]; + SANE_Range imprinter_v_offset_range; + SANE_String_Const imprint_font_size_list[3]; + SANE_Int imprinter_font_angle_list[5]; + SANE_String_Const imprint_addon_mode_list[5]; + /* this is defined in sane spec as a struct containing: SANE_Frame format; SANE_Bool last_frame; @@ -379,6 +447,8 @@ struct scanner int panel_counter; int sensor_adf_loaded; int sensor_card_loaded; + int roller_counter; + int total_counter; /* values which are used to track the frontend's access to sensors */ char panel_read[OPT_COUNTER - OPT_START + 1]; @@ -541,7 +611,9 @@ static SANE_Status sense_handler (int scsi_fd, u_char * result, void *arg); static SANE_Status init_inquire (struct scanner *s); static SANE_Status init_vpd (struct scanner *s); static SANE_Status init_model (struct scanner *s); +static SANE_Status init_imprinters (struct scanner *s); static SANE_Status init_panel (struct scanner *s); +static SANE_Status init_counters (struct scanner *s); static SANE_Status init_user (struct scanner *s); static SANE_Status init_options (struct scanner *s); @@ -589,6 +661,7 @@ static SANE_Status update_params (struct scanner *s, int calib); static SANE_Status update_i_params (struct scanner *s); static SANE_Status clean_params (struct scanner *s); +static SANE_Status read_counters(struct scanner *s); static SANE_Status read_sensors(struct scanner *s, SANE_Int option); static SANE_Status read_panel(struct scanner *s, SANE_Int option); static SANE_Status send_panel(struct scanner *s); @@ -632,6 +705,12 @@ static SANE_Status calibrate_fine_dest_hw(struct scanner *s); static SANE_Status write_AFE (struct scanner *s); static SANE_Status calibration_scan (struct scanner *s, int); +static SANE_Status send_imprint_positioning(struct scanner* s, int is_postimprint, int enabled); +static SANE_Status send_imprint_specstring(struct scanner* s, int is_postimprint); +static SANE_Status send_imprint_date_and_time(struct scanner* s); +static SANE_Status load_imprinting_settings(struct scanner *s); +static SANE_Status detect_imprinter(struct scanner *s, SANE_Int option); + static void hexdump (int level, char *comment, unsigned char *p, int l); static void default_globals (void); diff --git a/backend/canon_lide70-common.c b/backend/canon_lide70-common.c index 0882fec..4e58222 100644 --- a/backend/canon_lide70-common.c +++ b/backend/canon_lide70-common.c @@ -3249,7 +3249,7 @@ CANON_start_scan (CANON_Handle * chndl) chndl->fname = strdup ("/tmp/scan.XXXXXX"); fd = mkstemp (chndl->fname); - if (!fd) + if (fd == -1) { return SANE_STATUS_IO_ERROR; } diff --git a/backend/canon_lide70.c b/backend/canon_lide70.c index 4cc8999..2a3bd30 100644 --- a/backend/canon_lide70.c +++ b/backend/canon_lide70.c @@ -819,8 +819,8 @@ sane_control_option (SANE_Handle handle, SANE_Int option, SANE_Action action, "sane_control_option: get option %d (%s), value=%.1f %s\n", option, chndl->opt[option].name, SANE_UNFIX (*(SANE_Fixed *) value), - chndl->opt[option].unit == - SANE_UNIT_MM ? "mm" : SANE_UNIT_DPI ? "dpi" : ""); + chndl->opt[option].unit == SANE_UNIT_MM ? "mm" : + (chndl->opt[option].unit == SANE_UNIT_DPI ? "dpi" : "")); break; } case opt_non_blocking: @@ -863,7 +863,7 @@ sane_get_parameters (SANE_Handle handle, SANE_Parameters * params) Canon_Scanner *hndl = handle; /* Eliminate compiler warning */ CANON_Handle *chndl = &hndl->scan; - int rc = SANE_STATUS_GOOD; + SANE_Status rc = SANE_STATUS_GOOD; int w = SANE_UNFIX (chndl->val[opt_br_x].w - chndl->val[opt_tl_x].w) / MM_IN_INCH * chndl->val[opt_resolution].w; @@ -956,7 +956,7 @@ sane_set_io_mode (SANE_Handle handle, SANE_Bool non_blocking) SANE_Status sane_get_select_fd (SANE_Handle handle, SANE_Int * fd) { - handle = handle; /* silence gcc */ - fd = fd; /* silence gcc */ + (void) handle; /* silence gcc */ + (void) fd; /* silence gcc */ return SANE_STATUS_UNSUPPORTED; } diff --git a/backend/canon_pp-io.c b/backend/canon_pp-io.c index 0b92b11..9e6e006 100644 --- a/backend/canon_pp-io.c +++ b/backend/canon_pp-io.c @@ -178,8 +178,8 @@ int sanei_canon_pp_wake_scanner(struct parport *port, int mode) usleep(100000); } - } while ((i < max_cycles) && (!expect(port,"Scanner wakeup reply 2", - 0x03, 0x1f, 100000) == 0)); + } while ((i < max_cycles) && expect(port, "Scanner wakeup reply 2", + 0x03, 0x1f, 100000)); /* Block just after chessboarding Reply 1 (S3 and S4 on, S5 and S7 off) */ diff --git a/backend/canon_pp.c b/backend/canon_pp.c index b933102..79c6c63 100644 --- a/backend/canon_pp.c +++ b/backend/canon_pp.c @@ -1787,7 +1787,9 @@ static int init_cal(char *file) ************************************************************************/ static SANE_Status fix_weights_file(CANONP_Scanner *cs) { - char *tmp, *myhome, buf[PATH_MAX]; + static const char default_weights_file_prefix[] = + "~/.sane/canon_pp-calibration-"; + char *tmp, *myhome; int i; struct stat *f_stat; @@ -1804,31 +1806,32 @@ static SANE_Status fix_weights_file(CANONP_Scanner *cs) if (cs->weights_file == NULL) { - /* Will be of form canon_pp-calibration-parport0 or -0x378 */ - sprintf(buf, "~/.sane/canon_pp-calibration-%s", + /* Form is ~/.sane/canon_pp-calibration-parport0 or -0x378 */ + i = strlen(default_weights_file_prefix) + + strlen(cs->params.port->name); + if ((cs->weights_file = malloc(i + 1)) == NULL) + return SANE_STATUS_NO_MEM; + sprintf(cs->weights_file, "%s%s", default_weights_file_prefix, cs->params.port->name); - cs->weights_file = strdup(buf); } /* Get the user's home dir if they used ~ */ if (cs->weights_file[0] == '~') { - if ((tmp = malloc(PATH_MAX)) == NULL) - return SANE_STATUS_NO_MEM; if ((myhome = getenv("HOME")) == NULL) { DBG(0,"fix_weights_file: FATAL: ~ used, but $HOME not" " set!\n"); - free(tmp); - tmp = NULL; return SANE_STATUS_INVAL; } - strncpy(tmp, myhome, PATH_MAX); - strncpy(tmp+strlen(tmp), (cs->weights_file)+1, - PATH_MAX-strlen(tmp)); + i = strlen(myhome) + strlen(&cs->weights_file[1]); + if ((tmp = malloc(i + 1)) == NULL) + return SANE_STATUS_NO_MEM; + sprintf(tmp, "%s%s", myhome, &cs->weights_file[1]); free(cs->weights_file); cs->weights_file = tmp; + tmp = NULL; } if ((f_stat = malloc(sizeof(*f_stat))) == NULL) diff --git a/backend/cardscan.c b/backend/cardscan.c index 2adad7c..8984f7a 100644 --- a/backend/cardscan.c +++ b/backend/cardscan.c @@ -271,7 +271,7 @@ static struct scanner *scanner_devList = NULL; SANE_Status sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) { - authorize = authorize; /* get rid of compiler warning */ + (void) authorize; /* get rid of compiler warning */ DBG_INIT (); DBG (10, "sane_init: start\n"); @@ -323,7 +323,7 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only) int num_devices=0; int i=0; - local_only = local_only; /* get rid of compiler warning */ + (void) local_only; /* get rid of compiler warning */ DBG (10, "sane_get_devices: start\n"); diff --git a/backend/coolscan.c b/backend/coolscan.c index e51b499..2aaef4e 100644 --- a/backend/coolscan.c +++ b/backend/coolscan.c @@ -1853,8 +1853,8 @@ hexdump (int level, char *comment, unsigned char *p, int l) static SANE_Status sense_handler (int scsi_fd, unsigned char * result, void *arg) { - scsi_fd = scsi_fd; - arg = arg; + (void) scsi_fd; + (void) arg; if (result[0] != 0x70) { @@ -2155,7 +2155,7 @@ attach_one (const char *devName) static void sigterm_handler (int signal) { - signal = signal; + (void) signal; sanei_scsi_req_flush_all (); /* flush SCSI queue */ _exit (SANE_STATUS_GOOD); } @@ -2360,7 +2360,7 @@ static int RGBIfix16(Coolscan_t * scanner, unsigned short *opr,*opg,*opb,*opi; int x; - scanner = scanner; lutr = lutr; lutg = lutg; lutb = lutb; luti = luti; + (void) scanner; (void) lutr; (void) lutg; (void) lutb; (void) luti; for(x=0;xpic_taken); return SANE_STATUS_GOOD; @@ -2445,14 +2419,15 @@ sane_start (SANE_Handle handle) * port overruns on a 90MHz pentium until I used hdparm * to set the "-u1" flag on the system drives. */ - int fd; + char tmpnamebuf[] = TMPFILE_PATTERN; - fd = open (tmpname, O_CREAT | O_EXCL | O_WRONLY, 0600); + int fd = mkstemp (tmpnamebuf); if (fd == -1) - { - DBG (0, "Unable to open tmp file\n"); - return SANE_STATUS_INVAL; - } + { + DBG (0, "Unable to make temp file %s\n", tmpnamebuf); + return SANE_STATUS_INVAL; + } + f = fdopen (fd, "wb"); if (f == NULL) { @@ -2524,12 +2499,12 @@ sane_start (SANE_Handle handle) else { fclose (f); - if (convert_pic (tmpname, SAVE_ADJASPECT | SAVE_24BITS) == -1) + if (convert_pic (tmpnamebuf, SAVE_ADJASPECT | SAVE_24BITS) == -1) { DBG (3, "sane_open: unable to convert\n"); return SANE_STATUS_INVAL; } - unlink (tmpname); + unlink (tmpnamebuf); outbytes = 0; } } diff --git a/backend/dell1600n_net.c b/backend/dell1600n_net.c index 41be589..9f2d48d 100644 --- a/backend/dell1600n_net.c +++ b/backend/dell1600n_net.c @@ -946,7 +946,7 @@ HexDump (int debugLevel, const unsigned char *buf, size_t bufSize) { if (!(i % 16)) - sprintf (lineBuf, "%p: ", (buf + i)); + sprintf (lineBuf, "%p: ", (void *) &buf[i]); sprintf (itemBuf, "%02x ", (const unsigned int) buf[i]); @@ -1199,7 +1199,7 @@ ProcessFindResponse (unsigned char *pData, size_t size) DBG (10, "ProcessFindResponse: processing %lu bytes, pData=%p\n", - (unsigned long)size, pData); + (unsigned long) size, (void *) pData); /* check we have a complete packet */ if (!MessageIsComplete (pData, size)) @@ -1355,7 +1355,7 @@ ProcessUdpResponse (unsigned char *pData, size_t size, HexDump (15, pData, size); DBG (10, "ProcessUdpResponse: processing %lu bytes, pData=%p\n", - (unsigned long)size, pData); + (unsigned long) size, (void *) pData); /* check we have a complete packet */ if (!MessageIsComplete (pData, size)) @@ -1486,7 +1486,7 @@ ProcessTcpResponse (struct ScannerState *pState, struct ComBuf *pTcpBuf) int bProcessImage = 0; DBG (10, "ProcessTcpResponse: processing %lu bytes, pData=%p\n", - (unsigned long)pTcpBuf->m_used, pData); + (unsigned long) pTcpBuf->m_used, (void *) pData); HexDump (15, pData, pTcpBuf->m_used); /* if message not complete then wait for more to arrive */ @@ -1799,7 +1799,7 @@ ProcessPageData (struct ScannerState *pState) struct PageInfo pageInfo; JSAMPLE *pJpegLine = NULL; - uint32 *pTiffRgba = NULL; + uint32_t *pTiffRgba = NULL; unsigned char *pOut; char tiffErrBuf[1024]; diff --git a/backend/dll.c b/backend/dll.c index a3233e8..bf34c4f 100644 --- a/backend/dll.c +++ b/backend/dll.c @@ -1068,7 +1068,7 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only) char *full_name; int i, num_devs; size_t len; -#define ASSERT_SPACE(n) \ +#define ASSERT_SPACE(n) do \ { \ if (devlist_len + (n) > devlist_size) \ { \ @@ -1080,7 +1080,7 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only) if (!devlist) \ return SANE_STATUS_NO_MEM; \ } \ - } + } while (0) DBG (3, "sane_get_devices\n"); @@ -1365,7 +1365,7 @@ sane_read (SANE_Handle handle, SANE_Byte * data, SANE_Int max_length, struct meta_scanner *s = handle; DBG (3, "sane_read(handle=%p,data=%p,maxlen=%d,lenp=%p)\n", - handle, data, max_length, (void *) length); + handle, (void *) data, max_length, (void *) length); return (*(op_read_t)s->be->op[OP_READ]) (s->handle, data, max_length, length); } diff --git a/backend/dmc.c b/backend/dmc.c index b1a3b5a..410e48a 100644 --- a/backend/dmc.c +++ b/backend/dmc.c @@ -812,7 +812,7 @@ sane_init(SANE_Int *version_code, SANE_Auth_Callback authorize) size_t len; FILE *fp; - authorize = authorize; + (void) authorize; DBG_INIT(); if (version_code) { @@ -891,7 +891,7 @@ sane_get_devices(SANE_Device const ***device_list, SANE_Bool local_only) DMC_Device *dev; int i = 0; - local_only = local_only; + (void) local_only; if (devlist) free(devlist); devlist = malloc((NumDevices+1) * sizeof(devlist[0])); @@ -1392,8 +1392,8 @@ sane_cancel (SANE_Handle handle) SANE_Status sane_set_io_mode (SANE_Handle handle, SANE_Bool non_blocking) { - handle = handle; - non_blocking = non_blocking; + (void) handle; + (void) non_blocking; return SANE_STATUS_UNSUPPORTED; } @@ -1401,8 +1401,8 @@ sane_set_io_mode (SANE_Handle handle, SANE_Bool non_blocking) SANE_Status sane_get_select_fd (SANE_Handle handle, SANE_Int *fd) { - handle = handle; - fd = fd; + (void) handle; + (void) fd; return SANE_STATUS_UNSUPPORTED; } diff --git a/backend/epjitsu.c b/backend/epjitsu.c index 6fda662..7430108 100644 --- a/backend/epjitsu.c +++ b/backend/epjitsu.c @@ -3,7 +3,7 @@ This file implements a SANE backend for the Fujitsu fi-60F, the ScanSnap S300/S1300, and (hopefully) other Epson-based scanners. - Copyright 2007-2015 by m. allan noah + Copyright 2007-2022 by m. allan noah Copyright 2009 by Richard Goedeken Development funded by Microdea, Inc., TrueCheck, Inc. and Archivista, GmbH @@ -155,6 +155,10 @@ v31 2017-04-09, MAN - hardware gray support for fi-60F/65F (disabled pending calibration) - merge fi-60F/65F settings + v32 2022-11-15, MAN + - fix hanging scan when using source = ADF Back (fixes #601) + v33 2022-11-17, MAN + - S1300i: fix color plane offset at 225 and 330 dpi (fixes #538) SANE FLOW DIAGRAM @@ -203,8 +207,14 @@ #include "epjitsu-cmd.h" #define DEBUG 1 -#define BUILD 31 +#define BUILD 33 +#ifndef MIN + #define MIN(a,b) ((a) < (b) ? (a) : (b)) +#endif +#ifndef MAX + #define MAX(a,b) ((a) > (b) ? (a) : (b)) +#endif #ifndef MAX3 #define MAX3(a,b,c) ((a) > (b) ? ((a) > (c) ? a : c) : ((b) > (c) ? b : c)) #endif @@ -265,7 +275,7 @@ static struct scanner *scanner_devList = NULL; SANE_Status sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) { - authorize = authorize; /* get rid of compiler warning */ + (void) authorize; /* get rid of compiler warning */ DBG_INIT (); DBG (10, "sane_init: start\n"); @@ -317,7 +327,7 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only) int num_devices=0; int i=0; - local_only = local_only; /* get rid of compiler warning */ + (void) local_only; /* get rid of compiler warning */ DBG (10, "sane_get_devices: start\n"); @@ -1137,7 +1147,7 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option) /* values stored in 1200 dpi units */ /* must be converted to MM for sane */ s->tl_x_range.min = SCANNER_UNIT_TO_FIXED_MM(0); - s->tl_x_range.max = SCANNER_UNIT_TO_FIXED_MM(get_page_width(s)-s->min_x); + s->tl_x_range.max = SCANNER_UNIT_TO_FIXED_MM(MAX(0, get_page_width(s)-s->min_x)); s->tl_x_range.quant = MM_PER_UNIT_FIX; opt->name = SANE_NAME_SCAN_TL_X; @@ -1156,7 +1166,7 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option) /* values stored in 1200 dpi units */ /* must be converted to MM for sane */ s->tl_y_range.min = SCANNER_UNIT_TO_FIXED_MM(0); - s->tl_y_range.max = SCANNER_UNIT_TO_FIXED_MM(get_page_height(s)-s->min_y); + s->tl_y_range.max = SCANNER_UNIT_TO_FIXED_MM(MAX(0, get_page_height(s)-s->min_y)); s->tl_y_range.quant = MM_PER_UNIT_FIX; opt->name = SANE_NAME_SCAN_TL_Y; @@ -1174,7 +1184,7 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option) /* values stored in 1200 dpi units */ /* must be converted to MM for sane */ s->br_x_range.min = SCANNER_UNIT_TO_FIXED_MM(s->min_x); - s->br_x_range.max = SCANNER_UNIT_TO_FIXED_MM(get_page_width(s)); + s->br_x_range.max = SCANNER_UNIT_TO_FIXED_MM(MAX(s->min_x, get_page_width(s))); s->br_x_range.quant = MM_PER_UNIT_FIX; opt->name = SANE_NAME_SCAN_BR_X; @@ -1193,7 +1203,7 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option) /* values stored in 1200 dpi units */ /* must be converted to MM for sane */ s->br_y_range.min = SCANNER_UNIT_TO_FIXED_MM(s->min_y); - s->br_y_range.max = SCANNER_UNIT_TO_FIXED_MM(get_page_height(s)); + s->br_y_range.max = SCANNER_UNIT_TO_FIXED_MM(MAX(s->min_y, get_page_height(s))); s->br_y_range.quant = MM_PER_UNIT_FIX; opt->name = SANE_NAME_SCAN_BR_Y; @@ -2042,14 +2052,12 @@ change_params(struct scanner *s) /* height */ if (s->tl_y > s->max_y - s->min_y) s->tl_y = s->max_y - s->min_y - s->adf_height_padding; - if (s->tl_y + s->page_height > s->max_y - s->adf_height_padding) - s->page_height = s->max_y - s->adf_height_padding - s->tl_y; - if (s->page_height < s->min_y && s->page_height > 0) - s->page_height = s->min_y; + s->page_height = MIN(s->page_height, s->max_y - s->adf_height_padding - s->tl_y); + if (s->page_height > 0) + s->page_height = MAX(s->page_height, s->min_y); if (s->tl_y + s->page_height > s->max_y) s->tl_y = s->max_y - s->adf_height_padding - s->page_height; - if (s->tl_y < 0) - s->tl_y = 0; + s->tl_y = MAX(s->tl_y, 0); if (s->page_height > 0) { s->br_y = s->tl_y + s->page_height; @@ -2059,10 +2067,9 @@ change_params(struct scanner *s) } /*width*/ - if (s->page_width > s->max_x) - s->page_width = s->max_x; - else if (s->page_width < s->min_x) - s->page_width = s->min_x; + s->page_width = MIN(s->page_width, s->max_x); + s->page_width = MAX(s->page_width, s->min_x); + s->tl_x = (s->max_x - s->page_width)/2; s->br_x = (s->max_x + s->page_width)/2; @@ -2177,7 +2184,7 @@ change_params(struct scanner *s) /* adf with specified paper size */ s->front.height = SCANNER_UNIT_TO_PIX(s->page_height, s->front.y_res); } - s->front.width_pix = s->block_img.width_pix; + s->front.width_pix = SCANNER_UNIT_TO_PIX(s->page_width, s->resolution * img_heads); s->front.x_start_offset = (s->block_xfr.image->width_pix - s->front.width_pix)/2; switch (s->mode) { case MODE_COLOR: @@ -2310,12 +2317,8 @@ load_lut (unsigned char * lut, for(i=0;i<=max_in_val;i++){ j = rise*i + shift; - if(jout_max){ - j=out_max; - } + j = MAX(j, out_min); + j = MIN(j, out_max); *lut_p=j; lut_p++; @@ -2654,7 +2657,7 @@ coarsecal_send_cal(struct scanner *s, unsigned char *pay) unsigned char stat[1]; size_t cmdLen,statLen,payLen; - DBG (5, "coarsecal_send_cal: start\n"); + DBG (10, "coarsecal_send_cal: start\n"); /* send coarse cal (c6) */ cmd[0] = 0x1b; cmd[1] = 0xc6; @@ -2697,7 +2700,7 @@ coarsecal_send_cal(struct scanner *s, unsigned char *pay) return SANE_STATUS_IO_ERROR; } - DBG (5, "coarsecal_send_cal: finish\n"); + DBG (10, "coarsecal_send_cal: finish\n"); return ret; } @@ -2709,7 +2712,7 @@ coarsecal_get_line(struct scanner *s, struct image *img) unsigned char stat[1]; size_t cmdLen,statLen; - DBG (5, "coarsecal_get_line: start\n"); + DBG (10, "coarsecal_get_line: start\n"); /* send scan d2 command */ cmd[0] = 0x1b; @@ -2746,7 +2749,7 @@ coarsecal_get_line(struct scanner *s, struct image *img) /* convert the raw data into normal packed pixel data */ descramble_raw(s, &s->cal_image); - DBG (5, "coarsecal_get_line: finish\n"); + DBG (10, "coarsecal_get_line: finish\n"); return ret; } @@ -2758,7 +2761,7 @@ coarsecal_dark(struct scanner *s, unsigned char *pay) int try_count, cal_good[2], x, j; int param[2], zcount[2], high_param[2], low_param[2], avg[2], maxval[2]; - DBG (5, "coarsecal_dark: start\n"); + DBG (10, "coarsecal_dark: start\n"); /* dark cal, lamp off */ ret = lamp(s,0); @@ -2844,7 +2847,7 @@ coarsecal_dark(struct scanner *s, unsigned char *pay) } /* continue looping for up to 8 tries */ - DBG (5, "coarsecal_dark: finish\n"); + DBG (10, "coarsecal_dark: finish\n"); return ret; } @@ -2857,7 +2860,7 @@ coarsecal_light(struct scanner *s, unsigned char *pay) int param[2], zcount[2], high_param[2], low_param[2], avg[2]; int rgb_avg[2][3], rgb_hicount[2][3]; - DBG (5, "coarsecal_light: start\n"); + DBG (10, "coarsecal_light: start\n"); /* light cal, lamp on */ ret = lamp(s,1); @@ -2961,7 +2964,7 @@ coarsecal_light(struct scanner *s, unsigned char *pay) } } - DBG (5, "coarsecal_light: finish\n"); + DBG (10, "coarsecal_light: finish\n"); return ret; } @@ -3023,6 +3026,8 @@ finecal_send_cal(struct scanner *s) unsigned char *p_out, *p_in = s->sendcal.buffer; int planes; + DBG (10, "finecal_send_cal: start\n"); + if(s->model == MODEL_FI60F || s->model == MODEL_FI65F) planes = 3; if(s->model == MODEL_S300 || s->model == MODEL_S1300i) @@ -3165,6 +3170,7 @@ finecal_send_cal(struct scanner *s) return SANE_STATUS_IO_ERROR; } + DBG (10, "finecal_send_cal: finish\n"); return ret; } @@ -3182,6 +3188,8 @@ finecal_get_line(struct scanner *s, struct image *img) int round_offset = img->height / 2; int i, j, k; + DBG (10, "finecal_get_line: start\n"); + /* ask for 16 lines */ ret = set_window(s, WINDOW_FINECAL); if(ret){ @@ -3238,6 +3246,8 @@ finecal_get_line(struct scanner *s, struct image *img) avgpix[j] = (total + round_offset) / img->height; } } + + DBG (10, "finecal_get_line: finish\n"); return ret; } @@ -3385,8 +3395,8 @@ finecal(struct scanner *s) else s->sendcal.buffer[idx * 2 + 1] = newgain; /* update statistics */ - if (pixvalue < min_value[i][k]) min_value[i][k] = pixvalue; - if (pixvalue > max_value[i][k]) max_value[i][k] = pixvalue; + min_value[i][k] = MIN(min_value[i][k], pixvalue); + max_value[i][k] = MAX(max_value[i][k], pixvalue); avg_value[i][k] += pixerror; variance[i][k] += (pixerror * pixerror); idx++; @@ -3658,13 +3668,8 @@ send_lut (struct scanner *s) for(i=0;i(height-1)){ - j=height-1; - } + j = MAX(j, 0); + j = MIN(j, height-1); if (s->model == MODEL_S1100){ /*only one table, be order*/ @@ -4078,9 +4083,7 @@ sane_read (SANE_Handle handle, SANE_Byte * buf, SANE_Int max_len, SANE_Int * len } *len = page->bytes_scanned - page->bytes_read; - if(*len > max_len){ - *len = max_len; - } + *len = MIN(*len, max_len); if(*len){ DBG (10, "sane_read: copy rx:%d tx:%d tot:%d len:%d\n", @@ -4088,12 +4091,12 @@ sane_read (SANE_Handle handle, SANE_Byte * buf, SANE_Int max_len, SANE_Int * len memcpy(buf, page->image->buffer + page->bytes_read, *len); page->bytes_read += *len; + } - /* sent it all, return eof on next read */ - if(page->bytes_read == page->bytes_scanned && s->fullscan.done){ - DBG (10, "sane_read: side done\n"); - page->done = 1; - } + /* sent it all, return eof on next read */ + if(page->bytes_read == page->bytes_scanned && s->fullscan.done){ + DBG (10, "sane_read: side done\n"); + page->done = 1; } DBG (10, "sane_read: finish si:%d len:%d max:%d\n",s->side,*len,max_len); @@ -4161,6 +4164,7 @@ descramble_raw(struct scanner *s, struct transfer * tp) for (j = 0; j < height; j++){ /* row (y)*/ int curr_col = 0; int r=0, g=0, b=0, ppc=0; + int g_offset=0, b_offset=0; for (k = 0; k <= tp->plane_width; k++){ /* column (x) */ int this_col = k*tp->image->x_res/tp->x_res; @@ -4185,14 +4189,20 @@ descramble_raw(struct scanner *s, struct transfer * tp) break; } + /* if we're using an S1300i with scan resolution 225 or 300, on AC power, the color planes are shifted */ + if(s->model == MODEL_S1300i && !s->usb_power && (tp->x_res == 225 || tp->x_res == 300) && tp != &s->cal_image && k + 2 <= tp->plane_width){ + g_offset = 3; + b_offset = 6; + } + /*red is first*/ r += tp->raw_data[j*tp->line_stride + k*3 + i]; /*green is second*/ - g += tp->raw_data[j*tp->line_stride + tp->plane_stride + k*3 + i]; + g += tp->raw_data[j*tp->line_stride + tp->plane_stride + k*3 + i + g_offset]; /*blue is third*/ - b += tp->raw_data[j*tp->line_stride + 2*tp->plane_stride + k*3 + i]; + b += tp->raw_data[j*tp->line_stride + 2*tp->plane_stride + k*3 + i + b_offset]; ppc++; } @@ -4341,8 +4351,8 @@ read_from_scanner(struct scanner *s, struct transfer * tp) size_t bufLen; /* determine amount to ask for, S1300i wants big requests */ - if(bytes > remainBlock && s->model != MODEL_S1300i){ - bytes = remainBlock; + if(s->model != MODEL_S1300i){ + bytes = MIN(bytes, remainBlock); } if (tp->image == NULL) @@ -4932,8 +4942,7 @@ maxStringSize (const SANE_String_Const strings[]) for (i = 0; strings[i]; ++i) { size = strlen (strings[i]) + 1; - if (size > max_size) - max_size = size; + max_size = MAX(max_size, size); } return max_size; diff --git a/backend/epson.c b/backend/epson.c index d0f5e54..d2aba4c 100644 --- a/backend/epson.c +++ b/backend/epson.c @@ -2653,7 +2653,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) size_t len; FILE *fp; - authorize = authorize; /* get rid of compiler warning */ + (void) authorize; /* get rid of compiler warning */ /* sanei_authorization(devicename, STRINGIFY(BACKEND_NAME), auth_callback); */ @@ -2753,7 +2753,7 @@ sane_get_devices (const SANE_Device * **device_list, SANE_Bool local_only) DBG (5, "sane_get_devices()\n"); - local_only = local_only; /* just to get rid of the compiler warning */ + (void) local_only; /* just to get rid of the compiler warning */ if (devlist) { @@ -6383,8 +6383,8 @@ SANE_Status sane_set_io_mode (SANE_Handle handle, SANE_Bool non_blocking) { /* get rid of compiler warning */ - handle = handle; - non_blocking = non_blocking; + (void) handle; + (void) non_blocking; return SANE_STATUS_UNSUPPORTED; } @@ -6399,8 +6399,8 @@ SANE_Status sane_get_select_fd (SANE_Handle handle, SANE_Int * fd) { /* get rid of compiler warnings */ - handle = handle; - fd = fd; + (void) handle; + (void) fd; return SANE_STATUS_UNSUPPORTED; } diff --git a/backend/epson2.c b/backend/epson2.c index 5bb75d4..cfc2aca 100644 --- a/backend/epson2.c +++ b/backend/epson2.c @@ -2297,21 +2297,6 @@ sane_start(SANE_Handle handle) return status; } -static inline int -get_color(int status) -{ - switch ((status >> 2) & 0x03) { - case 1: - return 1; - case 2: - return 0; - case 3: - return 2; - default: - return 0; /* required to make the compiler happy */ - } -} - /* this moves data from our buffers to SANE */ SANE_Status @@ -2348,7 +2333,7 @@ sane_read(SANE_Handle handle, SANE_Byte *data, SANE_Int max_length, /* XXX if FS G and STATUS_IOERR, use e2_check_extended_status */ DBG(18, "moving data %p %p, %d (%d lines)\n", - s->ptr, s->end, + (void *) s->ptr, (void *) s->end, max_length, max_length / s->params.bytes_per_line); e2_copy_image_data(s, data, max_length, length); diff --git a/backend/epson2_net.c b/backend/epson2_net.c index 7f804ee..de9aba3 100644 --- a/backend/epson2_net.c +++ b/backend/epson2_net.c @@ -70,7 +70,7 @@ sanei_epson_net_read_buf(Epson_Scanner *s, unsigned char *buf, ssize_t wanted, ssize_t read = 0; DBG(23, "%s: reading up to %lu from buffer at %p, %lu available\n", - __func__, (u_long) wanted, s->netptr, (u_long) s->netlen); + __func__, (u_long) wanted, (void *) s->netptr, (u_long) s->netlen); if ((size_t) wanted > s->netlen) { *status = SANE_STATUS_IO_ERROR; @@ -84,7 +84,7 @@ sanei_epson_net_read_buf(Epson_Scanner *s, unsigned char *buf, ssize_t wanted, s->netlen -= read; if (s->netlen == 0) { - DBG(23, "%s: freeing %p\n", __func__, s->netbuf); + DBG(23, "%s: freeing %p\n", __func__, (void *) s->netbuf); free(s->netbuf); s->netbuf = s->netptr = NULL; s->netlen = 0; @@ -179,7 +179,7 @@ sanei_epson_net_write(Epson_Scanner *s, unsigned int cmd, const unsigned char *b if (reply_len) { if (s->netbuf) { DBG(23, "%s, freeing %p, %ld bytes unprocessed\n", - __func__, s->netbuf, (u_long) s->netlen); + __func__, (void *) s->netbuf, (u_long) s->netlen); free(s->netbuf); s->netbuf = s->netptr = NULL; s->netlen = 0; @@ -192,11 +192,11 @@ sanei_epson_net_write(Epson_Scanner *s, unsigned int cmd, const unsigned char *b } s->netlen = reply_len; DBG(24, "%s: allocated %lu bytes at %p\n", __func__, - (u_long) s->netlen, s->netbuf); + (u_long) s->netlen, (void *) s->netbuf); } DBG(24, "%s: cmd = %04x, buf = %p, buf_size = %lu, reply_len = %lu\n", - __func__, cmd, buf, (u_long) buf_size, (u_long) reply_len); + __func__, cmd, (void *) buf, (u_long) buf_size, (u_long) reply_len); memset(h1, 0x00, 12); memset(h2, 0x00, 8); diff --git a/backend/epson2_scsi.c b/backend/epson2_scsi.c index 8e95c6f..0eaf2c0 100644 --- a/backend/epson2_scsi.c +++ b/backend/epson2_scsi.c @@ -27,8 +27,8 @@ sanei_epson2_scsi_sense_handler(int scsi_fd, unsigned char *result, void *arg) { /* to get rid of warnings */ - scsi_fd = scsi_fd; - arg = arg; + (void) scsi_fd; + (void) arg; if (result[0] && result[0] != 0x70) { DBG(2, "%s: sense code = 0x%02x\n", diff --git a/backend/epson_scsi.c b/backend/epson_scsi.c index 698ec61..747ac4c 100644 --- a/backend/epson_scsi.c +++ b/backend/epson_scsi.c @@ -32,8 +32,8 @@ SANE_Status sanei_epson_scsi_sense_handler (int scsi_fd, u_char * result, void *arg) { /* to get rid of warnings */ - scsi_fd = scsi_fd; - arg = arg; + (void) scsi_fd; + (void) arg; if (result[0] && result[0] != 0x70) { diff --git a/backend/epsonds-cmd.c b/backend/epsonds-cmd.c index 6f0ec64..d1cba09 100644 --- a/backend/epsonds-cmd.c +++ b/backend/epsonds-cmd.c @@ -784,7 +784,7 @@ static SANE_Status stat_cb(void *userdata, char *token, int len) { char *value = token + 3; - userdata = userdata; + (void) userdata; if (DBG_LEVEL >= 11) { debug_token(DBG_LEVEL, __func__, token, len); @@ -816,7 +816,7 @@ static SANE_Status resa_cb(void *userdata, char *token, int len) { /* epsonds_scanner *s = (epsonds_scanner *)userdata; */ - userdata = userdata; + (void) userdata; if (DBG_LEVEL >= 11) { debug_token(DBG_LEVEL, __func__, token, len); @@ -838,7 +838,7 @@ static SANE_Status para_cb(void *userdata, char *token, int len) debug_token(DBG_LEVEL, __func__, token, len); } - userdata = userdata; + (void) userdata; if (strncmp("par", token, 3) == 0) { if (strncmp("FAIL", token + 3, 4) == 0) { diff --git a/backend/epsonds-net.c b/backend/epsonds-net.c index 4f4c1e2..87b44b4 100644 --- a/backend/epsonds-net.c +++ b/backend/epsonds-net.c @@ -79,7 +79,7 @@ epsonds_net_read_buf(epsonds_scanner *s, unsigned char *buf, ssize_t wanted, ssize_t read = 0; DBG(23, "%s: reading up to %lu from buffer at %p, %lu available\n", - __func__, (u_long) wanted, s->netptr, (u_long) s->netlen); + __func__, (u_long) wanted, (void *) s->netptr, (u_long) s->netlen); if ((size_t) wanted > s->netlen) { *status = SANE_STATUS_IO_ERROR; @@ -93,7 +93,7 @@ epsonds_net_read_buf(epsonds_scanner *s, unsigned char *buf, ssize_t wanted, s->netlen -= read; if (s->netlen == 0) { - DBG(23, "%s: freeing %p\n", __func__, s->netbuf); + DBG(23, "%s: freeing %p\n", __func__, (void *) s->netbuf); free(s->netbuf); s->netbuf = s->netptr = NULL; s->netlen = 0; @@ -195,7 +195,7 @@ epsonds_net_write(epsonds_scanner *s, unsigned int cmd, const unsigned char *buf if (reply_len) { if (s->netbuf) { DBG(23, "%s, freeing %p, %ld bytes unprocessed\n", - __func__, s->netbuf, (u_long) s->netlen); + __func__, (void *) s->netbuf, (u_long) s->netlen); free(s->netbuf); s->netbuf = s->netptr = NULL; s->netlen = 0; @@ -208,11 +208,11 @@ epsonds_net_write(epsonds_scanner *s, unsigned int cmd, const unsigned char *buf } s->netlen = reply_len; DBG(24, "%s: allocated %lu bytes at %p\n", __func__, - (u_long) s->netlen, s->netbuf); + (u_long) s->netlen, (void *) s->netbuf); } DBG(24, "%s: cmd = %04x, buf = %p, buf_size = %lu, reply_len = %lu\n", - __func__, cmd, buf, (u_long) buf_size, (u_long) reply_len); + __func__, cmd, (void *) buf, (u_long) buf_size, (u_long) reply_len); memset(h1, 0x00, 12); memset(h2, 0x00, 8); @@ -513,7 +513,7 @@ fail: if (simple_poll) avahi_simple_poll_free(simple_poll); - DBG(10, "epsonds_searchDevices fin\n"); + DBG(10, "epsonds_searchDevices fin\n"); return result; } diff --git a/backend/epsonds.c b/backend/epsonds.c index 0815535..72d01d8 100644 --- a/backend/epsonds.c +++ b/backend/epsonds.c @@ -1258,6 +1258,7 @@ const epsonds_profile_map epsonds_models_predefined[] = { {0x118A, "PID 118A","ET-2810 Series", 7}, {0x118A, "PID 118A","L3250 Series", 7}, {0x119B, "PID 119B","XP-2150 Series", 7}, + {0x11B1, "PID 11B1","XP-2200 Series", 7}, {0x00, "","", 0x00 } }; @@ -1629,10 +1630,7 @@ device_detect(const char *name, int type, SANE_Status *status) {//Convert to user friendly model name free(s->hw->model); - char* deviceName = (char*)malloc(strlen(map->deviceID) + 1); - memset(deviceName, 0, strlen(map->deviceID) + 1); - strncpy(deviceName, map->deviceID, strlen(map->deviceID)); - s->hw->model = deviceName; + s->hw->model = strdup(map->deviceID); s->hw->sane.model = s->hw->model; } {// set lutid diff --git a/backend/escl/escl.c b/backend/escl/escl.c index 5f02ec8..cbbdb60 100644 --- a/backend/escl/escl.c +++ b/backend/escl/escl.c @@ -61,6 +61,26 @@ static const SANE_Device **devlist = NULL; static ESCL_Device *list_devices_primary = NULL; static int num_devices = 0; +#ifdef CURL_SSLVERSION_MAX_DEFAULT +static int proto_tls[] = { + CURL_SSLVERSION_MAX_DEFAULT, + #ifdef CURL_SSLVERSION_MAX_TLSv1_3 + CURL_SSLVERSION_MAX_TLSv1_3, + #endif + #ifdef CURL_SSLVERSION_MAX_TLSv1_2 + CURL_SSLVERSION_MAX_TLSv1_2, + #endif + #ifdef CURL_SSLVERSION_MAX_TLSv1_1 + CURL_SSLVERSION_MAX_TLSv1_1, + #endif + #ifdef CURL_SSLVERSION_MAX_TLSv1_0 + CURL_SSLVERSION_MAX_TLSv1_0, + #endif + -1 +}; +#endif + + typedef struct Handled { struct Handled *next; ESCL_Device *device; @@ -99,6 +119,60 @@ escl_free_device(ESCL_Device *current) return NULL; } + +#ifdef CURL_SSLVERSION_MAX_DEFAULT +static int +escl_tls_protocol_supported(char *url, int proto) +{ + CURLcode res = CURLE_UNSUPPORTED_PROTOCOL; + CURL *curl = curl_easy_init(); + if(curl) { + curl_easy_setopt(curl, CURLOPT_URL, url); + + /* ask libcurl to use TLS version 1.0 or later */ + curl_easy_setopt(curl, CURLOPT_SSLVERSION, proto); + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); + curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); + curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 3L); + /* Perform the request */ + res = curl_easy_perform(curl); + curl_easy_cleanup(curl); + } + return res; +} + +static int +escl_is_tls(char * url, char *type) +{ + int tls_version = 0; + if(!strcmp(type, "_uscans._tcp") || + !strcmp(type, "https")) + { + while(proto_tls[tls_version] != -1) + { + if (escl_tls_protocol_supported(url, proto_tls[tls_version]) == CURLE_OK) + { + DBG(10, "curl tls compatible (%d)\n", proto_tls[tls_version]); + break; + } + tls_version++; + } + if (proto_tls[tls_version] < 1) + return 0; + } + return proto_tls[tls_version]; +} +#else +static int +escl_is_tls(char * url, char *type) +{ + (void)url; + (void)type; + return 0; +} +#endif + void escl_free_handler(escl_sane_t *handler) { @@ -187,8 +261,13 @@ escl_device_add(int port_nb, { char tmp[PATH_MAX] = { 0 }; char *model = NULL; + char url_port[512] = { 0 }; + int tls_version = 0; ESCL_Device *current = NULL; DBG (10, "escl_device_add\n"); + snprintf(url_port, sizeof(url_port), "https://%s:%d", ip_address, port_nb); + tls_version = escl_is_tls(url_port, type); + for (current = list_devices_primary; current; current = current->next) { if ((strcmp(current->ip_address, ip_address) == 0) || (uuid && current->uuid && !strcmp(current->uuid, uuid))) @@ -206,6 +285,7 @@ escl_device_add(int port_nb, } current->port_nb = port_nb; current->https = SANE_TRUE; + current->tls = tls_version; } return (SANE_STATUS_GOOD); } @@ -226,6 +306,7 @@ escl_device_add(int port_nb, } else { current->https = SANE_FALSE; } + current->tls = tls_version; model = (char*)(tmp[0] != 0 ? tmp : model_name); current->model_name = strdup(model); current->ip_address = strdup(ip_address); @@ -470,7 +551,6 @@ attach_one_config(SANEI_Config __sane_unused__ *config, const char *line, } escl_device->model_name = opt_model ? opt_model : strdup("Unknown model"); escl_device->is = strdup("flatbed or ADF scanner"); - escl_device->type = strdup("In url"); escl_device->uuid = NULL; } @@ -515,6 +595,9 @@ attach_one_config(SANEI_Config __sane_unused__ *config, const char *line, } escl_device->is = strdup("flatbed or ADF scanner"); escl_device->uuid = NULL; + char url_port[512] = { 0 }; + snprintf(url_port, sizeof(url_port), "https://%s:%d", escl_device->ip_address, escl_device->port_nb); + escl_device->tls = escl_is_tls(url_port, escl_device->type); status = escl_check_and_add_device(escl_device); if (status == SANE_STATUS_GOOD) escl_device = NULL; @@ -956,7 +1039,7 @@ init_options(SANE_String_Const name_source, escl_sane_t *s) s->opt[OPT_BRIGHTNESS].constraint_type = SANE_CONSTRAINT_RANGE; if (s->scanner->brightness) { s->opt[OPT_BRIGHTNESS].constraint.range = &s->brightness_range; - s->val[OPT_BRIGHTNESS].w = s->scanner->brightness->normal; + s->val[OPT_BRIGHTNESS].w = s->scanner->brightness->value; s->brightness_range.quant=1; s->brightness_range.min=s->scanner->brightness->min; s->brightness_range.max=s->scanner->brightness->max; @@ -975,7 +1058,7 @@ init_options(SANE_String_Const name_source, escl_sane_t *s) s->opt[OPT_CONTRAST].constraint_type = SANE_CONSTRAINT_RANGE; if (s->scanner->contrast) { s->opt[OPT_CONTRAST].constraint.range = &s->contrast_range; - s->val[OPT_CONTRAST].w = s->scanner->contrast->normal; + s->val[OPT_CONTRAST].w = s->scanner->contrast->value; s->contrast_range.quant=1; s->contrast_range.min=s->scanner->contrast->min; s->contrast_range.max=s->scanner->contrast->max; @@ -994,7 +1077,7 @@ init_options(SANE_String_Const name_source, escl_sane_t *s) s->opt[OPT_SHARPEN].constraint_type = SANE_CONSTRAINT_RANGE; if (s->scanner->sharpen) { s->opt[OPT_SHARPEN].constraint.range = &s->sharpen_range; - s->val[OPT_SHARPEN].w = s->scanner->sharpen->normal; + s->val[OPT_SHARPEN].w = s->scanner->sharpen->value; s->sharpen_range.quant=1; s->sharpen_range.min=s->scanner->sharpen->min; s->sharpen_range.max=s->scanner->sharpen->max; @@ -1014,7 +1097,7 @@ init_options(SANE_String_Const name_source, escl_sane_t *s) s->opt[OPT_THRESHOLD].constraint_type = SANE_CONSTRAINT_RANGE; if (s->scanner->threshold) { s->opt[OPT_THRESHOLD].constraint.range = &s->thresold_range; - s->val[OPT_THRESHOLD].w = s->scanner->threshold->normal; + s->val[OPT_THRESHOLD].w = s->scanner->threshold->value; s->thresold_range.quant=1; s->thresold_range.min= s->scanner->threshold->min; s->thresold_range.max=s->scanner->threshold->max; @@ -1069,9 +1152,11 @@ escl_parse_name(SANE_String_Const name, ESCL_Device *device) if (strncmp(name, "https://", 8) == 0) { device->https = SANE_TRUE; + device->type = strdup("https"); host = name + 8; } else if (strncmp(name, "http://", 7) == 0) { device->https = SANE_FALSE; + device->type = strdup("http"); host = name + 7; } else { DBG(1, "Unknown URL scheme in %s", name); @@ -1811,6 +1896,8 @@ escl_curl_url(CURL *handle, const ESCL_Device *device, SANE_String_Const path) DBG( 1, "Ignoring safety certificates, use https\n"); curl_easy_setopt(handle, CURLOPT_SSL_VERIFYPEER, 0L); curl_easy_setopt(handle, CURLOPT_SSL_VERIFYHOST, 0L); + if (device->tls > 0) + curl_easy_setopt(handle, CURLOPT_SSLVERSION, device->tls); } if (device->unix_socket != NULL) { DBG( 1, "Using local socket %s\n", device->unix_socket ); diff --git a/backend/escl/escl.h b/backend/escl/escl.h index 142b4b4..f99bff9 100644 --- a/backend/escl/escl.h +++ b/backend/escl/escl.h @@ -92,10 +92,12 @@ typedef struct { typedef struct ESCL_Device { struct ESCL_Device *next; + double version; char *model_name; int port_nb; char *ip_address; char *is; + int tls; char *uuid; char *type; SANE_Bool https; @@ -146,6 +148,7 @@ typedef struct support int min; int max; int normal; + int value; int step; } support_t; diff --git a/backend/escl/escl_capabilities.c b/backend/escl/escl_capabilities.c index 7422896..efbd547 100644 --- a/backend/escl/escl_capabilities.c +++ b/backend/escl/escl_capabilities.c @@ -325,7 +325,8 @@ print_support(xmlNode *node) cpt++; } else if (!strcmp((const char *)node->name, "Normal")) { - sup->normal = atoi((const char *)xmlNodeGetContent(node)); + sup->value = atoi((const char *)xmlNodeGetContent(node)); + sup->normal = sup->value; cpt++; have_norm = 1; } @@ -338,7 +339,8 @@ print_support(xmlNode *node) if (cpt == 4) return sup; if (cpt == 3 && have_norm == 0) { - sup->normal = (sup->max / 2 ); + sup->value = (sup->max / 2 ); + sup->normal = sup->value; return sup; } free(sup); @@ -428,6 +430,10 @@ print_xml_c(xmlNode *node, ESCL_Device *device, capabilities_t *scanner, int typ if (find_nodes_c(node) && type != -1) find_true_variables(node, scanner, type); } + if (!strcmp((const char *)node->name, "Version")&& node->ns && node->ns->prefix){ + if (!strcmp((const char*)node->ns->prefix, "pwg")) + device->version = atof ((const char *)xmlNodeGetContent(node)); + } if (!strcmp((const char *)node->name, "MakeAndModel")){ device->model_name = strdup((const char *)xmlNodeGetContent(node)); } @@ -582,6 +588,7 @@ escl_capabilities(ESCL_Device *device, char *blacklist, SANE_Status *status) strstr(header->memory, "Server: HP_Compact_Server")) device->hack = curl_slist_append(NULL, "Host: localhost"); + device->version = 0.0; scanner->source = 0; scanner->Sources = (SANE_String_Const *)malloc(sizeof(SANE_String_Const) * 4); for (i = 0; i < 4; i++) diff --git a/backend/escl/escl_devices.c b/backend/escl/escl_devices.c index 92e064b..a2fdb80 100644 --- a/backend/escl/escl_devices.c +++ b/backend/escl/escl_devices.c @@ -30,6 +30,7 @@ #include #include #include +#include #include #include @@ -53,47 +54,65 @@ static int count_finish = 0; */ static void resolve_callback(AvahiServiceResolver *r, AVAHI_GCC_UNUSED AvahiIfIndex interface, - AVAHI_GCC_UNUSED AvahiProtocol protocol, - AvahiResolverEvent event, const char *name, + AvahiProtocol protocol, + AvahiResolverEvent event, + const char *name, const char __sane_unused__ *type, const char __sane_unused__ *domain, const char __sane_unused__ *host_name, - const AvahiAddress *address, uint16_t port, AvahiStringList *txt, + const AvahiAddress *address, + uint16_t port, + AvahiStringList *txt, AvahiLookupResultFlags __sane_unused__ flags, void __sane_unused__ *userdata) { - char a[AVAHI_ADDRESS_STR_MAX], *t; + char a[(AVAHI_ADDRESS_STR_MAX + 10)] = { 0 }; + char *t; const char *is; const char *uuid; AvahiStringList *s; assert(r); switch (event) { - case AVAHI_RESOLVER_FAILURE: - break; - case AVAHI_RESOLVER_FOUND: - avahi_address_snprint(a, sizeof(a), address); - t = avahi_string_list_to_string(txt); - if (strstr(t, "\"rs=eSCL\"") || strstr(t, "\"rs=/eSCL\"")) { - char ip_add[PATH_MAX] = {0}; - s = avahi_string_list_find(txt, "is"); - if (s && s->size > 3) - is = (const char*)s->text + 3; - else - is = (const char*)NULL; - s = avahi_string_list_find(txt, "uuid"); - if (s && s->size > 5) - uuid = (const char*)s->text + 5; - else - uuid = (const char*)NULL; - DBG (10, "resolve_callback [%s]\n", a); - if (strstr(a, "127.0.0.1") != NULL) { - snprintf(ip_add, sizeof(ip_add), "%s", "localhost"); - DBG (10,"resolve_callback fix redirect [localhost]\n"); - } + case AVAHI_RESOLVER_FAILURE: + break; + case AVAHI_RESOLVER_FOUND: + { + char *psz_addr = ((void*)0); + char b[128] = { 0 }; + avahi_address_snprint(b, (sizeof(b)/sizeof(b[0]))-1, address); +#ifdef ENABLE_IPV6 + if (protocol == AVAHI_PROTO_INET6 && strchr(b, ':')) + { + if ( asprintf( &psz_addr, "[%s]", b ) == -1 ) + break; + } else - snprintf(ip_add, sizeof(ip_add), "%s", a); - escl_device_add(port, name, ip_add, is, uuid, (char*)type); - } +#endif + { + if ( asprintf( &psz_addr, "%s", b ) == -1 ) + break; + } + t = avahi_string_list_to_string(txt); + if (strstr(t, "\"rs=eSCL\"") || strstr(t, "\"rs=/eSCL\"")) { + s = avahi_string_list_find(txt, "is"); + if (s && s->size > 3) + is = (const char*)s->text + 3; + else + is = (const char*)NULL; + s = avahi_string_list_find(txt, "uuid"); + if (s && s->size > 5) + uuid = (const char*)s->text + 5; + else + uuid = (const char*)NULL; + DBG (10, "resolve_callback [%s]\n", a); + if (strstr(psz_addr, "127.0.0.1") != NULL) { + escl_device_add(port, name, "localhost", is, uuid, (char*)type); + DBG (10,"resolve_callback fix redirect [localhost]\n"); + } + else + escl_device_add(port, name, psz_addr, is, uuid, (char*)type); + } + } } } diff --git a/backend/escl/escl_newjob.c b/backend/escl/escl_newjob.c index 98a953f..e1b326f 100644 --- a/backend/escl/escl_newjob.c +++ b/backend/escl/escl_newjob.c @@ -46,7 +46,7 @@ struct downloading static const char settings[] = "" \ "" \ - " 2.0" \ + " %.2f" \ " " \ " " \ " escl:ThreeHundredthsOfInches" \ @@ -56,13 +56,11 @@ static const char settings[] = " %d" \ " " \ " " \ - " %s" \ "%s" \ " %s" \ " %d" \ " %d" \ " %s" \ - " %s" \ "%s" \ "%s" \ ""; @@ -138,8 +136,8 @@ escl_newjob (capabilities_t *scanner, const ESCL_Device *device, SANE_Status *st char *location = NULL; char *result = NULL; char *temporary = NULL; - char *f_ext = ""; char *format_ext = NULL; + char f_ext_tmp[1024]; char duplex_mode[1024] = { 0 }; int wakup_count = 0; @@ -189,16 +187,22 @@ escl_newjob (capabilities_t *scanner, const ESCL_Device *device, SANE_Status *st scanner->caps[scanner->source].default_format = strdup(scanner->caps[scanner->source].DocumentFormats[have_pdf]); } - if (scanner->caps[scanner->source].format_ext == 1) + if (device->version <= 2.0) { - char f_ext_tmp[1024]; + // For eSCL 2.0 and older clients snprintf(f_ext_tmp, sizeof(f_ext_tmp), - " %s", + " %s", scanner->caps[scanner->source].default_format); - format_ext = f_ext_tmp; } else - format_ext = f_ext; + { + // For eSCL 2.1 and newer clients + snprintf(f_ext_tmp, sizeof(f_ext_tmp), + " %s", + scanner->caps[scanner->source].default_format); + } + format_ext = f_ext_tmp; + if(scanner->source > PLATEN && scanner->Sources[ADFDUPLEX]) { snprintf(duplex_mode, sizeof(duplex_mode), " %s", @@ -215,52 +219,63 @@ escl_newjob (capabilities_t *scanner, const ESCL_Device *device, SANE_Status *st char *source = (scanner->source == PLATEN ? "Platen" : "Feeder"); if (scanner->use_threshold) { - char *tmp = add_support_option("ThresholdSupport", scanner->val_threshold); - if (support_options[0]) - strcat(support_options, tmp); - else - strcpy(support_options, tmp); - free(tmp); + if (scanner->val_threshold != scanner->threshold->value) + { + char *tmp = add_support_option("ThresholdSupport", scanner->val_threshold); + if (support_options[0]) + strcat(support_options, tmp); + else + strcpy(support_options, tmp); + free(tmp); + } } if (scanner->use_sharpen) { - char *tmp = add_support_option("SharpenSupport", scanner->val_sharpen); - if (support_options[0]) - strcat(support_options, tmp); - else - strcpy(support_options, tmp); - free(tmp); + if (scanner->val_sharpen != scanner->sharpen->value) + { + char *tmp = add_support_option("SharpenSupport", scanner->val_sharpen); + if (support_options[0]) + strcat(support_options, tmp); + else + strcpy(support_options, tmp); + free(tmp); + } } if (scanner->use_contrast) { - char *tmp = add_support_option("ContrastSupport", scanner->val_contrast); - if (support_options[0]) - strcat(support_options, tmp); - else - strcpy(support_options, tmp); - free(tmp); + if (scanner->val_contrast != scanner->contrast->value) + { + char *tmp = add_support_option("ContrastSupport", scanner->val_contrast); + if (support_options[0]) + strcat(support_options, tmp); + else + strcpy(support_options, tmp); + free(tmp); + } } if (scanner->use_brightness) { - char *tmp = add_support_option("BrightnessSupport", scanner->val_brightness); - if (support_options[0]) - strcat(support_options, tmp); - else - strcpy(support_options, tmp); - free(tmp); + if (scanner->val_brightness != scanner->brightness->value) + { + char *tmp = add_support_option("BrightnessSupport", scanner->val_brightness); + if (support_options[0]) + strcat(support_options, tmp); + else + strcpy(support_options, tmp); + free(tmp); + } } snprintf(cap_data, sizeof(cap_data), settings, + device->version, scanner->caps[scanner->source].height, scanner->caps[scanner->source].width, off_x, off_y, - scanner->caps[scanner->source].default_format, format_ext, scanner->caps[scanner->source].default_color, scanner->caps[scanner->source].default_resolution, scanner->caps[scanner->source].default_resolution, source, - source, duplex_mode[0] == 0 ? " " : duplex_mode, support_options[0] == 0 ? " " : support_options); upload->memory = strdup(cap_data); diff --git a/backend/escl/escl_pdf.c b/backend/escl/escl_pdf.c index 02dce66..8277e1d 100644 --- a/backend/escl/escl_pdf.c +++ b/backend/escl/escl_pdf.c @@ -44,8 +44,9 @@ #if HAVE_POPPLER_GLIB -#define INPUT_BUFFER_SIZE 4096 +#define ESCL_PDF_USE_MAPPED_FILE POPPLER_CHECK_VERSION(0,82,0) +#if ! ESCL_PDF_USE_MAPPED_FILE static unsigned char* set_file_in_buffer(FILE *fp, int *size) { @@ -70,6 +71,7 @@ set_file_in_buffer(FILE *fp, int *size) *size = nx; return data; } +#endif static unsigned char * cairo_surface_to_pixels (cairo_surface_t *surface, int bps) @@ -109,28 +111,52 @@ get_PDF_data(capabilities_t *scanner, int *width, int *height, int *bps) PopplerPage *page; PopplerDocument *doc; double dw, dh; - int w, h, size = 0; - char *data = NULL; + int w, h; unsigned char* surface = NULL; SANE_Status status = SANE_STATUS_GOOD; +#if ESCL_PDF_USE_MAPPED_FILE + GMappedFile *file; + GBytes *bytes; + + file = g_mapped_file_new_from_fd (fileno (scanner->tmp), 0, NULL); + if (!file) { + DBG(1, "Error : g_mapped_file_new_from_fd"); + status = SANE_STATUS_INVAL; + goto close_file; + } + + bytes = g_mapped_file_get_bytes (file); + if (!bytes) { + DBG(1, "Error : g_mapped_file_get_bytes"); + status = SANE_STATUS_INVAL; + goto free_file; + } + + doc = poppler_document_new_from_bytes (bytes, NULL, NULL); + if (!doc) { + DBG(1, "Error : poppler_document_new_from_bytes"); + status = SANE_STATUS_INVAL; + goto free_bytes; + } +#else + int size = 0; + char *data = NULL; data = (char*)set_file_in_buffer(scanner->tmp, &size); if (!data) { - DBG(1, "Error : poppler_document_new_from_data"); + DBG(1, "Error : set_file_in_buffer"); status = SANE_STATUS_INVAL; goto close_file; } - doc = poppler_document_new_from_data(data, - size, - NULL, - NULL); + doc = poppler_document_new_from_data (data, size, NULL, NULL); if (!doc) { DBG(1, "Error : poppler_document_new_from_data"); status = SANE_STATUS_INVAL; - goto free_file; + goto free_data; } +#endif page = poppler_document_get_page (doc, 0); if (!page) { @@ -201,8 +227,15 @@ free_page: g_object_unref (page); free_doc: g_object_unref (doc); +#if ESCL_PDF_USE_MAPPED_FILE +free_bytes: + g_bytes_unref (bytes); free_file: + g_mapped_file_unref (file); +#else +free_data: free(data); +#endif close_file: if (scanner->tmp) fclose(scanner->tmp); diff --git a/backend/escl/escl_scan.c b/backend/escl/escl_scan.c index 3350c83..8af6bb2 100644 --- a/backend/escl/escl_scan.c +++ b/backend/escl/escl_scan.c @@ -84,6 +84,7 @@ escl_scan(capabilities_t *scanner, const ESCL_Device *device, char *scanJob, cha CURLcode res = curl_easy_perform(curl_handle); if (res != CURLE_OK) { DBG( 1, "Unable to scan: %s\n", curl_easy_strerror(res)); + scanner->real_read = 0; fclose(scanner->tmp); scanner->tmp = NULL; status = SANE_STATUS_INVAL; diff --git a/backend/escl/escl_tiff.c b/backend/escl/escl_tiff.c index e33498c..e17554e 100644 --- a/backend/escl/escl_tiff.c +++ b/backend/escl/escl_tiff.c @@ -26,6 +26,8 @@ #include "escl.h" +#include "../include/_stdint.h" + #include "../include/sane/sanei.h" #include @@ -53,11 +55,11 @@ SANE_Status get_TIFF_data(capabilities_t *scanner, int *width, int *height, int *bps) { TIFF* tif = NULL; - uint32 w = 0; - uint32 h = 0; + uint32_t w = 0; + uint32_t h = 0; unsigned char *surface = NULL; /* image data*/ int components = 4; - uint32 npixels = 0; + uint32_t npixels = 0; SANE_Status status = SANE_STATUS_GOOD; lseek(fileno(scanner->tmp), 0, SEEK_SET); @@ -71,15 +73,15 @@ get_TIFF_data(capabilities_t *scanner, int *width, int *height, int *bps) TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &w); TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &h); npixels = w * h; - surface = (unsigned char*) malloc(npixels * sizeof (uint32)); - if (surface != NULL) + surface = (unsigned char*) malloc(npixels * sizeof (uint32_t)); + if (surface == NULL) { DBG( 1, "Escl Tiff : raster Memory allocation problem.\n"); status = SANE_STATUS_INVAL; goto close_tiff; } - if (!TIFFReadRGBAImage(tif, w, h, (uint32 *)surface, 0)) + if (!TIFFReadRGBAImage(tif, w, h, (uint32_t *)surface, 0)) { DBG( 1, "Escl Tiff : Problem reading image data.\n"); status = SANE_STATUS_INVAL; diff --git a/backend/fujitsu-scsi.h b/backend/fujitsu-scsi.h index 3d3cf07..c7616f7 100644 --- a/backend/fujitsu-scsi.h +++ b/backend/fujitsu-scsi.h @@ -140,9 +140,12 @@ putnbyte (unsigned char *pnt, unsigned int value, unsigned int nbytes) #define IN_periph_devtype_unknown 0x1f #define get_IN_response_format(in) getbitfield(in + 0x03, 0x07, 0) #define IN_recognized 0x02 -#define get_IN_vendor(in, buf) strncpy(buf, (char *)in + 0x08, 0x08) -#define get_IN_product(in, buf) strncpy(buf, (char *)in + 0x10, 0x010) -#define get_IN_version(in, buf) strncpy(buf, (char *)in + 0x20, 0x04) +#define get_IN_vendor(in, buf) snprintf(buf, 0x08 + 1, "%.*s", \ + 0x08, (char *)in + 0x08) +#define get_IN_product(in, buf) snprintf(buf, 0x10 + 1, "%.*s", \ + 0x10, (char *)in + 0x10) +#define get_IN_version(in, buf) snprintf(buf, 0x04 + 1, "%.*s", \ + 0x04, (char *)in + 0x20) #define get_IN_color_offset(in) getnbyte (in+0x2A, 2) /* offset between colors */ /* these only in some scanners */ diff --git a/backend/fujitsu.c b/backend/fujitsu.c index d17e015..52d0988 100644 --- a/backend/fujitsu.c +++ b/backend/fujitsu.c @@ -6,7 +6,7 @@ Copyright (C) 2000 Randolph Bentson Copyright (C) 2001 Frederik Ramm Copyright (C) 2001-2004 Oliver Schirrmeister - Copyright (C) 2003-2021 m. allan noah + Copyright (C) 2003-2022 m. allan noah JPEG output and low memory usage support funded by: Archivista GmbH, www.archivista.ch @@ -15,7 +15,7 @@ Automatic length detection support funded by: Martin G. Miller, mgmiller at optonline.net Software image enhancement routines and recent scanner support funded by: - Fujitsu Computer Products of America, Inc. www.fcpa.com + PFU America, Inc., fujitsuscanners.com -------------------------------------------------------------------------- @@ -611,6 +611,11 @@ - fix JPEG duplex memory corruption - change window_gamma init (fixes bright/contrast for iX1500) - only call send_lut after set_window (remove late_lut) + v138 2022-06-01, MAN + - minor updates to company name (FCPA -> PFU) + v139 2022-11-15, MAN + - move updated window_gamma logic to set_window + - use internal gamma table if possible (fixes #618) SANE FLOW DIAGRAM @@ -660,7 +665,7 @@ #include "fujitsu.h" #define DEBUG 1 -#define BUILD 137 +#define BUILD 139 /* values for SANE_DEBUG_FUJITSU env var: - errors 5 @@ -764,7 +769,7 @@ static struct fujitsu *fujitsu_devList = NULL; SANE_Status sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) { - authorize = authorize; /* get rid of compiler warning */ + (void) authorize; /* get rid of compiler warning */ DBG_INIT (); DBG (10, "sane_init: start\n"); @@ -819,7 +824,7 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only) int num_devices=0; int i=0; - local_only = local_only; /* get rid of compiler warning */ + (void) local_only; /* get rid of compiler warning */ DBG (10, "sane_get_devices: start\n"); @@ -2107,12 +2112,6 @@ init_model (struct fujitsu *s) s->ppl_mod_by_mode[MODE_GRAYSCALE] = 1; s->ppl_mod_by_mode[MODE_COLOR] = 1; - /* we prefer to use the downloaded (LUT) gamma table (0x80) if possible. - * but if scanner has only built-in gamma tables, we use the first one (0) */ - if (s->num_download_gamma){ - s->window_gamma = 0x80; - } - /* endorser type tells string length (among other things) */ if(s->has_endorser_b){ /*old-style is 40 bytes*/ @@ -2206,7 +2205,10 @@ init_model (struct fujitsu *s) s->color_interlace = COLOR_INTERLACE_3091; s->duplex_interlace = DUPLEX_INTERLACE_3091; s->ghs_in_rs = 1; - s->window_gamma = 0; + + /* might be inaccurate */ + s->num_internal_gamma = 1; + s->num_download_gamma = 0; s->reverse_by_mode[MODE_LINEART] = 1; s->reverse_by_mode[MODE_HALFTONE] = 1; @@ -7055,12 +7057,11 @@ sane_start (SANE_Handle handle) goto errors; } - /* send lut if scanner has no hardware brightness/contrast, - * or we are going to ask it to use a downloaded gamma table */ - if (!s->brightness_steps || !s->contrast_steps || s->window_gamma & 0x80){ + /* send lut if set_window said we would */ + if ( s->window_gamma ){ ret = send_lut(s); if (ret != SANE_STATUS_GOOD) - DBG (5, "sane_start: WARNING: cannot late send_lut %d\n", ret); + DBG (5, "sane_start: WARNING: cannot send_lut %d\n", ret); } /* some scanners need the q table sent, even when not scanning jpeg */ @@ -7614,6 +7615,23 @@ set_window (struct fujitsu *s) /* the remainder of the block varies based on model and mode, * except for gamma and paper size, those are in the same place */ + /* determine if we need to send gamma LUT. + * send lut if scanner supports it and any of: + * has no hardware brightness but user changed it + * has no hardware contrast but user changed it + * has no internal gamma table */ + if ( s->num_download_gamma && ( + (!s->brightness_steps && s->brightness != 0) + || (!s->contrast_steps && s->contrast != 0 ) + || !s->num_internal_gamma + ) ){ + s->window_gamma = 0x80; + } + /* otherwise, use the internal table */ + else{ + s->window_gamma = 0; + } + /*vuid c0*/ if(s->has_vuid_3091){ set_WD_vendor_id_code (desc1, WD_VUID_3091); @@ -9270,7 +9288,7 @@ sense_handler (int fd, unsigned char * sensed_data, void *arg) DBG (5, "sense_handler: start\n"); /* kill compiler warning */ - fd = fd; + (void) fd; /* copy the rs return data into the scanner struct so that the caller can use it if he wants */ @@ -9605,8 +9623,8 @@ do_scsi_cmd(struct fujitsu *s, int runRS, int shortTime, int ret; /*shut up compiler*/ - runRS=runRS; - shortTime=shortTime; + (void) runRS; + (void) shortTime; DBG(10, "do_scsi_cmd: start\n"); diff --git a/backend/fujitsu.conf.in b/backend/fujitsu.conf.in index 1645e87..9da0ae9 100644 --- a/backend/fujitsu.conf.in +++ b/backend/fujitsu.conf.in @@ -267,3 +267,39 @@ usb 0x04c5 0x160b #ScanSnap iX1600 usb 0x04c5 0x1632 + +#ScanPartner SP30 +usb 0x04c5 0x140a + +#fi-7300NX +usb 0x04c5 0x1575 + +#fi-8190 +usb 0x04c5 0x15fd + +#fi-8290 +usb 0x04c5 0x15fe + +#fi-8170 +usb 0x04c5 0x15ff + +#fi-8270 +usb 0x04c5 0x1600 + +#fi-8150 +usb 0x04c5 0x1601 + +#fi-8250 +usb 0x04c5 0x1602 + +#fi-8150U +usb 0x04c5 0x162d + +#fi-8250U +usb 0x04c5 0x162e + +#ScanSnap iX1300 +usb 0x04c5 0x162c + +#ScanSnap iX1400 +usb 0x04c5 0x1630 diff --git a/backend/fujitsu.h b/backend/fujitsu.h index 98278eb..6c42ff8 100644 --- a/backend/fujitsu.h +++ b/backend/fujitsu.h @@ -325,7 +325,6 @@ struct fujitsu int jpeg_interlace; /* different models interlace jpeg sides differently */ int cropping_mode; /* lower-end scanners don't crop from paper size */ int ghs_in_rs; - int window_gamma; int endorser_string_len; int has_pixelsize; int has_short_pixelsize; /* m3091/2 put weird stuff at end, ignore it */ @@ -520,6 +519,7 @@ struct fujitsu /* the user never directly modifies these */ int s_mode; /*color,lineart,etc: sent to scanner*/ + int window_gamma; /* depends on brightness/contrast and lut */ /* this is defined in sane spec as a struct containing: SANE_Frame format; diff --git a/backend/genesys.conf.in b/backend/genesys.conf.in index d9c596a..e6788f5 100644 --- a/backend/genesys.conf.in +++ b/backend/genesys.conf.in @@ -160,3 +160,6 @@ usb 0x1803 0x162e # Plustek OpticBook 3800 usb 0x07b3 0x1300 + +# Plustek OpticFilm 7600i +usb 0x07b3 0x0c3b diff --git a/backend/genesys/fwd.h b/backend/genesys/fwd.h index 9937654..5d341b8 100644 --- a/backend/genesys/fwd.h +++ b/backend/genesys/fwd.h @@ -59,7 +59,7 @@ struct Pixel; struct RawPixel; // low.h -struct UsbDeviceEntry; +class UsbDeviceEntry; // motor.h struct Genesys_Motor; diff --git a/backend/genesys/genesys.cpp b/backend/genesys/genesys.cpp index 5aba58c..ab1367e 100644 --- a/backend/genesys/genesys.cpp +++ b/backend/genesys/genesys.cpp @@ -310,9 +310,8 @@ void sanei_genesys_init_structs (Genesys_Device * dev) * @param gamma gamma to compute values * @return a gamma table filled with the computed values * */ -void -sanei_genesys_create_gamma_table (std::vector& gamma_table, int size, - float maximum, float gamma_max, float gamma) +void sanei_genesys_create_gamma_table(std::vector& gamma_table, int size, + float maximum, float gamma_max, float gamma) { gamma_table.clear(); gamma_table.resize(size, 0); @@ -334,7 +333,7 @@ sanei_genesys_create_gamma_table (std::vector& gamma_table, int size, } void sanei_genesys_create_default_gamma_table(Genesys_Device* dev, - std::vector& gamma_table, float gamma) + std::vector& gamma_table, float gamma) { int size = 0; int max = 0; @@ -346,6 +345,7 @@ void sanei_genesys_create_default_gamma_table(Genesys_Device* dev, } max = size - 1; } else if (dev->model->asic_type == AsicType::GL124 || + dev->model->asic_type == AsicType::GL845 || dev->model->asic_type == AsicType::GL846 || dev->model->asic_type == AsicType::GL847) { size = 257; @@ -396,7 +396,7 @@ SANE_Int sanei_genesys_exposure_time2(Genesys_Device * dev, const MotorProfile& The data needs to be of size "size", and in little endian byte order. */ static void genesys_send_offset_and_shading(Genesys_Device* dev, const Genesys_Sensor& sensor, - uint8_t* data, int size) + std::uint8_t* data, int size) { DBG_HELPER_ARGS(dbg, "(size = %d)", size); int start_address; @@ -427,10 +427,10 @@ void sanei_genesys_init_shading_data(Genesys_Device* dev, const Genesys_Sensor& unsigned channels = dev->settings.get_channels(); - // 16 bit black, 16 bit white - std::vector shading_data(pixels_per_line * 4 * channels, 0); + // 16 bit black, 16 bit white + std::vector shading_data(pixels_per_line * 4 * channels, 0); - uint8_t* shading_data_ptr = shading_data.data(); + std::uint8_t* shading_data_ptr = shading_data.data(); for (unsigned i = 0; i < pixels_per_line * channels; i++) { *shading_data_ptr++ = 0x00; /* dark lo */ @@ -487,7 +487,7 @@ void scanner_clear_scan_and_feed_counts(Genesys_Device& dev) } void scanner_send_slope_table(Genesys_Device* dev, const Genesys_Sensor& sensor, unsigned table_nr, - const std::vector& slope_table) + const std::vector& slope_table) { DBG_HELPER_ARGS(dbg, "table_nr = %d, steps = %zu", table_nr, slope_table.size()); @@ -515,7 +515,7 @@ void scanner_send_slope_table(Genesys_Device* dev, const Genesys_Sensor& sensor, throw SaneException("invalid table number %d", table_nr); } - std::vector table; + std::vector table; table.reserve(slope_table.size() * 2); for (std::size_t i = 0; i < slope_table.size(); i++) { table.push_back(slope_table[i] & 0xff); @@ -1868,7 +1868,7 @@ void scanner_coarse_gain_calibration(Genesys_Device& dev, const Genesys_Sensor& dev.model->asic_type == AsicType::GL842 || dev.model->asic_type == AsicType::GL843) { - std::vector values; + std::vector values; // FIXME: start from the second line because the first line often has artifacts. Probably // caused by unclean cleanup of previous scan for (std::size_t x = pixels / 4; x < (pixels * 3 / 4); x++) { @@ -2178,12 +2178,12 @@ SensorExposure scanner_led_calibration(Genesys_Device& dev, const Genesys_Sensor } void sanei_genesys_calculate_zmod(bool two_table, - uint32_t exposure_time, - const std::vector& slope_table, + std::uint32_t exposure_time, + const std::vector& slope_table, unsigned acceleration_steps, unsigned move_steps, unsigned buffer_acceleration_steps, - uint32_t* out_z1, uint32_t* out_z2) + std::uint32_t* out_z1, std::uint32_t* out_z2) { // acceleration total time unsigned sum = std::accumulate(slope_table.begin(), slope_table.begin() + acceleration_steps, @@ -2233,7 +2233,7 @@ static void genesys_shading_calibration_impl(Genesys_Device* dev, const Genesys_ debug_dump(DBG_info, dev->calib_session); size_t size; - uint32_t pixels_per_line; + std::uint32_t pixels_per_line; if (dev->model->asic_type == AsicType::GL842 || dev->model->asic_type == AsicType::GL843 || @@ -2274,7 +2274,7 @@ static void genesys_shading_calibration_impl(Genesys_Device* dev, const Genesys_ size = channels * 2 * pixels_per_line * (dev->calib_session.params.lines + 1); } - std::vector calibration_data(size / 2); + std::vector calibration_data(size / 2); // turn off motor and lamp power for flatbed scanners, but not for sheetfed scanners // because they have a calibration sheet with a sufficient black strip @@ -2353,8 +2353,8 @@ static void genesys_shading_calibration_impl(Genesys_Device* dev, const Genesys_ static void genesys_dark_shading_by_dummy_pixel(Genesys_Device* dev, const Genesys_Sensor& sensor) { DBG_HELPER(dbg); - uint32_t pixels_per_line; - uint32_t skip, xend; + std::uint32_t pixels_per_line; + std::uint32_t skip, xend; int dummy1, dummy2, dummy3; /* dummy black average per channel */ if (dev->model->asic_type == AsicType::GL842 || @@ -2578,11 +2578,9 @@ static void genesys_dark_white_shading_calibration(Genesys_Device* dev, dev->interface->write_registers(local_reg); } - size_t size; - uint32_t pixels_per_line; + std::size_t size; + std::uint32_t pixels_per_line; unsigned int x; - uint32_t dark, white, dark_sum, white_sum, dark_count, white_count, col, - dif; if (dev->model->asic_type == AsicType::GL842 || dev->model->asic_type == AsicType::GL843) @@ -2618,7 +2616,7 @@ static void genesys_dark_white_shading_calibration(Genesys_Device* dev, size = channels * 2 * pixels_per_line * dev->calib_session.params.lines; } - std::vector calibration_data(size); + std::vector calibration_data(size); // turn on motor and lamp power sanei_genesys_set_lamp_power(dev, sensor, local_reg, true); @@ -2656,19 +2654,17 @@ static void genesys_dark_white_shading_calibration(Genesys_Device* dev, std::fill(dev->white_average_data.begin(), dev->white_average_data.begin() + start_offset * channels, 0); - uint16_t* average_white = dev->white_average_data.data() + - start_offset * channels; - uint16_t* average_dark = dev->dark_average_data.data() + - start_offset * channels; + std::uint16_t* average_white = dev->white_average_data.data() + start_offset * channels; + std::uint16_t* average_dark = dev->dark_average_data.data() + start_offset * channels; for (x = 0; x < pixels_per_line * channels; x++) { - dark = 0xffff; - white = 0; + std::uint32_t dark = 0xffff; + std::uint32_t white = 0; for (std::size_t y = 0; y < dev->calib_session.params.lines; y++) { - col = calibration_data[(x + y * pixels_per_line * channels) * 2]; + std::uint32_t col = calibration_data[(x + y * pixels_per_line * channels) * 2]; col |= calibration_data[(x + y * pixels_per_line * channels) * 2 + 1] << 8; @@ -2679,20 +2675,20 @@ static void genesys_dark_white_shading_calibration(Genesys_Device* dev, dark = col; } - dif = white - dark; + std::uint32_t dif = white - dark; dark = dark + dif / 8; white = white - dif / 8; - dark_count = 0; - dark_sum = 0; + std::uint32_t dark_count = 0; + std::uint32_t dark_sum = 0; - white_count = 0; - white_sum = 0; + std::uint32_t white_count = 0; + std::uint32_t white_sum = 0; for (std::size_t y = 0; y < dev->calib_session.params.lines; y++) { - col = calibration_data[(x + y * pixels_per_line * channels) * 2]; + std::uint32_t col = calibration_data[(x + y * pixels_per_line * channels) * 2]; col |= calibration_data[(x + y * pixels_per_line * channels) * 2 + 1] << 8; @@ -2780,9 +2776,8 @@ compute_coefficient (unsigned int coeff, unsigned int target, unsigned int value * @param target_bright value of the white target code * @param target_dark value of the black target code */ -static void -compute_averaged_planar (Genesys_Device * dev, const Genesys_Sensor& sensor, - uint8_t * shading_data, +static void compute_averaged_planar(Genesys_Device * dev, const Genesys_Sensor& sensor, + std::uint8_t* shading_data, unsigned int pixels_per_line, unsigned int words_per_color, unsigned int channels, @@ -2852,7 +2847,8 @@ compute_averaged_planar (Genesys_Device * dev, const Genesys_Sensor& sensor, avgpixels = 15; /* LiDE80 packs shading data */ - if (dev->model->sensor_id != SensorId::CIS_CANON_LIDE_80) { + if (dev->model->sensor_id != SensorId::CIS_CANON_LIDE_80) + { factor=1; fill=avgpixels; } @@ -2961,7 +2957,7 @@ static std::array color_order_to_cmat(ColorOrder color_order) * @param target value of the target code */ static void compute_coefficients(Genesys_Device * dev, - uint8_t * shading_data, + std::uint8_t* shading_data, unsigned int pixels_per_line, unsigned int channels, ColorOrder color_order, @@ -2969,7 +2965,6 @@ static void compute_coefficients(Genesys_Device * dev, unsigned int coeff, unsigned int target) { - uint8_t *ptr; /* contain 16bit words in little endian */ unsigned int x, c; unsigned int val, br, dk; unsigned int start, end; @@ -2995,7 +2990,8 @@ static void compute_coefficients(Genesys_Device * dev, for (x = start; x < end; x++) { /* TODO if channels=1 , use filter to know the base addr */ - ptr = shading_data + 4 * ((x + offset) * channels + cmat[c]); + // contain 16bit words in little endian + std::uint8_t* ptr = shading_data + 4 * ((x + offset) * channels + cmat[c]); // dark data dk = dev->dark_average_data[x * channels + c]; @@ -3033,7 +3029,7 @@ static void compute_coefficients(Genesys_Device * dev, * @param target white target value */ static void compute_planar_coefficients(Genesys_Device * dev, - uint8_t * shading_data, + std::uint8_t* shading_data, unsigned int factor, unsigned int pixels_per_line, unsigned int words_per_color, @@ -3043,22 +3039,20 @@ static void compute_planar_coefficients(Genesys_Device * dev, unsigned int coeff, unsigned int target) { - uint8_t *ptr; /* contains 16bit words in little endian */ - uint32_t x, c, i; - uint32_t val, dk, br; + std::uint32_t i; + std::uint32_t val, dk, br; auto cmat = color_order_to_cmat(color_order); DBG(DBG_io, "%s: factor=%d, pixels_per_line=%d, words=0x%X, coeff=0x%04x\n", __func__, factor, pixels_per_line, words_per_color, coeff); - for (c = 0; c < channels; c++) - { + for (unsigned c = 0; c < channels; c++) { /* shading data is larger than pixels_per_line so offset can be neglected */ - for (x = 0; x < pixels_per_line; x+=factor) - { + for (unsigned x = 0; x < pixels_per_line; x += factor) { /* x2 because of 16 bit values, and x2 since one coeff for dark * and another for white */ - ptr = shading_data + words_per_color * cmat[c] * 2 + (x + offset) * 4; + // contains 16bit words in little endian + std::uint8_t* ptr = shading_data + words_per_color * cmat[c] * 2 + (x + offset) * 4; dk = 0; br = 0; @@ -3074,9 +3068,8 @@ static void compute_planar_coefficients(Genesys_Device * dev, val = compute_coefficient (coeff, target, br - dk); - /* we duplicate the information to have calibration data at optical resolution */ - for (i = 0; i < factor; i++) - { + // we duplicate the information to have calibration data at optical resolution + for (unsigned i = 0; i < factor; i++) { ptr[0 + 4 * i] = dk & 255; ptr[1 + 4 * i] = dk / 256; ptr[2 + 4 * i] = val & 0xff; @@ -3097,10 +3090,9 @@ static void compute_planar_coefficients(Genesys_Device * dev, } } -static void -compute_shifted_coefficients (Genesys_Device * dev, - const Genesys_Sensor& sensor, - uint8_t * shading_data, +static void compute_shifted_coefficients(Genesys_Device * dev, + const Genesys_Sensor& sensor, + std::uint8_t* shading_data, unsigned int pixels_per_line, unsigned int channels, ColorOrder color_order, @@ -3112,7 +3104,7 @@ compute_shifted_coefficients (Genesys_Device * dev, { unsigned int x, avgpixels, basepixels, i, j, val1, val2; unsigned int br_tmp [3], dk_tmp [3]; - uint8_t *ptr = shading_data + offset * 3 * 4; /* contain 16bit words in little endian */ + std::uint8_t* ptr = shading_data + offset * 3 * 4; // contain 16bit words in little endian unsigned int patch_cnt = offset * 3; /* at start, offset of first patch */ auto cmat = color_order_to_cmat(color_order); @@ -3198,7 +3190,7 @@ static void genesys_send_shading_coefficient(Genesys_Device* dev, const Genesys_ return; } - uint32_t pixels_per_line; + std::uint32_t pixels_per_line; int o; unsigned int length; /**> number of shading calibration data words */ unsigned int factor; @@ -3255,8 +3247,8 @@ static void genesys_send_shading_coefficient(Genesys_Device* dev, const Genesys_ length = words_per_color * 3 * 2; /* allocate computed size */ - // contains 16bit words in little endian - std::vector shading_data(length, 0); + // contains 16bit words in little endian + std::vector shading_data(length, 0); if (!dev->calib_session.computed) { genesys_send_offset_and_shading(dev, sensor, shading_data.data(), length); @@ -3584,7 +3576,7 @@ static void genesys_save_calibration(Genesys_Device* dev, const Genesys_Sensor& static void genesys_flatbed_calibration(Genesys_Device* dev, Genesys_Sensor& sensor) { DBG_HELPER(dbg); - uint32_t pixels_per_line; + std::uint32_t pixels_per_line; unsigned coarse_res = sensor.full_resolution; if (dev->settings.yres <= sensor.full_resolution / 2) { @@ -3857,8 +3849,8 @@ static void genesys_warmup_lamp(Genesys_Device* dev) auto channels = dev->session.params.channels; auto lines = dev->session.output_line_count; - std::vector first_line(total_size); - std::vector second_line(total_size); + std::vector first_line(total_size); + std::vector second_line(total_size); do { first_line = second_line; @@ -4892,28 +4884,76 @@ static void init_options(Genesys_Scanner* s) s->opt[OPT_POWER_SW].cap = SANE_CAP_INACTIVE; /* extra button */ - s->opt[OPT_EXTRA_SW].name = "extra"; - s->opt[OPT_EXTRA_SW].title = SANE_I18N("Extra button"); - s->opt[OPT_EXTRA_SW].desc = SANE_I18N("Extra button"); - s->opt[OPT_EXTRA_SW].type = SANE_TYPE_BOOL; - s->opt[OPT_EXTRA_SW].unit = SANE_UNIT_NONE; - if (model->buttons & GENESYS_HAS_EXTRA_SW) { - s->opt[OPT_EXTRA_SW].cap = SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED; - } else { - s->opt[OPT_EXTRA_SW].cap = SANE_CAP_INACTIVE; - } - - // transparency/scan_film button - s->opt[OPT_TRANSP_SW].name = "transparency"; - s->opt[OPT_TRANSP_SW].title = SANE_I18N ("Transparency button"); - s->opt[OPT_TRANSP_SW].desc = SANE_I18N ("Transparency button"); - s->opt[OPT_TRANSP_SW].type = SANE_TYPE_BOOL; - s->opt[OPT_TRANSP_SW].unit = SANE_UNIT_NONE; - if (model->buttons & GENESYS_HAS_TRANSP_SW) { - s->opt[OPT_TRANSP_SW].cap = SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED; - } else { - s->opt[OPT_TRANSP_SW].cap = SANE_CAP_INACTIVE; - } + s->opt[OPT_EXTRA_SW].name = "extra"; + s->opt[OPT_EXTRA_SW].title = SANE_I18N("Extra button"); + s->opt[OPT_EXTRA_SW].desc = SANE_I18N("Extra button"); + s->opt[OPT_EXTRA_SW].type = SANE_TYPE_BOOL; + s->opt[OPT_EXTRA_SW].unit = SANE_UNIT_NONE; + if (model->buttons & GENESYS_HAS_EXTRA_SW) + s->opt[OPT_EXTRA_SW].cap = + SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED; + else + s->opt[OPT_EXTRA_SW].cap = SANE_CAP_INACTIVE; + + /* transparency/scan_film button */ + s->opt[OPT_TRANSP_SW].name = "transparency"; + s->opt[OPT_TRANSP_SW].title = SANE_I18N ("Transparency button"); + s->opt[OPT_TRANSP_SW].desc = SANE_I18N ("Transparency button"); + s->opt[OPT_TRANSP_SW].type = SANE_TYPE_BOOL; + s->opt[OPT_TRANSP_SW].unit = SANE_UNIT_NONE; + if (model->buttons & GENESYS_HAS_TRANSP_SW) + s->opt[OPT_TRANSP_SW].cap = + SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED; + else + s->opt[OPT_TRANSP_SW].cap = SANE_CAP_INACTIVE; + + /* PDF special function button 1 */ + s->opt[OPT_PDF1_SW].name = "pdf1"; + s->opt[OPT_PDF1_SW].title = SANE_I18N ("PDF function button 1"); + s->opt[OPT_PDF1_SW].desc = SANE_I18N ("PDF function button 1"); + s->opt[OPT_PDF1_SW].type = SANE_TYPE_BOOL; + s->opt[OPT_PDF1_SW].unit = SANE_UNIT_NONE; + if (model->buttons & GENESYS_HAS_PDF1_SW) + s->opt[OPT_PDF1_SW].cap = + SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED; + else + s->opt[OPT_PDF1_SW].cap = SANE_CAP_INACTIVE; + + /* PDF special function button 2 */ + s->opt[OPT_PDF2_SW].name = "pdf2"; + s->opt[OPT_PDF2_SW].title = SANE_I18N ("PDF function button 2"); + s->opt[OPT_PDF2_SW].desc = SANE_I18N ("PDF function button 2"); + s->opt[OPT_PDF2_SW].type = SANE_TYPE_BOOL; + s->opt[OPT_PDF2_SW].unit = SANE_UNIT_NONE; + if (model->buttons & GENESYS_HAS_PDF2_SW) + s->opt[OPT_PDF2_SW].cap = + SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED; + else + s->opt[OPT_PDF2_SW].cap = SANE_CAP_INACTIVE; + + /* PDF special function button 3 */ + s->opt[OPT_PDF3_SW].name = "pdf3"; + s->opt[OPT_PDF3_SW].title = SANE_I18N ("PDF function button 3"); + s->opt[OPT_PDF3_SW].desc = SANE_I18N ("PDF function button 3"); + s->opt[OPT_PDF3_SW].type = SANE_TYPE_BOOL; + s->opt[OPT_PDF3_SW].unit = SANE_UNIT_NONE; + if (model->buttons & GENESYS_HAS_PDF3_SW) + s->opt[OPT_PDF3_SW].cap = + SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED; + else + s->opt[OPT_PDF3_SW].cap = SANE_CAP_INACTIVE; + + /* PDF special function button 4 */ + s->opt[OPT_PDF4_SW].name = "pdf4"; + s->opt[OPT_PDF4_SW].title = SANE_I18N ("PDF function button 4"); + s->opt[OPT_PDF4_SW].desc = SANE_I18N ("PDF function button 4"); + s->opt[OPT_PDF4_SW].type = SANE_TYPE_BOOL; + s->opt[OPT_PDF4_SW].unit = SANE_UNIT_NONE; + if (model->buttons & GENESYS_HAS_PDF4_SW) + s->opt[OPT_PDF4_SW].cap = + SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED; + else + s->opt[OPT_PDF4_SW].cap = SANE_CAP_INACTIVE; /* calibration needed */ s->opt[OPT_NEED_CALIBRATION_SW].name = "need-calibration"; @@ -5588,7 +5628,7 @@ static void get_option_value(Genesys_Scanner* s, int option, void* val) auto* dev = s->dev; unsigned int i; SANE_Word* table = nullptr; - std::vector gamma_table; + std::vector gamma_table; unsigned option_size = 0; const Genesys_Sensor* sensor = nullptr; @@ -5734,6 +5774,10 @@ static void get_option_value(Genesys_Scanner* s, int option, void* val) case OPT_POWER_SW: case OPT_EXTRA_SW: case OPT_TRANSP_SW: + case OPT_PDF1_SW: + case OPT_PDF2_SW: + case OPT_PDF3_SW: + case OPT_PDF4_SW: s->dev->cmd_set->update_hardware_sensors(s); *reinterpret_cast(val) = s->buttons[genesys_option_to_button(option)].read(); break; @@ -6370,6 +6414,10 @@ GenesysButtonName genesys_option_to_button(int option) case OPT_POWER_SW: return BUTTON_POWER_SW; case OPT_EXTRA_SW: return BUTTON_EXTRA_SW; case OPT_TRANSP_SW: return BUTTON_TRANSP_SW; + case OPT_PDF1_SW: return BUTTON_PDF1_SW; + case OPT_PDF2_SW: return BUTTON_PDF2_SW; + case OPT_PDF3_SW: return BUTTON_PDF3_SW; + case OPT_PDF4_SW: return BUTTON_PDF4_SW; default: throw std::runtime_error("Unknown option to convert to button index"); } } diff --git a/backend/genesys/genesys.h b/backend/genesys/genesys.h index 272beaa..65b66e7 100644 --- a/backend/genesys/genesys.h +++ b/backend/genesys/genesys.h @@ -104,6 +104,10 @@ enum Genesys_Option OPT_POWER_SW, OPT_EXTRA_SW, OPT_TRANSP_SW, + OPT_PDF1_SW, + OPT_PDF2_SW, + OPT_PDF3_SW, + OPT_PDF4_SW, OPT_NEED_CALIBRATION_SW, OPT_BUTTON_GROUP, OPT_CALIBRATE, @@ -125,6 +129,10 @@ enum GenesysButtonName : unsigned { BUTTON_POWER_SW, BUTTON_EXTRA_SW, BUTTON_TRANSP_SW, + BUTTON_PDF1_SW, + BUTTON_PDF2_SW, + BUTTON_PDF3_SW, + BUTTON_PDF4_SW, NUM_BUTTONS }; diff --git a/backend/genesys/gl124.cpp b/backend/genesys/gl124.cpp index 1fa4d99..af193a3 100644 --- a/backend/genesys/gl124.cpp +++ b/backend/genesys/gl124.cpp @@ -355,7 +355,7 @@ gl124_init_registers (Genesys_Device * dev) * @param dev device owning the AFE * @param set flag AFE_INIT to specify the AFE must be reset before writing data * */ -static void gl124_set_ti_fe(Genesys_Device* dev, uint8_t set) +static void gl124_set_ti_fe(Genesys_Device* dev, std::uint8_t set) { DBG_HELPER(dbg); int i; @@ -367,9 +367,8 @@ static void gl124_set_ti_fe(Genesys_Device* dev, uint8_t set) // start writing to DAC dev->interface->write_fe_register(0x00, 0x80); - /* write values to analog frontend */ - for (uint16_t addr = 0x01; addr < 0x04; addr++) - { + // write values to analog frontend + for (std::uint16_t addr = 0x01; addr < 0x04; addr++) { dev->interface->write_fe_register(addr, dev->frontend.regs.get_value(addr)); } @@ -392,13 +391,14 @@ static void gl124_set_ti_fe(Genesys_Device* dev, uint8_t set) // Set values of analog frontend -void CommandSetGl124::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const +void CommandSetGl124::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, + std::uint8_t set) const { DBG_HELPER_ARGS(dbg, "%s", set == AFE_INIT ? "init" : set == AFE_SET ? "set" : set == AFE_POWER_SAVE ? "powersave" : "huh?"); (void) sensor; - uint8_t val; + std::uint8_t val; if (set == AFE_INIT) { dev->frontend = dev->frontend_initial; @@ -434,7 +434,7 @@ static void gl124_init_motor_regs_scan(Genesys_Device* dev, DBG_HELPER(dbg); unsigned int lincnt, fast_dpi; unsigned int feedl,dist; - uint32_t z1, z2; + std::uint32_t z1, z2; unsigned yres; unsigned min_speed; unsigned int linesel; @@ -489,7 +489,7 @@ static void gl124_init_motor_regs_scan(Genesys_Device* dev, reg->set24(REG_LINCNT, lincnt); /* compute register 02 value */ - uint8_t r02 = REG_0x02_NOTHOME; + std::uint8_t r02 = REG_0x02_NOTHOME; if (has_flag(flags, ScanFlag::AUTO_GO_HOME)) { r02 |= REG_0x02_AGOHOME; @@ -578,7 +578,6 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens const ScanSession& session) { DBG_HELPER_ARGS(dbg, "exposure_time=%d", exposure_time); - uint32_t expmax; scanner_setup_sensor(*dev, sensor, *reg); @@ -659,7 +658,7 @@ static void gl124_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens reg->find_reg(REG_0x60).value &= ~REG_0x60_LEDADD; if (session.enable_ledadd) { reg->find_reg(REG_0x60).value |= REG_0x60_LEDADD; - expmax = reg->get24(REG_EXPR); + std::uint32_t expmax = reg->get24(REG_EXPR); expmax = std::max(expmax, reg->get24(REG_EXPG)); expmax = std::max(expmax, reg->get24(REG_EXPB)); @@ -745,7 +744,7 @@ void CommandSetGl124::init_regs_for_scan_session(Genesys_Device* dev, const Gene dev->session = session; dev->total_bytes_read = 0; - dev->total_bytes_to_read = session.output_line_bytes_requested * session.params.lines; + dev->total_bytes_to_read = (size_t)session.output_line_bytes_requested * (size_t)session.params.lines; DBG(DBG_info, "%s: total bytes to send to frontend = %zu\n", __func__, dev->total_bytes_to_read); @@ -826,7 +825,7 @@ void gl124_setup_scan_gpio(Genesys_Device* dev, int resolution) { DBG_HELPER(dbg); - uint8_t val = dev->interface->read_register(REG_0x32); + std::uint8_t val = dev->interface->read_register(REG_0x32); /* LiDE 110, 210 and 220 cases */ if(dev->model->gpio_id != GpioId::CANON_LIDE_120) { @@ -883,7 +882,7 @@ void CommandSetGl124::begin_scan(Genesys_Device* dev, const Genesys_Sensor& sens scanner_clear_scan_and_feed_counts(*dev); // enable scan and motor - uint8_t val = dev->interface->read_register(REG_0x01); + std::uint8_t val = dev->interface->read_register(REG_0x01); val |= REG_0x01_SCAN; dev->interface->write_register(REG_0x01, val); @@ -974,7 +973,7 @@ void CommandSetGl124::wait_for_motor_stop(Genesys_Device* dev) const DBG_HELPER(dbg); auto status = scanner_read_status(*dev); - uint8_t val40 = dev->interface->read_register(REG_0x100); + std::uint8_t val40 = dev->interface->read_register(REG_0x100); if (!status.is_motor_enabled && (val40 & REG_0x100_MOTMFLG) == 0) { return; @@ -997,7 +996,7 @@ void CommandSetGl124::send_shading_data(Genesys_Device* dev, const Genesys_Senso { DBG_HELPER_ARGS(dbg, "writing %d bytes of shading data", size); std::uint32_t addr, length, segcnt, pixels, i; - uint8_t *ptr, *src; + std::uint8_t *ptr, *src; /* logical size of a color as seen by generic code of the frontend */ length = size / 3; @@ -1020,7 +1019,7 @@ void CommandSetGl124::send_shading_data(Genesys_Device* dev, const Genesys_Senso std::to_string(dev->session.segment_count)); DBG( DBG_io2, "%s: using chunks of %d bytes (%d shading data pixels)\n",__func__,length, length/4); - std::vector buffer(pixels * dev->session.segment_count, 0); + std::vector buffer(pixels * dev->session.segment_count, 0); /* write actual red data */ for(i=0;i<3;i++) @@ -1047,7 +1046,7 @@ void CommandSetGl124::send_shading_data(Genesys_Device* dev, const Genesys_Senso /* next shading coefficient */ ptr+=4; } - uint8_t val = dev->interface->read_register(0xd0+i); + std::uint8_t val = dev->interface->read_register(0xd0+i); addr = val * 8192 + 0x10000000; dev->interface->write_ahb(addr, pixels * dev->session.segment_count, buffer.data()); } @@ -1254,7 +1253,7 @@ void CommandSetGl124::asic_boot(Genesys_Device* dev, bool cold) const dev->interface->write_register(0x36, 0x01); // set GPIO 17 - uint8_t val = dev->interface->read_register(0x33); + std::uint8_t val = dev->interface->read_register(0x33); val |= 0x01; dev->interface->write_register(0x33, val); @@ -1297,7 +1296,7 @@ void CommandSetGl124::update_hardware_sensors(Genesys_Scanner* s) const any of them. */ DBG_HELPER(dbg); - uint8_t val = s->dev->interface->read_register(REG_0x31); + std::uint8_t val = s->dev->interface->read_register(REG_0x31); /* TODO : for the next scanner special case, * add another per scanner button profile struct to avoid growing diff --git a/backend/genesys/gl124.h b/backend/genesys/gl124.h index 02b733b..2b98b1b 100644 --- a/backend/genesys/gl124.h +++ b/backend/genesys/gl124.h @@ -46,7 +46,7 @@ public: Genesys_Register_Set* reg, const ScanSession& session) const override; - void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const override; + void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t set) const override; void set_powersaving(Genesys_Device* dev, int delay) const override; void save_power(Genesys_Device* dev, bool enable) const override; @@ -80,7 +80,7 @@ public: void eject_document(Genesys_Device* dev) const override; - void send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t* data, + void send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t* data, int size) const override; ScanSession calculate_scan_session(const Genesys_Device* dev, diff --git a/backend/genesys/gl646.cpp b/backend/genesys/gl646.cpp index bdde703..ac6c617 100644 --- a/backend/genesys/gl646.cpp +++ b/backend/genesys/gl646.cpp @@ -43,11 +43,12 @@ constexpr unsigned CALIBRATION_LINES = 10; static void write_control(Genesys_Device* dev, const Genesys_Sensor& sensor, int resolution); -static void gl646_set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set, int dpi); +static void gl646_set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t set, + int dpi); static void simple_scan(Genesys_Device* dev, const Genesys_Sensor& sensor, const ScanSession& session, bool move, - std::vector& data, const char* test_identifier); + std::vector& data, const char* test_identifier); /** * Send the stop scan command * */ @@ -374,7 +375,7 @@ static Motor_Master motor_master[] = { /** * reads value from gpio endpoint */ -static void gl646_gpio_read(IUsbDevice& usb_dev, uint8_t* value) +static void gl646_gpio_read(IUsbDevice& usb_dev, std::uint8_t* value) { DBG_HELPER(dbg); usb_dev.control_msg(REQUEST_TYPE_IN, REQUEST_REGISTER, GPIO_READ, INDEX, 1, value); @@ -383,7 +384,7 @@ static void gl646_gpio_read(IUsbDevice& usb_dev, uint8_t* value) /** * writes the given value to gpio endpoint */ -static void gl646_gpio_write(IUsbDevice& usb_dev, uint8_t value) +static void gl646_gpio_write(IUsbDevice& usb_dev, std::uint8_t value) { DBG_HELPER_ARGS(dbg, "(0x%02x)", value); usb_dev.control_msg(REQUEST_TYPE_OUT, REQUEST_REGISTER, GPIO_WRITE, INDEX, 1, &value); @@ -392,7 +393,7 @@ static void gl646_gpio_write(IUsbDevice& usb_dev, uint8_t value) /** * writes the given value to gpio output enable endpoint */ -static void gl646_gpio_output_enable(IUsbDevice& usb_dev, uint8_t value) +static void gl646_gpio_output_enable(IUsbDevice& usb_dev, std::uint8_t value) { DBG_HELPER_ARGS(dbg, "(0x%02x)", value); usb_dev.control_msg(REQUEST_TYPE_OUT, REQUEST_REGISTER, GPIO_OUTPUT_ENABLE, INDEX, 1, &value); @@ -440,10 +441,10 @@ void CommandSetGl646::init_regs_for_scan_session(Genesys_Device* dev, const Gene debug_dump(DBG_info, sensor); - uint32_t move = session.params.starty; + std::uint32_t move = session.params.starty; Motor_Master *motor = nullptr; - uint32_t z1, z2; + std::uint32_t z1, z2; int feedl; @@ -817,7 +818,8 @@ void CommandSetGl646::init_regs_for_scan_session(Genesys_Device* dev, const Gene dev->session = session; dev->total_bytes_read = 0; - dev->total_bytes_to_read = session.output_line_bytes_requested * session.params.lines; + dev->total_bytes_to_read = (size_t) session.output_line_bytes_requested + * (size_t) session.params.lines; /* select color filter based on settings */ regs->find_reg(0x04).value &= ~REG_0x04_FILTER; @@ -1023,7 +1025,7 @@ gl646_init_regs (Genesys_Device * dev) } // Set values of Analog Device type frontend -static void gl646_set_ad_fe(Genesys_Device* dev, uint8_t set) +static void gl646_set_ad_fe(Genesys_Device* dev, std::uint8_t set) { DBG_HELPER(dbg); int i; @@ -1058,7 +1060,7 @@ static void gl646_set_ad_fe(Genesys_Device* dev, uint8_t set) * @param set action from AFE_SET, AFE_INIT and AFE_POWERSAVE * @param dpi resolution of the scan since it affects settings */ -static void gl646_wm_hp3670(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set, +static void gl646_wm_hp3670(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t set, unsigned dpi) { DBG_HELPER(dbg); @@ -1108,16 +1110,17 @@ static void gl646_wm_hp3670(Genesys_Device* dev, const Genesys_Sensor& sensor, u * @param set action to execute * @param dpi dpi to setup the AFE */ -static void gl646_set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set, int dpi) +static void gl646_set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t set, + int dpi) { DBG_HELPER_ARGS(dbg, "%s,%d", set == AFE_INIT ? "init" : set == AFE_SET ? "set" : set == AFE_POWER_SAVE ? "powersave" : "huh?", dpi); int i; - uint8_t val; + std::uint8_t val; /* Analog Device type frontend */ - uint8_t frontend_type = dev->reg.find_reg(0x04).value & REG_0x04_FESET; + std::uint8_t frontend_type = dev->reg.find_reg(0x04).value & REG_0x04_FESET; if (frontend_type == 0x02) { gl646_set_ad_fe(dev, set); return; @@ -1203,7 +1206,8 @@ static void gl646_set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint * @param dev device to set * @param set action to execute */ -void CommandSetGl646::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const +void CommandSetGl646::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, + std::uint8_t set) const { gl646_set_fe(dev, sensor, set, dev->settings.yres); } @@ -1854,10 +1858,7 @@ void CommandSetGl646::send_gamma_table(Genesys_Device* dev, const Genesys_Sensor bits = 12; } - /* allocate temporary gamma tables: 16 bits words, 3 channels */ - std::vector gamma(size * 2 * 3); - - sanei_genesys_generate_gamma_buffer(dev, sensor, bits, size-1, size, gamma.data()); + auto gamma = generate_gamma_buffer(dev, sensor, bits, size-1, size); /* table address */ switch (dev->reg.find_reg(0x05).value >> 6) @@ -1892,7 +1893,7 @@ SensorExposure CommandSetGl646::led_calibration(Genesys_Device* dev, const Genes int val; int avg[3], avga, avge; int turn; - uint16_t expr, expg, expb; + std::uint16_t expr, expg, expb; unsigned channels = dev->settings.get_channels(); @@ -1927,7 +1928,7 @@ SensorExposure CommandSetGl646::led_calibration(Genesys_Device* dev, const Genes // colors * bytes_per_color * scan lines unsigned total_size = pixels * channels * 2 * 1; - std::vector line(total_size); + std::vector line(total_size); /* we try to get equal bright leds here: @@ -2022,13 +2023,12 @@ SensorExposure CommandSetGl646::led_calibration(Genesys_Device* dev, const Genes /** * average dark pixels of a scan */ -static int -dark_average (uint8_t * data, unsigned int pixels, unsigned int lines, - unsigned int channels, unsigned int black) +static int dark_average(std::uint8_t * data, unsigned int pixels, unsigned int lines, + unsigned int channels, unsigned int black) { unsigned int i, j, k, average, count; unsigned int avg[3]; - uint8_t val; + std::uint8_t val; /* computes average value on black margin */ for (k = 0; k < channels; k++) @@ -2110,7 +2110,7 @@ static void ad_fe_offset_calibration(Genesys_Device* dev, const Genesys_Sensor& dev->frontend.set_gain(1, 0); dev->frontend.set_gain(2, 0); - std::vector line; + std::vector line; /* scan with no move */ bottom = 1; @@ -2231,7 +2231,7 @@ void CommandSetGl646::offset_calibration(Genesys_Device* dev, const Genesys_Sens dev->frontend.set_offset(1, bottom); dev->frontend.set_offset(2, bottom); - std::vector first_line, second_line; + std::vector first_line, second_line; dev->cmd_set->init_regs_for_scan_session(dev, sensor, &dev->reg, session); simple_scan(dev, calib_sensor, session, false, first_line, "offset_first_line"); @@ -2383,7 +2383,7 @@ void CommandSetGl646::coarse_gain_calibration(Genesys_Device* dev, const Genesys unsigned pass = 0; - std::vector line; + std::vector line; /* loop until each channel raises to acceptable level */ while (((average[0] < calib_sensor.gain_white_ref) || @@ -2512,8 +2512,8 @@ void CommandSetGl646::init(Genesys_Device* dev) const DBG_INIT(); DBG_HELPER(dbg); - uint8_t val = 0; - uint32_t addr = 0xdead; + std::uint8_t val = 0; + std::uint32_t addr = 0xdead; size_t len; // to detect real power up condition, we write to REG_0x41 with pwrbit set, then read it back. @@ -2643,7 +2643,7 @@ void CommandSetGl646::init(Genesys_Device* dev) const static void simple_scan(Genesys_Device* dev, const Genesys_Sensor& sensor, const ScanSession& session, bool move, - std::vector& data, const char* scan_identifier) + std::vector& data, const char* scan_identifier) { unsigned lines = session.output_line_count; if (!dev->model->is_cis) { @@ -2695,7 +2695,7 @@ static void simple_scan(Genesys_Device* dev, const Genesys_Sensor& sensor, if (dev->model->is_cis && session.params.scan_mode == ScanColorMode::COLOR_SINGLE_PASS) { auto pixels_count = session.params.pixels; - std::vector buffer(pixels_count * 3 * bpp); + std::vector buffer(pixels_count * 3 * bpp); if (bpp == 1) { for (unsigned y = 0; y < lines; y++) { @@ -2738,7 +2738,7 @@ void CommandSetGl646::update_hardware_sensors(Genesys_Scanner* session) const { DBG_HELPER(dbg); Genesys_Device *dev = session->dev; - uint8_t value; + std::uint8_t value; // do what is needed to get a new set of events, but try to not loose any of them. gl646_gpio_read(dev->interface->get_usb_device(), &value); @@ -2858,8 +2858,8 @@ void CommandSetGl646::update_home_sensor_gpio(Genesys_Device& dev) const static void write_control(Genesys_Device* dev, const Genesys_Sensor& sensor, int resolution) { DBG_HELPER(dbg); - uint8_t control[4]; - uint32_t addr = 0xdead; + std::uint8_t control[4]; + std::uint32_t addr = 0xdead; /* 2300 does not write to 'control' */ if (dev->model->motor_id == MotorId::HP2300) { diff --git a/backend/genesys/gl646.h b/backend/genesys/gl646.h index 04e5fb2..5bbcfb2 100644 --- a/backend/genesys/gl646.h +++ b/backend/genesys/gl646.h @@ -50,7 +50,7 @@ public: Genesys_Register_Set* reg, const ScanSession& session) const override; - void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const override; + void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t set) const override; void set_powersaving(Genesys_Device* dev, int delay) const override; void save_power(Genesys_Device* dev, bool enable) const override; @@ -84,7 +84,7 @@ public: void eject_document(Genesys_Device* dev) const override; - void send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t* data, + void send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t* data, int size) const override; bool has_send_shading_data() const override diff --git a/backend/genesys/gl841.cpp b/backend/genesys/gl841.cpp index 27a6a36..3b068d1 100644 --- a/backend/genesys/gl841.cpp +++ b/backend/genesys/gl841.cpp @@ -288,7 +288,7 @@ gl841_init_registers (Genesys_Device * dev) } } -static void gl841_set_lide80_fe(Genesys_Device* dev, uint8_t set) +static void gl841_set_lide80_fe(Genesys_Device* dev, std::uint8_t set) { DBG_HELPER(dbg); @@ -311,7 +311,7 @@ static void gl841_set_lide80_fe(Genesys_Device* dev, uint8_t set) } // Set values of Analog Device type frontend -static void gl841_set_ad_fe(Genesys_Device* dev, uint8_t set) +static void gl841_set_ad_fe(Genesys_Device* dev, std::uint8_t set) { DBG_HELPER(dbg); int i; @@ -361,7 +361,8 @@ static void gl841_set_ad_fe(Genesys_Device* dev, uint8_t set) } // Set values of analog frontend -void CommandSetGl841::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const +void CommandSetGl841::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, + std::uint8_t set) const { DBG_HELPER_ARGS(dbg, "%s", set == AFE_INIT ? "init" : set == AFE_SET ? "set" : @@ -369,7 +370,7 @@ void CommandSetGl841::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, (void) sensor; /* Analog Device type frontend */ - uint8_t frontend_type = dev->reg.find_reg(0x04).value & REG_0x04_FESET; + std::uint8_t frontend_type = dev->reg.find_reg(0x04).value & REG_0x04_FESET; if (frontend_type == 0x02) { gl841_set_ad_fe(dev, set); @@ -453,12 +454,68 @@ static void gl841_write_freq(Genesys_Device* dev, unsigned int ydpi) { DBG_HELPER(dbg); /**< fast table */ -uint8_t tdefault[] = {0x18,0x36,0x18,0x36,0x18,0x36,0x18,0x36,0x18,0x36,0x18,0x36,0x18,0x36,0x18,0x36,0x18,0x36,0x18,0x36,0x18,0x36,0x18,0x36,0x18,0x36,0x18,0x36,0x18,0x36,0x18,0x36,0x18,0xb6,0x18,0xb6,0x18,0xb6,0x18,0xb6,0x18,0xb6,0x18,0xb6,0x18,0xb6,0x18,0xb6,0x18,0xb6,0x18,0xb6,0x18,0xb6,0x18,0xb6,0x18,0xb6,0x18,0xb6,0x18,0xb6,0x18,0xb6,0x18,0xf6,0x18,0xf6,0x18,0xf6,0x18,0xf6,0x18,0xf6,0x18,0xf6,0x18,0xf6,0x18,0xf6,0x18,0xf6,0x18,0xf6,0x18,0xf6,0x18,0xf6,0x18,0xf6,0x18,0xf6,0x18,0xf6,0x18,0xf6,0x18,0x76,0x18,0x76,0x18,0x76,0x18,0x76,0x18,0x76,0x18,0x76,0x18,0x76,0x18,0x76,0x18,0x76,0x18,0x76,0x18,0x76,0x18,0x76,0x18,0x76,0x18,0x76,0x18,0x76,0x18,0x76}; -uint8_t t1200[] = {0xc7,0x31,0xc7,0x31,0xc7,0x31,0xc7,0x31,0xc7,0x31,0xc7,0x31,0xc7,0x31,0xc7,0x31,0xc0,0x11,0xc0,0x11,0xc0,0x11,0xc0,0x11,0xc0,0x11,0xc0,0x11,0xc0,0x11,0xc0,0x11,0xc7,0xb1,0xc7,0xb1,0xc7,0xb1,0xc7,0xb1,0xc7,0xb1,0xc7,0xb1,0xc7,0xb1,0xc7,0xb1,0x07,0xe0,0x07,0xe0,0x07,0xe0,0x07,0xe0,0x07,0xe0,0x07,0xe0,0x07,0xe0,0x07,0xe0,0xc7,0xf1,0xc7,0xf1,0xc7,0xf1,0xc7,0xf1,0xc7,0xf1,0xc7,0xf1,0xc7,0xf1,0xc7,0xf1,0xc0,0x51,0xc0,0x51,0xc0,0x51,0xc0,0x51,0xc0,0x51,0xc0,0x51,0xc0,0x51,0xc0,0x51,0xc7,0x71,0xc7,0x71,0xc7,0x71,0xc7,0x71,0xc7,0x71,0xc7,0x71,0xc7,0x71,0xc7,0x71,0x07,0x20,0x07,0x20,0x07,0x20,0x07,0x20,0x07,0x20,0x07,0x20,0x07,0x20,0x07,0x20}; -uint8_t t300[] = {0x08,0x32,0x08,0x32,0x08,0x32,0x08,0x32,0x08,0x32,0x08,0x32,0x08,0x32,0x08,0x32,0x00,0x13,0x00,0x13,0x00,0x13,0x00,0x13,0x00,0x13,0x00,0x13,0x00,0x13,0x00,0x13,0x08,0xb2,0x08,0xb2,0x08,0xb2,0x08,0xb2,0x08,0xb2,0x08,0xb2,0x08,0xb2,0x08,0xb2,0x0c,0xa0,0x0c,0xa0,0x0c,0xa0,0x0c,0xa0,0x0c,0xa0,0x0c,0xa0,0x0c,0xa0,0x0c,0xa0,0x08,0xf2,0x08,0xf2,0x08,0xf2,0x08,0xf2,0x08,0xf2,0x08,0xf2,0x08,0xf2,0x08,0xf2,0x00,0xd3,0x00,0xd3,0x00,0xd3,0x00,0xd3,0x00,0xd3,0x00,0xd3,0x00,0xd3,0x00,0xd3,0x08,0x72,0x08,0x72,0x08,0x72,0x08,0x72,0x08,0x72,0x08,0x72,0x08,0x72,0x08,0x72,0x0c,0x60,0x0c,0x60,0x0c,0x60,0x0c,0x60,0x0c,0x60,0x0c,0x60,0x0c,0x60,0x0c,0x60}; -uint8_t t150[] = {0x0c,0x33,0xcf,0x33,0xcf,0x33,0xcf,0x33,0xcf,0x33,0xcf,0x33,0xcf,0x33,0xcf,0x33,0x40,0x14,0x80,0x15,0x80,0x15,0x80,0x15,0x80,0x15,0x80,0x15,0x80,0x15,0x80,0x15,0x0c,0xb3,0xcf,0xb3,0xcf,0xb3,0xcf,0xb3,0xcf,0xb3,0xcf,0xb3,0xcf,0xb3,0xcf,0xb3,0x11,0xa0,0x16,0xa0,0x16,0xa0,0x16,0xa0,0x16,0xa0,0x16,0xa0,0x16,0xa0,0x16,0xa0,0x0c,0xf3,0xcf,0xf3,0xcf,0xf3,0xcf,0xf3,0xcf,0xf3,0xcf,0xf3,0xcf,0xf3,0xcf,0xf3,0x40,0xd4,0x80,0xd5,0x80,0xd5,0x80,0xd5,0x80,0xd5,0x80,0xd5,0x80,0xd5,0x80,0xd5,0x0c,0x73,0xcf,0x73,0xcf,0x73,0xcf,0x73,0xcf,0x73,0xcf,0x73,0xcf,0x73,0xcf,0x73,0x11,0x60,0x16,0x60,0x16,0x60,0x16,0x60,0x16,0x60,0x16,0x60,0x16,0x60,0x16,0x60}; - -uint8_t *table; + std::uint8_t tdefault[] = { + 0x18, 0x36, 0x18, 0x36, 0x18, 0x36, 0x18, 0x36, 0x18, 0x36, + 0x18, 0x36, 0x18, 0x36, 0x18, 0x36, 0x18, 0x36, 0x18, 0x36, + 0x18, 0x36, 0x18, 0x36, 0x18, 0x36, 0x18, 0x36, 0x18, 0x36, + 0x18, 0x36, 0x18, 0xb6, 0x18, 0xb6, 0x18, 0xb6, 0x18, 0xb6, + 0x18, 0xb6, 0x18, 0xb6, 0x18, 0xb6, 0x18, 0xb6, 0x18, 0xb6, + 0x18, 0xb6, 0x18, 0xb6, 0x18, 0xb6, 0x18, 0xb6, 0x18, 0xb6, + 0x18, 0xb6, 0x18, 0xb6, 0x18, 0xf6, 0x18, 0xf6, 0x18, 0xf6, + 0x18, 0xf6, 0x18, 0xf6, 0x18, 0xf6, 0x18, 0xf6, 0x18, 0xf6, + 0x18, 0xf6, 0x18, 0xf6, 0x18, 0xf6, 0x18, 0xf6, 0x18, 0xf6, + 0x18, 0xf6, 0x18, 0xf6, 0x18, 0xf6, 0x18, 0x76, 0x18, 0x76, + 0x18, 0x76, 0x18, 0x76, 0x18, 0x76, 0x18, 0x76, 0x18, 0x76, + 0x18, 0x76, 0x18, 0x76, 0x18, 0x76, 0x18, 0x76, 0x18, 0x76, + 0x18, 0x76, 0x18, 0x76, 0x18, 0x76, 0x18, 0x76 + }; + std::uint8_t t1200[] = { + 0xc7, 0x31, 0xc7, 0x31, 0xc7, 0x31, 0xc7, 0x31, 0xc7, 0x31, + 0xc7, 0x31, 0xc7, 0x31, 0xc7, 0x31, 0xc0, 0x11, 0xc0, 0x11, + 0xc0, 0x11, 0xc0, 0x11, 0xc0, 0x11, 0xc0, 0x11, 0xc0, 0x11, + 0xc0, 0x11, 0xc7, 0xb1, 0xc7, 0xb1, 0xc7, 0xb1, 0xc7, 0xb1, + 0xc7, 0xb1, 0xc7, 0xb1, 0xc7, 0xb1, 0xc7, 0xb1, 0x07, 0xe0, + 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, 0x07, 0xe0, + 0x07, 0xe0, 0x07, 0xe0, 0xc7, 0xf1, 0xc7, 0xf1, 0xc7, 0xf1, + 0xc7, 0xf1, 0xc7, 0xf1, 0xc7, 0xf1, 0xc7, 0xf1, 0xc7, 0xf1, + 0xc0, 0x51, 0xc0, 0x51, 0xc0, 0x51, 0xc0, 0x51, 0xc0, 0x51, + 0xc0, 0x51, 0xc0, 0x51, 0xc0, 0x51, 0xc7, 0x71, 0xc7, 0x71, + 0xc7, 0x71, 0xc7, 0x71, 0xc7, 0x71, 0xc7, 0x71, 0xc7, 0x71, + 0xc7, 0x71, 0x07, 0x20, 0x07, 0x20, 0x07, 0x20, 0x07, 0x20, + 0x07, 0x20, 0x07, 0x20, 0x07, 0x20, 0x07, 0x20 + }; + std::uint8_t t300[] = { + 0x08, 0x32, 0x08, 0x32, 0x08, 0x32, 0x08, 0x32, 0x08, 0x32, + 0x08, 0x32, 0x08, 0x32, 0x08, 0x32, 0x00, 0x13, 0x00, 0x13, + 0x00, 0x13, 0x00, 0x13, 0x00, 0x13, 0x00, 0x13, 0x00, 0x13, + 0x00, 0x13, 0x08, 0xb2, 0x08, 0xb2, 0x08, 0xb2, 0x08, 0xb2, + 0x08, 0xb2, 0x08, 0xb2, 0x08, 0xb2, 0x08, 0xb2, 0x0c, 0xa0, + 0x0c, 0xa0, 0x0c, 0xa0, 0x0c, 0xa0, 0x0c, 0xa0, 0x0c, 0xa0, + 0x0c, 0xa0, 0x0c, 0xa0, 0x08, 0xf2, 0x08, 0xf2, 0x08, 0xf2, + 0x08, 0xf2, 0x08, 0xf2, 0x08, 0xf2, 0x08, 0xf2, 0x08, 0xf2, + 0x00, 0xd3, 0x00, 0xd3, 0x00, 0xd3, 0x00, 0xd3, 0x00, 0xd3, + 0x00, 0xd3, 0x00, 0xd3, 0x00, 0xd3, 0x08, 0x72, 0x08, 0x72, + 0x08, 0x72, 0x08, 0x72, 0x08, 0x72, 0x08, 0x72, 0x08, 0x72, + 0x08, 0x72, 0x0c, 0x60, 0x0c, 0x60, 0x0c, 0x60, 0x0c, 0x60, + 0x0c, 0x60, 0x0c, 0x60, 0x0c, 0x60, 0x0c, 0x60 + }; + std::uint8_t t150[] = { + 0x0c, 0x33, 0xcf, 0x33, 0xcf, 0x33, 0xcf, 0x33, 0xcf, 0x33, + 0xcf, 0x33, 0xcf, 0x33, 0xcf, 0x33, 0x40, 0x14, 0x80, 0x15, + 0x80, 0x15, 0x80, 0x15, 0x80, 0x15, 0x80, 0x15, 0x80, 0x15, + 0x80, 0x15, 0x0c, 0xb3, 0xcf, 0xb3, 0xcf, 0xb3, 0xcf, 0xb3, + 0xcf, 0xb3, 0xcf, 0xb3, 0xcf, 0xb3, 0xcf, 0xb3, 0x11, 0xa0, + 0x16, 0xa0, 0x16, 0xa0, 0x16, 0xa0, 0x16, 0xa0, 0x16, 0xa0, + 0x16, 0xa0, 0x16, 0xa0, 0x0c, 0xf3, 0xcf, 0xf3, 0xcf, 0xf3, + 0xcf, 0xf3, 0xcf, 0xf3, 0xcf, 0xf3, 0xcf, 0xf3, 0xcf, 0xf3, + 0x40, 0xd4, 0x80, 0xd5, 0x80, 0xd5, 0x80, 0xd5, 0x80, 0xd5, + 0x80, 0xd5, 0x80, 0xd5, 0x80, 0xd5, 0x0c, 0x73, 0xcf, 0x73, + 0xcf, 0x73, 0xcf, 0x73, 0xcf, 0x73, 0xcf, 0x73, 0xcf, 0x73, + 0xcf, 0x73, 0x11, 0x60, 0x16, 0x60, 0x16, 0x60, 0x16, 0x60, + 0x16, 0x60, 0x16, 0x60, 0x16, 0x60, 0x16, 0x60 + }; + + std::uint8_t *table; if(dev->model->motor_id == MotorId::CANON_LIDE_80) { switch(ydpi) @@ -495,7 +552,7 @@ static void gl841_init_motor_regs_feed(Genesys_Device* dev, const Genesys_Sensor /*number of scan lines to add in a scan_lines line*/ { - std::vector table; + std::vector table; table.resize(256, 0xffff); scanner_send_slope_table(dev, sensor, 0, table); @@ -711,6 +768,7 @@ static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens const ScanSession& session) { DBG_HELPER_ARGS(dbg, "exposure_time=%d", exposure_time); + dev->cmd_set->set_fe(dev, sensor, AFE_SET); /* gpio part.*/ @@ -920,7 +978,7 @@ dummy \ scanned lines dev->session = session; dev->total_bytes_read = 0; - dev->total_bytes_to_read = session.output_line_bytes_requested * session.params.lines; + dev->total_bytes_to_read = (size_t)session.output_line_bytes_requested * (size_t)session.params.lines; if (session.use_host_side_gray) { dev->total_bytes_to_read /= 3; } @@ -998,7 +1056,7 @@ void CommandSetGl841::save_power(Genesys_Device* dev, bool enable) const /* final state: GPIO8 disabled, GPIO9 enabled, GPIO17 disabled, GPIO18 disabled*/ - uint8_t val = dev->interface->read_register(REG_0x6D); + std::uint8_t val = dev->interface->read_register(REG_0x6D); dev->interface->write_register(REG_0x6D, val | 0x80); dev->interface->sleep_ms(1); @@ -1023,7 +1081,7 @@ void CommandSetGl841::save_power(Genesys_Device* dev, bool enable) const } if (dev->model->gpio_id == GpioId::DP685) { - uint8_t val = dev->interface->read_register(REG_0x6B); + std::uint8_t val = dev->interface->read_register(REG_0x6B); dev->interface->write_register(REG_0x6B, val & ~REG_0x6B_GPO17); dev->reg.find_reg(0x6b).value &= ~REG_0x6B_GPO17; dev->initial_regs.find_reg(0x6b).value &= ~REG_0x6B_GPO17; @@ -1041,7 +1099,7 @@ void CommandSetGl841::save_power(Genesys_Device* dev, bool enable) const /* final state: GPIO8 enabled, GPIO9 disabled, GPIO17 enabled, GPIO18 enabled*/ - uint8_t val = dev->interface->read_register(REG_0x6D); + std::uint8_t val = dev->interface->read_register(REG_0x6D); dev->interface->write_register(REG_0x6D, val | 0x80); dev->interface->sleep_ms(10); @@ -1070,7 +1128,7 @@ void CommandSetGl841::save_power(Genesys_Device* dev, bool enable) const if (dev->model->gpio_id == GpioId::DP665 || dev->model->gpio_id == GpioId::DP685) { - uint8_t val = dev->interface->read_register(REG_0x6B); + std::uint8_t val = dev->interface->read_register(REG_0x6B); dev->interface->write_register(REG_0x6B, val | REG_0x6B_GPO17); dev->reg.find_reg(0x6b).value |= REG_0x6B_GPO17; dev->initial_regs.find_reg(0x6b).value |= REG_0x6B_GPO17; @@ -1147,7 +1205,7 @@ static bool gl841_get_paper_sensor(Genesys_Device* dev) { DBG_HELPER(dbg); - uint8_t val = dev->interface->read_register(REG_0x6D); + std::uint8_t val = dev->interface->read_register(REG_0x6D); return (val & 0x1) == 0; } @@ -1365,7 +1423,7 @@ void CommandSetGl841::begin_scan(Genesys_Device* dev, const Genesys_Sensor& sens (void) sensor; // FIXME: SEQUENTIAL not really needed in this case Genesys_Register_Set local_reg(Genesys_Register_Set::SEQUENTIAL); - uint8_t val; + std::uint8_t val; if (dev->model->gpio_id == GpioId::CANON_LIDE_80) { val = dev->interface->read_register(REG_0x6B); @@ -1476,10 +1534,7 @@ void CommandSetGl841::send_gamma_table(Genesys_Device* dev, const Genesys_Sensor size = 256; - /* allocate temporary gamma tables: 16 bits words, 3 channels */ - std::vector gamma(size * 2 * 3); - - sanei_genesys_generate_gamma_buffer(dev, sensor, 16, 65535, size, gamma.data()); + auto gamma = generate_gamma_buffer(dev, sensor, 16, 65535, size); dev->interface->write_gamma(0x28, 0x0000, gamma.data(), size * 2 * 3); } @@ -1549,7 +1604,7 @@ static void ad_fe_offset_calibration(Genesys_Device* dev, const Genesys_Sensor& // FIXME: we're reading twice as much data for no reason std::size_t total_size = session.output_line_bytes * 2; - std::vector line(total_size); + std::vector line(total_size); dev->frontend.set_gain(0, 0); dev->frontend.set_gain(1, 0); @@ -2029,10 +2084,9 @@ void CommandSetGl841::init(Genesys_Device* dev) const void CommandSetGl841::update_hardware_sensors(Genesys_Scanner* s) const { DBG_HELPER(dbg); - /* do what is needed to get a new set of events, but try to not lose - any of them. - */ - uint8_t val; + + // do what is needed to get a new set of events, but try to not lose any of them. + std::uint8_t val; if (s->dev->model->gpio_id == GpioId::CANON_LIDE_35 || s->dev->model->gpio_id == GpioId::CANON_LIDE_80) @@ -2060,11 +2114,10 @@ void CommandSetGl841::update_hardware_sensors(Genesys_Scanner* s) const * for all the channels. */ void CommandSetGl841::send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, - uint8_t* data, int size) const + std::uint8_t* data, int size) const { DBG_HELPER_ARGS(dbg, "writing %d bytes of shading data", size); - uint32_t length, x, pixels, i; - uint8_t *ptr,*src; + std::uint32_t length, x, pixels, i; /* old method if no SHDAREA */ if ((dev->reg.find_reg(0x01).value & REG_0x01_SHDAREA) == 0) { @@ -2094,7 +2147,7 @@ void CommandSetGl841::send_shading_data(Genesys_Device* dev, const Genesys_Senso DBG(DBG_io2, "%s: using chunks of %d bytes (%d shading data pixels)\n", __func__, length, length/4); - std::vector buffer(pixels, 0); + std::vector buffer(pixels, 0); /* write actual shading data contigously * channel by channel, starting at addr 0x0000 @@ -2103,14 +2156,14 @@ void CommandSetGl841::send_shading_data(Genesys_Device* dev, const Genesys_Senso { /* copy data to work buffer and process it */ /* coefficient destination */ - ptr=buffer.data(); + std::uint8_t* ptr = buffer.data(); /* iterate on both sensor segment, data has been averaged, * so is in the right order and we only have to copy it */ for(x=0;xinterface->read_register(REG_0x04) & REG_0x04_FESET; + std::uint8_t fe_type = dev->interface->read_register(REG_0x04) & REG_0x04_FESET; if (fe_type == 2 || dev->model->model_id == ModelId::CANON_LIDE_90) { for (const auto& reg : dev->frontend.regs) { dev->interface->write_fe_register(reg.address, reg.value); @@ -568,7 +569,7 @@ void CommandSetGl842::init_regs_for_scan_session(Genesys_Device* dev, const Gene dev->session = session; dev->total_bytes_read = 0; - dev->total_bytes_to_read = session.output_line_bytes_requested * session.params.lines; + dev->total_bytes_to_read = (size_t)session.output_line_bytes_requested * (size_t)session.params.lines; } ScanSession CommandSetGl842::calculate_scan_session(const Genesys_Device* dev, @@ -841,11 +842,11 @@ void CommandSetGl842::send_gamma_table(Genesys_Device* dev, const Genesys_Sensor unsigned size = 256; - std::vector gamma(size * 2 * 3); + std::vector gamma(size * 2 * 3); - std::vector rgamma = get_gamma_table(dev, sensor, GENESYS_RED); - std::vector ggamma = get_gamma_table(dev, sensor, GENESYS_GREEN); - std::vector bgamma = get_gamma_table(dev, sensor, GENESYS_BLUE); + std::vector rgamma = get_gamma_table(dev, sensor, GENESYS_RED); + std::vector ggamma = get_gamma_table(dev, sensor, GENESYS_GREEN); + std::vector bgamma = get_gamma_table(dev, sensor, GENESYS_BLUE); // copy sensor specific's gamma tables for (unsigned i = 0; i < size; i++) { @@ -951,7 +952,7 @@ void CommandSetGl842::asic_boot(Genesys_Device* dev, bool cold) const dev->interface->write_registers(dev->reg); if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7200) { - uint8_t data[32] = { + std::uint8_t data[32] = { 0xd0, 0x38, 0x07, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -1006,7 +1007,7 @@ void CommandSetGl842::update_home_sensor_gpio(Genesys_Device& dev) const * for all the channels. */ void CommandSetGl842::send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, - uint8_t* data, int size) const + std::uint8_t* data, int size) const { DBG_HELPER(dbg); @@ -1032,7 +1033,7 @@ void CommandSetGl842::send_shading_data(Genesys_Device* dev, const Genesys_Senso dev->interface->record_key_value("shading_offset", std::to_string(offset)); dev->interface->record_key_value("shading_length", std::to_string(length)); - std::vector final_data(length, 0); + std::vector final_data(length, 0); unsigned count = 0; if (offset < 0) { diff --git a/backend/genesys/gl842.h b/backend/genesys/gl842.h index 3636bac..7a60819 100644 --- a/backend/genesys/gl842.h +++ b/backend/genesys/gl842.h @@ -46,7 +46,7 @@ public: Genesys_Register_Set* reg, const ScanSession& session) const override; - void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const override; + void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t set) const override; void set_powersaving(Genesys_Device* dev, int delay) const override; void save_power(Genesys_Device* dev, bool enable) const override; @@ -80,7 +80,7 @@ public: void eject_document(Genesys_Device* dev) const override; - void send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t* data, + void send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t* data, int size) const override; ScanSession calculate_scan_session(const Genesys_Device* dev, diff --git a/backend/genesys/gl843.cpp b/backend/genesys/gl843.cpp index 6180bf9..c2f4b52 100644 --- a/backend/genesys/gl843.cpp +++ b/backend/genesys/gl843.cpp @@ -597,7 +597,7 @@ gl843_init_registers (Genesys_Device * dev) } if (dev->model->model_id == ModelId::PLUSTEK_OPTICFILM_7200I) { - uint8_t data[32] = { + std::uint8_t data[32] = { 0x8c, 0x8f, 0xc9, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -616,7 +616,8 @@ static void gl843_set_ad_fe(Genesys_Device* dev) } // Set values of analog frontend -void CommandSetGl843::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const +void CommandSetGl843::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, + std::uint8_t set) const { DBG_HELPER_ARGS(dbg, "%s", set == AFE_INIT ? "init" : set == AFE_SET ? "set" : @@ -629,7 +630,7 @@ void CommandSetGl843::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, // check analog frontend type // FIXME: looks like we write to that register with initial data - uint8_t fe_type = dev->interface->read_register(REG_0x04) & REG_0x04_FESET; + std::uint8_t fe_type = dev->interface->read_register(REG_0x04) & REG_0x04_FESET; if (fe_type == 2) { gl843_set_ad_fe(dev); return; @@ -1041,7 +1042,7 @@ void CommandSetGl843::init_regs_for_scan_session(Genesys_Device* dev, const Gene dev->session = session; dev->total_bytes_read = 0; - dev->total_bytes_to_read = session.output_line_bytes_requested * session.params.lines; + dev->total_bytes_to_read = (size_t)session.output_line_bytes_requested * (size_t)session.params.lines; DBG(DBG_info, "%s: total bytes to send = %zu\n", __func__, dev->total_bytes_to_read); } @@ -1120,7 +1121,7 @@ void CommandSetGl843::save_power(Genesys_Device* dev, bool enable) const // switch KV-SS080 lamp off if (dev->model->gpio_id == GpioId::KVSS080) { - uint8_t val = dev->interface->read_register(REG_0x6C); + std::uint8_t val = dev->interface->read_register(REG_0x6C); if (enable) { val &= 0xef; } else { @@ -1140,7 +1141,7 @@ static bool gl843_get_paper_sensor(Genesys_Device* dev) { DBG_HELPER(dbg); - uint8_t val = dev->interface->read_register(REG_0x6D); + std::uint8_t val = dev->interface->read_register(REG_0x6D); return (val & 0x1) == 0; } @@ -1283,7 +1284,7 @@ void CommandSetGl843::begin_scan(Genesys_Device* dev, const Genesys_Sensor& sens scanner_clear_scan_and_feed_counts(*dev); // enable scan and motor - uint8_t val = dev->interface->read_register(REG_0x01); + std::uint8_t val = dev->interface->read_register(REG_0x01); val |= REG_0x01_SCAN; dev->interface->write_register(REG_0x01, val); @@ -1436,11 +1437,11 @@ void CommandSetGl843::send_gamma_table(Genesys_Device* dev, const Genesys_Sensor size = 256; /* allocate temporary gamma tables: 16 bits words, 3 channels */ - std::vector gamma(size * 2 * 3); + std::vector gamma(size * 2 * 3); - std::vector rgamma = get_gamma_table(dev, sensor, GENESYS_RED); - std::vector ggamma = get_gamma_table(dev, sensor, GENESYS_GREEN); - std::vector bgamma = get_gamma_table(dev, sensor, GENESYS_BLUE); + std::vector rgamma = get_gamma_table(dev, sensor, GENESYS_RED); + std::vector ggamma = get_gamma_table(dev, sensor, GENESYS_GREEN); + std::vector bgamma = get_gamma_table(dev, sensor, GENESYS_BLUE); // copy sensor specific's gamma tables for (i = 0; i < size; i++) { @@ -1553,7 +1554,7 @@ static void gl843_init_gpio(Genesys_Device* dev) void CommandSetGl843::asic_boot(Genesys_Device* dev, bool cold) const { DBG_HELPER(dbg); - uint8_t val; + std::uint8_t val; if (cold) { dev->interface->write_register(0x0e, 0x01); @@ -1665,7 +1666,7 @@ void CommandSetGl843::update_hardware_sensors(Genesys_Scanner* s) const any of them. */ - uint8_t val = s->dev->interface->read_register(REG_0x6D); + std::uint8_t val = s->dev->interface->read_register(REG_0x6D); DBG(DBG_io, "%s: read buttons_gpio value=0x%x\n", __func__, (int)val); switch (s->dev->model->gpio_id) @@ -1685,8 +1686,21 @@ void CommandSetGl843::update_hardware_sensors(Genesys_Scanner* s) const s->buttons[BUTTON_TRANSP_SW].write((val & 0x40) == 0); s->buttons[BUTTON_SCAN_SW].write((val & 0x08) == 0); break; - case GpioId::CANON_4400F: case GpioId::CANON_8400F: + s->buttons[BUTTON_COPY_SW].write((val & 0x01) == 0); + s->buttons[BUTTON_SCAN_SW].write((val & 0x02) == 0); + s->buttons[BUTTON_FILE_SW].write((val & 0x04) == 0); + s->buttons[BUTTON_EMAIL_SW].write((val & 0x08) == 0); + break; + case GpioId::CANON_4400F: + s->buttons[BUTTON_COPY_SW].write((val & 0x68) == 0x28); + s->buttons[BUTTON_TRANSP_SW].write((val & 0x68) == 0x20); + s->buttons[BUTTON_EMAIL_SW].write((val & 0x68) == 0x08); + s->buttons[BUTTON_PDF1_SW].write((val & 0x68) == 0x00); + s->buttons[BUTTON_PDF2_SW].write((val & 0x68) == 0x60); + s->buttons[BUTTON_PDF3_SW].write((val & 0x68) == 0x48); + s->buttons[BUTTON_PDF4_SW].write((val & 0x68) == 0x40); + break; default: break; } @@ -1703,11 +1717,10 @@ void CommandSetGl843::update_home_sensor_gpio(Genesys_Device& dev) const * for all the channels. */ void CommandSetGl843::send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, - uint8_t* data, int size) const + std::uint8_t* data, int size) const { DBG_HELPER(dbg); - uint32_t final_size, i; - uint8_t *buffer; + std::uint32_t final_size, i; int count; int offset = 0; @@ -1735,10 +1748,10 @@ void CommandSetGl843::send_shading_data(Genesys_Device* dev, const Genesys_Senso /* compute and allocate size for final data */ final_size = ((length+251) / 252) * 256; DBG(DBG_io, "%s: final shading size=%04x (length=%d)\n", __func__, final_size, length); - std::vector final_data(final_size, 0); + std::vector final_data(final_size, 0); /* copy regular shading data to the expected layout */ - buffer = final_data.data(); + std::uint8_t* buffer = final_data.data(); count = 0; if (offset < 0) { count += (-offset); diff --git a/backend/genesys/gl843.h b/backend/genesys/gl843.h index ac845bd..6012c36 100644 --- a/backend/genesys/gl843.h +++ b/backend/genesys/gl843.h @@ -46,7 +46,7 @@ public: Genesys_Register_Set* reg, const ScanSession& session) const override; - void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const override; + void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t set) const override; void set_powersaving(Genesys_Device* dev, int delay) const override; void save_power(Genesys_Device* dev, bool enable) const override; @@ -80,7 +80,7 @@ public: void eject_document(Genesys_Device* dev) const override; - void send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t* data, + void send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t* data, int size) const override; ScanSession calculate_scan_session(const Genesys_Device* dev, diff --git a/backend/genesys/gl846.cpp b/backend/genesys/gl846.cpp index b427376..6db312a 100644 --- a/backend/genesys/gl846.cpp +++ b/backend/genesys/gl846.cpp @@ -284,7 +284,7 @@ gl846_init_registers (Genesys_Device * dev) /** * Set register values of Analog Device type frontend * */ -static void gl846_set_adi_fe(Genesys_Device* dev, uint8_t set) +static void gl846_set_adi_fe(Genesys_Device* dev, std::uint8_t set) { DBG_HELPER(dbg); int i; @@ -314,15 +314,16 @@ static void gl846_set_adi_fe(Genesys_Device* dev, uint8_t set) } // Set values of analog frontend -void CommandSetGl846::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const +void CommandSetGl846::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, + std::uint8_t set) const { DBG_HELPER_ARGS(dbg, "%s", set == AFE_INIT ? "init" : set == AFE_SET ? "set" : set == AFE_POWER_SAVE ? "powersave" : "huh?"); (void) sensor; - /* route to specific analog frontend setup */ - uint8_t frontend_type = dev->reg.find_reg(0x04).value & REG_0x04_FESET; + // route to specific analog frontend setup + std::uint8_t frontend_type = dev->reg.find_reg(0x04).value & REG_0x04_FESET; switch (frontend_type) { case 0x02: /* ADI FE */ gl846_set_adi_fe(dev, set); @@ -658,7 +659,7 @@ void CommandSetGl846::init_regs_for_scan_session(Genesys_Device* dev, const Gene dev->session = session; dev->total_bytes_read = 0; - dev->total_bytes_to_read = session.output_line_bytes_requested * session.params.lines; + dev->total_bytes_to_read = (size_t)session.output_line_bytes_requested * (size_t)session.params.lines; DBG(DBG_info, "%s: total bytes to send = %zu\n", __func__, dev->total_bytes_to_read); } @@ -748,7 +749,6 @@ void CommandSetGl846::begin_scan(Genesys_Device* dev, const Genesys_Sensor& sens { DBG_HELPER(dbg); (void) sensor; - uint8_t val; if (reg->state.is_xpa_on && reg->state.is_lamp_on) { dev->cmd_set->set_xpa_lamp_power(*dev, true); @@ -756,7 +756,7 @@ void CommandSetGl846::begin_scan(Genesys_Device* dev, const Genesys_Sensor& sens scanner_clear_scan_and_feed_counts(*dev); - val = dev->interface->read_register(REG_0x01); + std::uint8_t val = dev->interface->read_register(REG_0x01); val |= REG_0x01_SCAN; dev->interface->write_register(REG_0x01, val); reg->set8(REG_0x01, val); @@ -862,11 +862,10 @@ void CommandSetGl846::init_regs_for_shading(Genesys_Device* dev, const Genesys_S * for all the channels. */ void CommandSetGl846::send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, - uint8_t* data, int size) const + std::uint8_t* data, int size) const { DBG_HELPER_ARGS(dbg, "writing %d bytes of shading data", size); std::uint32_t addr, i; - uint8_t val,*ptr,*src; unsigned length = static_cast(size / 3); @@ -884,7 +883,7 @@ void CommandSetGl846::send_shading_data(Genesys_Device* dev, const Genesys_Senso dev->interface->record_key_value("shading_length", std::to_string(length)); dev->interface->record_key_value("shading_factor", std::to_string(sensor.shading_factor)); - std::vector buffer(pixels, 0); + std::vector buffer(pixels, 0); DBG(DBG_io2, "%s: using chunks of %d (0x%04x) bytes\n", __func__, pixels, pixels); @@ -896,12 +895,12 @@ void CommandSetGl846::send_shading_data(Genesys_Device* dev, const Genesys_Senso { /* build up actual shading data by copying the part from the full width one * to the one corresponding to SHDAREA */ - ptr = buffer.data(); + std::uint8_t* ptr = buffer.data(); /* iterate on both sensor segment */ for (unsigned x = 0; x < pixels; x += 4 * sensor.shading_factor) { // coefficient source - src = (data + offset + i * length) + x; + std::uint8_t* src = (data + offset + i * length) + x; /* coefficient copy */ ptr[0]=src[0]; @@ -913,7 +912,7 @@ void CommandSetGl846::send_shading_data(Genesys_Device* dev, const Genesys_Senso ptr+=4; } - val = dev->interface->read_register(0xd0+i); + std::uint8_t val = dev->interface->read_register(0xd0+i); addr = val * 8192 + 0x10000000; dev->interface->write_ahb(addr, pixels, buffer.data()); } @@ -961,7 +960,7 @@ static void gl846_init_memory_layout(Genesys_Device* dev) void CommandSetGl846::asic_boot(Genesys_Device* dev, bool cold) const { DBG_HELPER(dbg); - uint8_t val; + std::uint8_t val; // reset ASIC if cold boot if (cold) { @@ -1036,8 +1035,7 @@ void CommandSetGl846::update_hardware_sensors(Genesys_Scanner* s) const /* do what is needed to get a new set of events, but try to not lose any of them. */ - uint8_t val; - uint8_t scan, file, email, copy; + std::uint8_t scan, file, email, copy; switch(s->dev->model->gpio_id) { default: @@ -1046,7 +1044,7 @@ void CommandSetGl846::update_hardware_sensors(Genesys_Scanner* s) const email=0x04; copy=0x08; } - val = s->dev->interface->read_register(REG_0x6D); + std::uint8_t val = s->dev->interface->read_register(REG_0x6D); s->buttons[BUTTON_SCAN_SW].write((val & scan) == 0); s->buttons[BUTTON_FILE_SW].write((val & file) == 0); diff --git a/backend/genesys/gl846.h b/backend/genesys/gl846.h index f1d396d..c0acec4 100644 --- a/backend/genesys/gl846.h +++ b/backend/genesys/gl846.h @@ -46,7 +46,7 @@ public: Genesys_Register_Set* reg, const ScanSession& session) const override; - void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const override; + void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t set) const override; void set_powersaving(Genesys_Device* dev, int delay) const override; void save_power(Genesys_Device* dev, bool enable) const override; @@ -80,7 +80,7 @@ public: void eject_document(Genesys_Device* dev) const override; - void send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t* data, + void send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t* data, int size) const override; ScanSession calculate_scan_session(const Genesys_Device* dev, diff --git a/backend/genesys/gl847.cpp b/backend/genesys/gl847.cpp index 13f9dd9..14d1fd0 100644 --- a/backend/genesys/gl847.cpp +++ b/backend/genesys/gl847.cpp @@ -51,7 +51,7 @@ gl847_init_registers (Genesys_Device * dev) { DBG_HELPER(dbg); int lide700=0; - uint8_t val; + std::uint8_t val; /* 700F class needs some different initial settings */ if (dev->model->model_id == ModelId::CANON_LIDE_700F) { @@ -233,7 +233,8 @@ gl847_init_registers (Genesys_Device * dev) } // Set values of analog frontend -void CommandSetGl847::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const +void CommandSetGl847::set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, + std::uint8_t set) const { DBG_HELPER_ARGS(dbg, "%s", set == AFE_INIT ? "init" : set == AFE_SET ? "set" : @@ -389,7 +390,7 @@ static void gl847_init_motor_regs_scan(Genesys_Device* dev, unsigned tgtime = 1 << (reg->get8(REG_0x1C) & REG_0x1C_TGTIME); // hi res motor speed GPIO - uint8_t effective = dev->interface->read_register(REG_0x6C); + std::uint8_t effective = dev->interface->read_register(REG_0x6C); // if quarter step, bipolar Vref2 @@ -624,7 +625,7 @@ void CommandSetGl847::init_regs_for_scan_session(Genesys_Device* dev, const Gene dev->session = session; dev->total_bytes_read = 0; - dev->total_bytes_to_read = session.output_line_bytes_requested * session.params.lines; + dev->total_bytes_to_read = (size_t)session.output_line_bytes_requested * (size_t)session.params.lines; DBG(DBG_info, "%s: total bytes to send = %zu\n", __func__, dev->total_bytes_to_read); } @@ -722,7 +723,7 @@ void CommandSetGl847::begin_scan(Genesys_Device* dev, const Genesys_Sensor& sens { DBG_HELPER(dbg); (void) sensor; - uint8_t val; + std::uint8_t val; if (reg->state.is_xpa_on && reg->state.is_lamp_on) { dev->cmd_set->set_xpa_lamp_power(*dev, true); @@ -879,11 +880,10 @@ void CommandSetGl847::init_regs_for_shading(Genesys_Device* dev, const Genesys_S * for all the channels. */ void CommandSetGl847::send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, - uint8_t* data, int size) const + std::uint8_t* data, int size) const { DBG_HELPER_ARGS(dbg, "writing %d bytes of shading data", size); std::uint32_t addr, i; - uint8_t val,*ptr,*src; unsigned length = static_cast(size / 3); @@ -901,7 +901,7 @@ void CommandSetGl847::send_shading_data(Genesys_Device* dev, const Genesys_Senso dev->interface->record_key_value("shading_length", std::to_string(length)); dev->interface->record_key_value("shading_factor", std::to_string(sensor.shading_factor)); - std::vector buffer(pixels, 0); + std::vector buffer(pixels, 0); DBG(DBG_io2, "%s: using chunks of %d (0x%04x) bytes\n", __func__, pixels, pixels); @@ -917,12 +917,12 @@ void CommandSetGl847::send_shading_data(Genesys_Device* dev, const Genesys_Senso { /* build up actual shading data by copying the part from the full width one * to the one corresponding to SHDAREA */ - ptr = buffer.data(); + std::uint8_t* ptr = buffer.data(); // iterate on both sensor segment for (unsigned x = 0; x < pixels; x += 4 * sensor.shading_factor) { - /* coefficient source */ - src = (data + offset + i * length) + x; + // coefficient source + std::uint8_t* src = (data + offset + i * length) + x; /* coefficient copy */ ptr[0]=src[0]; @@ -934,7 +934,7 @@ void CommandSetGl847::send_shading_data(Genesys_Device* dev, const Genesys_Senso ptr+=4; } - val = dev->interface->read_register(0xd0+i); + std::uint8_t val = dev->interface->read_register(0xd0+i); addr = val * 8192 + 0x10000000; dev->interface->write_ahb(addr, pixels, buffer.data()); } @@ -1030,7 +1030,7 @@ void CommandSetGl847::asic_boot(Genesys_Device* dev, bool cold) const } // test CHKVER - uint8_t val = dev->interface->read_register(REG_0x40); + std::uint8_t val = dev->interface->read_register(REG_0x40); if (val & REG_0x40_CHKVER) { val = dev->interface->read_register(0x00); DBG(DBG_info, "%s: reported version for genesys chip is 0x%02x\n", __func__, val); @@ -1089,27 +1089,46 @@ void CommandSetGl847::update_hardware_sensors(Genesys_Scanner* s) const /* do what is needed to get a new set of events, but try to not lose any of them. */ - uint8_t val; - uint8_t scan, file, email, copy; + std::uint8_t val; switch(s->dev->model->gpio_id) { case GpioId::CANON_LIDE_700F: - scan=0x04; - file=0x02; - email=0x01; - copy=0x08; + val = s->dev->interface->read_register(REG_0x6D); + DBG(DBG_io, "%s: read buttons_gpio value=0x%x\n", __func__, (int)val); + + s->buttons[BUTTON_SCAN_SW].write((val & 0x04) == 0); + s->buttons[BUTTON_FILE_SW].write((val & 0x02) == 0); + s->buttons[BUTTON_EMAIL_SW].write((val & 0x01) == 0); + s->buttons[BUTTON_COPY_SW].write((val & 0x08) == 0); + break; + + case GpioId::CANON_5600F: + val = s->dev->interface->read_register(REG_0x6D); + DBG(DBG_io, "%s: read buttons_gpio 0x6d value=0x%x\n", __func__, (int)val); + s->buttons[BUTTON_SCAN_SW].write((val & 0x02) == 0); + s->buttons[BUTTON_EMAIL_SW].write((val & 0x01) == 0); + s->buttons[BUTTON_COPY_SW].write((val & 0x08) == 0); + s->buttons[BUTTON_PDF4_SW].write((val & 0x04) == 0); + + val = s->dev->interface->read_register(REG_0xA6); + DBG(DBG_io, "%s: read buttons_gpio 0xa6 value=0x%x\n", __func__, (int)val); + s->buttons[BUTTON_PDF1_SW].write((val & 0x03) == 0x01); + s->buttons[BUTTON_PDF2_SW].write((val & 0x03) == 0x02); + + val = s->dev->interface->read_register(REG_0x6C); + DBG(DBG_io, "%s: read buttons_gpio 0x6c value=0x%x\n", __func__, (int)val); + s->buttons[BUTTON_PDF3_SW].write((val & 0x80) == 0x00); break; + default: - scan=0x01; - file=0x02; - email=0x04; - copy=0x08; - } - val = s->dev->interface->read_register(REG_0x6D); + val = s->dev->interface->read_register(REG_0x6D); + DBG(DBG_io, "%s: read buttons_gpio value=0x%x\n", __func__, (int)val); - s->buttons[BUTTON_SCAN_SW].write((val & scan) == 0); - s->buttons[BUTTON_FILE_SW].write((val & file) == 0); - s->buttons[BUTTON_EMAIL_SW].write((val & email) == 0); - s->buttons[BUTTON_COPY_SW].write((val & copy) == 0); + s->buttons[BUTTON_SCAN_SW].write((val & 0x01) == 0); + s->buttons[BUTTON_FILE_SW].write((val & 0x02) == 0); + s->buttons[BUTTON_EMAIL_SW].write((val & 0x04) == 0); + s->buttons[BUTTON_COPY_SW].write((val & 0x08) == 0); + break; + } } void CommandSetGl847::update_home_sensor_gpio(Genesys_Device& dev) const diff --git a/backend/genesys/gl847.h b/backend/genesys/gl847.h index 4b98b7a..68bf553 100644 --- a/backend/genesys/gl847.h +++ b/backend/genesys/gl847.h @@ -46,7 +46,7 @@ public: Genesys_Register_Set* reg, const ScanSession& session) const override; - void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t set) const override; + void set_fe(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t set) const override; void set_powersaving(Genesys_Device* dev, int delay) const override; void save_power(Genesys_Device* dev, bool enable) const override; @@ -80,7 +80,7 @@ public: void eject_document(Genesys_Device* dev) const override; - void send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, uint8_t* data, + void send_shading_data(Genesys_Device* dev, const Genesys_Sensor& sensor, std::uint8_t* data, int size) const override; ScanSession calculate_scan_session(const Genesys_Device* dev, diff --git a/backend/genesys/image.h b/backend/genesys/image.h index 07d3be3..80797ed 100644 --- a/backend/genesys/image.h +++ b/backend/genesys/image.h @@ -15,7 +15,7 @@ General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see .s + along with this program. If not, see . */ #ifndef BACKEND_GENESYS_IMAGE_H diff --git a/backend/genesys/image_pipeline.cpp b/backend/genesys/image_pipeline.cpp index f53680f..8dae0c5 100644 --- a/backend/genesys/image_pipeline.cpp +++ b/backend/genesys/image_pipeline.cpp @@ -173,7 +173,7 @@ ImagePipelineNodeDesegment::ImagePipelineNodeDesegment(ImagePipelineNode& source std::iota(segment_order_.begin(), segment_order_.end(), 0); } -bool ImagePipelineNodeDesegment::get_next_row_data(uint8_t* out_data) +bool ImagePipelineNodeDesegment::get_next_row_data(std::uint8_t* out_data) { bool got_data = true; diff --git a/backend/genesys/image_pixel.h b/backend/genesys/image_pixel.h index e414cfb..4f487ea 100644 --- a/backend/genesys/image_pixel.h +++ b/backend/genesys/image_pixel.h @@ -15,7 +15,7 @@ General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see .s + along with this program. If not, see . */ #ifndef BACKEND_GENESYS_IMAGE_PIXEL_H diff --git a/backend/genesys/low.cpp b/backend/genesys/low.cpp index a6da2c1..3ffc24a 100644 --- a/backend/genesys/low.cpp +++ b/backend/genesys/low.cpp @@ -106,7 +106,7 @@ unsigned sanei_genesys_get_bulk_max_size(AsicType asic_type) } // Set address for writing data -void sanei_genesys_set_buffer_address(Genesys_Device* dev, uint32_t addr) +void sanei_genesys_set_buffer_address(Genesys_Device* dev, std::uint32_t addr) { DBG_HELPER(dbg); @@ -356,12 +356,12 @@ void wait_until_has_valid_words(Genesys_Device* dev) } // Read data (e.g scanned image) from scan buffer -void sanei_genesys_read_data_from_scanner(Genesys_Device* dev, uint8_t* data, size_t size) +void sanei_genesys_read_data_from_scanner(Genesys_Device* dev, std::uint8_t* data, size_t size) { DBG_HELPER_ARGS(dbg, "size = %zu bytes", size); - if (size & 1) - DBG(DBG_info, "WARNING %s: odd number of bytes\n", __func__); + if (size & 1) + DBG(DBG_info, "WARNING %s: odd number of bytes\n", __func__); wait_until_has_valid_words(dev); @@ -565,7 +565,7 @@ void sanei_genesys_read_feed_steps(Genesys_Device* dev, unsigned int* steps) void sanei_genesys_set_lamp_power(Genesys_Device* dev, const Genesys_Sensor& sensor, Genesys_Register_Set& regs, bool set) { - static const uint8_t REG_0x03_LAMPPWR = 0x10; + static const std::uint8_t REG_0x03_LAMPPWR = 0x10; if (set) { regs.find_reg(0x03).value |= REG_0x03_LAMPPWR; @@ -606,7 +606,7 @@ void sanei_genesys_set_lamp_power(Genesys_Device* dev, const Genesys_Sensor& sen void sanei_genesys_set_motor_power(Genesys_Register_Set& regs, bool set) { - static const uint8_t REG_0x02_MTRPWR = 0x10; + static const std::uint8_t REG_0x02_MTRPWR = 0x10; if (set) { regs.find_reg(0x02).value |= REG_0x02_MTRPWR; @@ -635,13 +635,13 @@ bool should_enable_gamma(const ScanSession& session, const Genesys_Sensor& senso return true; } -std::vector get_gamma_table(Genesys_Device* dev, const Genesys_Sensor& sensor, - int color) +std::vector get_gamma_table(Genesys_Device* dev, const Genesys_Sensor& sensor, + int color) { if (!dev->gamma_override_tables[color].empty()) { return dev->gamma_override_tables[color]; } else { - std::vector ret; + std::vector ret; sanei_genesys_create_default_gamma_table(dev, ret, sensor.gamma[color]); return ret; } @@ -654,23 +654,38 @@ std::vector get_gamma_table(Genesys_Device* dev, const Genesys_Sensor& * @param bits number of bits used by gamma * @param max value for gamma * @param size of the gamma table - * @param gamma allocated gamma buffer to fill */ -void sanei_genesys_generate_gamma_buffer(Genesys_Device* dev, +std::vector generate_gamma_buffer(Genesys_Device* dev, const Genesys_Sensor& sensor, - int bits, - int max, - int size, - uint8_t* gamma) + int bits, int max, int size) { DBG_HELPER(dbg); - std::vector rgamma = get_gamma_table(dev, sensor, GENESYS_RED); - std::vector ggamma = get_gamma_table(dev, sensor, GENESYS_GREEN); - std::vector bgamma = get_gamma_table(dev, sensor, GENESYS_BLUE); + + // the gamma tables are 16 bits words and contain 3 channels + std::vector gamma_buf(size * 2 * 3); + + std::vector rgamma = get_gamma_table(dev, sensor, GENESYS_RED); + std::vector ggamma = get_gamma_table(dev, sensor, GENESYS_GREEN); + std::vector bgamma = get_gamma_table(dev, sensor, GENESYS_BLUE); + + auto get_gamma_value = [](const std::vector& array, + std::size_t index) -> std::uint16_t + { + if (index < array.size()) + return array[index]; + return 0xffff; + }; + + auto set_gamma_buf_value = [](std::vector& array, std::size_t pos, + std::uint16_t value) + { + array[pos * 2 + 0] = value & 0xff; + array[pos * 2 + 1] = (value >> 8) & 0xff; + }; if(dev->settings.contrast!=0 || dev->settings.brightness!=0) { - std::vector lut(65536); + std::vector lut(65536); sanei_genesys_load_lut(reinterpret_cast(lut.data()), bits, bits, @@ -680,39 +695,21 @@ void sanei_genesys_generate_gamma_buffer(Genesys_Device* dev, dev->settings.brightness); for (int i = 0; i < size; i++) { - uint16_t value=rgamma[i]; - value=lut[value]; - gamma[i * 2 + size * 0 + 0] = value & 0xff; - gamma[i * 2 + size * 0 + 1] = (value >> 8) & 0xff; - - value=ggamma[i]; - value=lut[value]; - gamma[i * 2 + size * 2 + 0] = value & 0xff; - gamma[i * 2 + size * 2 + 1] = (value >> 8) & 0xff; - - value=bgamma[i]; - value=lut[value]; - gamma[i * 2 + size * 4 + 0] = value & 0xff; - gamma[i * 2 + size * 4 + 1] = (value >> 8) & 0xff; + set_gamma_buf_value(gamma_buf, i + size * 0, lut[get_gamma_value(rgamma, i)]); + set_gamma_buf_value(gamma_buf, i + size * 1, lut[get_gamma_value(ggamma, i)]); + set_gamma_buf_value(gamma_buf, i + size * 2, lut[get_gamma_value(bgamma, i)]); } } else { for (int i = 0; i < size; i++) { - uint16_t value=rgamma[i]; - gamma[i * 2 + size * 0 + 0] = value & 0xff; - gamma[i * 2 + size * 0 + 1] = (value >> 8) & 0xff; - - value=ggamma[i]; - gamma[i * 2 + size * 2 + 0] = value & 0xff; - gamma[i * 2 + size * 2 + 1] = (value >> 8) & 0xff; - - value=bgamma[i]; - gamma[i * 2 + size * 4 + 0] = value & 0xff; - gamma[i * 2 + size * 4 + 1] = (value >> 8) & 0xff; + set_gamma_buf_value(gamma_buf, i + size * 0, get_gamma_value(rgamma, i)); + set_gamma_buf_value(gamma_buf, i + size * 1, get_gamma_value(ggamma, i)); + set_gamma_buf_value(gamma_buf, i + size * 2, get_gamma_value(bgamma, i)); } } + return gamma_buf; } @@ -730,15 +727,12 @@ void sanei_genesys_send_gamma_table(Genesys_Device* dev, const Genesys_Sensor& s size = 256 + 1; - /* allocate temporary gamma tables: 16 bits words, 3 channels */ - std::vector gamma(size * 2 * 3, 255); - - sanei_genesys_generate_gamma_buffer(dev, sensor, 16, 65535, size, gamma.data()); + auto gamma = generate_gamma_buffer(dev, sensor, 16, 65535, size); // loop sending gamma tables NOTE: 0x01000000 not 0x10000000 for (i = 0; i < 3; i++) { // clear corresponding GMM_N bit - uint8_t val = dev->interface->read_register(0xbd); + std::uint8_t val = dev->interface->read_register(0xbd); val &= ~(0x01 << i); dev->interface->write_register(0xbd, val); @@ -1410,7 +1404,7 @@ void sanei_genesys_asic_init(Genesys_Device* dev) { DBG_HELPER(dbg); - uint8_t val; + std::uint8_t val; bool cold = true; // URB 16 control 0xc0 0x0c 0x8e 0x0b len 1 read 0x00 */ @@ -1507,13 +1501,13 @@ void scanner_start_action(Genesys_Device& dev, bool start_motor) void sanei_genesys_set_dpihw(Genesys_Register_Set& regs, unsigned dpihw) { // same across GL646, GL841, GL843, GL846, GL847, GL124 - const uint8_t REG_0x05_DPIHW_MASK = 0xc0; - const uint8_t REG_0x05_DPIHW_600 = 0x00; - const uint8_t REG_0x05_DPIHW_1200 = 0x40; - const uint8_t REG_0x05_DPIHW_2400 = 0x80; - const uint8_t REG_0x05_DPIHW_4800 = 0xc0; + const std::uint8_t REG_0x05_DPIHW_MASK = 0xc0; + const std::uint8_t REG_0x05_DPIHW_600 = 0x00; + const std::uint8_t REG_0x05_DPIHW_1200 = 0x40; + const std::uint8_t REG_0x05_DPIHW_2400 = 0x80; + const std::uint8_t REG_0x05_DPIHW_4800 = 0xc0; - uint8_t dpihw_setting; + std::uint8_t dpihw_setting; switch (dpihw) { case 600: dpihw_setting = REG_0x05_DPIHW_600; @@ -1925,8 +1919,8 @@ void sanei_genesys_load_lut(unsigned char* lut, double shift, rise; int max_in_val = (1 << in_bits) - 1; int max_out_val = (1 << out_bits) - 1; - uint8_t *lut_p8 = lut; - uint16_t* lut_p16 = reinterpret_cast(lut); + std::uint8_t* lut_p8 = lut; + std::uint16_t* lut_p16 = reinterpret_cast(lut); /* slope is converted to rise per unit run: * first [-127,127] to [-.999,.999] diff --git a/backend/genesys/low.h b/backend/genesys/low.h index b0d23fe..1b96cc5 100644 --- a/backend/genesys/low.h +++ b/backend/genesys/low.h @@ -95,7 +95,11 @@ #define GENESYS_HAS_POWER_SW (1 << 6) /**< scanner has power button */ #define GENESYS_HAS_CALIBRATE (1 << 7) /**< scanner has 'calibrate' software button to start calibration */ #define GENESYS_HAS_EXTRA_SW (1 << 8) /**< scanner has extra function button */ -#define GENESYS_HAS_TRANSP_SW (1 << 9) /**< scanner has TRANSPARCY/SCAN_FILM button */ +#define GENESYS_HAS_TRANSP_SW (1 << 9) /**< scanner has TRANSPARENCY/SCAN_FILM button */ +#define GENESYS_HAS_PDF1_SW (1 << 10) /**< scanner has special PDF button 1 */ +#define GENESYS_HAS_PDF2_SW (1 << 11) /**< scanner has special PDF button 2 */ +#define GENESYS_HAS_PDF3_SW (1 << 12) /**< scanner has special PDF button 3 */ +#define GENESYS_HAS_PDF4_SW (1 << 13) /**< scanner has special PDF button 4 */ /* USB control message values */ #define REQUEST_TYPE_IN (USB_TYPE_VENDOR | USB_DIR_IN) @@ -203,8 +207,8 @@ void scanner_register_rw_set_bits(Genesys_Device& dev, std::uint16_t address, st void scanner_register_rw_bits(Genesys_Device& dev, std::uint16_t address, std::uint8_t value, std::uint8_t mask); -extern void sanei_genesys_write_ahb(Genesys_Device* dev, uint32_t addr, uint32_t size, - uint8_t* data); +void sanei_genesys_write_ahb(Genesys_Device* dev, std::uint32_t addr, std::uint32_t size, + std::uint8_t* data); extern void sanei_genesys_init_structs (Genesys_Device * dev); @@ -251,14 +255,14 @@ bool should_enable_gamma(const ScanSession& session, const Genesys_Sensor& senso i.e. the number written to REG_FWDSTEP. */ void sanei_genesys_calculate_zmod(bool two_table, - uint32_t exposure_time, - const std::vector& slope_table, + std::uint32_t exposure_time, + const std::vector& slope_table, unsigned acceleration_steps, unsigned move_steps, unsigned buffer_acceleration_steps, - uint32_t* out_z1, uint32_t* out_z2); + std::uint32_t* out_z1, std::uint32_t* out_z2); -extern void sanei_genesys_set_buffer_address(Genesys_Device* dev, uint32_t addr); +extern void sanei_genesys_set_buffer_address(Genesys_Device* dev, std::uint32_t addr); unsigned sanei_genesys_get_bulk_max_size(AsicType asic_type); @@ -266,10 +270,10 @@ SANE_Int sanei_genesys_exposure_time2(Genesys_Device* dev, const MotorProfile& p int endpixel, int led_exposure); void sanei_genesys_create_default_gamma_table(Genesys_Device* dev, - std::vector& gamma_table, float gamma); + std::vector& gamma_table, float gamma); -std::vector get_gamma_table(Genesys_Device* dev, const Genesys_Sensor& sensor, - int color); +std::vector get_gamma_table(Genesys_Device* dev, const Genesys_Sensor& sensor, + int color); void sanei_genesys_send_gamma_table(Genesys_Device* dev, const Genesys_Sensor& sensor); @@ -307,14 +311,14 @@ SensorExposure scanner_led_calibration(Genesys_Device& dev, const Genesys_Sensor void scanner_clear_scan_and_feed_counts(Genesys_Device& dev); void scanner_send_slope_table(Genesys_Device* dev, const Genesys_Sensor& sensor, unsigned table_nr, - const std::vector& slope_table); + const std::vector& slope_table); extern void sanei_genesys_write_file(const char* filename, const std::uint8_t* data, std::size_t length); void wait_until_buffer_non_empty(Genesys_Device* dev, bool check_status_twice = false); -extern void sanei_genesys_read_data_from_scanner(Genesys_Device* dev, uint8_t* data, size_t size); +void sanei_genesys_read_data_from_scanner(Genesys_Device* dev, std::uint8_t* data, size_t size); Image read_unshuffled_image_from_scanner(Genesys_Device* dev, const ScanSession& session, std::size_t total_bytes); @@ -392,12 +396,9 @@ extern void sanei_genesys_load_lut(unsigned char* lut, int out_min, int out_max, int slope, int offset); -extern void sanei_genesys_generate_gamma_buffer(Genesys_Device* dev, - const Genesys_Sensor& sensor, - int bits, - int max, - int size, - uint8_t* gamma); +std::vector generate_gamma_buffer(Genesys_Device* dev, + const Genesys_Sensor& sensor, + int bits, int max, int size); unsigned session_adjust_output_pixels(unsigned output_pixels, const Genesys_Device& dev, const Genesys_Sensor& sensor, diff --git a/backend/genesys/scanner_interface_usb.cpp b/backend/genesys/scanner_interface_usb.cpp index da8823b..542d4ff 100644 --- a/backend/genesys/scanner_interface_usb.cpp +++ b/backend/genesys/scanner_interface_usb.cpp @@ -126,8 +126,8 @@ void ScannerInterfaceUsb::write_registers(const Genesys_Register_Set& regs) if (dev_->model->asic_type == AsicType::GL646 || dev_->model->asic_type == AsicType::GL841) { - uint8_t outdata[8]; - std::vector buffer; + std::uint8_t outdata[8]; + std::vector buffer; buffer.reserve(regs.size() * 2); /* copy registers and values in data buffer */ @@ -185,7 +185,7 @@ static void bulk_read_data_send_header(UsbDevice& usb_dev, AsicType asic_type, s { DBG_HELPER(dbg); - uint8_t outdata[8]; + std::uint8_t outdata[8]; if (asic_type == AsicType::GL124 || asic_type == AsicType::GL845 || asic_type == AsicType::GL846 || diff --git a/backend/genesys/serialize.cpp b/backend/genesys/serialize.cpp deleted file mode 100644 index e69de29..0000000 diff --git a/backend/genesys/serialize.h b/backend/genesys/serialize.h index ed67ea3..5040ed0 100644 --- a/backend/genesys/serialize.h +++ b/backend/genesys/serialize.h @@ -15,7 +15,7 @@ General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see .s + along with this program. If not, see . */ #ifndef BACKEND_GENESYS_SERIALIZE_H diff --git a/backend/genesys/tables_model.cpp b/backend/genesys/tables_model.cpp index d139334..6d02db8 100644 --- a/backend/genesys/tables_model.cpp +++ b/backend/genesys/tables_model.cpp @@ -447,7 +447,9 @@ void genesys_init_usb_device_tables() ModelFlag::SHADING_REPARK | ModelFlag::UTA_NO_SECONDARY_MOTOR; - model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW; + model.buttons = GENESYS_HAS_TRANSP_SW | GENESYS_HAS_EMAIL_SW + | GENESYS_HAS_COPY_SW | GENESYS_HAS_PDF1_SW | GENESYS_HAS_PDF2_SW + | GENESYS_HAS_PDF3_SW | GENESYS_HAS_PDF4_SW; model.search_lines = 100; s_usb_devices->emplace_back(0x04a9, 0x2228, model); @@ -517,7 +519,7 @@ void genesys_init_usb_device_tables() ModelFlag::DARK_CALIBRATION | ModelFlag::CUSTOM_GAMMA | ModelFlag::SHADING_REPARK; - model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW; + model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW; model.search_lines = 100; s_usb_devices->emplace_back(0x04a9, 0x221e, model); @@ -927,7 +929,10 @@ void genesys_init_usb_device_tables() model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW | - GENESYS_HAS_FILE_SW; + GENESYS_HAS_PDF1_SW | + GENESYS_HAS_PDF2_SW | + GENESYS_HAS_PDF3_SW | + GENESYS_HAS_PDF4_SW; model.search_lines = 400; s_usb_devices->emplace_back(0x04a9, 0x1906, model); diff --git a/backend/genesys/test_scanner_interface.cpp b/backend/genesys/test_scanner_interface.cpp index 412176e..ef7cdbb 100644 --- a/backend/genesys/test_scanner_interface.cpp +++ b/backend/genesys/test_scanner_interface.cpp @@ -26,8 +26,8 @@ namespace genesys { -TestScannerInterface::TestScannerInterface(Genesys_Device* dev, uint16_t vendor_id, - uint16_t product_id, uint16_t bcd_device) : +TestScannerInterface::TestScannerInterface(Genesys_Device* dev, std::uint16_t vendor_id, + std::uint16_t product_id, std::uint16_t bcd_device) : dev_{dev}, usb_dev_{vendor_id, product_id, bcd_device} { diff --git a/backend/gt68xx_low.c b/backend/gt68xx_low.c index 5aa84ac..c83108b 100644 --- a/backend/gt68xx_low.c +++ b/backend/gt68xx_low.c @@ -425,7 +425,7 @@ gt68xx_device_memory_write (GT68xx_Device * dev, SANE_Status status; DBG (8, "gt68xx_device_memory_write: dev=%p, addr=0x%x, size=0x%x, data=%p\n", - (void *) dev, addr, size, data); + (void *) dev, addr, size, (void *) data); CHECK_DEV_ACTIVE (dev, "gt68xx_device_memory_write"); status = sanei_usb_control_msg (dev->fd, 0x40, @@ -448,7 +448,7 @@ gt68xx_device_memory_read (GT68xx_Device * dev, SANE_Status status; DBG (8, "gt68xx_device_memory_read: dev=%p, addr=0x%x, size=0x%x, data=%p\n", - (void *) dev, addr, size, data); + (void *) dev, addr, size, (void *) data); CHECK_DEV_ACTIVE (dev, "gt68xx_device_memory_read"); status = sanei_usb_control_msg (dev->fd, 0xc0, diff --git a/backend/hp.c b/backend/hp.c index 558a36d..ec43402 100644 --- a/backend/hp.c +++ b/backend/hp.c @@ -581,13 +581,9 @@ hp_get_dev (const char *devname, HpDevice* devp) DBG(3, "hp_get_dev: New device %s, connect-%s, scsi-request=%lu\n", devname, connect, (unsigned long)info->config.use_scsi_request); - if (!ptr) - { - status = sanei_hp_device_new (&new, devname); - - if ( status != SANE_STATUS_GOOD ) - return status; - } + status = sanei_hp_device_new (&new, devname); + if (status != SANE_STATUS_GOOD) + return status; if (devp) *devp = new; diff --git a/backend/hp3500.c b/backend/hp3500.c index bf07b36..acb09b6 100644 --- a/backend/hp3500.c +++ b/backend/hp3500.c @@ -265,7 +265,7 @@ static const SANE_Device **devlist = 0; SANE_Status sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) { - authorize = authorize; /* get rid of compiler warning */ + (void) authorize; /* get rid of compiler warning */ DBG_INIT (); DBG (10, "sane_init\n"); @@ -1117,7 +1117,7 @@ init_options (struct hp3500_data *scanner) static void do_reset (struct hp3500_data *scanner) { - scanner = scanner; /* kill warning */ + (void) scanner; /* kill warning */ } static void @@ -1530,8 +1530,6 @@ rt_get_available_bytes (void) static int rt_get_data (int bytes, void *data) { - int total = 0; - while (bytes) { int bytesnow = bytes; @@ -1542,7 +1540,6 @@ rt_get_data (int bytes, void *data) (RTCMD_READBYTES, 0, bytesnow, 0, 0, bytesnow, data) < 0 || rt_execute_commands () < 0) return -1; - total += bytesnow; bytes -= bytesnow; data = (char *) data + bytesnow; } @@ -2774,7 +2771,7 @@ rts8801_doscan (unsigned width, int result = 0; unsigned rows_supplied = 0; - calib_info = calib_info; /* Kill warning */ + (void) calib_info; /* Kill warning */ if (cancelled_scan) return -1; rt_start_moving (); @@ -3784,7 +3781,7 @@ writefunc (struct hp3500_write_info *winfo, int bytes, char *data) static void sigtermHandler (int signal) { - signal = signal; /* get rid of compiler warning */ + (void) signal; /* get rid of compiler warning */ cancelled_scan = 1; } #endif diff --git a/backend/hp3900_config.c b/backend/hp3900_config.c index daeb583..c40920f 100644 --- a/backend/hp3900_config.c +++ b/backend/hp3900_config.c @@ -1523,19 +1523,16 @@ static SANE_Int hp3800_checkstable(SANE_Int lamp, struct st_checkstable *check) SANE_Int rst = ERROR; - if (reg != NULL) - { - SANE_Int a; - SANE_Int count = sizeof(reg) / sizeof(struct st_reg); + SANE_Int a; + SANE_Int count = sizeof(reg) / sizeof(struct st_reg); - for (a = 0; a < count; a++) + for (a = 0; a < count; a++) + { + if (reg[a].lamp == lamp) { - if (reg[a].lamp == lamp) - { - memcpy(check, ®[a].values, sizeof(struct st_checkstable)); - rst = OK; - break; - } + memcpy(check, ®[a].values, sizeof(struct st_checkstable)); + rst = OK; + break; } } @@ -1560,19 +1557,16 @@ static SANE_Int hp3970_checkstable(SANE_Int lamp, struct st_checkstable *check) SANE_Int rst = ERROR; - if (reg != NULL) - { - SANE_Int a; - SANE_Int count = sizeof(reg) / sizeof(struct st_reg); + SANE_Int a; + SANE_Int count = sizeof(reg) / sizeof(struct st_reg); - for (a = 0; a < count; a++) + for (a = 0; a < count; a++) + { + if (reg[a].lamp == lamp) { - if (reg[a].lamp == lamp) - { - memcpy(check, ®[a].values, sizeof(struct st_checkstable)); - rst = OK; - break; - } + memcpy(check, ®[a].values, sizeof(struct st_checkstable)); + rst = OK; + break; } } @@ -1597,19 +1591,16 @@ static SANE_Int hp4370_checkstable(SANE_Int lamp, struct st_checkstable *check) SANE_Int rst = ERROR; - if (reg != NULL) - { - SANE_Int a; - SANE_Int count = sizeof(reg) / sizeof(struct st_reg); + SANE_Int a; + SANE_Int count = sizeof(reg) / sizeof(struct st_reg); - for (a = 0; a < count; a++) + for (a = 0; a < count; a++) + { + if (reg[a].lamp == lamp) { - if (reg[a].lamp == lamp) - { - memcpy(check, ®[a].values, sizeof(struct st_checkstable)); - rst = OK; - break; - } + memcpy(check, ®[a].values, sizeof(struct st_checkstable)); + rst = OK; + break; } } @@ -1634,19 +1625,16 @@ static SANE_Int ua4900_checkstable(SANE_Int lamp, struct st_checkstable *check) SANE_Int rst = ERROR; - if (reg != NULL) - { - SANE_Int a; - SANE_Int count = sizeof(reg) / sizeof(struct st_reg); + SANE_Int a; + SANE_Int count = sizeof(reg) / sizeof(struct st_reg); - for (a = 0; a < count; a++) + for (a = 0; a < count; a++) + { + if (reg[a].lamp == lamp) { - if (reg[a].lamp == lamp) - { - memcpy(check, ®[a].values, sizeof(struct st_checkstable)); - rst = OK; - break; - } + memcpy(check, ®[a].values, sizeof(struct st_checkstable)); + rst = OK; + break; } } @@ -2719,7 +2707,7 @@ static SANE_Int bq5550_scanmodes(SANE_Int usb, SANE_Int sm, struct st_scanmode * SANE_Int rst = ERROR; /* silence compiler */ - usb = usb; + (void) usb; if (mymode != NULL) { diff --git a/backend/hp3900_debug.c b/backend/hp3900_debug.c index 25254db..881f400 100644 --- a/backend/hp3900_debug.c +++ b/backend/hp3900_debug.c @@ -600,15 +600,15 @@ dbg_tiff_save (char *sFile, SANE_Int width, SANE_Int height, SANE_Int depth, } #else /* silent gcc */ - sFile = sFile; - width = width; - height = height; - depth = depth; - colortype = colortype; - res_x = res_x; - res_y = res_y; - buffer = buffer; - size = size; + (void) sFile; + (void) width; + (void) height; + (void) depth; + (void) colortype; + (void) res_x; + (void) res_y; + (void) buffer; + (void) size; DBG (DBG_ERR, "- dbg_tiff_save: tiffio not supported\n"); #endif diff --git a/backend/hp3900_rts8822.c b/backend/hp3900_rts8822.c index c818b89..f74d586 100644 --- a/backend/hp3900_rts8822.c +++ b/backend/hp3900_rts8822.c @@ -4856,8 +4856,8 @@ Refs_Analyze_Pattern (struct st_scanparams *scancfg, { /*d4df */ diff_max = color_dif[cnt]; - if (abs (color_dif[cnt] - color_dif[cnt - 1]) > - abs (color_dif[coord] - color_dif[coord - 1])) + if (fabs (color_dif[cnt] - color_dif[cnt - 1]) > + fabs (color_dif[coord] - color_dif[coord - 1])) coord = cnt; } @@ -4907,8 +4907,8 @@ Refs_Analyze_Pattern (struct st_scanparams *scancfg, if ((color_dif[cnt] >= 0) && (color_dif[cnt] > diff_max)) { diff_max = color_dif[cnt]; - if (abs (color_dif[cnt] - color_dif[cnt - 1]) > - abs (color_dif[coord] - color_dif[coord - 1])) + if (fabs (color_dif[cnt] - color_dif[cnt - 1]) > + fabs (color_dif[coord] - color_dif[coord - 1])) coord = cnt; } @@ -4954,8 +4954,8 @@ Refs_Analyze_Pattern (struct st_scanparams *scancfg, if ((color_dif[cnt] >= 0) && (color_dif[cnt] > diff_max)) { diff_max = color_dif[cnt]; - if (abs (color_dif[cnt] - color_dif[cnt - 1]) > - abs (color_dif[coord] - color_dif[coord - 1])) + if (fabs (color_dif[cnt] - color_dif[cnt - 1]) > + fabs (color_dif[coord] - color_dif[coord - 1])) coord = cnt; } @@ -7703,7 +7703,7 @@ Scan_Read_BufferA (struct st_device *dev, SANE_Int buffer_size, SANE_Int arg2, "+ Scan_Read_BufferA(buffer_size=%i, arg2, *pBuffer, *bytes_transferred):\n", buffer_size); - arg2 = arg2; /* silence gcc */ + (void) arg2; /* silence gcc */ *bytes_transferred = 0; if (pBuffer != NULL) @@ -11364,7 +11364,7 @@ Calib_CreateBuffers (struct st_device *dev, struct st_calibration *buffer, SANE_Int ebp, ret, channel; ret = ERROR; - dev = dev; + (void) dev; buffer->shadinglength = scan.coord.width; ebp = 0x14; @@ -12602,9 +12602,9 @@ Calib_BWShading (struct st_calibration_config *calibcfg, /*falta codigo */ /*silence gcc */ - calibcfg = calibcfg; - myCalib = myCalib; - gainmode = gainmode; + (void) calibcfg; + (void) myCalib; + (void) gainmode; return OK; } @@ -13624,7 +13624,7 @@ Calibration (struct st_device *dev, SANE_Byte * Regs, DBG (DBG_FNC, "> Calibration\n"); dbg_ScanParams (scancfg); - value = value; /*silence gcc */ + (void) value; /*silence gcc */ memcpy (&calibdata->Regs, Regs, sizeof (SANE_Byte) * RT_BUFFER_LEN); diff --git a/backend/hp3900_sane.c b/backend/hp3900_sane.c index eae99e0..5face5e 100644 --- a/backend/hp3900_sane.c +++ b/backend/hp3900_sane.c @@ -380,7 +380,7 @@ bknd_colormodes (TScanner * scanner, SANE_Int model) { SANE_VALUE_SCAN_MODE_COLOR, SANE_VALUE_SCAN_MODE_GRAY, SANE_VALUE_SCAN_MODE_LINEART, 0 }; /* silence gcc */ - model = model; + (void) model; colormode = (SANE_String_Const *) malloc (sizeof (mycolormode)); if (colormode != NULL) @@ -460,7 +460,7 @@ bknd_depths (TScanner * scanner, SANE_Int model) SANE_Int mydepth[] = { 2, 8, 16 }; /*{3, 8, 12, 16}; */ /* silence gcc */ - model = model; + (void) model; depth = (SANE_Int *) malloc (sizeof (mydepth)); if (depth != NULL) @@ -1760,7 +1760,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) DBG (DBG_FNC, "> sane_init\n"); /* silence gcc */ - authorize = authorize; + (void) authorize; /* Initialize usb */ sanei_usb_init (); @@ -1816,7 +1816,7 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only) { SANE_Status rst = SANE_STATUS_GOOD; - local_only = local_only; + (void) local_only; if (_pSaneDevList) free (_pSaneDevList); @@ -2654,7 +2654,7 @@ sane_cancel (SANE_Handle h) DBG (DBG_FNC, "> sane_cancel\n"); /* silence gcc */ - h = h; + (void) h; device->status->cancel = TRUE; } @@ -2665,8 +2665,8 @@ sane_set_io_mode (SANE_Handle handle, SANE_Bool non_blocking) DBG (DBG_FNC, "> sane_set_io_mode\n"); /* silence gcc */ - handle = handle; - non_blocking = non_blocking; + (void) handle; + (void) non_blocking; return SANE_STATUS_UNSUPPORTED; } @@ -2677,8 +2677,8 @@ sane_get_select_fd (SANE_Handle handle, SANE_Int * fd) DBG (DBG_FNC, "> sane_get_select_fd\n"); /* silence gcc */ - handle = handle; - fd = fd; + (void) handle; + (void) fd; return SANE_STATUS_UNSUPPORTED; } diff --git a/backend/hp4200.c b/backend/hp4200.c index 5b21b47..e4e885e 100644 --- a/backend/hp4200.c +++ b/backend/hp4200.c @@ -512,7 +512,7 @@ read_available_data (HP4200_Scanner * s, SANE_Byte * buffer, buffer += really_read; to_read -= really_read; #ifdef DEBUG - fprintf (stderr, "read %d bytes\n", really_read); + fprintf (stderr, "read %zu bytes\n", really_read); #endif } return SANE_STATUS_GOOD; @@ -941,7 +941,6 @@ compute_dpd (HP4200_Scanner * s, int step_size, int line_end) static SANE_Status read_required_bytes (HP4200_Scanner * s, int required, SANE_Byte * buffer) { - int read_count = 0; unsigned char scankb1; unsigned char scankb2; size_t to_read; @@ -987,7 +986,6 @@ read_required_bytes (HP4200_Scanner * s, int required, SANE_Byte * buffer) buffer += really_read; required -= really_read; to_read -= really_read; - read_count += really_read; } } @@ -2369,7 +2367,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) char dev_name[PATH_MAX]; FILE *fp; - authorize = authorize; /* keep gcc quiet */ + (void) authorize; /* keep gcc quiet */ DBG_INIT (); @@ -2939,7 +2937,7 @@ sane_set_io_mode (SANE_Handle handle, SANE_Bool non_blocking) HP4200_Scanner *dev = handle; SANE_Status status; - non_blocking = non_blocking; /* silence gcc */ + (void) non_blocking; /* silence gcc */ if (dev->scanning == SANE_FALSE) { @@ -2965,8 +2963,8 @@ sane_get_select_fd (SANE_Handle h, SANE_Int * fd) { static char me[] = "sane_get_select_fd"; - h = h; /* keep gcc quiet */ - fd = fd; /* keep gcc quiet */ + (void) h; /* keep gcc quiet */ + (void) fd; /* keep gcc quiet */ DBG (DBG_proc, "%s\n", me); return SANE_STATUS_UNSUPPORTED; diff --git a/backend/hp5400_internal.c b/backend/hp5400_internal.c index 322359a..95866c4 100644 --- a/backend/hp5400_internal.c +++ b/backend/hp5400_internal.c @@ -483,7 +483,7 @@ void CircBufferInit (int iHandle, TDataPipe * p, int iBytesPerLine, int bpp, int iMisAlignment, int blksize, int iTransferSize) { - iHandle = iHandle; /* to avoid compilation warning */ + (void) iHandle; /* to avoid compilation warning */ p->buffersize = max (BUFFER_SIZE, 3 * blksize); if (p->buffer) @@ -746,7 +746,7 @@ HP5400_SANE_STATIC int hp5400_test_scan_response (struct ScanResponse *resp, struct ScanRequest *req) { - req = req; /* to avoid compilation warning */ + (void) req; /* to avoid compilation warning */ HP5400_DBG (DBG_MSG, "Scan response:\n"); HP5400_DBG (DBG_MSG, " transfersize=%d htonl-> %d\n", resp->transfersize, htonl (resp->transfersize)); @@ -828,7 +828,7 @@ DoScan (int iHandle, struct ScanRequest *req, const char *filename, int code, /* int bpp, planes; */ int i; - code = code; /*to avoid compilation warning*/ + (void) code; /*to avoid compilation warning*/ if (res == NULL) res = &res_temp; @@ -1011,7 +1011,7 @@ hp5400_scan (int iHandle, TScanParams * params, THWParams * pHWParams, struct ScanResponse res; int result; - pHWParams = pHWParams; /*to avoid compilation warning*/ + (void) pHWParams; /*to avoid compilation warning*/ HP5400_DBG (DBG_MSG, "\n"); HP5400_DBG (DBG_MSG, "Scanning :\n"); diff --git a/backend/hp5400_sane.c b/backend/hp5400_sane.c index 5043dad..5e716a2 100644 --- a/backend/hp5400_sane.c +++ b/backend/hp5400_sane.c @@ -611,7 +611,7 @@ sane_init (SANE_Int * piVersion, SANE_Auth_Callback pfnAuth) int nline = 0; /* prevent compiler from complaining about unused parameters */ - pfnAuth = pfnAuth; + (void) pfnAuth; strcpy(usb_devfile, "/dev/usb/scanner0"); _pFirstSaneDev = 0; @@ -712,7 +712,7 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only) HP5400_DBG (DBG_MSG, "sane_get_devices\n"); - local_only = local_only; + (void) local_only; if (_pSaneDevList) { @@ -1333,7 +1333,7 @@ sane_set_io_mode (SANE_Handle h, SANE_Bool m) HP5400_DBG (DBG_MSG, "sane_set_io_mode %s\n", m ? "non-blocking" : "blocking"); /* prevent compiler from complaining about unused parameters */ - h = h; + (void) h; if (m) { @@ -1349,8 +1349,8 @@ sane_get_select_fd (SANE_Handle h, SANE_Int * fd) HP5400_DBG (DBG_MSG, "sane_select_fd\n"); /* prevent compiler from complaining about unused parameters */ - h = h; - fd = fd; + (void) h; + (void) fd; return SANE_STATUS_UNSUPPORTED; } diff --git a/backend/hp5590_low.c b/backend/hp5590_low.c index 29e2136..2d19dcf 100644 --- a/backend/hp5590_low.c +++ b/backend/hp5590_low.c @@ -796,8 +796,9 @@ hp5590_bulk_read (SANE_Int dn, DBG (DBG_err, "%s: USB-in-USB: attempted to access over the end of buffer " "(in_ptr: %p, end_ptr: %p, ptr: %p, buffer size: %u\n", - __func__, bulk_read_state->buffer_in_ptr, - bulk_read_state->buffer_end_ptr, bulk_read_state->buffer, + __func__, (void *) bulk_read_state->buffer_in_ptr, + (void *) bulk_read_state->buffer_end_ptr, + (void *) bulk_read_state->buffer, bulk_read_state->buffer_size); return SANE_STATUS_NO_MEM; } diff --git a/backend/hs2p.c b/backend/hs2p.c index 76f4b96..b2c6d76 100644 --- a/backend/hs2p.c +++ b/backend/hs2p.c @@ -3125,7 +3125,7 @@ sane_start (SANE_Handle handle) /* begin scanning */ sane_strstatus (status)); return (status); } - if ((s->data.adf_status & 0x00) == 0x01) + if ((s->data.adf_status & 0x01) == 0x01) { DBG (DBG_warning, "sane_start: No document on ADF\n"); return (SANE_STATUS_NO_DOCS); @@ -3322,8 +3322,8 @@ sane_get_select_fd (SANE_Handle handle, SANE_Int * fd) *fd = s->fd; return SANE_STATUS_GOOD; #else - handle = handle; - fd = fd; /* get rid of compiler warning */ + (void) handle; + (void) fd; /* get rid of compiler warning */ DBG (DBG_proc, "<< sane_get_select_fd\n"); return SANE_STATUS_UNSUPPORTED; #endif diff --git a/backend/ibm.c b/backend/ibm.c index 688cdfb..ab5fbc9 100644 --- a/backend/ibm.c +++ b/backend/ibm.c @@ -568,7 +568,8 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) continue; /* ignore empty lines */ /* skip white space: */ - for (lp = line; isspace(*lp); ++lp); + for (lp = line; isspace(*lp); ++lp) + ; strcpy (devnam, lp); } fclose (fp); diff --git a/backend/kodak-cmd.h b/backend/kodak-cmd.h index 7d5d506..17e353c 100644 --- a/backend/kodak-cmd.h +++ b/backend/kodak-cmd.h @@ -133,10 +133,14 @@ putnbyte (unsigned char *pnt, unsigned int value, unsigned int nbytes) #define get_I_cmdque(in) getbitfield(in + 7, 1, 1) #define get_I_sftre(in) getbitfield(in + 7, 0, 1) -#define get_I_vendor(in, buf) strncpy(buf,(char *)in + 0x08, 0x08) -#define get_I_product(in, buf) strncpy(buf,(char *)in + 0x10, 0x10) -#define get_I_version(in, buf) strncpy(buf,(char *)in + 0x20, 0x04) -#define get_I_build(in, buf) strncpy(buf,(char *)in + 0x24, 0x02) +#define get_I_vendor(in, buf) snprintf(buf, 0x08 + 1, "%.*s", \ + 0x08, (char *)in + 0x08) +#define get_I_product(in, buf) snprintf(buf, 0x10 + 1, "%.*s", \ + 0x10, (char *)in + 0x10) +#define get_I_version(in, buf) snprintf(buf, 0x04 + 1, "%.*s", \ + 0x04, (char *)in + 0x20) +#define get_I_build(in, buf) snprintf(buf, 0x02 + 1, "%.*s", \ + 0x02, (char *)in + 0x24) #define get_I_mf_disable(in) getbitfield(in + 38, 7, 1) #define get_I_checkdigit(in) getbitfield(in + 38, 6, 1) diff --git a/backend/kodak.c b/backend/kodak.c index c41f088..b46ab2e 100644 --- a/backend/kodak.c +++ b/backend/kodak.c @@ -175,7 +175,7 @@ static struct scanner *scanner_devList = NULL; SANE_Status sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) { - authorize = authorize; /* get rid of compiler warning */ + (void) authorize; /* get rid of compiler warning */ DBG_INIT (); DBG (10, "sane_init: start\n"); @@ -225,7 +225,7 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only) int num_devices=0; int i=0; - local_only = local_only; /* get rid of compiler warning */ + (void) local_only; /* get rid of compiler warning */ DBG (10, "sane_get_devices: start\n"); @@ -2550,7 +2550,7 @@ sense_handler (int fd, unsigned char * sensed_data, void *arg) DBG (5, "sense_handler: start\n"); /* kill compiler warning */ - fd = fd; + (void) fd; /* save for later */ s->rs_info = get_RS_information (sensed_data); @@ -2754,8 +2754,8 @@ do_cmd(struct scanner *s, int runRS, int shortTime, SANE_Status ret = SANE_STATUS_GOOD; /*shut up compiler*/ - runRS=runRS; - shortTime=shortTime; + (void) runRS; + (void) shortTime; DBG(10, "do_cmd: start\n"); diff --git a/backend/kodakaio.c b/backend/kodakaio.c index fe83e27..0241e2a 100644 --- a/backend/kodakaio.c +++ b/backend/kodakaio.c @@ -716,7 +716,6 @@ That is probably if the scanner disconnected the network connection /* pollreply is -ve */ DBG(1, "net poll error\n"); *status = SANE_STATUS_IO_ERROR; - return read; } else if((fds[0].revents & POLLIN) && !(fds[0].revents & (POLLERR | POLLHUP | POLLNVAL))) { while (read < wanted) { @@ -733,12 +732,11 @@ That is probably if the scanner disconnected the network connection *status = SANE_STATUS_IO_ERROR; DBG(32, "net read %lu bytes:%x,%x,%x,%x,%x,%x,%x,%x\n",(unsigned long)read,buf[0],buf[1],buf[2],buf[3],buf[4],buf[5],buf[6],buf[7]); - - return read; } else DBG(1, "Unknown problem with poll\n"); - return read; + + return read; } @@ -2046,7 +2044,7 @@ open_scanner(KodakAio_Scanner *s) unsigned int model = 0; if (!split_scanner_name (s->hw->sane.name, IP, &model)) return SANE_STATUS_INVAL; - DBG(10, "split_scanner_name OK model=0x%x\n",model); + DBG(10, "split_scanner_name OK model=0x%x\n",model); /* normal with IP */ status = sanei_tcp_open(IP, 9101, &s->fd); /* (host,port,file pointer) */ diff --git a/backend/kvs1025.c b/backend/kvs1025.c index 9d53690..9c8b56f 100644 --- a/backend/kvs1025.c +++ b/backend/kvs1025.c @@ -442,15 +442,15 @@ sane_cancel (SANE_Handle handle) SANE_Status sane_set_io_mode (SANE_Handle h, SANE_Bool m) { - h=h; - m=m; + (void) h; + (void) m; return SANE_STATUS_UNSUPPORTED; } SANE_Status sane_get_select_fd (SANE_Handle h, SANE_Int * fd) { - h=h; - fd=fd; + (void) h; + (void) fd; return SANE_STATUS_UNSUPPORTED; } diff --git a/backend/kvs20xx_opt.c b/backend/kvs20xx_opt.c index 3e82764..229bf85 100644 --- a/backend/kvs20xx_opt.c +++ b/backend/kvs20xx_opt.c @@ -673,11 +673,6 @@ mm2scanner_units (unsigned mm) { return mm * 12000 / 254; } -static inline unsigned -scanner_units2mm (unsigned u) -{ - return u * 254 / 12000; -} void kvs20xx_init_window (struct scanner *s, struct window *wnd, int wnd_id) diff --git a/backend/kvs40xx.c b/backend/kvs40xx.c index 230bdc2..fd3cfe0 100644 --- a/backend/kvs40xx.c +++ b/backend/kvs40xx.c @@ -118,11 +118,6 @@ static inline void buf_set_st(struct buf *b, SANE_Status st) pthread_mutex_unlock(&b->mu); } -static inline void buf_cancel(struct buf *b) -{ - buf_set_st(b, SANE_STATUS_CANCELLED); -} - static inline void push_buf(struct buf *b, SANE_Int sz) { pthread_mutex_lock(&b->mu); @@ -547,10 +542,10 @@ static void * read_data (void *arg) sane_get_parameters(s, NULL); s->page++; - return SANE_STATUS_GOOD; + return NULL; err: s->scanning = 0; - return (void *) st; + return NULL; } /* Start scanning */ diff --git a/backend/kvs40xx_opt.c b/backend/kvs40xx_opt.c index 8c37711..2d8d870 100644 --- a/backend/kvs40xx_opt.c +++ b/backend/kvs40xx_opt.c @@ -29,11 +29,6 @@ mm2scanner_units (unsigned mm) { return (mm * 12000 / 254.0 + .5); } -static inline unsigned -scanner_units2mm (unsigned u) -{ - return (u * 254.0 / 12000 + .5); -} struct restriction { unsigned ux, uy, ux_pix, uy_pix; diff --git a/backend/lexmark_low.c b/backend/lexmark_low.c index 052ae4d..246455f 100644 --- a/backend/lexmark_low.c +++ b/backend/lexmark_low.c @@ -4994,14 +4994,14 @@ sanei_lexmark_low_read_scan_data (SANE_Byte * data, SANE_Int size, DBG (2, " Filled a buffer from the scanner\n"); DBG (2, " bytes_remaining: %lu\n", (u_long) dev->bytes_remaining); DBG (2, " bytes_in_buffer: %lu\n", (u_long) dev->bytes_in_buffer); - DBG (2, " read_pointer: %p\n", dev->read_pointer); + DBG (2, " read_pointer: %p\n", (void *) dev->read_pointer); } } DBG (5, "READ BUFFER INFO: \n"); - DBG (5, " write ptr: %p\n", dev->read_buffer->writeptr); - DBG (5, " read ptr: %p\n", dev->read_buffer->readptr); - DBG (5, " max write ptr: %p\n", dev->read_buffer->max_writeptr); + DBG (5, " write ptr: %p\n", (void *) dev->read_buffer->writeptr); + DBG (5, " read ptr: %p\n", (void *) dev->read_buffer->readptr); + DBG (5, " max write ptr: %p\n", (void *) dev->read_buffer->max_writeptr); DBG (5, " buffer size: %lu\n", (u_long) dev->read_buffer->size); DBG (5, " line size: %lu\n", (u_long) dev->read_buffer->linesize); DBG (5, " empty: %d\n", dev->read_buffer->empty); @@ -5059,9 +5059,9 @@ sanei_lexmark_low_read_scan_data (SANE_Byte * data, SANE_Int size, } DBG (5, "READ BUFFER INFO: \n"); - DBG (5, " write ptr: %p\n", dev->read_buffer->writeptr); - DBG (5, " read ptr: %p\n", dev->read_buffer->readptr); - DBG (5, " max write ptr: %p\n", dev->read_buffer->max_writeptr); + DBG (5, " write ptr: %p\n", (void *) dev->read_buffer->writeptr); + DBG (5, " read ptr: %p\n", (void *) dev->read_buffer->readptr); + DBG (5, " max write ptr: %p\n", (void *) dev->read_buffer->max_writeptr); DBG (5, " buffer size: %lu\n", (u_long) dev->read_buffer->size); DBG (5, " line size: %lu\n", (u_long) dev->read_buffer->linesize); DBG (5, " empty: %d\n", dev->read_buffer->empty); @@ -5074,7 +5074,7 @@ sanei_lexmark_low_read_scan_data (SANE_Byte * data, SANE_Int size, DBG (2, " Copying lines from buffer to data\n"); DBG (2, " bytes_remaining: %lu\n", (u_long) dev->bytes_remaining); DBG (2, " bytes_in_buffer: %lu\n", (u_long) dev->bytes_in_buffer); - DBG (2, " read_pointer: %p\n", dev->read_buffer->readptr); + DBG (2, " read_pointer: %p\n", (void *) dev->read_buffer->readptr); DBG (2, " bytes_read %lu\n", (u_long) bytes_read); /* if no more bytes to xfer and read buffer empty we're at the end */ @@ -5252,12 +5252,12 @@ read_buffer_bytes_available (Read_Buffer * rb) if (rb->empty) return rb->size; - else if ((size_t) abs (rb->writeptr - rb->readptr) < rb->linesize) - return 0; /* ptrs are less than one line apart */ else if (rb->writeptr < rb->readptr) - return (rb->readptr - rb->writeptr - rb->linesize); + return (size_t)(rb->readptr - rb->writeptr) < rb->linesize ? 0 : + (size_t)(rb->readptr - rb->writeptr) - rb->linesize; else - return (rb->size + rb->readptr - rb->writeptr - rb->linesize); + return (size_t)(rb->writeptr - rb->readptr) < rb->linesize ? 0 : + rb->size - (size_t)(rb->writeptr - rb->readptr) - rb->linesize; } SANE_Status diff --git a/backend/ma1509.c b/backend/ma1509.c index 5966a17..f42541f 100644 --- a/backend/ma1509.c +++ b/backend/ma1509.c @@ -161,7 +161,7 @@ ma1509_cmd (Ma1509_Scanner * s, const SANE_Byte * cmd, SANE_Byte * data, #define MA1509_READ_LIMIT (1024 * 256) DBG (5, "ma1509_cmd: fd=%d, cmd=%p, data=%p, data_size=%ld\n", - s->fd, cmd, data, (long int) (data_size ? *data_size : 0)); + s->fd, (void *) cmd, (void *) data, (long int) (data_size ? *data_size : 0)); DBG (5, "ma1509_cmd: cmd = %02x %02x %02x %02x %02x %02x %02x %02x \n", cmd[0], cmd[1], cmd[2], cmd[3], cmd[4], cmd[5], cmd[6], cmd[7]); diff --git a/backend/magicolor.c b/backend/magicolor.c index 8fc6d31..5278937 100644 --- a/backend/magicolor.c +++ b/backend/magicolor.c @@ -3001,7 +3001,7 @@ sane_read(SANE_Handle handle, SANE_Byte *data, SANE_Int max_length, } DBG(18, "moving data %p %p, %d (%d lines)\n", - s->ptr, s->end, + (void *) s->ptr, (void *) s->end, max_length, max_length / s->params.bytes_per_line); mc_copy_image_data(s, data, max_length, length); diff --git a/backend/microtek.c b/backend/microtek.c index 17f3151..d9b0a6b 100644 --- a/backend/microtek.c +++ b/backend/microtek.c @@ -1502,14 +1502,10 @@ parse_inquiry(Microtek_Info *mi, unsigned char *result) }; #endif DBG(15, "parse_inquiry...\n"); - strncpy(mi->vendor_id, (char *)&result[8], 8); - strncpy(mi->model_name, (char *)&result[16], 16); - strncpy(mi->revision_num, (char *)&result[32], 4); - strncpy(mi->vendor_string, (char *)&result[36], 20); - mi->vendor_id[8] = 0; - mi->model_name[16] = 0; - mi->revision_num[4] = 0; - mi->vendor_string[20] = 0; + snprintf(mi->vendor_id, 8 + 1, "%.*s", 8, (char *)&result[8]); + snprintf(mi->model_name, 16 + 1, "%.*s", 16, (char *)&result[16]); + snprintf(mi->revision_num, 4 + 1, "%.*s", 4, (char *)&result[32]); + snprintf(mi->vendor_string, 20 + 1, "%.*s", 20, (char *)&result[36]); mi->device_type = (SANE_Byte)(result[0] & 0x1f); mi->SCSI_firmware_ver_major = (SANE_Byte)((result[1] & 0xf0) >> 4); @@ -1925,7 +1921,7 @@ static SANE_Status dump_suspect_inquiry(unsigned char *result) { int i; - char vendor_id[64], model_name[64], revision_num[16]; + char vendor_id[9], model_name[17], revision_num[5]; SANE_Byte device_type, model_code; SANE_Byte SCSI_firmware_ver_major, SCSI_firmware_ver_minor; SANE_Byte scanner_firmware_ver_major, scanner_firmware_ver_minor; @@ -1947,12 +1943,9 @@ dump_suspect_inquiry(unsigned char *result) } fprintf(stderr, "\n\n"); #endif - strncpy(vendor_id, (char *)&result[8], 8); - strncpy(model_name, (char *)&result[16], 16); - strncpy(revision_num, (char *)&result[32], 4); - vendor_id[8] = 0; - model_name[16] = 0; - revision_num[5] = 0; + snprintf(vendor_id, 8 + 1, "%.*s", 8, (char *)&result[8]); + snprintf(model_name, 16 + 1, "%.*s", 16, (char *)&result[16]); + snprintf(revision_num, 4 + 1, "%.*s", 4, (char *)&result[32]); device_type = (SANE_Byte)(result[0] & 0x1f); SCSI_firmware_ver_major = (SANE_Byte)((result[1] & 0xf0) >> 4); SCSI_firmware_ver_minor = (SANE_Byte)(result[1] & 0x0f); @@ -2356,7 +2349,8 @@ static SANE_Status do_real_calibrate(Microtek_Scanner *s) input = calloc(STRIPS * 3 * linewidth, sizeof(input[0])); combuff = calloc(linewidth + 6, sizeof(combuff[0])); if ((input == NULL) || (combuff == NULL)) { - DBG(23, "do_real_cal: bad calloc %p %p\n", input, combuff); + DBG(23, "do_real_cal: bad calloc %p %p\n", + (void *) input, (void *) combuff); free(input); free(combuff); return SANE_STATUS_NO_MEM; @@ -2370,7 +2364,7 @@ static SANE_Status do_real_calibrate(Microtek_Scanner *s) ntoget = (nleft > nmax) ? nmax : nleft; buffsize = ntoget * 3 * linewidth; DBG(23, "...nleft %d toget %d size %lu spot %d input+spot %p\n", - nleft, ntoget, (u_long) buffsize, spot, input+spot); + nleft, ntoget, (u_long) buffsize, spot, (void *) (input+spot)); if ((statusA = read_scan_data(s, ntoget, input+spot, &buffsize)) != SANE_STATUS_GOOD) { DBG(23, "...read scan failed\n"); @@ -3060,7 +3054,7 @@ sane_init(SANE_Int *version_code, SANE_Auth_Callback authorize) size_t len; FILE *fp; - authorize = authorize; + (void) authorize; DBG_INIT(); DBG(1, "sane_init: MICROTEK says hello! (v%d.%d.%d)\n", MICROTEK_MAJOR, MICROTEK_MINOR, MICROTEK_PATCH); @@ -3111,7 +3105,7 @@ sane_get_devices(const SANE_Device ***device_list, Microtek_Device *dev; int i; - local_only = local_only; + (void) local_only; DBG(10, "sane_get_devices\n"); /* we keep an internal copy */ if (devlist) @@ -4166,7 +4160,7 @@ SANE_Status sane_set_io_mode (SANE_Handle handle, SANE_Bool non_blocking) { DBG(10, "sane_set_io_mode...\n"); - handle = handle; + (void) handle; if (non_blocking) return SANE_STATUS_UNSUPPORTED; else @@ -4182,6 +4176,6 @@ SANE_Status sane_get_select_fd (SANE_Handle handle, SANE_Int * fd) { DBG(10, "sane_get_select_fd...\n"); - handle = handle, fd = fd; + (void) handle, (void) fd; return SANE_STATUS_UNSUPPORTED; } diff --git a/backend/microtek2.c b/backend/microtek2.c index 505e86b..cc14488 100644 --- a/backend/microtek2.c +++ b/backend/microtek2.c @@ -195,7 +195,7 @@ sane_exit (void) if ( md_first_dev->shading_table_w ) { DBG(100, "free md_first_dev->shading_table_w at %p\n", - md_first_dev->shading_table_w); + (void *) md_first_dev->shading_table_w); free((void *) md_first_dev->shading_table_w); md_first_dev->shading_table_w = NULL; } @@ -203,7 +203,7 @@ sane_exit (void) if ( md_first_dev->shading_table_d ) { DBG(100, "free md_first_dev->shading_table_d at %p\n", - md_first_dev->shading_table_d); + (void *) md_first_dev->shading_table_d); free((void *) md_first_dev->shading_table_d); md_first_dev->shading_table_d = NULL; } @@ -599,7 +599,8 @@ sane_read(SANE_Handle handle, SANE_Byte *buf, SANE_Int maxlen, SANE_Int *len ) ssize_t nread; - DBG(30, "sane_read: handle=%p, buf=%p, maxlen=%d\n", handle, buf, maxlen); + DBG(30, "sane_read: handle=%p, buf=%p, maxlen=%d\n", + handle, (void *) buf, maxlen); *len = 0; @@ -742,7 +743,7 @@ add_device_list(SANE_String_Const dev_name, Microtek2_Device **mdev) md->opts = md_options; ++md_num_devices; *mdev = md; - DBG(100, "free hdev at %p\n", hdev); + DBG(100, "free hdev at %p\n", (void *) hdev); free(hdev); return SANE_STATUS_GOOD; @@ -1360,53 +1361,56 @@ cleanup_scanner(Microtek2_Scanner *ms) /* free buffers */ if ( ms->buf.src_buffer[0] ) { - DBG(100, "free ms->buf.src_buffer[0] at %p\n", ms->buf.src_buffer[0]); + DBG(100, "free ms->buf.src_buffer[0] at %p\n", + (void *) ms->buf.src_buffer[0]); free((void *) ms->buf.src_buffer[0]); ms->buf.src_buffer[0] = NULL; ms->buf.src_buf = NULL; } if ( ms->buf.src_buffer[1] ) { - DBG(100, "free ms->buf.src_buffer[1] at %p\n", ms->buf.src_buffer[1]); + DBG(100, "free ms->buf.src_buffer[1] at %p\n", + (void *) ms->buf.src_buffer[1]); free((void *) ms->buf.src_buffer[1]); ms->buf.src_buffer[1] = NULL; ms->buf.src_buf = NULL; } if ( ms->buf.src_buf ) { - DBG(100, "free ms->buf.src_buf at %p\n", ms->buf.src_buf); + DBG(100, "free ms->buf.src_buf at %p\n", (void *) ms->buf.src_buf); free((void *) ms->buf.src_buf); ms->buf.src_buf = NULL; } if ( ms->temporary_buffer ) { - DBG(100, "free ms->temporary_buffer at %p\n", ms->temporary_buffer); + DBG(100, "free ms->temporary_buffer at %p\n", + (void *) ms->temporary_buffer); free((void *) ms->temporary_buffer); ms->temporary_buffer = NULL; } if ( ms->gamma_table ) { - DBG(100, "free ms->gamma_table at %p\n", ms->gamma_table); + DBG(100, "free ms->gamma_table at %p\n", (void *) ms->gamma_table); free((void *) ms->gamma_table); ms->gamma_table = NULL; } if ( ms->control_bytes ) { - DBG(100, "free ms->control_bytes at %p\n", ms->control_bytes); + DBG(100, "free ms->control_bytes at %p\n", (void *) ms->control_bytes); free((void *) ms->control_bytes); ms->control_bytes = NULL; } if ( ms->condensed_shading_w ) { DBG(100, "free ms->condensed_shading_w at %p\n", - ms->condensed_shading_w); + (void *) ms->condensed_shading_w); free((void *) ms->condensed_shading_w); ms->condensed_shading_w = NULL; } if ( ms->condensed_shading_d ) { DBG(100, "free ms->condensed_shading_d at %p\n", - ms->condensed_shading_d); + (void *) ms->condensed_shading_d); free((void *) ms->condensed_shading_d); ms->condensed_shading_d = NULL; } @@ -3901,8 +3905,8 @@ get_scan_parameters(Microtek2_Scanner *ms) if ( y2_dots >= mi->geo_height ) y2_dots = mi->geo_height - 1; ms->width_dots = x2_dots - ms->x1_dots; - if ( md->model_flags && MD_OFFSET_2 ) /* this firmware has problems with */ - if ( ( ms->width_dots % 2 ) == 1 ) /* odd pixel numbers */ + if ( md->model_flags & MD_OFFSET_2 ) /* this firmware has problems with */ + if ( ( ms->width_dots % 2 ) == 1 ) /* odd pixel numbers */ ms->width_dots -= 1; if ( ms->width_dots < 10 ) ms->width_dots = 10; @@ -4201,7 +4205,8 @@ scsi_send_gamma(Microtek2_Scanner *ms) DBG(30, "scsi_send_gamma: pos=%p, size=%d, word=%d, color=%d\n", - ms->gamma_table, ms->lut_size_bytes, ms->word, ms->current_color); + (void *) ms->gamma_table, ms->lut_size_bytes, ms->word, + ms->current_color); if ( ( 3 * ms->lut_size_bytes ) <= 0xffff ) /*send Gamma with one command*/ { @@ -4465,7 +4470,7 @@ scsi_read_control_bits(Microtek2_Scanner *ms) int count_1s; DBG(30, "scsi_read_control_bits: ms=%p, fd=%d\n", (void *) ms, ms->sfd); - DBG(30, "ms->control_bytes = %p\n", ms->control_bytes); + DBG(30, "ms->control_bytes = %p\n", (void *) ms->control_bytes); RCB_SET_CMD(cmd); RCB_SET_LENGTH(cmd, ms->n_control_bytes); @@ -4520,7 +4525,7 @@ scsi_set_window(Microtek2_Scanner *ms, int n) { /* n windows, not yet */ size = SW_CMD_L + SW_HEADER_L + n * SW_BODY_L; setwindow = (uint8_t *) malloc(size); DBG(100, "scsi_set_window: setwindow= %p, malloc'd %d Bytes\n", - setwindow, size); + (void *) setwindow, size); if ( setwindow == NULL ) { DBG(1, "scsi_set_window: malloc for setwindow failed\n"); @@ -4592,7 +4597,7 @@ scsi_set_window(Microtek2_Scanner *ms, int n) { /* n windows, not yet */ if ( status != SANE_STATUS_GOOD ) DBG(1, "scsi_set_window: '%s'\n", sane_strstatus(status)); - DBG(100, "scsi_set_window: free setwindow at %p\n", setwindow); + DBG(100, "scsi_set_window: free setwindow at %p\n", (void *) setwindow); free((void *) setwindow); return status; } @@ -4665,7 +4670,8 @@ scsi_read_image(Microtek2_Scanner *ms, uint8_t *buffer, int bytes_per_pixel) uint8_t tmp; - DBG(30, "scsi_read_image: ms=%p, buffer=%p\n", (void *) ms, buffer); + DBG(30, "scsi_read_image: ms=%p, buffer=%p\n", + (void *) ms, (void *) buffer); ENDIAN_TYPE(endiantype) RI_SET_CMD(cmd); @@ -4790,7 +4796,7 @@ scsi_read_shading(Microtek2_Scanner *ms, uint8_t *buffer, uint32_t length) size_t size; DBG(30, "scsi_read_shading: pos=%p, size=%d, word=%d, color=%d, dark=%d\n", - buffer, length, ms->word, ms->current_color, ms->dark); + (void *) buffer, length, ms->word, ms->current_color, ms->dark); size = length; @@ -4807,7 +4813,8 @@ scsi_read_shading(Microtek2_Scanner *ms, uint8_t *buffer, uint32_t length) DBG(100, "scsi_read_shading: sfd=%d, cmd=%p, sizeofcmd=%lu," "dest=%p, destsize=%lu\n", - ms->sfd, cmd, (u_long) sizeof(cmd), buffer, (u_long) size); + ms->sfd, (void *) cmd, (u_long) sizeof(cmd), (void *) buffer, + (u_long) size); status = sanei_scsi_cmd(ms->sfd, cmd, sizeof(cmd), buffer, &size); if ( status != SANE_STATUS_GOOD ) @@ -4837,12 +4844,11 @@ scsi_send_shading(Microtek2_Scanner *ms, DBG(30, "scsi_send_shading: pos=%p, size=%d, word=%d, color=%d, dark=%d\n", - shading_data, length, ms->word, ms->current_color, - dark); + (void *) shading_data, length, ms->word, ms->current_color, dark); cmd = (uint8_t *) malloc(SSI_CMD_L + length); DBG(100, "scsi_send_shading: cmd=%p, malloc'd %d bytes\n", - cmd, SSI_CMD_L + length); + (void *) cmd, SSI_CMD_L + length); if ( cmd == NULL ) { DBG(1, "scsi_send_shading: Couldn't get buffer for shading table\n"); @@ -4868,7 +4874,7 @@ scsi_send_shading(Microtek2_Scanner *ms, if ( status != SANE_STATUS_GOOD ) DBG(1, "scsi_send_shading: '%s'\n", sane_strstatus(status)); - DBG(100, "free cmd at %p\n", cmd); + DBG(100, "free cmd at %p\n", (void *) cmd); free((void *) cmd); return status; @@ -5070,7 +5076,8 @@ scsi_sense_handler (int fd, u_char *sense, void *arg) uint8_t ascq; - DBG(30, "scsi_sense_handler: fd=%d, sense=%p arg=%p\n",fd, sense, arg); + DBG(30, "scsi_sense_handler: fd=%d, sense=%p arg=%p\n", + fd, (void *) sense, arg); dump_area(sense, RQS_LENGTH(sense), "SenseBuffer"); @@ -5264,7 +5271,7 @@ sane_start(SANE_Handle handle) if (ms->control_bytes) free((void *)ms->control_bytes); ms->control_bytes = (uint8_t *) malloc(ms->n_control_bytes); DBG(100, "sane_start: ms->control_bytes=%p, malloc'd %lu bytes\n", - ms->control_bytes, (u_long) ms->n_control_bytes); + (void *) ms->control_bytes, (u_long) ms->n_control_bytes); if ( ms->control_bytes == NULL ) { DBG(1, "sane_start: malloc() for control bits failed\n"); @@ -5373,7 +5380,7 @@ sane_start(SANE_Handle handle) ms->gamma_table = (uint8_t *) malloc(3 * ms->lut_size_bytes ); DBG(100, "sane_start: ms->gamma_table=%p, malloc'd %d bytes\n", - ms->gamma_table, 3 * ms->lut_size_bytes); + (void *) ms->gamma_table, 3 * ms->lut_size_bytes); if ( ms->gamma_table == NULL ) { DBG(1, "sane_start: malloc for gammatable failed\n"); @@ -5559,7 +5566,7 @@ prepare_buffers(Microtek2_Scanner *ms) ms->buf.src_buffer[i] = (uint8_t *) malloc(ms->src_buffer_size + extra_buf_size); DBG(100, "prepare_buffers: ms->buf.src_buffer[%d]=%p," - "malloc'd %d bytes\n", i, ms->buf.src_buffer[i], + "malloc'd %d bytes\n", i, (void *) ms->buf.src_buffer[i], ms->src_buffer_size + extra_buf_size); if ( ms->buf.src_buffer[i] == NULL ) { @@ -5579,7 +5586,7 @@ prepare_buffers(Microtek2_Scanner *ms) free((void *) ms->buf.src_buf); ms->buf.src_buf = malloc(ms->src_buffer_size); DBG(100, "sane_start: ms->buf.src_buf=%p, malloc'd %d bytes\n", - ms->buf.src_buf, ms->src_buffer_size); + (void *) ms->buf.src_buf, ms->src_buffer_size); if ( ms->buf.src_buf == NULL ) { DBG(1, "sane_start: malloc for scan buffer failed\n"); @@ -5602,7 +5609,7 @@ prepare_buffers(Microtek2_Scanner *ms) { ms->temporary_buffer = (uint8_t *) malloc(ms->remaining_bytes); DBG(100, "sane_start: ms->temporary_buffer=%p, malloc'd %d bytes\n", - ms->temporary_buffer, ms->remaining_bytes); + (void *) ms->temporary_buffer, ms->remaining_bytes); if ( ms->temporary_buffer == NULL ) { DBG(1, "sane_start: malloc() for temporary buffer failed\n"); @@ -5918,7 +5925,8 @@ condense_shading(Microtek2_Scanner *ms) } ms->condensed_shading_w = (uint8_t *)malloc(cond_length); DBG(100, "condense_shading: ms->condensed_shading_w=%p," - "malloc'd %d bytes\n", ms->condensed_shading_w, cond_length); + "malloc'd %d bytes\n", + (void *) ms->condensed_shading_w, cond_length); if ( ms->condensed_shading_w == NULL ) { DBG(1, "condense_shading: malloc for white table failed\n"); @@ -5938,7 +5946,8 @@ condense_shading(Microtek2_Scanner *ms) } ms->condensed_shading_d = (uint8_t *)malloc(cond_length); DBG(100, "condense_shading: ms->condensed_shading_d=%p," - " malloc'd %d bytes\n", ms->condensed_shading_d, cond_length); + " malloc'd %d bytes\n", + (void *) ms->condensed_shading_d, cond_length); if ( ms->condensed_shading_d == NULL ) { DBG(1, "condense_shading: malloc for dark table failed\n"); @@ -6100,7 +6109,8 @@ read_shading_image(Microtek2_Scanner *ms) ms->shading_image = malloc(ms->bpl * ms->src_remaining_lines); DBG(100, "read shading image: ms->shading_image=%p," " malloc'd %d bytes\n", - ms->shading_image, ms->bpl * ms->src_remaining_lines); + (void *) ms->shading_image, + ms->bpl * ms->src_remaining_lines); if ( ms->shading_image == NULL ) { DBG(1, "read_shading_image: malloc for buffer failed\n"); @@ -6166,7 +6176,7 @@ read_shading_image(Microtek2_Scanner *ms) } DBG(100, "free memory for ms->shading_image at %p\n", - ms->shading_image); + (void *) ms->shading_image); free((void *) ms->shading_image); ms->shading_image = NULL; } @@ -6241,7 +6251,7 @@ read_shading_image(Microtek2_Scanner *ms) ms->shading_image = malloc(ms->bpl * ms->src_remaining_lines); DBG(100, "read shading image: ms->shading_image=%p, malloc'd %d bytes\n", - ms->shading_image, ms->bpl * ms->src_remaining_lines); + (void *) ms->shading_image, ms->bpl * ms->src_remaining_lines); if ( ms->shading_image == NULL ) { DBG(1, "read_shading_image: malloc for buffer failed\n"); @@ -6328,7 +6338,7 @@ read_shading_image(Microtek2_Scanner *ms) return status; DBG(100, "free memory for ms->shading_image at %p\n", - ms->shading_image); + (void *) ms->shading_image); free((void *) ms->shading_image); ms->shading_image = NULL; @@ -6360,7 +6370,7 @@ prepare_shading_data(Microtek2_Scanner *ms, uint32_t lines, uint8_t **data) #endif DBG(30, "prepare_shading_data: ms=%p, lines=%d, *data=%p\n", - (void *) ms, lines, *data); + (void *) ms, lines, (void *) *data); md = ms->dev; mi = &md->info[md->scan_source]; @@ -6373,7 +6383,7 @@ prepare_shading_data(Microtek2_Scanner *ms, uint32_t lines, uint8_t **data) { *data = (uint8_t *) malloc(length); DBG(100, "prepare_shading_data: malloc'd %d bytes at %p\n", - length, *data); + length, (void *) *data); if ( *data == NULL ) { DBG(1, "prepare_shading_data: malloc for shading table failed\n"); @@ -6597,7 +6607,7 @@ read_cx_shading_image(Microtek2_Scanner *ms) } ms->shading_image = malloc(shading_bytes); DBG(100, "read_cx_shading: ms->shading_image=%p, malloc'd %d bytes\n", - ms->shading_image, shading_bytes); + (void *) ms->shading_image, shading_bytes); if ( ms->shading_image == NULL ) { DBG(1, "read_cx_shading: malloc for cx_shading buffer failed\n"); @@ -6642,7 +6652,7 @@ read_cx_shading_image(Microtek2_Scanner *ms) if ( ms->shading_image ) { DBG(100, "free memory for ms->shading_image at %p\n", - ms->shading_image); + (void *) ms->shading_image); free((void *) ms->shading_image); ms->shading_image = NULL; } @@ -6694,7 +6704,7 @@ calc_cx_shading_line(Microtek2_Scanner *ms) free( (void *)md->shading_table_w ); md->shading_table_w = (uint8_t *) malloc(shading_line_bytes); DBG(100, "calc_cx_shading: md->shading_table_w=%p, malloc'd %d bytes\n", - md->shading_table_w, shading_line_bytes); + (void *) md->shading_table_w, shading_line_bytes); if ( md->shading_table_w == NULL ) { DBG(100, "calc_cx_shading: malloc for white shadingtable failed\n"); @@ -6711,7 +6721,7 @@ calc_cx_shading_line(Microtek2_Scanner *ms) free( (void *)md->shading_table_d); md->shading_table_d = (uint8_t *) malloc(shading_line_bytes); DBG(100, "calc_cx_shading: md->shading_table_d=%p, malloc'd %d bytes\n", - md->shading_table_d, shading_line_bytes); + (void *) md->shading_table_d, shading_line_bytes); if ( md->shading_table_d == NULL ) { @@ -6729,8 +6739,9 @@ calc_cx_shading_line(Microtek2_Scanner *ms) "shading_line_bytes=%d\n" "shading_line_pixels=%d\n" "shading_table_pointer=%p\n", - (void *) ms, md->shading_table_w, md->shading_table_d, - shading_line_bytes, shading_line_pixels, shading_table_pointer); + (void *) ms, (void *) md->shading_table_w, + (void *) md->shading_table_d, shading_line_bytes, + shading_line_pixels, (void *) shading_table_pointer); /* calculating the median pixel values over the shading lines */ /* and write them to the shading table */ @@ -6862,7 +6873,7 @@ calculate_gamma(Microtek2_Scanner *ms, uint8_t *pos, int color, char *mode) DBG(30, "calculate_gamma: ms=%p, pos=%p, color=%d, mode=%s\n", - (void *) ms, pos, color, mode); + (void *) ms, (void *) pos, color, mode); md = ms->dev; mi = &md->info[md->scan_source]; @@ -6980,7 +6991,7 @@ shading_function(Microtek2_Scanner *ms, uint8_t *data) int i; - DBG(40, "shading_function: ms=%p, data=%p\n", (void *) ms, data); + DBG(40, "shading_function: ms=%p, data=%p\n", (void *) ms, (void *) data); md = ms->dev; mi = &md->info[md->scan_source]; @@ -7174,8 +7185,9 @@ reader_process(void *data) ms->transfer_length = ms->src_lines_to_read * ms->bpl; DBG(30, "reader_process: transferlength=%d, lines=%d, linelength=%d, " - "real_bpl=%d, srcbuf=%p\n", ms->transfer_length, - ms->src_lines_to_read, ms->bpl, ms->real_bpl, ms->buf.src_buf); + "real_bpl=%d, srcbuf=%p\n", + ms->transfer_length, ms->src_lines_to_read, ms->bpl, + ms->real_bpl, (void *) ms->buf.src_buf); sigprocmask (SIG_BLOCK, &sigterm_set, 0); status = scsi_read_image(ms, ms->buf.src_buf, (ms->depth > 8) ? 2 : 1); @@ -7333,7 +7345,7 @@ chunky_copy_pixels(Microtek2_Scanner *ms, uint8_t *from) int color; DBG(30, "chunky_copy_pixels: from=%p, pixels=%d, fp=%p, depth=%d\n", - from, ms->ppl, (void *) ms->fp, ms->depth); + (void *) from, ms->ppl, (void *) ms->fp, ms->depth); md = ms->dev; if ( ms->depth > 8 ) @@ -7512,7 +7524,7 @@ segreg_proc_data(Microtek2_Scanner *ms) } DBG(30, "segreg_proc_data: src_buf=%p, free_lines=%d\n", - ms->buf.src_buf, ms->buf.free_lines); + (void *) ms->buf.src_buf, ms->buf.free_lines); return SANE_STATUS_GOOD; } @@ -7881,7 +7893,7 @@ wordchunky_copy_pixels(uint8_t *from, uint32_t pixels, int depth, FILE *fp) int color; DBG(30, "wordchunky_copy_pixels: from=%p, pixels=%d, depth=%d\n", - from, pixels, depth); + (void *) from, pixels, depth); if ( depth > 8 ) { @@ -7993,7 +8005,7 @@ gray_copy_pixels(Microtek2_Scanner *ms, float s_w, s_d, shading_factor = 0; DBG(30, "gray_copy_pixels: pixels=%d, from=%p, fp=%p, depth=%d\n", - ms->ppl, from, (void *) ms->fp, ms->depth); + ms->ppl, (void *) from, (void *) ms->fp, ms->depth); md = ms->dev; step = right_to_left == 1 ? -1 : 1; @@ -8228,7 +8240,7 @@ lineartfake_copy_pixels(Microtek2_Scanner *ms, DBG(30, "lineartfake_copy_pixels: from=%p,pixels=%d,threshold=%d,file=%p\n", - from, pixels, threshold, (void *) fp); + (void *) from, pixels, threshold, (void *) fp); md = ms->dev; bit = 0; dest = 0; @@ -8302,7 +8314,7 @@ auto_adjust_proc_data(Microtek2_Scanner *ms, uint8_t **temp_current) DBG(30, "auto_adjust_proc_data: ms=%p, temp_current=%p\n", - (void *) ms, *temp_current); + (void *) ms, (void *) *temp_current); md = ms->dev; mi = &md->info[md->scan_source]; diff --git a/backend/microtek2.h b/backend/microtek2.h index 3cd1365..e3bc493 100644 --- a/backend/microtek2.h +++ b/backend/microtek2.h @@ -827,7 +827,7 @@ typedef struct Microtek2_Info { SANE_Byte nlens; SANE_Byte nwindows; SANE_Byte shtrnsferequ; -#define MI_WHITE_SHADING_ONLY(x) ((x) & 0x20) == 0 +#define MI_WHITE_SHADING_ONLY(x) (((x) & 0x20) == 0) #define MI_HAS_SCNBTTN SANE_TRUE SANE_Bool scnbuttn; #define MI_HAS_PIPOBUF SANE_TRUE diff --git a/backend/mustek.c b/backend/mustek.c index 4d77fb5..bad118a 100644 --- a/backend/mustek.c +++ b/backend/mustek.c @@ -198,15 +198,6 @@ static const SANE_Byte scsi_inquiry[] = { static const SANE_Byte scsi_test_unit_ready[] = { MUSTEK_SCSI_TEST_UNIT_READY, 0x00, 0x00, 0x00, 0x00, 0x00 }; -/* Remove #ifdef and this comment when this SCSI command is used for - something. Keeping this definition around so we don't loose info - about the protocol. - */ -#ifdef ENABLE_MUSTEK_SCSI_AREA_AND_WINDOWS -static const SANE_Byte scsi_area_and_windows[] = { - MUSTEK_SCSI_AREA_AND_WINDOWS, 0x00, 0x00, 0x00, 0x09, 0x00 -}; -#endif static const SANE_Byte scsi_request_sense[] = { MUSTEK_SCSI_REQUEST_SENSE, 0x00, 0x00, 0x00, 0x04, 0x00 }; @@ -219,28 +210,16 @@ static const SANE_Byte scsi_ccd_distance[] = { static const SANE_Byte scsi_get_image_status[] = { MUSTEK_SCSI_GET_IMAGE_STATUS, 0x00, 0x00, 0x00, 0x06, 0x00 }; -static const SANE_Byte scsi_set_window[] = { - MUSTEK_SCSI_SET_WINDOW, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00 -}; static const SANE_Byte scsi_get_window[] = { MUSTEK_SCSI_GET_WINDOW, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00 }; -static const SANE_Byte scsi_read_data[] = { - MUSTEK_SCSI_READ_DATA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; -static const SANE_Byte scsi_send_data[] = { - MUSTEK_SCSI_SEND_DATA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; -/* Remove #ifdef and this comment when this SCSI command is used for - something. Keeping this definition around so we don't loose info - about the protocol. - */ -#ifdef ENABLE_MUSTEK_SCSI_LOOKUP_TABLE -static const SANE_Byte scsi_lookup_table[] = { - MUSTEK_SCSI_LOOKUP_TABLE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00 -}; -#endif + +/* Sizes for fixed-length, non-vendor-specific CDB formats (others are 0) */ +#define CDB_SIZE(opcode) ((opcode) < 0x20 ? 6 : \ + (opcode) < 0x60 ? 10 : \ + (opcode) < 0x80 ? 0 : \ + (opcode) < 0xa0 ? 16 : \ + (opcode) < 0xc0 ? 12 : 0) /* prototypes */ static SANE_Status area_and_windows (Mustek_Scanner * s); @@ -1994,7 +1973,7 @@ set_window_se (Mustek_Scanner * s, SANE_Int lamp) /* setup SCSI command (except length): */ memset (cmd, 0, sizeof (cmd)); cmd[0] = MUSTEK_SCSI_SET_WINDOW; - cp = cmd + sizeof (scsi_set_window); /* skip command block */ + cp = cmd + CDB_SIZE (MUSTEK_SCSI_SET_WINDOW); /* skip command block */ if (s->mode & MUSTEK_MODE_COLOR) { @@ -2093,7 +2072,7 @@ set_window_se (Mustek_Scanner * s, SANE_Int lamp) *cp++ = 0; cp += 5; /* skip reserved bytes */ - cmd[8] = cp - cmd - sizeof (scsi_set_window); + cmd[8] = cp - cmd - CDB_SIZE (MUSTEK_SCSI_SET_WINDOW); return dev_cmd (s, cmd, (cp - cmd), 0, 0); } @@ -2111,7 +2090,7 @@ set_window_pro (Mustek_Scanner * s) else cmd[8] = 0x0a; - cp = cmd + sizeof (scsi_set_window); /* skip command block */ + cp = cmd + CDB_SIZE (MUSTEK_SCSI_SET_WINDOW); /* skip command block */ *cp++ = 0; /* what's this? */ pixels_per_mm = SANE_UNFIX (s->hw->dpi_range.max) / MM_PER_INCH; @@ -2174,7 +2153,7 @@ get_calibration_lines_pro (Mustek_Scanner * s) for (line = 0; line < s->hw->cal.lines; line++) { - status = dev_cmd (s, cmd, sizeof (scsi_read_data), + status = dev_cmd (s, cmd, CDB_SIZE (MUSTEK_SCSI_READ_DATA), s->hw->cal.buffer + line * len, &len); if ((status != SANE_STATUS_GOOD) @@ -2199,17 +2178,17 @@ send_calibration_lines_pro (Mustek_Scanner * s) DBG (5, "send_calibration_lines_pro\n"); buf_size = s->hw->cal.bytes / 2; - cmd1 = (SANE_Byte *) malloc (buf_size + sizeof (scsi_send_data)); - cmd2 = (SANE_Byte *) malloc (buf_size + sizeof (scsi_send_data)); + cmd1 = (SANE_Byte *) malloc (buf_size + CDB_SIZE (MUSTEK_SCSI_SEND_DATA)); + cmd2 = (SANE_Byte *) malloc (buf_size + CDB_SIZE (MUSTEK_SCSI_SEND_DATA)); if (!cmd1 || !cmd2) { - DBG (1, "send_calibration_lines_pro: failed to malloc %ld bytes for " + DBG (1, "send_calibration_lines_pro: failed to malloc %zu bytes for " "sending lines\n", - (long int) (buf_size + sizeof (scsi_send_data))); + buf_size + CDB_SIZE (MUSTEK_SCSI_SEND_DATA)); return SANE_STATUS_NO_MEM; } - memset (cmd1, 0, sizeof (scsi_send_data)); - memset (cmd2, 0, sizeof (scsi_send_data)); + memset (cmd1, 0, CDB_SIZE (MUSTEK_SCSI_SEND_DATA)); + memset (cmd2, 0, CDB_SIZE (MUSTEK_SCSI_SEND_DATA)); cmd1[0] = cmd2[0] = MUSTEK_SCSI_SEND_DATA; cmd1[6] = cmd2[6] = (buf_size >> 16) & 0xff; @@ -2236,21 +2215,21 @@ send_calibration_lines_pro (Mustek_Scanner * s) calibration_word = (1024 * 65536 / calibration_word) - 1024; if (calibration_word > 1023) calibration_word = 1023; - *(cmd1 + sizeof (scsi_send_data) + (buf_size / 3) * color + column) - = calibration_word & 0xff; - *(cmd2 + sizeof (scsi_send_data) + (buf_size / 3) * color + column) - = (calibration_word >> 8) & 0xff; + *(cmd1 + CDB_SIZE (MUSTEK_SCSI_SEND_DATA) + (buf_size / 3) * color + + column) = calibration_word & 0xff; + *(cmd2 + CDB_SIZE (MUSTEK_SCSI_SEND_DATA) + (buf_size / 3) * color + + column) = (calibration_word >> 8) & 0xff; } } - status = dev_cmd (s, cmd1, buf_size + sizeof (scsi_send_data), 0, 0); + status = dev_cmd (s, cmd1, buf_size + CDB_SIZE (MUSTEK_SCSI_SEND_DATA), 0, 0); if (status != SANE_STATUS_GOOD) { DBG (1, "send_calibration_lines_pro: send failed\n"); return status; } - status = dev_cmd (s, cmd2, buf_size + sizeof (scsi_send_data), 0, 0); + status = dev_cmd (s, cmd2, buf_size + CDB_SIZE (MUSTEK_SCSI_SEND_DATA), 0, 0); if (status != SANE_STATUS_GOOD) { DBG (1, "send_calibration_lines_pro: send failed\n"); @@ -2328,7 +2307,8 @@ get_calibration_lines_se (Mustek_Scanner * s) cmd[7] = (lines >> 8) & 0xff; cmd[8] = (lines >> 0) & 0xff; len = lines * bytes_per_color; - status = dev_cmd (s, cmd, sizeof (scsi_read_data), s->hw->cal.buffer, &len); + status = dev_cmd (s, cmd, CDB_SIZE (MUSTEK_SCSI_READ_DATA), + s->hw->cal.buffer, &len); if ((status != SANE_STATUS_GOOD) || (len != (unsigned int) (lines * bytes_per_color))) { @@ -2361,15 +2341,15 @@ send_calibration_lines_se (Mustek_Scanner * s, SANE_Word color) DBG (5, "send_calibration_lines_se: %d bytes, color: %d\n", bytes_per_color, color + 1); - cmd = (SANE_Byte *) malloc (buf_size + sizeof (scsi_send_data)); + cmd = (SANE_Byte *) malloc (buf_size + CDB_SIZE (MUSTEK_SCSI_SEND_DATA)); if (!cmd) { - DBG (1, "send_calibration_lines_se: failed to malloc %ld bytes for " + DBG (1, "send_calibration_lines_se: failed to malloc %zu bytes for " "sending lines\n", - (long int) (buf_size + sizeof (scsi_send_data))); + buf_size + CDB_SIZE (MUSTEK_SCSI_SEND_DATA)); return SANE_STATUS_NO_MEM; } - memset (cmd, 0, sizeof (scsi_send_data)); + memset (cmd, 0, CDB_SIZE (MUSTEK_SCSI_SEND_DATA)); for (column = 0; column < bytes_per_color; column++) { @@ -2386,7 +2366,7 @@ send_calibration_lines_se (Mustek_Scanner * s, SANE_Word color) cali_word = 256 * s->hw->cal.lines * 255 / cali_word - 256; if (cali_word > 255) cali_word = 255; - *(cmd + sizeof (scsi_send_data) + column) = cali_word; + *(cmd + CDB_SIZE (MUSTEK_SCSI_SEND_DATA) + column) = cali_word; } cmd[0] = MUSTEK_SCSI_SEND_DATA; @@ -2395,7 +2375,7 @@ send_calibration_lines_se (Mustek_Scanner * s, SANE_Word color) cmd[7] = (buf_size >> 8) & 0xff; cmd[8] = (buf_size >> 0) & 0xff; - status = dev_cmd (s, cmd, buf_size + sizeof (scsi_send_data), 0, 0); + status = dev_cmd (s, cmd, buf_size + CDB_SIZE (MUSTEK_SCSI_SEND_DATA), 0, 0); if (status != SANE_STATUS_GOOD) { DBG (1, "send_calibration_lines_se: send failed\n"); @@ -2457,14 +2437,15 @@ send_gamma_table_se (Mustek_Scanner * s) SANE_Int i, j; # define CLIP(x) ((x) < 0 ? 0 : ((x) > 255 ? 255 : (x))) - memset (gamma, 0, sizeof (scsi_send_data)); + memset (gamma, 0, CDB_SIZE (MUSTEK_SCSI_SEND_DATA)); gamma[0] = MUSTEK_SCSI_SEND_DATA; gamma[2] = 0x03; /* indicates gamma table */ if ((s->mode & MUSTEK_MODE_GRAY) || (s->mode & MUSTEK_MODE_COLOR)) { - if (s->hw->gamma_length + sizeof (scsi_send_data) > sizeof (gamma)) + if ((size_t) s->hw->gamma_length + CDB_SIZE (MUSTEK_SCSI_SEND_DATA) + > sizeof (gamma)) return SANE_STATUS_NO_MEM; gamma[7] = (s->hw->gamma_length >> 8) & 0xff; gamma[8] = (s->hw->gamma_length >> 0) & 0xff; @@ -2491,7 +2472,7 @@ send_gamma_table_se (Mustek_Scanner * s) val_a = MAX (2 * val_b - val_a, 0); /* Interpolate first entries from 256 entry table */ - cp = gamma + sizeof (scsi_send_data); + cp = gamma + CDB_SIZE (MUSTEK_SCSI_SEND_DATA); for (j = 0; j < factor; j++) *cp++ = CLIP (((factor - j) * val_a + j * val_b + factor / 2) / factor); @@ -2518,7 +2499,7 @@ send_gamma_table_se (Mustek_Scanner * s) DBG (5, "send_gamma_table_se: sending table for color %d\n", gamma[6]); - status = dev_cmd (s, gamma, sizeof (scsi_send_data) + status = dev_cmd (s, gamma, CDB_SIZE (MUSTEK_SCSI_SEND_DATA) + s->hw->gamma_length, 0, 0); ++color; } @@ -2535,7 +2516,7 @@ send_gamma_table_se (Mustek_Scanner * s) DBG (5, "send_gamma_table_se: sending lineart threshold %2X\n", gamma[8]); - return dev_cmd (s, gamma, sizeof (scsi_send_data), 0, 0); + return dev_cmd (s, gamma, CDB_SIZE (MUSTEK_SCSI_SEND_DATA), 0, 0); } } @@ -4656,7 +4637,7 @@ output_data (Mustek_Scanner * s, FILE * fp, SANE_Int y, num_lines; DBG (5, "output_data: data=%p, lpb=%d, bpl=%d, extra=%p\n", - data, lines_per_buffer, bpl, extra); + (void *) data, lines_per_buffer, bpl, (void *) extra); /* convert to pixel-interleaved format: */ if ((s->mode & MUSTEK_MODE_COLOR) diff --git a/backend/mustek_usb2.c b/backend/mustek_usb2.c index 9faeff6..cb511b9 100644 --- a/backend/mustek_usb2.c +++ b/backend/mustek_usb2.c @@ -1165,12 +1165,12 @@ IsTAConnected () DBG (DBG_FUNC, "StopScan: start\n"); - if (Asic_Open (&g_chip, g_pDeviceFile) != STATUS_GOOD) + if (Asic_Open (&g_chip, g_pDeviceFile) != SANE_STATUS_GOOD) { return FALSE; } - if (Asic_IsTAConnected (&g_chip, &hasTA) != STATUS_GOOD) + if (Asic_IsTAConnected (&g_chip, &hasTA) != SANE_STATUS_GOOD) { Asic_Close (&g_chip); return FALSE; @@ -1199,16 +1199,16 @@ static SANE_Bool GetKeyStatus (SANE_Byte * pKey) { SANE_Byte pKeyTemp = 0x00; - STATUS status = Asic_CheckFunctionKey (&g_chip, &pKeyTemp); + SANE_Status status = Asic_CheckFunctionKey (&g_chip, &pKeyTemp); DBG (DBG_FUNC, "GetKeyStatus: start\n"); - if (STATUS_GOOD != Asic_Open (&g_chip, g_pDeviceFile)) + if (SANE_STATUS_GOOD != Asic_Open (&g_chip, g_pDeviceFile)) { DBG (DBG_ERR, "GetKeyStatus: Asic_Open is fail\n"); return FALSE; } - if (STATUS_GOOD != status) + if (SANE_STATUS_GOOD != status) { DBG (DBG_ERR, "GetKeyStatus: Asic_CheckFunctionKey is fail\n"); return FALSE; @@ -1236,7 +1236,7 @@ GetKeyStatus (SANE_Byte * pKey) *pKey = 0x05; /*Panel key pressed */ } - if (STATUS_GOOD != Asic_Close (&g_chip)) + if (SANE_STATUS_GOOD != Asic_Close (&g_chip)) { DBG (DBG_ERR, "GetKeyStatus: Asic_Close is fail\n"); return FALSE; diff --git a/backend/mustek_usb2_asic.c b/backend/mustek_usb2_asic.c index 039ffa1..8a2325e 100644 --- a/backend/mustek_usb2_asic.c +++ b/backend/mustek_usb2_asic.c @@ -49,34 +49,34 @@ static SANE_Byte RegisterBankStatus = -1; -static STATUS +static SANE_Status WriteIOControl (PAsic chip, unsigned short wValue, unsigned short wIndex, unsigned short wLength, SANE_Byte * lpbuf) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; status = sanei_usb_control_msg (chip->fd, 0x40, 0x01, wValue, wIndex, wLength, lpbuf); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { DBG (DBG_ERR, "WriteIOControl Error!\n"); return status; } - return STATUS_GOOD; + return SANE_STATUS_GOOD; } -static STATUS +static SANE_Status ReadIOControl (PAsic chip, unsigned short wValue, unsigned short wIndex, unsigned short wLength, SANE_Byte * lpbuf) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; status = sanei_usb_control_msg (chip->fd, 0xc0, 0x01, wValue, wIndex, wLength, lpbuf); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { DBG (DBG_ERR, "WriteIOControl Error!\n"); return status; @@ -85,10 +85,10 @@ ReadIOControl (PAsic chip, unsigned short wValue, unsigned short wIndex, unsigne return status; } -static STATUS +static SANE_Status Mustek_ClearFIFO (PAsic chip) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; SANE_Byte buf[4]; DBG (DBG_ASIC, "Mustek_ClearFIFO:Enter\n"); @@ -97,24 +97,24 @@ Mustek_ClearFIFO (PAsic chip) buf[2] = 0; buf[3] = 0; status = WriteIOControl (chip, 0x05, 0, 4, (SANE_Byte *) (buf)); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) return status; status = WriteIOControl (chip, 0xc0, 0, 4, (SANE_Byte *) (buf)); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) return status; DBG (DBG_ASIC, "Mustek_ClearFIFO:Exit\n"); - return STATUS_GOOD; + return SANE_STATUS_GOOD; } -static STATUS +static SANE_Status Mustek_SendData (PAsic chip, unsigned short reg, SANE_Byte data) { SANE_Byte buf[4]; - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; DBG (DBG_ASIC, "Mustek_SendData: Enter. reg=%x,data=%x\n", reg, data); @@ -167,16 +167,16 @@ Mustek_SendData (PAsic chip, unsigned short reg, SANE_Byte data) buf[2] = LOBYTE (reg); buf[3] = data; status = WriteIOControl (chip, 0xb0, 0, 4, buf); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) DBG (DBG_ERR, ("Mustek_SendData: write error\n")); return status; } -static STATUS +static SANE_Status Mustek_ReceiveData (PAsic chip, SANE_Byte * reg) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; SANE_Byte buf[4]; DBG (DBG_ASIC, "Mustek_ReceiveData\n"); @@ -187,10 +187,10 @@ Mustek_ReceiveData (PAsic chip, SANE_Byte * reg) return status; } -static STATUS +static SANE_Status Mustek_WriteAddressLineForRegister (PAsic chip, SANE_Byte x) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; SANE_Byte buf[4]; DBG (DBG_ASIC, "Mustek_WriteAddressLineForRegister: Enter\n"); @@ -206,51 +206,51 @@ Mustek_WriteAddressLineForRegister (PAsic chip, SANE_Byte x) } -static STATUS +static SANE_Status SetRWSize (PAsic chip, SANE_Byte ReadWrite, unsigned int size) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; DBG (DBG_ASIC, "SetRWSize: Enter\n"); if (ReadWrite == 0) { /*write */ status = Mustek_SendData (chip, 0x7C, (SANE_Byte) (size)); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) return status; status = Mustek_SendData (chip, 0x7D, (SANE_Byte) (size >> 8)); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) return status; status = Mustek_SendData (chip, 0x7E, (SANE_Byte) (size >> 16)); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) return status; status = Mustek_SendData (chip, 0x7F, (SANE_Byte) (size >> 24)); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) return status; } else { /* read */ status = Mustek_SendData (chip, 0x7C, (SANE_Byte) (size >> 1)); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) return status; status = Mustek_SendData (chip, 0x7D, (SANE_Byte) (size >> 9)); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) return status; status = Mustek_SendData (chip, 0x7E, (SANE_Byte) (size >> 17)); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) return status; status = Mustek_SendData (chip, 0x7F, (SANE_Byte) (size >> 25)); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) return status; } DBG (DBG_ASIC, "SetRWSize: Exit\n"); - return STATUS_GOOD; + return SANE_STATUS_GOOD; } -static STATUS +static SANE_Status Mustek_DMARead (PAsic chip, unsigned int size, SANE_Byte * lpdata) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; unsigned int i, buf[1]; unsigned int read_size; size_t read_size_usb; @@ -258,7 +258,7 @@ Mustek_DMARead (PAsic chip, unsigned int size, SANE_Byte * lpdata) DBG (DBG_ASIC, "Mustek_DMARead: Enter\n"); status = Mustek_ClearFIFO (chip); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) return status; buf[0] = read_size = 32 * 1024; @@ -272,7 +272,7 @@ Mustek_DMARead (PAsic chip, unsigned int size, SANE_Byte * lpdata) sanei_usb_read_bulk (chip->fd, lpdata + i * read_size, &read_size_usb); buf[0] = read_size_usb; - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { DBG (DBG_ERR, "Mustek_DMARead: read error\n"); return status; @@ -290,7 +290,7 @@ Mustek_DMARead (PAsic chip, unsigned int size, SANE_Byte * lpdata) sanei_usb_read_bulk (chip->fd, lpdata + i * read_size, &read_size_usb); buf[0] = read_size_usb; - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { DBG (DBG_ERR, "Mustek_DMARead: read error\n"); return status; @@ -300,13 +300,13 @@ Mustek_DMARead (PAsic chip, unsigned int size, SANE_Byte * lpdata) } DBG (DBG_ASIC, "Mustek_DMARead: Exit\n"); - return STATUS_GOOD; + return SANE_STATUS_GOOD; } -static STATUS +static SANE_Status Mustek_DMAWrite (PAsic chip, unsigned int size, SANE_Byte * lpdata) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; unsigned int buf[1]; unsigned int i; unsigned int write_size; @@ -315,7 +315,7 @@ Mustek_DMAWrite (PAsic chip, unsigned int size, SANE_Byte * lpdata) DBG (DBG_ASIC, "Mustek_DMAWrite: Enter:size=%d\n", size); status = Mustek_ClearFIFO (chip); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) return status; buf[0] = write_size = 32 * 1024; @@ -329,7 +329,7 @@ Mustek_DMAWrite (PAsic chip, unsigned int size, SANE_Byte * lpdata) sanei_usb_write_bulk (chip->fd, lpdata + i * write_size, &write_size_usb); buf[0] = write_size_usb; - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { DBG (DBG_ERR, "Mustek_DMAWrite: write error\n"); return status; @@ -348,7 +348,7 @@ Mustek_DMAWrite (PAsic chip, unsigned int size, SANE_Byte * lpdata) sanei_usb_write_bulk (chip->fd, lpdata + i * write_size, &write_size_usb); buf[0] = write_size_usb; - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { DBG (DBG_ERR, "Mustek_DMAWrite: write error\n"); return status; @@ -358,11 +358,11 @@ Mustek_DMAWrite (PAsic chip, unsigned int size, SANE_Byte * lpdata) Mustek_ClearFIFO (chip); DBG (DBG_ASIC, "Mustek_DMAWrite: Exit\n"); - return STATUS_GOOD; + return SANE_STATUS_GOOD; } -static STATUS +static SANE_Status Mustek_SendData2Byte (PAsic chip, unsigned short reg, SANE_Byte data) { static SANE_Bool isTransfer = FALSE; @@ -425,17 +425,17 @@ Mustek_SendData2Byte (PAsic chip, unsigned short reg, SANE_Byte data) isTransfer = FALSE; } - return STATUS_GOOD; + return SANE_STATUS_GOOD; } /* ---------------------- asic motor functions ----------------------------- */ -static STATUS +static SANE_Status LLFRamAccess (PAsic chip, LLF_RAMACCESS * RamAccess) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; SANE_Byte a[2]; DBG (DBG_ASIC, "LLFRamAccess:Enter\n"); @@ -499,12 +499,12 @@ LLFRamAccess (PAsic chip, LLF_RAMACCESS * RamAccess) } -static STATUS +static SANE_Status LLFSetMotorCurrentAndPhase (PAsic chip, LLF_MOTOR_CURRENT_AND_PHASE * MotorCurrentAndPhase) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; SANE_Byte MotorPhase; DBG (DBG_ASIC, "LLFSetMotorCurrentAndPhase:Enter\n"); @@ -1558,10 +1558,10 @@ LLFSetMotorCurrentAndPhase (PAsic chip, #if SANE_UNUSED -static STATUS +static SANE_Status LLFStopMotorMove (PAsic chip) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; DBG (DBG_ASIC, "LLFStopMotorMove:Enter\n"); Mustek_SendData (chip, ES01_F4_ActiveTriger, ACTION_TRIGER_DISABLE); @@ -1573,10 +1573,10 @@ LLFStopMotorMove (PAsic chip) } #endif -static STATUS +static SANE_Status LLFSetMotorTable (PAsic chip, LLF_SETMOTORTABLE * LLF_SetMotorTable) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; LLF_RAMACCESS RamAccess; DBG (DBG_ASIC, "LLFSetMotorTable:Enter\n"); @@ -1609,10 +1609,10 @@ LLFSetMotorTable (PAsic chip, LLF_SETMOTORTABLE * LLF_SetMotorTable) return status; } -static STATUS +static SANE_Status LLFMotorMove (PAsic chip, LLF_MOTORMOVE * LLF_MotorMove) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; unsigned int motor_steps; SANE_Byte temp_motor_action; @@ -1751,11 +1751,11 @@ LLFMotorMove (PAsic chip, LLF_MOTORMOVE * LLF_MotorMove) return status; } -static STATUS +static SANE_Status SetMotorStepTable (PAsic chip, LLF_MOTORMOVE * MotorStepsTable, unsigned short wStartY, unsigned int dwScanImageSteps, unsigned short wYResolution) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; unsigned short wAccSteps = 511; unsigned short wForwardSteps = 20; SANE_Byte bDecSteps = 255; @@ -1891,11 +1891,11 @@ SetMotorStepTable (PAsic chip, LLF_MOTORMOVE * MotorStepsTable, unsigned short w return status; } -static STATUS +static SANE_Status CalculateMotorTable (LLF_CALCULATEMOTORTABLE * lpCalculateMotorTable, unsigned short wYResolution) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; unsigned short i; unsigned short wEndSpeed, wStartSpeed; unsigned short wScanAccSteps; @@ -1980,10 +1980,10 @@ CalculateMotorTable (LLF_CALCULATEMOTORTABLE * lpCalculateMotorTable, return status; } -static STATUS +static SANE_Status LLFCalculateMotorTable (LLF_CALCULATEMOTORTABLE * LLF_CalculateMotorTable) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; unsigned short i; double PI = 3.1415926535; double x; @@ -2085,14 +2085,14 @@ LLFCalculateMotorTable (LLF_CALCULATEMOTORTABLE * LLF_CalculateMotorTable) } -static STATUS +static SANE_Status SetMotorCurrent (PAsic chip, unsigned short dwMotorSpeed, LLF_MOTOR_CURRENT_AND_PHASE * CurrentPhase) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; DBG (DBG_ASIC, "SetMotorCurrent:Enter\n"); - chip = chip; + (void) chip; if (dwMotorSpeed < 2000) { @@ -2135,10 +2135,10 @@ SetMotorCurrent (PAsic chip, unsigned short dwMotorSpeed, } -static STATUS +static SANE_Status MotorBackHome (PAsic chip, SANE_Byte WaitOrNoWait) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; unsigned short BackHomeMotorTable[512 * 8]; LLF_CALCULATEMOTORTABLE CalMotorTable; LLF_MOTOR_CURRENT_AND_PHASE CurrentPhase; @@ -2184,11 +2184,11 @@ MotorBackHome (PAsic chip, SANE_Byte WaitOrNoWait) } -static STATUS +static SANE_Status LLFSetRamAddress (PAsic chip, unsigned int dwStartAddr, unsigned int dwEndAddr, SANE_Byte byAccessTarget) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; SANE_Byte * pStartAddr = (SANE_Byte *) & dwStartAddr; SANE_Byte * pEndAddr = (SANE_Byte *) & dwEndAddr; @@ -2219,10 +2219,10 @@ LLFSetRamAddress (PAsic chip, unsigned int dwStartAddr, unsigned int dwEndAddr, /* ---------------------- medium level asic functions ---------------------- */ -static STATUS +static SANE_Status InitTiming (PAsic chip) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; DBG (DBG_ASIC, "InitTiming:Enter\n"); chip->Timing.AFE_ADCCLK_Timing = 1010580480; @@ -2267,10 +2267,10 @@ InitTiming (PAsic chip) return status; } -static STATUS +static SANE_Status OpenScanChip (PAsic chip) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; SANE_Byte x[4]; DBG (DBG_ASIC, "OpenScanChip:Enter\n"); @@ -2280,7 +2280,7 @@ OpenScanChip (PAsic chip) x[2] = 0x64; x[3] = 0x64; status = WriteIOControl (chip, 0x90, 0, 4, x); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) return status; x[0] = 0x65; @@ -2288,7 +2288,7 @@ OpenScanChip (PAsic chip) x[2] = 0x65; x[3] = 0x65; status = WriteIOControl (chip, 0x90, 0, 4, x); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) return status; x[0] = 0x44; @@ -2296,7 +2296,7 @@ OpenScanChip (PAsic chip) x[2] = 0x44; x[3] = 0x44; status = WriteIOControl (chip, 0x90, 0, 4, x); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) return status; x[0] = 0x45; @@ -2310,10 +2310,10 @@ OpenScanChip (PAsic chip) } -static STATUS +static SANE_Status CloseScanChip (PAsic chip) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; SANE_Byte x[4]; DBG (DBG_ASIC, "CloseScanChip:Enter\n"); @@ -2323,7 +2323,7 @@ CloseScanChip (PAsic chip) x[2] = 0x64; x[3] = 0x64; status = WriteIOControl (chip, 0x90, 0, 4, x); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) return status; x[0] = 0x65; @@ -2331,7 +2331,7 @@ CloseScanChip (PAsic chip) x[2] = 0x65; x[3] = 0x65; status = WriteIOControl (chip, 0x90, 0, 4, x); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) return status; x[0] = 0x16; @@ -2339,7 +2339,7 @@ CloseScanChip (PAsic chip) x[2] = 0x16; x[3] = 0x16; status = WriteIOControl (chip, 0x90, 0, 4, x); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) return status; x[0] = 0x17; @@ -2353,10 +2353,10 @@ CloseScanChip (PAsic chip) } -static STATUS +static SANE_Status SafeInitialChip (PAsic chip) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; DBG (DBG_ASIC, "SafeInitialChip:Enter\n"); @@ -2372,7 +2372,7 @@ SafeInitialChip (PAsic chip) { DBG (DBG_ASIC, "isFirstOpenChip=%d\n", chip->isFirstOpenChip); status = DRAM_Test (chip); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { DBG (DBG_ASIC, "DRAM_Test: Error\n"); return status; @@ -2385,10 +2385,10 @@ SafeInitialChip (PAsic chip) } -static STATUS +static SANE_Status DRAM_Test (PAsic chip) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; unsigned char *temps; unsigned int i; @@ -2403,14 +2403,14 @@ DRAM_Test (PAsic chip) /*set start address */ status = Mustek_SendData (chip, ES01_A0_HostStartAddr0_7, 0x00); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { free (temps); return status; } status = Mustek_SendData (chip, ES01_A1_HostStartAddr8_15, 0x00); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { free (temps); return status; @@ -2418,7 +2418,7 @@ DRAM_Test (PAsic chip) status = Mustek_SendData (chip, ES01_A2_HostStartAddr16_21, 0x00 | ACCESS_DRAM); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { free (temps); return status; @@ -2427,28 +2427,28 @@ DRAM_Test (PAsic chip) Mustek_SendData (chip, ES01_79_AFEMCLK_SDRAMCLK_DELAY_CONTROL, SDRAMCLK_DELAY_12_ns); status = Mustek_SendData (chip, ES01_A3_HostEndAddr0_7, 0xff); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { free (temps); return status; } status = Mustek_SendData (chip, ES01_A4_HostEndAddr8_15, 0xff); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { free (temps); return status; } status = Mustek_SendData (chip, ES01_A5_HostEndAddr16_21, 0xff); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { free (temps); return status; } status = Mustek_DMAWrite (chip, 64, (SANE_Byte *) (temps)); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { DBG (DBG_ASIC, "Mustek_DMAWrite error\n"); free (temps); @@ -2456,14 +2456,14 @@ DRAM_Test (PAsic chip) } status = Mustek_SendData (chip, ES01_A0_HostStartAddr0_7, 0x00); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { free (temps); return status; } status = Mustek_SendData (chip, ES01_A1_HostStartAddr8_15, 0x00); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { free (temps); return status; @@ -2471,7 +2471,7 @@ DRAM_Test (PAsic chip) status = Mustek_SendData (chip, ES01_A2_HostStartAddr16_21, 0x00 | ACCESS_DRAM); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { free (temps); return status; @@ -2479,21 +2479,21 @@ DRAM_Test (PAsic chip) /*set end address */ status = Mustek_SendData (chip, ES01_A3_HostEndAddr0_7, 0xff); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { free (temps); return status; } status = Mustek_SendData (chip, ES01_A4_HostEndAddr8_15, 0xff); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { free (temps); return status; } status = Mustek_SendData (chip, ES01_A5_HostEndAddr16_21, 0xff); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { free (temps); return status; @@ -2502,7 +2502,7 @@ DRAM_Test (PAsic chip) memset (temps, 0, 64); status = Mustek_DMARead (chip, 64, (SANE_Byte *) (temps)); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { free (temps); return status; @@ -2521,7 +2521,7 @@ DRAM_Test (PAsic chip) if (*(temps + i) != i) { DBG (DBG_ERR, "DRAM Test error...(No.=%d)\n", i + 1); - return STATUS_IO_ERROR; + return SANE_STATUS_IO_ERROR; } } @@ -2532,10 +2532,10 @@ DRAM_Test (PAsic chip) } #if SANE_UNUSED -static STATUS +static SANE_Status SetPowerSave (PAsic chip) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; DBG (DBG_ASIC, "SetPowerSave:Enter\n"); if (chip->firmwarestate < FS_OPENED) @@ -2552,10 +2552,10 @@ SetPowerSave (PAsic chip) } #endif -static STATUS +static SANE_Status SetLineTimeAndExposure (PAsic chip) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; DBG (DBG_ASIC, "SetLineTimeAndExposure:Enter\n"); if (chip->firmwarestate < FS_OPENED) @@ -2584,10 +2584,10 @@ SetLineTimeAndExposure (PAsic chip) -static STATUS +static SANE_Status CCDTiming (PAsic chip) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; unsigned int dwPH1, dwPH2, dwPHRS, dwPHCP; DBG (DBG_ASIC, "CCDTiming:Enter\n"); @@ -2701,16 +2701,16 @@ CCDTiming (PAsic chip) return status; } -static STATUS +static SANE_Status IsCarriageHome (PAsic chip, SANE_Bool * LampHome, SANE_Bool * TAHome) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; SANE_Byte temp; DBG (DBG_ASIC, "IsCarriageHome:Enter\n"); status = GetChipStatus (chip, 0, &temp); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { DBG (DBG_ASIC, "IsCarriageHome:Error!\n"); return status; @@ -2732,33 +2732,33 @@ IsCarriageHome (PAsic chip, SANE_Bool * LampHome, SANE_Bool * TAHome) } -static STATUS +static SANE_Status GetChipStatus (PAsic chip, SANE_Byte Selector, SANE_Byte * ChipStatus) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; DBG (DBG_ASIC, "GetChipStatus:Enter\n"); status = Mustek_SendData (chip, ES01_8B_Status, Selector); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) return status; status = Mustek_WriteAddressLineForRegister (chip, ES01_8B_Status); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) return status; *ChipStatus = ES01_8B_Status; status = Mustek_ReceiveData (chip, ChipStatus); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) return status; DBG (DBG_ASIC, "GetChipStatus:Exit\n"); return status; } -static STATUS +static SANE_Status SetAFEGainOffset (PAsic chip) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; int i = 0; DBG (DBG_ASIC, "SetAFEGainOffset:Enter\n"); @@ -2918,10 +2918,10 @@ SetAFEGainOffset (PAsic chip) return status; } -static STATUS +static SANE_Status SetLEDTime (PAsic chip) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; DBG (DBG_ASIC, "SetLEDTime:Enter\n"); Mustek_SendData (chip, ES01_B8_ChannelRedExpStartPixelLSB, @@ -2955,10 +2955,10 @@ SetLEDTime (PAsic chip) return status; } -static STATUS +static SANE_Status SetScanMode (PAsic chip, SANE_Byte bScanBits) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; SANE_Byte temp_f5_register = 0; SANE_Byte GrayBWChannel; @@ -3019,12 +3019,12 @@ SetScanMode (PAsic chip, SANE_Byte bScanBits) return status; } -static STATUS +static SANE_Status SetPackAddress (PAsic chip, unsigned short wXResolution, unsigned short wWidth, unsigned short wX, double XRatioAdderDouble, double XRatioTypeDouble, SANE_Byte byClear_Pulse_Width, unsigned short * PValidPixelNumber) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; SANE_Byte OverLapPixel; SANE_Byte TotalLineShift; @@ -3402,11 +3402,11 @@ SetPackAddress (PAsic chip, unsigned short wXResolution, unsigned short wWidth, return status; } -static STATUS +static SANE_Status SetExtraSetting (PAsic chip, unsigned short wXResolution, unsigned short wCCD_PixelNumber, SANE_Bool isCaribrate) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; SANE_Byte byPHTG_PulseWidth, byPHTG_WaitWidth; SANE_Byte temp_ff_register = 0; SANE_Byte bThreshold = 128; @@ -3532,10 +3532,10 @@ attach_one_scanner (SANE_String_Const devname) return SANE_STATUS_GOOD; } -static STATUS +static SANE_Status Asic_Open (PAsic chip, SANE_Byte *pDeviceName) { - STATUS status; + SANE_Status status; SANE_Status sane_status; DBG (DBG_ASIC, "Asic_Open: Enter\n"); @@ -3545,7 +3545,7 @@ Asic_Open (PAsic chip, SANE_Byte *pDeviceName) if (chip->firmwarestate > FS_OPENED) { DBG (DBG_ASIC, "chip has been opened. fd=%d\n", chip->fd); - return STATUS_INVAL; + return SANE_STATUS_INVAL; } /* init usb */ @@ -3558,25 +3558,25 @@ Asic_Open (PAsic chip, SANE_Byte *pDeviceName) { DBG (DBG_ERR, "Asic_Open: sanei_usb_find_devices failed: %s\n", sane_strstatus (sane_status)); - return STATUS_INVAL; + return SANE_STATUS_INVAL; } /* open usb */ if (device_name == NULL) { DBG (DBG_ERR, "Asic_Open: no scanner found\n"); - return STATUS_INVAL; + return SANE_STATUS_INVAL; } sane_status = sanei_usb_open (device_name, &chip->fd); if (sane_status != SANE_STATUS_GOOD) { DBG (DBG_ERR, "Asic_Open: sanei_usb_open of %s failed: %s\n", device_name, sane_strstatus (sane_status)); - return STATUS_INVAL; + return SANE_STATUS_INVAL; } /* open scanner chip */ status = OpenScanChip (chip); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { sanei_usb_close (chip->fd); DBG (DBG_ASIC, "Asic_Open: OpenScanChip error\n"); @@ -3601,7 +3601,7 @@ Asic_Open (PAsic chip, SANE_Byte *pDeviceName) Asic_WaitUnitReady (chip); DBG (DBG_ASIC, "Asic_WaitUnitReady\n"); status = SafeInitialChip (chip); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { DBG (DBG_ERR, "Asic_Open: SafeInitialChip error\n"); return status; @@ -3611,7 +3611,7 @@ Asic_Open (PAsic chip, SANE_Byte *pDeviceName) if (!pDeviceName) { DBG (DBG_ERR, "Asic_Open: not enough memory\n"); - return STATUS_INVAL; + return SANE_STATUS_INVAL; } DBG (DBG_INFO, "Asic_Open: device %s successfully opened\n", pDeviceName); DBG (DBG_ASIC, "Asic_Open: Exit\n"); @@ -3619,16 +3619,16 @@ Asic_Open (PAsic chip, SANE_Byte *pDeviceName) } -static STATUS +static SANE_Status Asic_Close (PAsic chip) { - STATUS status; + SANE_Status status; DBG (DBG_ASIC, "Asic_Close: Enter\n"); if (chip->firmwarestate < FS_OPENED) { DBG (DBG_ASIC, "Asic_Close: Scanner is not opened\n"); - return STATUS_GOOD; + return SANE_STATUS_GOOD; } if (chip->firmwarestate > FS_OPENED) @@ -3642,7 +3642,7 @@ Asic_Close (PAsic chip) CLOSE_ALL_CLOCK_ENABLE); status = CloseScanChip (chip); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { DBG (DBG_ERR, "Asic_Close: CloseScanChip error\n"); return status; @@ -3655,10 +3655,10 @@ Asic_Close (PAsic chip) return status; } -static STATUS +static SANE_Status Asic_TurnLamp (PAsic chip, SANE_Bool isLampOn) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; SANE_Byte PWM; DBG (DBG_ASIC, "Asic_TurnLamp: Enter\n"); @@ -3666,7 +3666,7 @@ Asic_TurnLamp (PAsic chip, SANE_Bool isLampOn) if (chip->firmwarestate < FS_OPENED) { DBG (DBG_ERR, "Asic_TurnLamp: Scanner is not opened\n"); - return STATUS_INVAL; + return SANE_STATUS_INVAL; } if (chip->firmwarestate > FS_OPENED) @@ -3693,7 +3693,7 @@ Asic_TurnLamp (PAsic chip, SANE_Bool isLampOn) } -static STATUS +static SANE_Status Asic_TurnTA (PAsic chip, SANE_Bool isTAOn) { SANE_Byte PWM; @@ -3703,7 +3703,7 @@ Asic_TurnTA (PAsic chip, SANE_Bool isTAOn) if (chip->firmwarestate < FS_OPENED) { DBG (DBG_ERR, "Asic_TurnTA: Scanner is not opened\n"); - return STATUS_INVAL; + return SANE_STATUS_INVAL; } if (chip->firmwarestate > FS_OPENED) @@ -3724,13 +3724,13 @@ Asic_TurnTA (PAsic chip, SANE_Bool isTAOn) chip->firmwarestate = FS_OPENED; DBG (DBG_ASIC, "Asic_TurnTA: Exit\n"); - return STATUS_GOOD; + return SANE_STATUS_GOOD; } -static STATUS +static SANE_Status Asic_WaitUnitReady (PAsic chip) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; SANE_Byte temp_status; int i = 0; @@ -3740,14 +3740,14 @@ Asic_WaitUnitReady (PAsic chip) { DBG (DBG_ERR, "Asic_WaitUnitReady: Scanner has not been opened\n"); - return STATUS_INVAL; + return SANE_STATUS_INVAL; } do { status = GetChipStatus (chip, 1, &temp_status); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { DBG (DBG_ASIC, "WaitChipIdle:Error!\n"); return status; @@ -3766,10 +3766,10 @@ Asic_WaitUnitReady (PAsic chip) } #if SANE_UNUSED -static STATUS +static SANE_Status Asic_Release (PAsic chip) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; DBG (DBG_ASIC, "Asic_Release()\n"); if (chip->firmwarestate > FS_ATTACHED) @@ -3782,10 +3782,10 @@ Asic_Release (PAsic chip) } #endif -static STATUS +static SANE_Status Asic_Initialize (PAsic chip) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; DBG (DBG_ASIC, "Asic_Initialize:Enter\n"); @@ -3814,12 +3814,12 @@ Asic_Initialize (PAsic chip) return status; } -static STATUS +static SANE_Status Asic_SetWindow (PAsic chip, SANE_Byte bScanBits, unsigned short wXResolution, unsigned short wYResolution, unsigned short wX, unsigned short wY, unsigned short wWidth, unsigned short wLength) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; unsigned short ValidPixelNumber; @@ -3869,7 +3869,7 @@ Asic_SetWindow (PAsic chip, SANE_Byte bScanBits, if (chip->firmwarestate != FS_OPENED) { DBG (DBG_ERR, "Asic_SetWindow: Scanner is not opened\n"); - return STATUS_INVAL; + return SANE_STATUS_INVAL; } Mustek_SendData (chip, ES01_F3_ActionOption, 0); @@ -3901,12 +3901,12 @@ Asic_SetWindow (PAsic chip, SANE_Byte bScanBits, BytePerPixel = 2; chip->dwBytesCountPerRow = (unsigned int) (wWidth) * 2; } - else if ((bScanBits == 8)) + else if (bScanBits == 8) { BytePerPixel = 1; chip->dwBytesCountPerRow = (unsigned int) (wWidth); } - else if ((bScanBits < 8)) + else if (bScanBits < 8) { BytePerPixel = 1; chip->dwBytesCountPerRow = (unsigned int) (wWidth); @@ -4269,10 +4269,10 @@ Asic_SetWindow (PAsic chip, SANE_Byte bScanBits, return status; } -static STATUS +static SANE_Status Asic_Reset (PAsic chip) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; DBG (DBG_ASIC, "Asic_Reset: Enter\n"); chip->lsLightSource = LS_REFLECTIVE; @@ -4297,10 +4297,10 @@ Asic_Reset (PAsic chip) return status; } -static STATUS +static SANE_Status Asic_SetSource (PAsic chip, LIGHTSOURCE lsLightSource) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; DBG (DBG_ASIC, "Asic_SetSource: Enter\n"); chip->lsLightSource = lsLightSource; @@ -4323,16 +4323,16 @@ Asic_SetSource (PAsic chip, LIGHTSOURCE lsLightSource) return status; } -static STATUS +static SANE_Status Asic_ScanStart (PAsic chip) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; DBG (DBG_ASIC, "Asic_ScanStart: Enter\n"); if (chip->firmwarestate != FS_OPENED) { DBG (DBG_ERR, "Asic_ScanStart: Scanner is not opened\n"); - return STATUS_INVAL; + return SANE_STATUS_INVAL; } Mustek_SendData (chip, ES01_8B_Status, 0x1c | 0x20); @@ -4347,10 +4347,10 @@ Asic_ScanStart (PAsic chip) return status; } -static STATUS +static SANE_Status Asic_ScanStop (PAsic chip) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; SANE_Byte temps[2]; SANE_Byte buf[4]; @@ -4368,7 +4368,7 @@ Asic_ScanStop (PAsic chip) buf[2] = 0x02; buf[3] = 0x02; status = WriteIOControl (chip, 0xc0, 0, 4, buf); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { DBG (DBG_ERR, "Asic_ScanStop: Stop scan error\n"); return status; @@ -4379,14 +4379,14 @@ Asic_ScanStop (PAsic chip) buf[2] = 0x00; buf[3] = 0x00; status = WriteIOControl (chip, 0xc0, 0, 4, buf); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { DBG (DBG_ERR, "Asic_ScanStop: Clear scan error\n"); return status; } status = Mustek_DMARead (chip, 2, temps); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { DBG (DBG_ERR, "Asic_ScanStop: DMAReadGeneralMode error\n"); return status; @@ -4403,10 +4403,10 @@ Asic_ScanStop (PAsic chip) return status; } -static STATUS +static SANE_Status Asic_ReadImage (PAsic chip, SANE_Byte * pBuffer, unsigned short LinesCount) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; unsigned int dwXferBytes; DBG (DBG_ASIC, "Asic_ReadImage: Enter : LinesCount = %d\n", LinesCount); @@ -4414,7 +4414,7 @@ Asic_ReadImage (PAsic chip, SANE_Byte * pBuffer, unsigned short LinesCount) if (chip->firmwarestate != FS_SCANNING) { DBG (DBG_ERR, "Asic_ReadImage: Scanner is not scanning\n"); - return STATUS_INVAL; + return SANE_STATUS_INVAL; } dwXferBytes = (unsigned int) (LinesCount) * chip->dwBytesCountPerRow; @@ -4425,14 +4425,14 @@ Asic_ReadImage (PAsic chip, SANE_Byte * pBuffer, unsigned short LinesCount) if (dwXferBytes < 0) { DBG (DBG_ASIC, "Asic_ReadImage: dwXferBytes <0\n"); - return STATUS_INVAL; + return SANE_STATUS_INVAL; } */ if (dwXferBytes == 0) { DBG (DBG_ASIC, "Asic_ReadImage: dwXferBytes == 0\n"); - return STATUS_GOOD; + return SANE_STATUS_GOOD; } status = Mustek_DMARead (chip, dwXferBytes, pBuffer); @@ -4443,10 +4443,10 @@ Asic_ReadImage (PAsic chip, SANE_Byte * pBuffer, unsigned short LinesCount) #if SANE_UNUSED -static STATUS +static SANE_Status Asic_CheckFunctionKey (PAsic chip, SANE_Byte * key) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; SANE_Byte bBuffer_1 = 0xff; SANE_Byte bBuffer_2 = 0xff; @@ -4455,7 +4455,7 @@ Asic_CheckFunctionKey (PAsic chip, SANE_Byte * key) if (chip->firmwarestate != FS_OPENED) { DBG (DBG_ERR, "Asic_CheckFunctionKey: Scanner is not Opened\n"); - return STATUS_INVAL; + return SANE_STATUS_INVAL; } Mustek_SendData (chip, ES01_97_GPIOControl0_7, 0x00); @@ -4486,7 +4486,7 @@ Asic_CheckFunctionKey (PAsic chip, SANE_Byte * key) } #endif -static STATUS +static SANE_Status Asic_IsTAConnected (PAsic chip, SANE_Bool * hasTA) { SANE_Byte bBuffer_1 = 0xff; @@ -4509,14 +4509,14 @@ Asic_IsTAConnected (PAsic chip, SANE_Bool * hasTA) DBG (DBG_ASIC, "hasTA=%d\n", *hasTA); DBG (DBG_ASIC, "Asic_IsTAConnected():Exit\n"); - return STATUS_GOOD; + return SANE_STATUS_GOOD; } #if SANE_UNUSED -static STATUS +static SANE_Status Asic_DownloadGammaTable (PAsic chip, void * lpBuffer) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; DBG (DBG_ASIC, "Asic_DownloadGammaTable()\n"); chip->lpGammaTable = lpBuffer; @@ -4526,11 +4526,11 @@ Asic_DownloadGammaTable (PAsic chip, void * lpBuffer) } #endif -static STATUS +static SANE_Status Asic_ReadCalibrationData (PAsic chip, void * pBuffer, unsigned int dwXferBytes, SANE_Byte bScanBits) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; SANE_Byte * pCalBuffer; unsigned int dwTotalReadData; unsigned int dwReadImageData; @@ -4540,7 +4540,7 @@ Asic_ReadCalibrationData (PAsic chip, void * pBuffer, if (chip->firmwarestate != FS_SCANNING) { DBG (DBG_ERR, "Asic_ReadCalibrationData: Scanner is not scanning\n"); - return STATUS_INVAL; + return SANE_STATUS_INVAL; } if (bScanBits == 24) @@ -4551,7 +4551,7 @@ Asic_ReadCalibrationData (PAsic chip, void * pBuffer, { DBG (DBG_ERR, "Asic_ReadCalibrationData: Can't malloc bCalBuffer memory\n"); - return STATUS_MEM_ERROR; + return SANE_STATUS_NO_MEM; } for (dwTotalReadData = 0; dwTotalReadData < dwXferBytes;) @@ -4592,11 +4592,11 @@ Asic_ReadCalibrationData (PAsic chip, void * pBuffer, return status; } -static STATUS +static SANE_Status Asic_SetMotorType (PAsic chip, SANE_Bool isMotorMove, SANE_Bool isUniformSpeed) { - STATUS status = STATUS_GOOD; - isUniformSpeed = isUniformSpeed; + SANE_Status status = SANE_STATUS_GOOD; + (void) isUniformSpeed; DBG (DBG_ASIC, "Asic_SetMotorType:Enter\n"); if (isMotorMove) @@ -4611,10 +4611,10 @@ Asic_SetMotorType (PAsic chip, SANE_Bool isMotorMove, SANE_Bool isUniformSpeed) return status; } -static STATUS +static SANE_Status Asic_MotorMove (PAsic chip, SANE_Bool isForward, unsigned int dwTotalSteps) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; unsigned short *NormalMoveMotorTable; LLF_CALCULATEMOTORTABLE CalMotorTable; LLF_MOTOR_CURRENT_AND_PHASE CurrentPhase; @@ -4675,12 +4675,12 @@ Asic_MotorMove (PAsic chip, SANE_Bool isForward, unsigned int dwTotalSteps) return status; } -static STATUS +static SANE_Status Asic_CarriageHome (PAsic chip, SANE_Bool isTA) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; SANE_Bool LampHome, TAHome; - isTA = isTA; + (void) isTA; DBG (DBG_ASIC, "Asic_CarriageHome:Enter\n"); @@ -4694,18 +4694,18 @@ Asic_CarriageHome (PAsic chip, SANE_Bool isTA) return status; } -static STATUS +static SANE_Status Asic_SetShadingTable (PAsic chip, unsigned short * lpWhiteShading, unsigned short * lpDarkShading, unsigned short wXResolution, unsigned short wWidth, unsigned short wX) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; unsigned short i, j, n; unsigned short wValidPixelNumber; double dbXRatioAdderDouble; unsigned int wShadingTableSize; - wX = wX; + (void) wX; DBG (DBG_ASIC, "Asic_SetShadingTable:Enter\n"); if (chip->firmwarestate < FS_OPENED) @@ -4737,7 +4737,7 @@ Asic_SetShadingTable (PAsic chip, unsigned short * lpWhiteShading, if (chip->lpShadingTable == NULL) { DBG (DBG_ASIC, "lpShadingTable == NULL\n"); - return STATUS_MEM_ERROR; + return SANE_STATUS_NO_MEM; } n = 0; @@ -4800,14 +4800,14 @@ Asic_SetShadingTable (PAsic chip, unsigned short * lpWhiteShading, return status; } -static STATUS +static SANE_Status Asic_WaitCarriageHome (PAsic chip, SANE_Bool isTA) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; SANE_Bool LampHome, TAHome; int i; - isTA = isTA; + (void) isTA; DBG (DBG_ASIC, "Asic_WaitCarriageHome:Enter\n"); @@ -4819,7 +4819,7 @@ Asic_WaitCarriageHome (PAsic chip, SANE_Bool isTA) usleep (300000); } if (i == 100) - status = STATUS_DEVICE_BUSY; + status = SANE_STATUS_DEVICE_BUSY; DBG (DBG_ASIC, "Wait %d s\n", (unsigned short) (i * 0.3)); Mustek_SendData (chip, ES01_F4_ActiveTriger, ACTION_TRIGER_DISABLE); @@ -4830,12 +4830,12 @@ Asic_WaitCarriageHome (PAsic chip, SANE_Bool isTA) return status; } -static STATUS +static SANE_Status Asic_SetCalibrate (PAsic chip, SANE_Byte bScanBits, unsigned short wXResolution, unsigned short wYResolution, unsigned short wX, unsigned short wY, unsigned short wWidth, unsigned short wLength, SANE_Bool isShading) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; unsigned short ValidPixelNumber; unsigned short wPerLineNeedBufferSize = 0; @@ -4886,13 +4886,13 @@ Asic_SetCalibrate (PAsic chip, SANE_Byte bScanBits, unsigned short wXResolution, if (chip->firmwarestate != FS_OPENED) { DBG (DBG_ERR, "Asic_SetCalibrate: Scanner is not opened\n"); - return STATUS_INVAL; + return SANE_STATUS_INVAL; } if (lpMotorStepsTable == NULL) { DBG (DBG_ERR, "Asic_SetCalibrate: insufficiency memory!\n"); - return STATUS_INVAL; + return SANE_STATUS_INVAL; } DBG (DBG_ASIC, "malloc LLF_MOTORMOVE =%ld Byte\n", (long int) (sizeof (LLF_MOTORMOVE))); @@ -4926,13 +4926,13 @@ Asic_SetCalibrate (PAsic chip, SANE_Byte bScanBits, unsigned short wXResolution, BytePerPixel = 2; chip->dwBytesCountPerRow = (unsigned int) (wWidth) * 2; } - else if ((bScanBits == 8)) + else if (bScanBits == 8) { wPerLineNeedBufferSize = wWidth; BytePerPixel = 1; chip->dwBytesCountPerRow = (unsigned int) (wWidth); } - else if ((bScanBits < 8)) + else if (bScanBits < 8) { wPerLineNeedBufferSize = wWidth >> 3; BytePerPixel = 1; @@ -5241,10 +5241,10 @@ Asic_SetCalibrate (PAsic chip, SANE_Byte bScanBits, unsigned short wXResolution, } -static STATUS +static SANE_Status Asic_SetAFEGainOffset (PAsic chip) { - STATUS status = STATUS_GOOD; + SANE_Status status = SANE_STATUS_GOOD; DBG (DBG_ASIC, "Asic_SetAFEGainOffset:Enter\n"); status = SetAFEGainOffset (chip); diff --git a/backend/mustek_usb2_asic.h b/backend/mustek_usb2_asic.h index 34ebba7..9550d33 100644 --- a/backend/mustek_usb2_asic.h +++ b/backend/mustek_usb2_asic.h @@ -256,19 +256,6 @@ typedef struct } Asic, *PAsic; -typedef enum -{ - STATUS_GOOD = 0, - STATUS_CANCELLED, - STATUS_EOF, - STATUS_DEVICE_BUSY, - STATUS_INVAL, - STATUS_MEM_ERROR, - STATUS_IO_ERROR, - STATUS_ACCESS_ERROR -} -STATUS; - /* For ScanObj */ typedef struct Point @@ -1211,107 +1198,107 @@ RGBColor; #define ES01_2CF_VALID_PIXEL_PARAMETER_OF_SEGMENT16 0x2CF /* forward declarations */ -static STATUS OpenScanChip (PAsic chip); -static STATUS CloseScanChip (PAsic chip); -static STATUS SafeInitialChip (PAsic chip); -static STATUS DRAM_Test (PAsic chip); +static SANE_Status OpenScanChip (PAsic chip); +static SANE_Status CloseScanChip (PAsic chip); +static SANE_Status SafeInitialChip (PAsic chip); +static SANE_Status DRAM_Test (PAsic chip); #if SANE_UNUSED -static STATUS SetPowerSave (PAsic chip); +static SANE_Status SetPowerSave (PAsic chip); #endif -static STATUS SetLineTimeAndExposure (PAsic chip); -static STATUS CCDTiming (PAsic chip); -static STATUS IsCarriageHome (PAsic chip, SANE_Bool * LampHome, SANE_Bool * TAHome); -static STATUS InitTiming (PAsic chip); -static STATUS GetChipStatus (PAsic chip, SANE_Byte Selector, SANE_Byte * ChipStatus); -static STATUS SetAFEGainOffset (PAsic chip); -static STATUS SetLEDTime (PAsic chip); -static STATUS SetScanMode (PAsic chip, SANE_Byte bScanBits); -static STATUS SetPackAddress (PAsic chip, unsigned short wXResolution, - unsigned short wWidth, unsigned short wX, double XRatioAdderDouble, - double XRatioTypeDouble, - SANE_Byte byClear_Pulse_Width, - unsigned short * PValidPixelNumber); -static STATUS SetExtraSetting (PAsic chip, unsigned short wXResolution, - unsigned short wCCD_PixelNumber, SANE_Bool isCaribrate); +static SANE_Status SetLineTimeAndExposure (PAsic chip); +static SANE_Status CCDTiming (PAsic chip); +static SANE_Status IsCarriageHome (PAsic chip, SANE_Bool * LampHome, SANE_Bool * TAHome); +static SANE_Status InitTiming (PAsic chip); +static SANE_Status GetChipStatus (PAsic chip, SANE_Byte Selector, SANE_Byte * ChipStatus); +static SANE_Status SetAFEGainOffset (PAsic chip); +static SANE_Status SetLEDTime (PAsic chip); +static SANE_Status SetScanMode (PAsic chip, SANE_Byte bScanBits); +static SANE_Status SetPackAddress (PAsic chip, unsigned short wXResolution, + unsigned short wWidth, unsigned short wX, double XRatioAdderDouble, + double XRatioTypeDouble, + SANE_Byte byClear_Pulse_Width, + unsigned short * PValidPixelNumber); +static SANE_Status SetExtraSetting (PAsic chip, unsigned short wXResolution, + unsigned short wCCD_PixelNumber, SANE_Bool isCaribrate); /* Forward declarations */ -static STATUS Mustek_SendData (PAsic chip, unsigned short reg, SANE_Byte data); -static STATUS Mustek_SendData2Byte (PAsic chip, unsigned short reg, SANE_Byte data); -static STATUS Mustek_ReceiveData (PAsic chip, SANE_Byte * reg); -static STATUS Mustek_WriteAddressLineForRegister (PAsic chip, SANE_Byte x); -static STATUS WriteIOControl (PAsic chip, unsigned short wValue, unsigned short wIndex, - unsigned short wLength, SANE_Byte * lpbuf); -static STATUS ReadIOControl (PAsic chip, unsigned short wValue, unsigned short wIndex, - unsigned short wLength, SANE_Byte * lpbuf); -static STATUS Mustek_DMARead (PAsic chip, unsigned int size, SANE_Byte * lpdata); -static STATUS Mustek_DMAWrite (PAsic chip, unsigned int size, SANE_Byte * lpdata); -static STATUS Mustek_ClearFIFO (PAsic chip); -static STATUS SetRWSize (PAsic chip, SANE_Byte ReadWrite, unsigned int size); +static SANE_Status Mustek_SendData (PAsic chip, unsigned short reg, SANE_Byte data); +static SANE_Status Mustek_SendData2Byte (PAsic chip, unsigned short reg, SANE_Byte data); +static SANE_Status Mustek_ReceiveData (PAsic chip, SANE_Byte * reg); +static SANE_Status Mustek_WriteAddressLineForRegister (PAsic chip, SANE_Byte x); +static SANE_Status WriteIOControl (PAsic chip, unsigned short wValue, unsigned short wIndex, + unsigned short wLength, SANE_Byte * lpbuf); +static SANE_Status ReadIOControl (PAsic chip, unsigned short wValue, unsigned short wIndex, + unsigned short wLength, SANE_Byte * lpbuf); +static SANE_Status Mustek_DMARead (PAsic chip, unsigned int size, SANE_Byte * lpdata); +static SANE_Status Mustek_DMAWrite (PAsic chip, unsigned int size, SANE_Byte * lpdata); +static SANE_Status Mustek_ClearFIFO (PAsic chip); +static SANE_Status SetRWSize (PAsic chip, SANE_Byte ReadWrite, unsigned int size); /* Open Scanner by Scanner Name and return Chip Information */ -static STATUS Asic_Open (PAsic chip, SANE_Byte *pDeviceName); +static SANE_Status Asic_Open (PAsic chip, SANE_Byte *pDeviceName); /* Close Scanner */ -static STATUS Asic_Close (PAsic chip); +static SANE_Status Asic_Close (PAsic chip); #if SANE_UNUSED /* Release Scanner Resource */ -static STATUS Asic_Release (PAsic chip); +static SANE_Status Asic_Release (PAsic chip); #endif /* Initialize Scanner Parameters */ -static STATUS Asic_Initialize (PAsic chip); +static SANE_Status Asic_Initialize (PAsic chip); /* Set Scan Window */ -static STATUS Asic_SetWindow (PAsic chip, SANE_Byte bScanBits, - unsigned short wXResolution, unsigned short wYResolution, - unsigned short wX, unsigned short wY, unsigned short wWidth, unsigned short wLength); +static SANE_Status Asic_SetWindow (PAsic chip, SANE_Byte bScanBits, + unsigned short wXResolution, unsigned short wYResolution, + unsigned short wX, unsigned short wY, unsigned short wWidth, unsigned short wLength); /* Turn Lamp ON or OFF */ -static STATUS Asic_TurnLamp (PAsic chip, SANE_Bool isLampOn); +static SANE_Status Asic_TurnLamp (PAsic chip, SANE_Bool isLampOn); /* Turn TA ON or OFF */ -static STATUS Asic_TurnTA (PAsic chip, SANE_Bool isTAOn); +static SANE_Status Asic_TurnTA (PAsic chip, SANE_Bool isTAOn); /* Reset some parameter of asic */ -static STATUS Asic_Reset (PAsic chip); +static SANE_Status Asic_Reset (PAsic chip); /* Set scan source */ -static STATUS Asic_SetSource (PAsic chip, LIGHTSOURCE lsLightSource); +static SANE_Status Asic_SetSource (PAsic chip, LIGHTSOURCE lsLightSource); /* Start scanner to scan */ -static STATUS Asic_ScanStart (PAsic chip); +static SANE_Status Asic_ScanStart (PAsic chip); /* Stop scanner to scan */ -static STATUS Asic_ScanStop (PAsic chip); +static SANE_Status Asic_ScanStop (PAsic chip); /* Read One Scan Line When Scanning */ -static STATUS Asic_ReadImage (PAsic chip, SANE_Byte * pBuffer, unsigned short LinesCount); +static SANE_Status Asic_ReadImage (PAsic chip, SANE_Byte * pBuffer, unsigned short LinesCount); #if SANE_UNUSED /* To Check Hard Key */ -static STATUS Asic_CheckFunctionKey (PAsic chip, SANE_Byte * key); +static SANE_Status Asic_CheckFunctionKey (PAsic chip, SANE_Byte * key); #endif /* To Check if TA id connected */ -static STATUS Asic_IsTAConnected (PAsic chip, SANE_Bool *hasTA); +static SANE_Status Asic_IsTAConnected (PAsic chip, SANE_Bool *hasTA); #if SANE_UNUSED /* Download GammaTable to Scanner */ -static STATUS Asic_DownloadGammaTable (PAsic chip, void * lpBuffer); +static SANE_Status Asic_DownloadGammaTable (PAsic chip, void * lpBuffer); #endif /* For AdjustAD Calculate Scanner*/ -static STATUS Asic_ReadCalibrationData (PAsic chip, void * pBuffer, - unsigned int dwXferBytes, SANE_Byte bScanBits); +static SANE_Status Asic_ReadCalibrationData (PAsic chip, void * pBuffer, + unsigned int dwXferBytes, SANE_Byte bScanBits); /* Set motor move or not */ -static STATUS Asic_SetMotorType (PAsic chip, SANE_Bool isMotorMove, SANE_Bool isUniformSpeed); +static SANE_Status Asic_SetMotorType (PAsic chip, SANE_Bool isMotorMove, SANE_Bool isUniformSpeed); /* Move Motor Forward or Backward */ -static STATUS Asic_MotorMove (PAsic chip, SANE_Bool isForward, unsigned int dwTotalSteps); +static SANE_Status Asic_MotorMove (PAsic chip, SANE_Bool isForward, unsigned int dwTotalSteps); /* Move Motor to Home. */ /* If isTA is TRUE, move TA to home, else move Lamp to home */ -static STATUS Asic_CarriageHome (PAsic chip, SANE_Bool isTA); +static SANE_Status Asic_CarriageHome (PAsic chip, SANE_Bool isTA); /* For ShadingTable */ -static STATUS Asic_SetShadingTable (PAsic chip, unsigned short * lpWhiteShading, - unsigned short * lpDarkShading, - unsigned short wXResolution, unsigned short wWidth, unsigned short wX); +static SANE_Status Asic_SetShadingTable (PAsic chip, unsigned short * lpWhiteShading, + unsigned short * lpDarkShading, + unsigned short wXResolution, unsigned short wWidth, unsigned short wX); /* Wait motor move to home. isTA no used */ -static STATUS Asic_WaitCarriageHome (PAsic chip, SANE_Bool isTA); +static SANE_Status Asic_WaitCarriageHome (PAsic chip, SANE_Bool isTA); /* Wait until asic idle */ -static STATUS Asic_WaitUnitReady (PAsic chip); +static SANE_Status Asic_WaitUnitReady (PAsic chip); /* Set Scan Parameter to Scanner */ -static STATUS Asic_SetCalibrate (PAsic chip, SANE_Byte bScanBits, unsigned short wXResolution, - unsigned short wYResolution, unsigned short wX, unsigned short wY, - unsigned short wWidth, unsigned short wLength, SANE_Bool isShading); +static SANE_Status Asic_SetCalibrate (PAsic chip, SANE_Byte bScanBits, unsigned short wXResolution, + unsigned short wYResolution, unsigned short wX, unsigned short wY, + unsigned short wWidth, unsigned short wLength, SANE_Bool isShading); /* Set AFE Parameter to Scanner */ -static STATUS Asic_SetAFEGainOffset (PAsic chip); +static SANE_Status Asic_SetAFEGainOffset (PAsic chip); /* ---------------------- asic motor defines -------------------------- */ @@ -1393,27 +1380,27 @@ typedef struct tagLLF_MOTORMOVE unsigned short wScanBackHomeExtSteps; } LLF_MOTORMOVE; -static STATUS CalculateMotorTable (LLF_CALCULATEMOTORTABLE * - lpCalculateMotorTable, unsigned short wYResolution); -static STATUS LLFCalculateMotorTable (LLF_CALCULATEMOTORTABLE * - lpCalculateMotorTable); -static STATUS LLFSetMotorCurrentAndPhase (PAsic chip, - LLF_MOTOR_CURRENT_AND_PHASE * - MotorCurrentAndPhase); -static STATUS SetMotorStepTable (PAsic chip, LLF_MOTORMOVE * MotorStepsTable, - unsigned short wStartY, unsigned int dwScanImageSteps, - unsigned short wYResolution); -static STATUS LLFSetMotorTable (PAsic chip, - LLF_SETMOTORTABLE * LLF_SetMotorTable); -static STATUS SetMotorCurrent (PAsic chip, unsigned short dwMotorSpeed, - LLF_MOTOR_CURRENT_AND_PHASE * CurrentPhase); -static STATUS LLFMotorMove (PAsic chip, LLF_MOTORMOVE * LLF_MotorMove); +static SANE_Status CalculateMotorTable (LLF_CALCULATEMOTORTABLE * + lpCalculateMotorTable, unsigned short wYResolution); +static SANE_Status LLFCalculateMotorTable (LLF_CALCULATEMOTORTABLE * + lpCalculateMotorTable); +static SANE_Status LLFSetMotorCurrentAndPhase (PAsic chip, + LLF_MOTOR_CURRENT_AND_PHASE * + MotorCurrentAndPhase); +static SANE_Status SetMotorStepTable (PAsic chip, LLF_MOTORMOVE * MotorStepsTable, + unsigned short wStartY, unsigned int dwScanImageSteps, + unsigned short wYResolution); +static SANE_Status LLFSetMotorTable (PAsic chip, + LLF_SETMOTORTABLE * LLF_SetMotorTable); +static SANE_Status SetMotorCurrent (PAsic chip, unsigned short dwMotorSpeed, + LLF_MOTOR_CURRENT_AND_PHASE * CurrentPhase); +static SANE_Status LLFMotorMove (PAsic chip, LLF_MOTORMOVE * LLF_MotorMove); #if SANE_UNUSED -static STATUS LLFStopMotorMove (PAsic chip); +static SANE_Status LLFStopMotorMove (PAsic chip); #endif -static STATUS LLFSetRamAddress (PAsic chip, unsigned int dwStartAddr, - unsigned int dwEndAddr, SANE_Byte byAccessTarget); -static STATUS LLFRamAccess (PAsic chip, LLF_RAMACCESS * RamAccess); -static STATUS MotorBackHome (PAsic chip, SANE_Byte WaitOrNoWait); +static SANE_Status LLFSetRamAddress (PAsic chip, unsigned int dwStartAddr, + unsigned int dwEndAddr, SANE_Byte byAccessTarget); +static SANE_Status LLFRamAccess (PAsic chip, LLF_RAMACCESS * RamAccess); +static SANE_Status MotorBackHome (PAsic chip, SANE_Byte WaitOrNoWait); #endif diff --git a/backend/mustek_usb2_high.c b/backend/mustek_usb2_high.c index 5119d55..e8b067f 100644 --- a/backend/mustek_usb2_high.c +++ b/backend/mustek_usb2_high.c @@ -204,13 +204,13 @@ MustScanner_Init () DBG (DBG_FUNC, "MustScanner_Init: Call in\n"); g_chip.firmwarestate = FS_NULL; - if (STATUS_GOOD != Asic_Open (&g_chip, g_pDeviceFile)) + if (SANE_STATUS_GOOD != Asic_Open (&g_chip, g_pDeviceFile)) { DBG (DBG_FUNC, "MustScanner_Init: Asic_Open return error\n"); return FALSE; } - if (STATUS_GOOD != Asic_Initialize (&g_chip)) + if (SANE_STATUS_GOOD != Asic_Initialize (&g_chip)) { DBG (DBG_FUNC, "MustScanner_Init: Asic_Initialize return error\n"); return FALSE; @@ -263,7 +263,7 @@ static SANE_Bool MustScanner_GetScannerState () { - if (STATUS_GOOD != Asic_Open (&g_chip, g_pDeviceFile)) + if (SANE_STATUS_GOOD != Asic_Open (&g_chip, g_pDeviceFile)) { DBG (DBG_FUNC, "MustScanner_GetScannerState: Asic_Open return error\n"); return FALSE; @@ -293,20 +293,20 @@ MustScanner_PowerControl (SANE_Bool isLampOn, SANE_Bool isTALampOn) { SANE_Bool hasTA; DBG (DBG_FUNC, "MustScanner_PowerControl: Call in\n"); - if (STATUS_GOOD != Asic_Open (&g_chip, g_pDeviceFile)) + if (SANE_STATUS_GOOD != Asic_Open (&g_chip, g_pDeviceFile)) { DBG (DBG_FUNC, "MustScanner_PowerControl: Asic_Open return error\n"); return FALSE; } - if (STATUS_GOOD != Asic_TurnLamp (&g_chip, isLampOn)) + if (SANE_STATUS_GOOD != Asic_TurnLamp (&g_chip, isLampOn)) { DBG (DBG_FUNC, "MustScanner_PowerControl: Asic_TurnLamp return error\n"); return FALSE; } - if (STATUS_GOOD != Asic_IsTAConnected (&g_chip, &hasTA)) + if (SANE_STATUS_GOOD != Asic_IsTAConnected (&g_chip, &hasTA)) { DBG (DBG_FUNC, "MustScanner_PowerControl: Asic_IsTAConnected return error\n"); @@ -315,7 +315,7 @@ MustScanner_PowerControl (SANE_Bool isLampOn, SANE_Bool isTALampOn) if (hasTA) { - if (STATUS_GOOD != Asic_TurnTA (&g_chip, isTALampOn)) + if (SANE_STATUS_GOOD != Asic_TurnTA (&g_chip, isTALampOn)) { DBG (DBG_FUNC, "MustScanner_PowerControl: Asic_TurnTA return error\n"); @@ -347,20 +347,20 @@ MustScanner_BackHome () { DBG (DBG_FUNC, "MustScanner_BackHome: call in \n"); - if (STATUS_GOOD != Asic_Open (&g_chip, g_pDeviceFile)) + if (SANE_STATUS_GOOD != Asic_Open (&g_chip, g_pDeviceFile)) { DBG (DBG_FUNC, "MustScanner_BackHome: Asic_Open return error\n"); return FALSE; } - if (STATUS_GOOD != Asic_CarriageHome (&g_chip, FALSE)) + if (SANE_STATUS_GOOD != Asic_CarriageHome (&g_chip, FALSE)) { DBG (DBG_FUNC, "MustScanner_BackHome: Asic_CarriageHome return error\n"); return FALSE; } - if (STATUS_GOOD != Asic_WaitUnitReady (&g_chip)) + if (SANE_STATUS_GOOD != Asic_WaitUnitReady (&g_chip)) { DBG (DBG_FUNC, "MustScanner_BackHome: Asic_WaitUnitReady return error\n"); @@ -390,14 +390,14 @@ MustScanner_Prepare (SANE_Byte bScanSource) { DBG (DBG_FUNC, "MustScanner_Prepare: call in\n"); - if (STATUS_GOOD != Asic_Open (&g_chip, g_pDeviceFile)) + if (SANE_STATUS_GOOD != Asic_Open (&g_chip, g_pDeviceFile)) { DBG (DBG_FUNC, "MustScanner_Prepare: Asic_Open return error\n"); return FALSE; } - if (STATUS_GOOD != Asic_WaitUnitReady (&g_chip)) + if (SANE_STATUS_GOOD != Asic_WaitUnitReady (&g_chip)) { DBG (DBG_FUNC, "MustScanner_Prepare: Asic_WaitUnitReady return error\n"); @@ -407,13 +407,13 @@ MustScanner_Prepare (SANE_Byte bScanSource) if (SS_Reflective == bScanSource) { DBG (DBG_FUNC, "MustScanner_Prepare:ScanSource is SS_Reflective\n"); - if (STATUS_GOOD != Asic_TurnLamp (&g_chip, TRUE)) + if (SANE_STATUS_GOOD != Asic_TurnLamp (&g_chip, TRUE)) { DBG (DBG_FUNC, "MustScanner_Prepare: Asic_TurnLamp return error\n"); return FALSE; } - if (STATUS_GOOD != Asic_SetSource (&g_chip, LS_REFLECTIVE)) + if (SANE_STATUS_GOOD != Asic_SetSource (&g_chip, LS_REFLECTIVE)) { DBG (DBG_FUNC, "MustScanner_Prepare: Asic_SetSource return error\n"); @@ -423,12 +423,12 @@ MustScanner_Prepare (SANE_Byte bScanSource) else if (SS_Positive == bScanSource) { DBG (DBG_FUNC, "MustScanner_Prepare:ScanSource is SS_Positive\n"); - if (STATUS_GOOD != Asic_TurnTA (&g_chip, TRUE)) + if (SANE_STATUS_GOOD != Asic_TurnTA (&g_chip, TRUE)) { DBG (DBG_FUNC, "MustScanner_Prepare: Asic_TurnTA return error\n"); return FALSE; } - if (STATUS_GOOD != Asic_SetSource (&g_chip, LS_POSITIVE)) + if (SANE_STATUS_GOOD != Asic_SetSource (&g_chip, LS_POSITIVE)) { DBG (DBG_FUNC, "MustScanner_Prepare: Asic_SetSource return error\n"); @@ -439,13 +439,13 @@ MustScanner_Prepare (SANE_Byte bScanSource) { DBG (DBG_FUNC, "MustScanner_Prepare:ScanSource is SS_Negative\n"); - if (STATUS_GOOD != Asic_TurnTA (&g_chip, TRUE)) + if (SANE_STATUS_GOOD != Asic_TurnTA (&g_chip, TRUE)) { DBG (DBG_FUNC, "MustScanner_Prepare: Asic_TurnTA return error\n"); return FALSE; } - if (STATUS_GOOD != Asic_SetSource (&g_chip, LS_NEGATIVE)) + if (SANE_STATUS_GOOD != Asic_SetSource (&g_chip, LS_NEGATIVE)) { DBG (DBG_FUNC, "MustScanner_Prepare: Asic_SetSource return error\n"); @@ -2132,7 +2132,7 @@ MustScanner_GetMono16BitLine (SANE_Byte * lpLine, SANE_Bool isOrderInvert, unsigned short wLinePos = 0; unsigned short i; - isOrderInvert = isOrderInvert; + (void) isOrderInvert; DBG (DBG_FUNC, "MustScanner_GetMono16BitLine: call in\n"); @@ -2228,7 +2228,7 @@ MustScanner_GetMono16BitLine1200DPI (SANE_Byte * lpLine, SANE_Bool isOrderInvert unsigned short i; SANE_Byte * lpTemp = lpLine; - isOrderInvert = isOrderInvert; + (void) isOrderInvert; DBG (DBG_FUNC, "MustScanner_GetMono16BitLine1200DPI: call in\n"); TotalXferLines = 0; @@ -2407,7 +2407,7 @@ MustScanner_GetMono8BitLine (SANE_Byte * lpLine, SANE_Bool isOrderInvert, unsigned short i; unsigned short wLinePos = 0; - isOrderInvert = isOrderInvert; + (void) isOrderInvert; DBG (DBG_FUNC, "MustScanner_GetMono8BitLine: call in\n"); TotalXferLines = 0; @@ -2502,7 +2502,7 @@ MustScanner_GetMono8BitLine1200DPI (SANE_Byte * lpLine, SANE_Bool isOrderInvert, unsigned short i; SANE_Byte bNextPixel = 0; - isOrderInvert = isOrderInvert; + (void) isOrderInvert; DBG (DBG_FUNC, "MustScanner_GetMono8BitLine1200DPI: call in\n"); TotalXferLines = 0; @@ -2660,7 +2660,7 @@ MustScanner_GetMono1BitLine (SANE_Byte * lpLine, SANE_Bool isOrderInvert, unsigned short wLinePos; unsigned short i; - isOrderInvert = isOrderInvert; + (void) isOrderInvert; DBG (DBG_FUNC, "MustScanner_GetMono1BitLine: call in\n"); @@ -2752,7 +2752,7 @@ MustScanner_GetMono1BitLine1200DPI (SANE_Byte * lpLine, SANE_Bool isOrderInvert, unsigned short wLinePosOdd; unsigned short wLinePosEven; - isOrderInvert = isOrderInvert; + (void) isOrderInvert; DBG (DBG_FUNC, "MustScanner_GetMono1BitLine1200DPI: call in\n"); @@ -2919,7 +2919,7 @@ MustScanner_CalculateMaxMin (SANE_Byte * pBuffer, unsigned short * lpMaxValue, unsigned short *wSecData = NULL, *wDarkSecData = NULL; int i, j; - wResolution = wResolution; + (void) wResolution; wSecData = (unsigned short *) malloc (sizeof (unsigned short) * g_nSecNum); if (wSecData == NULL) @@ -3001,7 +3001,7 @@ MustScanner_ReadDataFromScanner (void * dummy) unsigned short wScanLinesThisBlock; unsigned short wBufferLines = g_wLineDistance * 2 + g_wPixelDistance; - dummy = dummy; + (void) dummy; DBG (DBG_FUNC, "MustScanner_ReadDataFromScanner: call in, and in new thread\n"); @@ -3023,7 +3023,7 @@ MustScanner_ReadDataFromScanner (void * dummy) "MustScanner_ReadDataFromScanner: wScanLinesThisBlock=%d\n", wScanLinesThisBlock); - if (STATUS_GOOD != + if (SANE_STATUS_GOOD != Asic_ReadImage (&g_chip, lpReadImage, wScanLinesThisBlock)) { DBG (DBG_FUNC, diff --git a/backend/mustek_usb2_reflective.c b/backend/mustek_usb2_reflective.c index baf80e4..ed37296 100644 --- a/backend/mustek_usb2_reflective.c +++ b/backend/mustek_usb2_reflective.c @@ -82,31 +82,31 @@ Reflective_Reset () return FALSE; } - if (STATUS_GOOD != Asic_Open (&g_chip, g_pDeviceFile)) + if (SANE_STATUS_GOOD != Asic_Open (&g_chip, g_pDeviceFile)) { DBG (DBG_FUNC, "Reflective_Reset: Asic_Open return error\n"); return FALSE; } - if (STATUS_GOOD != Asic_Reset (&g_chip)) + if (SANE_STATUS_GOOD != Asic_Reset (&g_chip)) { DBG (DBG_FUNC, "Reflective_Reset: Asic_Reset return error\n"); return FALSE; } - if (STATUS_GOOD != Asic_SetSource (&g_chip, LS_REFLECTIVE)) + if (SANE_STATUS_GOOD != Asic_SetSource (&g_chip, LS_REFLECTIVE)) { DBG (DBG_FUNC, "Reflective_Reset: Asic_SetSource return error\n"); return FALSE; } - if (STATUS_GOOD != Asic_TurnLamp (&g_chip, TRUE)) + if (SANE_STATUS_GOOD != Asic_TurnLamp (&g_chip, TRUE)) { DBG (DBG_FUNC, "Reflective_Reset: Asic_TurnLamp return error\n"); return FALSE; } - if (STATUS_GOOD != Asic_Close (&g_chip)) + if (SANE_STATUS_GOOD != Asic_Close (&g_chip)) { DBG (DBG_FUNC, "Reflective_Reset: Asic_Close return error\n"); return FALSE; @@ -362,7 +362,7 @@ Reflective_SetupScan (COLORMODE ColorMode, unsigned short YDpi, SANE_Bool isInvert, unsigned short X, unsigned short Y, unsigned short Width, unsigned short Height) { - isInvert = isInvert; + (void) isInvert; DBG (DBG_FUNC, "Reflective_SetupScan: Call in\n"); if (g_bOpened) { @@ -439,7 +439,7 @@ Reflective_SetupScan (COLORMODE ColorMode, break; } - if (Asic_Open (&g_chip, g_pDeviceFile) != STATUS_GOOD) + if (Asic_Open (&g_chip, g_pDeviceFile) != SANE_STATUS_GOOD) { DBG (DBG_FUNC, "Reflective_SetupScan: Asic_Open return error\n"); return FALSE; @@ -1153,7 +1153,7 @@ Reflective_FindTopLeft (unsigned short * lpwStartX, unsigned short * lpwStartY) Asic_SetCalibrate (&g_chip, 8, wXResolution, wYResolution, 0, 0, wCalWidth, wCalHeight, FALSE); Asic_SetAFEGainOffset (&g_chip); - if (Asic_ScanStart (&g_chip) != STATUS_GOOD) + if (Asic_ScanStart (&g_chip) != SANE_STATUS_GOOD) { DBG (DBG_FUNC, "Reflective_FindTopLeft: Asic_ScanStart return error\n"); free (lpCalData); @@ -1162,7 +1162,7 @@ Reflective_FindTopLeft (unsigned short * lpwStartX, unsigned short * lpwStartY) for (i = 0; i < nScanBlock; i++) { - if (STATUS_GOOD != + if (SANE_STATUS_GOOD != Asic_ReadCalibrationData (&g_chip, lpCalData + i * g_dwCalibrationSize, g_dwCalibrationSize, 8)) @@ -1174,7 +1174,7 @@ Reflective_FindTopLeft (unsigned short * lpwStartX, unsigned short * lpwStartY) } } - if (STATUS_GOOD != + if (SANE_STATUS_GOOD != Asic_ReadCalibrationData (&g_chip, lpCalData + (nScanBlock) * g_dwCalibrationSize, @@ -1340,7 +1340,7 @@ Return value: static SANE_Bool Reflective_LineCalibration16Bits () { - STATUS status; + SANE_Status status; SANE_Byte * lpWhiteData; SANE_Byte * lpDarkData; unsigned int dwWhiteTotalSize; @@ -1403,7 +1403,7 @@ Reflective_LineCalibration16Bits () status = Asic_SetCalibrate (&g_chip, 48, g_XDpi, g_YDpi, g_X, 0, wCalWidth, wCalHeight, TRUE); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { DBG (DBG_FUNC, "Reflective_LineCalibration16Bits: Asic_SetCalibrate return error \n"); @@ -1415,7 +1415,7 @@ Reflective_LineCalibration16Bits () } status = Asic_ScanStart (&g_chip); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { DBG (DBG_FUNC, "Reflective_LineCalibration16Bits: Asic_ScanStart return error \n"); @@ -1427,7 +1427,7 @@ Reflective_LineCalibration16Bits () status = Asic_ReadCalibrationData (&g_chip, lpWhiteData, dwWhiteTotalSize, 8); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { free (lpWhiteData); free (lpDarkData); @@ -1438,7 +1438,7 @@ Reflective_LineCalibration16Bits () /*Read dark level data */ status = Asic_SetMotorType (&g_chip, FALSE, TRUE); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { DBG (DBG_FUNC, "Reflective_LineCalibration16Bits: Asic_SetMotorType return error \n"); @@ -1451,7 +1451,7 @@ Reflective_LineCalibration16Bits () status = Asic_SetCalibrate (&g_chip, 48, g_XDpi, g_YDpi, g_X, 0, wCalWidth, wCalHeight, TRUE); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { DBG (DBG_FUNC, "Reflective_LineCalibration16Bits: Asic_SetCalibrate return error \n"); @@ -1462,7 +1462,7 @@ Reflective_LineCalibration16Bits () } status = Asic_TurnLamp (&g_chip, FALSE); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { DBG (DBG_FUNC, "Reflective_LineCalibration16Bits: Asic_TurnLamp return error \n"); @@ -1475,7 +1475,7 @@ Reflective_LineCalibration16Bits () usleep (500000); status = Asic_ScanStart (&g_chip); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { DBG (DBG_FUNC, "Reflective_LineCalibration16Bits: Asic_ScanStart return error \n"); @@ -1486,7 +1486,7 @@ Reflective_LineCalibration16Bits () } status = Asic_ReadCalibrationData (&g_chip, lpDarkData, dwDarkTotalSize, 8); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { DBG (DBG_FUNC, "Reflective_LineCalibration16Bits: Asic_ReadCalibrationData return error \n"); @@ -1500,7 +1500,7 @@ Reflective_LineCalibration16Bits () /* Turn on lamp */ status = Asic_TurnLamp (&g_chip, TRUE); - if (status != STATUS_GOOD) + if (status != SANE_STATUS_GOOD) { DBG (DBG_FUNC, "Reflective_LineCalibration16Bits: Asic_TurnLamp return error \n"); diff --git a/backend/mustek_usb2_transparent.c b/backend/mustek_usb2_transparent.c index 21c7734..1c4b91b 100644 --- a/backend/mustek_usb2_transparent.c +++ b/backend/mustek_usb2_transparent.c @@ -82,37 +82,37 @@ Transparent_Reset () DBG (DBG_FUNC, "Transparent_Reset: scanner has been opened\n"); return FALSE; } - if (STATUS_GOOD != Asic_Open (&g_chip, g_pDeviceFile)) + if (SANE_STATUS_GOOD != Asic_Open (&g_chip, g_pDeviceFile)) { DBG (DBG_FUNC, "Transparent_Reset: can not open scanner\n"); return FALSE; } - if (STATUS_GOOD != Asic_Reset (&g_chip)) + if (SANE_STATUS_GOOD != Asic_Reset (&g_chip)) { DBG (DBG_FUNC, "Reflective_Reset: Asic_Reset return error\n"); return FALSE; } - if (STATUS_GOOD != Asic_SetSource (&g_chip, LS_POSITIVE)) + if (SANE_STATUS_GOOD != Asic_SetSource (&g_chip, LS_POSITIVE)) { DBG (DBG_FUNC, "Reflective_Reset: Asic_SetSource return error\n"); return FALSE; } - if (STATUS_GOOD != Asic_TurnLamp (&g_chip, FALSE)) + if (SANE_STATUS_GOOD != Asic_TurnLamp (&g_chip, FALSE)) { DBG (DBG_FUNC, "Reflective_Reset: Asic_TurnLamp return error\n"); return FALSE; } - if (STATUS_GOOD != Asic_TurnTA (&g_chip, TRUE)) + if (SANE_STATUS_GOOD != Asic_TurnTA (&g_chip, TRUE)) { DBG (DBG_FUNC, "Reflective_Reset: Asic_TurnTA return error\n"); return FALSE; } - if (STATUS_GOOD != Asic_Close (&g_chip)) + if (SANE_STATUS_GOOD != Asic_Close (&g_chip)) { DBG (DBG_FUNC, "Reflective_Reset: Asic_Close return error\n"); return FALSE; @@ -305,7 +305,7 @@ Transparent_SetupScan (COLORMODE ColorMode, unsigned short XDpi, unsigned short SANE_Bool hasTA; unsigned short wTAShadingMinus = 0; - isInvert = isInvert; + (void) isInvert; DBG (DBG_FUNC, "Transparent_SetupScan: call in\n"); if (g_bOpened) @@ -391,7 +391,7 @@ Transparent_SetupScan (COLORMODE ColorMode, unsigned short XDpi, unsigned short break; } - if (Asic_Open (&g_chip, g_pDeviceFile) != STATUS_GOOD) + if (Asic_Open (&g_chip, g_pDeviceFile) != SANE_STATUS_GOOD) { DBG (DBG_FUNC, "Transparent_SetupScan: Asic_Open return error\n"); return FALSE; @@ -399,13 +399,13 @@ Transparent_SetupScan (COLORMODE ColorMode, unsigned short XDpi, unsigned short g_bOpened = TRUE; - if (STATUS_GOOD != Asic_TurnLamp (&g_chip, FALSE)) + if (SANE_STATUS_GOOD != Asic_TurnLamp (&g_chip, FALSE)) { DBG (DBG_FUNC, "Transparent_SetupScan: Asic_TurnLamp return error\n"); return FALSE; } - if (Asic_IsTAConnected (&g_chip, &hasTA) != STATUS_GOOD) + if (Asic_IsTAConnected (&g_chip, &hasTA) != SANE_STATUS_GOOD) { DBG (DBG_FUNC, "Transparent_SetupScan: Asic_IsTAConnected return error\n"); @@ -417,7 +417,7 @@ Transparent_SetupScan (COLORMODE ColorMode, unsigned short XDpi, unsigned short return FALSE; } - if (Asic_TurnTA (&g_chip, TRUE) != STATUS_GOOD) + if (Asic_TurnTA (&g_chip, TRUE) != SANE_STATUS_GOOD) { DBG (DBG_FUNC, "Transparent_SetupScan: Asic_TurnTA return error\n"); return FALSE; diff --git a/backend/mustek_usb_high.c b/backend/mustek_usb_high.c index 7b03475..8c89571 100644 --- a/backend/mustek_usb_high.c +++ b/backend/mustek_usb_high.c @@ -2672,7 +2672,7 @@ usb_high_scan_get_rgb_24_bit_line (Mustek_Usb_Device * dev, SANE_Byte * line, SANE_Word lines_left; DBG (5, "usb_high_scan_get_rgb_24_bit_line: start, dev=%p, line=%p, " - "is_order_invert=%d\n", (void *) dev, line, is_order_invert); + "is_order_invert=%d\n", (void *) dev, (void *) line, is_order_invert); RIE (usb_low_get_row (dev->chip, dev->green, &lines_left)); @@ -2701,7 +2701,7 @@ usb_high_scan_get_mono_8_bit_line (Mustek_Usb_Device * dev, SANE_Byte * line, SANE_Word lines_left; DBG (5, "usb_high_scan_get_mono_8_bit_line: start, dev=%p, line=%p, " - "is_order_invert=%d\n", (void *) dev, line, is_order_invert); + "is_order_invert=%d\n", (void *) dev, (void *) line, is_order_invert); RIE (usb_low_get_row (dev->chip, dev->green, &lines_left)); RIE (usb_high_cal_calibrate (dev->mono_calibrator, dev->green + diff --git a/backend/nec.c b/backend/nec.c index 66bfc9b..6de89a8 100644 --- a/backend/nec.c +++ b/backend/nec.c @@ -290,7 +290,7 @@ sense_handler(int fd, u_char *sense_buffer, void *ss) int sense_key; NEC_Sense_Data *sdat = (NEC_Sense_Data *) ss; - fd = fd; /* silence compilation warnings */ + (void) fd; /* silence compilation warnings */ #define add_sense_code sense_buffer[12] #define add_sense_qual sense_buffer[13] @@ -1890,7 +1890,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) NEC_New_Device *np; int i; - authorize = authorize; /* silence compilation warnings */ + (void) authorize; /* silence compilation warnings */ DBG_INIT (); DBG (10, "<< sane_init "); @@ -2079,7 +2079,7 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only) int i; DBG (10, "<< sane_get_devices "); - local_only = local_only; /* silence compilation warnings */ + (void) local_only; /* silence compilation warnings */ if (devlist) free (devlist); @@ -2714,7 +2714,7 @@ send_binary_g_table(NEC_Scanner *s, SANE_Word *a, int dtq) SANE_Status status; unsigned int i, j; - dtq = dtq; /* silence compilation warnings */ + (void) dtq; /* silence compilation warnings */ DBG(11, "<< send_binary_g_table\n"); @@ -3696,8 +3696,8 @@ sane_cancel (SANE_Handle handle) SANE_Status sane_set_io_mode (SANE_Handle handle, SANE_Bool non_blocking) { - handle = handle; - non_blocking = non_blocking; /* silence compilation warnings */ + (void) handle; + (void) non_blocking; /* silence compilation warnings */ DBG (10, "<< sane_set_io_mode"); DBG (10, ">>\n"); @@ -3708,8 +3708,8 @@ sane_set_io_mode (SANE_Handle handle, SANE_Bool non_blocking) SANE_Status sane_get_select_fd (SANE_Handle handle, SANE_Int * fd) { - handle = handle; - fd = fd; /* silence compilation warnings */ + (void) handle; + (void) fd; /* silence compilation warnings */ DBG (10, "<< sane_get_select_fd"); DBG (10, ">>\n"); diff --git a/backend/net.c b/backend/net.c index 7c4aae9..d16119a 100644 --- a/backend/net.c +++ b/backend/net.c @@ -705,9 +705,9 @@ net_avahi_resolve_callback (AvahiServiceResolver *r, AvahiIfIndex interface, Ava char *t; /* unused */ - interface = interface; - protocol = protocol; - userdata = userdata; + (void) interface; + (void) protocol; + (void) userdata; if (!r) return; @@ -759,8 +759,8 @@ net_avahi_browse_callback (AvahiServiceBrowser *b, AvahiIfIndex interface, Avahi AvahiProtocol proto; /* unused */ - flags = flags; - userdata = userdata; + (void) flags; + (void) userdata; if (!b) return; @@ -808,7 +808,7 @@ net_avahi_callback (AvahiClient *c, AvahiClientState state, void * userdata) int error; /* unused */ - userdata = userdata; + (void) userdata; if (!c) return; @@ -1201,7 +1201,7 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only) char *full_name; int i, num_devs; size_t len; -#define ASSERT_SPACE(n) \ +#define ASSERT_SPACE(n) do \ { \ if (devlist_len + (n) > devlist_size) \ { \ @@ -1216,7 +1216,7 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only) return SANE_STATUS_NO_MEM; \ } \ } \ - } + } while (0) DBG (3, "sane_get_devices: local_only = %d\n", local_only); @@ -2132,7 +2132,7 @@ sane_read (SANE_Handle handle, SANE_Byte * data, SANE_Int max_length, int is_even; DBG (3, "sane_read: handle=%p, data=%p, max_length=%d, length=%p\n", - handle, data, max_length, (void *) length); + handle, (void *) data, max_length, (void *) length); if (!length) { DBG (1, "sane_read: length == NULL\n"); diff --git a/backend/niash.c b/backend/niash.c index bce6c2f..91d99a9 100644 --- a/backend/niash.c +++ b/backend/niash.c @@ -1368,7 +1368,7 @@ sane_read (SANE_Handle h, SANE_Byte * buf, SANE_Int maxlen, SANE_Int * len) TDataPipe *p; TModeParam const *pMode; - DBG (DBG_MSG, "sane_read: buf=%p, maxlen=%d, ", buf, maxlen); + DBG (DBG_MSG, "sane_read: buf=%p, maxlen=%d, ", (void *) buf, maxlen); s = (TScanner *) h; diff --git a/backend/p5.c b/backend/p5.c index 558d9d2..26d78c6 100644 --- a/backend/p5.c +++ b/backend/p5.c @@ -157,7 +157,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) { SANE_Status status; - authorize = authorize; /* get rid of compiler warning */ + (void) authorize; /* get rid of compiler warning */ init_count++; @@ -459,8 +459,8 @@ SANE_Status sane_get_select_fd (SANE_Handle handle, SANE_Int * fdp) { /* make compiler happy ... */ - handle = handle; - fdp = fdp; + (void) handle; + (void) fdp; DBG (DBG_proc, "sane_get_select_fd: start\n"); DBG (DBG_warn, "sane_get_select_fd: unsupported ...\n"); @@ -1595,7 +1595,7 @@ config_attach (SANEI_Config __sane_unused__ * config, const char *devname, /* currently, the config is a global variable so config is useless here */ /* the correct thing would be to have a generic sanei_attach_matching_devices * using an attach function with a config parameter */ - config = config; + (void) config; /* the devname has been processed and is ready to be used * directly. The config struct contains all the configuration data for diff --git a/backend/p5_device.c b/backend/p5_device.c index a9026f0..83bf63c 100644 --- a/backend/p5_device.c +++ b/backend/p5_device.c @@ -55,7 +55,7 @@ addr_name (uint16_t addr) */ static uint8_t -inb (int fd, uint16_t addr) +p5_inb (int fd, uint16_t addr) { #ifdef HAVE_LINUX_PPDEV_H uint8_t val = 0xff; @@ -84,7 +84,7 @@ inb (int fd, uint16_t addr) rc = read (fd, &val, 1); break; default: - DBG (DBG_error, "inb(%s) escaped ppdev\n", addr_name (addr)); + DBG (DBG_error, "p5_inb(%s) escaped ppdev\n", addr_name (addr)); return 0xFF; } if (rc < 0) @@ -100,7 +100,7 @@ inb (int fd, uint16_t addr) } static void -outb (int fd, uint16_t addr, uint8_t value) +p5_outb (int fd, uint16_t addr, uint8_t value) { #ifdef HAVE_LINUX_PPDEV_H int rc = 0, mode = 0xff; @@ -134,7 +134,7 @@ outb (int fd, uint16_t addr, uint8_t value) rc = write (fd, &value, 1); break; default: - DBG (DBG_error, "outb(%s,0x%02x) escaped ppdev\n", addr_name (addr), + DBG (DBG_error, "p5_outb(%s,0x%02x) escaped ppdev\n", addr_name (addr), value); break; } @@ -157,8 +157,8 @@ write_reg (int fd, uint8_t index, uint8_t value) idx = index & 0x0F; DBG (DBG_io2, "write_reg(REG%X,0x%x)\n", idx, value); idx = idx << 4 | idx; - outb (fd, EPPADR, idx); - outb (fd, EPPDATA, value); + p5_outb (fd, EPPADR, idx); + p5_outb (fd, EPPDATA, value); } static uint8_t @@ -169,8 +169,8 @@ read_reg (int fd, uint8_t index) /* both nibbles hold the same value */ idx = index & 0x0F; idx = idx << 4 | idx; - outb (fd, EPPADR, idx); - return inb (fd, EPPDATA); + p5_outb (fd, EPPADR, idx); + return p5_inb (fd, EPPDATA); } #ifdef HAVE_LINUX_PPDEV_H @@ -311,7 +311,7 @@ memtest (int fd, uint16_t addr) } -#define INB(k,y,z) val=inb(k,y); if(val!=z) { DBG(DBG_error,"expected 0x%02x, got 0x%02x\n",z, val); return SANE_FALSE; } +#define P5_INB(k,y,z) val=p5_inb(k,y); if(val!=z) { DBG(DBG_error,"expected 0x%02x, got 0x%02x\n",z, val); return SANE_FALSE; } /** @brief connect to scanner * This function sends the connect sequence for the scanner. @@ -323,66 +323,66 @@ connect (int fd) { uint8_t val; - inb (fd, CONTROL); - outb (fd, CONTROL, 0x04); - outb (fd, DATA, 0x02); - INB (fd, DATA, 0x02); - outb (fd, DATA, 0x03); - INB (fd, DATA, 0x03); - outb (fd, DATA, 0x03); - outb (fd, DATA, 0x83); - outb (fd, DATA, 0x03); - outb (fd, DATA, 0x83); - INB (fd, DATA, 0x83); - outb (fd, DATA, 0x82); - INB (fd, DATA, 0x82); - outb (fd, DATA, 0x02); - outb (fd, DATA, 0x82); - outb (fd, DATA, 0x02); - outb (fd, DATA, 0x82); - INB (fd, DATA, 0x82); - outb (fd, DATA, 0x82); - INB (fd, DATA, 0x82); - outb (fd, DATA, 0x02); - outb (fd, DATA, 0x82); - outb (fd, DATA, 0x02); - outb (fd, DATA, 0x82); - INB (fd, DATA, 0x82); - outb (fd, DATA, 0x83); - INB (fd, DATA, 0x83); - outb (fd, DATA, 0x03); - outb (fd, DATA, 0x83); - outb (fd, DATA, 0x03); - outb (fd, DATA, 0x83); - INB (fd, DATA, 0x83); - outb (fd, DATA, 0x82); - INB (fd, DATA, 0x82); - outb (fd, DATA, 0x02); - outb (fd, DATA, 0x82); - outb (fd, DATA, 0x02); - outb (fd, DATA, 0x82); - INB (fd, DATA, 0x82); - outb (fd, DATA, 0x83); - INB (fd, DATA, 0x83); - outb (fd, DATA, 0x03); - outb (fd, DATA, 0x83); - outb (fd, DATA, 0x03); - outb (fd, DATA, 0x83); - INB (fd, DATA, 0x83); - outb (fd, DATA, 0x83); - INB (fd, DATA, 0x83); - outb (fd, DATA, 0x03); - outb (fd, DATA, 0x83); - outb (fd, DATA, 0x03); - outb (fd, DATA, 0x83); - INB (fd, DATA, 0x83); - outb (fd, DATA, 0x82); - INB (fd, DATA, 0x82); - outb (fd, DATA, 0x02); - outb (fd, DATA, 0x82); - outb (fd, DATA, 0x02); - outb (fd, DATA, 0x82); - outb (fd, DATA, 0xFF); + p5_inb (fd, CONTROL); + p5_outb (fd, CONTROL, 0x04); + p5_outb (fd, DATA, 0x02); + P5_INB (fd, DATA, 0x02); + p5_outb (fd, DATA, 0x03); + P5_INB (fd, DATA, 0x03); + p5_outb (fd, DATA, 0x03); + p5_outb (fd, DATA, 0x83); + p5_outb (fd, DATA, 0x03); + p5_outb (fd, DATA, 0x83); + P5_INB (fd, DATA, 0x83); + p5_outb (fd, DATA, 0x82); + P5_INB (fd, DATA, 0x82); + p5_outb (fd, DATA, 0x02); + p5_outb (fd, DATA, 0x82); + p5_outb (fd, DATA, 0x02); + p5_outb (fd, DATA, 0x82); + P5_INB (fd, DATA, 0x82); + p5_outb (fd, DATA, 0x82); + P5_INB (fd, DATA, 0x82); + p5_outb (fd, DATA, 0x02); + p5_outb (fd, DATA, 0x82); + p5_outb (fd, DATA, 0x02); + p5_outb (fd, DATA, 0x82); + P5_INB (fd, DATA, 0x82); + p5_outb (fd, DATA, 0x83); + P5_INB (fd, DATA, 0x83); + p5_outb (fd, DATA, 0x03); + p5_outb (fd, DATA, 0x83); + p5_outb (fd, DATA, 0x03); + p5_outb (fd, DATA, 0x83); + P5_INB (fd, DATA, 0x83); + p5_outb (fd, DATA, 0x82); + P5_INB (fd, DATA, 0x82); + p5_outb (fd, DATA, 0x02); + p5_outb (fd, DATA, 0x82); + p5_outb (fd, DATA, 0x02); + p5_outb (fd, DATA, 0x82); + P5_INB (fd, DATA, 0x82); + p5_outb (fd, DATA, 0x83); + P5_INB (fd, DATA, 0x83); + p5_outb (fd, DATA, 0x03); + p5_outb (fd, DATA, 0x83); + p5_outb (fd, DATA, 0x03); + p5_outb (fd, DATA, 0x83); + P5_INB (fd, DATA, 0x83); + p5_outb (fd, DATA, 0x83); + P5_INB (fd, DATA, 0x83); + p5_outb (fd, DATA, 0x03); + p5_outb (fd, DATA, 0x83); + p5_outb (fd, DATA, 0x03); + p5_outb (fd, DATA, 0x83); + P5_INB (fd, DATA, 0x83); + p5_outb (fd, DATA, 0x82); + P5_INB (fd, DATA, 0x82); + p5_outb (fd, DATA, 0x02); + p5_outb (fd, DATA, 0x82); + p5_outb (fd, DATA, 0x02); + p5_outb (fd, DATA, 0x82); + p5_outb (fd, DATA, 0xFF); DBG (DBG_info, "connect() OK...\n"); return SANE_TRUE; } @@ -392,60 +392,60 @@ disconnect (int fd) { uint8_t val; - outb (fd, CONTROL, 0x04); - outb (fd, DATA, 0x00); - INB (fd, DATA, 0x00); - outb (fd, DATA, 0x01); - INB (fd, DATA, 0x01); - outb (fd, DATA, 0x01); - outb (fd, DATA, 0x81); - outb (fd, DATA, 0x01); - outb (fd, DATA, 0x81); - INB (fd, DATA, 0x81); - outb (fd, DATA, 0x80); - INB (fd, DATA, 0x80); - outb (fd, DATA, 0x00); - outb (fd, DATA, 0x80); - outb (fd, DATA, 0x00); - outb (fd, DATA, 0x80); - INB (fd, DATA, 0x80); - outb (fd, DATA, 0x80); - INB (fd, DATA, 0x80); - outb (fd, DATA, 0x00); - outb (fd, DATA, 0x80); - outb (fd, DATA, 0x00); - outb (fd, DATA, 0x80); - INB (fd, DATA, 0x80); - outb (fd, DATA, 0x81); - INB (fd, DATA, 0x81); - outb (fd, DATA, 0x01); - outb (fd, DATA, 0x81); - outb (fd, DATA, 0x01); - outb (fd, DATA, 0x81); - INB (fd, DATA, 0x81); - outb (fd, DATA, 0x80); - INB (fd, DATA, 0x80); - outb (fd, DATA, 0x00); - outb (fd, DATA, 0x80); - outb (fd, DATA, 0x00); - outb (fd, DATA, 0x80); - INB (fd, DATA, 0x80); - outb (fd, DATA, 0x00); - outb (fd, DATA, 0x80); - outb (fd, DATA, 0x00); - outb (fd, DATA, 0x80); - INB (fd, DATA, 0x80); - outb (fd, DATA, 0x00); - outb (fd, DATA, 0x80); - outb (fd, DATA, 0x00); - outb (fd, DATA, 0x80); - INB (fd, DATA, 0x80); - outb (fd, DATA, 0x00); - outb (fd, DATA, 0x80); - outb (fd, DATA, 0x00); - outb (fd, DATA, 0x80); - inb (fd, CONTROL); - outb (fd, CONTROL, 0x0C); + p5_outb (fd, CONTROL, 0x04); + p5_outb (fd, DATA, 0x00); + P5_INB (fd, DATA, 0x00); + p5_outb (fd, DATA, 0x01); + P5_INB (fd, DATA, 0x01); + p5_outb (fd, DATA, 0x01); + p5_outb (fd, DATA, 0x81); + p5_outb (fd, DATA, 0x01); + p5_outb (fd, DATA, 0x81); + P5_INB (fd, DATA, 0x81); + p5_outb (fd, DATA, 0x80); + P5_INB (fd, DATA, 0x80); + p5_outb (fd, DATA, 0x00); + p5_outb (fd, DATA, 0x80); + p5_outb (fd, DATA, 0x00); + p5_outb (fd, DATA, 0x80); + P5_INB (fd, DATA, 0x80); + p5_outb (fd, DATA, 0x80); + P5_INB (fd, DATA, 0x80); + p5_outb (fd, DATA, 0x00); + p5_outb (fd, DATA, 0x80); + p5_outb (fd, DATA, 0x00); + p5_outb (fd, DATA, 0x80); + P5_INB (fd, DATA, 0x80); + p5_outb (fd, DATA, 0x81); + P5_INB (fd, DATA, 0x81); + p5_outb (fd, DATA, 0x01); + p5_outb (fd, DATA, 0x81); + p5_outb (fd, DATA, 0x01); + p5_outb (fd, DATA, 0x81); + P5_INB (fd, DATA, 0x81); + p5_outb (fd, DATA, 0x80); + P5_INB (fd, DATA, 0x80); + p5_outb (fd, DATA, 0x00); + p5_outb (fd, DATA, 0x80); + p5_outb (fd, DATA, 0x00); + p5_outb (fd, DATA, 0x80); + P5_INB (fd, DATA, 0x80); + p5_outb (fd, DATA, 0x00); + p5_outb (fd, DATA, 0x80); + p5_outb (fd, DATA, 0x00); + p5_outb (fd, DATA, 0x80); + P5_INB (fd, DATA, 0x80); + p5_outb (fd, DATA, 0x00); + p5_outb (fd, DATA, 0x80); + p5_outb (fd, DATA, 0x00); + p5_outb (fd, DATA, 0x80); + P5_INB (fd, DATA, 0x80); + p5_outb (fd, DATA, 0x00); + p5_outb (fd, DATA, 0x80); + p5_outb (fd, DATA, 0x00); + p5_outb (fd, DATA, 0x80); + p5_inb (fd, CONTROL); + p5_outb (fd, CONTROL, 0x0C); return SANE_STATUS_GOOD; } @@ -1018,7 +1018,7 @@ wait_document (int fd, uint8_t detector) write_reg (fd, REG2, 0x90); write_reg (fd, REGF, 0x82); write_reg (fd, REG0, 0x00); - val = inb (fd, STATUS) & 0xf8; + val = p5_inb (fd, STATUS) & 0xf8; if (val != 0xf8) { DBG (DBG_error, "wait_document: unexpected STATUS value 0x%02x instead of 0xf8", val); diff --git a/backend/pie-scsidef.h b/backend/pie-scsidef.h index 05aa18f..9563452 100644 --- a/backend/pie-scsidef.h +++ b/backend/pie-scsidef.h @@ -189,9 +189,12 @@ static scsiblk inquiry = { inquiryC, sizeof(inquiryC) }; #define get_inquiry_additional_length(in) in[0x04] #define set_inquiry_length(out,n) out[0x04]=n-5 -#define get_inquiry_vendor(in, buf) strncpy(buf, in + 0x08, 0x08) -#define get_inquiry_product(in, buf) strncpy(buf, in + 0x10, 0x010) -#define get_inquiry_version(in, buf) strncpy(buf, in + 0x20, 0x04) +#define get_inquiry_vendor(in, buf) snprintf(buf, 0x08 + 1, "%.*s", \ + 0x08, in + 0x08) +#define get_inquiry_product(in, buf) snprintf(buf, 0x10 + 1, "%.*s", \ + 0x10, in + 0x10) +#define get_inquiry_version(in, buf) snprintf(buf, 0x04 + 1, "%.*s", \ + 0x04, in + 0x20) #define get_inquiry_max_x_res(in) getnbyte1(in + 0x24, 2) #define get_inquiry_max_y_res(in) getnbyte1(in + 0x26, 2) diff --git a/backend/pie.c b/backend/pie.c index 2db90dc..bfa68f0 100644 --- a/backend/pie.c +++ b/backend/pie.c @@ -744,11 +744,8 @@ pie_get_inquiry_values (Pie_Device * dev, unsigned char *buffer) dev->inquiry_len = get_inquiry_additional_length (buffer) + 5; get_inquiry_vendor ((char *) buffer, dev->vendor); - dev->vendor[8] = '\0'; get_inquiry_product ((char *) buffer, dev->product); - dev->product[16] = '\0'; get_inquiry_version ((char *) buffer, dev->version); - dev->version[4] = '\0'; dev->inquiry_x_res = get_inquiry_max_x_res (buffer); dev->inquiry_y_res = get_inquiry_max_y_res (buffer); diff --git a/backend/pieusb.c b/backend/pieusb.c index f8dc073..ec787d1 100644 --- a/backend/pieusb.c +++ b/backend/pieusb.c @@ -1436,7 +1436,7 @@ SANE_Status sane_get_select_fd (SANE_Handle handle, SANE_Int * fd) { DBG(DBG_info_sane,"sane_get_select_fd(): not supported (only for non-blocking IO)\n"); - handle = handle; - fd = fd; + (void) handle; + (void) fd; return SANE_STATUS_UNSUPPORTED; } diff --git a/backend/pieusb_scancmd.c b/backend/pieusb_scancmd.c index 583c4ac..3ed4f03 100644 --- a/backend/pieusb_scancmd.c +++ b/backend/pieusb_scancmd.c @@ -205,7 +205,8 @@ sanei_pieusb_cmd_test_unit_ready(SANE_Int device_number, struct Pieusb_Command_S status->pieusb_status = sanei_pieusb_command (device_number, command, NULL, 0); - DBG (DBG_info_scan, "sanei_pieusb_cmd_test_unit_ready() return status = %s\n", sane_strstatus(status->pieusb_status)); + DBG (DBG_info_scan, "sanei_pieusb_cmd_test_unit_ready() return status = %s\n", + sane_strstatus (sanei_pieusb_convert_status (status->pieusb_status))); } /** diff --git a/backend/pieusb_specific.c b/backend/pieusb_specific.c index e5471ee..f319278 100644 --- a/backend/pieusb_specific.c +++ b/backend/pieusb_specific.c @@ -260,7 +260,7 @@ sanei_pieusb_find_device_callback (const char *devicename) free (dev); DBG (DBG_error, "sanei_pieusb_find_device_callback: get scanner properties (5 bytes) failed with %d\n", status.pieusb_status); sanei_usb_close (device_number); - return status.pieusb_status; + return sanei_pieusb_convert_status (status.pieusb_status); } /* get full inquiry data */ sanei_pieusb_cmd_inquiry(device_number, &inq, inq.additionalLength+4, &status); @@ -268,7 +268,7 @@ sanei_pieusb_find_device_callback (const char *devicename) free (dev); DBG (DBG_error, "sanei_pieusb_find_device_callback: get scanner properties failed\n"); sanei_usb_close (device_number); - return status.pieusb_status; + return sanei_pieusb_convert_status (status.pieusb_status); } /* Close the device again */ @@ -1781,7 +1781,7 @@ sanei_pieusb_set_frame_from_options(Pieusb_Scanner * scanner) scanner->frame.index = 0x80; /* 0x80: value from cyberview */ sanei_pieusb_cmd_set_scan_frame (scanner->device_number, scanner->frame.index, &(scanner->frame), &status); DBG (DBG_info_sane, "sanei_pieusb_set_frame_from_options(): sanei_pieusb_cmd_set_scan_frame status %s\n", sane_strstatus (sanei_pieusb_convert_status (status.pieusb_status))); - return status.pieusb_status; + return sanei_pieusb_convert_status (status.pieusb_status); } /* diff --git a/backend/pixma/pixma.c b/backend/pixma/pixma.c index 31e71f0..72385b2 100644 --- a/backend/pixma/pixma.c +++ b/backend/pixma/pixma.c @@ -899,7 +899,7 @@ print_scan_param (int level, const pixma_scan_param_t * sp) pixma_dbg (level, " dpi=%ux%u offset=(%u,%u) dimension=%ux%u\n", sp->xdpi, sp->ydpi, sp->x, sp->y, sp->w, sp->h); pixma_dbg (level, " gamma=%f gamma_table=%p source=%d\n", sp->gamma, - sp->gamma_table, sp->source); + (void *) sp->gamma_table, sp->source); pixma_dbg (level, " adf-wait=%d\n", sp->adf_wait); } #endif diff --git a/backend/pixma/pixma_bjnp.c b/backend/pixma/pixma_bjnp.c index 63dd56d..75ad658 100644 --- a/backend/pixma/pixma_bjnp.c +++ b/backend/pixma/pixma_bjnp.c @@ -994,7 +994,7 @@ prepare_socket(const char *if_name, const bjnp_sockaddr_t *local_sa, /* send broadcasts to the broadcast address of the interface */ - memcpy(dest_sa, broadcast_sa, sa_size(dest_sa) ); + memcpy(dest_sa, broadcast_sa, sa_size(broadcast_sa) ); /* we fill port when we send the broadcast */ dest_sa -> ipv4.sin_port = htons(0); diff --git a/backend/pixma/pixma_common.c b/backend/pixma/pixma_common.c index 24912b8..f626db1 100644 --- a/backend/pixma/pixma_common.c +++ b/backend/pixma/pixma_common.c @@ -877,7 +877,7 @@ pixma_scan (pixma_t * s, pixma_scan_param_t * sp) sp->line_size, sp->image_size, sp->channels, sp->depth); pixma_dbg (3, " dpi=%ux%u offset=(%u,%u) dimension=%ux%u\n", sp->xdpi, sp->ydpi, sp->x, sp->y, sp->w, sp->h); - pixma_dbg (3, " gamma=%f gamma_table=%p source=%d\n", sp->gamma, sp->gamma_table, sp->source); + pixma_dbg (3, " gamma=%f gamma_table=%p source=%d\n", sp->gamma, (void *) sp->gamma_table, sp->source); pixma_dbg (3, " threshold=%d threshold_curve=%d\n", sp->threshold, sp->threshold_curve); pixma_dbg (3, " adf-wait=%d\n", sp->adf_wait); pixma_dbg (3, " ADF page count: %d\n", sp->adf_pageid); diff --git a/backend/pixma/pixma_imageclass.c b/backend/pixma/pixma_imageclass.c index ae06180..6a485de 100644 --- a/backend/pixma/pixma_imageclass.c +++ b/backend/pixma/pixma_imageclass.c @@ -77,6 +77,7 @@ #define D420_PID 0x26ef #define MF3200_PID 0x2684 #define MF6500_PID 0x2686 +#define IR1018_PID 0x269d /* generation 2 scanners (>=0x2707) */ #define MF8300_PID 0x2708 #define MF4500_PID 0x2736 @@ -88,8 +89,6 @@ #define MF4700_PID 0x2774 #define MF8200_PID 0x2779 /* the following are all untested */ -#define MF5630_PID 0x264e -#define MF5650_PID 0x264f #define MF8100_PID 0x2659 #define MF5880_PID 0x26f9 #define MF6680_PID 0x26fa @@ -243,6 +242,7 @@ activate (pixma_t * s, uint8_t x) case MF4360_PID: case MF4100_PID: case MF8300_PID: + case IR1018_PID: return iclass_exec (s, &mf->cb, 1); break; default: @@ -275,6 +275,7 @@ select_source (pixma_t * s) case MF4360_PID: case MF4100_PID: case MF8300_PID: + case IR1018_PID: return iclass_exec (s, &mf->cb, 0); break; default: @@ -310,6 +311,7 @@ send_scan_param (pixma_t * s) case MF4360_PID: case MF4100_PID: case MF8300_PID: + case IR1018_PID: return iclass_exec (s, &mf->cb, 0); break; default: @@ -336,7 +338,8 @@ request_image_block (pixma_t * s, unsigned flag, uint8_t * info, expected_len = (mf->generation >= 2 || s->cfg->pid == MF4600_PID || s->cfg->pid == MF6500_PID || - s->cfg->pid == MF8030_PID) ? 512 : hlen; + s->cfg->pid == MF8030_PID || + s->cfg->pid == IR1018_PID) ? 512 : hlen; mf->cb.reslen = pixma_cmd_transaction (s, mf->cb.buf, 11, mf->cb.buf, expected_len); if (mf->cb.reslen >= hlen) { @@ -347,7 +350,8 @@ request_image_block (pixma_t * s, unsigned flag, uint8_t * info, if (mf->generation >= 2 || s->cfg->pid == MF4600_PID || s->cfg->pid == MF6500_PID || - s->cfg->pid == MF8030_PID) + s->cfg->pid == MF8030_PID || + s->cfg->pid == IR1018_PID) { /* 32bit size */ *datalen = mf->cb.reslen - hlen; *size = (*datalen + hlen == 512) ? pixma_get_be32 (mf->cb.buf + 4) - *datalen : *size; @@ -372,7 +376,8 @@ read_image_block (pixma_t * s, uint8_t * data, unsigned size) maxchunksize = MAX_CHUNK_SIZE * ((mf->generation >= 2 || s->cfg->pid == MF4600_PID || s->cfg->pid == MF6500_PID || - s->cfg->pid == MF8030_PID) ? 4 : 1); + s->cfg->pid == MF8030_PID || + s->cfg->pid == IR1018_PID) ? 4 : 1); while (size) { if (size >= maxchunksize) @@ -410,6 +415,7 @@ read_error_info (pixma_t * s, void *buf, unsigned size) case MF4360_PID: case MF4100_PID: case MF8300_PID: + case IR1018_PID: error = iclass_exec (s, &mf->cb, 0); break; default: @@ -790,7 +796,8 @@ iclass_fill_buffer (pixma_t * s, pixma_imagebuf_t * ib) mf->generation == 1 && s->cfg->pid != MF4600_PID && s->cfg->pid != MF6500_PID && - s->cfg->pid != MF8030_PID) + s->cfg->pid != MF8030_PID && + s->cfg->pid != IR1018_PID) { /* color and not MF46xx or MF65xx */ pack_rgb (mf->blkptr, n, mf->raw_width, mf->lineptr); @@ -948,14 +955,14 @@ const pixma_config_t pixma_iclass_devices[] = { DEV ("Canon i-SENSYS MF8200C Series", "MF8200C", MF8200_PID, 600, 300, 640, 1050, PIXMA_CAP_ADF), DEV ("Canon i-SENSYS MF8300 Series", "MF8300", MF8300_PID, 600, 0, 640, 1050, PIXMA_CAP_ADF), DEV ("Canon imageCLASS D530", "D530", D530_PID, 600, 0, 640, 877, 0), + DEV ("Canon imageRUNNER 1018/1022/1023", "iR1018/1022/1023", IR1018_PID, 600, 0, 640, 877, PIXMA_CAP_ADFDUP), /* FIXME: the following capabilities all need updating/verifying */ - DEV ("Canon imageCLASS MF5630", "MF5630", MF5630_PID, 600, 0, 640, 877, PIXMA_CAP_ADF), - DEV ("Canon laserBase MF5650", "MF5650", MF5650_PID, 600, 0, 640, 877, PIXMA_CAP_ADF), DEV ("Canon imageCLASS MF8170c", "MF8170c", MF8100_PID, 600, 0, 640, 877, PIXMA_CAP_ADF), DEV ("Canon imageClass MF8030", "MF8030", MF8030_PID, 600, 0, 640, 877, PIXMA_CAP_ADF), DEV ("Canon i-SENSYS MF5880dn", "MF5880", MF5880_PID, 600, 0, 640, 877, PIXMA_CAP_ADFDUP), DEV ("Canon i-SENSYS MF6680dn", "MF6680", MF6680_PID, 600, 0, 640, 877, PIXMA_CAP_ADFDUP), DEV ("Canon imageRUNNER 1133", "iR1133", IR1133_PID, 600, 0, 637, 877, PIXMA_CAP_ADFDUP), /* max. w = 216mm */ + DEV ("Canon imageRUNNER 1133A", "imageRUNNER1133", IR1133_PID, 600, 0, 637, 877, PIXMA_CAP_ADFDUP), /* max. w = 216mm */ DEV ("Canon i-SENSYS MF5900 Series", "MF5900", MF5900_PID, 600, 0, 640, 1050, PIXMA_CAP_ADFDUP), DEV ("Canon i-SENSYS MF8500C Series", "MF8500C", MF8500_PID, 600, 0, 640, 1050, PIXMA_CAP_ADFDUP), DEV ("Canon i-SENSYS MF6100 Series", "MF6100", MF6100_PID, 600, 300, 640, 1050, PIXMA_CAP_ADFDUP), diff --git a/backend/pixma/pixma_mp150.c b/backend/pixma/pixma_mp150.c index f3d5934..171eccf 100644 --- a/backend/pixma/pixma_mp150.c +++ b/backend/pixma/pixma_mp150.c @@ -230,7 +230,7 @@ #define G3000_PID 0x1794 #define G2000_PID 0x1795 #define TS9000_PID 0x179f -#define TS8000_PID 0x1800 +#define TS8000_PID 0x1800 /* tested: TS8030 */ #define TS6000_PID 0x1801 #define TS5000_PID 0x1802 #define MG3000_PID 0x180b @@ -308,7 +308,7 @@ #define G2060_PID 0x18C1 #define G3020_PID 0x18BF #define TS7430_PID 0x18B2 -#define XK90_PID 0x18B6 +#define XK90_PID 0x18B6 /* tested */ #define TS8430_PID 0x18B5 #define TR7600_PID 0x18AA #define TR8600_PID 0x18AD @@ -316,6 +316,27 @@ #define TS6400_PID 0x18D3 #define TS7400_PID 0x18D7 +/* 2021 new device (untested) */ +#define TS5350i_PID 0x18D9 +#define G600_PID 0x18D5 +#define TS3500_PID 0x18D4 +#define TR4600_PID 0x18DA +#define E4500_PID 0x18DB +#define TR4700_PID 0x18DC +#define XK500_PID 0x18DF +#define TS8530_PID 0x18E0 +#define XK100_PID 0x18E2 +#define TS7530_PID 0x18E1 +#define TS7450i_PID 0x18F7 +#define GX6000_PID 0x18A6 +#define GX7000_PID 0x18A8 +#define TS5400_PID 0x18D8 + +/* 2022 new device (untested) */ +#define TS2400_PID 0x1108 +#define TS2600_PID 0x1107 + + /* Generation 4 XML messages that encapsulates the Pixma protocol messages */ #define XML_START_1 \ "\ @@ -693,7 +714,7 @@ send_scan_param (pixma_t * s) if (mp->generation <= 2) { - PDBG (pixma_dbg (4, "*send_scan_param gen. 1-2 ***** Setting: xdpi=%hi ydpi=%hi x=%i y=%i wx=%i ***** \n", + PDBG (pixma_dbg (4, "*send_scan_param gen. 1-2 ***** Setting: xdpi=%u ydpi=%u x=%i y=%i wx=%i ***** \n", xdpi, ydpi, x-xs, y, wx)); data = pixma_newcmd (&mp->cb, cmd_scan_param, 0x30, 0); pixma_set_be16 (xdpi | 0x8000, data + 0x04); @@ -715,7 +736,7 @@ send_scan_param (pixma_t * s) } else { - PDBG (pixma_dbg (4, "*send_scan_param gen. 3+ ***** Setting: xdpi=%hi ydpi=%hi x=%i xs=%i y=%i wx=%i h=%i ***** \n", + PDBG (pixma_dbg (4, "*send_scan_param gen. 3+ ***** Setting: xdpi=%u ydpi=%u x=%i xs=%i y=%i wx=%i h=%i ***** \n", xdpi, ydpi, x, xs, y, wx, h)); data = pixma_newcmd (&mp->cb, cmd_scan_param_3, 0x38, 0); data[0x00] = (is_scanning_from_adf (s)) ? 0x02 : 0x01; @@ -929,6 +950,7 @@ handle_interrupt (pixma_t * s, int timeout) * poll event with 'scanimage -A' */ if (s->cfg->pid == MG5300_PID || s->cfg->pid == MG5400_PID + || s->cfg->pid == MG5700_PID || s->cfg->pid == MG6200_PID || s->cfg->pid == MG6300_PID || s->cfg->pid == MX340_PID @@ -1147,7 +1169,7 @@ post_process_image_data (pixma_t * s, pixma_imagebuf_t * ib) n = s->param->xdpi / 600; else n = s->param->xdpi / 2400; - if (s->cfg->pid == MP600_PID || s->cfg->pid == MP600R_PID) + if (s->cfg->pid == MP600_PID || s->cfg->pid == MP600R_PID || s->cfg->pid == XK90_PID) n = s->param->xdpi / 1200; m = (n > 0) ? s->param->wx / n : 1; @@ -1188,6 +1210,7 @@ post_process_image_data (pixma_t * s, pixma_imagebuf_t * ib) || s->cfg->pid == MP230_PID || s->cfg->pid == MX470_PID || s->cfg->pid == MX510_PID + || s->cfg->pid == XK90_PID || s->cfg->pid == MX520_PID)) reorder_pixels (mp->linebuf, sptr, c, n, m, s->param->wx, line_size); @@ -1641,7 +1664,7 @@ mp150_finish_scan (pixma_t * s) else PDBG (pixma_dbg (4, "*mp150_finish_scan***** wait for next page from ADF *****\n")); - mp->state = state_idle; + mp->state = state_idle; /* fall through */ case state_idle: break; @@ -1906,9 +1929,9 @@ const pixma_config_t pixma_mp150_devices[] = { DEVICE ("Canon PIXMA TS8330 Series", "TS8330", TS8330_PID, 0, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), DEVICE ("Canon PIXMA XK60 Series", "XK60", XK60_PID, 0, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), DEVICE ("Canon PIXMA TS6330 Series", "TS6330", TS6330_PID, 0, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA TS3300 Series", "TS3300", TS3300_PID, 0, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA TS3300 Series", "TS3300", TS3300_PID, 0, 600, 0, 0, 638, 877, PIXMA_CAP_CIS), DEVICE ("Canon PIXMA E3300 Series", "E3300", E3300_PID, 0, 600, 0, 0, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA TS3400 Series", "TS3400", TS3400_PID, 0, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA TS3400 Series", "TS3400", TS3400_PID, 0, 600, 0, 0, 638, 877, PIXMA_CAP_CIS), DEVICE ("Canon PIXMA E3400 Series", "E3400", E3400_PID, 0, 600, 0, 0, 638, 877, PIXMA_CAP_CIS | PIXMA_CAP_ADF), DEVICE ("Canon PIXMA TR7000 Series", "TR7000", TR7000_PID, 0, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS | PIXMA_CAP_ADF), DEVICE ("Canon PIXMA G2020", "G2020", G2020_PID, 0, 600, 0, 0, 638, 877, PIXMA_CAP_CIS), @@ -1923,8 +1946,26 @@ const pixma_config_t pixma_mp150_devices[] = { DEVICE ("Canon PIXMA TR8630 Series", "TR8630", TR8630_PID, 0, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS | PIXMA_CAP_ADF), DEVICE ("Canon PIXMA TS6400 Series", "TS6400", TS6400_PID, 0, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), DEVICE ("Canon PIXMA TS7400 Series", "TS7400", TS7400_PID, 0, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA G7080 Series", "G7080", G7080_PID, 0, 600, 0, 0, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA GM4080", "GM4080", GM4080_PID, 0, 600, 0, 0, 638, 877, PIXMA_CAP_CIS | PIXMA_CAP_ADF), + DEVICE ("Canon PIXMA G7080 Series", "G7080", G7080_PID, 0, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA GM4080", "GM4080", GM4080_PID, 0, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS | PIXMA_CAP_ADF), + DEVICE ("Canon PIXMA TS5350i Series", "TS5350i", TS5350i_PID, 0, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA G600", "G600", G600_PID, 0, 600, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA TS3500 Series", "TS3500", TS3500_PID, 0, 600, 0, 0, 638, 877, PIXMA_CAP_CIS), + /* ToDo: max. scan resolution = 600x1200dpi */ + DEVICE ("Canon PIXMA TR4600 Series", "TR4600", TR4600_PID, 0, 600, 0, 0, 638, 877, PIXMA_CAP_CIS | PIXMA_CAP_ADF | PIXMA_CAP_ADF_JPEG), + /* ToDo: max. scan resolution = 600x1200dpi */ + DEVICE ("Canon PIXMA TR4700 Series", "TR4700", TR4700_PID, 0, 600, 0, 0, 638, 877, PIXMA_CAP_CIS | PIXMA_CAP_ADF | PIXMA_CAP_ADF_JPEG), + DEVICE ("Canon PIXMA E4500 Series", "E4500", E4500_PID, 0, 600, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXUS XK500 Series", "XK500", XK500_PID, 0, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA TS8530 Series", "TS8530", TS8530_PID, 0, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXUS XK100 Series", "XK100", XK100_PID, 0, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA TS7530 Series", "TS7530", TS7530_PID, 0, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA TS7450i Series", "TS7450i", TS7450i_PID, 0, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA GX6000 Series", "GX6000", GX6000_PID, 0, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS | PIXMA_CAP_ADF), + DEVICE ("Canon PIXMA GX7000 Series", "GX7000", GX7000_PID, 0, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS | PIXMA_CAP_ADF), + DEVICE ("Canon PIXMA TS5400 Series", "TS5400", TS5400_PID, 0, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA TS2400 Series", "TS2400", TS2400_PID, 0, 600, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA TS2600 Series", "TS2600", TS2600_PID, 0, 600, 0, 0, 638, 877, PIXMA_CAP_CIS), END_OF_DEVICE_LIST }; diff --git a/backend/pixma/pixma_mp730.c b/backend/pixma/pixma_mp730.c index 3a436d7..1fc9a74 100644 --- a/backend/pixma/pixma_mp730.c +++ b/backend/pixma/pixma_mp730.c @@ -76,6 +76,8 @@ #define MP740_PID 0x264c /* Untested */ #define MP710_PID 0x264d +#define MF5630_PID 0x264e /* Untested */ +#define MF5650_PID 0x264f #define MF5730_PID 0x265d /* Untested */ #define MF5750_PID 0x265e /* Untested */ #define MF5770_PID 0x265f @@ -318,6 +320,8 @@ handle_interrupt (pixma_t * s, int timeout) case MP370_PID: case MP375R_PID: case MP390_PID: + case MF5630_PID: + case MF5650_PID: case MF5730_PID: case MF5750_PID: case MF5770_PID: @@ -372,6 +376,8 @@ has_ccd_sensor (pixma_t * s) s->cfg->pid == MP370_PID || s->cfg->pid == MP375R_PID || s->cfg->pid == MP390_PID || + s->cfg->pid == MF5630_PID || + s->cfg->pid == MF5650_PID || s->cfg->pid == MF5730_PID || s->cfg->pid == MF5750_PID || s->cfg->pid == MF5770_PID); @@ -415,6 +421,8 @@ step1 (pixma_t * s) { switch (s->cfg->pid) { + case MF5630_PID: + case MF5650_PID: case MF5730_PID: case MF5750_PID: case MF5770_PID: @@ -424,10 +432,10 @@ step1 (pixma_t * s) int 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) \ + 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)); } @@ -443,6 +451,8 @@ step1 (pixma_t * s) switch (s->cfg->pid) { + case MF5630_PID: + case MF5650_PID: case MF5730_PID: case MF5750_PID: case MF5770_PID: @@ -696,6 +706,8 @@ mp730_fill_buffer (pixma_t * s, pixma_imagebuf_t * ib) if (n != 0) { if (s->param->channels != 1 && + s->cfg->pid != MF5630_PID && + s->cfg->pid != MF5650_PID && s->cfg->pid != MF5730_PID && s->cfg->pid != MF5750_PID && s->cfg->pid != MF5770_PID && @@ -751,7 +763,9 @@ mp730_finish_scan (pixma_t * s) (s->param->source == PIXMA_SOURCE_ADF || s->param->source == PIXMA_SOURCE_ADFDUP) && has_paper (s) && - (s->cfg->pid == MF5730_PID || + (s->cfg->pid == MF5630_PID || + s->cfg->pid == MF5650_PID || + s->cfg->pid == MF5730_PID || s->cfg->pid == MF5750_PID || s->cfg->pid == MF5770_PID || s->cfg->pid == IR1020_PID)) @@ -833,6 +847,8 @@ const pixma_config_t pixma_mp730_devices[] = { DEVICE ("PIXMA MP730", "MP730", MP730_PID, 1200, 637, 868, PIXMA_CAP_ADF | PIXMA_CAP_LINEART), DEVICE ("PIXMA MP740", "MP740", MP740_PID, 1200, 637, 868, PIXMA_CAP_ADF | PIXMA_CAP_LINEART), + DEVICE ("Canon imageCLASS MF5630", "MF5630", MF5630_PID, 1200, 636, 868, PIXMA_CAP_ADF), + DEVICE ("Canon laserBase MF5650", "MF5650", MF5650_PID, 1200, 636, 868, 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), diff --git a/backend/plustek-pp.h b/backend/plustek-pp.h index 447065b..4c0b0f4 100644 --- a/backend/plustek-pp.h +++ b/backend/plustek-pp.h @@ -235,11 +235,7 @@ typedef const struct mode_param #define _E_SEQUENCE (_FIRST_ERR-30) /* caller sequence does not match */ #define _E_NO_ASIC (_FIRST_ERR-31) /* can't detect ASIC */ -#ifdef __KERNEL__ -# define _E_FAULT (-EFAULT) -#else # define _E_FAULT (_E_INTERNAL) /* should never happen in userspace */ -#endif #define _E_LAMP_NOT_IN_POS (_FIRST_ERR-40) #define _E_LAMP_NOT_STABLE (_FIRST_ERR-41) @@ -471,10 +467,6 @@ typedef struct { #define _ScanMode_AverageOut 1 /* CCD averaged 2 pixels value for output*/ #define _ScanMode_Mono 2 /* not color mode */ - -#ifndef __KERNEL__ - - #define PLUSTEK_CONFIG_FILE "plustek_pp.conf" #ifndef PATH_MAX @@ -631,7 +623,6 @@ typedef struct { AdjDef adj; } CnfDef, *pCnfDef; -#endif /* guard __KERNEL__ */ #endif /* guard __PLUSTEKPP_H__ */ diff --git a/backend/plustek-pp_dbg.h b/backend/plustek-pp_dbg.h index 71315bd..d416315 100644 --- a/backend/plustek-pp_dbg.h +++ b/backend/plustek-pp_dbg.h @@ -46,23 +46,12 @@ /* uncomment this to have an SW-simulatet 98001 device - don't expect to scan*/ /* #define _ASIC_98001_SIM */ -/* - * the print macros - */ -#ifdef __KERNEL__ -# define _PRINT printk -#endif - /* * some debug definitions */ #ifdef DEBUG -# ifndef __KERNEL__ # include # define _ASSERT(x) assert(x) -# else -# define _ASSERT(x) -# endif # ifndef DBG # define DBG(level, msg, args...) if ((dbg_level) & (level)) { \ diff --git a/backend/plustek-pp_detect.c b/backend/plustek-pp_detect.c index 2cc6f1a..5099986 100644 --- a/backend/plustek-pp_detect.c +++ b/backend/plustek-pp_detect.c @@ -97,11 +97,6 @@ static int detectScannerConnection( pScanData ps ) UChar data, control, status; int retval = _E_NO_CONN; -#ifdef __KERNEL__ - DBG( DBG_LOW, "Dataport = 0x%04x\n", ps->IO.pbSppDataPort ); - DBG( DBG_LOW, "Ctrlport = 0x%04x\n", ps->IO.pbControlPort ); -#endif - detectResetPort( ps ); /* @@ -177,11 +172,7 @@ static int detectScannerConnection( pScanData ps ) /* work on the result */ if ( _OK == retval ) { -#ifdef __KERNEL__ - ps->sCaps.wIOBase = ps->IO.pbSppDataPort; -#else ps->sCaps.wIOBase = ps->pardev; -#endif ps->PutToIdleMode( ps ); } else { @@ -209,11 +200,7 @@ static int detectSetupBuffers( pScanData ps ) */ if ( 0 == ps->TotalBufferRequire ) { -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_HIGH, -#endif "pt_drv: asic 0x%x probably not supported\n", ps->sCaps.AsicID); return _E_ALLOC; /* Out of memory */ @@ -228,11 +215,7 @@ static int detectSetupBuffers( pScanData ps ) if ( NULL == ps->driverbuf ) { -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_HIGH, -#endif "pt_drv: Not enough kernel memory %d\n", ps->TotalBufferRequire); return _E_ALLOC; /* Out of memory */ @@ -379,12 +362,8 @@ static int detectAsic98001( pScanData ps ) return result; return detectScannerConnection( ps ); -#else -#ifdef __KERNEL__ - _PRINT( #else DBG( DBG_HIGH, -#endif "!!!! WARNING, have a look at function detectAsic98001() !!!!\n" ); ps->sCaps.AsicID = _ASIC_IS_98001; ps->sCaps.wIOBase = ps->IO.pbSppDataPort; @@ -434,11 +413,7 @@ _LOC int DetectScanner( pScanData ps, int mode ) /* read Register 0x18 (AsicID Register) of Asic9800x based devices */ #ifdef _ASIC_98001_SIM -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_HIGH, -#endif "!!!! WARNING, SW-Emulation active !!!!\n" ); asic = _ASIC_IS_98001; #else diff --git a/backend/plustek-pp_hwdefs.h b/backend/plustek-pp_hwdefs.h index 51599f2..7b9213e 100644 --- a/backend/plustek-pp_hwdefs.h +++ b/backend/plustek-pp_hwdefs.h @@ -586,19 +586,6 @@ typedef struct * structure to hold IO port specific stuff */ typedef struct { - -#ifdef __KERNEL__ - pFnOut fnOut; - pFnIn fnIn; - - UShort pbSppDataPort; - UShort pbEppDataPort; - - UShort pbStatusPort; - UShort pbControlPort; - UShort pbAddrOffsetPort; -#endif - UShort portBase; UShort portMode; UShort lastPortMode; diff --git a/backend/plustek-pp_image.c b/backend/plustek-pp_image.c index 63f1f88..80d213a 100644 --- a/backend/plustek-pp_image.c +++ b/backend/plustek-pp_image.c @@ -1288,11 +1288,7 @@ static Bool imageP98003ReadOneImageLine( pScanData ps ) } while( !MiscCheckTimer( &timer )); -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_HIGH, -#endif "Timeout - Scanner malfunction !!\n" ); MotorToHomePosition(ps); diff --git a/backend/plustek-pp_io.c b/backend/plustek-pp_io.c index af3e8c4..45ffe8b 100644 --- a/backend/plustek-pp_io.c +++ b/backend/plustek-pp_io.c @@ -257,21 +257,11 @@ static Bool fnEPPRead( pScanData ps, pUChar pBuffer, ULong ulSize ) if( _IS_ASIC98(ps->sCaps.AsicID)) { -#ifndef __KERNEL__ sanei_pp_set_datadir( ps->pardev, SANEI_PP_DATAIN ); -#else - _OUTB_CTRL( ps, (_CTRL_GENSIGNAL + _CTRL_DIRECTION)); - _DO_UDELAY( 1 ); -#endif for( i = 0; i < ulSize; i++ ) pBuffer[i] = _INB_EPPDATA( ps ); -#ifndef __KERNEL__ sanei_pp_set_datadir( ps->pardev, SANEI_PP_DATAOUT ); -#else - _OUTB_CTRL( ps, _CTRL_GENSIGNAL ); - _DO_UDELAY( 1 ); -#endif } else { for( i = 0; i < ulSize; i++ ) @@ -290,18 +280,12 @@ static Bool fnBiDirRead( pScanData ps, pUChar pBuffer, ULong ulSize ) start = _CTRL_START_BIDIREAD; end = _CTRL_END_BIDIREAD; -#ifndef __KERNEL__ sanei_pp_set_datadir( ps->pardev, SANEI_PP_DATAIN ); if( !sanei_pp_uses_directio()) { start &= ~_CTRL_DIRECTION; end &= ~_CTRL_DIRECTION; } -#else - if( _IS_ASIC98(ps->sCaps.AsicID)) { - _OUTB_CTRL( ps, (_CTRL_GENSIGNAL + _CTRL_DIRECTION)); - } -#endif switch( ps->IO.delay ) { @@ -341,13 +325,7 @@ static Bool fnBiDirRead( pScanData ps, pUChar pBuffer, ULong ulSize ) } -#ifndef __KERNEL__ sanei_pp_set_datadir( ps->pardev, SANEI_PP_DATAOUT ); -#else - if( _IS_ASIC98(ps->sCaps.AsicID)) { - _OUTB_CTRL( ps, _CTRL_GENSIGNAL ); - } -#endif return _TRUE; } @@ -953,45 +931,4 @@ _LOC void IOReadScannerImageData( pScanData ps, pUChar pBuf, ULong size ) ps->OpenScanPath( ps ); } -#ifdef __KERNEL__ - -/** the wrapper functions to support delayed and non-delayed I/O - */ -_LOC void IOOut( Byte data, UShort port ) -{ - DBG( DBG_IOF, "outb(0x%04x, 0x%02x)\n", port, data ); - outb( data, port ); -} - -_LOC void IOOutDelayed( Byte data, UShort port ) -{ - DBG( DBG_IOF, "outb_p(0x%04x, 0x%02x)\n", port, data ); - outb_p( data, port ); -} - -_LOC Byte IOIn( UShort port ) -{ -#ifdef DEBUG - Byte data = inb( port ); - - DBG( DBG_IOF, "inb(0x%04x) = 0x%02x\n", port, data ); - return data; -#else - return inb( port ); -#endif -} - -_LOC Byte IOInDelayed( UShort port ) -{ -#ifdef DEBUG - Byte data = inb_p( port ); - - DBG( DBG_IOF, "inb_p(0x%04x) = 0x%02x\n", port, data ); - return data; -#else - return inb_p( port ); -#endif -} -#endif /* guard __KERNEL__ */ - /* END PLUSTEK-PP_IO.C ......................................................*/ diff --git a/backend/plustek-pp_misc.c b/backend/plustek-pp_misc.c index ec2f129..ffcfa7c 100644 --- a/backend/plustek-pp_misc.c +++ b/backend/plustek-pp_misc.c @@ -77,27 +77,11 @@ /*************************** some definitions ********************************/ -#ifndef __KERNEL__ # define PPA_PROBE_SPP 0x0001 # define PPA_PROBE_PS2 0x0002 # define PPA_PROBE_ECR 0x0010 # define PPA_PROBE_EPP17 0x0100 # define PPA_PROBE_EPP19 0x0200 -#else - -/* the parport driver in Kernel 2.4 has changed. It does report the - * possible modes in a different, more general way. As long, as - * we do not use the parport-module change mode facility, I assume - * the following correlations - */ -#if defined LINUX_24 || defined LINUX_26 -# define PARPORT_MODE_PCPS2 PARPORT_MODE_TRISTATE -# define PARPORT_MODE_PCEPP PARPORT_MODE_EPP -# define PARPORT_MODE_PCECPPS2 PARPORT_MODE_TRISTATE -# define PARPORT_MODE_PCECPEPP PARPORT_MODE_EPP -# define PARPORT_MODE_PCECR PARPORT_MODE_ECP -#endif -#endif #define _PP_A 16807 /**< multiplier */ #define _PP_M 2147483647L /**< 2**31 - 1 */ @@ -107,299 +91,10 @@ static int port_feature = 0; static long randomnum = 1; -#ifdef __KERNEL__ -static int portIsClaimed[_MAX_PTDEVS] = { [0 ... (_MAX_PTDEVS-1)] = 0 }; - -MODELSTR; /**< a static char array (see plustek-pp.h) */ - -#else static int portIsClaimed[_MAX_PTDEVS] = { 0, 0, 0, 0 }; -#endif /*************************** local functions *********************************/ -#ifdef __KERNEL__ -#ifdef LINUX_26 - -static pScanData __ps = NULL; -static int __pa = -1; - -/** callback from parport driver - */ -static void misc_attach(struct parport *port) -{ - DBG( DBG_LOW, "misc_attach\n" ); - - __ps->pp = NULL; - if( port->base == (unsigned long)__pa ) { - DBG( DBG_LOW, "Requested port (0x%02x) found\n", __pa ); - DBG( DBG_LOW, "Port mode reported: (0x%04x)\n", port->modes ); - __ps->pp = port; - } -} - -static void misc_detach( struct parport *port ) -{ - DBG( DBG_LOW, "misc_detach\n" ); -} - -static struct parport_driver pt_drv = { - .name = "pt_drv", - .attach = misc_attach, - .detach = misc_detach, -}; -#endif - -/** display the available port-modes - */ -#ifdef DEBUG -static void miscShowPortModes( int modes ) -{ - DBG( DBG_LOW, "parport-modi:" ); - - if( modes & PARPORT_MODE_PCSPP ) - DBG( DBG_LOW, " SPP" ); - - if( modes & PARPORT_MODE_PCPS2 ) - DBG( DBG_LOW, " PS/2" ); - - if( modes & PARPORT_MODE_PCEPP ) - DBG( DBG_LOW, " EPP" ); - - if( modes & PARPORT_MODE_PCECR ) - DBG( DBG_LOW, " ECP" ); - - if( modes & PARPORT_MODE_PCECPEPP ) - DBG( DBG_LOW, " EPP(ECP)" ); - - if( modes & PARPORT_MODE_PCECPPS2 ) - DBG( DBG_LOW, " PS/2(ECP)" ); - - DBG( DBG_LOW, "\n" ); -} -#endif - -/** probe the parallel port - */ -static int initPortProbe( pScanData ps ) -{ - int retv = 0; - - /* clear the controls */ - ps->IO.lastPortMode = 0xFFFF; - - if( NULL != ps->pardev ) - retv = ps->pardev->port->modes; - return retv; -} - -/** will be called by the parport module when we already have access, but - * another module wants access to the port... - */ -static int miscPreemptionCallback( pVoid data ) -{ - pScanData ps = (pScanData)data; - - if( NULL != ps ) { - - /* never release during scanning */ - if( ps->DataInf.dwScanFlag & _SCANNER_SCANNING ) { - DBG( DBG_LOW, "no way!!!\n" ); - return 1; - } - } - - /* let the port go...*/ - return 0; -} - -/** depending on the reported possible port modes, we try to set a faster mode - * than SPP - */ -static int miscSetFastMode( pScanData ps ) -{ - UChar a, b; - - /* - * when previously found the EPP mode, break right here - */ - if (( _PORT_EPP == ps->IO.portMode ) && (!(port_feature & PARPORT_MODE_PCECR))) - return _OK; - - /* CHECK REMOVE: from here we should have SPP (Paranoia Code !) */ - if (( _PORT_SPP != ps->IO.portMode ) && (!(port_feature & PARPORT_MODE_PCECR))) - return _OK; - - DBG(DBG_LOW, "Trying faster mode...\n" ); - - /* - * ECP mode usually has sub-modes of EPP and/or PS2. - * First we try to set EPP - */ - if((port_feature & PARPORT_MODE_PCECR) && - (port_feature & PARPORT_MODE_PCECPEPP)){ - - DBG(DBG_LOW, "Attempting to set EPP from ECP mode.\n" ); - - a = _INB_ECTL(ps); /* get current ECR */ - ps->IO.lastPortMode = a; /* save it for restoring later */ - a = (a & 0x1F) | 0x80; /* set to EPP */ - _OUTB_ECTL(ps, a); /* write it back */ - _DO_UDELAY(1); - - /* - * It is probably unnecessary to - * do this check but it makes me feel better - */ - b = _INB_ECTL(ps); /* check to see if port set */ - if( a == b ) { - DBG( DBG_LOW, "Port is set to (ECP) EPP mode.\n" ); - ps->IO.portMode = _PORT_EPP; - return _OK; - - } else { - DBG( DBG_LOW, "Port could not be set to (ECP) EPP mode. " - "Using SPP mode.\n" ); - _OUTB_ECTL(ps,(Byte)ps->IO.lastPortMode); /* restore */ - _DO_UDELAY(1); - ps->IO.portMode = _PORT_SPP; - - /* go ahead and try with other settings...*/ - } - } - - /* If port cannot be set to EPP, try PS2 */ - if((port_feature & PARPORT_MODE_PCECR) && - (port_feature & PARPORT_MODE_PCECPPS2)) { - - DBG(DBG_LOW, "Attempting to set PS2 from ECPPS2 mode.\n" ); - - a = _INB_ECTL(ps); /* get current ECR */ - ps->IO.lastPortMode = a; /* save it for restoring later */ - - /* set to Fast Centronics/bi-directional/PS2 */ - a = (a & 0x1F) | 0x20; - _OUTB_ECTL(ps,a); /* write it back */ - _DO_UDELAY(1); - - /* - * It is probably unnecessary to do this check - * but it makes me feel better - */ - b = _INB_ECTL(ps); /* check to see if port set */ - if (a == b) { - DBG(DBG_LOW, "Port is set to (ECP) PS2 bidirectional mode.\n"); - ps->IO.portMode = _PORT_BIDI; - return _OK; - } else { - DBG(DBG_LOW, "Port could not be set to (ECP) PS2 mode. " - "Using SPP mode.\n"); - a = ps->IO.lastPortMode & 0x1F; - _OUTB_ECTL(ps, a); /* set ECP ctrl to SPP */ - _DO_UDELAY(1); - ps->IO.portMode = _PORT_SPP; - - /* next mode, last attempt... */ - } - } - - /* - * Some BIOS/cards have only a Bi-directional/PS2 mode (no EPP). - * Make one last attempt to set to PS2 mode. - */ - if ( port_feature & PARPORT_MODE_PCPS2 ){ - - DBG(DBG_LOW, "Attempting to set PS2 mode.\n" ); - - a = _INB_CTRL(ps); /* get current setting of control register*/ - ps->IO.lastPortMode = a; /* save it for restoring later */ - a = a | 0x20; /* set bit 5 of control reg */ - _OUTB_CTRL(ps,a); /* set to Fast Centronics/bi-directional/PS2 */ - _DO_UDELAY(1); - a = 0; - - _OUTB_DATA(ps,0x55); - _DO_UDELAY(1); - if ((inb(ps->IO.portBase)) != 0x55) /* read data */ - a++; - - _OUTB_DATA(ps,0xAA); - _DO_UDELAY(1); - - if (_INB_DATA(ps) != 0xAA) /* read data */ - a++; - - if( 2 == a ) { - DBG(DBG_LOW, "Port is set to PS2 bidirectional mode.\n"); - ps->IO.portMode = _PORT_BIDI; - return _OK; - - } else { - DBG(DBG_LOW, "Port could not be set to PS2 mode. " - "Using SPP mode.\n"); - _OUTB_CTRL(ps,(Byte)ps->IO.lastPortMode); /* restore */ - _DO_UDELAY(1); - ps->IO.portMode = _PORT_SPP; - } - } - - /* reaching this point, we're back in SPP mode and there's no need - * to restore at shutdown... - */ - ps->IO.lastPortMode = 0xFFFF; - - return _OK; -} - -/** check the state of the par-port and switch to EPP-mode if possible - */ -static int miscSetPortMode( pScanData ps ) -{ - /* try to detect the port settings, SPP seems to work in any case ! */ - port_feature = initPortProbe( ps ); - -#ifdef DEBUG - miscShowPortModes( port_feature ); -#endif - - switch( ps->IO.forceMode ) { - - case 1: - DBG( DBG_LOW, "Use of SPP-mode enforced\n" ); - ps->IO.portMode = _PORT_SPP; - return _OK; - break; - - case 2: - DBG( DBG_LOW, "Use of EPP-mode enforced\n" ); - ps->IO.portMode = _PORT_EPP; - return _OK; - break; - - default: - break; - } - - if( !(port_feature & PARPORT_MODE_PCEPP)) { - - if( !(port_feature & PARPORT_MODE_PCSPP )) { - _PRINT("\nThis Port supports not the SPP- or EPP-Mode\n" ); - _PRINT("Please activate SPP-Mode, EPP-Mode or\nEPP + ECP-Mode!\n"); - return _E_NOSUPP; - } else { - DBG(DBG_LOW, "Using SPP-mode\n" ); - ps->IO.portMode = _PORT_SPP; - } - } else { - DBG(DBG_LOW, "Using EPP-mode\n" ); - ps->IO.portMode = _PORT_EPP; - } - - /* else try to set to a faster mode than SPP */ - return miscSetFastMode( ps ); -} -#endif - /** miscNextLongRand() -- generate 2**31-2 random numbers ** ** public domain by Ray Gardner @@ -488,34 +183,6 @@ _LOC int MiscReinitStruct( pScanData ps ) */ _LOC int MiscInitPorts( pScanData ps, int port ) { -#ifdef __KERNEL__ - int status; - - if( NULL == ps ) - return _E_NULLPTR; - - /* - * Get access to the ports - */ - ps->IO.portBase = (UShort)port; - - status = miscSetPortMode(ps); - - if( _OK != status ) { - ps->sCaps.wIOBase = _NO_BASE; - ps->IO.portBase = _NO_BASE; - return status; - } - - /* - * the port settings - */ - ps->IO.pbSppDataPort = (UShort)port; - ps->IO.pbStatusPort = (UShort)port+1; - ps->IO.pbControlPort = (UShort)port+2; - ps->IO.pbEppDataPort = (UShort)port+4; - -#else int mode, mts; if( NULL == ps ) @@ -560,7 +227,6 @@ _LOC int MiscInitPorts( pScanData ps, int port ) sanei_pp_setmode( ps->pardev, mts ); _VAR_NOT_USED( port ); -#endif return _OK; } @@ -568,11 +234,6 @@ _LOC int MiscInitPorts( pScanData ps, int port ) */ _LOC void MiscRestorePort( pScanData ps ) { -#ifdef __KERNEL__ - if( 0 == ps->IO.pbSppDataPort ) - return; -#endif - DBG(DBG_LOW,"MiscRestorePort()\n"); /* don't restore if not necessary */ @@ -582,19 +243,9 @@ _LOC void MiscRestorePort( pScanData ps ) } /*Restore Port-Mode*/ -#ifdef __KERNEL__ - if( port_feature & PARPORT_MODE_PCECR ){ - _OUTB_ECTL( ps, (Byte)ps->IO.lastPortMode ); - _DO_UDELAY(1); - } else { - _OUTB_CTRL( ps, (Byte)ps->IO.lastPortMode ); - _DO_UDELAY(1); - } -#else if( port_feature & PPA_PROBE_ECR ){ _OUTB_ECTL(ps,ps->IO.lastPortMode); } -#endif } /** Initializes a timer. @@ -605,11 +256,7 @@ _LOC void MiscStartTimer( TimerDef *timer , unsigned long us) { struct timeval start_time; -#ifdef __KERNEL__ - _GET_TIME( &start_time ); -#else gettimeofday(&start_time, NULL); -#endif *timer = (TimerDef)start_time.tv_sec * 1000000 + (TimerDef)start_time.tv_usec + us; } @@ -624,21 +271,14 @@ _LOC int MiscCheckTimer( TimerDef *timer ) { struct timeval current_time; -#ifdef __KERNEL__ - _GET_TIME( ¤t_time ); -#else gettimeofday(¤t_time, NULL); -#endif if ((TimerDef)current_time.tv_sec * 1000000 + (TimerDef)current_time.tv_usec > *timer) { return _E_TIMEOUT; } else { -#ifdef __KERNEL__ - schedule(); /*#else sched_yield(); */ -#endif return _OK; } } @@ -673,65 +313,8 @@ _LOC Bool MiscAllPointersSet( pScanData ps ) */ _LOC int MiscRegisterPort( pScanData ps, int portAddr ) { -#ifndef __KERNEL__ DBG( DBG_LOW, "Assigning port handle %i\n", portAddr ); ps->pardev = portAddr; -#else - -#ifdef LINUX_26 - __ps = ps; - __pa = portAddr; - - DBG( DBG_LOW, "Requested port at 0x%02x\n", portAddr ); - - if( parport_register_driver(&pt_drv)) { - /* Failed; nothing we can do. */ - return _E_REGISTER; - } - -#else - struct parport *pp = NULL; - - DBG( DBG_LOW, "Requested port at 0x%02x\n", portAddr ); - - pp = parport_enumerate(); - ps->pardev = NULL; - - if( NULL == pp ) { - return _E_PORTSEARCH; - } - - /* go through the list - */ - for( ps->pp = NULL; NULL != pp; ) { - - if( pp->base == (unsigned long)portAddr ) { - DBG( DBG_LOW, "Requested port (0x%02x) found\n", portAddr ); - DBG( DBG_LOW, "Port mode reported: (0x%04x)\n", pp->modes ); - ps->pp = pp; - break; - } - pp = pp->next; - } -#endif - - if( NULL == ps->pp ) { - printk("PORT not found!!!\n"); - return _E_NO_PORT; - } - - /* - * register this device - */ - ps->pardev = parport_register_device( ps->pp, "Plustek Driver", - miscPreemptionCallback, NULL, NULL, 0, (pVoid)ps ); - - if( NULL == ps->pardev ) { - return _E_REGISTER; - } - - DBG( DBG_LOW, "Port for device %u registered\n", ps->devno ); -#endif portIsClaimed[ps->devno] = 0; return _OK; @@ -741,17 +324,7 @@ _LOC int MiscRegisterPort( pScanData ps, int portAddr ) */ _LOC void MiscUnregisterPort( pScanData ps ) { -#ifdef __KERNEL__ - if( NULL != ps->pardev ) { - DBG( DBG_LOW, "Port unregistered\n" ); - parport_unregister_device( ps->pardev ); - } -#ifdef LINUX_26 - parport_unregister_driver( &pt_drv ); -#endif -#else sanei_pp_close( ps->pardev ); -#endif } /** Try to claim the port @@ -763,11 +336,7 @@ _LOC int MiscClaimPort( pScanData ps ) if( 0 == portIsClaimed[ps->devno] ) { DBG( DBG_HIGH, "Try to claim the parport\n" ); -#ifdef __KERNEL__ - if( 0 != parport_claim( ps->pardev )) { -#else if( SANE_STATUS_GOOD != sanei_pp_claim( ps->pardev )) { -#endif return _E_BUSY; } } @@ -785,11 +354,7 @@ _LOC void MiscReleasePort( pScanData ps ) if( 0 == portIsClaimed[ps->devno] ) { DBG( DBG_HIGH, "Releasing parport\n" ); -#ifdef __KERNEL__ - parport_release( ps->pardev ); -#else sanei_pp_release( ps->pardev ); -#endif } } } diff --git a/backend/plustek-pp_motor.c b/backend/plustek-pp_motor.c index ac6d458..b58e92d 100644 --- a/backend/plustek-pp_motor.c +++ b/backend/plustek-pp_motor.c @@ -3128,7 +3128,7 @@ _LOC Bool MotorP96AheadToDarkArea( pScanData ps ) if((bDark < 0x80) || (wTotalLastLine==wTL)) { IOCmdRegisterToScanner( ps, ps->RegMotorControl, 0 ); - return _TRUE; + return _TRUE; } } #else @@ -3216,9 +3216,10 @@ _LOC void MotorP98003BackToHomeSensor( pScanData ps ) MiscStartTimer( &timer, _SECOND * 2 ); while(!(IOGetScanState( ps, _TRUE ) & _SCANSTATE_STOP) && - !MiscCheckTimer( &timer )); + !MiscCheckTimer( &timer )) + ; - _DODELAY( 1000UL ); + _DODELAY( 1000UL ); ps->AsicReg.RD_ModeControl = _ModeScan; @@ -3324,7 +3325,8 @@ _LOC void MotorP98003PositionYProc( pScanData ps, ULong steps) MiscStartTimer( &timer, _SECOND * 5 ); while(!(IOGetScanState( ps, _TRUE ) & _SCANSTATE_STOP) && - (!MiscCheckTimer( &timer ))); + !MiscCheckTimer( &timer )) + ; _DODELAY( 12 ); diff --git a/backend/plustek-pp_p12.c b/backend/plustek-pp_p12.c index e78c682..26566e5 100644 --- a/backend/plustek-pp_p12.c +++ b/backend/plustek-pp_p12.c @@ -472,7 +472,7 @@ static void p12Init98003( pScanData ps, Bool shading ) if( _AGFA_SCANNER == ps->Device.bPCBID ) ps->Device.bDACType = _DA_WOLFSON8141; - DBG( DBG_LOW, "PCB-ID=0x%02x, CCD-ID=0x%02x, DAC-TYPE=0x%02x\n", + DBG( DBG_LOW, "PCB-ID=0x%02x, CCD-ID=0x%02x, DAC-TYPE=0x%02x\n", ps->Device.bPCBID, ps->Device.bCCDID, ps->Device.bDACType ); p12InitiateComponentModel( ps ); diff --git a/backend/plustek-pp_p48xx.c b/backend/plustek-pp_p48xx.c index 3c28357..9ae1239 100644 --- a/backend/plustek-pp_p48xx.c +++ b/backend/plustek-pp_p48xx.c @@ -613,9 +613,9 @@ static void p48xxSetGeneralRegister( pScanData ps ) if (ps->DataInf.xyPhyDpi.x <= 200) ps->AsicReg.RD_ScanControl |= _SCAN_1ST_AVERAGE; - DBG( DBG_LOW, "RD_ModeControl = 0x%02x\n", ps->AsicReg.RD_ModeControl ); - DBG( DBG_LOW, "RD_MotorControl = 0x%02x\n", ps->Asic96Reg.RD_MotorControl ); - DBG( DBG_LOW, "RD_ScanControl = 0x%02x\n", ps->AsicReg.RD_ScanControl ); + DBG( DBG_LOW, "RD_ModeControl = 0x%02x\n", ps->AsicReg.RD_ModeControl ); + DBG( DBG_LOW, "RD_MotorControl = 0x%02x\n", ps->Asic96Reg.RD_MotorControl ); + DBG( DBG_LOW, "RD_ScanControl = 0x%02x\n", ps->AsicReg.RD_ScanControl ); } /*............................................................................. diff --git a/backend/plustek-pp_procs.h b/backend/plustek-pp_procs.h index 96666ea..972252a 100644 --- a/backend/plustek-pp_procs.h +++ b/backend/plustek-pp_procs.h @@ -219,13 +219,6 @@ _LOC void IORegisterDirectToScanner( pScanData, Byte bReg ); _LOC void IOSoftwareReset ( pScanData ps ); _LOC void IOReadScannerImageData ( pScanData ps, pUChar pBuf, ULong size ); -#ifdef __KERNEL__ -_LOC void IOOut ( Byte data, UShort port ); -_LOC void IOOutDelayed( Byte data, UShort port ); -_LOC Byte IOIn ( UShort port ); -_LOC Byte IOInDelayed ( UShort port ); -#endif - /* * implementation in plustek-pp_tpa.c */ @@ -238,16 +231,6 @@ _LOC void TPAP98003Reshading ( pScanData ps ); */ _LOC void ScaleX( pScanData ps, pUChar inBuf, pUChar outBuf ); -/* - * implementation in plustek-pp_procfs.c (Kernel-mode only) - */ -#ifdef __KERNEL__ -int ProcFsInitialize ( void ); -void ProcFsShutdown ( void ); -void ProcFsRegisterDevice ( pScanData ps ); -void ProcFsUnregisterDevice( pScanData ps ); -#endif - #endif /* guard __PROCS_H__ */ /* END PLUSTEK-PP_PROCS.H ...................................................*/ diff --git a/backend/plustek-pp_ptdrv.c b/backend/plustek-pp_ptdrv.c index bf3a389..58b58b1 100644 --- a/backend/plustek-pp_ptdrv.c +++ b/backend/plustek-pp_ptdrv.c @@ -94,52 +94,13 @@ * If you do not wish that, delete this exception notice. *
*/ -#ifdef __KERNEL__ -# include -# include - -# ifdef CONFIG_DEVFS_FS -# include -# if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,69)) -# define DEVFS_26_STYLE -# endif -# endif -#endif - #include "plustek-pp_scan.h" -#ifdef __KERNEL__ -# include -#endif - /****************************** static vars **********************************/ /* default port is at 0x378 */ static int port[_MAX_PTDEVS] = { 0x378, 0, 0, 0 }; -#ifdef __KERNEL__ -static pScanData PtDrvDevices[_MAX_PTDEVS] = { [0 ... (_MAX_PTDEVS-1)] = NULL}; - -/* default is 180 secs for lamp switch off */ -static int lampoff[_MAX_PTDEVS] = { [0 ... (_MAX_PTDEVS-1)] = 180 }; - -/* warmup period for lamp (30 secs) */ -static int warmup[_MAX_PTDEVS] = { [0 ... (_MAX_PTDEVS-1)] = 30 }; - -/* switch lamp off on unload (default = no)*/ -static int lOffonEnd[_MAX_PTDEVS] = { [0 ... (_MAX_PTDEVS-1)] = 0 }; - -/* model override (0-->none) */ -static UShort mov[_MAX_PTDEVS] = { [0 ... (_MAX_PTDEVS-1)] = 0 }; - -/* forceMode (0--> auto, 1: SPP, 2:EPP, others: auto) */ -static UShort forceMode[_MAX_PTDEVS] = { [0 ... (_MAX_PTDEVS-1)] = 0 }; - -/* to use delayed I/O for each device */ -static Bool slowIO[_MAX_PTDEVS] = { [0 ... (_MAX_PTDEVS-1)] = _FALSE }; - -#else - static pScanData PtDrvDevices[_MAX_PTDEVS]= { NULL, NULL, NULL, NULL }; static int lampoff[_MAX_PTDEVS] = { 180, 180, 180, 180 }; static int warmup[_MAX_PTDEVS] = { 30, 30, 30, 30 }; @@ -147,140 +108,14 @@ static int lOffonEnd[_MAX_PTDEVS] = { 0, 0, 0, 0 }; static UShort mov[_MAX_PTDEVS] = { 0, 0, 0, 0 }; static UShort forceMode[_MAX_PTDEVS] = { 0, 0, 0, 0 }; -#endif - /* timers for warmup checks */ static TimerDef toTimer[_MAX_PTDEVS]; -#ifndef __KERNEL__ static Bool PtDrvInitialized = _FALSE; #ifdef HAVE_SETITIMER static struct itimerval saveSettings; #endif -#else -static Bool deviceScanning = _FALSE; - -static struct timer_list tl[_MAX_PTDEVS]; - -/* for calculation of the timer expiration */ -extern volatile unsigned long jiffies; - -/* the parameter interface - */ -#if ((LINUX_VERSION_CODE > 0x020111) && defined(MODULE)) -MODULE_AUTHOR("Gerhard Jaeger "); -MODULE_DESCRIPTION("Plustek parallelport-scanner driver"); - -/* addresses this 'new' license feature... */ -#ifdef MODULE_LICENSE -MODULE_LICENSE("GPL"); -#endif - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,13)) -MODULE_PARM(port, "1-" __MODULE_STRING(_MAX_PTDEVS) "i"); -MODULE_PARM(lampoff, "1-" __MODULE_STRING(_MAX_PTDEVS) "i"); -MODULE_PARM(warmup,"1-" __MODULE_STRING(_MAX_PTDEVS) "i"); -MODULE_PARM(lOffonEnd, "1-" __MODULE_STRING(_MAX_PTDEVS) "i"); -MODULE_PARM(mov, "1-" __MODULE_STRING(_MAX_PTDEVS) "i"); -MODULE_PARM(slowIO,"1-" __MODULE_STRING(_MAX_PTDEVS) "i"); -MODULE_PARM(forceMode,"1-" __MODULE_STRING(_MAX_PTDEVS) "i"); - -#else - -static int array_len = _MAX_PTDEVS; - -module_param_array(port, int, &array_len, 0); -module_param_array(lampoff, int, &array_len, 0); -module_param_array(warmup, int, &array_len, 0); -module_param_array(lOffonEnd, int, &array_len, 0); -module_param_array(mov, ushort, &array_len, 0); -module_param_array(slowIO, int, &array_len, 0); -module_param_array(forceMode, ushort, &array_len, 0); - -#endif - - -MODULE_PARM_DESC(port, "I/O base address of parport"); -MODULE_PARM_DESC(lampoff, "Lamp-Off timer preset in seconds"); -MODULE_PARM_DESC(warmup, "Minimum warmup time in seconds"); -MODULE_PARM_DESC(lOffonEnd, "1 - switchoff lamp on unload"); -MODULE_PARM_DESC(mov, "Modell-override switch"); -MODULE_PARM_DESC(slowIO, "0 = Fast I/O, 1 = Delayed I/O"); -MODULE_PARM_DESC(forceMode, "0 = use auto detection, " - "1 = use SPP mode, 2 = use EPP mode"); -#endif - -#if defined (CONFIG_DEVFS_FS) -# ifndef (DEVFS_26_STYLE) - static devfs_handle_t devfs_handle = NULL; -# endif -#else -# ifdef LINUX_26 - static class_t *ptdrv_class; -# endif -#endif -/* - * the module interface - */ -static int pt_drv_open ( struct inode *, struct file *); -static CLOSETYPE pt_drv_close( struct inode *, struct file *); - -#ifdef LINUX_20 - static int pt_drv_read( struct inode*, struct file*, char*, int ); - static int pt_drv_write( struct inode*, struct file*, const char*, int ); -#else - static ssize_t pt_drv_read ( struct file *file, - char *buffer, size_t count, loff_t *); - static ssize_t pt_drv_write( struct file *file, - const char *buffer, size_t tmp,loff_t *count); -#endif - -#ifdef NOLOCK_IOCTL - static long pt_drv_ioctl( struct file *, UInt, unsigned long ); -#else - static int pt_drv_ioctl( struct inode *, struct file *, UInt, unsigned long ); -#endif - - -/* - * the driver interface - */ -#ifdef LINUX_20 - -static struct file_operations pt_drv_fops = -{ - NULL, /* seek */ - pt_drv_read, /* read */ - pt_drv_write, /* write */ - NULL, /* readdir */ - NULL, /* select */ - pt_drv_ioctl, /* ioctl */ - NULL, /* mmap */ - pt_drv_open, /* open */ - pt_drv_close, /* release */ - NULL, /* fsync */ - NULL, /* fasync */ - NULL, /* check_media_change */ - NULL /* revalidate */ -}; - -#else /* 2.2.x and higher stuff */ - -static struct file_operations pt_drv_fops = { -#ifdef LINUX_24 - owner: THIS_MODULE, -#endif - read: pt_drv_read, - write: pt_drv_write, - IOCTL: pt_drv_ioctl, - open: pt_drv_open, - release: pt_drv_close, -}; - -#endif - -#endif /* guard __KERNEL */ /****************************** some prototypes ******************************/ @@ -288,23 +123,6 @@ static void ptdrvStartLampTimer( pScanData ps ); /****************************** local functions ******************************/ -#ifdef __KERNEL__ -/** depending on the device, return the data structure - */ -static pScanData get_pt_from_inode(struct inode *ip) -{ - int minor = _MINOR(ip); - - /* - * unit out of range - */ - if (minor >= _MAX_PTDEVS ) - return NULL; - - return( PtDrvDevices[minor] ); -} -#endif - /** copy user-space data into kernel memory */ static int getUserPtr(const pVoid useraddr, pVoid where, UInt size ) @@ -315,32 +133,9 @@ static int getUserPtr(const pVoid useraddr, pVoid where, UInt size ) if((NULL == useraddr) || ( 0 == size)) return _E_INVALID; -#ifdef __KERNEL__ - if ((err = verify_area_20(VERIFY_READ, useraddr, size))) - return err; -#endif - switch (size) { -#ifdef __KERNEL__ - case sizeof(u_char): - GET_USER_RET(*(u_char *)where, (u_char *) useraddr, -EFAULT); - break; - - case sizeof(u_short): - GET_USER_RET(*(u_short *)where, (u_short *) useraddr, -EFAULT); - break; - - case sizeof(u_long): - GET_USER_RET(*(u_long *)where, (u_long *) useraddr, -EFAULT); - break; - - default: - if (copy_from_user(where, useraddr, size)) - return -EFAULT; -#else default: memcpy( where, useraddr, size ); -#endif } return err; } @@ -354,20 +149,11 @@ static int putUserPtr( const pVoid ptr, pVoid useraddr, UInt size ) if (NULL == useraddr) return _E_INVALID; -#ifdef __KERNEL__ - if ((err = verify_area_20(VERIFY_WRITE, useraddr, size))) - return err; - - if (copy_to_user(useraddr, ptr, size )) - return -EFAULT; -#else memcpy( useraddr, ptr, size ); -#endif return err; } -#ifndef __KERNEL__ static unsigned long copy_from_user( pVoid dest, pVoid src, unsigned long len ) { memcpy( dest, src, len ); @@ -379,37 +165,16 @@ static unsigned long copy_to_user( pVoid dest, pVoid src, unsigned long len ) memcpy( dest, src, len ); return 0; } -#endif /** */ static int putUserVal(const ULong value, pVoid useraddr, UInt size) { -#ifdef __KERNEL__ - int err; -#endif - if (NULL == useraddr) return _E_INVALID; -#ifdef __KERNEL__ - if ((err = verify_area_20(VERIFY_WRITE, useraddr, size))) - return err; -#endif - switch (size) { -#ifdef __KERNEL__ - case sizeof(u_char): - PUT_USER_RET((u_char)value, (u_char *) useraddr, -EFAULT); - break; - case sizeof(u_short): - PUT_USER_RET((u_short)value, (u_short *) useraddr, -EFAULT); - break; - case sizeof(u_long): - PUT_USER_RET((u_long)value, (u_long *) useraddr, -EFAULT); - break; -#else case sizeof(UChar): *(pUChar)useraddr = (UChar)value; break; @@ -420,7 +185,6 @@ static int putUserVal(const ULong value, pVoid useraddr, UInt size) *(pULong)useraddr = (ULong)value; break; -#endif default: return _E_INVALID; } @@ -506,22 +270,14 @@ static void ptdrvLampWarmup( pScanData ps ) /** */ -#ifdef __KERNEL__ -static void ptdrvLampTimerIrq( unsigned long ptr ) -#else static void ptdrvLampTimerIrq( int sig_num ) -#endif { pScanData ps; DBG( DBG_HIGH, "!! IRQ !! Lamp-Timer stopped.\n" ); -#ifdef __KERNEL__ - ps = (pScanData)ptr; -#else _VAR_NOT_USED( sig_num ); ps = PtDrvDevices[0]; -#endif /* * paranoia check! @@ -559,7 +315,6 @@ static void ptdrvLampTimerIrq( int sig_num ) */ static void ptdrvStartLampTimer( pScanData ps ) { -#ifndef __KERNEL__ sigset_t block, pause_mask; struct sigaction s; #ifdef HAVE_SETITIMER @@ -597,17 +352,6 @@ static void ptdrvStartLampTimer( pScanData ps ) #else alarm( ps->lampoff ); #endif -#else - init_timer( &tl[ps->devno] ); - - /* timeout val in seconds */ - tl[ps->devno].expires = jiffies + ps->lampoff * HZ; - tl[ps->devno].data = (unsigned long)ps; - tl[ps->devno].function = ptdrvLampTimerIrq; - - if( 0 != ps->lampoff ) - add_timer( &tl[ps->devno] ); -#endif DBG( DBG_HIGH, "Lamp-Timer started!\n" ); } @@ -616,7 +360,6 @@ static void ptdrvStartLampTimer( pScanData ps ) */ static void ptdrvStopLampTimer( pScanData ps ) { -#ifndef __KERNEL__ sigset_t block, pause_mask; /* block SIGALRM */ @@ -630,10 +373,6 @@ static void ptdrvStopLampTimer( pScanData ps ) _VAR_NOT_USED( ps ); alarm(0); #endif -#else - if( 0 != ps->lampoff ) - del_timer( &tl[ps->devno] ); -#endif DBG( DBG_HIGH, "Lamp-Timer stopped!\n" ); } @@ -701,23 +440,11 @@ static int ptdrvOpenDevice( pScanData ps ) UShort lastMode; ULong devno; -#ifdef __KERNEL__ - UShort flags; - struct pardevice *pd; - struct parport *pp; - ProcDirDef procDir; -#else int pd; -#endif /* * push some values from the struct */ -#ifdef __KERNEL__ - flags = ps->flags; - pp = ps->pp; - procDir = ps->procDir; -#endif pd = ps->pardev; iobase = ps->sCaps.wIOBase; asic = ps->sCaps.AsicID; @@ -734,29 +461,10 @@ static int ptdrvOpenDevice( pScanData ps ) /* * pop the val(s) */ -#ifdef __KERNEL__ - ps->flags = flags; - ps->pp = pp; - ps->procDir = procDir; -#endif ps->pardev = pd; ps->bLastLampStatus = lastStat; ps->IO.lastPortMode = lastMode; ps->devno = devno; - -#ifdef __KERNEL__ - if( _TRUE == slowIO[devno] ) { - DBG( DBG_LOW, "Using slow I/O\n" ); - ps->IO.slowIO = _TRUE; - ps->IO.fnOut = IOOutDelayed; - ps->IO.fnIn = IOInDelayed; - } else { - DBG( DBG_LOW, "Using fast I/O\n" ); - ps->IO.slowIO = _FALSE; - ps->IO.fnOut = IOOut; - ps->IO.fnIn = IOIn; - } -#endif ps->ModelOverride = mov[devno]; ps->warmup = warmup[devno]; ps->lampoff = lampoff[devno]; @@ -798,19 +506,6 @@ static int ptdrvInit( int devno ) return _E_ALLOC; } -#ifdef __KERNEL__ - if( _TRUE == slowIO[devno] ) { - DBG( DBG_LOW, "Using slow I/O\n" ); - ps->IO.slowIO = _TRUE; - ps->IO.fnOut = IOOutDelayed; - ps->IO.fnIn = IOInDelayed; - } else { - DBG( DBG_LOW, "Using fast I/O\n" ); - ps->IO.slowIO = _FALSE; - ps->IO.fnOut = IOOut; - ps->IO.fnIn = IOIn; - } -#endif ps->ModelOverride = mov[devno]; ps->warmup = warmup[devno]; ps->lampoff = lampoff[devno]; @@ -845,13 +540,8 @@ static int ptdrvInit( int devno ) if( _OK == retval ) { -#ifdef __KERNEL__ - _PRINT( "pt_drv%u: %s found on port 0x%04x\n", - devno, MiscGetModelName(ps->sCaps.Model), ps->IO.pbSppDataPort ); -#else DBG( DBG_LOW, "pt_drv%u: %s found\n", devno, MiscGetModelName(ps->sCaps.Model)); -#endif /* * initialize the timespan timer @@ -859,43 +549,23 @@ static int ptdrvInit( int devno ) MiscStartTimer( &toTimer[ps->devno], (_SECOND * ps->warmup)); if( 0 == ps->lampoff ) -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_LOW, -#endif "pt_drv%u: Lamp-Timer switched off.\n", devno ); else { -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_LOW, -#endif "pt_drv%u: Lamp-Timer set to %u seconds.\n", devno, ps->lampoff ); } -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_LOW, -#endif "pt_drv%u: WarmUp period set to %u seconds.\n", devno, ps->warmup ); if( 0 == ps->lOffonEnd ) { -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_LOW, -#endif "pt_drv%u: Lamp untouched on driver unload.\n", devno ); } else { -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_LOW, -#endif "pt_drv%u: Lamp switch-off on driver unload.\n", devno ); } @@ -1287,31 +957,19 @@ static int ptdrvRead( pScanData ps, pUChar buffer, int count ) int retval = _OK; #ifdef _ASIC_98001_SIM -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_LOW, -#endif "pt_drv : Software-Emulation active, can't read!\n" ); return _E_INVALID; #endif if((NULL == buffer) || (NULL == ps)) { -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_HIGH, -#endif "pt_drv : Internal NULL-pointer!\n" ); return _E_NULLPTR; } if( 0 == count ) { -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_HIGH, -#endif "pt_drv%u: reading 0 bytes makes no sense!\n", ps->devno ); return _E_INVALID; } @@ -1325,11 +983,7 @@ static int ptdrvRead( pScanData ps, pUChar buffer, int count ) * when using the cat /dev/pt_drv command! */ if (!(ps->DataInf.dwVxdFlag & _VF_ENVIRONMENT_READY)) { -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_HIGH, -#endif "pt_drv%u: Cannot read, driver not initialized!\n",ps->devno); return _E_SEQUENCE; } @@ -1340,11 +994,7 @@ static int ptdrvRead( pScanData ps, pUChar buffer, int count ) ps->Scan.bp.pMonoBuf = _KALLOC( ps->DataInf.dwAppPhyBytesPerLine, GFP_KERNEL); if ( NULL == ps->Scan.bp.pMonoBuf ) { -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_HIGH, -#endif "pt_drv%u: Not enough memory available!\n", ps->devno ); return _E_ALLOC; } @@ -1355,11 +1005,7 @@ static int ptdrvRead( pScanData ps, pUChar buffer, int count ) scaleBuf = _KALLOC( ps->DataInf.dwAppPhyBytesPerLine, GFP_KERNEL); if ( NULL == scaleBuf ) { _KFREE( ps->Scan.bp.pMonoBuf ); -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_HIGH, -#endif "pt_drv%u: Not enough memory available!\n", ps->devno ); return _E_ALLOC; } @@ -1406,11 +1052,7 @@ static int ptdrvRead( pScanData ps, pUChar buffer, int count ) retval = ps->Calibration( ps ); if( _OK != retval ) { -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_HIGH, -#endif "pt_drv%u: calibration failed, result = %i\n", ps->devno, retval ); goto ReadFinished; @@ -1507,12 +1149,9 @@ static int ptdrvRead( pScanData ps, pUChar buffer, int count ) ps->Scan.dwLinesToRead--; /* needed, esp. to avoid freezing the system in SPP mode */ -#ifdef __KERNEL__ - schedule(); /*#else sched_yield(); */ -#endif } if (ps->fScanningStatus) { @@ -1565,346 +1204,6 @@ ReadFinished: return retval; } -/*************************** the module interface ****************************/ - -#ifdef __KERNEL__ /* the kernel module interface */ - -/* Designed to be used as a module */ -#ifdef MODULE - -/*............................................................................. - * gets called upon module initialization - */ -#ifdef LINUX_26 -static int __init ptdrv_init( void ) -#else -int init_module( void ) -#endif -{ - UInt devCount; - UInt i; - int retval = _OK; - int result = _OK; -#if (defined(CONFIG_DEVFS_FS) && !defined(DEVFS_26_STYLE)) - char controlname[24]; -#endif -# ifdef LINUX_26 - char devname[20]; -#endif - - DBG( DBG_HIGH, "*********************************************\n" ); - DBG( DBG_HIGH, "pt_drv: init_module()\n" ); - -#if (defined(CONFIG_DEVFS_FS) && !defined(DEVFS_26_STYLE)) - devfs_handle = devfs_mk_dir(NULL, "scanner", NULL); - if( devfs_register_chrdev(_PTDRV_MAJOR, _DRV_NAME, &pt_drv_fops)) { -#else - if( register_chrdev(_PTDRV_MAJOR, _DRV_NAME, &pt_drv_fops)) { -#endif - - _PRINT(KERN_INFO "pt_drv: unable to get major %d for pt_drv devices\n", - _PTDRV_MAJOR); - return -EIO; - } - printk( KERN_INFO "pt_drv : driver version "_PTDRV_VERSTR"\n" ); - -#if !defined (CONFIG_DEVFS_FS) && defined (LINUX_26) - ptdrv_class = class_create(THIS_MODULE, "scanner"); - if (IS_ERR(ptdrv_class)) - goto out_devfs; -#endif - - /* register the proc_fs */ - ProcFsInitialize(); - - /* go through the list of defined ports and try to find a device - */ - devCount = 0; - for( i = 0; i < _MAX_PTDEVS; i++ ) { - - if( 0 != port[i] ) { - result = ptdrvInit( i ); - - if ( _OK == result ) { - PtDrvDevices[i]->flags |= _PTDRV_INITALIZED; - -#ifdef CONFIG_DEVFS_FS -# ifndef DEVFS_26_STYLE - sprintf( controlname, "scanner/pt_drv%d", devCount ); - devfs_register( NULL, controlname, - DEVFS_FL_DEFAULT, _PTDRV_MAJOR, 0, - (S_IFCHR | S_IRUGO | S_IWUGO | S_IFCHR), - &pt_drv_fops, NULL ); -# else /* DEVFS_26_STYLE */ - devfs_mk_cdev(MKDEV(_PTDRV_MAJOR, devCount), - (S_IFCHR | S_IRUGO | S_IWUGO | S_IFCHR), - "scanner/pt_drv%d", devCount); -# endif -#else -# ifdef LINUX_26 - sprintf(devname, "pt_drv%d", devCount); - CLASS_DEV_CREATE(ptdrv_class, - MKDEV(_PTDRV_MAJOR, devCount), NULL, - devname); - -# endif /* LINUX_26 */ -#endif /* CONFIG_DEVFS_FS */ - ProcFsRegisterDevice( PtDrvDevices[i] ); - devCount++; - } else { - retval = result; - ptdrvShutdown( PtDrvDevices[i] ); - PtDrvDevices[i] = NULL; - } - } - } - - /* * if something went wrong, shutdown all... */ - if( devCount == 0 ) { - -#if !defined (CONFIG_DEVFS_FS) && defined (LINUX_26) -out_devfs: - class_destroy(ptdrv_class); -#endif - -#if (defined(CONFIG_DEVFS_FS) && !defined(DEVFS_26_STYLE)) - devfs_unregister_chrdev( _PTDRV_MAJOR, _DRV_NAME ); -#else - unregister_chrdev( _PTDRV_MAJOR, _DRV_NAME ); -#endif - ProcFsShutdown(); - -#ifdef __KERNEL__ - _PRINT( KERN_INFO "pt_drv : no device(s) detected, (%i)\n", retval ); -#endif - - } else { - - DBG( DBG_HIGH, "pt_drv : init done, %u device(s) found\n", devCount ); - retval = _OK; - } - DBG( DBG_HIGH, "---------------------------------------------\n" ); - - deviceScanning = _FALSE; - return retval; -} - -/*............................................................................. - * cleanup the show - */ -#ifdef LINUX_26 -static void __exit ptdrv_exit( void ) -#else -void cleanup_module( void ) -#endif -{ - UInt i; - pScanData ps; -#if (defined(CONFIG_DEVFS_FS) && !defined(DEVFS_26_STYLE)) - char controlname[24]; - devfs_handle_t master; -#endif - - DBG( DBG_HIGH, "pt_drv: cleanup_module()\n" ); - - for ( i = 0; i < _MAX_PTDEVS; i++ ) { - - ps = PtDrvDevices[i]; - PtDrvDevices[i] = NULL; - - if ( NULL != ps ) { -#ifdef CONFIG_DEVFS_FS -# ifndef DEVFS_26_STYLE - sprintf( controlname, "scanner/pt_drv%d", i ); - master = devfs_find_handle( NULL,controlname, 0, 0, - DEVFS_SPECIAL_CHR, 0 ); - devfs_unregister( master ); -# else - devfs_remove("scanner/pt_drv%d", i); -# endif -#else -# ifdef LINUX_26 - CLASS_DEV_DESTROY(ptdrv_class, MKDEV(_PTDRV_MAJOR, i)); -# endif /* LINUX_26 */ -#endif /* CONFIG_DEVFS_FS */ - ptdrvShutdown( ps ); - ProcFsUnregisterDevice( ps ); - } - } - -#if (defined(CONFIG_DEVFS_FS) && !defined(DEVFS_26_STYLE)) - devfs_unregister_chrdev( _PTDRV_MAJOR, _DRV_NAME ); -#else - unregister_chrdev( _PTDRV_MAJOR, _DRV_NAME ); -#endif - ProcFsShutdown(); - -#if !defined (CONFIG_DEVFS_FS) && defined (LINUX_26) - class_destroy(ptdrv_class); -#endif - - DBG( DBG_HIGH, "pt_drv: cleanup done.\n" ); - DBG( DBG_HIGH, "*********************************************\n" ); -} - -#ifdef LINUX_26 -module_init(ptdrv_init); -module_exit(ptdrv_exit); -#endif - -#endif /*MODULE*/ - - -/*............................................................................. - * device open... - */ -static int pt_drv_open(struct inode *inode, struct file *file) -{ - pScanData ps; - - DBG( DBG_HIGH, "pt_drv_open()\n" ); - - ps = get_pt_from_inode(inode); - - if ( NULL == ps ) { - return(-ENXIO); - } - - /* device not found ? */ - if (!(ps->flags & _PTDRV_INITALIZED)) { - return(-ENXIO); - } - - /* device is busy ? */ - if (ps->flags & _PTDRV_OPEN) { - return(-EBUSY); - } - -#ifdef LINUX_26 - if (!try_module_get(THIS_MODULE)) - return -EAGAIN; -#else - MOD_INC_USE_COUNT; -#endif - ps->flags |= _PTDRV_OPEN; - - return _OK; -} - -/*............................................................................. - * device close... - */ -static CLOSETYPE pt_drv_close(struct inode * inode, struct file * file) -{ - pScanData ps; - - DBG( DBG_HIGH, "pt_drv_close()\n" ); - - if ((ps = get_pt_from_inode(inode)) ) { - - ptdrvClose( ps ); - - ps->flags &= ~_PTDRV_OPEN; -#ifdef LINUX_26 - module_put(THIS_MODULE); -#else - MOD_DEC_USE_COUNT; -#endif - CLOSERETURN(0); - } else { - - DBG( DBG_HIGH, "pt_drv: - close failed!\n" ); - CLOSERETURN(-ENXIO); - } -} - -/*............................................................................. - * read data from device - */ -#ifdef LINUX_20 -static int pt_drv_read(struct inode *inode, struct file *file, - char *buffer, int count) -{ - int result; - pScanData ps; - - if ( !(ps = get_pt_from_inode(inode))) - return(-ENXIO); -#else -static ssize_t pt_drv_read( struct file *file, - char *buffer, size_t count, loff_t *tmp ) -{ - int result; - pScanData ps; - - if ( !(ps = get_pt_from_inode(file->f_dentry->d_inode)) ) - return(-ENXIO); -#endif - if ((result = verify_area_20(VERIFY_WRITE, buffer, count))) - return result; - - /* - * as the driver contains some global vars, it is not - * possible to scan simultaenously with two or more devices - */ - if( _TRUE == deviceScanning ) { - printk( KERN_INFO "pt_drv: device %u busy!!!\n", ps->devno ); - return(-EBUSY); - } - - deviceScanning = _TRUE; - - result = ptdrvRead( ps, buffer, count ); - - deviceScanning = _FALSE; - return result; -} - -/*............................................................................. - * writing makes no sense - */ -#ifdef LINUX_20 -static int pt_drv_write(struct inode * inode, struct file * file, - const char * buffer, int count) -{ - return -EPERM; -} -#else - static ssize_t pt_drv_write( struct file * file,const char * buffer, - size_t tmp,loff_t* count) -{ - return -EPERM; -} -#endif - -/*............................................................................. - * the ioctl interface - */ -#ifdef NOLOCK_IOCTL -static long pt_drv_ioctl( struct file *file, UInt cmd, unsigned long arg ) -{ - pScanData ps; - - if ( !(ps = get_pt_from_inode(file->f_dentry->d_inode)) ) - return(-ENXIO); - - return ptdrvIoctl( ps, cmd, (pVoid)arg); -} -#else -static int pt_drv_ioctl( struct inode *inode, struct file *file, - UInt cmd, unsigned long arg ) -{ - pScanData ps; - - if ( !(ps = get_pt_from_inode(inode)) ) - return(-ENXIO); - - return ptdrvIoctl( ps, cmd, (pVoid)arg); -} -#endif - -#else /* the user-mode interface */ - /*............................................................................. * here we only have wrapper functions */ @@ -1980,6 +1279,4 @@ static int PtDrvRead ( pUChar buffer, int count ) return ptdrvRead( PtDrvDevices[0], buffer, count ); } -#endif /* guard __KERNEL__ */ - /* END PLUSTEK-PP_PTDRV.C ...................................................*/ diff --git a/backend/plustek-pp_scan.h b/backend/plustek-pp_scan.h index ccc9b97..b57148f 100644 --- a/backend/plustek-pp_scan.h +++ b/backend/plustek-pp_scan.h @@ -63,8 +63,6 @@ #ifndef __PLUSTEK_SCAN_H__ #define __PLUSTEK_SCAN_H__ -#ifndef __KERNEL__ - # include # include # include @@ -76,19 +74,6 @@ # ifdef HAVE_SYS_IO_H # include # endif -#else -# include -# include -# include -# include "plustek-pp_sysdep.h" -# include -# include - -#ifdef LINUX_24 -# include -#endif /* LINUX_24 */ - -#endif /* __KERNEL__ */ /*............................................................................. * driver properties @@ -104,20 +89,6 @@ # define _OPF ps->IO.fnOut # define _IPF ps->IO.fnIn -#ifdef __KERNEL__ - -#define _OUTB_CTRL(pSD,port_value) _OPF(port_value,pSD->IO.pbControlPort) -#define _OUTB_DATA(pSD,port_value) _OPF(port_value,pSD->IO.pbSppDataPort) -#define _OUTB_ECTL(pSD,port_value) _OPF(port_value,(pSD->IO.portBase+0x402)) - -#define _INB_CTRL(pSD) _IPF(pSD->IO.pbControlPort) -#define _INB_DATA(pSD) _IPF(pSD->IO.pbSppDataPort) -#define _INB_EPPDATA(pSD) _IPF(pSD->IO.pbEppDataPort) -#define _INB_STATUS(pSD) _IPF(pSD->IO.pbStatusPort) -#define _INB_ECTL(pSD) _IPF((pSD->IO.portBase+0x402)) - -#else - #define _OUTB_CTRL(pSD,port_value) sanei_pp_outb_ctrl(pSD->pardev, port_value) #define _OUTB_DATA(pSD,port_value) sanei_pp_outb_data(pSD->pardev, port_value) #define _OUTB_ECTL(pSD,port_value) @@ -127,32 +98,19 @@ #define _INB_EPPDATA(pSD) sanei_pp_inb_epp(pSD->pardev) #define _INB_STATUS(pSD) sanei_pp_inb_stat(pSD->pardev) -#endif - /*............................................................................. * for memory allocation */ -#ifndef __KERNEL__ # define _KALLOC(x,y) malloc(x) # define _KFREE(x) free(x) # define _VMALLOC(x) malloc(x) # define _VFREE(x) free(x) -#else -# define _KALLOC(x,y) kmalloc(x,y) -# define _KFREE(x) kfree(x) -# define _VMALLOC(x) vmalloc(x) -# define _VFREE(x) vfree(x) -#endif /* * WARNING - never use the _SECOND define with the _DODELAY macro !! * they are for use the MiscStartTimer function and the _DO_UDELAY macro */ -#ifndef __KERNEL__ typedef double TimerDef, *pTimerDef; -#else -typedef long long TimerDef, *pTimerDef; -#endif #define _MSECOND 1000 /* based on 1 us */ #define _SECOND (1000*_MSECOND) @@ -160,13 +118,8 @@ typedef long long TimerDef, *pTimerDef; /*............................................................................. * timer topics */ -#ifndef __KERNEL__ # define _DO_UDELAY(usecs) sanei_pp_udelay(usecs) # define _DODELAY(msecs) { int i; for( i = msecs; i--; ) _DO_UDELAY(1000); } -#else -# define _DO_UDELAY(usecs) udelay(usecs) -# define _DODELAY(msecs) mdelay(msecs) -#endif /*............................................................................. * include the shared stuff right here, this concerns the ioctl interface diff --git a/backend/plustek-pp_scandata.h b/backend/plustek-pp_scandata.h index 1ba0fc5..ea98139 100644 --- a/backend/plustek-pp_scandata.h +++ b/backend/plustek-pp_scandata.h @@ -143,17 +143,7 @@ typedef struct { */ typedef struct scandata { -#ifdef __KERNEL__ - UInt flags; /* as follows: */ -#define _PTDRV_INITALIZED 0x00000001 -#define _PTDRV_OPEN 0x00000002 - - struct pardevice *pardev; /* for accessing parport... */ - struct parport *pp; - ProcDirDef procDir; -#else int pardev; /* parport handle in user-space */ -#endif /* * device control diff --git a/backend/plustek-usbshading.c b/backend/plustek-usbshading.c index c585c8b..f7eb619 100644 --- a/backend/plustek-usbshading.c +++ b/backend/plustek-usbshading.c @@ -685,7 +685,7 @@ static u_char usb_GetNewGain( Plustek_Device *dev, u_short wMax, int channel ) dwInc = (u_long)((0.93 + ceil (dRatio) * 0.067) * wMax / dAmp); dwDec = (u_long)((0.93 + floor (dRatio) * 0.067) * wMax / dAmp); if((dwInc >= 0xff00) || - (labs (dwInc - m_dwIdealGain) > labs(dwDec - m_dwIdealGain))) { + (dwInc - m_dwIdealGain > m_dwIdealGain - dwDec)) { bGain = (u_char)floor(dRatio); } else { bGain = (u_char)ceil(dRatio); diff --git a/backend/qcam.c b/backend/qcam.c index 9d55055..8e302e9 100644 --- a/backend/qcam.c +++ b/backend/qcam.c @@ -191,23 +191,13 @@ static const SANE_Range odd_bw_x_range = { 1, 335, 2 }; static const SANE_Range bw_y_range = { 0, 241, 1 }; static const SANE_Range odd_bw_y_range = { 1, 242, 1 }; -#if defined(HAVE_SYS_IO_H) || defined(HAVE_ASM_IO_H) || defined (HAVE_SYS_HW_H) - -#ifdef HAVE_SYS_IO_H -# include /* GNU libc based OS */ -#elif HAVE_ASM_IO_H -# include /* older Linux */ -#elif HAVE_SYS_HW_H -# include /* OS/2 */ -#endif - -#endif /* || || */ +#include "../include/sane/sanei_directio.h" -#define read_lpdata(d) inb ((d)->port) -#define read_lpstatus(d) inb ((d)->port + 1) -#define read_lpcontrol(d) inb ((d)->port + 2) -#define write_lpdata(d,v) outb ((v), (d)->port) -#define write_lpcontrol(d,v) outb ((v), (d)->port + 2) +#define read_lpdata(d) sanei_inb ((d)->port) +#define read_lpstatus(d) sanei_inb ((d)->port + 1) +#define read_lpcontrol(d) sanei_inb ((d)->port + 2) +#define write_lpdata(d,v) sanei_outb ((d)->port, (v)) +#define write_lpcontrol(d,v) sanei_outb ((d)->port + 2, (v)) static SANE_Status @@ -217,7 +207,7 @@ enable_ports (QC_Device * q) if (q->port < 0x278 || q->port > 0x3bc) return SANE_STATUS_INVAL; - if (ioperm (q->port, 3, 1) < 0) + if (sanei_ioperm (q->port, 3, 1) < 0) return SANE_STATUS_INVAL; return SANE_STATUS_GOOD; @@ -226,7 +216,7 @@ enable_ports (QC_Device * q) static SANE_Status disable_ports (QC_Device * q) { - if (ioperm (q->port, 3, 0) < 0) + if (sanei_ioperm (q->port, 3, 0) < 0) return SANE_STATUS_INVAL; return SANE_STATUS_GOOD; @@ -1454,7 +1444,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) char dev_name[PATH_MAX], *str; size_t len; FILE *fp; - authorize = authorize; /* silence compilation warnings */ + (void) authorize; /* silence compilation warnings */ DBG_INIT (); @@ -1521,7 +1511,7 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only) DBG (5, "sane_get_devices: enter\n"); - local_only = local_only; /* silence compilation warnings */ + (void) local_only; /* silence compilation warnings */ if (devlist) free (devlist); @@ -2129,7 +2119,7 @@ sane_read (SANE_Handle handle, SANE_Byte * buf, SANE_Int max_len, len = s->bytes_per_frame - s->num_bytes; DBG (8, "read(buf=%p,num_bytes=%ld,max_len=%d,len=%ld)\n", - buf, (long) s->num_bytes, max_len, (long) len); + (void *) buf, (long) s->num_bytes, max_len, (long) len); nread = read (s->read_fd, buf, len); if (nread <= 0) diff --git a/backend/ricoh.c b/backend/ricoh.c index d1f20c0..c4dd641 100644 --- a/backend/ricoh.c +++ b/backend/ricoh.c @@ -485,7 +485,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) char devnam[PATH_MAX] = "/dev/scanner"; FILE *fp; - authorize = authorize; /* silence gcc */ + (void) authorize; /* silence gcc */ DBG_INIT (); DBG (11, ">> sane_init\n"); @@ -514,7 +514,8 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) continue; /* ignore empty lines */ /* skip white space: */ - for (lp = line; isspace(*lp); ++lp); + for (lp = line; isspace(*lp); ++lp) + ; strcpy (devnam, lp); } fclose (fp); @@ -550,7 +551,7 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only) Ricoh_Device *dev; int i; - local_only = local_only; /* silence gcc */ + (void) local_only; /* silence gcc */ DBG (11, ">> sane_get_devices\n"); @@ -1007,8 +1008,8 @@ sane_cancel (SANE_Handle handle) SANE_Status sane_set_io_mode (SANE_Handle handle, SANE_Bool non_blocking) { - handle = handle; /* silence gcc */ - non_blocking = non_blocking; /* silence gcc */ + (void) handle; /* silence gcc */ + (void) non_blocking; /* silence gcc */ DBG (5, ">> sane_set_io_mode\n"); DBG (5, "<< sane_set_io_mode\n"); @@ -1019,8 +1020,8 @@ sane_set_io_mode (SANE_Handle handle, SANE_Bool non_blocking) SANE_Status sane_get_select_fd (SANE_Handle handle, SANE_Int * fd) { - handle = handle; /* silence gcc */ - fd = fd; /* silence gcc */ + (void) handle; /* silence gcc */ + (void) fd; /* silence gcc */ DBG (5, ">> sane_get_select_fd\n"); DBG (5, "<< sane_get_select_fd\n"); diff --git a/backend/rts8891.c b/backend/rts8891.c index fa5d17a..2732871 100644 --- a/backend/rts8891.c +++ b/backend/rts8891.c @@ -76,6 +76,7 @@ #include #include #include +#include #include #include #include @@ -306,7 +307,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) { SANE_Status status; - authorize = authorize; /* get rid of compiler warning */ + (void) authorize; /* get rid of compiler warning */ /* init ASIC libraries */ sanei_rts88xx_lib_init (); @@ -4778,7 +4779,7 @@ dark_calibration (struct Rts8891_Device *dev, int mode, int light) global, ra, ga, ba); /* dichotomie ... */ - if (abs (ra - DARK_TARGET) < DARK_MARGIN) + if (fabs (ra - DARK_TARGET) < DARK_MARGIN) { /* offset is OK */ tro = ro; @@ -4800,7 +4801,7 @@ dark_calibration (struct Rts8891_Device *dev, int mode, int light) } /* same for blue channel */ - if (abs (ba - DARK_TARGET) < DARK_MARGIN) + if (fabs (ba - DARK_TARGET) < DARK_MARGIN) { bbo = bo; tbo = bo; @@ -4821,7 +4822,7 @@ dark_calibration (struct Rts8891_Device *dev, int mode, int light) } /* and for green channel */ - if (abs (ga - DARK_TARGET) < DARK_MARGIN) + if (fabs (ga - DARK_TARGET) < DARK_MARGIN) { tgo = go; bgo = go; @@ -5084,7 +5085,7 @@ gain_calibration (struct Rts8891_Device *dev, int mode, int light) global, ra, ga, ba); /* dichotomy again ... */ - if (abs (ra - RED_GAIN_TARGET) < GAIN_MARGIN) + if (fabs (ra - RED_GAIN_TARGET) < GAIN_MARGIN) { /* gain is OK, it is whitin the tolerance margin */ trg = rg; @@ -5125,7 +5126,7 @@ gain_calibration (struct Rts8891_Device *dev, int mode, int light) } /* same for blue channel */ - if (abs (ba - BLUE_GAIN_TARGET) < GAIN_MARGIN) + if (fabs (ba - BLUE_GAIN_TARGET) < GAIN_MARGIN) { bbg = bg; tbg = bg; @@ -5161,7 +5162,7 @@ gain_calibration (struct Rts8891_Device *dev, int mode, int light) } /* and for green channel */ - if (abs (ga - GREEN_GAIN_TARGET) < GAIN_MARGIN) + if (fabs (ga - GREEN_GAIN_TARGET) < GAIN_MARGIN) { tgg = gg; bgg = gg; @@ -5367,7 +5368,7 @@ offset_calibration (struct Rts8891_Device *dev, int mode, int light) global, ra, ga, ba); /* dichotomie ... */ - if (abs (ra - OFFSET_TARGET) < OFFSET_MARGIN) + if (fabs (ra - OFFSET_TARGET) < OFFSET_MARGIN) { /* offset is OK */ tro = ro; @@ -5389,7 +5390,7 @@ offset_calibration (struct Rts8891_Device *dev, int mode, int light) } /* same for blue channel */ - if (abs (ba - OFFSET_TARGET) < OFFSET_MARGIN) + if (fabs (ba - OFFSET_TARGET) < OFFSET_MARGIN) { bbo = bo; tbo = bo; @@ -5410,7 +5411,7 @@ offset_calibration (struct Rts8891_Device *dev, int mode, int light) } /* and for green channel */ - if (abs (ga - OFFSET_TARGET) < OFFSET_MARGIN) + if (fabs (ga - OFFSET_TARGET) < OFFSET_MARGIN) { tgo = go; bgo = go; diff --git a/backend/s9036.c b/backend/s9036.c index 8f84ecf..cc8a205 100644 --- a/backend/s9036.c +++ b/backend/s9036.c @@ -124,8 +124,8 @@ test_ready (int fd) static SANE_Status sense_handler (int scsi_fd, u_char *result, void *arg) { - scsi_fd = scsi_fd; - arg = arg; /* silence compilation warnings */ + (void) scsi_fd; + (void) arg; /* silence compilation warnings */ if (result[0]) { @@ -141,7 +141,7 @@ sense_handler (int scsi_fd, u_char *result, void *arg) static SANE_Status stop_scan (int fd) { - fd = fd; /* silence compilation warnings */ + (void) fd; /* silence compilation warnings */ /* XXX don't know how to stop the scanner. To be tested ! */ #if 0 @@ -829,7 +829,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) size_t len; FILE *fp; - authorize = authorize; /* silence compilation warnings */ + (void) authorize; /* silence compilation warnings */ DBG_INIT (); @@ -882,7 +882,7 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only) S9036_Device *dev; int i; - local_only = local_only; /* silence compilation warnings */ + (void) local_only; /* silence compilation warnings */ if (devlist) free (devlist); @@ -1327,7 +1327,7 @@ sane_cancel (SANE_Handle handle) SANE_Status sane_set_io_mode (SANE_Handle handle, SANE_Bool non_blocking) { - handle = handle; /* silence compilation warnings */ + (void) handle; /* silence compilation warnings */ DBG (1, "sane_set_io_mode(%d)\n", non_blocking); @@ -1338,8 +1338,8 @@ sane_set_io_mode (SANE_Handle handle, SANE_Bool non_blocking) SANE_Status sane_get_select_fd (SANE_Handle handle, SANE_Int * fd) { - handle = handle; - fd = fd; /* silence compilation warnings */ + (void) handle; + (void) fd; /* silence compilation warnings */ return SANE_STATUS_UNSUPPORTED; } diff --git a/backend/sm3600-scanusb.c b/backend/sm3600-scanusb.c index dc9b8d5..997b8ee 100644 --- a/backend/sm3600-scanusb.c +++ b/backend/sm3600-scanusb.c @@ -66,7 +66,7 @@ static int TransferControlMsg(TInstance *this, { SANE_Status err; - cJiffiesTimeout = cJiffiesTimeout; + (void) cJiffiesTimeout; err = sanei_usb_control_msg (this->hScanner, nReqType, @@ -95,8 +95,8 @@ static int TransferBulkRead(TInstance *this, int err; size_t sz = cchMax; - nEndPoint = nEndPoint; - cJiffiesTimeout = cJiffiesTimeout; + (void) nEndPoint; + (void) cJiffiesTimeout; err = sanei_usb_read_bulk(this->hScanner, pBuffer, diff --git a/backend/sm3600.c b/backend/sm3600.c index e1df6b0..0644b5d 100644 --- a/backend/sm3600.c +++ b/backend/sm3600.c @@ -385,7 +385,7 @@ sane_init (SANE_Int *version_code, SANE_Auth_Callback authCB) DBG_INIT(); - authCB=authCB; /* compiler */ + (void) authCB; /* compiler */ DBG(DEBUG_VERBOSE,"SM3600 init\n"); if (version_code) @@ -783,7 +783,7 @@ sane_cancel (SANE_Handle handle) SANE_Status sane_set_io_mode(SANE_Handle h, SANE_Bool m) { - h=h; + (void) h; if (m==SANE_TRUE) /* no non-blocking-mode */ return SANE_STATUS_UNSUPPORTED; return SANE_STATUS_GOOD; @@ -792,6 +792,6 @@ sane_set_io_mode(SANE_Handle h, SANE_Bool m) SANE_Status sane_get_select_fd(SANE_Handle handle, SANE_Int *fd) { - handle=handle; fd=fd; + (void) handle; (void) fd; return SANE_STATUS_UNSUPPORTED; /* we have no file IO */ } diff --git a/backend/sm3840.c b/backend/sm3840.c index 159f600..672fb92 100644 --- a/backend/sm3840.c +++ b/backend/sm3840.c @@ -145,11 +145,12 @@ sane_read (SANE_Handle handle, SANE_Byte * buf, SANE_Int max_len, unsigned char c, d; int i; - DBG (2, "+sane-read:%p %p %d %p\n", (unsigned char *) s, buf, max_len, - (unsigned char *) len); + DBG (2, "+sane-read:%p %p %d %p\n", (void *) s, (void *) buf, max_len, + (void *) len); DBG (2, "+sane-read:remain:%lu offset:%lu linesleft:%d linebuff:%p linesread:%d\n", - (u_long)s->remaining, (u_long)s->offset, s->linesleft, s->line_buffer, s->linesread); + (u_long) s->remaining, (u_long) s->offset, s->linesleft, + (void *) s->line_buffer, s->linesread); if (!s->scanning) return SANE_STATUS_INVAL; @@ -798,7 +799,7 @@ sane_open (SANE_String_Const devicename, SANE_Handle * handle) /* empty devicename -> use first device */ dev = first_dev; } - DBG (2, "using device: %s %p\n", dev->sane.name, (unsigned char *) dev); + DBG (2, "using device: %s %p\n", dev->sane.name, (void *) dev); if (!dev) return SANE_STATUS_INVAL; s = calloc (sizeof (*s), 1); diff --git a/backend/sm3840_lib.c b/backend/sm3840_lib.c index 46d9910..80fcec7 100644 --- a/backend/sm3840_lib.c +++ b/backend/sm3840_lib.c @@ -64,8 +64,8 @@ my_usb_bulk_write (p_usb_dev_handle dev, int ep, SANE_Status status; size_t my_size; - timeout = timeout; - ep = ep; + (void) timeout; + (void) ep; my_size = size; status = sanei_usb_write_bulk ((SANE_Int) dev, (SANE_Byte *) bytes, &my_size); @@ -81,8 +81,8 @@ my_usb_bulk_read (p_usb_dev_handle dev, int ep, SANE_Status status; size_t my_size; - timeout = timeout; - ep = ep; + (void) timeout; + (void) ep; my_size = size; status = sanei_usb_read_bulk ((SANE_Int) dev, (SANE_Byte *) bytes, &my_size); @@ -98,7 +98,7 @@ my_usb_control_msg (p_usb_dev_handle dev, int requesttype, { SANE_Status status; - timeout = timeout; + (void) timeout; status = sanei_usb_control_msg ((SANE_Int) dev, (SANE_Int) requesttype, (SANE_Int) request, (SANE_Int) value, (SANE_Int) index, (SANE_Int) size, @@ -200,9 +200,8 @@ idle_ab (p_usb_dev_handle udev) /* CW: 40 04 00b0 0000 : ... */ static void -write_regs (p_usb_dev_handle udev, int regs, unsigned char reg1, - unsigned char val1, - ... /*unsigned char reg, unsigned char val, ... */ ) +write_regs (p_usb_dev_handle udev, int regs, int reg1, int val1, + ... /* int reg, int val, ... */ ) { unsigned char buff[512]; va_list marker; diff --git a/backend/sm3840_lib.h b/backend/sm3840_lib.h index cbbc6d3..5630066 100644 --- a/backend/sm3840_lib.h +++ b/backend/sm3840_lib.h @@ -81,9 +81,8 @@ static int my_usb_control_msg (p_usb_dev_handle dev, int requesttype, #include "sm3840_params.h" static void idle_ab (p_usb_dev_handle udev); -static void write_regs (p_usb_dev_handle udev, int regs, unsigned char reg1, - unsigned char val1, - ... /*unsigned char reg, unsigned char val, ... */ ); +static void write_regs (p_usb_dev_handle udev, int regs, int reg1, int val1, + ... /* int reg, int val, ... */ ); static int write_vctl (p_usb_dev_handle udev, int request, int value, int index, unsigned char byte); static int read_vctl (p_usb_dev_handle udev, int request, int value, @@ -122,9 +121,8 @@ static void set_gain_black (p_usb_dev_handle udev, int r_black, int g_black, int b_black); static void idle_ab (p_usb_dev_handle udev); -static void write_regs (p_usb_dev_handle udev, int regs, unsigned char reg1, - unsigned char val1, - ... /*unsigned char reg, unsigned char val, ... */ ); +static void write_regs (p_usb_dev_handle udev, int regs, int reg1, int val1, + ... /* int reg, int val, ... */ ); static int write_vctl (p_usb_dev_handle udev, int request, int value, int index, unsigned char byte); static int read_vctl (p_usb_dev_handle udev, int request, int value, diff --git a/backend/snapscan-options.c b/backend/snapscan-options.c index 6bccf38..719c1e4 100644 --- a/backend/snapscan-options.c +++ b/backend/snapscan-options.c @@ -1107,7 +1107,7 @@ SANE_Status sane_control_option (SANE_Handle h, "%s: writing \"%s\" to location %p\n", me, pss->mode_s, - (SANE_String) v); + (void *) v); strcpy ((SANE_String) v, pss->mode_s); break; case OPT_PREVIEW_MODE: @@ -1115,7 +1115,7 @@ SANE_Status sane_control_option (SANE_Handle h, "%s: writing \"%s\" to location %p\n", me, pss->preview_mode_s, - (SANE_String) v); + (void *) v); strcpy ((SANE_String) v, pss->preview_mode_s); break; case OPT_SOURCE: @@ -1144,7 +1144,7 @@ SANE_Status sane_control_option (SANE_Handle h, "%s: writing \"%s\" to location %p\n", me, pss->predef_window, - (SANE_String) v); + (void *) v); strcpy ((SANE_String) v, pss->predef_window); break; case OPT_GAMMA_GS: @@ -1179,7 +1179,7 @@ SANE_Status sane_control_option (SANE_Handle h, "%s: writing \"%s\" to location %p\n", me, pss->dither_matrix, - (SANE_String) v); + (void *) v); strcpy ((SANE_String) v, pss->dither_matrix); break; case OPT_NEGATIVE: diff --git a/backend/snapscan-scsi.c b/backend/snapscan-scsi.c index d223f6a..a3fd4d0 100644 --- a/backend/snapscan-scsi.c +++ b/backend/snapscan-scsi.c @@ -144,7 +144,6 @@ static SANE_Status sense_handler (int scsi_fd, u_char * result, void *arg) as_str = "Logical unit is in process of becoming ready."; DBG (DL_MINOR_INFO, "%s: %s (%d seconds)\n", me, as_str, result[18]); status = SANE_STATUS_DEVICE_BUSY; - DBG (DL_MINOR_INFO, "%s: %s\n", me, sense_str); } break; case 0x04: @@ -160,8 +159,10 @@ static SANE_Status sense_handler (int scsi_fd, u_char * result, void *arg) sense_str = "Illegal request."; DBG (DL_MINOR_INFO, "%s: %s\n", me, sense_str); if (asc == 0x25 && ascq == 0x00) + { as_str = "Logical unit not supported."; DBG (DL_MINOR_INFO, "%s: %s\n", me, as_str); + } status = SANE_STATUS_IO_ERROR; break; case 0x09: diff --git a/backend/sp15c-scsi.h b/backend/sp15c-scsi.h index 1d3e0a1..03fee55 100644 --- a/backend/sp15c-scsi.h +++ b/backend/sp15c-scsi.h @@ -209,9 +209,12 @@ static scsiblk inquiryB = #define get_IN_response_format(in) getbitfield(in + 0x03, 0x0f, 0) #define IN_recognized 0x02 #define get_IN_additional_length(in) in[0x04] -#define get_IN_vendor(in, buf) strncpy(buf, in + 0x08, 0x08) -#define get_IN_product(in, buf) strncpy(buf, in + 0x10, 0x010) -#define get_IN_version(in, buf) strncpy(buf, in + 0x20, 0x04) +#define get_IN_vendor(in, buf) snprintf(buf, 0x08 + 1, "%.*s", \ + 0x08, in + 0x08) +#define get_IN_product(in, buf) snprintf(buf, 0x10 + 1, "%.*s", \ + 0x10, in + 0x10) +#define get_IN_version(in, buf) snprintf(buf, 0x04 + 1, "%.*s", \ + 0x04, in + 0x20) #define get_IN_color_mode(in) getbitfield(in + 0x24, 0xf, 0) #define get_IN_color_seq(in) getbitfield(in + 0x24, 0x7, 4) #define get_IN_adf(in) getbitfield(in + 0x24, 0x1, 7) diff --git a/backend/sp15c.c b/backend/sp15c.c index a3ad5c2..bf3ce29 100644 --- a/backend/sp15c.c +++ b/backend/sp15c.c @@ -273,7 +273,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) char dev_name[PATH_MAX]; size_t len; FILE *fp; - authorize = authorize; /* silence compilation warnings */ + (void) authorize; /* silence compilation warnings */ DBG_INIT (); DBG (10, "sane_init\n"); @@ -310,7 +310,7 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only) struct sp15c *dev; int i; - local_only = local_only; /* silence compilation warnings */ + (void) local_only; /* silence compilation warnings */ DBG (10, "sane_get_devices\n"); @@ -335,7 +335,7 @@ sane_open (SANE_String_Const name, SANE_Handle * handle) { struct sp15c *dev = first_dev; - name = name; /* silence compilation warnings */ + (void) name; /* silence compilation warnings */ /* Strange, name is not used? */ DBG (10, "sane_open\n"); @@ -388,8 +388,8 @@ sane_open (SANE_String_Const name, SANE_Handle * handle) SANE_Status sane_set_io_mode (SANE_Handle h, SANE_Bool non_blocking) { - h = h; - non_blocking = non_blocking; /* silence compilation warnings */ + (void) h; + (void) non_blocking; /* silence compilation warnings */ DBG (10, "sane_set_io_mode\n"); return SANE_STATUS_UNSUPPORTED; @@ -399,8 +399,8 @@ sane_set_io_mode (SANE_Handle h, SANE_Bool non_blocking) SANE_Status sane_get_select_fd (SANE_Handle h, SANE_Int * fdp) { - h = h; - fdp = fdp; /* silence compilation warnings */ + (void) h; + (void) fdp; /* silence compilation warnings */ DBG (10, "sane_get_select_fd\n"); return SANE_STATUS_UNSUPPORTED; @@ -1080,8 +1080,8 @@ attach_one (const char *name) static SANE_Status sense_handler (int scsi_fd, u_char * result, void *arg) { - scsi_fd = scsi_fd; - arg = arg; /* silence compilation warnings */ + (void) scsi_fd; + (void) arg; /* silence compilation warnings */ return request_sense_parse (result); } /* sense_handler */ @@ -1783,7 +1783,7 @@ do_cancel (struct sp15c *scanner) static void swap_res (struct sp15c *s) { - s = s; /* silence compilation warnings */ + (void) s; /* silence compilation warnings */ /* for the time being, do nothing */ } /* swap_res */ @@ -1815,7 +1815,7 @@ sp15c_set_window_param (struct sp15c *s, int prescan) int ret; int active_buffer_size; - prescan = prescan; /* silence compilation warnings */ + (void) prescan; /* silence compilation warnings */ wait_scanner (s); DBG (10, "set_window_param\n"); @@ -1950,7 +1950,7 @@ sp15c_start_scan (struct sp15c *s) static void sigterm_handler (int signal) { - signal = signal; /* silence compilation warnings */ + (void) signal; /* silence compilation warnings */ sanei_scsi_req_flush_all (); /* flush SCSI queue */ _exit (SANE_STATUS_GOOD); diff --git a/backend/st400.c b/backend/st400.c index a75807f..a568e5d 100644 --- a/backend/st400.c +++ b/backend/st400.c @@ -439,8 +439,8 @@ st400_sense_handler( int fd, SANE_Byte *result, void *arg ) /* ST400_Device *dev = arg; */ SANE_Status status; - fd = fd; - arg = arg; /* silence compilation warnings */ + (void) fd; + (void) arg; /* silence compilation warnings */ switch( result[0] & 0x0f ) { case 0x0: @@ -563,7 +563,7 @@ st400_config_get_arg(char **optP, unsigned long *argP, size_t linenum) { int n; - linenum = linenum; /* silence compilation warnings */ + (void) linenum; /* silence compilation warnings */ if( sscanf(*optP, "%lu%n", argP, &n) == 1 ) { *optP += n; @@ -1221,7 +1221,7 @@ sane_read( SANE_Handle handle, SANE_Byte *buf, SANE_Int maxlen, SANE_Int *lenP ) size_t r, i; SANE_Byte val; - DBG(DCODE, "sane_read(%p, %p, %d, %p)\n", handle, buf, (int)maxlen, (void *) lenP); + DBG(DCODE, "sane_read(%p, %p, %d, %p)\n", handle, (void *) buf, (int) maxlen, (void *) lenP); *lenP = 0; if( !dev->status.scanning ) diff --git a/backend/stv680.c b/backend/stv680.c index eb9add5..02ff39d 100644 --- a/backend/stv680.c +++ b/backend/stv680.c @@ -1439,7 +1439,7 @@ stv680_bayer_unshuffle (Stv680_Vidcam * dev, SANE_Byte * buf, size_t * size) "stv680_bayer_unshuffle: if needed, trim to size 160 done\n"); } /* reset to proper width */ - if ((dev->subsample == 160)) + if (dev->subsample == 160) { vw = 160; vh = 120; @@ -1520,7 +1520,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) DBG (DBG_sane_init, "sane_init\n"); - authorize = authorize; /* silence gcc */ + (void) authorize; /* silence gcc */ DBG (DBG_error, "This is sane-stv680 version %d.%d-%d\n", SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD); @@ -1584,7 +1584,7 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only) DBG (DBG_proc, "sane_get_devices: enter\n"); - local_only = local_only; /* silence gcc */ + (void) local_only; /* silence gcc */ if (devlist) free (devlist); @@ -2073,8 +2073,8 @@ sane_set_io_mode (SANE_Handle handle, SANE_Bool non_blocking) DBG (DBG_proc, "sane_set_io_mode: enter\n"); - handle = handle; /* silence gcc */ - non_blocking = non_blocking; /* silence gcc */ + (void) handle; /* silence gcc */ + (void) non_blocking; /* silence gcc */ DBG (DBG_proc, "sane_set_io_mode: exit\n"); @@ -2087,8 +2087,8 @@ sane_get_select_fd (SANE_Handle handle, SANE_Int * fd) { DBG (DBG_proc, "sane_get_select_fd: enter\n"); - handle = handle; /* silence gcc */ - fd = fd; /* silence gcc */ + (void) handle; /* silence gcc */ + (void) fd; /* silence gcc */ DBG (DBG_proc, "sane_get_select_fd: exit\n"); diff --git a/backend/tamarack.c b/backend/tamarack.c index 38cc7ea..916c9ea 100644 --- a/backend/tamarack.c +++ b/backend/tamarack.c @@ -182,8 +182,8 @@ wait_ready (int fd) static SANE_Status sense_handler (int scsi_fd, u_char *result, void *arg) { - scsi_fd = scsi_fd; - arg = arg; /* silence compilation warnings */ + (void) scsi_fd; + (void) arg; /* silence compilation warnings */ switch (result[0]) { @@ -909,7 +909,7 @@ sane_init (SANE_Int *version_code, SANE_Auth_Callback authorize) size_t len; FILE *fp; - authorize = authorize; /* silence compilation warnings */ + (void) authorize; /* silence compilation warnings */ DBG_INIT(); @@ -962,7 +962,7 @@ sane_get_devices (const SANE_Device ***device_list, SANE_Bool local_only) Tamarack_Device *dev; int i; - local_only = local_only; /* silence compilation warnings */ + (void) local_only; /* silence compilation warnings */ if (devlist) free (devlist); diff --git a/backend/test-picture.c b/backend/test-picture.c index d9549ec..49445ac 100644 --- a/backend/test-picture.c +++ b/backend/test-picture.c @@ -48,7 +48,8 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, size_t * buffer_size) { SANE_Word pattern_size = 0, pattern_distance = 0; - SANE_Word line_count, b_size; + SANE_Word line_count; + size_t b_size; SANE_Word lines = 0; SANE_Word bpl = test_device->bytes_per_line; SANE_Word ppl = test_device->pixels_per_line; @@ -83,7 +84,7 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, if (strcmp (test_device->val[opt_test_picture].s, "Solid black") == 0) { DBG (3, "(child) init_picture_buffer: drawing solid black test " - "picture %d bytes\n", b_size); + "picture %zu bytes\n", b_size); if (test_device->params.format == SANE_FRAME_GRAY && test_device->params.depth == 1) pattern = 0xff; @@ -93,7 +94,7 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, else { DBG (3, "(child) init_picture_buffer: drawing solid white test " - "picture %d bytes\n", b_size); + "picture %zu bytes\n", b_size); if (test_device->params.format == SANE_FRAME_GRAY && test_device->params.depth == 1) pattern = 0x00; @@ -115,8 +116,8 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, if (test_device->params.depth == 16) increment *= 2; - lines = 2 * p_size + 0.5; - b_size = lines * bpl; + lines = (SANE_Word) (2 * p_size + 0.5); + b_size = (size_t) lines * (size_t) bpl; if (buffer_size) *buffer_size = b_size; b = malloc (b_size); @@ -128,7 +129,7 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, if (buffer) *buffer = b; DBG (3, "(child) init_picture_buffer: drawing grid test picture " - "%d bytes, %d bpl, %d ppl, %d lines\n", b_size, bpl, ppl, lines); + "%zu bytes, %d bpl, %d ppl, %d lines\n", b_size, bpl, ppl, lines); for (line_count = 0; line_count < lines; line_count++) { @@ -161,7 +162,7 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, } else color = (rand ()) & 0x01; - value |= (color << x1); + value |= (SANE_Byte) (color << x1); } b[line_count * bpl + x] = value; } @@ -182,7 +183,7 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, } else color = (rand ()) & 0x01; - value |= (color << x1); + value |= (SANE_Byte) (color << x1); } for (x1 = 0; x1 < increment; x1++) b[line_count * bpl + x + x1] = value; @@ -197,7 +198,7 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, else color = 0xff; else - color = (rand ()) & 0xff; + color = (SANE_Byte) ((rand ()) & 0xff); for (x1 = 0; x1 < increment; x1++) b[line_count * bpl + x + x1] = color; @@ -215,7 +216,7 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, pattern_size = 16; pattern_distance = 0; lines = 2 * (pattern_size + pattern_distance); - b_size = lines * bpl; + b_size = (size_t) lines * (size_t) bpl; if (buffer_size) *buffer_size = b_size; @@ -228,7 +229,7 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, if (buffer) *buffer = b; DBG (3, "(child) init_picture_buffer: drawing b/w test picture " - "%d bytes, %d bpl, %d lines\n", b_size, bpl, lines); + "%zu bytes, %d bpl, %d lines\n", b_size, bpl, lines); memset (b, 255, b_size); for (line_count = 0; line_count < lines; line_count++) { @@ -244,7 +245,7 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, width = pattern_size / 8; if (x + width >= bpl) width = bpl - x; - memset (b + line_count * bpl + x, 0x00, width); + memset (b + line_count * bpl + x, 0x00, (size_t) width); x += (pattern_size + pattern_distance) * 2 / 8; } } @@ -256,7 +257,7 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, pattern_size = 4; pattern_distance = 1; lines = 2 * (pattern_size + pattern_distance); - b_size = lines * bpl; + b_size = (size_t) lines * (size_t) bpl; if (buffer_size) *buffer_size = b_size; @@ -269,7 +270,7 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, if (buffer) *buffer = b; DBG (3, "(child) init_picture_buffer: drawing 8 bit gray test picture " - "%d bytes, %d bpl, %d lines\n", b_size, bpl, lines); + "%zu bytes, %d bpl, %d lines\n", b_size, bpl, lines); memset (b, 0x55, b_size); for (line_count = 0; line_count < lines; line_count++) { @@ -289,10 +290,10 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, width = bpl - x; if (line_count > (pattern_size + pattern_distance)) color = - 0xff - ((x / (pattern_size + pattern_distance)) & 0xff); + (SANE_Byte) (0xff - ((x / (pattern_size + pattern_distance)) & 0xff)); else - color = (x / (pattern_size + pattern_distance)) & 0xff; - memset (b + line_count * bpl + x, color, width); + color = (SANE_Byte) ((x / (pattern_size + pattern_distance)) & 0xff); + memset (b + line_count * bpl + x, color, (size_t) width); x += (pattern_size + pattern_distance); } } @@ -305,7 +306,7 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, pattern_size = 256; pattern_distance = 4; lines = 1 * (pattern_size + pattern_distance); - b_size = lines * bpl; + b_size = (size_t) lines * (size_t) bpl; if (buffer_size) *buffer_size = b_size; @@ -318,7 +319,7 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, if (buffer) *buffer = b; DBG (3, "(child) init_picture_buffer: drawing 16 bit gray test picture " - "%d bytes, %d bpl, %d lines\n", b_size, bpl, lines); + "%zu bytes, %d bpl, %d lines\n", b_size, bpl, lines); memset (b, 0x55, b_size); for (line_count = 0; line_count < lines; line_count++) { @@ -338,11 +339,11 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, if (x + width >= bpl) width = bpl - x; pattern_lo = - ((line_count - pattern_distance) - % (pattern_size + pattern_distance)) & 0xff; + (SANE_Byte) (((line_count - pattern_distance) + % (pattern_size + pattern_distance)) & 0xff); for (x1 = 0; x1 < width; x1 += 2) { - pattern_hi = (x1 / 2) & 0xff; + pattern_hi = (SANE_Byte) ((x1 / 2) & 0xff); if (is_little_endian) { b[line_count * bpl + x + x1 + 0] = pattern_lo; @@ -366,7 +367,7 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, pattern_size = 16; pattern_distance = 0; lines = 2 * (pattern_size + pattern_distance); - b_size = lines * bpl; + b_size = (size_t) lines * (size_t) bpl; if (buffer_size) *buffer_size = b_size; @@ -379,7 +380,7 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, if (buffer) *buffer = b; DBG (3, "(child) init_picture_buffer: drawing color lineart test " - "picture %d bytes, %d bpl, %d lines\n", b_size, bpl, lines); + "picture %zu bytes, %d bpl, %d lines\n", b_size, bpl, lines); memset (b, 0x55, b_size); for (line_count = 0; line_count < lines; line_count++) @@ -433,7 +434,7 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, pattern_size = 16; pattern_distance = 0; lines = 2 * (pattern_size + pattern_distance); - b_size = lines * bpl; + b_size = (size_t) lines * (size_t) bpl; if (buffer_size) *buffer_size = b_size; @@ -446,7 +447,7 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, if (buffer) *buffer = b; DBG (3, "(child) init_picture_buffer: drawing color lineart three-pass " - "test picture %d bytes, %d bpl, %d lines\n", b_size, bpl, lines); + "test picture %zu bytes, %d bpl, %d lines\n", b_size, bpl, lines); memset (b, 0x55, b_size); for (line_count = 0; line_count < lines; line_count++) @@ -501,7 +502,7 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, pattern_size = 4; pattern_distance = 1; lines = 6 * (pattern_size + pattern_distance); - b_size = lines * bpl; + b_size = (size_t) lines * (size_t) bpl; if (buffer_size) *buffer_size = b_size; @@ -514,7 +515,7 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, if (buffer) *buffer = b; DBG (3, "(child) init_picture_buffer: drawing 8 bit color test picture " - "%d bytes, %d bpl, %d lines\n", b_size, bpl, lines); + "%zu bytes, %d bpl, %d lines\n", b_size, bpl, lines); memset (b, 0x55, b_size); for (line_count = 0; line_count < lines; line_count++) { @@ -536,10 +537,10 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, if ((line_count / (pattern_size + pattern_distance)) & 1) color = - 0xff - ((x / ((pattern_size + pattern_distance) * 3)) - & 0xff); + (SANE_Byte) (0xff - ((x / ((pattern_size + pattern_distance) * 3)) + & 0xff)); else - color = (x / ((pattern_size + pattern_distance) * 3)) & 0xff; + color = (SANE_Byte) ((x / ((pattern_size + pattern_distance) * 3)) & 0xff); if (line_count / (pattern_size + pattern_distance) < 2) { @@ -581,7 +582,7 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, pattern_size = 4; pattern_distance = 1; lines = 6 * (pattern_size + pattern_distance); - b_size = lines * bpl; + b_size = (size_t) lines * (size_t) bpl; if (buffer_size) *buffer_size = b_size; @@ -594,7 +595,7 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, if (buffer) *buffer = b; DBG (3, "(child) init_picture_buffer: drawing 8 bit color three-pass " - "test picture %d bytes, %d bpl, %d lines\n", b_size, bpl, lines); + "test picture %zu bytes, %d bpl, %d lines\n", b_size, bpl, lines); memset (b, 0x55, b_size); for (line_count = 0; line_count < lines; line_count++) { @@ -614,10 +615,10 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, width = bpl - x; if ((line_count / (pattern_size + pattern_distance)) & 1) - color = - 0xff - (x / ((pattern_size + pattern_distance)) & 0xff); + color = (SANE_Byte) + (0xff - (x / ((pattern_size + pattern_distance)) & 0xff)); else - color = (x / (pattern_size + pattern_distance)) & 0xff; + color = (SANE_Byte) ((x / (pattern_size + pattern_distance)) & 0xff); if (line_count / (pattern_size + pattern_distance) < 2) { @@ -634,7 +635,7 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, if (test_device->params.format != SANE_FRAME_BLUE) color = 0x00; } - memset (b + line_count * bpl + x, color, width); + memset (b + line_count * bpl + x, color, (size_t) width); x += (pattern_size + pattern_distance); } @@ -647,7 +648,7 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, pattern_size = 256; pattern_distance = 4; lines = pattern_size + pattern_distance; - b_size = lines * bpl; + b_size = (size_t) lines * (size_t) bpl; if (buffer_size) *buffer_size = b_size; @@ -661,7 +662,7 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, *buffer = b; DBG (3, "(child) init_picture_buffer: drawing 16 bit color test picture " - "%d bytes, %d bpl, %d lines\n", b_size, bpl, lines); + "%zu bytes, %d bpl, %d lines\n", b_size, bpl, lines); memset (b, 0x55, b_size); for (line_count = 0; line_count < lines; line_count++) { @@ -687,10 +688,10 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, for (x1 = 0; x1 < width; x1 += 6) { - color_lo = - ((line_count + pattern_size) - % (pattern_size + pattern_distance)) & 0xff; - color_hi = (x1 / 6) & 0xff; + color_lo = (SANE_Byte) + (((line_count + pattern_size) + % (pattern_size + pattern_distance)) & 0xff); + color_hi = (SANE_Byte) ((x1 / 6) & 0xff); if (((x / ((pattern_size + pattern_distance) * 6)) % 3) == 0) { @@ -753,7 +754,7 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, pattern_size = 256; pattern_distance = 4; lines = pattern_size + pattern_distance; - b_size = lines * bpl; + b_size = (size_t) lines * (size_t) bpl; if (buffer_size) *buffer_size = b_size; @@ -766,7 +767,7 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, if (buffer) *buffer = b; DBG (3, "(child) init_picture_buffer: drawing 16 bit color three-pass " - "test picture %d bytes, %d bpl, %d lines\n", b_size, bpl, lines); + "test picture %zu bytes, %d bpl, %d lines\n", b_size, bpl, lines); memset (b, 0x55, b_size); for (line_count = 0; line_count < lines; line_count++) { @@ -789,10 +790,10 @@ init_picture_buffer (Test_Device * test_device, SANE_Byte ** buffer, for (x1 = 0; x1 < width; x1 += 2) { - color_lo = - ((line_count + pattern_size) - % (pattern_size + pattern_distance)) & 0xff; - color_hi = (x1 / 2) & 0xff; + color_lo = (SANE_Byte) + (((line_count + pattern_size) + % (pattern_size + pattern_distance)) & 0xff); + color_hi = (SANE_Byte) ((x1 / 2) & 0xff); if (((x / ((pattern_size + pattern_distance) * 2)) % 3) == 0) { diff --git a/backend/test.c b/backend/test.c index 3c7a949..ea73290 100644 --- a/backend/test.c +++ b/backend/test.c @@ -391,11 +391,11 @@ init_options (Test_Device * test_device) od->desc = SANE_DESC_SCAN_MODE; od->type = SANE_TYPE_STRING; od->unit = SANE_UNIT_NONE; - od->size = max_string_size (mode_list); + od->size = (SANE_Int) max_string_size (mode_list); od->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; od->constraint_type = SANE_CONSTRAINT_STRING_LIST; od->constraint.string_list = mode_list; - test_device->val[opt_mode].s = malloc (od->size); + test_device->val[opt_mode].s = malloc ((size_t) od->size); if (!test_device->val[opt_mode].s) goto fail; strcpy (test_device->val[opt_mode].s, init_mode); @@ -454,7 +454,7 @@ init_options (Test_Device * test_device) od->desc = SANE_I18N ("Set the order of frames in three-pass color mode."); od->type = SANE_TYPE_STRING; od->unit = SANE_UNIT_NONE; - od->size = max_string_size (order_list); + od->size = (SANE_Int) max_string_size (order_list); od->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; if (strcmp (init_mode, SANE_VALUE_SCAN_MODE_COLOR) != 0) od->cap |= SANE_CAP_INACTIVE; @@ -462,7 +462,7 @@ init_options (Test_Device * test_device) od->cap |= SANE_CAP_INACTIVE; od->constraint_type = SANE_CONSTRAINT_STRING_LIST; od->constraint.string_list = order_list; - test_device->val[opt_three_pass_order].s = malloc (od->size); + test_device->val[opt_three_pass_order].s = malloc ((size_t) od->size); if (!test_device->val[opt_three_pass_order].s) goto fail; strcpy (test_device->val[opt_three_pass_order].s, init_three_pass_order); @@ -487,11 +487,11 @@ init_options (Test_Device * test_device) od->desc = SANE_I18N("If Automatic Document Feeder is selected, the feeder will be 'empty' after 10 scans."); od->type = SANE_TYPE_STRING; od->unit = SANE_UNIT_NONE; - od->size = max_string_size (source_list); + od->size = (SANE_Int) max_string_size (source_list); od->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; od->constraint_type = SANE_CONSTRAINT_STRING_LIST; od->constraint.string_list = source_list; - test_device->val[opt_scan_source].s = malloc (od->size); + test_device->val[opt_scan_source].s = malloc ((size_t) od->size); if (!test_device->val[opt_scan_source].s) goto fail; strcpy (test_device->val[opt_scan_source].s, init_scan_source); @@ -523,11 +523,11 @@ init_options (Test_Device * test_device) "height of 10 mm per square."); od->type = SANE_TYPE_STRING; od->unit = SANE_UNIT_NONE; - od->size = max_string_size (test_picture_list); + od->size = (SANE_Int) max_string_size (test_picture_list); od->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; od->constraint_type = SANE_CONSTRAINT_STRING_LIST; od->constraint.string_list = test_picture_list; - test_device->val[opt_test_picture].s = malloc (od->size); + test_device->val[opt_test_picture].s = malloc ((size_t) od->size); if (!test_device->val[opt_test_picture].s) goto fail; strcpy (test_device->val[opt_test_picture].s, init_test_picture); @@ -618,11 +618,11 @@ init_options (Test_Device * test_device) "codes are for testing how the frontend handles them."); od->type = SANE_TYPE_STRING; od->unit = SANE_UNIT_NONE; - od->size = max_string_size (read_status_code_list); + od->size = (SANE_Int) max_string_size (read_status_code_list); od->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; od->constraint_type = SANE_CONSTRAINT_STRING_LIST; od->constraint.string_list = read_status_code_list; - test_device->val[opt_read_status_code].s = malloc (od->size); + test_device->val[opt_read_status_code].s = malloc ((size_t) od->size); if (!test_device->val[opt_read_status_code].s) goto fail; strcpy (test_device->val[opt_read_status_code].s, init_read_status_code); @@ -914,8 +914,8 @@ init_options (Test_Device * test_device) /* opt_int */ od = &test_device->opt[opt_int]; od->name = "int"; - od->title = SANE_I18N ("(1/6) Int"); - od->desc = SANE_I18N ("(1/6) Int test option with no unit and no " + od->title = SANE_I18N ("(1/7) Int"); + od->desc = SANE_I18N ("(1/7) Int test option with no unit and no " "constraint set."); od->type = SANE_TYPE_INT; od->unit = SANE_UNIT_NONE; @@ -930,8 +930,8 @@ init_options (Test_Device * test_device) /* opt_int_constraint_range */ od = &test_device->opt[opt_int_constraint_range]; od->name = "int-constraint-range"; - od->title = SANE_I18N ("(2/6) Int constraint range"); - od->desc = SANE_I18N ("(2/6) Int test option with unit pixel and " + od->title = SANE_I18N ("(2/7) Int constraint range"); + od->desc = SANE_I18N ("(2/7) Int test option with unit pixel and " "constraint range set. Minimum is 4, maximum 192, and " "quant is 2."); od->type = SANE_TYPE_INT; @@ -947,8 +947,8 @@ init_options (Test_Device * test_device) /* opt_int_constraint_word_list */ od = &test_device->opt[opt_int_constraint_word_list]; od->name = "int-constraint-word-list"; - od->title = SANE_I18N ("(3/6) Int constraint word list"); - od->desc = SANE_I18N ("(3/6) Int test option with unit bits and " + od->title = SANE_I18N ("(3/7) Int constraint word list"); + od->desc = SANE_I18N ("(3/7) Int test option with unit bits and " "constraint word list set."); od->type = SANE_TYPE_INT; od->unit = SANE_UNIT_BIT; @@ -963,8 +963,8 @@ init_options (Test_Device * test_device) /* opt_int_array */ od = &test_device->opt[opt_int_array]; od->name = "int-constraint-array"; - od->title = SANE_I18N ("(4/6) Int array"); - od->desc = SANE_I18N ("(4/6) Int test option with unit mm and using " + od->title = SANE_I18N ("(4/7) Int array"); + od->desc = SANE_I18N ("(4/7) Int test option with unit mm and using " "an array without constraints."); od->type = SANE_TYPE_INT; od->unit = SANE_UNIT_MM; @@ -979,8 +979,8 @@ init_options (Test_Device * test_device) /* opt_int_array_constraint_range */ od = &test_device->opt[opt_int_array_constraint_range]; od->name = "int-constraint-array-constraint-range"; - od->title = SANE_I18N ("(5/6) Int array constraint range"); - od->desc = SANE_I18N ("(5/6) Int test option with unit dpi and using " + od->title = SANE_I18N ("(5/7) Int array constraint range"); + od->desc = SANE_I18N ("(5/7) Int test option with unit dpi and using " "an array with a range constraint. Minimum is 4, " "maximum 192, and quant is 2."); od->type = SANE_TYPE_INT; @@ -994,6 +994,40 @@ init_options (Test_Device * test_device) test_device->val[opt_int_array_constraint_range].wa = &int_array_constraint_range[0]; + /* opt_int_array_constraint_word_list */ + od = &test_device->opt[opt_int_array_constraint_word_list]; + od->name = "int-constraint-array-constraint-word-list"; + od->title = SANE_I18N ("(6/7) Int array constraint word list"); + od->desc = SANE_I18N ("(6/7) Int test option with unit percent and using " + "an array with a word list constraint."); + od->type = SANE_TYPE_INT; + od->unit = SANE_UNIT_PERCENT; + od->size = 6 * sizeof (SANE_Word); + od->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT | SANE_CAP_ADVANCED; + if (init_enable_test_options == SANE_FALSE) + od->cap |= SANE_CAP_INACTIVE; + od->constraint_type = SANE_CONSTRAINT_WORD_LIST; + od->constraint.word_list = int_constraint_word_list; + test_device->val[opt_int_array_constraint_word_list].wa = + &int_array_constraint_word_list[0]; + + /* opt_int_inexact */ + od = &test_device->opt[opt_int_inexact]; + od->name = "int-inexact"; + od->title = SANE_I18N ("(7/7) Int inexact"); + od->desc = SANE_I18N ("(7/7) Int test option that modifies the value " + "and returns SANE_INFO_INEXACT."); + od->type = SANE_TYPE_INT; + od->unit = SANE_UNIT_NONE; + od->size = sizeof (SANE_Word); + od->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT | SANE_CAP_ADVANCED; + if (init_enable_test_options == SANE_FALSE) + od->cap |= SANE_CAP_INACTIVE; + od->constraint_type = SANE_CONSTRAINT_NONE; + od->constraint.range = 0; + test_device->val[opt_int_inexact].w = 67; + + /* opt_gamma_red */ init_gamma_table(gamma_red, GAMMA_RED_SIZE, gamma_range.max); od = &test_device->opt[opt_gamma_red]; @@ -1051,23 +1085,6 @@ init_options (Test_Device * test_device) od->constraint.range = &gamma_range; test_device->val[opt_gamma_all].wa = &gamma_all[0]; - /* opt_int_array_constraint_word_list */ - od = &test_device->opt[opt_int_array_constraint_word_list]; - od->name = "int-constraint-array-constraint-word-list"; - od->title = SANE_I18N ("(6/6) Int array constraint word list"); - od->desc = SANE_I18N ("(6/6) Int test option with unit percent and using " - "an array with a word list constraint."); - od->type = SANE_TYPE_INT; - od->unit = SANE_UNIT_PERCENT; - od->size = 6 * sizeof (SANE_Word); - od->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT | SANE_CAP_ADVANCED; - if (init_enable_test_options == SANE_FALSE) - od->cap |= SANE_CAP_INACTIVE; - od->constraint_type = SANE_CONSTRAINT_WORD_LIST; - od->constraint.word_list = int_constraint_word_list; - test_device->val[opt_int_array_constraint_word_list].wa = - &int_array_constraint_word_list[0]; - /* opt_fixed_group */ od = &test_device->opt[opt_fixed_group]; od->name = ""; @@ -1150,13 +1167,13 @@ init_options (Test_Device * test_device) od->desc = SANE_I18N ("(1/3) String test option without constraint."); od->type = SANE_TYPE_STRING; od->unit = SANE_UNIT_NONE; - od->size = strlen (init_string) + 1; + od->size = (SANE_Int) strlen (init_string) + 1; od->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; if (init_enable_test_options == SANE_FALSE) od->cap |= SANE_CAP_INACTIVE; od->constraint_type = SANE_CONSTRAINT_NONE; od->constraint.string_list = 0; - test_device->val[opt_string].s = malloc (od->size); + test_device->val[opt_string].s = malloc ((size_t) od->size); if (!test_device->val[opt_string].s) goto fail; strcpy (test_device->val[opt_string].s, init_string); @@ -1169,13 +1186,13 @@ init_options (Test_Device * test_device) "constraint."); od->type = SANE_TYPE_STRING; od->unit = SANE_UNIT_NONE; - od->size = max_string_size (string_constraint_string_list); + od->size = (SANE_Int) max_string_size (string_constraint_string_list); od->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; if (init_enable_test_options == SANE_FALSE) od->cap |= SANE_CAP_INACTIVE; od->constraint_type = SANE_CONSTRAINT_STRING_LIST; od->constraint.string_list = string_constraint_string_list; - test_device->val[opt_string_constraint_string_list].s = malloc (od->size); + test_device->val[opt_string_constraint_string_list].s = malloc ((size_t) od->size); if (!test_device->val[opt_string_constraint_string_list].s) goto fail; strcpy (test_device->val[opt_string_constraint_string_list].s, @@ -1189,14 +1206,14 @@ init_options (Test_Device * test_device) "constraint. Contains some more entries..."); od->type = SANE_TYPE_STRING; od->unit = SANE_UNIT_NONE; - od->size = max_string_size (string_constraint_long_string_list); + od->size = (SANE_Int) max_string_size (string_constraint_long_string_list); od->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; if (init_enable_test_options == SANE_FALSE) od->cap |= SANE_CAP_INACTIVE; od->constraint_type = SANE_CONSTRAINT_STRING_LIST; od->constraint.string_list = string_constraint_long_string_list; test_device->val[opt_string_constraint_long_string_list].s = - malloc (od->size); + malloc ((size_t) od->size); if (!test_device->val[opt_string_constraint_long_string_list].s) goto fail; strcpy (test_device->val[opt_string_constraint_long_string_list].s, @@ -1419,7 +1436,8 @@ static SANE_Status reader_process (Test_Device * test_device, SANE_Int fd) { SANE_Status status; - SANE_Word byte_count = 0, bytes_total; + size_t byte_count = 0; + size_t bytes_total; SANE_Byte *buffer = 0; ssize_t bytes_written = 0; size_t buffer_size = 0, write_count = 0; @@ -1427,24 +1445,24 @@ reader_process (Test_Device * test_device, SANE_Int fd) DBG (2, "(child) reader_process: test_device=%p, fd=%d\n", (void *) test_device, fd); - bytes_total = test_device->lines * test_device->bytes_per_line; + bytes_total = (size_t) test_device->lines * (size_t) test_device->bytes_per_line; status = init_picture_buffer (test_device, &buffer, &buffer_size); if (status != SANE_STATUS_GOOD) return status; DBG (2, "(child) reader_process: buffer=%p, buffersize=%lu\n", - buffer, (u_long) buffer_size); + (void *) buffer, (u_long) buffer_size); while (byte_count < bytes_total) { if (write_count == 0) { write_count = buffer_size; - if (byte_count + (SANE_Word) write_count > bytes_total) - write_count = bytes_total - byte_count; + if (byte_count + (size_t) write_count > bytes_total) + write_count = (size_t) bytes_total - (size_t) byte_count; if (test_device->val[opt_read_delay].w == SANE_TRUE) - usleep (test_device->val[opt_read_delay_duration].w); + usleep ((useconds_t) test_device->val[opt_read_delay_duration].w); } bytes_written = write (fd, buffer, write_count); if (bytes_written < 0) @@ -1453,17 +1471,17 @@ reader_process (Test_Device * test_device, SANE_Int fd) strerror (errno)); return SANE_STATUS_IO_ERROR; } - byte_count += bytes_written; - DBG (4, "(child) reader_process: wrote %ld bytes of %lu (%d total)\n", - (long) bytes_written, (u_long) write_count, byte_count); - write_count -= bytes_written; + byte_count += (size_t) bytes_written; + DBG (4, "(child) reader_process: wrote %ld bytes of %lu (%zu total)\n", + bytes_written, write_count, byte_count); + write_count -= (size_t) bytes_written; } free (buffer); if (sanei_thread_is_forked ()) { - DBG (4, "(child) reader_process: finished, wrote %d bytes, expected %d " + DBG (4, "(child) reader_process: finished, wrote %zu bytes, expected %zu " "bytes, now waiting\n", byte_count, bytes_total); while (SANE_TRUE) sleep (10); @@ -1472,7 +1490,7 @@ reader_process (Test_Device * test_device, SANE_Int fd) } else { - DBG (4, "(child) reader_process: finished, wrote %d bytes, expected %d " + DBG (4, "(child) reader_process: finished, wrote %zu bytes, expected %zu " "bytes\n", byte_count, bytes_total); } return SANE_STATUS_GOOD; @@ -1824,7 +1842,7 @@ sane_init (SANE_Int * __sane_unused__ version_code, SANE_Auth_Callback __sane_un /* create devices */ sane_device_list = - malloc ((init_number_of_devices + 1) * sizeof (sane_device)); + malloc ((size_t) (init_number_of_devices + 1) * sizeof (sane_device)); if (!sane_device_list) goto fail; for (num = 0; num < init_number_of_devices; num++) @@ -1862,7 +1880,7 @@ sane_init (SANE_Int * __sane_unused__ version_code, SANE_Auth_Callback __sane_un } test_device->next = 0; sane_device_list[num] = 0; - srand (time (NULL)); + srand ((unsigned int) time (NULL)); random_factor = ((double) rand ()) / RAND_MAX + 0.5; inited = SANE_TRUE; return SANE_STATUS_GOOD; @@ -2216,6 +2234,19 @@ sane_control_option (SANE_Handle handle, SANE_Int option, SANE_Action action, DBG (4, "sane_control_option: set option %d (%s) to %d\n", option, test_device->opt[option].name, *(SANE_Int *) value); break; + case opt_int_inexact: + if (test_device->val[option].w == *(SANE_Int *) value) + { + DBG (4, "sane_control_option: option %d (%s) not changed\n", + option, test_device->opt[option].name); + break; + } + *(SANE_Int *) value += 1; + test_device->val[option].w = *(SANE_Int *) value; + myinfo |= SANE_INFO_INEXACT; + DBG (4, "sane_control_option: set option %d (%s) to %d\n", + option, test_device->opt[option].name, *(SANE_Int *) value); + break; case opt_fuzzy_parameters: /* Bool with parameter reloading */ if (test_device->val[option].w == *(SANE_Bool *) value) { @@ -2312,7 +2343,7 @@ sane_control_option (SANE_Handle handle, SANE_Int option, SANE_Action action, case opt_gamma_all: case opt_int_array_constraint_word_list: memcpy (test_device->val[option].wa, value, - test_device->opt[option].size); + (size_t) test_device->opt[option].size); DBG (4, "sane_control_option: set option %d (%s) to %p\n", option, test_device->opt[option].name, (void *) value); if (option == opt_gamma_all) { @@ -2535,6 +2566,7 @@ sane_control_option (SANE_Handle handle, SANE_Int option, SANE_Action action, case opt_ppl_loss: case opt_read_delay_duration: case opt_int: + case opt_int_inexact: case opt_int_constraint_range: case opt_int_constraint_word_list: *(SANE_Int *) value = test_device->val[option].w; @@ -2549,7 +2581,7 @@ sane_control_option (SANE_Handle handle, SANE_Int option, SANE_Action action, case opt_gamma_all: case opt_int_array_constraint_word_list: memcpy (value, test_device->val[option].wa, - test_device->opt[option].size); + (size_t) test_device->opt[option].size); DBG (4, "sane_control_option: get option %d (%s), value=%p\n", option, test_device->opt[option].name, (void *) value); break; @@ -2639,7 +2671,7 @@ sane_get_parameters (SANE_Handle handle, SANE_Parameters * params) p->lines = test_device->lines; if (test_device->val[opt_fuzzy_parameters].w == SANE_TRUE && test_device->scanning == SANE_FALSE) - p->lines *= random_factor; + p->lines *= (SANE_Int) random_factor; } if (strcmp (mode, SANE_VALUE_SCAN_MODE_GRAY) == 0) @@ -2674,7 +2706,7 @@ sane_get_parameters (SANE_Handle handle, SANE_Parameters * params) p->pixels_per_line = (SANE_Int) (res * (br_x - tl_x) / MM_PER_INCH); if (test_device->val[opt_fuzzy_parameters].w == SANE_TRUE && test_device->scanning == SANE_FALSE) - p->pixels_per_line *= random_factor; + p->pixels_per_line *= (SANE_Int) random_factor; if (p->pixels_per_line < 1) p->pixels_per_line = 1; @@ -2842,11 +2874,11 @@ sane_read (SANE_Handle handle, SANE_Byte * data, SANE_Int max_scan_length; ssize_t bytes_read; size_t read_count; - SANE_Int bytes_total = test_device->lines * test_device->bytes_per_line; + size_t bytes_total = (size_t) test_device->lines * (size_t) test_device->bytes_per_line; DBG (4, "sane_read: handle=%p, data=%p, max_length = %d, length=%p\n", - handle, data, max_length, (void *) length); + handle, (void *) data, max_length, (void *) length); if (!inited) { DBG (1, "sane_read: not inited, call sane_init() first\n"); @@ -2927,11 +2959,11 @@ sane_read (SANE_Handle handle, SANE_Byte * data, DBG (1, "sane_read: not scanning (call sane_start first)\n"); return SANE_STATUS_INVAL; } - read_count = max_scan_length; + read_count = (size_t) max_scan_length; bytes_read = read (test_device->pipe, data, read_count); if (bytes_read == 0 - || (bytes_read + test_device->bytes_total >= bytes_total)) + || ((size_t) bytes_read + (size_t) test_device->bytes_total >= bytes_total)) { SANE_Status status; DBG (2, "sane_read: EOF reached\n"); @@ -2966,11 +2998,11 @@ sane_read (SANE_Handle handle, SANE_Byte * data, return SANE_STATUS_IO_ERROR; } } - *length = bytes_read; - test_device->bytes_total += bytes_read; + *length = (SANE_Int) bytes_read; + test_device->bytes_total += (size_t) bytes_read; - DBG (2, "sane_read: read %ld bytes of %d, total %d\n", (long) bytes_read, - max_scan_length, test_device->bytes_total); + DBG (2, "sane_read: read %zu bytes of %zu, total %zu\n", (size_t) bytes_read, + (size_t) max_scan_length, (size_t) test_device->bytes_total); return SANE_STATUS_GOOD; } @@ -3051,6 +3083,7 @@ sane_set_io_mode (SANE_Handle handle, SANE_Bool non_blocking) } else { + DBG (1, "sane_set_io_mode: unsupported\n"); if (non_blocking) return SANE_STATUS_UNSUPPORTED; } @@ -3089,5 +3122,6 @@ sane_get_select_fd (SANE_Handle handle, SANE_Int * fd) *fd = test_device->pipe; return SANE_STATUS_GOOD; } + DBG(1,"sane_get_select_fd: unsupported\n"); return SANE_STATUS_UNSUPPORTED; } diff --git a/backend/test.h b/backend/test.h index 3e7a6aa..61f23de 100644 --- a/backend/test.h +++ b/backend/test.h @@ -98,11 +98,12 @@ typedef enum opt_int_constraint_word_list, opt_int_array, opt_int_array_constraint_range, + opt_int_array_constraint_word_list, + opt_int_inexact, opt_gamma_red, opt_gamma_green, opt_gamma_blue, opt_gamma_all, - opt_int_array_constraint_word_list, opt_fixed_group, opt_fixed, opt_fixed_constraint_range, @@ -136,7 +137,7 @@ typedef struct Test_Device SANE_Word bytes_per_line; SANE_Word pixels_per_line; SANE_Word lines; - SANE_Int bytes_total; + size_t bytes_total; SANE_Bool open; SANE_Bool scanning; SANE_Bool cancelled; diff --git a/backend/umax-scsidef.h b/backend/umax-scsidef.h index 476bac5..db355a0 100644 --- a/backend/umax-scsidef.h +++ b/backend/umax-scsidef.h @@ -1053,7 +1053,7 @@ static char *scanner_error_str[] = "fb sensor error", /* 70 */ "fb home or motor sensor error", "fb filter or motor sensor error", - "fb lens or motor sensor error" + "fb lens or motor sensor error", "first line position error (LER error, vertical)", "first pixel position error (SER error, horizontal)", "first pixel position error for lens 2 (SER2 error, horizontal)", diff --git a/backend/umax-usb.c b/backend/umax-usb.c index 05019c7..ab772fe 100644 --- a/backend/umax-usb.c +++ b/backend/umax-usb.c @@ -261,8 +261,8 @@ sanei_umaxusb_open (const char *dev, int *fdp, { SANE_Status status; - handler = handler; /* silence gcc */ - handler_arg = handler_arg; /* silence gcc */ + (void) handler; /* silence gcc */ + (void) handler_arg; /* silence gcc */ status = sanei_usb_open (dev, fdp); if (status != SANE_STATUS_GOOD) { @@ -306,7 +306,7 @@ static SANE_Status sanei_umaxusb_open_extended (const char *dev, int *fdp, SANEI_SCSI_Sense_Handler handler, void *handler_arg, int *buffersize) { - buffersize = buffersize; + (void) buffersize; return(sanei_umaxusb_open(dev, fdp, handler, handler_arg)); } diff --git a/backend/umax1220u.c b/backend/umax1220u.c index 8c6098c..e5ecbef 100644 --- a/backend/umax1220u.c +++ b/backend/umax1220u.c @@ -131,9 +131,9 @@ static SANE_Status optionNumOptionsCallback (SANE_Option * option, SANE_Handle handle, SANE_Action action, void *value, SANE_Int * info) { - option = option; - handle = handle; - info = info; /* Eliminate warning about unused parameters */ + (void) option; + (void) handle; + (void) info; /* Eliminate warning about unused parameters */ if (action != SANE_ACTION_GET_VALUE) return SANE_STATUS_INVAL; @@ -173,7 +173,7 @@ optionResolutionCallback (SANE_Option * option, SANE_Handle handle, SANE_Status status; SANE_Word autoValue = 75; - handle = handle; /* Eliminate warning about unused parameters */ + (void) handle; /* Eliminate warning about unused parameters */ switch (action) { @@ -217,8 +217,8 @@ static SANE_Status optionGrayscaleCallback (SANE_Option * option, SANE_Handle handle, SANE_Action action, void *value, SANE_Int * info) { - handle = handle; - option = option; /* Eliminate warning about unused parameters */ + (void) handle; + (void) option; /* Eliminate warning about unused parameters */ switch (action) { @@ -261,10 +261,10 @@ optionLampOffCallback (SANE_Option * option, SANE_Handle handle, SANE_Status res = SANE_STATUS_GOOD; /* Eliminate warnings about unused parameters */ - option = option; - handle = handle; - info = info; - value = value; + (void) option; + (void) handle; + (void) info; + (void) value; if (action != SANE_ACTION_SET_VALUE) return SANE_STATUS_INVAL; @@ -308,9 +308,9 @@ static SANE_Status optionTopLeftXCallback (SANE_Option * option, SANE_Handle handle, SANE_Action action, void *value, SANE_Int * info) { - option = option; - handle = handle; - value = value; /* Eliminate warning about unused parameters */ + (void) option; + (void) handle; + (void) value; /* Eliminate warning about unused parameters */ switch (action) { @@ -351,8 +351,8 @@ optionTopLeftYCallback (SANE_Option * option, SANE_Handle handle, SANE_Action action, void *value, SANE_Int * info) { /* Eliminate warnings about unused parameters */ - option = option; - handle = handle; + (void) option; + (void) handle; switch (action) { @@ -394,8 +394,8 @@ optionBotRightXCallback (SANE_Option * option, SANE_Handle handle, SANE_Action action, void *value, SANE_Int * info) { /* Eliminate warnings about unused parameters */ - option = option; - handle = handle; + (void) option; + (void) handle; switch (action) { @@ -437,8 +437,8 @@ optionBotRightYCallback (SANE_Option * option, SANE_Handle handle, SANE_Action action, void *value, SANE_Int * info) { /* Eliminate warnings about unused parameters */ - option = option; - handle = handle; + (void) option; + (void) handle; switch (action) { @@ -780,7 +780,7 @@ sane_close (SANE_Handle handle) const SANE_Option_Descriptor * sane_get_option_descriptor (SANE_Handle handle, SANE_Int option) { - handle = handle; /* Eliminate compiler warning */ + (void) handle; /* Eliminate compiler warning */ DBG (3, "sane_get_option_descriptor: option = %d\n", option); if (option < 0 || option >= NELEMS (so)) @@ -792,7 +792,7 @@ SANE_Status sane_control_option (SANE_Handle handle, SANE_Int option, SANE_Action action, void *value, SANE_Int * info) { - handle = handle; /* Eliminate compiler warning */ + (void) handle; /* Eliminate compiler warning */ DBG (3, "sane_control_option: handle=%p, opt=%d, act=%d, val=%p, info=%p\n", @@ -812,7 +812,7 @@ sane_get_parameters (SANE_Handle handle, SANE_Parameters * params) SANE_UNFIX (optionBotRightYValue - optionTopLeftYValue) / MM_IN_INCH * optionResolutionValue; - handle = handle; /* Eliminate compiler warning */ + (void) handle; /* Eliminate compiler warning */ DBG (3, "sane_get_parameters\n"); parms.depth = 8; diff --git a/backend/umax_pp_low.c b/backend/umax_pp_low.c index 35cefa9..d1f3c16 100644 --- a/backend/umax_pp_low.c +++ b/backend/umax_pp_low.c @@ -53,9 +53,7 @@ #ifdef HAVE_SYS_TYPES_H #include #endif -#ifdef HAVE_SYS_IO_H -#include -#endif +#include "../include/sane/sanei_directio.h" #ifdef HAVE_UNISTD_H #include #endif @@ -85,380 +83,6 @@ #include #endif -/*************************************************/ -/* here we define sanei_inb/sanei_outb based on */ -/* OS dependent inb/outb definitions */ -/* SANE_INB is defined whenever a valid inb/outb */ -/* definition has been found */ -/* once all these work, it might be moved to */ -/* sanei_pio.c */ -/*************************************************/ - -#ifdef ENABLE_PARPORT_DIRECTIO - -#if (! defined SANE_INB ) && ( defined HAVE_SYS_HW_H ) /* OS/2 EMX case */ -#define SANE_INB 1 -static int -sanei_ioperm (int start, int length, int enable) -{ - if (enable) - return _portaccess (port, port + length - 1); - return 0; -} - -static unsigned char -sanei_inb (unsigned int port) -{ - return _inp8 (port) & 0xFF; -} - -static void -sanei_outb (unsigned int port, unsigned char value) -{ - _outp8 (port, value); -} - -static void -sanei_insb (unsigned int port, unsigned char *addr, unsigned long count) -{ - _inps8 (port, (unsigned char *) addr, count); -} - -static void -sanei_insl (unsigned int port, unsigned char *addr, unsigned long count) -{ - _inps32 (port, (unsigned long *) addr, count); -} - -static void -sanei_outsb (unsigned int port, const unsigned char *addr, - unsigned long count) -{ - _outps8 (port, (unsigned char *) addr, count); -} - -static void -sanei_outsl (unsigned int port, const unsigned char *addr, - unsigned long count) -{ - _outps32 (port, (unsigned long *) addr, count); -} -#endif /* OS/2 EMX case */ - - - -#if (! defined SANE_INB ) && ( defined HAVE_MACHINE_CPUFUNC_H ) /* FreeBSD case */ -#define SANE_INB 2 -static int -sanei_ioperm (int start, int length, int enable) -{ -#ifdef HAVE_I386_SET_IOPERM - return i386_set_ioperm (start, length, enable); -#else - int fd = 0; - - /* makes compilers happy */ - start = length + enable; - fd = open ("/dev/io", O_RDONLY); - if (fd > 0) - return 0; - return -1; -#endif -} - -static unsigned char -sanei_inb (unsigned int port) -{ - return inb (port); -} - -static void -sanei_outb (unsigned int port, unsigned char value) -{ - outb (port, value); -} - -static void -sanei_insb (unsigned int port, unsigned char *addr, unsigned long count) -{ - insb (port, addr, count); -} - -static void -sanei_insl (unsigned int port, unsigned char *addr, unsigned long count) -{ - insl (port, addr, count); -} - -static void -sanei_outsb (unsigned int port, const unsigned char *addr, - unsigned long count) -{ - outsb (port, addr, count); -} - -static void -sanei_outsl (unsigned int port, const unsigned char *addr, - unsigned long count) -{ - outsl (port, addr, count); -} -#endif /* FreeBSD case */ - - -/* linux GCC on i386 */ -#if ( ! defined SANE_INB ) && ( defined HAVE_SYS_IO_H ) && ( defined __GNUC__ ) && ( defined __i386__ ) -#define SANE_INB 3 - -static int -sanei_ioperm (int start, int length, int enable) -{ -#ifdef HAVE_IOPERM - return ioperm (start, length, enable); -#else - /* linux without ioperm ? hum ... */ - /* makes compilers happy */ - start = length + enable; - return 0; -#endif -} - -static unsigned char -sanei_inb (unsigned int port) -{ - return inb (port); -} - -static void -sanei_outb (unsigned int port, unsigned char value) -{ - outb (value, port); -} - -static void -sanei_insb (unsigned int port, unsigned char *addr, unsigned long count) -{ - insb (port, addr, count); -} - -static void -sanei_insl (unsigned int port, unsigned char *addr, unsigned long count) -{ - insl (port, addr, count); -} - -static void -sanei_outsb (unsigned int port, const unsigned char *addr, - unsigned long count) -{ - outsb (port, addr, count); -} - -static void -sanei_outsl (unsigned int port, const unsigned char *addr, - unsigned long count) -{ - /* oddly, 32 bit I/O are done with outsw instead of the expected outsl */ - outsw (port, addr, count); -} -#endif /* linux GCC on i386 */ - - -/* linux GCC non i386 */ -#if ( ! defined SANE_INB ) && ( defined HAVE_SYS_IO_H ) && ( defined __GNUC__ ) && ( ! defined __i386__ ) -#define SANE_INB 4 -static int -sanei_ioperm (int start, int length, int enable) -{ -#ifdef HAVE_IOPERM - return ioperm (start, length, enable); -#else - /* linux without ioperm ? hum ... */ - /* makes compilers happy */ - start = length + enable; - return 0; -#endif -} - -static unsigned char -sanei_inb (unsigned int port) -{ - return inb (port); -} - -static void -sanei_outb (unsigned int port, unsigned char value) -{ - outb (value, port); -} - -static void -sanei_insb (unsigned int port, unsigned char *addr, unsigned long count) -{ - unsigned int i; - - for (i = 0; i < count; i++) - addr[i] = sanei_inb (port); -} - -static void -sanei_insl (unsigned int port, unsigned char *addr, unsigned long count) -{ - unsigned int i; - - for (i = 0; i < count * 4; i++) - addr[i] = sanei_inb (port); -} - -static void -sanei_outsb (unsigned int port, const unsigned char *addr, - unsigned long count) -{ - unsigned int i; - - for (i = 0; i < count; i++) - sanei_outb (port, addr[i]); -} - -static void -sanei_outsl (unsigned int port, const unsigned char *addr, - unsigned long count) -{ - unsigned int i; - - for (i = 0; i < count * 4; i++) - sanei_outb (port, addr[i]); -} -#endif /* linux GCC non i386 */ - - -/* ICC on i386 */ -#if ( ! defined SANE_INB ) && ( defined __INTEL_COMPILER ) && ( defined __i386__ ) -#define SANE_INB 5 -static int -sanei_ioperm (int start, int length, int enable) -{ -#ifdef HAVE_IOPERM - return ioperm (start, length, enable); -#else - /* ICC without ioperm() ... */ - /* makes compilers happy */ - start = length + enable; - return 0; -#endif -} -static unsigned char -sanei_inb (unsigned int port) -{ - unsigned char ret; - - __asm__ __volatile__ ("inb %%dx,%%al":"=a" (ret):"d" ((u_int) port)); - return ret; -} - -static void -sanei_outb (unsigned int port, unsigned char value) -{ - __asm__ __volatile__ ("outb %%al,%%dx"::"a" (value), "d" ((u_int) port)); -} - -static void -sanei_insb (unsigned int port, void *addr, unsigned long count) -{ - __asm__ __volatile__ ("rep ; insb":"=D" (addr), "=c" (count):"d" (port), - "0" (addr), "1" (count)); -} - -static void -sanei_insl (unsigned int port, void *addr, unsigned long count) -{ - __asm__ __volatile__ ("rep ; insl":"=D" (addr), "=c" (count):"d" (port), - "0" (addr), "1" (count)); -} - -static void -sanei_outsb (unsigned int port, const void *addr, unsigned long count) -{ - __asm__ __volatile__ ("rep ; outsb":"=S" (addr), "=c" (count):"d" (port), - "0" (addr), "1" (count)); -} - -static void -sanei_outsl (unsigned int port, const void *addr, unsigned long count) -{ - __asm__ __volatile__ ("rep ; outsl":"=S" (addr), "=c" (count):"d" (port), - "0" (addr), "1" (count)); -} - -#endif /* ICC on i386 */ - -/* direct io requested, but no valid inb/oub */ -#if ( ! defined SANE_INB) && ( defined ENABLE_PARPORT_DIRECTIO ) -#warning "ENABLE_PARPORT_DIRECTIO cannot be used du to lack of inb/out definition" -#undef ENABLE_PARPORT_DIRECTIO -#endif - -#endif /* ENABLE_PARPORT_DIRECTIO */ -/* - * no inb/outb without --enable-parport-directio * - */ -#ifndef ENABLE_PARPORT_DIRECTIO -#define SANE_INB 0 -static int -sanei_ioperm (__sane_unused__ int start, __sane_unused__ int length, - __sane_unused__ int enable) -{ - /* returns failure */ - return -1; -} - -static unsigned char -sanei_inb (__sane_unused__ unsigned int port) -{ - return 255; -} - -static void -sanei_outb (__sane_unused__ unsigned int port, - __sane_unused__ unsigned char value) -{ -} - -static void -sanei_insb (__sane_unused__ unsigned int port, - __sane_unused__ unsigned char *addr, - __sane_unused__ unsigned long count) -{ -} - -static void -sanei_insl (__sane_unused__ unsigned int port, - __sane_unused__ unsigned char *addr, - __sane_unused__ unsigned long count) -{ -} - -static void -sanei_outsb (__sane_unused__ unsigned int port, - __sane_unused__ const unsigned char *addr, - __sane_unused__ unsigned long count) -{ -} - -static void -sanei_outsl (__sane_unused__ unsigned int port, - __sane_unused__ const unsigned char *addr, - __sane_unused__ unsigned long count) -{ -} -#endif /* ENABLE_PARPORT_DIRECTIO is not defined */ - -/* we need either direct io or ppdev */ -#if ! defined ENABLE_PARPORT_DIRECTIO && ! defined HAVE_LINUX_PPDEV_H && ! defined HAVE_DEV_PPBUS_PPI_H -#define IO_SUPPORT_MISSING -#endif - - #include "umax_pp_low.h" #ifdef DMALLOC diff --git a/backend/v4l.c b/backend/v4l.c index bce3c3a..d7ab8e7 100644 --- a/backend/v4l.c +++ b/backend/v4l.c @@ -434,7 +434,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) size_t len; FILE *fp; - authorize = authorize; /* stop gcc from complaining */ + (void) authorize; /* stop gcc from complaining */ DBG_INIT (); DBG (2, "SANE v4l backend version %d.%d build %d from %s\n", SANE_CURRENT_MAJOR, @@ -1007,7 +1007,7 @@ sane_start (SANE_Handle handle) buffer = NULL; return SANE_STATUS_IO_ERROR; } - DBG (3, "sane_start: mmapped frame, capture 1 pict into %p\n", buffer); + DBG (3, "sane_start: mmapped frame, capture 1 pict into %p\n", (void *) buffer); s->mmap.frame = 0; s->mmap.width = s->window.width; /* s->mmap.width = parms.pixels_per_line; ??? huh? */ diff --git a/backend/xerox_mfp.c b/backend/xerox_mfp.c index 310dc53..fc3d94f 100644 --- a/backend/xerox_mfp.c +++ b/backend/xerox_mfp.c @@ -213,6 +213,8 @@ static int isSupportedDevice(struct device __sane_unused__ *dev) if (!strncmp(dev->sane.model, "SCX-4500W", 9) || !strncmp(dev->sane.model, "C460", 4) || !!strstr(dev->sane.model, "CLX-3170") || + !!strstr(dev->sane.model, "4x24") || + !!strstr(dev->sane.model, "4x28") || !strncmp(dev->sane.model, "M288x", 5)) return 0; return 1; @@ -223,6 +225,11 @@ static int isSupportedDevice(struct device __sane_unused__ *dev) #endif } +static int isJPEGEnabled(struct device __sane_unused__ *dev) +{ + return isSupportedDevice(dev) && dev->compressionEnabled; +} + static void dbg_dump(struct device *dev) { int i; @@ -595,6 +602,22 @@ static void init_options(struct device *dev) dev->opt[OPT_SOURCE].constraint_type = SANE_CONSTRAINT_STRING_LIST; dev->opt[OPT_SOURCE].constraint.string_list = doc_sources; + dev->opt[OPT_JPEG].name = "jpeg"; + dev->opt[OPT_JPEG].title = SANE_I18N("jpeg compression"); + dev->opt[OPT_JPEG].desc = SANE_I18N("JPEG Image Compression"); + dev->opt[OPT_JPEG].unit = SANE_UNIT_NONE; + dev->opt[OPT_JPEG].type = SANE_TYPE_BOOL; + dev->opt[OPT_JPEG].cap |= SANE_CAP_ADVANCED; +#ifdef HAVE_LIBJPEG + dev->compressionEnabled = SANE_TRUE; + if (!isSupportedDevice(dev)) + dev->opt[OPT_JPEG].cap |= SANE_CAP_INACTIVE; + dev->val[OPT_JPEG].b = SANE_TRUE; +#else + dev->opt[OPT_JPEG].cap |= SANE_CAP_INACTIVE; + dev->val[OPT_JPEG].b = SANE_FALSE; +#endif + dev->opt[OPT_GROUP_GEO].name = SANE_NAME_GEOMETRY; dev->opt[OPT_GROUP_GEO].title = SANE_TITLE_GEOMETRY; dev->opt[OPT_GROUP_GEO].desc = SANE_DESC_GEOMETRY; @@ -647,7 +670,10 @@ static void set_parameters(struct device *dev) dev->para.pixels_per_line = dev->win_width / px_to_len; dev->para.bytes_per_line = dev->para.pixels_per_line; - if (!isSupportedDevice(dev)) { + DBG(5, dev->val[OPT_JPEG].b ? "JPEG compression enabled\n" : "JPEG compression disabled\n" ); + dev->compressionEnabled = dev->val[OPT_JPEG].b; + + if (!isJPEGEnabled(dev)) { #if BETTER_BASEDPI px_to_len = 1213.9 / dev->val[OPT_RESOLUTION].w; #endif @@ -776,7 +802,7 @@ static int dev_set_window(struct device *dev) /* Set to JPEG Lossy Compression, if mode is color (only for supported model)... * else go with Uncompressed (For backard compatibility with old models )*/ if (dev->composition == MODE_RGB24) { - if (isSupportedDevice(dev)) { + if (isJPEGEnabled(dev)) { cmd[0x14] = 0x6; } } @@ -1161,7 +1187,7 @@ sane_get_parameters(SANE_Handle h, SANE_Parameters *para) static int dev_acquire(struct device *dev) { if (!dev_cmd_wait(dev, CMD_READ)) - return dev->state; + return 0; dev->state = SANE_STATUS_GOOD; dev->vertical = dev->res[0x08] << 8 | dev->res[0x09]; @@ -1188,7 +1214,8 @@ static int dev_acquire(struct device *dev) if (dev->bytes_per_line > DATASIZE) { DBG(1, "%s: unsupported line size: %d bytes > %d\n", __func__, dev->bytes_per_line, DATASIZE); - return ret_cancel(dev, SANE_STATUS_NO_MEM); + ret_cancel(dev, SANE_STATUS_NO_MEM); + return 0; } dev->reading = 0; /* need to issue READ_IMAGE */ @@ -1279,7 +1306,7 @@ sane_read(SANE_Handle h, SANE_Byte *buf, SANE_Int maxlen, SANE_Int *lenp) SANE_Status status; struct device *dev = h; - DBG(3, "%s: %p, %p, %d, %p\n", __func__, h, buf, maxlen, (void *)lenp); + DBG(3, "%s: %p, %p, %d, %p\n", __func__, h, (void *) buf, maxlen, (void *) lenp); if (lenp) *lenp = 0; @@ -1294,7 +1321,7 @@ sane_read(SANE_Handle h, SANE_Byte *buf, SANE_Int maxlen, SANE_Int *lenp) /* copying uncompressed data */ if (dev->composition == MODE_RGB24 && - isSupportedDevice(dev) && + isJPEGEnabled(dev) && dev->decDataSize > 0) { int diff = dev->total_img_size - dev->total_out_size; int bufLen = (diff < maxlen) ? diff : maxlen; @@ -1321,7 +1348,7 @@ sane_read(SANE_Handle h, SANE_Byte *buf, SANE_Int maxlen, SANE_Int *lenp) /* this will never happen */ DBG(1, "image overflow %d bytes\n", dev->total_img_size - dev->total_out_size); } - if (isSupportedDevice(dev) && + if (isJPEGEnabled(dev) && dev->composition == MODE_RGB24) { remove(encTmpFileName); } @@ -1376,7 +1403,7 @@ sane_read(SANE_Handle h, SANE_Byte *buf, SANE_Int maxlen, SANE_Int *lenp) if (buf && lenp) { /* read mode */ /* copy will do minimal of valid data */ if (dev->para.format == SANE_FRAME_RGB && dev->line_order) { - if (isSupportedDevice(dev)) { + if (isJPEGEnabled(dev)) { clrlen = dump_to_tmp_file(dev); /* decompress after reading entire block data*/ if (0 == dev->blocklen) { @@ -1490,7 +1517,7 @@ sane_start(SANE_Handle h) dev->total_img_size = dev->para.bytes_per_line * dev->para.lines; - if (isSupportedDevice(dev) && + if (isJPEGEnabled(dev) && dev->composition == MODE_RGB24) { int fd; remove(encTmpFileName); diff --git a/backend/xerox_mfp.conf.in b/backend/xerox_mfp.conf.in index 4fcbeb6..33e4b38 100644 --- a/backend/xerox_mfp.conf.in +++ b/backend/xerox_mfp.conf.in @@ -245,6 +245,9 @@ usb 0x0924 0x4293 #Xerox WorkCentre 3220 usb 0x0924 0x4294 +#Xerox WorkCentre 3025 +usb 0x0924 0x42da + #Xerox WorkCentre 3225 usb 0x0924 0x42dc diff --git a/backend/xerox_mfp.h b/backend/xerox_mfp.h index d85fe14..6aa83a4 100644 --- a/backend/xerox_mfp.h +++ b/backend/xerox_mfp.h @@ -38,6 +38,7 @@ enum options { OPT_MODE, /* color */ OPT_THRESHOLD, /* brightness */ OPT_SOURCE, /* affects max window size */ + OPT_JPEG, OPT_GROUP_GEO, OPT_SCAN_TL_X, /* for (OPT_SCAN_TL_X to OPT_SCAN_BR_Y) */ OPT_SCAN_TL_Y, @@ -103,6 +104,7 @@ struct device { int doc_source; /* document source */ int threshold; /* brightness */ int compressionTypes; + SANE_Bool compressionEnabled; /* CMD_READ data. It is per block only, image could be in many blocks */ int blocklen; /* image data block len (padding incl.) */ -- cgit v1.2.3