Lines Matching refs:scanner
49 . - sane_get_devices() : query list of scanner-devices
50 . - sane_open() : open a particular scanner-device
52 . . - sane_get_select_fd : get scanner-fd
61 . - sane_close() : close opened scanner-device
278 DBG (10, "wait_scanner: Testing if scanner is ready\n");
290 DBG (1, "wait_scanner: scanner does NOT get ready\n");
296 DBG (10, "wait_scanner: scanner is ready\n");
330 DBG (10, "grabbing scanner\n");
332 wait_scanner (s); /* wait for scanner ready, if not print
338 DBG (10, "scanner reserved\n");
343 * Convert a size in ilu to the units expected by the scanner
533 DBG (10, "trying to release scanner ...\n");
537 DBG (10, "scanner released\n");
1080 do_prescan_now (Coolscan_t * scanner)
1084 if (scanner->scanning == SANE_TRUE)
1087 if (scanner->sfd < 0)
1089 if (sanei_scsi_open (scanner->sane.name,
1090 &(scanner->sfd),
1094 scanner->sane.name);
1098 scanner->scanning = SANE_TRUE;
1101 if (coolscan_check_values (scanner) != 0)
1104 scanner->scanning = SANE_FALSE;
1105 coolscan_give_scanner (scanner);
1106 sanei_scsi_close (scanner->sfd);
1107 scanner->sfd = -1;
1111 if (coolscan_grab_scanner (scanner))
1113 sanei_scsi_close (scanner->sfd);
1114 scanner->sfd = -1;
1115 DBG (5, "WARNING: unable to reserve scanner: device busy\n");
1116 scanner->scanning = SANE_FALSE;
1120 prescan (scanner);
1121 if(scanner->LS<2)
1122 { get_internal_info(scanner);
1124 coolscan_get_window_param (scanner,1);
1125 scanner->scanning = SANE_FALSE;
1126 coolscan_give_scanner (scanner);
1286 DBG (5, "identify_scanner: not a scanner\n");
1323 DBG (10, "Found Nikon scanner %sversion %s on device %s\n",
1735 get_inquiery_LS30(s); /* Info about scanner*/
1741 s->cont = 0; /* do not continue if scanner is unknown */
2007 do_eof (Coolscan_t * scanner)
2011 if (scanner->pipe >= 0)
2013 close (scanner->pipe);
2014 scanner->pipe = -1;
2020 do_cancel (Coolscan_t * scanner)
2023 swap_res (scanner);
2024 scanner->scanning = SANE_FALSE;
2026 do_eof (scanner); /* close pipe and reposition scanner */
2028 if (sanei_thread_is_valid (scanner->reader_pid))
2035 sanei_thread_kill (scanner->reader_pid);
2036 while (sanei_thread_waitpid(scanner->reader_pid, &exit_status) !=
2037 scanner->reader_pid );
2038 sanei_thread_invalidate (scanner->reader_pid);
2041 if (scanner->sfd >= 0)
2043 coolscan_give_scanner (scanner);
2045 sanei_scsi_close (scanner->sfd);
2046 scanner->sfd = -1;
2068 DBG (5, "attach_scanner: scanner already attached (is ok)!\n");
2100 DBG (1, "attach_scanner: scanner-identification failed\n");
2118 dev->sane.type = "slide scanner";
2181 import: unsigned char * rgbimat - RGBI - matrix from scanner
2268 import: unsigned char * rgbimat - RGBI - matrix from scanner
2281 static int RGBIfix(Coolscan_t * scanner,
2317 if(scanner->negative)
2336 import: unsigned char * rgbimat - RGBI - matrix from scanner
2349 static int RGBIfix16(Coolscan_t * scanner,
2363 (void) scanner; (void) lutr; (void) lutg; (void) lutb; (void) luti;
2390 import: unsigned char * rgbimat - RGB - matrix from scanner
2435 import: unsigned char * rgbimat - RGBI - matrix from scanner
2546 Coolscan_t * scanner = (Coolscan_t*)data;
2551 close (scanner->pipe);
2552 scanner->pipe = -1;
2572 fp = fdopen ( scanner->reader_fds, "w");
2581 data_left = scan_bytes_per_line (scanner) *
2582 lines_per_scan (scanner);
2584 /*scanner->row_bufsize = sanei_scsi_max_request_size;*/
2585 coolscan_trim_rowbufsize (scanner); /* trim bufsize */
2588 data_left, scanner->row_bufsize);
2593 /* wait_scanner(scanner); */
2596 data_to_read = (data_left < scanner->row_bufsize) ?
2597 data_left : scanner->row_bufsize;
2601 status = coolscan_read_data_block (scanner
2609 DBG (1, "reader_process: unable to get image data from scanner!\n");
2614 if (scanner->LS == 1) { /* mirror image for LS-1000 */
2615 bpl = scan_bytes_per_line(scanner);
2621 if (scanner->colormode == RGB) {
2623 r_data=scanner->buffer[lineOffset + j];
2624 g_data=scanner->buffer[lineOffset + j + 1];
2625 b_data=scanner->buffer[lineOffset + j + 2];
2627 scanner->buffer[lineOffset + j] =
2628 scanner->buffer[lineOffset + bpl -1 - j - 2 ];
2629 scanner->buffer[lineOffset + j + 1] =
2630 scanner->buffer[lineOffset + bpl -1 - j - 1 ];
2631 scanner->buffer[lineOffset + j + 2] =
2632 scanner->buffer[lineOffset + bpl -1 - j ];
2634 scanner->buffer[lineOffset + bpl -1 - j - 2 ] = r_data;
2635 scanner->buffer[lineOffset + bpl -1 - j - 1] = g_data;
2636 scanner->buffer[lineOffset + bpl -1 - j] = b_data;
2641 r_data=scanner->buffer[lineOffset + j];
2642 scanner->buffer[lineOffset + j] =
2643 scanner->buffer[lineOffset + bpl - 1 - j];
2644 scanner->buffer[lineOffset + bpl - 1 - j] = r_data;
2649 if(scanner->colormode==RGBI)
2651 if(scanner->bits_per_color>8)
2653 RGBIfix16(scanner, (unsigned short * ) scanner->buffer,
2654 (unsigned short * )scanner->obuffer,
2655 data_to_read/8,scanner->lutr,
2656 scanner->lutg,scanner->lutb,scanner->luti);
2660 RGBIfix(scanner,scanner->buffer,scanner->obuffer,
2661 data_to_read/4,scanner->lutr,
2662 scanner->lutg,scanner->lutb,scanner->luti);
2665 else if((scanner->colormode==GREYSCALE)&&(scanner->LS>=2))
2668 rgb2g(scanner->buffer,scanner->obuffer,data_to_write);
2672 memcpy (scanner->obuffer, scanner->buffer,data_to_read);
2674 if((!scanner->low_byte_first)&&(scanner->bits_per_color>8))
2676 { h=scanner->obuffer[i];
2677 scanner->obuffer[i]=scanner->obuffer[i+1];
2679 scanner->obuffer[i]=h;
2682 fwrite (scanner->obuffer, 1, data_to_write, fp);
2698 init_options (Coolscan_t * scanner)
2705 memset (scanner->opt, 0, sizeof (scanner->opt));
2709 scanner->opt[i].size = sizeof (SANE_Word);
2710 scanner->opt[i].cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT;
2713 scanner->opt[OPT_NUM_OPTS].title = SANE_TITLE_NUM_OPTIONS;
2714 scanner->opt[OPT_NUM_OPTS].desc = SANE_DESC_NUM_OPTIONS;
2715 scanner->opt[OPT_NUM_OPTS].type = SANE_TYPE_INT;
2716 scanner->opt[OPT_NUM_OPTS].cap = SANE_CAP_SOFT_DETECT;
2719 scanner->opt[OPT_MODE_GROUP].title = "Scan Mode";
2720 scanner->opt[OPT_MODE_GROUP].desc = "";
2721 scanner->opt[OPT_MODE_GROUP].type = SANE_TYPE_GROUP;
2722 scanner->opt[OPT_MODE_GROUP].cap = 0;
2723 scanner->opt[OPT_MODE_GROUP].constraint_type = SANE_CONSTRAINT_NONE;
2726 scanner->opt[OPT_MODE].name = SANE_NAME_SCAN_MODE;
2727 scanner->opt[OPT_MODE].title = SANE_TITLE_SCAN_MODE;
2728 scanner->opt[OPT_MODE].desc = SANE_DESC_SCAN_MODE;
2729 scanner->opt[OPT_MODE].type = SANE_TYPE_STRING;
2730 if(scanner->LS<2)
2731 { scanner->opt[OPT_MODE].size = max_string_size (scan_mode_list_LS20);
2732 scanner->opt[OPT_MODE].constraint_type = SANE_CONSTRAINT_STRING_LIST;
2733 scanner->opt[OPT_MODE].constraint.string_list = scan_mode_list_LS20;
2736 { scanner->opt[OPT_MODE].size = max_string_size (scan_mode_list_LS30);
2737 scanner->opt[OPT_MODE].constraint_type = SANE_CONSTRAINT_STRING_LIST;
2738 scanner->opt[OPT_MODE].constraint.string_list = scan_mode_list_LS30;
2745 if (!scanner->autofeeder)
2747 scanner->opt[OPT_SOURCE].cap = SANE_CAP_INACTIVE;
2750 scanner->opt[OPT_SOURCE].name = SANE_NAME_SCAN_SOURCE;
2751 scanner->opt[OPT_SOURCE].title = SANE_TITLE_SCAN_SOURCE;
2752 scanner->opt[OPT_SOURCE].desc = SANE_DESC_SCAN_SOURCE;
2753 scanner->opt[OPT_SOURCE].type = SANE_TYPE_STRING;
2754 scanner->opt[OPT_SOURCE].size = max_string_size (source_list);
2755 scanner->opt[OPT_SOURCE].constraint_type = SANE_CONSTRAINT_STRING_LIST;
2756 scanner->opt[OPT_SOURCE].constraint.string_list = source_list;
2759 scanner->opt[OPT_TYPE].name = "type";
2760 scanner->opt[OPT_TYPE].title = "Film type";
2761 scanner->opt[OPT_TYPE].desc =
2763 scanner->opt[OPT_TYPE].type = SANE_TYPE_STRING;
2764 scanner->opt[OPT_TYPE].size = max_string_size (type_list);
2765 scanner->opt[OPT_TYPE].constraint_type = SANE_CONSTRAINT_STRING_LIST;
2766 scanner->opt[OPT_TYPE].constraint.string_list = type_list;
2768 scanner->opt[OPT_PRESCAN].name = "prescan";
2769 scanner->opt[OPT_PRESCAN].title = "Prescan";
2770 scanner->opt[OPT_PRESCAN].desc =
2772 scanner->opt[OPT_PRESCAN].type = SANE_TYPE_BOOL;
2773 scanner->opt[OPT_PRESCAN].unit = SANE_UNIT_NONE;
2775 scanner->opt[OPT_PRESCAN_NOW].name = "prescan now";
2776 scanner->opt[OPT_PRESCAN_NOW].title = "Prescan now";
2777 scanner->opt[OPT_PRESCAN_NOW].desc =
2779 scanner->opt[OPT_PRESCAN_NOW].type = SANE_TYPE_BUTTON;
2780 scanner->opt[OPT_PRESCAN_NOW].unit = SANE_UNIT_NONE;
2781 scanner->opt[OPT_PRESCAN_NOW].size = 0;
2782 scanner->opt[OPT_PRESCAN_NOW].cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT;
2783 scanner->opt[OPT_PRESCAN_NOW].constraint_type = SANE_CONSTRAINT_NONE;
2784 scanner->opt[OPT_PRESCAN_NOW].constraint.string_list = 0;
2790 if (scanner->LS==2)
2794 if (scanner->LS==3)
2801 scanner->opt[OPT_BIT_DEPTH].name = SANE_NAME_BIT_DEPTH;
2802 scanner->opt[OPT_BIT_DEPTH].title = SANE_TITLE_BIT_DEPTH;
2803 scanner->opt[OPT_BIT_DEPTH].desc = SANE_DESC_BIT_DEPTH;
2804 scanner->opt[OPT_BIT_DEPTH].type = SANE_TYPE_INT;
2805 scanner->opt[OPT_BIT_DEPTH].unit = SANE_UNIT_BIT;
2806 scanner->opt[OPT_BIT_DEPTH].constraint_type = SANE_CONSTRAINT_WORD_LIST;
2807 scanner->opt[OPT_BIT_DEPTH].constraint.word_list = bit_depth_list;
2810 scanner->opt[OPT_RESOLUTION].name = SANE_NAME_SCAN_RESOLUTION;
2811 scanner->opt[OPT_RESOLUTION].title = SANE_TITLE_SCAN_RESOLUTION;
2812 scanner->opt[OPT_RESOLUTION].desc = SANE_DESC_SCAN_RESOLUTION;
2813 scanner->opt[OPT_RESOLUTION].type = SANE_TYPE_INT;
2814 scanner->opt[OPT_RESOLUTION].unit = SANE_UNIT_DPI;
2815 scanner->opt[OPT_RESOLUTION].constraint_type = SANE_CONSTRAINT_WORD_LIST;
2816 scanner->opt[OPT_RESOLUTION].constraint.word_list = resolution_list;
2818 scanner->opt[OPT_PREVIEW_RESOLUTION].name = "preview-resolution";
2819 scanner->opt[OPT_PREVIEW_RESOLUTION].title = "Preview resolution";
2820 scanner->opt[OPT_PREVIEW_RESOLUTION].desc = SANE_DESC_SCAN_RESOLUTION;
2821 scanner->opt[OPT_PREVIEW_RESOLUTION].type = SANE_TYPE_INT;
2822 scanner->opt[OPT_PREVIEW_RESOLUTION].unit = SANE_UNIT_DPI;
2823 scanner->opt[OPT_PREVIEW_RESOLUTION].constraint_type = SANE_CONSTRAINT_WORD_LIST;
2824 scanner->opt[OPT_PREVIEW_RESOLUTION].constraint.word_list = resolution_list;
2827 scanner->opt[OPT_GEOMETRY_GROUP].title = "Geometry";
2828 scanner->opt[OPT_GEOMETRY_GROUP].desc = "";
2829 scanner->opt[OPT_GEOMETRY_GROUP].type = SANE_TYPE_GROUP;
2830 scanner->opt[OPT_GEOMETRY_GROUP].cap = SANE_CAP_ADVANCED;
2831 scanner->opt[OPT_GEOMETRY_GROUP].constraint_type = SANE_CONSTRAINT_NONE;
2834 scanner->opt[OPT_TL_X].name = SANE_NAME_SCAN_TL_X;
2835 scanner->opt[OPT_TL_X].title = SANE_TITLE_SCAN_TL_X;
2836 scanner->opt[OPT_TL_X].desc = SANE_DESC_SCAN_TL_X;
2837 scanner->opt[OPT_TL_X].type = SANE_TYPE_FIXED;
2838 scanner->opt[OPT_TL_X].unit = SANE_UNIT_MM;
2839 scanner->opt[OPT_TL_X].constraint_type = SANE_CONSTRAINT_RANGE;
2840 scanner->opt[OPT_TL_X].constraint.range = &(scanner->x_range);
2843 scanner->opt[OPT_TL_Y].name = SANE_NAME_SCAN_TL_Y;
2844 scanner->opt[OPT_TL_Y].title = SANE_TITLE_SCAN_TL_Y;
2845 scanner->opt[OPT_TL_Y].desc = SANE_DESC_SCAN_TL_Y;
2846 scanner->opt[OPT_TL_Y].type = SANE_TYPE_FIXED;
2847 scanner->opt[OPT_TL_Y].unit = SANE_UNIT_MM;
2848 scanner->opt[OPT_TL_Y].constraint_type = SANE_CONSTRAINT_RANGE;
2849 scanner->opt[OPT_TL_Y].constraint.range = &(scanner->y_range);
2852 scanner->opt[OPT_BR_X].name = SANE_NAME_SCAN_BR_X;
2853 scanner->opt[OPT_BR_X].title = SANE_TITLE_SCAN_BR_X;
2854 scanner->opt[OPT_BR_X].desc = SANE_DESC_SCAN_BR_X;
2855 scanner->opt[OPT_BR_X].type = SANE_TYPE_FIXED;
2856 scanner->opt[OPT_BR_X].unit = SANE_UNIT_MM;
2857 scanner->opt[OPT_BR_X].constraint_type = SANE_CONSTRAINT_RANGE;
2858 scanner->opt[OPT_BR_X].constraint.range = &(scanner->x_range);
2861 scanner->opt[OPT_BR_Y].name = SANE_NAME_SCAN_BR_Y;
2862 scanner->opt[OPT_BR_Y].title = SANE_TITLE_SCAN_BR_Y;
2863 scanner->opt[OPT_BR_Y].desc = SANE_DESC_SCAN_BR_Y;
2864 scanner->opt[OPT_BR_Y].type = SANE_TYPE_FIXED;
2865 scanner->opt[OPT_BR_Y].unit = SANE_UNIT_MM;
2866 scanner->opt[OPT_BR_Y].constraint_type = SANE_CONSTRAINT_RANGE;
2867 scanner->opt[OPT_BR_Y].constraint.range = &(scanner->y_range);
2873 scanner->opt[OPT_ENHANCEMENT_GROUP].title = "Enhancement";
2874 scanner->opt[OPT_ENHANCEMENT_GROUP].desc = "";
2875 scanner->opt[OPT_ENHANCEMENT_GROUP].type = SANE_TYPE_GROUP;
2876 scanner->opt[OPT_ENHANCEMENT_GROUP].cap = 0;
2877 scanner->opt[OPT_ENHANCEMENT_GROUP].constraint_type = SANE_CONSTRAINT_NONE;
2880 scanner->opt[OPT_GAMMA_BIND].name = "gamma-bind";
2881 scanner->opt[OPT_GAMMA_BIND].title = "Gamma bind";
2882 scanner->opt[OPT_GAMMA_BIND].desc =
2884 scanner->opt[OPT_GAMMA_BIND].type = SANE_TYPE_BOOL;
2885 scanner->opt[OPT_GAMMA_BIND].unit = SANE_UNIT_NONE;
2888 scanner->opt[OPT_ANALOG_GAMMA].name = "analog_gamma";
2889 scanner->opt[OPT_ANALOG_GAMMA].title = "Analog Gamma";
2890 scanner->opt[OPT_ANALOG_GAMMA].desc = "Analog Gamma";
2891 scanner->opt[OPT_ANALOG_GAMMA].type = SANE_TYPE_BOOL;
2892 scanner->opt[OPT_ANALOG_GAMMA].unit = SANE_UNIT_NONE;
2893 if (!scanner->analoggamma)
2895 scanner->opt[OPT_ANALOG_GAMMA].cap = SANE_CAP_INACTIVE;
2898 scanner->opt[OPT_AVERAGING].name = "averaging";
2899 scanner->opt[OPT_AVERAGING].title = "Averaging";
2900 scanner->opt[OPT_AVERAGING].desc = "Averaging";
2901 scanner->opt[OPT_AVERAGING].type = SANE_TYPE_BOOL;
2902 scanner->opt[OPT_AVERAGING].unit = SANE_UNIT_NONE;
2905 scanner->opt[OPT_RGB_CONTROL].name = "rgb-control";
2906 scanner->opt[OPT_RGB_CONTROL].title = "RGB control";
2907 scanner->opt[OPT_RGB_CONTROL].desc =
2909 scanner->opt[OPT_RGB_CONTROL].type = SANE_TYPE_BOOL;
2910 scanner->opt[OPT_RGB_CONTROL].unit = SANE_UNIT_NONE;
2911 if(scanner->LS>=2)
2912 { scanner->opt[OPT_RGB_CONTROL].cap |= SANE_CAP_INACTIVE;
2918 scanner->opt[OPT_BRIGHTNESS].name = SANE_NAME_BRIGHTNESS;
2919 scanner->opt[OPT_BRIGHTNESS].title = SANE_TITLE_BRIGHTNESS;
2920 scanner->opt[OPT_BRIGHTNESS].desc = SANE_DESC_BRIGHTNESS;
2921 scanner->opt[OPT_BRIGHTNESS].type = SANE_TYPE_INT;
2922 scanner->opt[OPT_BRIGHTNESS].unit = SANE_UNIT_NONE;
2923 scanner->opt[OPT_BRIGHTNESS].constraint_type = SANE_CONSTRAINT_RANGE;
2924 scanner->opt[OPT_BRIGHTNESS].constraint.range = &brightness_range;
2925 if(scanner->LS>=2)
2926 { scanner->opt[OPT_BRIGHTNESS].cap |= SANE_CAP_INACTIVE;
2930 scanner->opt[OPT_R_BRIGHTNESS].name = "red-brightness";
2931 scanner->opt[OPT_R_BRIGHTNESS].title = "Red brightness";
2932 scanner->opt[OPT_R_BRIGHTNESS].desc = SANE_DESC_BRIGHTNESS;
2933 scanner->opt[OPT_R_BRIGHTNESS].type = SANE_TYPE_INT;
2934 scanner->opt[OPT_R_BRIGHTNESS].unit = SANE_UNIT_NONE;
2935 scanner->opt[OPT_R_BRIGHTNESS].constraint_type = SANE_CONSTRAINT_RANGE;
2936 scanner->opt[OPT_R_BRIGHTNESS].constraint.range = &brightness_range;
2937 scanner->opt[OPT_R_BRIGHTNESS].cap |= SANE_CAP_INACTIVE;
2939 scanner->opt[OPT_G_BRIGHTNESS].name = "green-brightness";
2940 scanner->opt[OPT_G_BRIGHTNESS].title = "Green brightness";
2941 scanner->opt[OPT_G_BRIGHTNESS].desc = SANE_DESC_BRIGHTNESS;
2942 scanner->opt[OPT_G_BRIGHTNESS].type = SANE_TYPE_INT;
2943 scanner->opt[OPT_G_BRIGHTNESS].unit = SANE_UNIT_NONE;
2944 scanner->opt[OPT_G_BRIGHTNESS].constraint_type = SANE_CONSTRAINT_RANGE;
2945 scanner->opt[OPT_G_BRIGHTNESS].constraint.range = &brightness_range;
2946 scanner->opt[OPT_G_BRIGHTNESS].cap |= SANE_CAP_INACTIVE;
2948 scanner->opt[OPT_B_BRIGHTNESS].name = "blue-brightness";
2949 scanner->opt[OPT_B_BRIGHTNESS].title = "Blue brightness";
2950 scanner->opt[OPT_B_BRIGHTNESS].desc = SANE_DESC_BRIGHTNESS;
2951 scanner->opt[OPT_B_BRIGHTNESS].type = SANE_TYPE_INT;
2952 scanner->opt[OPT_B_BRIGHTNESS].unit = SANE_UNIT_NONE;
2953 scanner->opt[OPT_B_BRIGHTNESS].constraint_type = SANE_CONSTRAINT_RANGE;
2954 scanner->opt[OPT_B_BRIGHTNESS].constraint.range = &brightness_range;
2955 scanner->opt[OPT_B_BRIGHTNESS].cap |= SANE_CAP_INACTIVE;
2958 scanner->opt[OPT_CONTRAST].name = SANE_NAME_CONTRAST;
2959 scanner->opt[OPT_CONTRAST].title = SANE_TITLE_CONTRAST;
2960 scanner->opt[OPT_CONTRAST].desc = SANE_DESC_CONTRAST;
2961 scanner->opt[OPT_CONTRAST].type = SANE_TYPE_INT;
2962 scanner->opt[OPT_CONTRAST].unit = SANE_UNIT_NONE;
2963 scanner->opt[OPT_CONTRAST].constraint_type = SANE_CONSTRAINT_RANGE;
2964 scanner->opt[OPT_CONTRAST].constraint.range = &contrast_range;
2965 if(scanner->LS>=2)
2966 { scanner->opt[OPT_CONTRAST].cap |= SANE_CAP_INACTIVE;
2970 scanner->opt[OPT_R_CONTRAST].name = "red-contrast";
2971 scanner->opt[OPT_R_CONTRAST].title = "Red contrast";
2972 scanner->opt[OPT_R_CONTRAST].desc = SANE_DESC_CONTRAST;
2973 scanner->opt[OPT_R_CONTRAST].type = SANE_TYPE_INT;
2974 scanner->opt[OPT_R_CONTRAST].unit = SANE_UNIT_NONE;
2975 scanner->opt[OPT_R_CONTRAST].constraint_type = SANE_CONSTRAINT_RANGE;
2976 scanner->opt[OPT_R_CONTRAST].constraint.range = &contrast_range;
2977 scanner->opt[OPT_R_CONTRAST].cap |= SANE_CAP_INACTIVE;
2979 scanner->opt[OPT_G_CONTRAST].name = "green-contrast";
2980 scanner->opt[OPT_G_CONTRAST].title = "Green contrast";
2981 scanner->opt[OPT_G_CONTRAST].desc = SANE_DESC_CONTRAST;
2982 scanner->opt[OPT_G_CONTRAST].type = SANE_TYPE_INT;
2983 scanner->opt[OPT_G_CONTRAST].unit = SANE_UNIT_NONE;
2984 scanner->opt[OPT_G_CONTRAST].constraint_type = SANE_CONSTRAINT_RANGE;
2985 scanner->opt[OPT_G_CONTRAST].constraint.range = &contrast_range;
2986 scanner->opt[OPT_G_CONTRAST].cap |= SANE_CAP_INACTIVE;
2988 scanner->opt[OPT_B_CONTRAST].name = "blue-contrast";
2989 scanner->opt[OPT_B_CONTRAST].title = "Blue contrast";
2990 scanner->opt[OPT_B_CONTRAST].desc = SANE_DESC_CONTRAST;
2991 scanner->opt[OPT_B_CONTRAST].type = SANE_TYPE_INT;
2992 scanner->opt[OPT_B_CONTRAST].unit = SANE_UNIT_NONE;
2993 scanner->opt[OPT_B_CONTRAST].constraint_type = SANE_CONSTRAINT_RANGE;
2994 scanner->opt[OPT_B_CONTRAST].constraint.range = &contrast_range;
2995 scanner->opt[OPT_B_CONTRAST].cap |= SANE_CAP_INACTIVE;
2997 scanner->opt[OPT_EXPOSURE].name = "exposure";
2998 scanner->opt[OPT_EXPOSURE].title = "Exposure";
2999 scanner->opt[OPT_EXPOSURE].desc = "";
3000 scanner->opt[OPT_EXPOSURE].type = SANE_TYPE_INT;
3001 scanner->opt[OPT_EXPOSURE].cap &= ~SANE_CAP_INACTIVE;
3002 scanner->opt[OPT_EXPOSURE].unit = SANE_UNIT_PERCENT;
3003 scanner->opt[OPT_EXPOSURE].constraint_type = SANE_CONSTRAINT_RANGE;
3004 scanner->opt[OPT_EXPOSURE].constraint.range = &exposure_range;
3006 scanner->opt[OPT_R_EXPOSURE].name = "red-exposure";
3007 scanner->opt[OPT_R_EXPOSURE].title = "Red exposure";
3008 scanner->opt[OPT_R_EXPOSURE].desc = "";
3009 scanner->opt[OPT_R_EXPOSURE].type = SANE_TYPE_INT;
3010 scanner->opt[OPT_R_EXPOSURE].cap |= SANE_CAP_INACTIVE;
3011 scanner->opt[OPT_R_EXPOSURE].unit = SANE_UNIT_PERCENT;
3012 scanner->opt[OPT_R_EXPOSURE].constraint_type = SANE_CONSTRAINT_RANGE;
3013 scanner->opt[OPT_R_EXPOSURE].constraint.range = &exposure_range;
3015 scanner->opt[OPT_G_EXPOSURE].name = "green-exposure";
3016 scanner->opt[OPT_G_EXPOSURE].title = "Green exposure";
3017 scanner->opt[OPT_G_EXPOSURE].desc = "";
3018 scanner->opt[OPT_G_EXPOSURE].type = SANE_TYPE_INT;
3019 scanner->opt[OPT_G_EXPOSURE].unit = SANE_UNIT_PERCENT;
3020 scanner->opt[OPT_G_EXPOSURE].constraint_type = SANE_CONSTRAINT_RANGE;
3021 scanner->opt[OPT_G_EXPOSURE].constraint.range = &exposure_range;
3022 scanner->opt[OPT_G_EXPOSURE].cap |= SANE_CAP_INACTIVE;
3024 scanner->opt[OPT_B_EXPOSURE].name = "blue-exposure";
3025 scanner->opt[OPT_B_EXPOSURE].title = "Blue exposre";
3026 scanner->opt[OPT_B_EXPOSURE].desc = "";
3027 scanner->opt[OPT_B_EXPOSURE].type = SANE_TYPE_INT;
3028 scanner->opt[OPT_B_EXPOSURE].unit = SANE_UNIT_PERCENT;
3029 scanner->opt[OPT_B_EXPOSURE].constraint_type = SANE_CONSTRAINT_RANGE;
3030 scanner->opt[OPT_B_EXPOSURE].constraint.range = &exposure_range;
3031 scanner->opt[OPT_B_EXPOSURE].cap |= SANE_CAP_INACTIVE;
3032 if(scanner->LS>=2)
3033 { scanner->opt[OPT_R_EXPOSURE].cap &= ~SANE_CAP_INACTIVE;
3034 scanner->opt[OPT_G_EXPOSURE].cap &= ~SANE_CAP_INACTIVE;
3035 scanner->opt[OPT_B_EXPOSURE].cap &= ~SANE_CAP_INACTIVE;
3036 scanner->opt[OPT_EXPOSURE].cap |= SANE_CAP_INACTIVE;
3039 scanner->opt[OPT_R_SHIFT].name = "red-shift";
3040 scanner->opt[OPT_R_SHIFT].title = "Red shift";
3041 scanner->opt[OPT_R_SHIFT].desc = "";
3042 scanner->opt[OPT_R_SHIFT].type = SANE_TYPE_INT;
3043 scanner->opt[OPT_R_SHIFT].unit = SANE_UNIT_NONE;
3044 scanner->opt[OPT_R_SHIFT].constraint_type = SANE_CONSTRAINT_RANGE;
3045 scanner->opt[OPT_R_SHIFT].constraint.range = &shift_range;
3046 if(scanner->LS>=2)
3047 { scanner->opt[OPT_R_SHIFT].cap |= SANE_CAP_INACTIVE;
3051 scanner->opt[OPT_G_SHIFT].name = "green-shift";
3052 scanner->opt[OPT_G_SHIFT].title = "Green shift";
3053 scanner->opt[OPT_G_SHIFT].desc = "";
3054 scanner->opt[OPT_G_SHIFT].type = SANE_TYPE_INT;
3055 scanner->opt[OPT_G_SHIFT].unit = SANE_UNIT_NONE;
3056 scanner->opt[OPT_G_SHIFT].constraint_type = SANE_CONSTRAINT_RANGE;
3057 scanner->opt[OPT_G_SHIFT].constraint.range = &shift_range;
3058 if(scanner->LS>=2)
3059 { scanner->opt[OPT_G_SHIFT].cap |= SANE_CAP_INACTIVE;
3063 scanner->opt[OPT_B_SHIFT].name = "blue-shift";
3064 scanner->opt[OPT_B_SHIFT].title = "Blue shift";
3065 scanner->opt[OPT_B_SHIFT].desc = "";
3066 scanner->opt[OPT_B_SHIFT].type = SANE_TYPE_INT;
3067 scanner->opt[OPT_B_SHIFT].unit = SANE_UNIT_NONE;
3068 scanner->opt[OPT_B_SHIFT].constraint_type = SANE_CONSTRAINT_RANGE;
3069 scanner->opt[OPT_B_SHIFT].constraint.range = &shift_range;
3070 if(scanner->LS>=2)
3071 { scanner->opt[OPT_B_SHIFT].cap |= SANE_CAP_INACTIVE;
3075 scanner->opt[OPT_GAMMA_VECTOR].name = SANE_NAME_GAMMA_VECTOR;
3076 scanner->opt[OPT_GAMMA_VECTOR].title = SANE_TITLE_GAMMA_VECTOR;
3077 scanner->opt[OPT_GAMMA_VECTOR].desc = SANE_DESC_GAMMA_VECTOR;
3078 scanner->opt[OPT_GAMMA_VECTOR].type = SANE_TYPE_INT;
3079 if (scanner->LS == 1)
3081 scanner->opt[OPT_GAMMA_VECTOR].cap = SANE_CAP_INACTIVE;
3083 scanner->opt[OPT_GAMMA_VECTOR].unit = SANE_UNIT_NONE;
3084 switch(scanner->LS)
3086 scanner->opt[OPT_GAMMA_VECTOR].constraint.range = &gamma_range_8;
3087 scanner->lutlength=2048;
3090 scanner->opt[OPT_GAMMA_VECTOR].constraint.range = &gamma_range_9;
3091 scanner->lutlength=512;
3094 scanner->opt[OPT_GAMMA_VECTOR].constraint.range = &gamma_range_10;
3095 scanner->lutlength=1024;
3098 scanner->opt[OPT_GAMMA_VECTOR].constraint.range = &gamma_range_12;
3099 scanner->lutlength=4096;
3102 scanner->opt[OPT_GAMMA_VECTOR].size = scanner->lutlength * sizeof (SANE_Word);
3103 scanner->opt[OPT_GAMMA_VECTOR].constraint_type = SANE_CONSTRAINT_RANGE;
3106 scanner->opt[OPT_GAMMA_VECTOR_R].name = SANE_NAME_GAMMA_VECTOR_R;
3107 scanner->opt[OPT_GAMMA_VECTOR_R].title = SANE_TITLE_GAMMA_VECTOR_R;
3108 scanner->opt[OPT_GAMMA_VECTOR_R].desc = SANE_DESC_GAMMA_VECTOR_R;
3109 scanner->opt[OPT_GAMMA_VECTOR_R].type = SANE_TYPE_INT;
3110 scanner->opt[OPT_GAMMA_VECTOR_R].cap |= SANE_CAP_INACTIVE;
3111 scanner->opt[OPT_GAMMA_VECTOR_R].unit = SANE_UNIT_NONE;
3112 switch(scanner->LS)
3114 scanner->opt[OPT_GAMMA_VECTOR_R].constraint.range = &gamma_range_8;
3115 scanner->lutlength=2048;
3118 scanner->opt[OPT_GAMMA_VECTOR_R].constraint.range = &gamma_range_9;
3119 scanner->lutlength=512;
3122 scanner->opt[OPT_GAMMA_VECTOR_R].constraint.range = &gamma_range_10;
3123 scanner->lutlength=1024;
3126 scanner->opt[OPT_GAMMA_VECTOR_R].constraint.range = &gamma_range_12;
3127 scanner->lutlength=4096;
3130 scanner->opt[OPT_GAMMA_VECTOR_R].size = scanner->lutlength * sizeof (SANE_Word);
3131 scanner->opt[OPT_GAMMA_VECTOR_R].constraint_type = SANE_CONSTRAINT_RANGE;
3134 scanner->opt[OPT_GAMMA_VECTOR_G].name = SANE_NAME_GAMMA_VECTOR_G;
3135 scanner->opt[OPT_GAMMA_VECTOR_G].title = SANE_TITLE_GAMMA_VECTOR_G;
3136 scanner->opt[OPT_GAMMA_VECTOR_G].desc = SANE_DESC_GAMMA_VECTOR_G;
3137 scanner->opt[OPT_GAMMA_VECTOR_G].type = SANE_TYPE_INT;
3138 scanner->opt[OPT_GAMMA_VECTOR_G].cap |= SANE_CAP_INACTIVE;
3139 scanner->opt[OPT_GAMMA_VECTOR_G].unit = SANE_UNIT_NONE;
3140 switch(scanner->LS)
3142 scanner->opt[OPT_GAMMA_VECTOR_G].constraint.range = &gamma_range_8;
3143 scanner->lutlength=2048;
3146 scanner->opt[OPT_GAMMA_VECTOR_G].constraint.range = &gamma_range_9;
3147 scanner->lutlength=512;
3150 scanner->opt[OPT_GAMMA_VECTOR_G].constraint.range = &gamma_range_10;
3151 scanner->lutlength=1024;
3154 scanner->opt[OPT_GAMMA_VECTOR_G].constraint.range = &gamma_range_12;
3155 scanner->lutlength=4096;
3158 scanner->opt[OPT_GAMMA_VECTOR_G].size = scanner->lutlength * sizeof (SANE_Word);
3159 scanner->opt[OPT_GAMMA_VECTOR_G].constraint_type = SANE_CONSTRAINT_RANGE;
3162 scanner->opt[OPT_GAMMA_VECTOR_B].name = SANE_NAME_GAMMA_VECTOR_B;
3163 scanner->opt[OPT_GAMMA_VECTOR_B].title = SANE_TITLE_GAMMA_VECTOR_B;
3164 scanner->opt[OPT_GAMMA_VECTOR_B].desc = SANE_DESC_GAMMA_VECTOR_B;
3165 scanner->opt[OPT_GAMMA_VECTOR_B].type = SANE_TYPE_INT;
3166 scanner->opt[OPT_GAMMA_VECTOR_B].cap |= SANE_CAP_INACTIVE;
3167 scanner->opt[OPT_GAMMA_VECTOR_B].unit = SANE_UNIT_NONE;
3168 switch(scanner->LS)
3170 scanner->opt[OPT_GAMMA_VECTOR_B].constraint.range = &gamma_range_8;
3171 scanner->lutlength=2048;
3174 scanner->opt[OPT_GAMMA_VECTOR_B].constraint.range = &gamma_range_9;
3175 scanner->lutlength=512;
3178 scanner->opt[OPT_GAMMA_VECTOR_B].constraint.range = &gamma_range_10;
3179 scanner->lutlength=1024;
3182 scanner->opt[OPT_GAMMA_VECTOR_B].constraint.range = &gamma_range_12;
3183 scanner->lutlength=4096;
3186 scanner->opt[OPT_GAMMA_VECTOR_B].size = scanner->lutlength * sizeof (SANE_Word);
3187 scanner->opt[OPT_GAMMA_VECTOR_B].constraint_type = SANE_CONSTRAINT_RANGE;
3193 scanner->opt[OPT_ADVANCED_GROUP].title = "Advanced";
3194 scanner->opt[OPT_ADVANCED_GROUP].desc = "";
3195 scanner->opt[OPT_ADVANCED_GROUP].type = SANE_TYPE_GROUP;
3196 scanner->opt[OPT_ADVANCED_GROUP].cap = SANE_CAP_ADVANCED;
3197 scanner->opt[OPT_ADVANCED_GROUP].constraint_type = SANE_CONSTRAINT_NONE;
3200 scanner->opt[OPT_PREVIEW].name = SANE_NAME_PREVIEW;
3201 scanner->opt[OPT_PREVIEW].title = SANE_TITLE_PREVIEW;
3202 scanner->opt[OPT_PREVIEW].desc = SANE_DESC_PREVIEW;
3203 scanner->opt[OPT_PREVIEW].type = SANE_TYPE_BOOL;
3206 scanner->opt[OPT_AUTOFOCUS].name = "Autofocus";
3207 scanner->opt[OPT_AUTOFOCUS].title ="Autofocus";
3208 scanner->opt[OPT_AUTOFOCUS].desc = "When to do autofocussing";
3209 scanner->opt[OPT_AUTOFOCUS].type = SANE_TYPE_STRING;
3210 scanner->opt[OPT_AUTOFOCUS].size = max_string_size (autofocus_mode_list);
3211 scanner->opt[OPT_AUTOFOCUS].constraint_type = SANE_CONSTRAINT_STRING_LIST;
3212 scanner->opt[OPT_AUTOFOCUS].constraint.string_list = autofocus_mode_list;
3214 scanner->opt[OPT_IRED_RED].name = "IRED cor. red";
3215 scanner->opt[OPT_IRED_RED].title ="IRED cor. red";
3216 scanner->opt[OPT_IRED_RED].desc = "Correction of infrared from red";
3217 scanner->opt[OPT_IRED_RED].type = SANE_TYPE_INT;
3218 scanner->opt[OPT_IRED_RED].unit = SANE_UNIT_NONE;
3219 scanner->opt[OPT_IRED_RED].constraint_type = SANE_CONSTRAINT_RANGE;
3220 scanner->opt[OPT_IRED_RED].constraint.range = &gamma_range_8;
3221 scanner->opt[OPT_IRED_RED].cap |= SANE_CAP_ADVANCED;
3222 if(scanner->LS<2)
3223 { scanner->opt[OPT_IRED_RED].cap |= SANE_CAP_INACTIVE;
3228 /* scanner->opt[OPT_PREVIEW].cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; */
3252 attach_scanner ("/dev/scanner", 0); /* no config-file: /dev/scanner */
3378 Coolscan_t *scanner = handle;
3384 return &scanner->opt[option];
3422 Coolscan_t *scanner = handle;
3429 if (scanner->scanning)
3435 cap = scanner->opt[option].cap;
3445 *(SANE_Word *) val = SANE_FIX (iluToMm (scanner->tlx));
3449 *(SANE_Word *) val = SANE_FIX (iluToMm (scanner->tly));
3453 *(SANE_Word *) val = SANE_FIX (iluToMm (scanner->brx));
3457 *(SANE_Word *) val = SANE_FIX (iluToMm (scanner->bry));
3461 *(SANE_Word *) val = scanner->preview;
3465 switch(scanner->autofocus)
3470 case AF_SCAN:if(scanner->LS>=2) strcpy (val,scanStr);
3472 case AF_PREANDSCAN:if(scanner->LS>=2) strcpy (val,preandscanStr);
3482 *(SANE_Word *) val = resDivToVal (scanner->x_nres);
3486 *(SANE_Word *) val = resDivToVal (scanner->x_p_nres);
3490 *(SANE_Word *) val = scanner->bits_per_color;
3494 *(SANE_Word *) val = scanner->contrast - 128;
3498 *(SANE_Word *) val = scanner->contrast_R - 128;
3502 *(SANE_Word *) val = scanner->contrast_G - 128;
3506 *(SANE_Word *) val = scanner->contrast_B - 128;
3510 *(SANE_Word *) val = scanner->brightness - 128;
3514 *(SANE_Word *) val = scanner->brightness_R - 128;
3518 *(SANE_Word *) val = scanner->brightness_G - 128;
3522 *(SANE_Word *) val = scanner->brightness_B - 128;
3526 *(SANE_Word *) val = scanner->exposure_R * 2;
3530 *(SANE_Word *) val = scanner->exposure_R * 2;
3534 *(SANE_Word *) val = scanner->exposure_G * 2;
3538 *(SANE_Word *) val = scanner->exposure_B * 2;
3542 *(SANE_Word *) val = scanner->shift_R - 128;
3546 *(SANE_Word *) val = scanner->shift_G - 128;
3550 *(SANE_Word *) val = scanner->shift_B - 128;
3555 *(SANE_Word *) val = scanner->ired_red;
3560 strcpy (val, ((scanner->negative) ? negativeStr : positiveStr));
3564 switch(scanner->colormode)
3569 case RGBI:if(scanner->LS>=2) strcpy (val,rgbiStr);
3572 case IRED:if(scanner->LS>=2) strcpy (val,iredStr);
3584 *(SANE_Word *) val = (scanner->prescan) ? SANE_TRUE : SANE_FALSE;
3591 *(SANE_Word *) val = (scanner->rgb_control) ? SANE_TRUE : SANE_FALSE;
3595 *(SANE_Word *) val = (scanner->gamma_bind) ? SANE_TRUE : SANE_FALSE;
3600 (scanner->analog_gamma_r) ? SANE_TRUE : SANE_FALSE;
3604 *(SANE_Word *) val = (scanner->averaging) ? SANE_TRUE : SANE_FALSE;
3608 memcpy (val, scanner->gamma, scanner->opt[option].size);
3611 memcpy (val, scanner->gamma_r, scanner->opt[option].size);
3614 memcpy (val, scanner->gamma_g, scanner->opt[option].size);
3617 memcpy (val, scanner->gamma_b, scanner->opt[option].size);
3646 status = sanei_constrain_value (scanner->opt + option, val, info);
3653 scanner->gamma_bind = (*(SANE_Word *) val == SANE_TRUE);
3654 if (scanner->LS != 1)
3656 if (scanner->gamma_bind)
3658 scanner->opt[OPT_GAMMA_VECTOR].cap &= ~SANE_CAP_INACTIVE;
3659 scanner->opt[OPT_GAMMA_VECTOR_R].cap |= SANE_CAP_INACTIVE;
3660 scanner->opt[OPT_GAMMA_VECTOR_G].cap |= SANE_CAP_INACTIVE;
3661 scanner->opt[OPT_GAMMA_VECTOR_B].cap |= SANE_CAP_INACTIVE;
3666 scanner->opt[OPT_GAMMA_VECTOR].cap |= SANE_CAP_INACTIVE;
3667 scanner->opt[OPT_GAMMA_VECTOR_R].cap &= ~SANE_CAP_INACTIVE;
3668 scanner->opt[OPT_GAMMA_VECTOR_G].cap &= ~SANE_CAP_INACTIVE;
3669 scanner->opt[OPT_GAMMA_VECTOR_B].cap &= ~SANE_CAP_INACTIVE;
3680 scanner->analog_gamma_r = scanner->analog_gamma_g =
3681 scanner->analog_gamma_b = (*(SANE_Word *) val == SANE_TRUE);
3685 scanner->averaging = (*(SANE_Word *) val == SANE_TRUE);
3689 scanner->prescan = (*(SANE_Word *) val == SANE_TRUE);
3693 do_prescan_now(scanner);
3697 scanner->bits_per_color=(*(SANE_Word *)val);
3704 scanner->rgb_control = (*(SANE_Word *) val == SANE_TRUE);
3705 if (scanner->rgb_control)
3707 scanner->opt[OPT_BRIGHTNESS].cap |= SANE_CAP_INACTIVE;
3708 scanner->opt[OPT_CONTRAST].cap |= SANE_CAP_INACTIVE;
3709 scanner->opt[OPT_EXPOSURE].cap |= SANE_CAP_INACTIVE;
3711 scanner->opt[OPT_R_BRIGHTNESS].cap &= ~SANE_CAP_INACTIVE;
3712 scanner->opt[OPT_G_BRIGHTNESS].cap &= ~SANE_CAP_INACTIVE;
3713 scanner->opt[OPT_B_BRIGHTNESS].cap &= ~SANE_CAP_INACTIVE;
3715 scanner->opt[OPT_R_CONTRAST].cap &= ~SANE_CAP_INACTIVE;
3716 scanner->opt[OPT_G_CONTRAST].cap &= ~SANE_CAP_INACTIVE;
3717 scanner->opt[OPT_B_CONTRAST].cap &= ~SANE_CAP_INACTIVE;
3719 scanner->opt[OPT_R_EXPOSURE].cap &= ~SANE_CAP_INACTIVE;
3720 scanner->opt[OPT_G_EXPOSURE].cap &= ~SANE_CAP_INACTIVE;
3721 scanner->opt[OPT_B_EXPOSURE].cap &= ~SANE_CAP_INACTIVE;
3723 scanner->contrast_R = 128;
3724 scanner->contrast_G = 128;
3725 scanner->contrast_B = 128;
3726 scanner->brightness_R = 128;
3727 scanner->brightness_G = 128;
3728 scanner->brightness_B = 128;
3729 scanner->exposure_R = 50;
3730 scanner->exposure_G = 50;
3731 scanner->exposure_B = 50;
3735 scanner->opt[OPT_BRIGHTNESS].cap &= ~SANE_CAP_INACTIVE;
3736 scanner->opt[OPT_CONTRAST].cap &= ~SANE_CAP_INACTIVE;
3737 scanner->opt[OPT_EXPOSURE].cap &= ~SANE_CAP_INACTIVE;
3739 scanner->contrast = 128;
3740 scanner->brightness = 128;
3741 scanner->exposure_R = 50;
3742 scanner->exposure_G = 50;
3743 scanner->exposure_B = 50;
3745 scanner->opt[OPT_R_BRIGHTNESS].cap |= SANE_CAP_INACTIVE;
3746 scanner->opt[OPT_G_BRIGHTNESS].cap |= SANE_CAP_INACTIVE;
3747 scanner->opt[OPT_B_BRIGHTNESS].cap |= SANE_CAP_INACTIVE;
3749 scanner->opt[OPT_R_CONTRAST].cap |= SANE_CAP_INACTIVE;
3750 scanner->opt[OPT_G_CONTRAST].cap |= SANE_CAP_INACTIVE;
3751 scanner->opt[OPT_B_CONTRAST].cap |= SANE_CAP_INACTIVE;
3753 scanner->opt[OPT_R_EXPOSURE].cap |= SANE_CAP_INACTIVE;
3754 scanner->opt[OPT_G_EXPOSURE].cap |= SANE_CAP_INACTIVE;
3755 scanner->opt[OPT_B_EXPOSURE].cap |= SANE_CAP_INACTIVE;
3764 scanner->y_nres = scanner->x_nres =
3772 scanner->y_p_nres = scanner->x_p_nres =
3780 scanner->tlx = mmToIlu (SANE_UNFIX (*(SANE_Word *) val));
3787 scanner->tly = mmToIlu (SANE_UNFIX (*(SANE_Word *) val));
3793 scanner->brx = mmToIlu (SANE_UNFIX (*(SANE_Word *) val));
3799 scanner->bry = mmToIlu (SANE_UNFIX (*(SANE_Word *) val));
3808 scanner->preview = *(SANE_Word *) val;
3813 { scanner->autofocus=AF_NEVER;
3816 { scanner->autofocus=AF_PREVIEW;
3819 { scanner->autofocus=AF_SCAN;
3822 { scanner->autofocus=AF_PREANDSCAN;;
3827 scanner->contrast = *(SANE_Word *) val + 128;
3830 scanner->contrast_R = *(SANE_Word *) val + 128;
3833 scanner->contrast_G = *(SANE_Word *) val + 128;
3836 scanner->contrast_B = *(SANE_Word *) val + 128;
3840 scanner->brightness = *(SANE_Word *) val + 128;
3843 scanner->brightness_R = *(SANE_Word *) val + 128;
3846 scanner->brightness_G = *(SANE_Word *) val + 128;
3849 scanner->brightness_B = *(SANE_Word *) val + 128;
3853 scanner->exposure_R = *(SANE_Word *) val / 2;
3854 scanner->exposure_G = *(SANE_Word *) val / 2;
3855 scanner->exposure_B = *(SANE_Word *) val / 2;
3858 scanner->exposure_R = *(SANE_Word *) val / 2;
3861 scanner->exposure_G = *(SANE_Word *) val / 2;
3864 scanner->exposure_B = *(SANE_Word *) val / 2;
3868 scanner->shift_R = *(SANE_Word *) val + 128;
3871 scanner->shift_G = *(SANE_Word *) val + 128;
3874 scanner->shift_B = *(SANE_Word *) val + 128;
3878 scanner->ired_red= *(SANE_Word *) val;
3882 scanner->asf = (strcmp (val, "Automatic...") == 0);
3886 scanner->negative = (strcmp (val, negativeStr) == 0);
3894 { scanner->colormode=RGB;
3895 scanner->colormode_p=RGB;
3898 { scanner->colormode=GREYSCALE;
3899 scanner->colormode_p=GREYSCALE;
3902 { scanner->colormode=RGBI;
3903 scanner->colormode_p=RGB;
3906 { scanner->colormode=IRED;
3907 scanner->colormode_p=GREYSCALE;
3916 memcpy (scanner->gamma, val, scanner->opt[option].size);
3917 if(scanner->LS>2) Calc_fix_LUT(scanner);
3921 memcpy (scanner->gamma_r, val, scanner->opt[option].size);
3922 if(scanner->LS>2) Calc_fix_LUT(scanner);
3926 memcpy (scanner->gamma_g, val, scanner->opt[option].size);
3927 if(scanner->LS>2) Calc_fix_LUT(scanner);
3931 memcpy (scanner->gamma_b, val, scanner->opt[option].size);
3932 if(scanner->LS>2) Calc_fix_LUT(scanner);
3943 Coolscan_t *scanner = handle;
3946 switch(scanner->colormode)
3960 params->depth = scanner->bits_per_color>8?16:8;
3961 params->pixels_per_line = pixels_per_line (scanner);
3962 params->lines = lines_per_scan (scanner);
3963 params->bytes_per_line = write_bytes_per_line (scanner);
3990 Coolscan_t *scanner = handle;
3994 if (scanner->scanning == SANE_TRUE)
3997 if (scanner->sfd < 0)
3999 if (sanei_scsi_open (scanner->sane.name,
4000 &(scanner->sfd),
4004 scanner->sane.name);
4008 scanner->scanning = SANE_TRUE;
4011 if (coolscan_check_values (scanner) != 0)
4014 scanner->scanning = SANE_FALSE;
4015 coolscan_give_scanner (scanner);
4016 sanei_scsi_close (scanner->sfd);
4017 scanner->sfd = -1;
4021 if (coolscan_grab_scanner (scanner))
4023 sanei_scsi_close (scanner->sfd);
4024 scanner->sfd = -1;
4025 DBG (5, "WARNING: unable to reserve scanner: device busy\n");
4026 scanner->scanning = SANE_FALSE;
4031 coolscan_object_feed (scanner);
4033 swap_res (scanner);
4034 if (!scanner->preview)
4035 { if(scanner->autofocus & 0x02)
4036 { coolscan_autofocus (scanner);
4041 if(scanner->autofocus & 0x01)
4042 { coolscan_autofocus (scanner);
4044 if (scanner->prescan) {
4045 prescan (scanner);
4046 if(scanner->LS<2)
4047 { get_internal_info(scanner);
4049 coolscan_get_window_param (scanner,1);
4052 /*read_LUT(scanner); */
4053 if(scanner->LS<2)
4054 { send_LUT (scanner);
4055 coolscan_set_window_param (scanner, 0);
4056 coolscan_get_window_param (scanner,0);
4057 coolscan_start_scan (scanner);
4060 { coolscan_set_window_param (scanner, 0);
4061 send_LUT (scanner);
4062 Calc_fix_LUT(scanner);
4063 coolscan_start_scan (scanner);
4064 wait_scanner (scanner);
4065 coolscan_get_window_param (scanner,0);
4068 DBG (10, "bytes per line = %d\n", scan_bytes_per_line (scanner));
4069 DBG (10, "pixels_per_line = %d\n", pixels_per_line (scanner));
4070 DBG (10, "lines = %d\n", lines_per_scan (scanner));
4071 DBG (10, "negative = %d\n", scanner->negative);
4072 DBG (10, "brightness (halftone) = %d\n", scanner->brightness);
4073 DBG (10, "contrast (halftone) = %d\n", scanner->contrast);
4074 DBG (10, "fast preview function = %d\n", scanner->preview);
4081 swap_res (scanner);
4082 scanner->scanning = SANE_FALSE;
4083 coolscan_give_scanner (scanner);
4084 sanei_scsi_close (scanner->sfd);
4085 scanner->sfd = -1;
4089 scanner->pipe = fds[0];
4090 scanner->reader_fds = fds[1];
4091 scanner->reader_pid = sanei_thread_begin( reader_process, (void*)scanner );
4092 if (!sanei_thread_is_valid (scanner->reader_pid))
4101 close (scanner->reader_fds);
4102 scanner->reader_fds = -1;
4113 Coolscan_t *scanner = handle;
4118 nread = read (scanner->pipe, buf, max_len);
4121 if (!(scanner->scanning))
4123 return do_cancel (scanner);
4134 do_cancel (scanner);
4142 return do_eof (scanner); /* close pipe */
4166 Coolscan_t *scanner = handle;
4170 if (!scanner->scanning)
4173 if (fcntl (scanner->pipe, F_SETFL, non_blocking ? O_NONBLOCK : 0) < 0)
4182 Coolscan_t *scanner = handle;
4186 if (!scanner->scanning)
4190 *fd = scanner->pipe;