Lines Matching refs:scanner
50 . - sane_get_devices() : query list of scanner devices
51 . - sane_open() : open a particular scanner device
53 . . - sane_get_select_fd : get scanner fd
62 . - sane_close() : close opened scanner device
200 struct hp3500_data *scanner;
235 static SANE_Status init_options (struct hp3500_data *scanner);
237 static void calculateDerivedValues (struct hp3500_data *scanner);
238 static void do_reset (struct hp3500_data *scanner);
239 static void do_cancel (struct hp3500_data *scanner);
332 * Called to establish connection with the scanner. This function will
347 struct hp3500_data *scanner = NULL;
354 scanner = (struct hp3500_data *) first_dev;
367 scanner = (struct hp3500_data *) dev;
372 if (!scanner)
378 *handle = scanner;
380 init_options (scanner);
382 scanner->resolution = 200;
383 scanner->request_mm.left = 0;
384 scanner->request_mm.top = 0;
385 scanner->request_mm.right = SCANNER_UNIT_TO_FIXED_MM (10200);
386 scanner->request_mm.bottom = SCANNER_UNIT_TO_FIXED_MM (14100);
387 scanner->mode = 0;
388 scanner->brightness = 128;
389 scanner->contrast = 64;
390 scanner->gamma = 2.2;
391 calculateDerivedValues (scanner);
416 struct hp3500_data *scanner = (struct hp3500_data *) h;
418 *fdp = scanner->pipe_r;
440 struct hp3500_data *scanner = handle;
443 "sane_get_option_descriptor: \"%s\"\n", scanner->opt[option].name);
447 return &scanner->opt[option];
476 struct hp3500_data *scanner = (struct hp3500_data *) handle;
493 cap = scanner->opt[option].cap;
502 scanner->opt[option].name);
518 *(SANE_Word *) val = scanner->resolution;
522 *(SANE_Word *) val = scanner->request_mm.left;
526 *(SANE_Word *) val = scanner->request_mm.top;
530 *(SANE_Word *) val = scanner->request_mm.right;
534 *(SANE_Word *) val = scanner->request_mm.bottom;
538 strcpy ((SANE_Char *) val, scan_mode_list[scanner->mode]);
542 *(SANE_Word *) val = scanner->contrast;
546 *(SANE_Word *) val = SANE_FIX(scanner->gamma);
550 *(SANE_Word *) val = scanner->brightness;
557 scanner->opt[option].name);
571 status = sanei_constrain_value (scanner->opt + option, val, info);
588 if (scanner->resolution == *(SANE_Word *) val)
592 scanner->resolution = (*(SANE_Word *) val);
593 calculateDerivedValues (scanner);
598 if (scanner->request_mm.left == *(SANE_Word *) val)
600 scanner->request_mm.left = *(SANE_Word *) val;
601 calculateDerivedValues (scanner);
602 if (scanner->actual_mm.left != scanner->request_mm.left)
608 if (scanner->request_mm.top == *(SANE_Word *) val)
610 scanner->request_mm.top = *(SANE_Word *) val;
611 calculateDerivedValues (scanner);
612 if (scanner->actual_mm.top != scanner->request_mm.top)
618 if (scanner->request_mm.right == *(SANE_Word *) val)
622 scanner->request_mm.right = *(SANE_Word *) val;
623 calculateDerivedValues (scanner);
624 if (scanner->actual_mm.right != scanner->request_mm.right)
630 if (scanner->request_mm.bottom == *(SANE_Word *) val)
634 scanner->request_mm.bottom = *(SANE_Word *) val;
635 calculateDerivedValues (scanner);
636 if (scanner->actual_mm.bottom != scanner->request_mm.bottom)
648 scanner->mode = i;
656 scanner->brightness = *(SANE_Word *) val;
660 scanner->contrast = *(SANE_Word *) val;
664 scanner->gamma = SANE_UNFIX(*(SANE_Word *) val);
678 struct hp3500_data *scanner = handle;
684 if (scanner->sfd < 0)
688 if (sanei_usb_open (scanner->sane.name, &(scanner->sfd)) !=
692 "sane_start: open of %s failed:\n", scanner->sane.name);
697 calculateDerivedValues (scanner);
699 DBG (10, "\tbytes per line = %d\n", scanner->bytes_per_scan_line);
700 DBG (10, "\tpixels_per_line = %d\n", scanner->scan_width_pixels);
701 DBG (10, "\tlines = %d\n", scanner->scan_height_pixels);
708 do_cancel (scanner);
712 scanner->pipe_r = defaultFds[0];
713 scanner->pipe_w = defaultFds[1];
717 scanner->reader_pid = sanei_thread_begin (reader_process, scanner);
718 time (&scanner->last_scan);
720 if (!sanei_thread_is_valid (scanner->reader_pid))
729 close (scanner->pipe_w);
762 struct hp3500_data *scanner = (struct hp3500_data *) handle;
767 calculateDerivedValues (scanner);
770 (scanner->mode == HP3500_COLOR_SCAN) ? SANE_FRAME_RGB : SANE_FRAME_GRAY;
771 params->depth = (scanner->mode == HP3500_LINEART_SCAN) ? 1 : 8;
773 params->pixels_per_line = scanner->scan_width_pixels;
774 params->lines = scanner->scan_height_pixels;
776 params->bytes_per_line = scanner->bytes_per_scan_line;
792 * there's the reader process which gets data from the scanner and
810 struct hp3500_data *scanner = (struct hp3500_data *) handle;
812 int source = scanner->pipe_r;
828 do_cancel (scanner);
892 * Ends use of the scanner.
956 DBG (5, "attach_scanner: scanner already attached (is ok)!\n");
975 dev->sane.type = "scanner";
986 init_options (struct hp3500_data *scanner)
991 memset (scanner->opt, 0, sizeof (scanner->opt));
995 scanner->opt[i].name = "filler";
996 scanner->opt[i].size = sizeof (SANE_Word);
997 scanner->opt[i].cap = SANE_CAP_INACTIVE;
1000 opt = scanner->opt + OPT_NUM_OPTS;
1006 opt = scanner->opt + OPT_RESOLUTION;
1016 opt = scanner->opt + OPT_GEOMETRY_GROUP;
1022 opt = scanner->opt + OPT_TL_X;
1032 opt = scanner->opt + OPT_TL_Y;
1042 opt = scanner->opt + OPT_BR_X;
1052 opt = scanner->opt + OPT_BR_Y;
1070 opt = scanner->opt + OPT_MODE_GROUP;
1076 opt = scanner->opt + OPT_MODE;
1086 opt = scanner->opt + OPT_BRIGHTNESS;
1095 opt = scanner->opt + OPT_CONTRAST;
1104 opt = scanner->opt + OPT_GAMMA;
1118 do_reset (struct hp3500_data *scanner)
1120 (void) scanner; /* kill warning */
1124 do_cancel (struct hp3500_data *scanner)
1126 if (sanei_thread_is_valid (scanner->reader_pid))
1129 if (sanei_thread_kill (scanner->reader_pid) == 0)
1133 sanei_thread_waitpid (scanner->reader_pid, &exit_status);
1135 sanei_thread_invalidate (scanner->reader_pid);
1137 if (scanner->pipe_r >= 0)
1139 close (scanner->pipe_r);
1140 scanner->pipe_r = -1;
1145 calculateDerivedValues (struct hp3500_data *scanner)
1151 * scanner units */
1153 scanner->fullres_pixels.left =
1154 FIXED_MM_TO_SCANNER_UNIT (scanner->request_mm.left);
1155 scanner->fullres_pixels.top =
1156 FIXED_MM_TO_SCANNER_UNIT (scanner->request_mm.top);
1157 scanner->fullres_pixels.right =
1158 FIXED_MM_TO_SCANNER_UNIT (scanner->request_mm.right);
1159 scanner->fullres_pixels.bottom =
1160 FIXED_MM_TO_SCANNER_UNIT (scanner->request_mm.bottom);
1162 DBG (12, "\tleft margin: %u\n", scanner->fullres_pixels.left);
1163 DBG (12, "\ttop margin: %u\n", scanner->fullres_pixels.top);
1164 DBG (12, "\tright margin: %u\n", scanner->fullres_pixels.right);
1165 DBG (12, "\tbottom margin: %u\n", scanner->fullres_pixels.bottom);
1168 scanner->scan_width_pixels =
1169 scanner->resolution * (scanner->fullres_pixels.right -
1170 scanner->fullres_pixels.left) / 1200;
1171 scanner->scan_height_pixels =
1172 scanner->resolution * (scanner->fullres_pixels.bottom -
1173 scanner->fullres_pixels.top) / 1200;
1174 if (scanner->mode == HP3500_LINEART_SCAN)
1175 scanner->bytes_per_scan_line = (scanner->scan_width_pixels + 7) / 8;
1176 else if (scanner->mode == HP3500_GRAY_SCAN)
1177 scanner->bytes_per_scan_line = scanner->scan_width_pixels;
1179 scanner->bytes_per_scan_line = scanner->scan_width_pixels * 3;
1181 if (scanner->scan_width_pixels < 1)
1182 scanner->scan_width_pixels = 1;
1183 if (scanner->scan_height_pixels < 1)
1184 scanner->scan_height_pixels = 1;
1186 scanner->actres_pixels.left =
1187 scanner->fullres_pixels.left * scanner->resolution / 1200;
1188 scanner->actres_pixels.top =
1189 scanner->fullres_pixels.top * scanner->resolution / 1200;
1190 scanner->actres_pixels.right =
1191 scanner->actres_pixels.left + scanner->scan_width_pixels;
1192 scanner->actres_pixels.bottom =
1193 scanner->actres_pixels.top + scanner->scan_height_pixels;
1195 scanner->actual_mm.left =
1196 SCANNER_UNIT_TO_FIXED_MM (scanner->fullres_pixels.left);
1197 scanner->actual_mm.top =
1198 SCANNER_UNIT_TO_FIXED_MM (scanner->fullres_pixels.top);
1199 scanner->actual_mm.bottom =
1200 SCANNER_UNIT_TO_FIXED_MM (scanner->scan_width_pixels * 1200 /
1201 scanner->resolution);
1202 scanner->actual_mm.right =
1203 SCANNER_UNIT_TO_FIXED_MM (scanner->scan_height_pixels * 1200 /
1204 scanner->resolution);
1209 /* From here on in we have the original code written for the scanner demo */
3360 /* Initial rewind in case scanner is stuck away from home position */
3777 return write (winfo->scanner->pipe_w, data, bytes) == bytes;
3792 struct hp3500_data *scanner = pv;
3802 close (scanner->pipe_r);
3823 do_warmup = (t - scanner->last_scan) > 300;
3828 udh = scanner->sfd;
3832 winfo.scanner = scanner;
3834 scanner->bytes_per_scan_line * scanner->scan_height_pixels;
3844 DBG (10, "Scanning at %ddpi, mode=%s\n", scanner->resolution,
3845 scan_mode_list[scanner->mode]);
3847 (scanner->actres_pixels.left + 250 * scanner->resolution / 1200,
3848 scanner->actres_pixels.top + 599 * scanner->resolution / 1200,
3849 scanner->actres_pixels.right - scanner->actres_pixels.left,
3850 scanner->actres_pixels.bottom - scanner->actres_pixels.top,
3851 scanner->resolution, scanner->mode, scanner->brightness,
3852 scanner->contrast, (rts8801_callback) writefunc, &winfo,
3853 scanner->gamma) >= 0)
3856 close (scanner->pipe_w);