Lines Matching refs:scanner
188 . - sane_get_devices() : query list of scanner-devices
189 . - sane_open() : open a particular scanner-device
191 . . - sane_get_select_fd : get scanner-fd
200 . - sane_close() : close opened scanner-device
288 attach_scanner ("/dev/scanner", 0); /* no config-file: /dev/scanner */
413 struct sp15c *scanner = handle;
416 scanner->opt[option].name);
420 return &scanner->opt[option];
429 struct sp15c *scanner = handle;
436 if (scanner->scanning == SANE_TRUE)
445 cap = scanner->opt[option].cap;
450 scanner->opt[option].name);
467 if (scanner->use_adf == SANE_TRUE)
478 switch (scanner->composition)
507 *(SANE_Word *) val = scanner->x_res;
511 *(SANE_Word *) val = scanner->y_res;
518 *(SANE_Word *) val = SANE_FIX (iluToMm (scanner->tl_x));
522 *(SANE_Word *) val = SANE_FIX (iluToMm (scanner->tl_y));
526 *(SANE_Word *) val = SANE_FIX (iluToMm (scanner->br_x));
530 *(SANE_Word *) val = SANE_FIX (iluToMm (scanner->br_y));
537 *(SANE_Word *) val = scanner->brightness;
541 *(SANE_Word *) val = scanner->threshold;
553 scanner->opt[option].name);
567 status = sanei_constrain_value (scanner->opt + option, val, info);
583 if (scanner->use_adf == SANE_TRUE)
585 scanner->use_adf = SANE_TRUE;
586 scanner->opt[OPT_TL_Y].constraint.range = &y_range_adf;
587 scanner->opt[OPT_BR_Y].constraint.range = &y_range_adf;
588 apply_constraints (scanner, OPT_TL_Y, &scanner->tl_y, info);
589 apply_constraints (scanner, OPT_BR_Y, &scanner->br_y, info);
593 if (scanner->use_adf == SANE_FALSE)
595 scanner->use_adf = SANE_FALSE;
596 scanner->opt[OPT_TL_Y].constraint.range = &y_range_fb;
597 scanner->opt[OPT_BR_Y].constraint.range = &y_range_fb;
598 apply_constraints (scanner, OPT_TL_Y, &scanner->tl_y, info);
599 apply_constraints (scanner, OPT_BR_Y, &scanner->br_y, info);
614 if (scanner->composition == WD_comp_LA)
616 scanner->composition = WD_comp_LA;
617 scanner->bitsperpixel = 1;
618 scanner->opt[OPT_BRIGHTNESS].cap = SANE_CAP_INACTIVE;
619 scanner->opt[OPT_THRESHOLD].cap = SANE_CAP_SOFT_DETECT
621 scanner->vendor_id_code = 0;
625 if (scanner->composition == WD_comp_HT)
627 scanner->composition = WD_comp_HT;
628 scanner->bitsperpixel = 1;
629 scanner->opt[OPT_BRIGHTNESS].cap = SANE_CAP_SOFT_DETECT
631 scanner->opt[OPT_THRESHOLD].cap = SANE_CAP_INACTIVE;
632 scanner->vendor_id_code = 0;
636 if (scanner->composition == WD_comp_G4)
638 scanner->composition = WD_comp_G4;
639 scanner->bitsperpixel = 4;
640 scanner->opt[OPT_BRIGHTNESS].cap = SANE_CAP_INACTIVE;
641 scanner->opt[OPT_THRESHOLD].cap = SANE_CAP_INACTIVE;
642 scanner->vendor_id_code = 0;
646 if (scanner->composition == WD_comp_G8)
648 scanner->composition = WD_comp_G8;
649 scanner->bitsperpixel = 8;
650 scanner->opt[OPT_BRIGHTNESS].cap = SANE_CAP_INACTIVE;
651 scanner->opt[OPT_THRESHOLD].cap = SANE_CAP_INACTIVE;
652 scanner->vendor_id_code = 0;
656 if (scanner->composition == WD_comp_MC)
658 scanner->composition = WD_comp_MC;
659 scanner->bitsperpixel = 8;
660 scanner->opt[OPT_BRIGHTNESS].cap = SANE_CAP_INACTIVE;
661 scanner->opt[OPT_THRESHOLD].cap = SANE_CAP_INACTIVE;
662 scanner->vendor_id_code = 0xff;
681 scanner->x_res = (*(SANE_Word *) val);
682 adjust_width (scanner, info);
690 scanner->y_res = (*(SANE_Word *) val);
701 scanner->tl_x = mmToIlu (SANE_UNFIX (*(SANE_Word *) val));
702 adjust_width (scanner, info);
703 *(SANE_Word *) val = SANE_FIX (iluToMm (scanner->tl_x));
711 scanner->tl_y = mmToIlu (SANE_UNFIX (*(SANE_Word *) val));
712 *(SANE_Word *) val = SANE_FIX (iluToMm (scanner->tl_y));
720 scanner->br_x = mmToIlu (SANE_UNFIX (*(SANE_Word *) val));
721 adjust_width (scanner, info);
722 *(SANE_Word *) val = SANE_FIX (iluToMm (scanner->br_x));
730 scanner->br_y = mmToIlu (SANE_UNFIX (*(SANE_Word *) val));
731 *(SANE_Word *) val = SANE_FIX (iluToMm (scanner->br_y));
742 scanner->brightness = *(SANE_Word *) val;
746 scanner->threshold = *(SANE_Word *) val;
758 struct sp15c *scanner = handle;
763 if (scanner->scanning == SANE_TRUE)
769 if (scanner->sfd < 0)
771 if (sanei_scsi_open (scanner->sane.name, &(scanner->sfd),
775 scanner->sane.name);
779 scanner->scanning = SANE_TRUE;
782 if ((ret = sp15c_check_values (scanner)) != 0)
785 sanei_scsi_close (scanner->sfd);
786 scanner->scanning = SANE_FALSE;
787 scanner->sfd = -1;
791 if ((ret = sp15c_grab_scanner (scanner)))
793 DBG (5, "sane_start: unable to reserve scanner\n");
794 sanei_scsi_close (scanner->sfd);
795 scanner->scanning = SANE_FALSE;
796 scanner->sfd = -1;
800 if ((ret = sp15c_set_window_param (scanner, 0)))
803 sp15c_free_scanner (scanner);
804 sanei_scsi_close (scanner->sfd);
805 scanner->scanning = SANE_FALSE;
806 scanner->sfd = -1;
818 if (scanner->use_adf == SANE_TRUE
819 && (ret = sp15c_media_check (scanner)))
822 sp15c_free_scanner (scanner);
823 sanei_scsi_close (scanner->sfd);
824 scanner->scanning = SANE_FALSE;
825 scanner->sfd = -1;
829 swap_res (scanner);
831 DBG (10, "\tbytes per line = %d\n", bytes_per_line (scanner));
832 DBG (10, "\tpixels_per_line = %d\n", pixels_per_line (scanner));
833 DBG (10, "\tlines = %d\n", lines_per_scan (scanner));
834 DBG (10, "\tbrightness (halftone) = %d\n", scanner->brightness);
835 DBG (10, "\tthreshold (line art) = %d\n", scanner->threshold);
837 if (scanner->composition == WD_comp_MC
838 && (ret = sp15c_start_scan (scanner)))
841 sp15c_free_scanner (scanner);
842 sanei_scsi_close (scanner->sfd);
843 scanner->scanning = SANE_FALSE;
844 scanner->sfd = -1;
852 swap_res (scanner);
853 scanner->scanning = SANE_FALSE;
854 sp15c_free_scanner (scanner);
855 sanei_scsi_close (scanner->sfd);
856 scanner->sfd = -1;
860 scanner->pipe = fds[0];
861 scanner->reader_pipe = fds[1];
862 scanner->reader_pid = sanei_thread_begin (reader_process, (void *) scanner);
865 close (scanner->reader_pipe);
875 struct sp15c *scanner = handle;
878 if (scanner->composition == WD_comp_MC)
883 else if (scanner->composition == WD_comp_LA
884 || scanner->composition == WD_comp_HT)
895 params->pixels_per_line = pixels_per_line (scanner);
896 params->lines = lines_per_scan (scanner);
897 params->bytes_per_line = bytes_per_line (scanner);
905 DBG (10, "\tlength %d\n", scanner->br_y - scanner->tl_y);
906 DBG (10, "\t(nom.) width %d\n", scanner->br_x - scanner->tl_x);
907 DBG (10, "\tx res %d\n", scanner->x_res);
908 DBG (10, "\ty res %d\n", scanner->y_res);
919 struct sp15c *scanner = handle;
925 nread = read (scanner->pipe, buf, max_len);
929 if (scanner->scanning == SANE_FALSE)
931 /* PREDICATE WAS (!(scanner->scanning)) */
932 return do_cancel (scanner);
943 do_cancel (scanner);
951 return do_eof (scanner); /* close pipe */
1011 DBG (5, "attach_scanner: scanner already attached (is ok)!\n");
1038 DBG (5, "attach_scanner: scanner-identification failed\n");
1058 dev->sane.type = "flatbed/ADF scanner";
1257 DBG (5, "identify_scanner: not a scanner\n");
1301 DBG (10, "Found %s scanner %s version %s on device %s %x/%x/%x\n",
1386 init_options (struct sp15c *scanner)
1392 memset (scanner->opt, 0, sizeof (scanner->opt));
1396 scanner->opt[i].size = sizeof (SANE_Word);
1397 scanner->opt[i].cap = SANE_CAP_INACTIVE;
1400 scanner->opt[OPT_NUM_OPTS].title = SANE_TITLE_NUM_OPTIONS;
1401 scanner->opt[OPT_NUM_OPTS].desc = SANE_DESC_NUM_OPTIONS;
1402 scanner->opt[OPT_NUM_OPTS].type = SANE_TYPE_INT;
1403 scanner->opt[OPT_NUM_OPTS].cap = SANE_CAP_SOFT_DETECT;
1406 scanner->opt[OPT_MODE_GROUP].title = "Scan Mode";
1407 scanner->opt[OPT_MODE_GROUP].desc = "";
1408 scanner->opt[OPT_MODE_GROUP].type = SANE_TYPE_GROUP;
1409 scanner->opt[OPT_MODE_GROUP].constraint_type = SANE_CONSTRAINT_NONE;
1413 scanner->opt[OPT_SOURCE].name = SANE_NAME_SCAN_SOURCE;
1414 scanner->opt[OPT_SOURCE].title = SANE_TITLE_SCAN_SOURCE;
1415 scanner->opt[OPT_SOURCE].desc = SANE_DESC_SCAN_SOURCE;
1416 scanner->opt[OPT_SOURCE].type = SANE_TYPE_STRING;
1417 scanner->opt[OPT_SOURCE].size = max_string_size (source_list);
1418 scanner->opt[OPT_SOURCE].constraint_type = SANE_CONSTRAINT_STRING_LIST;
1419 scanner->opt[OPT_SOURCE].constraint.string_list = source_list;
1420 if (scanner->autofeeder)
1422 scanner->opt[OPT_SOURCE].cap = SANE_CAP_SOFT_SELECT
1427 scanner->opt[OPT_MODE].name = SANE_NAME_SCAN_MODE;
1428 scanner->opt[OPT_MODE].title = SANE_TITLE_SCAN_MODE;
1429 scanner->opt[OPT_MODE].desc = SANE_DESC_SCAN_MODE;
1430 scanner->opt[OPT_MODE].type = SANE_TYPE_STRING;
1431 scanner->opt[OPT_MODE].size = max_string_size (scan_mode_list);
1432 scanner->opt[OPT_MODE].constraint_type = SANE_CONSTRAINT_STRING_LIST;
1433 scanner->opt[OPT_MODE].constraint.string_list = scan_mode_list;
1434 scanner->opt[OPT_MODE].cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT;
1437 scanner->opt[OPT_TYPE].name = "type";
1438 scanner->opt[OPT_TYPE].title = "Film type";
1439 scanner->opt[OPT_TYPE].desc = "positive or negative image";
1440 scanner->opt[OPT_TYPE].type = SANE_TYPE_STRING;
1441 scanner->opt[OPT_TYPE].size = max_string_size (type_list);
1442 scanner->opt[OPT_TYPE].constraint_type = SANE_CONSTRAINT_STRING_LIST;
1443 scanner->opt[OPT_TYPE].constraint.string_list = type_list;
1445 scanner->opt[OPT_PRESCAN].name = "prescan";
1446 scanner->opt[OPT_PRESCAN].title = "Prescan";
1447 scanner->opt[OPT_PRESCAN].desc = "Perform a prescan during preview";
1448 scanner->opt[OPT_PRESCAN].type = SANE_TYPE_BOOL;
1449 scanner->opt[OPT_PRESCAN].unit = SANE_UNIT_NONE;
1452 scanner->opt[OPT_X_RES].name = SANE_NAME_SCAN_RESOLUTION;
1453 scanner->opt[OPT_X_RES].title = SANE_TITLE_SCAN_X_RESOLUTION;
1454 scanner->opt[OPT_X_RES].desc = SANE_DESC_SCAN_X_RESOLUTION;
1455 scanner->opt[OPT_X_RES].type = SANE_TYPE_INT;
1456 scanner->opt[OPT_X_RES].unit = SANE_UNIT_DPI;
1457 scanner->opt[OPT_X_RES].constraint_type = SANE_CONSTRAINT_WORD_LIST;
1458 scanner->opt[OPT_X_RES].constraint.word_list = x_res_list;
1459 scanner->opt[OPT_X_RES].cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT;
1461 scanner->opt[OPT_Y_RES].name = SANE_NAME_SCAN_Y_RESOLUTION;
1462 scanner->opt[OPT_Y_RES].title = SANE_TITLE_SCAN_Y_RESOLUTION;
1463 scanner->opt[OPT_Y_RES].desc = SANE_DESC_SCAN_Y_RESOLUTION;
1464 scanner->opt[OPT_Y_RES].type = SANE_TYPE_INT;
1465 scanner->opt[OPT_Y_RES].unit = SANE_UNIT_DPI;
1466 scanner->opt[OPT_Y_RES].constraint_type = SANE_CONSTRAINT_WORD_LIST;
1467 scanner->opt[OPT_Y_RES].constraint.word_list = y_res_list;
1468 scanner->opt[OPT_Y_RES].cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT;
1470 scanner->opt[OPT_PREVIEW_RES].name = "preview-resolution";
1471 scanner->opt[OPT_PREVIEW_RES].title = "Preview resolution";
1472 scanner->opt[OPT_PREVIEW_RES].desc = SANE_DESC_SCAN_RESOLUTION;
1473 scanner->opt[OPT_PREVIEW_RES].type = SANE_TYPE_INT;
1474 scanner->opt[OPT_PREVIEW_RES].unit = SANE_UNIT_DPI;
1475 scanner->opt[OPT_PREVIEW_RES].constraint_type = SANE_CONSTRAINT_WORD_LIST;
1476 scanner->opt[OPT_PREVIEW_RES].constraint.word_list = resolution_list;
1479 scanner->opt[OPT_GEOMETRY_GROUP].title = "Geometry";
1480 scanner->opt[OPT_GEOMETRY_GROUP].desc = "";
1481 scanner->opt[OPT_GEOMETRY_GROUP].type = SANE_TYPE_GROUP;
1482 scanner->opt[OPT_GEOMETRY_GROUP].constraint_type = SANE_CONSTRAINT_NONE;
1485 scanner->opt[OPT_TL_X].name = SANE_NAME_SCAN_TL_X;
1486 scanner->opt[OPT_TL_X].title = SANE_TITLE_SCAN_TL_X;
1487 scanner->opt[OPT_TL_X].desc = SANE_DESC_SCAN_TL_X;
1488 scanner->opt[OPT_TL_X].type = SANE_TYPE_FIXED;
1489 scanner->opt[OPT_TL_X].unit = SANE_UNIT_MM;
1490 scanner->opt[OPT_TL_X].constraint_type = SANE_CONSTRAINT_RANGE;
1491 scanner->opt[OPT_TL_X].constraint.range = &x_range;
1492 scanner->opt[OPT_TL_X].cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT;
1495 scanner->opt[OPT_TL_Y].name = SANE_NAME_SCAN_TL_Y;
1496 scanner->opt[OPT_TL_Y].title = SANE_TITLE_SCAN_TL_Y;
1497 scanner->opt[OPT_TL_Y].desc = SANE_DESC_SCAN_TL_Y;
1498 scanner->opt[OPT_TL_Y].type = SANE_TYPE_FIXED;
1499 scanner->opt[OPT_TL_Y].unit = SANE_UNIT_MM;
1500 scanner->opt[OPT_TL_Y].constraint_type = SANE_CONSTRAINT_RANGE;
1501 scanner->opt[OPT_TL_Y].constraint.range = &y_range_fb;
1502 scanner->opt[OPT_TL_Y].cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT;
1505 scanner->opt[OPT_BR_X].name = SANE_NAME_SCAN_BR_X;
1506 scanner->opt[OPT_BR_X].title = SANE_TITLE_SCAN_BR_X;
1507 scanner->opt[OPT_BR_X].desc = SANE_DESC_SCAN_BR_X;
1508 scanner->opt[OPT_BR_X].type = SANE_TYPE_FIXED;
1509 scanner->opt[OPT_BR_X].unit = SANE_UNIT_MM;
1510 scanner->opt[OPT_BR_X].constraint_type = SANE_CONSTRAINT_RANGE;
1511 scanner->opt[OPT_BR_X].constraint.range = &x_range;
1512 scanner->opt[OPT_BR_X].cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT;
1515 scanner->opt[OPT_BR_Y].name = SANE_NAME_SCAN_BR_Y;
1516 scanner->opt[OPT_BR_Y].title = SANE_TITLE_SCAN_BR_Y;
1517 scanner->opt[OPT_BR_Y].desc = SANE_DESC_SCAN_BR_Y;
1518 scanner->opt[OPT_BR_Y].type = SANE_TYPE_FIXED;
1519 scanner->opt[OPT_BR_Y].unit = SANE_UNIT_MM;
1520 scanner->opt[OPT_BR_Y].constraint_type = SANE_CONSTRAINT_RANGE;
1521 scanner->opt[OPT_BR_Y].constraint.range = &y_range_fb;
1522 scanner->opt[OPT_BR_Y].cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT;
1528 scanner->opt[OPT_ENHANCEMENT_GROUP].title = "Enhancement";
1529 scanner->opt[OPT_ENHANCEMENT_GROUP].desc = "";
1530 scanner->opt[OPT_ENHANCEMENT_GROUP].type = SANE_TYPE_GROUP;
1531 scanner->opt[OPT_ENHANCEMENT_GROUP].constraint_type = SANE_CONSTRAINT_NONE;
1533 scanner->opt[OPT_AVERAGING].name = "averaging";
1534 scanner->opt[OPT_AVERAGING].title = "Averaging";
1535 scanner->opt[OPT_AVERAGING].desc = "Averaging";
1536 scanner->opt[OPT_AVERAGING].type = SANE_TYPE_BOOL;
1537 scanner->opt[OPT_AVERAGING].unit = SANE_UNIT_NONE;
1539 scanner->opt[OPT_BRIGHTNESS].name = SANE_NAME_BRIGHTNESS;
1540 scanner->opt[OPT_BRIGHTNESS].title = SANE_TITLE_BRIGHTNESS;
1541 scanner->opt[OPT_BRIGHTNESS].desc = SANE_DESC_BRIGHTNESS;
1542 scanner->opt[OPT_BRIGHTNESS].type = SANE_TYPE_INT;
1543 scanner->opt[OPT_BRIGHTNESS].unit = SANE_UNIT_NONE;
1544 scanner->opt[OPT_BRIGHTNESS].constraint_type = SANE_CONSTRAINT_RANGE;
1545 scanner->opt[OPT_BRIGHTNESS].constraint.range = &brightness_range;
1546 scanner->opt[OPT_BRIGHTNESS].cap = SANE_CAP_SOFT_DETECT;
1548 scanner->opt[OPT_THRESHOLD].name = SANE_NAME_THRESHOLD;
1549 scanner->opt[OPT_THRESHOLD].title = SANE_TITLE_THRESHOLD;
1550 scanner->opt[OPT_THRESHOLD].desc = SANE_DESC_THRESHOLD;
1551 scanner->opt[OPT_THRESHOLD].type = SANE_TYPE_INT;
1552 scanner->opt[OPT_THRESHOLD].unit = SANE_UNIT_NONE;
1553 scanner->opt[OPT_THRESHOLD].constraint_type = SANE_CONSTRAINT_RANGE;
1554 scanner->opt[OPT_THRESHOLD].constraint.range = &threshold_range;
1555 scanner->opt[OPT_THRESHOLD].cap = SANE_CAP_SOFT_DETECT;
1560 scanner->opt[OPT_ADVANCED_GROUP].title = "Advanced";
1561 scanner->opt[OPT_ADVANCED_GROUP].desc = "";
1562 scanner->opt[OPT_ADVANCED_GROUP].type = SANE_TYPE_GROUP;
1563 scanner->opt[OPT_ADVANCED_GROUP].constraint_type = SANE_CONSTRAINT_NONE;
1566 scanner->opt[OPT_PREVIEW].name = SANE_NAME_PREVIEW;
1567 scanner->opt[OPT_PREVIEW].title = SANE_TITLE_PREVIEW;
1568 scanner->opt[OPT_PREVIEW].desc = SANE_DESC_PREVIEW;
1569 scanner->opt[OPT_PREVIEW].type = SANE_TYPE_BOOL;
1669 DBG (1, "wait_scanner: scanner does NOT get ready\n");
1754 do_cancel (struct sp15c *scanner)
1757 swap_res (scanner);
1759 do_eof (scanner); /* close pipe and reposition scanner */
1761 if (sanei_thread_is_valid (scanner->reader_pid))
1766 sanei_thread_kill (scanner->reader_pid);
1767 DBG (50, "wait for scanner to stop\n");
1768 sanei_thread_waitpid (scanner->reader_pid, &exit_status);
1769 sanei_thread_invalidate (scanner->reader_pid);
1772 if (scanner->sfd >= 0)
1774 sp15c_free_scanner (scanner);
1776 sanei_scsi_close (scanner->sfd);
1777 scanner->sfd = -1;
1963 struct sp15c *scanner = (struct sp15c *) data;
1964 int pipe_fd = scanner->reader_pipe;
1979 close (scanner->pipe);
2003 data_left = bytes_per_line (scanner) *
2004 lines_per_scan (scanner);
2006 sp15c_trim_rowbufsize (scanner); /* trim bufsize */
2009 data_left, scanner->row_bufsize);
2015 /* wait_scanner(scanner); */
2018 data_to_read = (data_left < scanner->row_bufsize)
2020 : scanner->row_bufsize;
2022 if (scanner->composition == WD_comp_G4)
2026 status = sp15c_read_data_block (scanner, data_to_read);
2037 DBG (1, "reader_process: unable to get image data from scanner!\n");
2045 if (scanner->composition == WD_comp_G4)
2047 src = &scanner->buffer[data_to_read - 1];
2048 dst = &scanner->buffer[data_to_read * 2 - 1];
2058 fwrite (scanner->buffer, 1, data_to_read, fp);
2077 do_eof (struct sp15c *scanner)
2081 scanner->scanning = SANE_FALSE;
2082 if (scanner->pipe >= 0)
2084 close (scanner->pipe);
2085 scanner->pipe = -1;
2199 apply_constraints (struct sp15c *scanner, SANE_Int opt,
2203 status = sanei_constrain_value (scanner->opt + opt, target, info);
2207 scanner->opt[opt].constraint_type)
2209 if (*target < scanner->opt[opt].constraint.range->min)
2211 *target = scanner->opt[opt].constraint.range->min;
2214 else if (scanner->opt[opt].constraint.range->max < *target)
2216 *target = scanner->opt[opt].constraint.range->max;