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 FBF_STR SANE_I18N("Flatbed")
|
||||||
#define TPU_STR SANE_I18N("Transparency Unit")
|
#define TPU_STR SANE_I18N("Transparency Unit")
|
||||||
|
#define TP2_STR SANE_I18N("TPU8x10")
|
||||||
#define ADF_STR SANE_I18N("Automatic Document Feeder")
|
#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);
|
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
|
void
|
||||||
e2_add_depth(Epson_Device * dev, SANE_Word depth)
|
e2_add_depth(Epson_Device * dev, SANE_Word depth)
|
||||||
{
|
{
|
||||||
|
@ -681,19 +703,6 @@ e2_discover_capabilities(Epson_Scanner *s)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TPU */
|
/* 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) {
|
if (le32atoh(&buf[36]) > 0 && !dev->TPU) {
|
||||||
e2_set_tpu_area(s,
|
e2_set_tpu_area(s,
|
||||||
le32atoh(&buf[36]),
|
le32atoh(&buf[36]),
|
||||||
|
@ -703,6 +712,18 @@ e2_discover_capabilities(Epson_Scanner *s)
|
||||||
dev->TPU = SANE_TRUE;
|
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 */
|
*source_list_add = NULL; /* add end marker to source list */
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
@ -890,6 +911,16 @@ e2_set_extended_scanning_parameters(Epson_Scanner * s)
|
||||||
if (s->hw->use_extension && s->hw->TPU2)
|
if (s->hw->use_extension && s->hw->TPU2)
|
||||||
extensionCtrl = 5;
|
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 */
|
/* ESC e */
|
||||||
buf[26] = extensionCtrl;
|
buf[26] = extensionCtrl;
|
||||||
|
|
||||||
|
|
|
@ -113,6 +113,7 @@ static const SANE_String_Const adf_mode_list[] = {
|
||||||
|
|
||||||
#define FBF_STR SANE_I18N("Flatbed")
|
#define FBF_STR SANE_I18N("Flatbed")
|
||||||
#define TPU_STR SANE_I18N("Transparency Unit")
|
#define TPU_STR SANE_I18N("Transparency Unit")
|
||||||
|
#define TPU_STR2 SANE_I18N("TPU8x10")
|
||||||
#define ADF_STR SANE_I18N("Automatic Document Feeder")
|
#define ADF_STR SANE_I18N("Automatic Document Feeder")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -966,7 +967,7 @@ init_options(Epson_Scanner *s)
|
||||||
s->val[OPT_MODE].w = 0; /* Binary */
|
s->val[OPT_MODE].w = 0; /* Binary */
|
||||||
|
|
||||||
/* disable infrared on unsupported scanners */
|
/* 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;
|
mode_list[MODE_INFRARED] = NULL;
|
||||||
|
|
||||||
/* bit depth */
|
/* 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,
|
DBG(1, "adf activated (%d %d)\n", s->hw->use_extension,
|
||||||
s->hw->duplex);
|
s->hw->duplex);
|
||||||
|
|
||||||
} else if (strcmp(TPU_STR, value) == 0) {
|
} else if (strcmp(TPU_STR, value) == 0 || strcmp(TPU_STR2, value) == 0) {
|
||||||
s->hw->x_range = &s->hw->tpu_x_range;
|
if (strcmp(TPU_STR, value) == 0) {
|
||||||
s->hw->y_range = &s->hw->tpu_y_range;
|
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;
|
s->hw->use_extension = SANE_TRUE;
|
||||||
|
|
||||||
/* enable film type option only if the scanner supports it */
|
/* enable film type option only if the scanner supports it */
|
||||||
|
|
|
@ -315,15 +315,17 @@ struct Epson_Device
|
||||||
SANE_Int level;
|
SANE_Int level;
|
||||||
SANE_Range dpi_range;
|
SANE_Range dpi_range;
|
||||||
|
|
||||||
SANE_Range *x_range; /* x range w/out extension */
|
SANE_Range *x_range; /* x range w/out extension */
|
||||||
SANE_Range *y_range; /* y range w/out extension */
|
SANE_Range *y_range; /* y range w/out extension */
|
||||||
|
|
||||||
SANE_Range fbf_x_range; /* flattbed x range */
|
SANE_Range fbf_x_range; /* flattbed x range */
|
||||||
SANE_Range fbf_y_range; /* flattbed y range */
|
SANE_Range fbf_y_range; /* flattbed y range */
|
||||||
SANE_Range adf_x_range; /* autom. document feeder x range */
|
SANE_Range adf_x_range; /* autom. document feeder x range */
|
||||||
SANE_Range adf_y_range; /* autom. document feeder y range */
|
SANE_Range adf_y_range; /* autom. document feeder y range */
|
||||||
SANE_Range tpu_x_range; /* transparency unit x range */
|
SANE_Range tpu_x_range; /* transparency unit x range */
|
||||||
SANE_Range tpu_y_range; /* transparency unit y 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;
|
Epson_Connection_Type connection;
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue