diff --git a/backend/epson2-ops.c b/backend/epson2-ops.c index b8b2aed26..52cef41a6 100644 --- a/backend/epson2-ops.c +++ b/backend/epson2-ops.c @@ -100,6 +100,7 @@ extern struct mode_param mode_params[]; #define FBF_STR SANE_I18N("Flatbed") #define TPU_STR SANE_I18N("Transparency Unit") +#define TP2_STR SANE_I18N("TPU8x10") #define ADF_STR SANE_I18N("Automatic Document Feeder") /* @@ -449,6 +450,27 @@ e2_set_tpu_area(struct Epson_Scanner *s, int x, int y, int unit) SANE_UNFIX(dev->tpu_y_range.max), unit); } +void +e2_set_tpu2_area(struct Epson_Scanner *s, int x, int y, int unit) +{ + struct Epson_Device *dev = s->hw; + + dev->tpu2_x_range.min = 0; + dev->tpu2_x_range.max = SANE_FIX(x * MM_PER_INCH / unit); + dev->tpu2_x_range.quant = 0; + + dev->tpu2_y_range.min = 0; + dev->tpu2_y_range.max = SANE_FIX(y * MM_PER_INCH / unit); + dev->tpu2_y_range.quant = 0; + + DBG(5, "%s: %f,%f %f,%f %d [mm]\n", + __func__, + SANE_UNFIX(dev->tpu2_x_range.min), + SANE_UNFIX(dev->tpu2_y_range.min), + SANE_UNFIX(dev->tpu2_x_range.max), + SANE_UNFIX(dev->tpu2_y_range.max), unit); +} + void e2_add_depth(Epson_Device * dev, SANE_Word depth) { @@ -681,19 +703,6 @@ e2_discover_capabilities(Epson_Scanner *s) } /* TPU */ - if (e2_model(s, "GT-X800") || e2_model(s, "GT-X900")) { - if (le32atoh(&buf[68]) > 0 && !dev->TPU) { - e2_set_tpu_area(s, - le32atoh(&buf[68]), - le32atoh(&buf[72]), - dev->optical_res); - - *source_list_add++ = TPU_STR; - dev->TPU = SANE_TRUE; - dev->TPU2 = SANE_TRUE; - } - } - if (le32atoh(&buf[36]) > 0 && !dev->TPU) { e2_set_tpu_area(s, le32atoh(&buf[36]), @@ -703,6 +712,18 @@ e2_discover_capabilities(Epson_Scanner *s) dev->TPU = SANE_TRUE; } + /* TPU2 */ + if (e2_model(s, "GT-X800") || e2_model(s, "GT-X900")) { + if (le32atoh(&buf[68]) > 0 ) { + e2_set_tpu2_area(s, + le32atoh(&buf[68]), + le32atoh(&buf[72]), + dev->optical_res); + + *source_list_add++ = TP2_STR; + } + } + *source_list_add = NULL; /* add end marker to source list */ } else { @@ -890,6 +911,16 @@ e2_set_extended_scanning_parameters(Epson_Scanner * s) if (s->hw->use_extension && s->hw->TPU2) extensionCtrl = 5; + if (s->val[OPT_MODE].w == MODE_INFRARED) + /* only infrared in TPU mode (NOT in TPU2 or flatbeth) + * XXX investigate this ... only tested on GT-X800 + */ + + if (extensionCtrl == 1) /* test for TPU */ + extensionCtrl = 3; + else + return SANE_STATUS_UNSUPPORTED; + /* ESC e */ buf[26] = extensionCtrl; diff --git a/backend/epson2.c b/backend/epson2.c index 276a5cada..555c44a02 100644 --- a/backend/epson2.c +++ b/backend/epson2.c @@ -113,6 +113,7 @@ static const SANE_String_Const adf_mode_list[] = { #define FBF_STR SANE_I18N("Flatbed") #define TPU_STR SANE_I18N("Transparency Unit") +#define TPU_STR2 SANE_I18N("TPU8x10") #define ADF_STR SANE_I18N("Automatic Document Feeder") /* @@ -966,7 +967,7 @@ init_options(Epson_Scanner *s) s->val[OPT_MODE].w = 0; /* Binary */ /* disable infrared on unsupported scanners */ - if (!e2_model(s, "GT-X800") && !e2_model(s, "GT-X700")) + if (!e2_model(s, "GT-X800") && !e2_model(s, "GT-X700") && !e2_model(s, "GT-X900")) mode_list[MODE_INFRARED] = NULL; /* bit depth */ @@ -1742,9 +1743,17 @@ change_source(Epson_Scanner *s, SANE_Int optindex, char *value) DBG(1, "adf activated (%d %d)\n", s->hw->use_extension, s->hw->duplex); - } else if (strcmp(TPU_STR, value) == 0) { - s->hw->x_range = &s->hw->tpu_x_range; - s->hw->y_range = &s->hw->tpu_y_range; + } else if (strcmp(TPU_STR, value) == 0 || strcmp(TPU_STR2, value) == 0) { + if (strcmp(TPU_STR, value) == 0) { + s->hw->x_range = &s->hw->tpu_x_range; + s->hw->y_range = &s->hw->tpu_y_range; + s->hw->TPU2 = SANE_FALSE; + } + if (strcmp(TPU_STR2, value) == 0) { + s->hw->x_range = &s->hw->tpu2_x_range; + s->hw->y_range = &s->hw->tpu2_y_range; + s->hw->TPU2 = SANE_TRUE; + } s->hw->use_extension = SANE_TRUE; /* enable film type option only if the scanner supports it */ diff --git a/backend/epson2.h b/backend/epson2.h index 807251a16..bb6c9e0c6 100644 --- a/backend/epson2.h +++ b/backend/epson2.h @@ -315,15 +315,17 @@ struct Epson_Device SANE_Int level; SANE_Range dpi_range; - SANE_Range *x_range; /* x range w/out extension */ - SANE_Range *y_range; /* y range w/out extension */ + SANE_Range *x_range; /* x range w/out extension */ + SANE_Range *y_range; /* y range w/out extension */ - SANE_Range fbf_x_range; /* flattbed x range */ - SANE_Range fbf_y_range; /* flattbed y range */ - SANE_Range adf_x_range; /* autom. document feeder x range */ - SANE_Range adf_y_range; /* autom. document feeder y range */ - SANE_Range tpu_x_range; /* transparency unit x range */ - SANE_Range tpu_y_range; /* transparency unit y range */ + SANE_Range fbf_x_range; /* flattbed x range */ + SANE_Range fbf_y_range; /* flattbed y range */ + SANE_Range adf_x_range; /* autom. document feeder x range */ + SANE_Range adf_y_range; /* autom. document feeder y range */ + SANE_Range tpu_x_range; /* transparency unit x range */ + SANE_Range tpu_y_range; /* transparency unit y range */ + SANE_Range tpu2_x_range; /* transparency unit 2 x range */ + SANE_Range tpu2_y_range; /* transparency unit 2 y range */ Epson_Connection_Type connection;