handle multiple pages scan session from adf

- start first page: step1(), start_session() and select_source()
- between pages: step1()
- after last page: abort_session()
merge-requests/1/head
Rolf Bensch 2013-02-11 19:57:20 +01:00
rodzic 22a7163633
commit d2cfbda4c0
2 zmienionych plików z 23 dodań i 7 usunięć

Wyświetl plik

@ -810,6 +810,7 @@ pixma_scan (pixma_t * s, pixma_scan_param_t * sp)
sp->xdpi, sp->ydpi, sp->x, sp->y, sp->w, sp->h);
pixma_dbg (3, " gamma_table=%p source=%d\n", sp->gamma_table, sp->source);
pixma_dbg (3, " threshold=%d threshold_curve=%d\n", sp->threshold, sp->threshold_curve);
pixma_dbg (3, " ADF page count: %d\n", sp->adf_pageid);
#endif
s->param = sp;

Wyświetl plik

@ -534,12 +534,20 @@ iclass_scan (pixma_t * s)
mf->blk_len = 0;
error = step1 (s);
if (error >= 0)
error = start_session (s);
if (error >= 0)
mf->state = state_scanning;
if (error >= 0)
error = select_source (s);
if (error >= 0 && (s->param->adf_pageid == 0 || mf->generation == 1))
{ /* single sheet or first sheet from ADF */
PDBG (pixma_dbg (3, "*iclass_scan***** start scanning *****\n"));
error = start_session (s);
if (error >= 0)
mf->state = state_scanning;
if (error >= 0)
error = select_source (s);
}
else if (error >= 0)
{ /* next sheet from ADF */
PDBG (pixma_dbg (3, "*iclass_scan***** scan next sheet from ADF *****\n"));
mf->state = state_scanning;
}
if (error >= 0)
error = send_scan_param (s);
if (error >= 0)
@ -676,10 +684,17 @@ iclass_finish_scan (pixma_t * s)
activate (s, 0);
query_status (s);
}
if (mf->last_block == 0x28 || ((s->cfg->pid==MF4410_PID || s->cfg->pid == MF4550_PID) && mf->last_block==0x38))
/* 0x38 = last block and ADF empty
* 0x28 = last block and Paper in ADF */
if (mf->last_block==0x38 /* ADF empty */
|| (mf->generation == 1 && mf->last_block == 0x28)) /* generation 1 scanner or Paper in ADF */
{
PDBG (pixma_dbg (3, "*iclass_finish_scan***** abort session *****\n"));
abort_session (s);
}
else
PDBG (pixma_dbg (3, "*iclass_finish_scan***** wait for next page from ADF *****\n"));
mf->state = state_idle;
/* fall through */
case state_idle: