epson2: handle TPU2 as a separate transparency unit (Claus <claus@egehuset.dk>)

merge-requests/1/head
Alessandro Zummo 2011-12-25 02:43:14 +01:00
rodzic 5a48db9490
commit 909aa82085
3 zmienionych plików z 67 dodań i 25 usunięć

Wyświetl plik

@ -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;

Wyświetl plik

@ -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 */

Wyświetl plik

@ -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;