Lines Matching refs:pss
154 static inline SnapScan_Mode actual_mode (SnapScan_Scanner *pss)
156 if (pss->preview == SANE_TRUE)
157 return pss->preview_mode;
158 return pss->mode;
166 static inline int calibration_line_length(SnapScan_Scanner *pss)
171 switch (pss->pdev->model)
181 pos_factor = pss->actual_res / 2;
188 pos_factor = pss->actual_res;
193 if(is_colour_mode(actual_mode(pss))) {
885 SnapScan_Scanner *pss = *(SnapScan_Scanner **) h;
888 pss->devname = strdup (name);
889 if (!pss->devname)
897 pss->pdev = psd;
898 pss->opens = 0;
899 pss->sense_str = NULL;
900 pss->as_str = NULL;
901 pss->phys_buf_sz = DEFAULT_SCANNER_BUF_SZ;
902 if ((pss->pdev->model == PERFECTION2480) || (pss->pdev->model == PERFECTION3490))
903 pss->phys_buf_sz *= 2;
905 pss->phys_buf_sz = sanei_scsi_max_request_size;
909 me, (u_long) pss->phys_buf_sz);
910 pss->buf = (u_char *) malloc(pss->phys_buf_sz);
911 if (!pss->buf) {
921 (void *) pss);
928 status = open_scanner (pss);
935 free (pss);
940 status = wait_scanner_ready (pss);
947 free (pss);
951 status = send_diagnostic (pss);
956 free (pss);
963 status = inquiry (pss);
970 free (pss);
974 if (pss->pdev->bus == USB)
976 if (sanei_usb_get_vendor_product(pss->fd, &pss->usb_vendor, &pss->usb_product) != SANE_STATUS_GOOD)
978 pss->usb_vendor = 0;
979 pss->usb_product = 0;
982 if (pss->hwst & 0x02)
987 status = download_firmware(pss);
990 status = wait_scanner_ready(pss);
992 status = mini_inquiry (pss->pdev->bus, pss->fd, vendor, model);
1000 pss->pdev->model = snapscani_get_model_id(model, pss->fd, pss->pdev->bus);
1002 if (pss->pdev->model == UNKNOWN) {
1009 status = inquiry (pss);
1013 close_scanner(pss);
1015 status = alloc_gamma_tables (pss);
1022 free (pss);
1026 init_options (pss);
1027 status = init_gamma (pss);
1034 free (pss);
1038 pss->state = ST_IDLE;
1045 SnapScan_Scanner *pss = (SnapScan_Scanner *) h;
1047 switch (pss->state)
1051 release_unit (pss);
1056 close_scanner (pss);
1058 free (pss->gamma_tables);
1059 free (pss->buf);
1060 free (pss);
1069 SnapScan_Scanner *pss = (SnapScan_Scanner *) h;
1071 SnapScan_Mode mode = actual_mode(pss);
1077 if ((pss->state == ST_SCAN_INIT) || (pss->state == ST_SCANNING))
1081 if (pss->psrc != NULL)
1085 p->pixels_per_line = pss->psrc->pixelsPerLine(pss->psrc);
1086 p->bytes_per_line = pss->psrc->bytesPerLine(pss->psrc);
1087 /* p->lines = pss->psrc->remaining(pss->psrc)/p->bytes_per_line; */
1088 p->lines = pss->lines;
1094 p->pixels_per_line = pss->pixels_per_line;
1095 p->bytes_per_line = pss->bytes_per_line;
1096 p->lines = pss->lines;
1110 width = SANE_UNFIX (pss->brx - pss->tlx);
1111 height = SANE_UNFIX (pss->bry - pss->tly);
1112 dpi = pss->res;
1120 p->bytes_per_line = 3 * p->pixels_per_line * ((pss->bpp_scan+7)/8);
1127 p->bytes_per_line = p->pixels_per_line * ((pss->bpp_scan+7)/8);
1134 else if (pss->pdev->model == SCANWIT2720S)
1136 else if (pss->preview)
1139 p->depth = pss->val[OPT_BIT_DEPTH].w;
1159 static void reader (SnapScan_Scanner *pss)
1175 while ((pss->preadersrc->remaining(pss->preadersrc) > 0) && !cancelRead)
1178 status = pss->preadersrc->get(pss->preadersrc, wbuf, &ndata);
1192 int written = write (pss->rpipe[1], buf, ndata);
1232 SnapScan_Scanner *pss = (SnapScan_Scanner *) args;
1237 close( pss->rpipe[0] );
1238 pss->rpipe[0] = -1;
1259 status = create_base_source (pss, SCSI_SRC, &(pss->preadersrc));
1262 reader (pss);
1269 pss->preadersrc->done(pss->preadersrc);
1270 free(pss->preadersrc);
1271 pss->preadersrc = 0;
1272 close( pss->rpipe[1] );
1273 pss->rpipe[1] = -1;
1279 static SANE_Status start_reader (SnapScan_Scanner *pss)
1286 pss->nonblocking = SANE_FALSE;
1287 pss->rpipe[0] = pss->rpipe[1] = -1;
1288 sanei_thread_initialize (pss->child);
1290 if (pipe (pss->rpipe) != -1)
1292 pss->orig_rpipe_flags = fcntl (pss->rpipe[0], F_GETFL, 0);
1293 pss->child = sanei_thread_begin(reader_process, (void *) pss);
1297 if (!sanei_thread_is_valid (pss->child))
1303 close (pss->rpipe[0]);
1304 close (pss->rpipe[1]);
1310 close (pss->rpipe[1]);
1311 pss->rpipe[1] = -1;
1313 pss->nonblocking = SANE_TRUE;
1318 static SANE_Status send_gamma_table (SnapScan_Scanner *pss, u_char dtc, u_char dtcq)
1322 status = send (pss, dtc, dtcq);
1324 switch (pss->pdev->model)
1331 status = send (pss, dtc, dtcq);
1336 status = send (pss, DTC_GAMMA2, dtcq);
1345 static SANE_Status download_gamma_tables (SnapScan_Scanner *pss)
1349 double gamma_gs = SANE_UNFIX (pss->gamma_gs);
1350 double gamma_r = SANE_UNFIX (pss->gamma_r);
1351 double gamma_g = SANE_UNFIX (pss->gamma_g);
1352 double gamma_b = SANE_UNFIX (pss->gamma_b);
1353 SnapScan_Mode mode = actual_mode (pss);
1366 if (!pss->halftone)
1374 if (!pss->halftone)
1382 switch (pss->bpp)
1385 DBG (DL_DATA_TRACE, "%s: Sending 8bit gamma table for %d bpp\n", me, pss->bpp);
1392 if (pss->pdev->model == SCANWIT2720S)
1394 DBG (DL_DATA_TRACE, "%s: Sending 16bit gamma table for %d bpp\n", me, pss->bpp);
1403 DBG (DL_DATA_TRACE, "%s: Sending 8bit gamma table for %d bpp\n", me, pss->bpp);
1411 if (pss->bpp_scan == 16)
1413 DBG (DL_DATA_TRACE, "%s: Sending 16bit gamma table for %d bpp\n", me, pss->bpp);
1422 DBG (DL_DATA_TRACE, "%s: Sending 8bit gamma table for %d bpp\n", me, pss->bpp);
1430 DBG (DL_DATA_TRACE, "%s: Sending 8bit gamma table for %d bpp\n", me, pss->bpp);
1440 if (pss->val[OPT_CUSTOM_GAMMA].b)
1442 if (pss->val[OPT_GAMMA_BIND].b)
1445 gamma_from_sane (pss->gamma_length, pss->gamma_table_gs,
1446 pss->buf + SEND_LENGTH, gamma_mode);
1447 status = send_gamma_table(pss, DTC_GAMMA, dtcq_gamma_red);
1450 gamma_from_sane (pss->gamma_length, pss->gamma_table_gs,
1451 pss->buf + SEND_LENGTH, gamma_mode);
1452 status = send_gamma_table(pss, DTC_GAMMA, dtcq_gamma_green);
1455 gamma_from_sane (pss->gamma_length, pss->gamma_table_gs,
1456 pss->buf + SEND_LENGTH, gamma_mode);
1457 status = send_gamma_table(pss, DTC_GAMMA, dtcq_gamma_blue);
1462 gamma_from_sane (pss->gamma_length, pss->gamma_table_r,
1463 pss->buf + SEND_LENGTH, gamma_mode);
1464 status = send_gamma_table(pss, DTC_GAMMA, dtcq_gamma_red);
1467 gamma_from_sane (pss->gamma_length, pss->gamma_table_g,
1468 pss->buf + SEND_LENGTH, gamma_mode);
1469 status = send_gamma_table(pss, DTC_GAMMA, dtcq_gamma_green);
1472 gamma_from_sane (pss->gamma_length, pss->gamma_table_b,
1473 pss->buf + SEND_LENGTH, gamma_mode);
1474 status = send_gamma_table(pss, DTC_GAMMA, dtcq_gamma_blue);
1480 if (pss->val[OPT_GAMMA_BIND].b)
1483 gamma_n (gamma_gs, pss->bright, pss->contrast,
1484 pss->buf + SEND_LENGTH, pss->bpp, gamma_mode);
1485 status = send_gamma_table(pss, DTC_GAMMA, dtcq_gamma_red);
1488 gamma_n (gamma_gs, pss->bright, pss->contrast,
1489 pss->buf + SEND_LENGTH, pss->bpp, gamma_mode);
1490 status = send_gamma_table(pss, DTC_GAMMA, dtcq_gamma_green);
1493 gamma_n (gamma_gs, pss->bright, pss->contrast,
1494 pss->buf + SEND_LENGTH, pss->bpp, gamma_mode);
1495 status = send_gamma_table(pss, DTC_GAMMA, dtcq_gamma_blue);
1500 gamma_n (gamma_r, pss->bright, pss->contrast,
1501 pss->buf + SEND_LENGTH, pss->bpp, gamma_mode);
1502 status = send_gamma_table(pss, DTC_GAMMA, dtcq_gamma_red);
1505 gamma_n (gamma_g, pss->bright, pss->contrast,
1506 pss->buf + SEND_LENGTH, pss->bpp, gamma_mode);
1507 status = send_gamma_table(pss, DTC_GAMMA, dtcq_gamma_green);
1510 gamma_n (gamma_b, pss->bright, pss->contrast,
1511 pss->buf + SEND_LENGTH, pss->bpp, gamma_mode);
1512 status = send_gamma_table(pss, DTC_GAMMA, dtcq_gamma_blue);
1519 if(pss->val[OPT_CUSTOM_GAMMA].b)
1521 gamma_from_sane (pss->gamma_length, pss->gamma_table_gs,
1522 pss->buf + SEND_LENGTH, gamma_mode);
1523 status = send_gamma_table(pss, DTC_GAMMA, dtcq_gamma_gray);
1528 gamma_n (gamma_gs, pss->bright, pss->contrast,
1529 pss->buf + SEND_LENGTH, pss->bpp, gamma_mode);
1530 status = send_gamma_table(pss, DTC_GAMMA, dtcq_gamma_gray);
1537 static SANE_Status download_halftone_matrices (SnapScan_Scanner *pss)
1541 if ((pss->halftone) &&
1542 ((actual_mode(pss) == MD_LINEART) || (actual_mode(pss) == MD_BILEVELCOLOUR)))
1548 if (pss->dither_matrix == dm_dd8x8)
1559 memcpy (pss->buf + SEND_LENGTH, matrix, matrix_sz);
1561 if (is_colour_mode(actual_mode(pss)))
1569 memcpy (pss->buf + SEND_LENGTH + matrix_sz,
1572 memcpy (pss->buf + SEND_LENGTH + 2 * matrix_sz,
1584 status = send (pss, DTC_HALFTONE, dtcq);
1590 static SANE_Status measure_transfer_rate (SnapScan_Scanner *pss)
1595 if (pss->hconfig & HCFG_RB)
1602 if ((pss->pdev->model == PERFECTION2480) || (pss->pdev->model == PERFECTION3490))
1605 if (pss->bytes_per_line > 0xfff0)
1606 pss->expected_read_bytes = 0xfff0;
1608 pss->expected_read_bytes = (0xfff0 / pss->bytes_per_line) * pss->bytes_per_line;
1611 pss->expected_read_bytes =
1612 (pss->buf_sz%128) ? (pss->buf_sz/128 + 1)*128 : pss->buf_sz;
1614 status = scsi_read (pss, READ_TRANSTIME);
1616 pss->expected_read_bytes = 0;
1617 status = scsi_read (pss, READ_TRANSTIME);
1626 pss->expected_read_bytes = pss->bytes_per_line;
1628 if (pss->expected_read_bytes%128)
1630 pss->expected_read_bytes =
1631 (pss->expected_read_bytes/128 + 1)*128;
1633 status = scsi_read (pss, READ_TRANSTIME);
1635 DBG (DL_VERBOSE, "%s: read %ld bytes.\n", me, (long) pss->read_bytes);
1638 pss->expected_read_bytes = 0;
1639 status = scsi_read (pss, READ_TRANSTIME);
1655 SnapScan_Scanner *pss = (SnapScan_Scanner *) h;
1661 status = open_scanner (pss);
1664 status = wait_scanner_ready (pss);
1670 pss->state = ST_SCAN_INIT;
1672 if ((pss->pdev->model == SCANWIT2720S) && (pss->focus_mode == MD_AUTO))
1674 status = get_focus(pss);
1678 reserve_unit(pss);
1680 if (pss->pdev->model == SCANWIT2720S)
1682 status = set_frame(pss, 0);
1684 status = set_focus(pss, pss->focus);
1689 status = set_window(pss);
1692 status = inquiry(pss);
1697 status = download_gamma_tables(pss);
1700 status = download_halftone_matrices(pss);
1703 if (pss->val[OPT_QUALITY_CAL].b && (pss->usb_vendor == USB_VENDOR_EPSON))
1705 status = calibrate(pss);
1709 release_unit (pss);
1718 status = measure_transfer_rate(pss);
1722 status = inquiry(pss);
1729 (u_long) pss->bytes_per_line,
1730 pss->ms_per_line,
1731 pss->bytes_per_line/pss->ms_per_line);
1734 if (pss->val[OPT_QUALITY_CAL].b && (pss->usb_vendor != USB_VENDOR_EPSON))
1736 status = calibrate(pss);
1740 release_unit (pss);
1745 status = scan(pss);
1749 release_unit (pss);
1753 if (pss->pdev->model == SCANWIT2720S)
1755 status = set_frame(pss, pss->frame_no);
1759 if (pss->source == SRC_ADF)
1763 status = wait_scanner_ready (pss);
1767 release_unit (pss);
1773 status = start_reader(pss);
1778 status = create_source_chain (pss, st, &(pss->psrc));
1791 SnapScan_Scanner *pss = (SnapScan_Scanner *) h;
1804 if (pss->state == ST_CANCEL_INIT) {
1805 pss->state = ST_IDLE;
1809 if (pss->psrc == NULL || pss->psrc->remaining(pss->psrc) == 0)
1811 if (sanei_thread_is_valid (pss->child))
1813 sanei_thread_waitpid (pss->child, 0); /* ensure no zombies */
1814 sanei_thread_invalidate (pss->child);
1816 release_unit (pss);
1817 close_scanner (pss);
1818 if (pss->psrc != NULL)
1820 pss->psrc->done(pss->psrc);
1821 free(pss->psrc);
1822 pss->psrc = NULL;
1824 pss->state = ST_IDLE;
1829 status = pss->psrc->get(pss->psrc, buf, plen);
1831 switch (pss->state)
1841 pss->state = ST_SCANNING;
1857 SnapScan_Scanner *pss = (SnapScan_Scanner *) h;
1862 switch (pss->state)
1869 pss->state = ST_CANCEL_INIT;
1871 if (sanei_thread_is_valid (pss->child))
1884 sanei_thread_sendsig( pss->child, SIGUSR1 );
1893 res = sanei_thread_waitpid( pss->child, 0 );
1896 if( res != pss->child ) {
1901 sanei_thread_kill( pss->child );
1903 sanei_thread_sendsig( pss->child, SIGKILL );
1906 sanei_thread_invalidate( pss->child );
1909 release_unit (pss);
1910 close_scanner (pss);
1919 (long) pss->state);
1927 SnapScan_Scanner *pss = (SnapScan_Scanner *) h;
1932 if (pss->state != ST_SCAN_INIT)
1937 if (!sanei_thread_is_valid (pss->child))
1945 fcntl (pss->rpipe[0], F_SETFL, O_NONBLOCK | pss->orig_rpipe_flags);
1950 fcntl (pss->rpipe[0], F_SETFL, pss->orig_rpipe_flags);
1953 pss->nonblocking = m;
1960 SnapScan_Scanner *pss = (SnapScan_Scanner *) h;
1964 if (pss->state != ST_SCAN_INIT)
1967 if (!sanei_thread_is_valid (pss->child))
1974 *fd = pss->rpipe[0];
2265 * check for pss->devname instead of name in sane_open()
2473 * it can handle a NULL pss pointer and then use the sanei_scsi stuff