Lines Matching refs:scan

88  * gain nothing in usable scan area (you only scan more
230 /* Raw scan data buffer */
305 calib (UMAX_Handle * scan)
310 CHK (get_pixels (scan, opc5, opb8, opd2, ope, 24, 0, buff));
314 CHK (get_pixels (scan, opc5, opb8, opd2, ope, 24, 0, buff));
318 CHK (get_pixels (scan, opc6, opb9, opd2, ope, 0x200, 1, buff));
323 CHK (get_pixels (scan, opc7, opb10, opd2, ope, 5300, 1, buff));
327 CHK (get_pixels (scan, opc7, opb10, opd2, ope, 5300, 0, buff));
340 xxxops (UMAX_Handle * scan)
346 CHK (sanei_pv8630_write_byte (scan->fd, PV8630_RMODE, 0x02));
348 CHK (sanei_pv8630_write_byte (scan->fd, PV8630_UNKNOWN, 0x0E));
349 CHK (sanei_pv8630_write_byte (scan->fd, PV8630_RDATA, 0x40));
350 CHK (sanei_pv8630_write_byte (scan->fd, PV8630_UNKNOWN, 0x06));
351 CHK (sanei_pv8630_xpect_byte (scan->fd, PV8630_RSTATUS, 0x38, 0xFF));
353 CHK (sanei_pv8630_write_byte (scan->fd, PV8630_UNKNOWN, 0x07));
354 CHK (sanei_pv8630_xpect_byte (scan->fd, PV8630_RSTATUS, 0x38, 0xFF));
356 CHK (sanei_pv8630_write_byte (scan->fd, PV8630_UNKNOWN, 0x04));
357 CHK (sanei_pv8630_xpect_byte (scan->fd, PV8630_RSTATUS, 0xF8, 0xFF));
359 CHK (sanei_pv8630_write_byte (scan->fd, PV8630_UNKNOWN, 0x05));
360 CHK (sanei_pv8630_xpect_byte (scan->fd, PV8630_UNKNOWN, 0x05, 0xFF));
362 CHK (sanei_pv8630_write_byte (scan->fd, PV8630_UNKNOWN, 0x04));
364 CHK (sanei_pv8630_write_byte (scan->fd, PV8630_RMODE, 0x1E));
374 usync (UMAX_Handle * scan, UMAX_Cmd cmd, int len)
387 CHK (sanei_pv8630_flush_buffer (scan->fd));
388 CHK (sanei_pv8630_prep_bulkwrite (scan->fd, nb));
389 CHK (sanei_pv8630_bulkwrite (scan->fd, buf, &nb));
392 (scan->fd, PV8630_RSTATUS, UMAX_OK, UMAX_STATUS_MASK, 20));
400 CHK (sanei_pv8630_flush_buffer (scan->fd));
401 CHK (sanei_pv8630_prep_bulkwrite (scan->fd, nb));
402 CHK (sanei_pv8630_bulkwrite (scan->fd, buf, &nb));
404 CHK (sanei_pv8630_read_byte (scan->fd, PV8630_RDATA, &s0));
405 CHK (sanei_pv8630_read_byte (scan->fd, PV8630_RSTATUS, &s4));
444 cwrite (UMAX_Handle * scan, UMAX_Cmd cmd, size_t len, const unsigned char *data,
455 CHK (usync (scan, cmd | CMD_WRITE, len));
473 (scan->fd, PV8630_RSTATUS, UMAX_OK, UMAX_STATUS_MASK, 20));
475 CHK (sanei_pv8630_flush_buffer (scan->fd));
476 CHK (sanei_pv8630_prep_bulkwrite (scan->fd, len));
477 CHK (sanei_pv8630_bulkwrite (scan->fd, escaped, &len));
479 CHK (sanei_pv8630_read_byte (scan->fd, PV8630_RSTATUS, &s4));
480 CHK (sanei_pv8630_read_byte (scan->fd, PV8630_RDATA, &s0));
493 cread (UMAX_Handle * scan, UMAX_Cmd cmd, size_t len, unsigned char *data,
501 CHK (usync (scan, cmd | CMD_READ, len));
506 (scan->fd, PV8630_RSTATUS, UMAX_OK_WITH_MOTOR, UMAX_STATUS_MASK,
514 CHK (sanei_pv8630_prep_bulkread (scan->fd, n));
515 CHK (sanei_pv8630_bulkread (scan->fd, data, &n));
526 CHK (sanei_pv8630_read_byte (scan->fd, PV8630_RSTATUS, &s4));
527 CHK (sanei_pv8630_read_byte (scan->fd, PV8630_RDATA, &s0));
542 cwritev (UMAX_Handle * scan, UMAX_Cmd cmd, size_t len, const unsigned char *data,
550 CHK (cwrite (scan, cmd, len, data, s));
556 CHK (cread (scan, cmd, len, buf, NULL));
569 csend (UMAX_Handle * scan, UMAX_Cmd cmd)
573 return usync (scan, cmd, 0);
579 cwritev_opc1_lamp_ctrl (UMAX_Handle * scan, UMAX_Lamp_State state)
589 return cwritev (scan, CMD_2, 16, opc1, NULL);
596 cwritev_opb3_restore (UMAX_Handle * scan)
608 CHK (cwritev (scan, CMD_8, 35, opb3, NULL));
609 CHK (csend (scan, CMD_40));
617 cwritev_opb3_restore_2100U (UMAX_Handle * scan)
629 CHK (cwritev (scan, CMD_8, 36, opb3, NULL));
630 CHK (csend (scan, CMD_40));
639 gamma information (which is used for the calibration scan), returns the
645 umaxinit (UMAX_Handle * scan)
689 CHK (csend (scan, CMD_0));
690 CHK (xxxops (scan));
692 CHK (cwritev (scan, CMD_8, 34, opb, &s));
693 CHK (cread (scan, CMD_8, 35, opbx, &s));
695 CHK (cwritev (scan, CMD_8, 35, opb1, &s));
697 CHK (cread (scan, CMD_2, 0, NULL, &s));
717 res = cwritev (scan, CMD_4, p - ramp, ramp, &s);
722 CHK (cwritev (scan, CMD_8, 35, opb1, &s));
724 CHK (cread (scan, CMD_2, 0, NULL, &s));
738 res = cwrite (scan, CMD_4, p - ramp, ramp, &s);
743 CHK (cwritev (scan, CMD_8, 35, opb2, &s));
745 CHK (cread (scan, CMD_2, 0, NULL, &s));
759 res = cwritev (scan, CMD_4, p - ramp, ramp, &s);
764 CHK (cwritev (scan, CMD_8, 35, opb1, &s));
766 CHK (cwritev (scan, CMD_2, 16, opc, NULL));
767 CHK (cwritev (scan, CMD_1, 8, opd, NULL));
768 CHK (csend (scan, CMD_0));
769 CHK (cread (scan, CMD_2, 0, NULL, &s));
776 CHK (cwritev_opc1_lamp_ctrl (scan, UMAX_LAMP_ON));
777 CHK (cwritev_opb3_restore (scan));
781 CHK (cread (scan, CMD_2, 0, NULL, &s));
792 CHK (csend (scan, CMD_0));
798 CHK (xxxops (scan));
799 CHK (csend (scan, CMD_0));
800 CHK (xxxops (scan));
802 CHK (cwritev (scan, CMD_8, 34, opb4, &s));
803 CHK (cread (scan, CMD_8, 35, opbx, &s));
804 CHK (cread (scan, CMD_2, 16, opcx, &s));
806 CHK (cwritev (scan, CMD_2, 16, opc, NULL));
807 CHK (cwritev (scan, CMD_1, 8, opd, NULL));
808 CHK (csend (scan, CMD_0));
809 CHK (cread (scan, CMD_2, 0, NULL, &s));
819 umaxinit_2100U (UMAX_Handle * scan)
831 CHK (xxxops (scan));
832 CHK (csend (scan, CMD_0));
836 cwritev_opc1_lamp_ctrl (scan, UMAX_LAMP_ON);
838 CHK (cread (scan, CMD_8, 36, opx, &s));
839 CHK (cread (scan, CMD_2, 16, opy, &s));
840 CHK (csend (scan, CMD_0));
841 CHK (cread (scan, CMD_2, 0, NULL, &s));
842 CHK (csend (scan, CMD_0));
851 move (UMAX_Handle * scan, int distance, UMAX_Speed fine)
886 scan->scanner_ypos);
909 scan->scanner_ypos +=
911 scan->scanner_ypos = (scan->scanner_ypos + (rev ? 0 : 3)) & ~3;
913 CHK (cwrite (scan, CMD_2, 16, opc4, &s));
914 CHK (cwrite (scan, CMD_8, 35, rev ? opb7 : opb5, &s));
916 CHK (cread (scan, CMD_2, 0, NULL, &s));
919 CHK (csend (scan, CMD_0));
921 CHK (cwrite (scan, CMD_4, 3, ope2, &s))
923 CHK (cwrite (scan, CMD_4, 8, ope, &s));
926 CHK (csend (scan, CMD_40));
928 CHK (cread (scan, CMD_2, 0, NULL, &s));
932 CHK (cread (scan, CMD_2, 0, NULL, &s));
935 CHK (cread (scan, CMD_4, 512, buf, &s));
947 move_2100U (UMAX_Handle * scan, int distance, UMAX_Speed fine)
983 scan->scanner_ypos);
1006 scan->scanner_ypos +=
1008 scan->scanner_ypos = (scan->scanner_ypos + (rev ? 0 : 3)) & ~3;
1010 CHK (cwrite (scan, CMD_2, 16, opc4, &s));
1011 CHK (cwrite (scan, CMD_8, 36, rev ? opb7 : opb5, &s));
1013 CHK (cread (scan, CMD_2, 0, NULL, &s));
1016 CHK (csend (scan, CMD_0));
1019 CHK (cwrite (scan, CMD_4, 3, ope2, &s))
1021 CHK (cwrite (scan, CMD_4, 8, ope, &s));
1023 CHK (csend (scan, CMD_40));
1025 CHK (cread (scan, CMD_2, 0, NULL, &s));
1029 CHK (cread (scan, CMD_2, 0, NULL, &s));
1032 CHK (cread (scan, CMD_4, 512, buf, &s));
1043 get_pixels (UMAX_Handle * scan, unsigned char *op2, unsigned char *op8,
1053 CHK (csend (scan, CMD_0));
1055 CHK (cwrite (scan, CMD_2, 16, op2, &s));
1056 CHK (cwrite (scan, CMD_8, 35, op8, &s));
1057 CHK (cwrite (scan, CMD_1, 8, op1, &s));
1058 CHK (cread (scan, CMD_2, 0, NULL, &s));
1061 CHK (csend (scan, CMD_0));
1063 CHK (cwrite (scan, CMD_4, 8, op4, &s));
1064 CHK (csend (scan, CMD_40));
1065 CHK (cread (scan, CMD_2, 0, NULL, &s));
1067 CHK (cread (scan, CMD_2, 0, NULL, &s));
1069 CHK (cread (scan, CMD_4, len, buf, &s));
1077 get_pixels_2100U (UMAX_Handle * scan, unsigned char *op2, unsigned char *op8,
1086 CHK (cwrite (scan, CMD_2, 16, op2, &s));
1087 CHK (cwrite (scan, CMD_8, 36, op8, &s));
1090 CHK (cwritev (scan, CMD_1, 8, op1, &s))
1092 CHK (cwrite (scan, CMD_1, 8, op1, &s));
1094 CHK (cread (scan, CMD_2, 0, NULL, &s));
1097 CHK (csend (scan, CMD_0));
1099 CHK (cwrite (scan, CMD_4, 8, op4, &s));
1100 CHK (csend (scan, CMD_40));
1101 CHK (cread (scan, CMD_2, 0, NULL, &s));
1103 CHK (cread (scan, CMD_2, 0, NULL, &s));
1105 CHK (cread (scan, CMD_4, len, buf, &s));
1151 find_zero (UMAX_Handle * scan)
1183 CHK (csend (scan, CMD_0));
1184 CHK (get_pixels (scan, opc3, opb6, opd1, ope1, 54000, 1, img));
1197 scan->scanner_yorg = scan->scanner_ypos + s + 64;
1198 scan->scanner_ypos += 180 + 3;
1199 scan->scanner_ypos &= ~3;
1209 find_zero_2100U (UMAX_Handle * scan)
1241 CHK (csend (scan, CMD_0));
1242 CHK (get_pixels_2100U (scan, opc3, opb6, opd1, ope1, 54000, 1, img));
1255 scan->scanner_yorg = scan->scanner_ypos + s + 64;
1256 scan->scanner_ypos += 180 + 3;
1257 scan->scanner_ypos &= ~3;
1279 get_caldata (UMAX_Handle * scan, int color)
1308 PAD_ARRAY (scan->caldata, 16070);
1318 memset (scan->caldata, 0, 3 * 5100);
1320 CHK (csend (scan, CMD_0));
1339 /* Do a test scan of the calibration strip (which is located
1342 CHK (get_pixels (scan, opc9, opb11, opd4, ope, l, 0, p));
1353 scan->scanner_ypos += (h + 4) * 2 + 3;
1354 scan->scanner_ypos &= ~3;
1373 scan->caldata[x + x0] = gn;
1379 scan->caldata[i + 3 * 5100 + 0] = i;
1384 scan->caldata[i + 3 * 5100 + 256] = i;
1389 scan->caldata[i + 3 * 5100 + 512] = i;
1393 CHK_ARRAY (scan->caldata, 16070);
1412 get_caldata_2100U (UMAX_Handle * scan, int color)
1472 PAD_ARRAY (scan->caldata, 16070);
1482 memset (scan->caldata, 0, 3 * 5100);
1484 CHK (csend (scan, CMD_0));
1485 CHK (csend (scan, CMD_0));
1518 /* Do a test scan of the calibration strip (which is located
1520 CHK (get_pixels_2100U (scan, opc9, opb11, opd4, ope, l, 0, p));
1531 scan->scanner_ypos += (h + 4) * 2 + 3;
1532 scan->scanner_ypos &= ~3;
1555 scan->caldata[x + x0] = gn;
1561 scan->caldata[i + 3 * 5100 + 0] = ggamma[i];
1566 scan->caldata[i + 3 * 5100 + 256] = ggamma[i];
1571 scan->caldata[i + 3 * 5100 + 512] = ggamma[i];
1575 CHK_ARRAY (scan->caldata, 16070);
1581 /* Sends scan user parameters from frontend 1220U */
1584 send_scan_parameters (UMAX_Handle * scan)
1613 scan->xskip + scan->w * scan->xsamp + (scan->xsamp + 1) / 2;
1614 const int ytot = scan->hexp * scan->ysamp + 12;
1616 opbgo[17] = scan->xskip % 256;
1617 opbgo[18] = ((scan->xskip >> 8) & 0xf) + (xend << 4);
1619 opbgo[33] = 0x33 + ((xend & 0x1000) >> 5) + ((scan->xskip & 0x1000) >> 6);
1623 opbgo[23] = scan->color ? 0xc6 : 0x77;
1624 opbgo[24] = scan->color ? 0x5b : 0x4a;
1629 opcgo[1] = ((ytot >> 8) & 0x3f) + (scan->yskip << 6);
1630 opcgo[2] = scan->yskip >> 2;
1631 opcgo[3] = 0x50 + ((scan->yskip >> 10) & 0xf);
1640 opcgo[6] = (scan->ydpi <= 300) ? 0x00 : 0x60;
1641 opcgo[8] = (scan->ydpi <= 300) ? 0x17 : 0x2F;
1642 opcgo[9] = (scan->ydpi >= 300) ? 0x05 : 0x07;
1643 opcgo[14] = (scan->ydpi == 600) ? 0xa4 : 0xac;
1645 opcgo[7] = scan->color ? 0x2F : 0x40;
1646 opcgo[12] = scan->color ? 0x10 : 0x0C;
1647 opcgo[13] = scan->color ? 0x04 : 0xc3;
1649 opdgo[6] = scan->color ? 0x88 : 0x8c;
1650 opdgo[7] = scan->color ? 0x00 : 0x40;
1652 DBG (3, "send_scan_parameters: xskip = %d, yskip = %d\n", scan->xskip,
1653 scan->yskip);
1655 CHK (csend (scan, CMD_0));
1656 CHK (csend (scan, CMD_0));
1657 CHK (cwritev (scan, CMD_2, 16, opcgo, &s));
1658 CHK (cwritev (scan, CMD_8, 35, opbgo, &s));
1659 CHK (cwritev (scan, CMD_1, 8, opdgo, &s));
1660 CHK (cread (scan, CMD_2, 0, NULL, &s));
1666 scan->caldata[16068] = subsamp[scan->xsamp];
1667 scan->caldata[16069] = subsamp[scan->ysamp];
1668 CHK (cwrite (scan, CMD_4, 16070, scan->caldata, &s));
1670 CHK (csend (scan, CMD_40));
1671 CHK (cread (scan, CMD_2, 0, NULL, &s));
1678 /* Sends scan user parameters from frontend 2100U */
1681 send_scan_parameters_2100U (UMAX_Handle * scan)
1711 scan->xskip + scan->w * scan->xsamp + (scan->xsamp + 1) / 2;
1712 const int ytot = scan->hexp * scan->ysamp + 12;
1714 opbgo[17] = scan->xskip % 256;
1715 opbgo[18] = ((scan->xskip >> 8) & 0x0f) + (xend << 4);
1717 opbgo[33] = 0x23 + ((xend & 0x1000) >> 5) + ((scan->xskip & 0x1000) >> 6);
1721 bpl = (scan->color ? 3 : 1) * scan->w * scan->xdpi;
1728 opcgo[1] = ((ytot >> 8) & 0x3f) + (scan->yskip << 6);
1729 opcgo[2] = (scan->yskip >> 2);
1730 opcgo[3] = 0x50 + ((scan->yskip >> 10) & 0x0f);
1733 opcgo[6] = (scan->ydpi <= 300) ? 0x00 : 0x60;
1734 opcgo[8] = (scan->ydpi <= 300) ? 0x17 : 0x2F;
1735 opcgo[9] = (scan->ydpi >= 300) ? 0x05 : 0x07;
1736 opcgo[14] = (scan->ydpi == 600) ? 0xa4 : 0xac;
1739 opcgo[7] = scan->color ? 0x2f : 0x40;
1740 opcgo[10] = scan->color ? 0xb6 : 0xa6;
1741 opcgo[11] = scan->color ? 0x3b : 0x2a;
1742 opcgo[12] = scan->color ? 0x0c : 0x08;
1743 opcgo[13] = scan->color ? 0x03 : 0xc2;
1745 opdgo[6] = scan->color ? 0x8f : 0x86;
1746 opdgo[7] = scan->color ? 0x40 : 0x20;
1748 DBG (3, "send_scan_parameters: xskip = %d, yskip = %d\n", scan->xskip,
1749 scan->yskip);
1751 CHK (csend (scan, CMD_0));
1752 CHK (csend (scan, CMD_0));
1753 CHK (cwritev (scan, CMD_2, 16, opcgo, &s));
1754 CHK (cwritev (scan, CMD_8, 36, opbgo, &s));
1755 CHK (cwritev (scan, CMD_1, 8, opdgo, &s));
1756 CHK (cread (scan, CMD_2, 0, NULL, &s));
1762 scan->caldata[16068] = subsamp[scan->xsamp];
1763 scan->caldata[16069] = subsamp[scan->ysamp];
1764 CHK (cwrite (scan, CMD_4, 16070, scan->caldata, &s));
1766 CHK (csend (scan, CMD_40));
1767 CHK (cread (scan, CMD_2, 0, NULL, &s));
1777 read_raw_data (UMAX_Handle * scan, unsigned char *data, int len)
1782 CHK (cread (scan, CMD_2, 0, NULL, &s));
1783 CHK (cread (scan, CMD_4, len, data, &s));
1791 read_raw_strip_color (UMAX_Handle * scan)
1800 const int yoff_scale = 600 * scan->ysamp / scan->ydpi;
1801 const int linelen = 3 * scan->w;
1813 int lines_to_read = scan->hexp;
1815 DBG (9, "read_raw_strip_color: hexp = %d, bh = %d\n", scan->hexp, scan->bh);
1817 if (scan->maxh == -1)
1820 if (lines_to_read > scan->bh)
1821 lines_to_read = scan->bh;
1823 CHK (read_raw_data (scan, scan->p, lines_to_read * linelen));
1824 scan->maxh = lines_to_read - hextra;
1829 memmove (scan->p, scan->p + (scan->bh - hextra) * linelen,
1832 if (lines_to_read > (scan->bh - hextra))
1833 lines_to_read = scan->bh - hextra;
1836 (scan, scan->p + hextra * linelen, lines_to_read * linelen));
1837 scan->maxh = lines_to_read;
1840 scan->hexp -= lines_to_read;
1841 scan->x = 0;
1842 scan->y = 0;
1850 read_raw_strip_gray (UMAX_Handle * scan)
1852 const int linelen = scan->w;
1856 int lines_to_read = scan->bh;
1858 DBG (9, "read_raw_strip_gray: hexp = %d\n", scan->hexp);
1860 if (lines_to_read > scan->hexp)
1861 lines_to_read = scan->hexp;
1862 scan->hexp -= lines_to_read;
1864 CHK (read_raw_data (scan, scan->p, lines_to_read * linelen));
1866 scan->maxh = lines_to_read;
1867 scan->x = 0;
1868 scan->y = 0;
1877 read_raw_strip (UMAX_Handle * scan)
1879 if (scan->color)
1880 return read_raw_strip_color (scan);
1882 return read_raw_strip_gray (scan);
1885 /* Set scan user pamaters Frontend */
1888 UMAX_set_scan_parameters (UMAX_Handle * scan,
1930 scan->color = color;
1931 scan->w = w;
1932 scan->h = h;
1933 scan->xo = xo;
1934 scan->yo = yo;
1966 scan->xdpi = 600;
1968 scan->ydpi = 150;
1970 scan->ydpi = 600;
1972 scan->ydpi = 300;
1974 scan->xsamp = scan->xdpi / xres;
1975 scan->ysamp = scan->ydpi / yres;
1980 /* Start actual scan 1220U */
1983 UMAX_start_scan (UMAX_Handle * scan)
1991 if (scan->color)
1993 const int yoff_scale = 600 * scan->ysamp / scan->ydpi;
1996 linelen = 3 * scan->w;
1997 scan->hexp = scan->h + hextra;
2001 linelen = scan->w;
2002 scan->hexp = scan->h;
2005 scan->bh = BUFFER_SIZE / linelen;
2007 scan->p = malloc (scan->bh * linelen);
2008 if (scan->p == 0)
2011 DBG (4, "UMAX_start_scan: bh = %d, linelen = %d\n", scan->bh, linelen);
2013 scan->maxh = -1;
2014 scan->done = 0;
2016 /* Initialize the scanner and position the scan head */
2018 CHK (umaxinit (scan));
2021 * is located under the scanner's lid. The scan of that strip
2026 scan->scanner_ypos = 0;
2027 CHK (move (scan, 196, UMAX_NOT_FINE));
2028 CHK (find_zero (scan));
2029 CHK (move (scan, scan->scanner_yorg - 232 - scan->scanner_ypos, UMAX_FINE));
2030 CHK (get_caldata (scan, scan->color));
2034 yd = scan->scanner_yorg + scan->yo - scan->scanner_ypos;
2036 CHK (move (scan, yd, UMAX_FINE));
2038 CHK (move (scan, (yd - 20) / 2, UMAX_NOT_FINE));
2039 yd = scan->scanner_yorg + scan->yo - scan->scanner_ypos;
2041 scan->yskip = yd / (600 / scan->ydpi);
2042 scan->xskip = scan->xo / (600 / scan->xdpi);
2046 CHK (send_scan_parameters (scan));
2047 CHK (read_raw_strip (scan));
2055 /* Start actual scan 2100U */
2058 UMAX_start_scan_2100U (UMAX_Handle * scan)
2066 if (scan->color)
2068 const int yoff_scale = 600 * scan->ysamp / scan->ydpi;
2071 linelen = 3 * scan->w;
2072 scan->hexp = scan->h + hextra;
2076 linelen = scan->w;
2077 scan->hexp = scan->h;
2080 scan->bh = BUFFER_SIZE / linelen;
2082 scan->p = malloc (scan->bh * linelen);
2083 if (scan->p == 0)
2086 DBG (4, "UMAX_start_scan: bh = %d, linelen = %d\n", scan->bh, linelen);
2088 scan->maxh = -1;
2089 scan->done = 0;
2091 /* Initialize the scanner and position the scan head */
2093 CHK (umaxinit_2100U (scan));
2096 * is located under the scanner's lid. The scan of that strip
2101 scan->scanner_ypos = 0;
2102 CHK (move_2100U (scan, 196, UMAX_NOT_FINE));
2103 CHK (find_zero_2100U (scan));
2104 CHK (move_2100U (scan, scan->scanner_yorg - 232 - scan->scanner_ypos, UMAX_FINE));
2105 CHK (get_caldata_2100U (scan, scan->color));
2109 yd = scan->scanner_yorg + scan->yo - scan->scanner_ypos;
2111 CHK (move_2100U (scan, yd, UMAX_FINE));
2113 CHK (move_2100U (scan, (yd - 20) / 2, UMAX_NOT_FINE));
2114 yd = scan->scanner_yorg + scan->yo - scan->scanner_ypos;
2116 scan->yskip = yd / (600 / scan->ydpi);
2117 scan->xskip = scan->xo / (600 / scan->xdpi);
2121 CHK (send_scan_parameters_2100U (scan));
2122 CHK (read_raw_strip (scan));
2132 UMAX_set_lamp_state (UMAX_Handle * scan, UMAX_Lamp_State state)
2138 CHK (csend (scan, CMD_0));
2139 CHK (cwritev_opc1_lamp_ctrl (scan, state));
2146 UMAX_park_head (UMAX_Handle * scan)
2154 CHK (csend (scan, CMD_0));
2158 CHK (cwritev_opc1_lamp_ctrl (scan, UMAX_LAMP_ON));
2159 CHK (cwritev_opb3_restore (scan));
2163 CHK (cread (scan, CMD_2, 0, NULL, &s));
2171 scan->scanner_ypos = 0;
2180 UMAX_park_head_2100U (UMAX_Handle * scan)
2188 CHK (csend (scan, CMD_0));
2192 CHK (cwritev_opc1_lamp_ctrl (scan, UMAX_LAMP_ON));
2193 CHK (cwritev_opb3_restore_2100U (scan));
2197 CHK (cread (scan, CMD_2, 0, NULL, &s));
2205 /* CHK (csend (scan, CMD_0));
2206 CHK (csend (scan, CMD_0)); */
2208 scan->scanner_ypos = 0;
2214 /* Finish scan */
2217 UMAX_finish_scan (UMAX_Handle * scan)
2221 if (scan->p)
2222 free (scan->p);
2223 scan->p = NULL;
2228 /* RGB decoding for a color scan */
2231 UMAX_get_rgb (UMAX_Handle * scan, unsigned char *rgb)
2234 if (scan->color)
2236 const int linelen = 3 * scan->w;
2237 const int yoff_scale = 600 * scan->ysamp / scan->ydpi;
2238 const int roff = (8 / yoff_scale * 3 + 2) * scan->w;
2239 const int goff = (4 / yoff_scale * 3 + 1) * scan->w;
2242 unsigned char *base = scan->p + (scan->y * linelen) + scan->x;
2250 const int linelen = scan->w;
2251 unsigned char *base = scan->p + (scan->y * linelen) + (scan->x);
2258 if (!(((scan->x + 1) == scan->w) && ((scan->y + 1) == scan->maxh)))
2260 ++scan->x;
2261 if (scan->x == scan->w)
2263 ++scan->y;
2264 scan->x = 0;
2269 if (scan->hexp <= 0)
2272 scan->done = 1;
2276 return read_raw_strip (scan);
2282 UMAX_close_device (UMAX_Handle * scan)
2285 sanei_usb_close (scan->fd);
2292 UMAX_open_device (UMAX_Handle * scan, const char *dev)
2300 res = sanei_usb_open (dev, &scan->fd);
2310 if (sanei_usb_get_vendor_product (scan->fd, &vendor, &product) !=
2315 sanei_usb_close (scan->fd);
2316 scan->fd = -1;
2324 sanei_usb_close (scan->fd);
2325 scan->fd = -1;
2338 scan->model = ASTRA_2000U;
2341 scan->model = ASTRA_2100U;
2344 scan->model = ASTRA_1220U;
2348 sanei_usb_close (scan->fd);
2349 scan->fd = -1;
2354 res = csend (scan, CMD_0);
2356 UMAX_close_device (scan);
2359 res = xxxops (scan);
2361 UMAX_close_device (scan);
2370 UMAX_get_device_name (UMAX_Handle * scan)
2372 switch (scan->model)