diff options
Diffstat (limited to 'backend/genesys.c')
-rw-r--r-- | backend/genesys.c | 104 |
1 files changed, 55 insertions, 49 deletions
diff --git a/backend/genesys.c b/backend/genesys.c index 984cead..db0a2b2 100644 --- a/backend/genesys.c +++ b/backend/genesys.c @@ -2,7 +2,7 @@ Copyright (C) 2003, 2004 Henning Meier-Geinitz <henning@meier-geinitz.de> Copyright (C) 2004, 2005 Gerhard Jaeger <gerhard@gjaeger.de> - Copyright (C) 2004-2015 Stéphane Voltz <stef.dev@free.fr> + Copyright (C) 2004-2016 Stéphane Voltz <stef.dev@free.fr> Copyright (C) 2005-2009 Pierre Willenbrock <pierre@pirsoft.dnsalias.org> Copyright (C) 2006 Laurent Charpentier <laurent_pubs@yahoo.com> Copyright (C) 2007 Luke <iceyfor@gmail.com> @@ -58,7 +58,7 @@ * SANE backend for Genesys Logic GL646/GL841/GL842/GL843/GL846/GL847/GL124 based scanners */ -#define BUILD 2508 +#define BUILD 2511 #define BACKEND_NAME genesys #include "genesys.h" @@ -387,7 +387,7 @@ sanei_genesys_create_slope_table3 (Genesys_Device * dev, DBG (DBG_proc, "%s: step_type = %d, " - "exposure_time = %d, yres = %g, power_mode = %d\n", __FUNCTION__, step_type, + "exposure_time = %d, yres = %g, power_mode = %d\n", __func__, step_type, exposure_time, yres, power_mode); /* final speed */ @@ -792,7 +792,7 @@ sanei_genesys_exposure_time2 (Genesys_Device * dev, float ydpi, exposure = exposure_by_led; DBG (DBG_info, "%s: ydpi=%d, step=%d, endpixel=%d led=%d, power=%d => exposure=%d\n", - __FUNCTION__, (int)ydpi, step_type, endpixel, exposure_by_led, power_mode, exposure); + __func__, (int)ydpi, step_type, endpixel, exposure_by_led, power_mode, exposure); return exposure; } @@ -928,7 +928,7 @@ genesys_send_offset_and_shading (Genesys_Device * dev, uint8_t * data, int start_address; SANE_Status status; - DBG (DBG_proc, "%s: (size = %d)\n", __FUNCTION__, size); + DBG (DBG_proc, "%s: (size = %d)\n", __func__, size); /* ASIC higher than gl843 doesn't have register 2A/2B, so we route to * a per ASIC shading data loading function if available. @@ -978,7 +978,7 @@ genesys_send_offset_and_shading (Genesys_Device * dev, uint8_t * data, status = sanei_genesys_set_buffer_address (dev, start_address); if (status != SANE_STATUS_GOOD) { - DBG (DBG_error, "%s: failed to set buffer address: %s\n", __FUNCTION__, + DBG (DBG_error, "%s: failed to set buffer address: %s\n", __func__, sane_strstatus (status)); return status; } @@ -986,7 +986,7 @@ genesys_send_offset_and_shading (Genesys_Device * dev, uint8_t * data, status = dev->model->cmd_set->bulk_write_data (dev, 0x3c, data, size); if (status != SANE_STATUS_GOOD) { - DBG (DBG_error, "%s: failed to send shading table: %s\n", __FUNCTION__, + DBG (DBG_error, "%s: failed to send shading table: %s\n", __func__, sane_strstatus (status)); return status; } @@ -1046,7 +1046,7 @@ sanei_genesys_init_shading_data (Genesys_Device * dev, int pixels_per_line) free (shading_data); if (status != SANE_STATUS_GOOD) { - DBG (DBG_error, "%s: failed to send shading data: %s\n", __FUNCTION__, + DBG (DBG_error, "%s: failed to send shading data: %s\n", __func__, sane_strstatus (status)); } @@ -1489,7 +1489,7 @@ genesys_coarse_calibration (Genesys_Device * dev) status = dev->model->cmd_set->set_fe (dev, AFE_INIT); if (status != SANE_STATUS_GOOD) { - DBG (DBG_error, "%s: failed to set frontend: %s\n", __FUNCTION__, + DBG (DBG_error, "%s: failed to set frontend: %s\n", __func__, sane_strstatus (status)); free(all_data); free(calibration_data); @@ -2069,9 +2069,12 @@ genesys_white_shading_calibration (Genesys_Device * dev) /* turn on motor and lamp power */ dev->model->cmd_set->set_lamp_power (dev, dev->calib_reg, SANE_TRUE); dev->model->cmd_set->set_motor_power (dev->calib_reg, motor); - if (dev->model->flags & GENESYS_FLAG_SHADING_REPARK) + + /* if needed, go back before doin next scan, by using rewind, registers and + * slopes table are kept intact from previous scan */ + if (dev->model->flags & GENESYS_FLAG_SHADING_REPARK && dev->model->cmd_set->rewind) { - status = dev->model->cmd_set->slow_back_home (dev, SANE_TRUE); + status = dev->model->cmd_set->rewind (dev); } status = @@ -2180,7 +2183,7 @@ genesys_dark_white_shading_calibration (Genesys_Device * dev) SANE_Bool motor; - DBG (DBG_proc, "%s: (lines = %d)\n", __FUNCTION__, (unsigned int)dev->calib_lines); + DBG (DBG_proc, "%s: (lines = %d)\n", __func__, (unsigned int)dev->calib_lines); pixels_per_line = dev->calib_pixels; channels = dev->calib_channels; @@ -2193,7 +2196,7 @@ genesys_dark_white_shading_calibration (Genesys_Device * dev) dev->white_average_data = malloc (dev->average_size); if (!dev->white_average_data) { - DBG (DBG_error, "%s: failed to allocate white average memory\n", __FUNCTION__); + DBG (DBG_error, "%s: failed to allocate white average memory\n", __func__); return SANE_STATUS_NO_MEM; } @@ -2203,7 +2206,7 @@ genesys_dark_white_shading_calibration (Genesys_Device * dev) dev->dark_average_data = malloc (channels * 2 * pixels_per_line); if (!dev->dark_average_data) { - DBG (DBG_error, "%s: failed to allocate dark average memory\n", __FUNCTION__); + DBG (DBG_error, "%s: failed to allocate dark average memory\n", __func__); return SANE_STATUS_NO_MEM; } @@ -2212,7 +2215,7 @@ genesys_dark_white_shading_calibration (Genesys_Device * dev) calibration_data = malloc (size); if (!calibration_data) { - DBG (DBG_error, "%s: failed to allocate calibration memory\n", __FUNCTION__); + DBG (DBG_error, "%s: failed to allocate calibration memory\n", __func__); return SANE_STATUS_NO_MEM; } @@ -2233,7 +2236,7 @@ genesys_dark_white_shading_calibration (Genesys_Device * dev) if (status != SANE_STATUS_GOOD) { free (calibration_data); - DBG (DBG_error, "%s: failed to bulk write registers: %s\n", __FUNCTION__, + DBG (DBG_error, "%s: failed to bulk write registers: %s\n", __func__, sane_strstatus (status)); return status; } @@ -2243,7 +2246,7 @@ genesys_dark_white_shading_calibration (Genesys_Device * dev) if (status != SANE_STATUS_GOOD) { free (calibration_data); - DBG (DBG_error, "%s: failed to begin scan: %s\n", __FUNCTION__, + DBG (DBG_error, "%s: failed to begin scan: %s\n", __func__, sane_strstatus (status)); return status; } @@ -2252,7 +2255,7 @@ genesys_dark_white_shading_calibration (Genesys_Device * dev) if (status != SANE_STATUS_GOOD) { free (calibration_data); - DBG (DBG_error, "%s: failed to read data: %s\n", __FUNCTION__, + DBG (DBG_error, "%s: failed to read data: %s\n", __func__, sane_strstatus (status)); return status; } @@ -2261,7 +2264,7 @@ genesys_dark_white_shading_calibration (Genesys_Device * dev) if (status != SANE_STATUS_GOOD) { free (calibration_data); - DBG (DBG_error, "%s: Failed to end scan: %s\n", __FUNCTION__, + DBG (DBG_error, "%s: Failed to end scan: %s\n", __func__, sane_strstatus (status)); return status; } @@ -2434,7 +2437,7 @@ compute_averaged_planar (Genesys_Device * dev, unsigned int x, i, j, br, dk, res, avgpixels, basepixels, val; unsigned int fill,factor; - DBG (DBG_info, "%s: pixels=%d, offset=%d\n", __FUNCTION__, pixels_per_line, o); + DBG (DBG_info, "%s: pixels=%d, offset=%d\n", __func__, pixels_per_line, o); /* initialize result */ memset (shading_data, 0xff, words_per_color * 3 * 2); @@ -2504,9 +2507,9 @@ compute_averaged_planar (Genesys_Device * dev, fill=1; } - DBG (DBG_info, "%s: averaging over %d pixels\n", __FUNCTION__, avgpixels); - DBG (DBG_info, "%s: packing factor is %d\n", __FUNCTION__, factor); - DBG (DBG_info, "%s: fill length is %d\n", __FUNCTION__, fill); + DBG (DBG_info, "%s: averaging over %d pixels\n", __func__, avgpixels); + DBG (DBG_info, "%s: packing factor is %d\n", __func__, factor); + DBG (DBG_info, "%s: fill length is %d\n", __func__, fill); for (x = 0; x <= pixels_per_line - avgpixels; x += avgpixels) { @@ -2903,7 +2906,7 @@ genesys_send_shading_coefficient (Genesys_Device * dev) shading_data = malloc (length); if (!shading_data) { - DBG (DBG_error, "%s: failed to allocate memory\n", __FUNCTION__); + DBG (DBG_error, "%s: failed to allocate memory\n", __func__); return SANE_STATUS_NO_MEM; } memset (shading_data, 0, length); @@ -3071,7 +3074,7 @@ genesys_send_shading_coefficient (Genesys_Device * dev) shading_data = malloc (length); if (!shading_data) { - DBG (DBG_error, "%s: failed to allocate memory\n", __FUNCTION__); + DBG (DBG_error, "%s: failed to allocate memory\n", __func__); return SANE_STATUS_NO_MEM; } memset (shading_data, 0, length); @@ -3121,7 +3124,7 @@ genesys_send_shading_coefficient (Genesys_Device * dev) 256); /* patch_size: contigous extent */ break; default: - DBG (DBG_error, "%s: sensor %d not supported\n", __FUNCTION__, dev->model->ccd_type); + DBG (DBG_error, "%s: sensor %d not supported\n", __func__, dev->model->ccd_type); return SANE_STATUS_UNSUPPORTED; break; } @@ -3131,7 +3134,7 @@ genesys_send_shading_coefficient (Genesys_Device * dev) free (shading_data); if (status != SANE_STATUS_GOOD) { - DBG (DBG_error, "%s: failed to send shading data: %s\n", __FUNCTION__, + DBG (DBG_error, "%s: failed to send shading data: %s\n", __func__, sane_strstatus (status)); } @@ -3689,7 +3692,7 @@ genesys_sheetfed_calibration (Genesys_Device * dev) if (status != SANE_STATUS_GOOD) { dev->model->cmd_set->eject_document (dev); - DBG (DBG_error, "%s: failed eject target: %s\n", __FUNCTION__, + DBG (DBG_error, "%s: failed eject target: %s\n", __func__, sane_strstatus (status)); return status; } @@ -3821,7 +3824,7 @@ genesys_warmup_lamp (Genesys_Device * dev) /* check if the current chipset implements warmup */ if(dev->model->cmd_set->init_regs_for_warmup==NULL) { - DBG (DBG_error, "%s: init_regs_for_warmup not implemented\n", __FUNCTION__); + DBG (DBG_error, "%s: init_regs_for_warmup not implemented\n", __func__); return status; } @@ -4346,7 +4349,7 @@ genesys_fill_line_interp_buffer (Genesys_Device * dev, uint8_t *work_buffer_dst, if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "%s: failed to read %lu bytes (%s)\n", __FUNCTION__, + "%s: failed to read %lu bytes (%s)\n", __func__, (u_long) dev->oe_buffer.size, sane_strstatus (status)); return SANE_STATUS_IO_ERROR; } @@ -4383,7 +4386,7 @@ genesys_fill_line_interp_buffer (Genesys_Device * dev, uint8_t *work_buffer_dst, if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "%s: failed to read %lu bytes (%s)\n", __FUNCTION__, + "%s: failed to read %lu bytes (%s)\n", __func__, (u_long) dev->oe_buffer.size, sane_strstatus (status)); return SANE_STATUS_IO_ERROR; } @@ -4417,7 +4420,7 @@ genesys_fill_segmented_buffer (Genesys_Device * dev, uint8_t *work_buffer_dst, s if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "%s: failed to read %lu bytes (%s)\n", __FUNCTION__, + "%s: failed to read %lu bytes (%s)\n", __func__, (u_long) dev->oe_buffer.size, sane_strstatus (status)); return SANE_STATUS_IO_ERROR; } @@ -4508,7 +4511,7 @@ genesys_fill_segmented_buffer (Genesys_Device * dev, uint8_t *work_buffer_dst, s if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "%s: failed to read %lu bytes (%s)\n", __FUNCTION__, + "%s: failed to read %lu bytes (%s)\n", __func__, (u_long) dev->oe_buffer.size, sane_strstatus (status)); return SANE_STATUS_IO_ERROR; } @@ -5496,7 +5499,7 @@ GENESYS_STATIC char *calibration_filename(Genesys_Device *currdev) snprintf (tmpstr, PATH_MAX, "%s%c.sane%c%s", ptr, PATH_SEP, PATH_SEP, filename); } - DBG (DBG_info, "%s: calibration filename >%s<\n", __FUNCTION__, tmpstr); + DBG (DBG_info, "%s: calibration filename >%s<\n", __func__, tmpstr); return tmpstr; } @@ -5893,7 +5896,7 @@ init_options (Genesys_Scanner * s) DISABLE (OPT_COLOR_FILTER); } - /* calibration stor file name */ + /* calibration store file name */ s->opt[OPT_CALIBRATION_FILE].name = "calibration-file"; s->opt[OPT_CALIBRATION_FILE].title = SANE_I18N ("Calibration file"); s->opt[OPT_CALIBRATION_FILE].desc = SANE_I18N ("Specify the calibration file to use"); @@ -6330,7 +6333,7 @@ probe_genesys_devices (void) free (new_dev); } - DBG(DBG_info, "%s: %d devices currently attached\n", __FUNCTION__, num_devices); + DBG(DBG_info, "%s: %d devices currently attached\n", __func__, num_devices); DBGCOMPLETED; @@ -6545,7 +6548,7 @@ genesys_buffer_image(Genesys_Scanner *s) lines = (SANE_UNFIX (dev->model->y_size) * dev->settings.yres) / MM_PER_INCH; } - DBG (DBG_info, "%s: buffering %d lines of %d bytes\n", __FUNCTION__, lines, + DBG (DBG_info, "%s: buffering %d lines of %d bytes\n", __func__, lines, s->params.bytes_per_line); /* maximum bytes to read */ @@ -6568,7 +6571,7 @@ genesys_buffer_image(Genesys_Scanner *s) { DBG (DBG_error, "%s: digital processing requires too much memory.\nConsider disabling it\n", - __FUNCTION__); + __func__); return SANE_STATUS_NO_MEM; } @@ -6585,7 +6588,7 @@ genesys_buffer_image(Genesys_Scanner *s) if (status != SANE_STATUS_EOF && status != SANE_STATUS_GOOD) { free (s->dev->img_buffer); - DBG (DBG_error, "%s: %s buffering failed\n", __FUNCTION__, + DBG (DBG_error, "%s: %s buffering failed\n", __func__, sane_strstatus (status)); return status; } @@ -6600,7 +6603,7 @@ genesys_buffer_image(Genesys_Scanner *s) { DBG (DBG_error0, "%s: digital processing requires too much memory.\nConsider disabling it\n", - __FUNCTION__); + __func__); return SANE_STATUS_NO_MEM; } } @@ -6627,7 +6630,7 @@ genesys_buffer_image(Genesys_Scanner *s) { DBG (DBG_error0, "%s: digital processing requires too much memory.\nConsider disabling it\n", - __FUNCTION__); + __func__); return SANE_STATUS_NO_MEM; } genesys_gray_lineart (dev, @@ -6669,10 +6672,10 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) DBG_INIT (); DBG (DBG_init, "SANE Genesys backend version %d.%d build %d from %s\n", SANE_CURRENT_MAJOR, V_MINOR, BUILD, PACKAGE_STRING); -#ifdef HAVE_LIBUSB_1_0 +#ifdef HAVE_LIBUSB DBG (DBG_init, "SANE Genesys backend built with libusb-1.0\n"); #endif -#ifdef HAVE_LIBUSB +#ifdef HAVE_LIBUSB_LEGACY DBG (DBG_init, "SANE Genesys backend built with libusb\n"); #endif @@ -6942,8 +6945,8 @@ sane_open (SANE_String_Const devicename, SANE_Handle * handle) tmpstr=calibration_filename(s->dev); s->val[OPT_CALIBRATION_FILE].s = strdup (tmpstr); s->dev->calib_file = strdup (tmpstr); - DBG (DBG_info, "%s: Calibration filename set to:\n", __FUNCTION__); - DBG (DBG_info, "%s: >%s<\n", __FUNCTION__, s->dev->calib_file); + DBG (DBG_info, "%s: Calibration filename set to:\n", __func__); + DBG (DBG_info, "%s: >%s<\n", __func__, s->dev->calib_file); free(tmpstr); /* now open file, fetch calibration records */ @@ -7033,7 +7036,9 @@ sane_close (SANE_Handle handle) FREE_IFNOT_NULL (s->dev->sensor.gamma_table[1]); FREE_IFNOT_NULL (s->dev->sensor.gamma_table[2]); - /* for an handful of bytes .. */ + s->dev->already_initialized = SANE_FALSE; + + /* for an handful of bytes .. */ free ((void *)(size_t)s->opt[OPT_RESOLUTION].constraint.word_list); free (s->val[OPT_SOURCE].s); free (s->val[OPT_MODE].s); @@ -7125,6 +7130,7 @@ get_option_value (Genesys_Scanner * s, int option, void *val) case OPT_DESPECK: case OPT_CONTRAST: case OPT_BRIGHTNESS: + case OPT_EXPIRATION_TIME: *(SANE_Word *) val = s->val[option].w; break; case OPT_CUSTOM_GAMMA: @@ -7245,8 +7251,8 @@ static SANE_Status set_calibration_value (Genesys_Scanner * s, int option, void if (tmp) free (tmp); dev->calib_file = strdup (val); - DBG (DBG_info, "%s: Calibration filename set to:\n", __FUNCTION__); - DBG (DBG_info, "%s: >%s<\n", __FUNCTION__, s->dev->calib_file); + DBG (DBG_info, "%s: Calibration filename set to:\n", __func__); + DBG (DBG_info, "%s: >%s<\n", __func__, s->dev->calib_file); DBGCOMPLETED; return SANE_STATUS_GOOD; @@ -7536,7 +7542,7 @@ set_option_value (Genesys_Scanner * s, int option, void *val, { DBG (DBG_error, "%s: failed to disable power saving mode: %s\n", - __FUNCTION__, sane_strstatus (status)); + __func__, sane_strstatus (status)); } else status = genesys_scanner_calibration (s->dev); |