Lines Matching refs:device
59 . - sane_open() : open a particular scanner-device and attach_scanner(devicename,&dev)
75 . - sane_close() : close opened scanner-device, do_cancel, free buffer and handle
76 - sane_exit() : terminate use of backend, free devicename and device-struture
214 static int umax_handle_bad_sense_error = 0; /* default: handle bad sense error code as device busy */
353 DBG(DBG_inquiry,"peripheral device type........: %d\n", get_inquiry_periph_devtype(inquiry_block));
1019 DBG(DBG_sense, "-> power on, reset or bus device reset\n");
1087 if (scanner->device->inquiry_analog_gamma)
1094 if (scanner->device->inquiry_highlight)
1101 if (scanner->device->inquiry_shadow)
1111 if (scanner->device->inquiry_analog_gamma)
1118 if (scanner->device->inquiry_highlight)
1125 if (scanner->device->inquiry_shadow)
1134 if ( (scanner->device->inquiry_exposure_adj) && (scanner->val[OPT_SELECT_EXPOSURE_TIME].w) )
1137 (!scanner->device->exposure_time_rgb_bind) &&
1551 if (umax_scsi_open(scanner->device->sane.name, scanner->device, sense_handler,
1552 scanner->device) != SANE_STATUS_GOOD )
1554 DBG(DBG_error, "ERROR: umax_set_lamp_status: open of %s failed:\n", scanner->device->sane.name);
1558 status = umax_scsi_get_lamp_status(scanner->device, &lamp_status);
1562 status = umax_scsi_set_lamp_status(scanner->device, lamp_on);
1565 umax_scsi_close(scanner->device);
3162 DBG(DBG_info, "Found %s scanner %sversion %s on device %s\n", vendor, product, version, dev->devicename);
3185 DBG(DBG_error0, "WARNING: %s scanner %s version %s on device %s\n"
3186 "is currently an unrecognized device for this backend version.\n"
3229 DBG(DBG_error0, "ERROR: %s scanner %s version %s on device %s\n"
3230 "is currently an unrecognized device, and inquiry is too short,\n"
4689 if (scanner->device->pixelbuffer != NULL) /* pixelbuffer exists? */
4691 free(scanner->device->pixelbuffer); /* free pixelbuffer */
4692 scanner->device->pixelbuffer = NULL;
4698 if (scanner->device->sfd != -1) /* make sure we have a working filedescriptor */
4700 umax_give_scanner(scanner->device); /* reposition and release scanner */
4702 umax_scsi_close(scanner->device);
4705 scanner->device->three_pass_color = 1; /* reset color in color scanning */
4727 *devp = dev; /* return pointer to device */
4742 /* If connection type is not known (==0) then try to open the device as an USB device. */
4751 DBG(DBG_info, "attach_scanner: opening usb device %s\n", devicename);
4757 else /* opening usb device failed */
4759 if (dev->connection_type == SANE_UMAX_USB) /* we know it is not a scsi device: error */
4761 DBG(DBG_error, "ERROR: attach_scanner: opening usb device %s failed\n", devicename);
4766 DBG(DBG_info, "attach_scanner: failed to open %s as usb device\n", devicename);
4773 if (dev->connection_type != SANE_UMAX_USB) /* not an USB device, then try as SCSI */
4777 DBG(DBG_info, "attach_scanner: opening scsi device %s\n", devicename);
4781 DBG(DBG_error, "ERROR: attach_scanner: opening scsi device %s failed\n", devicename);
4800 DBG(DBG_error, "ERROR: attach_scanner: opening scsi device %s failed\n", devicename);
4968 scanner->device->scsi_maxqueue = scanner->device->request_scsi_maxqueue;
4970 if (scanner->device->request_scsi_maxqueue > 1)
4974 if (scanner->device->buffer[i])
4977 free(scanner->device->buffer[i]); /* free buffer */
4978 scanner->device->buffer[i] = NULL;
4982 for (i = 1; i<scanner->device->request_scsi_maxqueue; i++)
4985 scanner->device->buffer[i] = malloc(scanner->device->bufsize); /* allocate buffer */
4987 if (!scanner->device->buffer[i]) /* malloc failed */
4989 DBG(DBG_warning, "WARNING: reader_process: only allocated %d/%d scsi buffers\n", i, scanner->device->request_scsi_maxqueue);
4990 scanner->device->scsi_maxqueue = i;
5006 status = umax_reader_process(scanner->device, fp, data_length);
5009 for (i = 1; i<scanner->device->request_scsi_maxqueue; i++)
5011 if (scanner->device->buffer[i])
5014 free(scanner->device->buffer[i]); /* free buffer */
5015 scanner->device->buffer[i] = NULL;
5060 if (scanner->device->inquiry_lineart)
5065 if (scanner->device->inquiry_halftone)
5070 if (scanner->device->inquiry_gray)
5075 if (scanner->device->inquiry_color)
5078 if (scanner->device->inquiry_lineart)
5081 if (scanner->device->inquiry_halftone)
5093 if (scanner->device->inquiry_adfmode)
5098 if (scanner->device->inquiry_transavail)
5133 scanner->opt[OPT_X_RESOLUTION].constraint.range = &scanner->device->x_dpi_range;
5143 scanner->opt[OPT_Y_RESOLUTION].constraint.range = &scanner->device->y_dpi_range;
5153 if (scanner->device->common_xy_resolutions) /* disable bind if x and y res have to be the same */
5166 if (scanner->device->inquiry_reverse_multi == 0)
5187 scanner->opt[OPT_TL_X].constraint.range = &(scanner->device->x_range);
5197 scanner->opt[OPT_TL_Y].constraint.range = &(scanner->device->y_range);
5207 scanner->opt[OPT_BR_X].constraint.range = &(scanner->device->x_range);
5208 scanner->val[OPT_BR_X].w = scanner->device->x_range.max;
5217 scanner->opt[OPT_BR_Y].constraint.range = &(scanner->device->y_range);
5218 scanner->val[OPT_BR_Y].w = scanner->device->y_range.max;
5234 if (scanner->device->inquiry_GOB & 1)
5239 if (scanner->device->inquiry_GOB & 2)
5244 if (scanner->device->inquiry_GOB & 4)
5249 if (scanner->device->inquiry_GOB & 8)
5254 if (scanner->device->inquiry_GOB & 16)
5259 if (scanner->device->inquiry_GOB & 32)
5283 if ((scanner->device->inquiry_quality_ctrl == 0) || (scanner->device->force_quality_calibration) )
5300 if (scanner->device->inquiry_dor == 0)
5313 if (scanner->device->inquiry_max_warmup_time == 0)
5443 scanner->opt[OPT_ANALOG_GAMMA].constraint.range = &(scanner->device->analog_gamma_range);
5452 scanner->opt[OPT_ANALOG_GAMMA_R].constraint.range = &(scanner->device->analog_gamma_range);
5461 scanner->opt[OPT_ANALOG_GAMMA_G].constraint.range = &(scanner->device->analog_gamma_range);
5470 scanner->opt[OPT_ANALOG_GAMMA_B].constraint.range = &(scanner->device->analog_gamma_range);
5596 scanner->val[OPT_CAL_EXPOS_TIME].w = scanner->device->inquiry_exposure_time_g_fb_def *
5597 scanner->device->inquiry_exposure_time_step_unit;
5608 scanner->val[OPT_CAL_EXPOS_TIME_R].w = scanner->device->inquiry_exposure_time_c_fb_def_r *
5609 scanner->device->inquiry_exposure_time_step_unit;
5620 scanner->val[OPT_CAL_EXPOS_TIME_G].w = scanner->device->inquiry_exposure_time_c_fb_def_g *
5621 scanner->device->inquiry_exposure_time_step_unit;
5632 scanner->val[OPT_CAL_EXPOS_TIME_B].w = scanner->device->inquiry_exposure_time_c_fb_def_b *
5633 scanner->device->inquiry_exposure_time_step_unit;
5644 scanner->val[OPT_SCAN_EXPOS_TIME].w = scanner->device->inquiry_exposure_time_g_fb_def *
5645 scanner->device->inquiry_exposure_time_step_unit;
5656 scanner->val[OPT_SCAN_EXPOS_TIME_R].w = scanner->device->inquiry_exposure_time_c_fb_def_r *
5657 scanner->device->inquiry_exposure_time_step_unit;
5668 scanner->val[OPT_SCAN_EXPOS_TIME_G].w = scanner->device->inquiry_exposure_time_c_fb_def_g *
5669 scanner->device->inquiry_exposure_time_step_unit;
5680 scanner->val[OPT_SCAN_EXPOS_TIME_B].w = scanner->device->inquiry_exposure_time_c_fb_def_b *
5681 scanner->device->inquiry_exposure_time_step_unit;
5684 if (scanner->device->inquiry_exposure_adj == 0)
5722 if (scanner->device->inquiry_lamp_ctrl == 0)
5736 if (scanner->device->inquiry_manual_focus == 0)
5748 if (scanner->device->inquiry_manual_focus == 0)
5760 if (scanner->device->inquiry_manual_focus == 0)
5772 if (scanner->device->inquiry_lens_cal_in_doc_pos == 0)
5784 if (scanner->device->inquiry_sel_uta_lens_cal_pos == 0)
5801 if (!scanner->device->lamp_control_available) /* lamp state can not be controlled by driver */
5818 if (!scanner->device->lamp_control_available) /* lamp state can not be controlled by driver */
5832 if (!scanner->device->lamp_control_available) /* lamp state can not be controlled by driver */
5867 scanner->opt[OPT_BATCH_NEXT_TL_Y].constraint.range = &(scanner->device->y_range);
5870 if (scanner->device->inquiry_batch_scan == 0)
5891 if (scanner->device->inquiry_calibration == 0)
6177 break; /* device found, exit for loop */
6181 if (!dev) /* no device found */
6192 DBG(DBG_sane_info,"sane_open: no devicename, opening first device\n");
6193 dev = first_dev; /* empty devicename -> use first device */
6196 if (!dev) /* no device found */
6209 scanner->device = dev;
6211 if (scanner->device->inquiry_GIB & 32)
6216 else if (scanner->device->inquiry_GIB & 16)
6221 else if (scanner->device->inquiry_GIB & 8)
6226 else if (scanner->device->inquiry_GIB & 4)
6231 else if (scanner->device->inquiry_GIB & 2)
6255 scanner->gamma_table[0][j] = j * scanner->device->max_value / scanner->gamma_length;
6266 scanner->exposure_time_range.min = scanner->device->inquiry_exposure_time_c_min *
6267 scanner->device->inquiry_exposure_time_step_unit;
6268 scanner->exposure_time_range.quant = scanner->device->inquiry_exposure_time_step_unit;
6269 scanner->exposure_time_range.max = scanner->device->inquiry_exposure_time_max *
6270 scanner->device->inquiry_exposure_time_step_unit;
6321 if (scanner->device->lamp_control_available) /* lamp state can be controlled by driver */
6343 free(scanner->device->buffer[0]); /* free buffer allocated by umax_initialize_values */
6344 scanner->device->buffer[0] = NULL;
6345 scanner->device->bufsize = 0;
6375 scanner->device->x_range.min = SANE_FIX(scanner->device->inquiry_dor_x_off * MM_PER_INCH);
6376 scanner->device->x_range.max = SANE_FIX( (scanner->device->inquiry_dor_x_off + scanner->device->inquiry_dor_width) * MM_PER_INCH);
6377 scanner->device->y_range.min = SANE_FIX(scanner->device->inquiry_dor_y_off * MM_PER_INCH);
6378 scanner->device->y_range.max = SANE_FIX( (scanner->device->inquiry_dor_y_off + scanner->device->inquiry_dor_length) * MM_PER_INCH);
6380 scanner->device->x_dpi_range.max = SANE_FIX(scanner->device->inquiry_dor_x_res);
6381 scanner->device->y_dpi_range.max = SANE_FIX(scanner->device->inquiry_dor_y_res);
6385 scanner->device->x_range.min = 0;
6386 scanner->device->x_range.max = SANE_FIX(scanner->device->inquiry_fb_width * MM_PER_INCH);
6387 scanner->device->y_range.min = 0;
6388 scanner->device->y_range.max = SANE_FIX(scanner->device->inquiry_fb_length * MM_PER_INCH);
6390 scanner->device->x_dpi_range.max = SANE_FIX(scanner->device->inquiry_x_res);
6391 scanner->device->y_dpi_range.max = SANE_FIX(scanner->device->inquiry_y_res);
6395 scanner->device->x_range.min = SANE_FIX(scanner->device->inquiry_uta_x_off * MM_PER_INCH);
6396 scanner->device->x_range.max = SANE_FIX( (scanner->device->inquiry_uta_x_off + scanner->device->inquiry_uta_width) * MM_PER_INCH);
6397 scanner->device->y_range.min = SANE_FIX(scanner->device->inquiry_uta_y_off * MM_PER_INCH);
6398 scanner->device->y_range.max = SANE_FIX( ( scanner->device->inquiry_uta_y_off + scanner->device->inquiry_uta_length) * MM_PER_INCH);
6400 scanner->device->x_dpi_range.max = SANE_FIX(scanner->device->inquiry_x_res);
6401 scanner->device->y_dpi_range.max = SANE_FIX(scanner->device->inquiry_y_res);
6404 DBG(DBG_info,"x_range = [%f .. %f]\n", SANE_UNFIX(scanner->device->x_range.min), SANE_UNFIX(scanner->device->x_range.max));
6405 DBG(DBG_info,"y_range = [%f .. %f]\n", SANE_UNFIX(scanner->device->y_range.min), SANE_UNFIX(scanner->device->y_range.max));
6406 DBG(DBG_info,"x_dpi_range = [1 .. %f]\n", SANE_UNFIX(scanner->device->x_dpi_range.max));
6407 DBG(DBG_info,"y_dpi_range = [1 .. %f]\n", SANE_UNFIX(scanner->device->y_dpi_range.max));
6411 if ( scanner->val[OPT_TL_X].w < scanner->device->x_range.min)
6413 scanner->val[OPT_TL_X].w = scanner->device->x_range.min;
6416 if (scanner->val[OPT_TL_Y].w < scanner->device->y_range.min)
6418 scanner->val[OPT_TL_Y].w = scanner->device->y_range.min;
6421 if ( scanner->val[OPT_BR_X].w > scanner->device->x_range.max)
6423 scanner->val[OPT_BR_X].w = scanner->device->x_range.max;
6426 if (scanner->val[OPT_BR_Y].w > scanner->device->y_range.max)
6428 scanner->val[OPT_BR_Y].w = scanner->device->y_range.max;
6692 if (scanner->device->gamma_lsb_padded) /* e.g. astra 1220s need lsb padded data */
6786 (scanner->device->exposure_time_rgb_bind) ) /* RGB bind */
6994 if (scanner->device->inquiry_reverse)
7004 if (scanner->device->inquiry_highlight)
7009 if (scanner->device->inquiry_shadow)
7030 scanner->exposure_time_range.min = scanner->device->inquiry_exposure_time_h_min
7031 * scanner->device->inquiry_exposure_time_step_unit;
7043 scanner->exposure_time_range.min = scanner->device->inquiry_exposure_time_l_min
7044 * scanner->device->inquiry_exposure_time_step_unit;
7051 if (scanner->device->inquiry_highlight)
7056 if (scanner->device->inquiry_shadow)
7061 if (scanner->device->inquiry_reverse_multi)
7066 if (scanner->device->inquiry_gamma_dwload)
7075 if (scanner->device->inquiry_analog_gamma)
7088 if ( (scanner->device->inquiry_analog_gamma) ||
7089 (scanner->device->inquiry_highlight) ||
7090 (scanner->device->inquiry_shadow) ||
7091 (scanner->device->inquiry_exposure_adj) )
7096 scanner->exposure_time_range.min = scanner->device->inquiry_exposure_time_c_min
7097 * scanner->device->inquiry_exposure_time_step_unit;
7101 scanner->exposure_time_range.min = scanner->device->inquiry_exposure_time_g_min
7102 * scanner->device->inquiry_exposure_time_step_unit;
7227 if (scanner->device->inquiry_one_pass_color)
7229 scanner->device->three_pass = 0;
7236 scanner->device->three_pass = 1;
7237 scanner->params.format = SANE_FRAME_RED + scanner->device->three_pass_color - 1;
7244 if (scanner->device->inquiry_one_pass_color)
7246 scanner->device->three_pass = 0;
7253 scanner->device->three_pass = 1;
7254 scanner->params.format = SANE_FRAME_RED + scanner->device->three_pass_color - 1;
7292 if (scanner->device->sfd == -1) /* first call, don`t run this routine again on multi frame or multi image scan */
7294 umax_initialize_values(scanner->device); /* reset values */
7296 scanner->device->three_pass_color = 1;
7303 if ( (scanner->device->inquiry_uta != 0) && (scanner->device->inquiry_transavail != 0) )
7305 scanner->device->uta = 1;
7310 umax_scsi_close(scanner->device);
7316 scanner->device->uta = 0;
7320 if ( (scanner->device->inquiry_adf) && (scanner->device->inquiry_adfmode) )
7322 scanner->device->adf = 1;
7327 umax_scsi_close(scanner->device);
7333 scanner->device->adf = 0;
7337 if (scanner->device->inquiry_GIB & 32) /* 16 bit input mode */
7339 scanner->device->gamma_input_bits_code = 32;
7342 else if (scanner->device->inquiry_GIB & 16) /* 14 bit input mode */
7344 scanner->device->gamma_input_bits_code = 16;
7347 else if (scanner->device->inquiry_GIB & 8) /* 12 bit input mode */
7349 scanner->device->gamma_input_bits_code = 8;
7352 else if (scanner->device->inquiry_GIB & 4) /* 10 bit input mode */
7354 scanner->device->gamma_input_bits_code = 4;
7357 else if (scanner->device->inquiry_GIB & 2) /* 9 bit input mode */
7359 scanner->device->gamma_input_bits_code = 2;
7364 scanner->device->gamma_input_bits_code = 1;
7370 scanner->device->bits_per_pixel = 16;
7371 scanner->device->bits_per_pixel_code = 32;
7372 scanner->device->max_value = 65535;
7377 scanner->device->bits_per_pixel = 14;
7378 scanner->device->bits_per_pixel_code = 16;
7379 scanner->device->max_value = 16383;
7384 scanner->device->bits_per_pixel = 12;
7385 scanner->device->bits_per_pixel_code = 8;
7386 scanner->device->max_value = 4095;
7391 scanner->device->bits_per_pixel = 10;
7392 scanner->device->bits_per_pixel_code = 4;
7393 scanner->device->max_value = 1023;
7398 scanner->device->bits_per_pixel = 9;
7399 scanner->device->bits_per_pixel_code = 2;
7400 scanner->device->max_value = 511;
7405 scanner->device->bits_per_pixel = 8;
7406 scanner->device->bits_per_pixel_code = 1;
7407 scanner->device->max_value = 255;
7411 scanner->device->reverse = scanner->device->reverse_multi = scanner->val[OPT_NEGATIVE].w;
7413 scanner->device->threshold = P_100_TO_255(scanner->val[OPT_THRESHOLD].w);
7414 scanner->device->brightness = P_200_TO_255(scanner->val[OPT_BRIGHTNESS].w);
7415 scanner->device->contrast = P_200_TO_255(scanner->val[OPT_CONTRAST].w);
7417 scanner->device->batch_scan = ( scanner->val[OPT_BATCH_SCAN_START].w ||
7420 scanner->device->batch_end = scanner->val[OPT_BATCH_SCAN_END].w;
7421 scanner->device->batch_next_tl_y = SANE_UNFIX(scanner->val[OPT_BATCH_NEXT_TL_Y].w) * scanner->device->y_coordinate_base / MM_PER_INCH;
7425 scanner->device->batch_next_tl_y = SANE_UNFIX(scanner->val[OPT_BR_Y].w) * scanner->device->y_coordinate_base / MM_PER_INCH;
7428 if ((scanner->device->batch_scan) && !scanner->val[OPT_BATCH_SCAN_START].w)
7430 scanner->device->calibration = 9; /* no calibration - otherwise the scanhead will go into calibration position */
7434 scanner->device->calibration = 0; /* calibration defined by image type */
7437 scanner->device->quality = scanner->val[OPT_QUALITY].w;
7438 scanner->device->dor = scanner->val[OPT_DOR].w;
7439 scanner->device->preview = scanner->val[OPT_PREVIEW].w;
7440 scanner->device->warmup = scanner->val[OPT_WARMUP].w;
7442 scanner->device->fix_focus_position = scanner->val[OPT_FIX_FOCUS_POSITION].w;
7443 scanner->device->lens_cal_in_doc_pos = scanner->val[OPT_LENS_CALIBRATION_DOC_POS].w;
7444 scanner->device->disable_pre_focus = scanner->val[OPT_DISABLE_PRE_FOCUS].w;
7445 scanner->device->holder_focus_pos_0mm = scanner->val[OPT_HOLDER_FOCUS_POS_0MM].w;
7446 scanner->device->manual_focus = scanner->val[OPT_MANUAL_PRE_FOCUS].w;
7448 scanner->device->analog_gamma_r =
7449 scanner->device->analog_gamma_g =
7450 scanner->device->analog_gamma_b = umax_calculate_analog_gamma(SANE_UNFIX(scanner->val[OPT_ANALOG_GAMMA].w));
7452 scanner->device->highlight_r =
7453 scanner->device->highlight_g =
7454 scanner->device->highlight_b = P_100_TO_255(scanner->val[OPT_HIGHLIGHT].w);
7456 scanner->device->shadow_r =
7457 scanner->device->shadow_g =
7458 scanner->device->shadow_b = P_100_TO_255(scanner->val[OPT_SHADOW].w);
7464 scanner->device->exposure_time_calibration_r =
7465 scanner->device->exposure_time_calibration_g =
7466 scanner->device->exposure_time_calibration_b = scanner->val[OPT_CAL_EXPOS_TIME].w;
7470 scanner->device->exposure_time_calibration_r =
7471 scanner->device->exposure_time_calibration_g =
7472 scanner->device->exposure_time_calibration_b = scanner->val[OPT_SCAN_EXPOS_TIME].w;
7475 scanner->device->exposure_time_scan_r =
7476 scanner->device->exposure_time_scan_g =
7477 scanner->device->exposure_time_scan_b = scanner->val[OPT_SCAN_EXPOS_TIME].w;
7482 scanner->device->c_density = P_100_TO_254(scanner->val[OPT_CAL_LAMP_DEN].w);
7483 scanner->device->s_density = P_100_TO_254(scanner->val[OPT_SCAN_LAMP_DEN].w);
7488 scanner->device->colormode = LINEART;
7492 scanner->device->colormode = HALFTONE;
7496 scanner->device->colormode = GRAYSCALE;
7500 scanner->device->colormode = RGB_LINEART;
7504 scanner->device->colormode = RGB_HALFTONE;
7508 scanner->device->colormode = RGB;
7511 scanner->device->analog_gamma_r =
7513 scanner->device->analog_gamma_g =
7515 scanner->device->analog_gamma_b =
7518 scanner->device->highlight_r = P_100_TO_255(scanner->val[OPT_HIGHLIGHT_R].w);
7519 scanner->device->highlight_g = P_100_TO_255(scanner->val[OPT_HIGHLIGHT_G].w);
7520 scanner->device->highlight_b = P_100_TO_255(scanner->val[OPT_HIGHLIGHT_B].w);
7522 scanner->device->shadow_r = P_100_TO_255(scanner->val[OPT_SHADOW_R].w);
7523 scanner->device->shadow_g = P_100_TO_255(scanner->val[OPT_SHADOW_G].w);
7524 scanner->device->shadow_b = P_100_TO_255(scanner->val[OPT_SHADOW_B].w);
7526 if ((scanner->val[OPT_SELECT_EXPOSURE_TIME].w == SANE_TRUE) && (!scanner->device->exposure_time_rgb_bind))
7530 scanner->device->exposure_time_calibration_r = scanner->val[OPT_CAL_EXPOS_TIME_R].w;
7531 scanner->device->exposure_time_calibration_g = scanner->val[OPT_CAL_EXPOS_TIME_G].w;
7532 scanner->device->exposure_time_calibration_b = scanner->val[OPT_CAL_EXPOS_TIME_B].w;
7536 scanner->device->exposure_time_calibration_r = scanner->val[OPT_SCAN_EXPOS_TIME_R].w;
7537 scanner->device->exposure_time_calibration_g = scanner->val[OPT_SCAN_EXPOS_TIME_G].w;
7538 scanner->device->exposure_time_calibration_b = scanner->val[OPT_SCAN_EXPOS_TIME_B].w;
7541 scanner->device->exposure_time_scan_r = scanner->val[OPT_SCAN_EXPOS_TIME_R].w;
7542 scanner->device->exposure_time_scan_g = scanner->val[OPT_SCAN_EXPOS_TIME_G].w;
7543 scanner->device->exposure_time_scan_b = scanner->val[OPT_SCAN_EXPOS_TIME_B].w;
7548 if (scanner->device->force_preview_bit_rgb != 0) /* in RGB-mode set preview bit, eg. for UMAX S6E */
7550 if (scanner->device->colormode == RGB)
7553 scanner->device->preview = SANE_TRUE;
7561 scanner->device->calibration = 0;
7565 scanner->device->calibration = 15;
7569 scanner->device->calibration = 14;
7573 scanner->device->calibration = 13;
7577 scanner->device->calibration = 10;
7581 scanner->device->calibration = 9;
7586 scanner->device->x_resolution = SANE_UNFIX(scanner->val[OPT_X_RESOLUTION].w);
7587 scanner->device->y_resolution = SANE_UNFIX(scanner->val[OPT_Y_RESOLUTION].w);
7591 scanner->device->y_resolution = scanner->device->x_resolution;
7594 xbasedots = scanner->device->x_coordinate_base / MM_PER_INCH;
7595 ybasedots = scanner->device->y_coordinate_base / MM_PER_INCH;
7598 scanner->device->upper_left_x = ((int) (SANE_UNFIX(scanner->val[OPT_TL_X].w) * xbasedots)) & 65534;
7599 scanner->device->upper_left_y = ((int) (SANE_UNFIX(scanner->val[OPT_TL_Y].w) * ybasedots)) & 65534;
7601 scanner->device->scanwidth = ((int)((SANE_UNFIX(scanner->val[OPT_BR_X].w - scanner->val[OPT_TL_X].w)) * xbasedots)) & 65534;
7602 scanner->device->scanlength = ((int)((SANE_UNFIX(scanner->val[OPT_BR_Y].w - scanner->val[OPT_TL_Y].w)) * ybasedots)) & 65534;
7605 scanner->device->upper_left_x = (int) (SANE_UNFIX(scanner->val[OPT_TL_X].w) * xbasedots);
7606 scanner->device->upper_left_y = (int) (SANE_UNFIX(scanner->val[OPT_TL_Y].w) * ybasedots);
7608 scanner->device->scanwidth = (int)((SANE_UNFIX(scanner->val[OPT_BR_X].w - scanner->val[OPT_TL_X].w)) * xbasedots);
7609 scanner->device->scanlength = (int)((SANE_UNFIX(scanner->val[OPT_BR_Y].w - scanner->val[OPT_TL_Y].w)) * ybasedots);
7612 if (umax_check_values(scanner->device) != 0)
7623 if (scanner->device->dor != 0) /* dor mode active */
7626 scanner->device->upper_left_x -= scanner->device->inquiry_dor_x_off * scanner->device->x_coordinate_base; /* correct DOR x-origin */
7628 if (scanner->device->upper_left_x < 0) /* rounding errors may create a negative value */
7630 scanner->device->upper_left_x = 0; /* but negative values are not allowed */
7634 scanner->params.bytes_per_line = scanner->device->row_len;
7635 scanner->params.pixels_per_line = scanner->device->width_in_pixels;
7636 scanner->params.lines = scanner->device->length_in_pixels;
7640 if ( scanner->device->inquiry_exposure_adj )
7642 umax_calculate_exposure_time(scanner->device, scanner->device->use_exposure_time_def_r, &scanner->device->exposure_time_calibration_r);
7643 umax_calculate_exposure_time(scanner->device, scanner->device->use_exposure_time_def_g, &scanner->device->exposure_time_calibration_g);
7644 umax_calculate_exposure_time(scanner->device, scanner->device->use_exposure_time_def_b, &scanner->device->exposure_time_calibration_b);
7646 umax_calculate_exposure_time(scanner->device, scanner->device->use_exposure_time_def_r, &scanner->device->exposure_time_scan_r);
7647 umax_calculate_exposure_time(scanner->device, scanner->device->use_exposure_time_def_g, &scanner->device->exposure_time_scan_g);
7648 umax_calculate_exposure_time(scanner->device, scanner->device->use_exposure_time_def_b, &scanner->device->exposure_time_scan_b);
7652 scanner->device->exposure_time_calibration_r = scanner->device->exposure_time_calibration_g = scanner->device->exposure_time_calibration_b =
7653 scanner->device->exposure_time_scan_r = scanner->device->exposure_time_scan_g = scanner->device->exposure_time_scan_b = 0;
7660 DBG(DBG_sane_info,"x_resolution (dpi) = %u\n", scanner->device->x_resolution);
7661 DBG(DBG_sane_info,"y_resolution (dpi) = %u\n", scanner->device->y_resolution);
7662 DBG(DBG_sane_info,"x_coordinate_base (dpi) = %u\n", scanner->device->x_coordinate_base);
7663 DBG(DBG_sane_info,"y_coordinate_base (dpi) = %u\n", scanner->device->y_coordinate_base);
7664 DBG(DBG_sane_info,"upper_left_x (xbase) = %d\n", scanner->device->upper_left_x);
7665 DBG(DBG_sane_info,"upper_left_y (ybase) = %d\n", scanner->device->upper_left_y);
7666 DBG(DBG_sane_info,"scanwidth (xbase) = %u\n", scanner->device->scanwidth);
7667 DBG(DBG_sane_info,"scanlength (ybase) = %u\n", scanner->device->scanlength);
7668 DBG(DBG_sane_info,"width in pixels = %u\n", scanner->device->width_in_pixels);
7669 DBG(DBG_sane_info,"length in pixels = %u\n", scanner->device->length_in_pixels);
7670 DBG(DBG_sane_info,"bits per pixel/color = %u\n", scanner->device->bits_per_pixel);
7674 DBG(DBG_sane_info,"negative = %d\n", scanner->device->reverse);
7675 DBG(DBG_sane_info,"threshold (lineart) = %d\n", scanner->device->threshold);
7676 DBG(DBG_sane_info,"brightness (halftone) = %d\n", scanner->device->brightness);
7677 DBG(DBG_sane_info,"contrast (halftone) = %d\n", scanner->device->contrast);
7680 scanner->device->analog_gamma_r,
7681 scanner->device->analog_gamma_g,
7682 scanner->device->analog_gamma_b);
7684 scanner->device->highlight_r,
7685 scanner->device->highlight_g,
7686 scanner->device->highlight_b);
7688 scanner->device->shadow_r,
7689 scanner->device->shadow_g,
7690 scanner->device->shadow_b);
7692 scanner->device->exposure_time_calibration_r,
7693 scanner->device->exposure_time_calibration_g,
7694 scanner->device->exposure_time_calibration_b);
7696 scanner->device->exposure_time_scan_r,
7697 scanner->device->exposure_time_scan_g,
7698 scanner->device->exposure_time_scan_b);
7703 DBG(DBG_sane_info,"calibration mode number = %d\n", scanner->device->calibration);
7705 DBG(DBG_sane_info,"batch scan = %d\n", scanner->device->batch_scan);
7706 DBG(DBG_sane_info,"batch end = %d\n", scanner->device->batch_end);
7707 DBG(DBG_sane_info,"batch next top left y = %d\n", scanner->device->batch_next_tl_y);
7708 DBG(DBG_sane_info,"quality calibration = %d\n", scanner->device->quality);
7709 DBG(DBG_sane_info,"warm up = %d\n", scanner->device->warmup);
7710 DBG(DBG_sane_info,"fast preview function = %d\n", scanner->device->preview);
7711 DBG(DBG_sane_info,"DOR = %d\n", scanner->device->dor);
7712 DBG(DBG_sane_info,"ADF = %d\n", scanner->device->adf);
7713 DBG(DBG_sane_info,"manual focus = %d\n", scanner->device->manual_focus);
7714 DBG(DBG_sane_info,"fix focus position = %d\n", scanner->device->fix_focus_position);
7715 DBG(DBG_sane_info,"disable pre focus = %d\n", scanner->device->disable_pre_focus);
7716 DBG(DBG_sane_info,"lens cal in doc pos = %d\n", scanner->device->lens_cal_in_doc_pos);
7717 DBG(DBG_sane_info,"holder focus pos 0mm = %d\n", scanner->device->holder_focus_pos_0mm);
7721 scanner->device->lines_max = scanner->device->request_preview_lines;
7725 scanner->device->lines_max = scanner->device->request_scan_lines;
7732 scsi_bufsize = scanner->device->width_in_pixels * scanner->device->lines_max;
7736 scsi_bufsize = scanner->device->inquiry_vidmem;
7739 if (scsi_bufsize < scanner->device->scsi_buffer_size_min) /* make sure buffer has at least minimum size */
7741 scsi_bufsize = scanner->device->scsi_buffer_size_min;
7743 else if (scsi_bufsize > scanner->device->scsi_buffer_size_max) /* make sure buffer does not exceed maximum size */
7745 scsi_bufsize = scanner->device->scsi_buffer_size_max;
7748 if (umax_scsi_open_extended(scanner->device->sane.name, scanner->device, sense_handler,
7749 scanner->device, (int *) &scsi_bufsize) != 0)
7756 if (scsi_bufsize < scanner->device->scsi_buffer_size_min) /* minimum size must be available */
7759 umax_scsi_close((scanner->device));
7765 if (scsi_bufsize < scanner->device->width_in_pixels) /* print warning when buffer is smaller than one scanline */
7770 if (scsi_bufsize != scanner->device->bufsize)
7774 if (scanner->device->buffer[0])
7777 free(scanner->device->buffer[0]); /* free buffer */
7780 scanner->device->bufsize = scsi_bufsize;
7783 scanner->device->buffer[0] = malloc(scanner->device->bufsize); /* allocate buffer */
7785 if (!scanner->device->buffer[0]) /* malloc failed */
7788 umax_scsi_close(scanner->device);
7789 scanner->device->bufsize = 0;
7796 if ( umax_scsi_open(scanner->device->sane.name, scanner->device, sense_handler,
7797 scanner->device) != SANE_STATUS_GOOD )
7800 DBG(DBG_error, "ERROR: sane_start: open of %s failed:\n", scanner->device->sane.name);
7808 if (umax_grab_scanner(scanner->device))
7810 umax_scsi_close(scanner->device);
7812 DBG(DBG_warning,"WARNING: unable to reserve scanner: device busy\n");
7821 umax_send_halftone_pattern(scanner->device, (char *) &(scanner->halftone_pattern[0]),
7823 scanner->device->halftone = WD_halftone_download;
7835 if (scanner->device->three_pass == 0) /* one pass color scan */
7864 umax_send_gamma_data(scanner->device, &gamma[0], 3);
7865 scanner->device->digital_gamma_r =
7866 scanner->device->digital_gamma_g =
7867 scanner->device->digital_gamma_b = WD_gamma_download;
7884 color = scanner->device->three_pass_color;
7900 umax_send_gamma_data(scanner->device, &gamma[0], 1);
7901 scanner->device->digital_gamma_r =
7902 scanner->device->digital_gamma_g =
7903 scanner->device->digital_gamma_b = WD_gamma_download;
7933 umax_send_gamma_data(scanner->device, &gamma[0], 1);
7934 scanner->device->digital_gamma_r = WD_gamma_download;
7940 if ( scanner->device->three_pass_color > WD_wid_red) /* three pass scan, not first pass */
7942 umax_reposition_scanner(scanner->device);
7945 umax_set_window_param(scanner->device);
7946 status = umax_start_scan(scanner->device);
7949 umax_give_scanner(scanner->device); /* reposition and release scanner */
7953 pause = scanner->device->pause_for_color_calibration;
7955 if (scanner->device->colormode != RGB)
7957 pause = scanner->device->pause_for_gray_calibration;
7967 status = umax_do_calibration(scanner->device);
7970 umax_give_scanner(scanner->device); /* reposition and release scanner */
7974 if (scanner->device->pause_after_calibration) /* may be useful */
7976 DBG(DBG_info2,"pause after calibration %d msec ...\n", scanner->device->pause_after_calibration);
7977 usleep(((long) scanner->device->pause_after_calibration) * 1000); /* time in ms */
7986 umax_give_scanner(scanner->device); /* reposition and release scanner */
7987 umax_scsi_close(scanner->device);
8001 umax_give_scanner(scanner->device); /* reposition and release scanner */
8002 umax_scsi_close(scanner->device);
8053 if ( (scanner->device->three_pass == 0) ||
8054 (scanner->device->colormode <= RGB_LINEART) ||
8055 (++(scanner->device->three_pass_color) > 3) )