kopia lustrzana https://gitlab.com/sane-project/backends
epson2: handle TPU2 as a separate transparency unit (Claus <claus@egehuset.dk>)
rodzic
5a48db9490
commit
909aa82085
|
@ -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;
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue