diff options
| author | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2015-04-27 06:51:24 +0200 | 
|---|---|---|
| committer | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2015-04-27 06:51:24 +0200 | 
| commit | f3843702a12cf46f9cd4d1be772055ec6893a1bb (patch) | |
| tree | 3f3d8fe1f2b756dc2cd9fcff7b2e8e53539278ba /backend/genesys_low.c | |
| parent | b2802d98d4486d6afc585062f4ca02fddf829dc5 (diff) | |
Release 1.0.25+git20150425-1
Diffstat (limited to 'backend/genesys_low.c')
| -rw-r--r-- | backend/genesys_low.c | 43 | 
1 files changed, 25 insertions, 18 deletions
| diff --git a/backend/genesys_low.c b/backend/genesys_low.c index 63420e4..0af2149 100644 --- a/backend/genesys_low.c +++ b/backend/genesys_low.c @@ -1437,6 +1437,7 @@ sanei_genesys_wait_for_home (Genesys_Device * dev)    SANE_Status status;    uint8_t val;    int loop; +  int max=300;    DBGSTART; @@ -1492,7 +1493,14 @@ sanei_genesys_wait_for_home (Genesys_Device * dev)              }        ++loop;      } -  while (loop < 300 && !(val & HOMESNR) && status == SANE_STATUS_GOOD); +  while (loop < max && !(val & HOMESNR) && status == SANE_STATUS_GOOD); + +  /* if after the timeout, head is still not parked, error out */ +  if(loop >= max && !(val & HOMESNR) && status == SANE_STATUS_GOOD)  +    { +      DBG (DBG_error, "%s: failed to reach park position %ds\n", __FUNCTION__, max/10); +      return SANE_STATUS_IO_ERROR; +    }    DBGCOMPLETED;    return status; @@ -1755,7 +1763,11 @@ int sanei_genesys_get_lowest_dpi(Genesys_Device *dev)  /** @brief check is a cache entry may be used   * Compares current settings with the cache entry and return   * SANE_TRUE if they are compatible. - */ + * A calibration cache is compatible if color mode and x dpi match the user + * requested scan. In the case of CIS scanners, dpi isn't a criteria. + * flatbed cache entries are considred too old and then expires if they + * are older than the expiration time option, forcing calibration at least once + * then given time. */  SANE_Status  sanei_genesys_is_compatible_calibration (Genesys_Device * dev,  				 Genesys_Calibration_Cache * cache, @@ -1771,22 +1783,20 @@ sanei_genesys_is_compatible_calibration (Genesys_Device * dev,    if(dev->model->cmd_set->calculate_current_setup==NULL)      { -      DBG (DBG_proc, -	   "sanei_genesys_is_compatible_calibration: no calculate_setup, non compatible cache\n"); +      DBG (DBG_proc, "%s: no calculate_setup, non compatible cache\n", __FUNCTION__);        return SANE_STATUS_UNSUPPORTED;      }    status = dev->model->cmd_set->calculate_current_setup (dev);    if (status != SANE_STATUS_GOOD)      { -      DBG (DBG_error, -	   "sanei_genesys_is_compatible_calibration: failed to calculate current setup: %s\n", +      DBG (DBG_error, "%s: failed to calculate current setup: %s\n", __FUNCTION__,  	   sane_strstatus (status));        return status;      }    dev->current_setup.scan_method = dev->settings.scan_method; -  DBG (DBG_proc, "sanei_genesys_is_compatible_calibration: checking\n"); +  DBG (DBG_proc, "%s: checking\n", __FUNCTION__);    /* a calibration cache is compatible if color mode and x dpi match the user     * requested scan. In the case of CIS scanners, dpi isn't a criteria */ @@ -1804,39 +1814,36 @@ sanei_genesys_is_compatible_calibration (Genesys_Device * dev,        resolution=sanei_genesys_compute_dpihw(dev,dev->settings.xres);        compatible = (resolution == ((int) sanei_genesys_compute_dpihw(dev,cache->used_setup.xres)));      } +  DBG (DBG_io, "%s: after resolution check current compatible=%d\n", __FUNCTION__, compatible);    if (dev->current_setup.half_ccd != cache->used_setup.half_ccd)      { -      DBG (DBG_io, -	   "sanei_genesys_is_compatible_calibration: half_ccd=%d, used=%d\n", +      DBG (DBG_io, "%s: half_ccd=%d, used=%d\n", __FUNCTION__,  	   dev->current_setup.half_ccd, cache->used_setup.half_ccd);        compatible = 0;      }    if (dev->current_setup.scan_method != cache->used_setup.scan_method)      { -      DBG (DBG_io, -	   "sanei_genesys_is_compatible_calibration: current method=%d, used=%d\n", +      DBG (DBG_io, "%s: current method=%d, used=%d\n", __FUNCTION__,  	   dev->current_setup.scan_method, cache->used_setup.scan_method);        compatible = 0;      }    if (!compatible)      { -      DBG (DBG_proc, -	   "sanei_genesys_is_compatible_calibration: completed, non compatible cache\n"); +      DBG (DBG_proc, "%s: completed, non compatible cache\n", __FUNCTION__);        return SANE_STATUS_UNSUPPORTED;      } -  /* a cache entry expires after 60 minutes for non sheetfed scanners */ +  /* a cache entry expires after afetr expiration time for non sheetfed scanners */    /* this is not taken into account when overwriting cache entries    */  #ifdef HAVE_SYS_TIME_H -  if(for_overwrite == SANE_FALSE) +  if(for_overwrite == SANE_FALSE && dev->settings.expiration_time >=0)      {        gettimeofday (&time, NULL); -      if ((time.tv_sec - cache->last_calibration > 60 * 60) +      if ((time.tv_sec - cache->last_calibration > dev->settings.expiration_time*60)            && (dev->model->is_sheetfed == SANE_FALSE)            && (dev->settings.scan_method == SCAN_METHOD_FLATBED))          { -          DBG (DBG_proc, -               "sanei_genesys_is_compatible_calibration: expired entry, non compatible cache\n"); +          DBG (DBG_proc, "%s: expired entry, non compatible cache\n", __FUNCTION__);            return SANE_STATUS_UNSUPPORTED;          }      } | 
