kopia lustrzana https://gitlab.com/sane-project/backends
If Adf, acquisition of the next page, if it exists.
rodzic
cf94e585f5
commit
54136b8deb
|
@ -617,6 +617,7 @@ sane_cancel(SANE_Handle h)
|
|||
fclose(handler->scanner->tmp);
|
||||
handler->scanner->tmp = NULL;
|
||||
}
|
||||
handler->scanner- = SANE_FALSE;
|
||||
handler->cancel = SANE_TRUE;
|
||||
escl_scanner(handler->name, handler->result);
|
||||
}
|
||||
|
@ -755,70 +756,72 @@ sane_start(SANE_Handle h)
|
|||
int bps = 0;
|
||||
|
||||
if (handler->name == NULL)
|
||||
return (SANE_STATUS_INVAL);
|
||||
return (SANE_STATUS_INVAL);
|
||||
handler->cancel = SANE_FALSE;
|
||||
handler->write_scan_data = SANE_FALSE;
|
||||
handler->decompress_scan_data = SANE_FALSE;
|
||||
handler->end_read = SANE_FALSE;
|
||||
if(handler->scanner->caps[handler->scanner->source].default_color)
|
||||
free(handler->scanner->caps[handler->scanner->source].default_color);
|
||||
if (handler->val[OPT_PREVIEW].w == SANE_TRUE)
|
||||
{
|
||||
int i = 0, val = 9999;;
|
||||
if (handler->val[OPT_GRAY_PREVIEW].w == SANE_TRUE ||
|
||||
!strcasecmp(handler->val[OPT_MODE].s, SANE_VALUE_SCAN_MODE_GRAY))
|
||||
handler->scanner->caps[handler->scanner->source].default_color =
|
||||
strdup("Grayscale8");
|
||||
else
|
||||
handler->scanner->caps[handler->scanner->source].default_color =
|
||||
strdup("RGB24");
|
||||
if (!handler->scanner->caps[handler->scanner->source].default_color) {
|
||||
DBG (10, "Default Color allocation failure.\n");
|
||||
return (SANE_STATUS_NO_MEM);
|
||||
}
|
||||
for (i = 1; i < handler->scanner->caps[handler->scanner->source].SupportedResolutionsSize; i++)
|
||||
if (handler->scanner->work == SANE_FALSE) {
|
||||
if(handler->scanner->caps[handler->scanner->source].default_color)
|
||||
free(handler->scanner->caps[handler->scanner->source].default_color);
|
||||
if (handler->val[OPT_PREVIEW].w == SANE_TRUE)
|
||||
{
|
||||
if (val > handler->scanner->caps[handler->scanner->source].SupportedResolutions[i])
|
||||
val = handler->scanner->caps[handler->scanner->source].SupportedResolutions[i];
|
||||
int i = 0, val = 9999;;
|
||||
if (handler->val[OPT_GRAY_PREVIEW].w == SANE_TRUE ||
|
||||
!strcasecmp(handler->val[OPT_MODE].s, SANE_VALUE_SCAN_MODE_GRAY))
|
||||
handler->scanner->caps[handler->scanner->source].default_color =
|
||||
strdup("Grayscale8");
|
||||
else
|
||||
handler->scanner->caps[handler->scanner->source].default_color =
|
||||
strdup("RGB24");
|
||||
if (!handler->scanner->caps[handler->scanner->source].default_color) {
|
||||
DBG (10, "Default Color allocation failure.\n");
|
||||
return (SANE_STATUS_NO_MEM);
|
||||
}
|
||||
for (i = 1; i < handler->scanner->caps[handler->scanner->source].SupportedResolutionsSize; i++)
|
||||
{
|
||||
if (val > handler->scanner->caps[handler->scanner->source].SupportedResolutions[i])
|
||||
val = handler->scanner->caps[handler->scanner->source].SupportedResolutions[i];
|
||||
}
|
||||
handler->scanner->caps[handler->scanner->source].default_resolution = val;
|
||||
}
|
||||
handler->scanner->caps[handler->scanner->source].default_resolution = val;
|
||||
}
|
||||
else
|
||||
{
|
||||
handler->scanner->caps[handler->scanner->source].default_resolution =
|
||||
handler->val[OPT_RESOLUTION].w;
|
||||
if (!strcasecmp(handler->val[OPT_MODE].s, SANE_VALUE_SCAN_MODE_GRAY))
|
||||
handler->scanner->caps[handler->scanner->source].default_color = strdup("Grayscale8");
|
||||
else if (!strcasecmp(handler->val[OPT_MODE].s, SANE_VALUE_SCAN_MODE_LINEART))
|
||||
handler->scanner->caps[handler->scanner->source].default_color =
|
||||
strdup("BlackAndWhite1");
|
||||
else
|
||||
handler->scanner->caps[handler->scanner->source].default_color =
|
||||
strdup("RGB24");
|
||||
{
|
||||
handler->scanner->caps[handler->scanner->source].default_resolution =
|
||||
handler->val[OPT_RESOLUTION].w;
|
||||
if (!strcasecmp(handler->val[OPT_MODE].s, SANE_VALUE_SCAN_MODE_GRAY))
|
||||
handler->scanner->caps[handler->scanner->source].default_color = strdup("Grayscale8");
|
||||
else if (!strcasecmp(handler->val[OPT_MODE].s, SANE_VALUE_SCAN_MODE_LINEART))
|
||||
handler->scanner->caps[handler->scanner->source].default_color =
|
||||
strdup("BlackAndWhite1");
|
||||
else
|
||||
handler->scanner->caps[handler->scanner->source].default_color =
|
||||
strdup("RGB24");
|
||||
}
|
||||
handler->scanner->caps[handler->scanner->source].height =
|
||||
MM_TO_PIXEL(handler->val[OPT_BR_Y].w, 300.0);
|
||||
handler->scanner->caps[handler->scanner->source].width =
|
||||
MM_TO_PIXEL(handler->val[OPT_BR_X].w, 300.0);;
|
||||
handler->scanner->caps[handler->scanner->source].pos_x =
|
||||
MM_TO_PIXEL(handler->val[OPT_TL_X].w, 300.0);
|
||||
handler->scanner->caps[handler->scanner->source].pos_y =
|
||||
MM_TO_PIXEL(handler->val[OPT_TL_Y].w, 300.0);
|
||||
DBG(10, "Calculate Size Image [%dx%d|%dx%d]\n",
|
||||
handler->scanner->caps[handler->scanner->source].pos_x,
|
||||
handler->scanner->caps[handler->scanner->source].pos_y,
|
||||
handler->scanner->caps[handler->scanner->source].height,
|
||||
handler->scanner->caps[handler->scanner->source].width);
|
||||
if (!handler->scanner->caps[handler->scanner->source].default_color) {
|
||||
DBG (10, "Default Color allocation failure.\n");
|
||||
return (SANE_STATUS_NO_MEM);
|
||||
}
|
||||
handler->result = escl_newjob(handler->scanner, handler->name, &status);
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
return (status);
|
||||
}
|
||||
handler->scanner->caps[handler->scanner->source].height =
|
||||
MM_TO_PIXEL(handler->val[OPT_BR_Y].w, 300.0);
|
||||
handler->scanner->caps[handler->scanner->source].width =
|
||||
MM_TO_PIXEL(handler->val[OPT_BR_X].w, 300.0);;
|
||||
handler->scanner->caps[handler->scanner->source].pos_x =
|
||||
MM_TO_PIXEL(handler->val[OPT_TL_X].w, 300.0);
|
||||
handler->scanner->caps[handler->scanner->source].pos_y =
|
||||
MM_TO_PIXEL(handler->val[OPT_TL_Y].w, 300.0);
|
||||
DBG(10, "Calculate Size Image [%dx%d|%dx%d]\n",
|
||||
handler->scanner->caps[handler->scanner->source].pos_x,
|
||||
handler->scanner->caps[handler->scanner->source].pos_y,
|
||||
handler->scanner->caps[handler->scanner->source].height,
|
||||
handler->scanner->caps[handler->scanner->source].width);
|
||||
if (!handler->scanner->caps[handler->scanner->source].default_color) {
|
||||
DBG (10, "Default Color allocation failure.\n");
|
||||
return (SANE_STATUS_NO_MEM);
|
||||
}
|
||||
handler->result = escl_newjob(handler->scanner, handler->name, &status);
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
return (status);
|
||||
status = escl_scan(handler->scanner, handler->name, handler->result);
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
return (status);
|
||||
return (status);
|
||||
if (!strcmp(handler->scanner->caps[handler->scanner->source].default_format, "image/jpeg"))
|
||||
{
|
||||
status = get_JPEG_data(handler->scanner, &w, &he, &bps);
|
||||
|
@ -836,21 +839,27 @@ sane_start(SANE_Handle h)
|
|||
status = get_PDF_data(handler->scanner, &w, &he, &bps);
|
||||
}
|
||||
else {
|
||||
DBG(10, "Unknow image format\n");
|
||||
return SANE_STATUS_INVAL;
|
||||
DBG(10, "Unknow image format\n");
|
||||
return SANE_STATUS_INVAL;
|
||||
}
|
||||
|
||||
DBG(10, "2-Size Image [%dx%d|%dx%d]\n", 0, 0, w, he);
|
||||
if (handler->scanner->source > 0)
|
||||
escl_scanner(handler->name, handler->result);
|
||||
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
return (status);
|
||||
return (status);
|
||||
handler->ps.depth = 8;
|
||||
handler->ps.pixels_per_line = w;
|
||||
handler->ps.lines = he;
|
||||
handler->ps.bytes_per_line = w * bps;
|
||||
handler->ps.last_frame = SANE_TRUE;
|
||||
if (handler->scanner->source != PLATEN) {
|
||||
SANE_Bool next_page = (SANE_STATUS_GOOD == escl_status(handler->name) ? SANE_TRUE : SANE_FALSE);
|
||||
handler->scanner->work == next_page;
|
||||
handler->ps.last_frame = next_page;
|
||||
}
|
||||
else {
|
||||
handler->scanner->work == SANE_FALSE;
|
||||
handler->ps.last_frame = SANE_FALSE;
|
||||
}
|
||||
handler->ps.format = SANE_FRAME_RGB;
|
||||
DBG(10, "Real Size Image [%dx%d|%dx%d]\n", 0, 0, w, he);
|
||||
return (status);
|
||||
|
@ -875,7 +884,7 @@ sane_get_parameters(SANE_Handle h, SANE_Parameters *p)
|
|||
return (status);
|
||||
if (p != NULL) {
|
||||
p->depth = 8;
|
||||
p->last_frame = SANE_TRUE;
|
||||
p->last_frame = handler->ps.last_frame;
|
||||
p->format = SANE_FRAME_RGB;
|
||||
p->pixels_per_line = handler->ps.pixels_per_line;
|
||||
p->lines = handler->ps.lines;
|
||||
|
|
|
@ -137,6 +137,7 @@ typedef struct capabilities
|
|||
unsigned char *img_data;
|
||||
long img_size;
|
||||
long img_read;
|
||||
SANE_Bool work;
|
||||
} capabilities_t;
|
||||
|
||||
typedef struct {
|
||||
|
|
|
@ -94,19 +94,50 @@ static void
|
|||
print_xml_s(xmlNode *node, SANE_Status *status)
|
||||
{
|
||||
int x = 0;
|
||||
SANE_Status platen_status;
|
||||
SANE_Status adf_status;
|
||||
|
||||
while (node) {
|
||||
if (node->type == XML_ELEMENT_NODE) {
|
||||
if (find_nodes_s(node)) {
|
||||
if (strcmp((const char *)node->name, "State") == 0)
|
||||
x = 1;
|
||||
if (strcmp((const char *)node->name, "State") == 0) {
|
||||
if (!strcmp(state, "Idle")) {
|
||||
platen_status = SANE_STATUS_GOOD;
|
||||
} else if (!strcmp(state, "Processing")) {
|
||||
platen_status = SANE_STATUS_DEVICE_BUSY;
|
||||
} else {
|
||||
platen_status = SANE_STATUS_UNSUPPORTED;
|
||||
}
|
||||
}
|
||||
else if (strcmp((const char *)node->name, "AdfState") == 0) {
|
||||
if (!strcmp(state, "ScannerAdfLoaded")) {
|
||||
adf_status = SANE_STATUS_GOOD;
|
||||
} else if (!strcmp(state, "ScannerAdfJam")) {
|
||||
adf_status = SANE_STATUS_JAMMED;
|
||||
} else if (!strcmp(state, "ScannerAdfDoorOpen")) {
|
||||
adf_status = SANE_STATUS_COVER_OPEN;
|
||||
} else if (!strcmp(state, "ScannerAdfProcessing")) {
|
||||
adf_status = SANE_STATUS_NO_DOCS;
|
||||
} else if (!strcmp(state, "ScannerAdfEmpty")) {
|
||||
adf_status = SANE_STATUS_NO_DOCS;
|
||||
} else {
|
||||
adf_status = SANE_STATUS_UNSUPPORTED;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (x == 1 && strcmp((const char *)xmlNodeGetContent(node), "Idle") == 0)
|
||||
*status = SANE_STATUS_GOOD;
|
||||
}
|
||||
print_xml_s(node->children, status);
|
||||
node = node->next;
|
||||
}
|
||||
/* Decode Job status */
|
||||
if (platen_status != SANE_STATUS_GOOD &&
|
||||
platen_status != SANE_STATUS_UNSUPPORTED) {
|
||||
*status = platen_status;
|
||||
} else if (dev->opt.src == OPT_SOURCE_PLATEN) {
|
||||
*status = platen_status;
|
||||
} else {
|
||||
*status = adf_status;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Ładowanie…
Reference in New Issue