Lines Matching refs:scanner
53 gt68xx_afe_ccd_auto (GT68xx_Scanner * scanner, GT68xx_Scan_Request * request);
54 static SANE_Status gt68xx_afe_cis_auto (GT68xx_Scanner * scanner);
326 GT68xx_Scanner *scanner;
331 scanner = (GT68xx_Scanner *) malloc (sizeof (GT68xx_Scanner));
332 if (!scanner)
338 scanner->dev = dev;
339 scanner->reader = NULL;
340 scanner->cal_gray = NULL;
341 scanner->cal_r = NULL;
342 scanner->cal_g = NULL;
343 scanner->cal_b = NULL;
347 scanner->calibrations[i].dpi = 0;
348 scanner->calibrations[i].red = NULL;
349 scanner->calibrations[i].green = NULL;
350 scanner->calibrations[i].blue = NULL;
351 scanner->calibrations[i].gray = NULL;
354 *scanner_return = scanner;
359 gt68xx_scanner_free_calibrators (GT68xx_Scanner * scanner)
361 if (scanner->cal_gray)
363 gt68xx_calibrator_free (scanner->cal_gray);
364 scanner->cal_gray = NULL;
367 if (scanner->cal_r)
369 gt68xx_calibrator_free (scanner->cal_r);
370 scanner->cal_r = NULL;
373 if (scanner->cal_g)
375 gt68xx_calibrator_free (scanner->cal_g);
376 scanner->cal_g = NULL;
379 if (scanner->cal_b)
381 gt68xx_calibrator_free (scanner->cal_b);
382 scanner->cal_b = NULL;
387 gt68xx_scanner_free (GT68xx_Scanner * scanner)
391 if (!scanner)
393 DBG (5, "gt68xx_scanner_free: scanner==NULL\n");
397 if (scanner->reader)
399 gt68xx_line_reader_free (scanner->reader);
400 scanner->reader = NULL;
403 gt68xx_scanner_free_calibrators (scanner);
408 scanner->calibrations[i].dpi = 0;
409 if (scanner->calibrations[i].red != NULL)
411 gt68xx_calibrator_free (scanner->calibrations[i].red);
413 if (scanner->calibrations[i].green != NULL)
415 gt68xx_calibrator_free (scanner->calibrations[i].green);
417 if (scanner->calibrations[i].blue != NULL)
419 gt68xx_calibrator_free (scanner->calibrations[i].blue);
421 if (scanner->calibrations[i].gray != NULL)
423 gt68xx_calibrator_free (scanner->calibrations[i].gray);
427 free (scanner);
433 gt68xx_scanner_wait_for_positioning (GT68xx_Scanner * scanner)
442 status = gt68xx_device_is_moving (scanner->dev, &moving);
466 gt68xx_scanner_internal_start_scan (GT68xx_Scanner * scanner)
472 status = gt68xx_scanner_wait_for_positioning (scanner);
481 status = gt68xx_device_start_scan (scanner->dev);
492 status = gt68xx_device_read_scanned_data (scanner->dev, &ready);
507 "gt68xx_scanner_internal_start_scan: scanner still not ready - giving up\n");
511 status = gt68xx_device_read_start (scanner->dev);
524 gt68xx_scanner_start_scan_extended (GT68xx_Scanner * scanner,
530 GT68xx_AFE_Parameters afe = *scanner->dev->afe;
532 status = gt68xx_scanner_wait_for_positioning (scanner);
541 status = gt68xx_device_setup_scan (scanner->dev, request, action, params);
550 status = gt68xx_line_reader_new (scanner->dev, params,
552 &scanner->reader);
561 if (scanner->dev->model->is_cis
562 && !((scanner->dev->model->flags & GT68XX_FLAG_SHEET_FED) && scanner->calibrated == SANE_FALSE))
565 gt68xx_device_set_exposure_time (scanner->dev,
566 scanner->dev->exposure);
576 status = gt68xx_device_set_afe (scanner->dev, &afe);
585 status = gt68xx_scanner_internal_start_scan (scanner);
606 gt68xx_scanner_create_color_calibrators (GT68xx_Scanner * scanner,
611 if (!scanner->cal_r)
613 status = gt68xx_scanner_create_calibrator (params, &scanner->cal_r);
617 if (!scanner->cal_g)
619 status = gt68xx_scanner_create_calibrator (params, &scanner->cal_g);
623 if (!scanner->cal_b)
625 status = gt68xx_scanner_create_calibrator (params, &scanner->cal_b);
634 gt68xx_scanner_create_gray_calibrators (GT68xx_Scanner * scanner,
639 if (!scanner->cal_gray)
641 status = gt68xx_scanner_create_calibrator (params, &scanner->cal_gray);
650 gt68xx_scanner_calibrate_color_white_line (GT68xx_Scanner * scanner,
654 gt68xx_calibrator_add_white_line (scanner->cal_r, buffer_pointers[0]);
655 gt68xx_calibrator_add_white_line (scanner->cal_g, buffer_pointers[1]);
656 gt68xx_calibrator_add_white_line (scanner->cal_b, buffer_pointers[2]);
662 gt68xx_scanner_calibrate_gray_white_line (GT68xx_Scanner * scanner,
665 gt68xx_calibrator_add_white_line (scanner->cal_gray, buffer_pointers[0]);
670 gt68xx_scanner_calibrate_color_black_line (GT68xx_Scanner * scanner,
673 gt68xx_calibrator_add_black_line (scanner->cal_r, buffer_pointers[0]);
674 gt68xx_calibrator_add_black_line (scanner->cal_g, buffer_pointers[1]);
675 gt68xx_calibrator_add_black_line (scanner->cal_b, buffer_pointers[2]);
681 gt68xx_scanner_calibrate_gray_black_line (GT68xx_Scanner * scanner,
684 gt68xx_calibrator_add_black_line (scanner->cal_gray, buffer_pointers[0]);
689 gt68xx_scanner_calibrate (GT68xx_Scanner * scanner,
697 GT68xx_AFE_Parameters *afe = scanner->dev->afe;
698 GT68xx_Exposure_Parameters *exposure = scanner->dev->exposure;
702 gt68xx_scanner_free_calibrators (scanner);
704 if (scanner->auto_afe)
706 if (scanner->dev->model->is_cis)
707 status = gt68xx_afe_cis_auto (scanner);
709 status = gt68xx_afe_ccd_auto (scanner, request);
727 if (!scanner->calib)
733 if (scanner->dev->model->is_cis && !(scanner->dev->model->flags & GT68XX_FLAG_CIS_LAMP))
740 gt68xx_device_lamp_control (scanner->dev, SANE_FALSE, SANE_TRUE);
746 gt68xx_device_lamp_control (scanner->dev, SANE_TRUE, SANE_FALSE);
749 status = gt68xx_scanner_start_scan_extended (scanner, &req, SA_CALIBRATE,
761 status = gt68xx_scanner_create_color_calibrators (scanner, ¶ms);
765 status = gt68xx_scanner_create_gray_calibrators (scanner, ¶ms);
773 status = gt68xx_line_reader_read (scanner->reader, buffer_pointers);
783 status = gt68xx_scanner_calibrate_color_white_line (scanner,
786 status = gt68xx_scanner_calibrate_gray_white_line (scanner,
796 gt68xx_scanner_stop_scan (scanner);
800 gt68xx_calibrator_eval_white (scanner->cal_r, 1);
801 gt68xx_calibrator_eval_white (scanner->cal_g, 1);
802 gt68xx_calibrator_eval_white (scanner->cal_b, 1);
806 gt68xx_calibrator_eval_white (scanner->cal_gray, 1);
814 status = gt68xx_device_lamp_control (scanner->dev, SANE_FALSE, SANE_FALSE);
823 if (!scanner->dev->model->is_cis
824 || (scanner->dev->model->flags & GT68XX_FLAG_CIS_LAMP))
826 status = gt68xx_scanner_start_scan_extended (scanner, &req, SA_CALIBRATE,
838 status = gt68xx_line_reader_read (scanner->reader, buffer_pointers);
848 status = gt68xx_scanner_calibrate_color_black_line (scanner,
851 status = gt68xx_scanner_calibrate_gray_black_line (scanner,
861 gt68xx_scanner_stop_scan (scanner);
864 status = gt68xx_device_lamp_control (scanner->dev, SANE_FALSE, SANE_TRUE);
866 status = gt68xx_device_lamp_control (scanner->dev, SANE_TRUE, SANE_FALSE);
876 if (!scanner->dev->model->is_cis)
881 gt68xx_calibrator_eval_black (scanner->cal_r, 0.0);
882 gt68xx_calibrator_eval_black (scanner->cal_g, 0.0);
883 gt68xx_calibrator_eval_black (scanner->cal_b, 0.0);
885 gt68xx_calibrator_finish_setup (scanner->cal_r);
886 gt68xx_calibrator_finish_setup (scanner->cal_g);
887 gt68xx_calibrator_finish_setup (scanner->cal_b);
891 gt68xx_calibrator_eval_black (scanner->cal_gray, 0.0);
892 gt68xx_calibrator_finish_setup (scanner->cal_gray);
899 gt68xx_scanner_start_scan (GT68xx_Scanner * scanner,
908 gt68xx_device_lamp_control (scanner->dev, SANE_FALSE, SANE_TRUE);
913 gt68xx_device_lamp_control (scanner->dev, SANE_TRUE, SANE_FALSE);
916 if (!scanner->dev->model->is_cis)
919 return gt68xx_scanner_start_scan_extended (scanner, request, SA_SCAN,
924 gt68xx_scanner_read_line (GT68xx_Scanner * scanner,
929 status = gt68xx_line_reader_read (scanner->reader, buffer_pointers);
939 if (scanner->calib)
941 if (scanner->reader->params.color)
943 gt68xx_calibrator_process_line (scanner->cal_r, buffer_pointers[0]);
944 gt68xx_calibrator_process_line (scanner->cal_g, buffer_pointers[1]);
945 gt68xx_calibrator_process_line (scanner->cal_b, buffer_pointers[2]);
949 if (scanner->dev->model->is_cis && !(scanner->dev->model->flags & GT68XX_FLAG_CIS_LAMP))
952 (scanner->val[OPT_GRAY_MODE_COLOR].s,
954 gt68xx_calibrator_process_line (scanner->cal_b,
958 (scanner->val[OPT_GRAY_MODE_COLOR].s,
960 gt68xx_calibrator_process_line (scanner->cal_g,
963 gt68xx_calibrator_process_line (scanner->cal_r,
968 gt68xx_calibrator_process_line (scanner->cal_gray,
978 gt68xx_scanner_stop_scan (GT68xx_Scanner * scanner)
980 if (scanner->reader)
982 gt68xx_line_reader_free (scanner->reader);
983 scanner->reader = NULL;
985 return gt68xx_device_stop_scan (scanner->dev);
1192 gt68xx_wait_lamp_stable (GT68xx_Scanner * scanner,
1220 status = gt68xx_scanner_start_scan_extended (scanner, request,
1230 status = gt68xx_line_reader_read (scanner->reader, buffer_pointers);
1237 gt68xx_scanner_stop_scan (scanner);
1246 secs_lamp_on = now.tv_sec - scanner->lamp_on_time.tv_sec;
1255 if (scanner->val[OPT_AUTO_WARMUP].w == SANE_TRUE)
1257 if (scanner->dev->model->flags & GT68XX_FLAG_CIS_LAMP)
1289 * @param scanner Scanner object.
1297 gt68xx_afe_ccd_auto (GT68xx_Scanner * scanner,
1306 GT68xx_AFE_Parameters *afe = scanner->dev->afe, old_afe;
1312 if (scanner->dev->model->flags & GT68XX_FLAG_OFFSET_INV)
1318 request.xs = scanner->dev->model->x_size;
1332 gt68xx_device_lamp_control (scanner->dev, SANE_FALSE, SANE_TRUE);
1337 gt68xx_device_lamp_control (scanner->dev, SANE_TRUE, SANE_FALSE);
1342 status = gt68xx_scanner_start_scan_extended (scanner, &request,
1355 (params.pixel_xs * scanner->dev->model->optical_xdpi) / params.xdpi;
1359 values.start_black = scanner->dev->model->x_offset_mark;
1368 status = gt68xx_line_reader_read (scanner->reader, buffer_pointers);
1375 gt68xx_scanner_stop_scan (scanner);
1377 status = gt68xx_wait_lamp_stable (scanner, ¶ms, &request, buffer_pointers,
1392 status = gt68xx_scanner_start_scan_extended (scanner, &request,
1403 status = gt68xx_line_reader_read (scanner->reader, buffer_pointers);
1441 if (strcmp (scanner->val[OPT_GRAY_MODE_COLOR].s, GT68XX_COLOR_BLUE)
1454 (scanner->val[OPT_GRAY_MODE_COLOR].s,
1478 gt68xx_scanner_stop_scan (scanner);
1721 GT68xx_Scanner * scanner, SANE_Bool lamp,
1732 request.xs = scanner->dev->model->x_size;
1757 (scanner->dev, &request, SA_CALIBRATE_ONE_LINE, ¶ms));
1761 values->start_black = scanner->dev->model->x_offset_mark;
1765 if (first && (scanner->dev->model->flags & GT68XX_FLAG_CIS_LAMP))
1769 gt68xx_device_lamp_control (scanner->dev, SANE_FALSE, SANE_TRUE);
1774 gt68xx_device_lamp_control (scanner->dev, SANE_TRUE, SANE_FALSE);
1777 status = gt68xx_wait_lamp_stable (scanner, ¶ms, &request,
1790 gt68xx_scanner_start_scan_extended (scanner, &request,
1808 status = gt68xx_line_reader_read (scanner->reader, buffer_pointers);
1824 status = gt68xx_scanner_stop_scan (scanner);
1837 gt68xx_afe_cis_auto (GT68xx_Scanner * scanner)
1842 GT68xx_AFE_Parameters *afe = scanner->dev->afe, old_afe;
1843 GT68xx_Exposure_Parameters *exposure = scanner->dev->exposure;
1851 if (scanner->dev->model->flags & GT68XX_FLAG_NO_CALIBRATE)
1859 memcpy (scanner->dev->exposure, &scanner->dev->model->exposure,
1860 sizeof (*scanner->dev->exposure));
1862 RIE (gt68xx_afe_cis_read_lines (&values, scanner, SANE_FALSE, SANE_FALSE,
1888 if (scanner->dev->model->flags & GT68XX_FLAG_OFFSET_INV)
1891 RIE (gt68xx_afe_cis_read_lines (&values, scanner, SANE_FALSE, first,
1893 RIE (gt68xx_afe_cis_read_lines (&values, scanner, SANE_TRUE, SANE_FALSE,
1923 RIE (gt68xx_afe_cis_read_lines (&values, scanner, SANE_TRUE, SANE_FALSE,
1946 if(scanner->dev->model->flags & GT68XX_FLAG_HAS_CALIBRATE)
1948 memcpy(&(scanner->afe_params), afe, sizeof(GT68xx_AFE_Parameters));
1949 scanner->exposure_params.r_time=exposure->r_time;
1950 scanner->exposure_params.g_time=exposure->g_time;
1951 scanner->exposure_params.b_time=exposure->b_time;
2016 gt68xx_sheetfed_move_to_scan_area (GT68xx_Scanner * scanner,
2021 if (!(scanner->dev->model->flags & GT68XX_FLAG_SHEET_FED)
2022 || scanner->dev->model->command_set->move_paper == NULL)
2026 RIE (scanner->dev->model->command_set->move_paper (scanner->dev, request));
2029 return gt68xx_scanner_wait_for_positioning (scanner);
2035 /** @brief calibrate sheet fed scanner
2036 * This function calibrates sheet fed scanner by scanning a calibration
2040 * @param scanner structure describing the frontend session and the device
2045 gt68xx_sheetfed_scanner_calibrate (GT68xx_Scanner * scanner)
2060 gt68xx_scanner_free_calibrators (scanner);
2063 if(scanner->calibrations[i].red!=NULL)
2065 gt68xx_calibrator_free (scanner->calibrations[i].red);
2067 if(scanner->calibrations[i].green!=NULL)
2069 gt68xx_calibrator_free (scanner->calibrations[i].green);
2071 if(scanner->calibrations[i].blue!=NULL)
2073 gt68xx_calibrator_free (scanner->calibrations[i].blue);
2075 if(scanner->calibrations[i].gray!=NULL)
2077 gt68xx_calibrator_free (scanner->calibrations[i].gray);
2080 scanner->calibrated = SANE_FALSE;
2084 for (i = 0; scanner->dev->model->xdpi_values[i] != 0; i++)
2086 if (scanner->dev->model->xdpi_values[i] < request.xdpi)
2088 request.xdpi = scanner->dev->model->xdpi_values[i];
2089 request.ydpi = scanner->dev->model->xdpi_values[i];
2095 request.y0 = scanner->dev->model->y_offset_calib;
2096 request.xs = scanner->dev->model->x_size;
2110 status = gt68xx_sheetfed_move_to_scan_area (scanner, &request);
2119 status = gt68xx_device_lamp_control (scanner->dev, SANE_FALSE, SANE_TRUE);
2135 gt68xx_scanner_start_scan_extended (scanner, &request, SA_CALIBRATE,
2150 status = gt68xx_line_reader_read (scanner->reader, buffer_pointers);
2156 gt68xx_scanner_stop_scan (scanner);
2184 gt68xx_scanner_stop_scan (scanner);
2199 scanner->auto_afe = SANE_TRUE;
2200 scanner->calib = SANE_TRUE;
2204 while (scanner->dev->model->xdpi_values[i] > 0)
2206 request.xdpi = scanner->dev->model->xdpi_values[i];
2207 request.ydpi = scanner->dev->model->xdpi_values[i];
2210 request.xs = scanner->dev->model->x_size;
2223 status = gt68xx_scanner_calibrate (scanner, &request);
2234 scanner->auto_afe = SANE_FALSE;
2237 scanner->calibrations[i].dpi = request.xdpi;
2241 gt68xx_device_setup_scan (scanner->dev, &request, SA_SCAN, ¶ms);
2243 scanner->calibrations[i].pixel_x0 = params.pixel_x0;
2245 gt68xx_calibrator_create_copy (&(scanner->calibrations[i].red),
2246 scanner->cal_r, scanner->cal_r->width,
2257 gt68xx_calibrator_create_copy (&(scanner->calibrations[i].green),
2258 scanner->cal_g, scanner->cal_g->width,
2269 gt68xx_calibrator_create_copy (&(scanner->calibrations[i].blue),
2270 scanner->cal_b, scanner->cal_b->width,
2282 status = gt68xx_scanner_calibrate (scanner, &request);
2291 if (scanner->cal_gray)
2294 gt68xx_calibrator_create_copy (&(scanner->calibrations[i].gray),
2295 scanner->cal_gray,
2296 scanner->cal_gray->width, 0);
2307 sprintf (title, "cal-%03d-red.pnm", scanner->calibrations[i].dpi);
2313 fputc ((scanner->calibrations[i].red->k_white[x] >> 8) & 0xff,
2317 sprintf (title, "cal-%03d-green.pnm", scanner->calibrations[i].dpi);
2323 fputc ((scanner->calibrations[i].green->k_white[x] >> 8) & 0xff,
2327 sprintf (title, "cal-%03d-blue.pnm", scanner->calibrations[i].dpi);
2333 fputc ((scanner->calibrations[i].blue->k_white[x] >> 8) & 0xff,
2343 scanner->calibrated = SANE_TRUE;
2346 gt68xx_device_paperfeed (scanner->dev);
2349 gt68xx_write_calibration (scanner);
2359 * @param scanner structure describing the frontend session and the device
2364 gt68xx_assign_calibration (GT68xx_Scanner * scanner,
2378 while (scanner->calibrations[i].dpi > 0
2379 && scanner->calibrations[i].dpi != dpi)
2385 if (scanner->calibrations[i].dpi == 0)
2399 memcpy (scanner->dev->afe, &(scanner->afe_params),
2401 scanner->dev->exposure->r_time = scanner->exposure_params.r_time;
2402 scanner->dev->exposure->g_time = scanner->exposure_params.g_time;
2403 scanner->dev->exposure->b_time = scanner->exposure_params.b_time;
2406 gt68xx_scanner_free_calibrators (scanner);
2409 offset = params.pixel_x0 - scanner->calibrations[i].pixel_x0;
2412 if (scanner->calibrations[i].red!=NULL)
2415 gt68xx_calibrator_create_copy (&(scanner->cal_r),
2416 scanner->calibrations[i].red,
2428 if (scanner->calibrations[i].green!=NULL)
2431 gt68xx_calibrator_create_copy (&(scanner->cal_g),
2432 scanner->calibrations[i].green,
2444 if (scanner->calibrations[i].blue!=NULL)
2447 gt68xx_calibrator_create_copy (&(scanner->cal_b),
2448 scanner->calibrations[i].blue,
2460 if (scanner->calibrations[i].gray!=NULL)
2463 gt68xx_calibrator_create_copy (&(scanner->cal_gray),
2464 scanner->calibrations[i].gray,
2480 static char *gt68xx_calibration_file(GT68xx_Scanner * scanner)
2488 sprintf (tmp_str, "%s/.sane/gt68xx-%s.cal", ptr, scanner->dev->model->name);
2495 sprintf (tmp_str, "%s/gt68xx-%s.cal", ptr, scanner->dev->model->name);
2499 sprintf (tmp_str, "/tmp/gt68xx-%s.cal", scanner->dev->model->name);
2507 gt68xx_clear_calibration (GT68xx_Scanner * scanner)
2512 if (scanner->calibrated == SANE_FALSE)
2516 fname = gt68xx_calibration_file (scanner);
2521 for (i = 0; i < MAX_RESOLUTIONS && scanner->calibrations[i].dpi > 0; i++)
2523 scanner->calibrations[i].dpi = 0;
2524 if (scanner->calibrations[i].red)
2525 gt68xx_calibrator_free (scanner->calibrations[i].red);
2526 if (scanner->calibrations[i].green)
2527 gt68xx_calibrator_free (scanner->calibrations[i].green);
2528 if (scanner->calibrations[i].blue)
2529 gt68xx_calibrator_free (scanner->calibrations[i].blue);
2530 if (scanner->calibrations[i].gray)
2531 gt68xx_calibrator_free (scanner->calibrations[i].gray);
2535 scanner->calibrated = SANE_FALSE;
2536 scanner->val[OPT_QUALITY_CAL].w = SANE_FALSE;
2537 scanner->val[OPT_NEED_CALIBRATION_SW].w = SANE_TRUE;
2543 gt68xx_write_calibration (GT68xx_Scanner * scanner)
2550 if (scanner->calibrated == SANE_FALSE)
2556 fname = gt68xx_calibration_file (scanner);
2569 fwrite (&(scanner->afe_params), sizeof (GT68xx_AFE_Parameters), 1, fcal);
2570 fwrite (&(scanner->exposure_params), sizeof (GT68xx_Exposure_Parameters), 1,
2572 for (i = 0; i < MAX_RESOLUTIONS && scanner->calibrations[i].dpi > 0; i++)
2575 scanner->calibrations[i].dpi);
2576 fwrite (&(scanner->calibrations[i].dpi), sizeof (SANE_Int), 1, fcal);
2577 fwrite (&(scanner->calibrations[i].pixel_x0), sizeof (SANE_Int), 1,
2580 fwrite (&(scanner->calibrations[i].red->width), sizeof (SANE_Int), 1,
2582 fwrite (&(scanner->calibrations[i].red->white_level), sizeof (SANE_Int),
2584 fwrite (scanner->calibrations[i].red->k_white, sizeof (unsigned int),
2585 scanner->calibrations[i].red->width, fcal);
2586 fwrite (scanner->calibrations[i].red->k_black, sizeof (unsigned int),
2587 scanner->calibrations[i].red->width, fcal);
2588 fwrite (scanner->calibrations[i].red->white_line, sizeof (double),
2589 scanner->calibrations[i].red->width, fcal);
2590 fwrite (scanner->calibrations[i].red->black_line, sizeof (double),
2591 scanner->calibrations[i].red->width, fcal);
2593 fwrite (&(scanner->calibrations[i].green->width), sizeof (SANE_Int), 1,
2595 fwrite (&(scanner->calibrations[i].green->white_level),
2597 fwrite (scanner->calibrations[i].green->k_white, sizeof (unsigned int),
2598 scanner->calibrations[i].green->width, fcal);
2599 fwrite (scanner->calibrations[i].green->k_black, sizeof (unsigned int),
2600 scanner->calibrations[i].green->width, fcal);
2601 fwrite (scanner->calibrations[i].green->white_line, sizeof (double),
2602 scanner->calibrations[i].green->width, fcal);
2603 fwrite (scanner->calibrations[i].green->black_line, sizeof (double),
2604 scanner->calibrations[i].green->width, fcal);
2606 fwrite (&(scanner->calibrations[i].blue->width), sizeof (SANE_Int), 1,
2608 fwrite (&(scanner->calibrations[i].blue->white_level),
2610 fwrite (scanner->calibrations[i].blue->k_white, sizeof (unsigned int),
2611 scanner->calibrations[i].blue->width, fcal);
2612 fwrite (scanner->calibrations[i].blue->k_black, sizeof (unsigned int),
2613 scanner->calibrations[i].blue->width, fcal);
2614 fwrite (scanner->calibrations[i].blue->white_line, sizeof (double),
2615 scanner->calibrations[i].blue->width, fcal);
2616 fwrite (scanner->calibrations[i].blue->black_line, sizeof (double),
2617 scanner->calibrations[i].blue->width, fcal);
2619 if (scanner->calibrations[i].gray != NULL)
2621 fwrite (&(scanner->calibrations[i].gray->width), sizeof (SANE_Int),
2623 fwrite (&(scanner->calibrations[i].gray->white_level),
2625 fwrite (scanner->calibrations[i].gray->k_white,
2626 sizeof (unsigned int), scanner->calibrations[i].gray->width,
2628 fwrite (scanner->calibrations[i].gray->k_black,
2629 sizeof (unsigned int), scanner->calibrations[i].gray->width,
2631 fwrite (scanner->calibrations[i].gray->white_line, sizeof (double),
2632 scanner->calibrations[i].gray->width, fcal);
2633 fwrite (scanner->calibrations[i].gray->black_line, sizeof (double),
2634 scanner->calibrations[i].gray->width, fcal);
2648 gt68xx_read_calibration (GT68xx_Scanner * scanner)
2655 scanner->calibrated = SANE_FALSE;
2656 fname = gt68xx_calibration_file (scanner);
2671 fread (&(scanner->afe_params), sizeof (GT68xx_AFE_Parameters), 1, fcal);
2672 fread (&(scanner->exposure_params), sizeof (GT68xx_Exposure_Parameters), 1,
2677 fread (&(scanner->calibrations[i].dpi), sizeof (SANE_Int), 1, fcal);
2678 while (!feof (fcal) && scanner->calibrations[i].dpi > 0)
2680 fread (&(scanner->calibrations[i].pixel_x0), sizeof (SANE_Int), 1,
2685 gt68xx_calibrator_new (width, level, &(scanner->calibrations[i].red));
2686 fread (scanner->calibrations[i].red->k_white, sizeof (unsigned int),
2688 fread (scanner->calibrations[i].red->k_black, sizeof (unsigned int),
2690 fread (scanner->calibrations[i].red->white_line, sizeof (double), width,
2692 fread (scanner->calibrations[i].red->black_line, sizeof (double), width,
2697 gt68xx_calibrator_new (width, level, &(scanner->calibrations[i].green));
2698 fread (scanner->calibrations[i].green->k_white, sizeof (unsigned int),
2700 fread (scanner->calibrations[i].green->k_black, sizeof (unsigned int),
2702 fread (scanner->calibrations[i].green->white_line, sizeof (double),
2704 fread (scanner->calibrations[i].green->black_line, sizeof (double),
2709 gt68xx_calibrator_new (width, level, &(scanner->calibrations[i].blue));
2710 fread (scanner->calibrations[i].blue->k_white, sizeof (unsigned int),
2712 fread (scanner->calibrations[i].blue->k_black, sizeof (unsigned int),
2714 fread (scanner->calibrations[i].blue->white_line, sizeof (double),
2716 fread (scanner->calibrations[i].blue->black_line, sizeof (double),
2724 &(scanner->calibrations[i].gray));
2725 fread (scanner->calibrations[i].gray->k_white,
2727 fread (scanner->calibrations[i].gray->k_black,
2729 fread (scanner->calibrations[i].gray->white_line, sizeof (double),
2731 fread (scanner->calibrations[i].gray->black_line, sizeof (double),
2736 fread (&(scanner->calibrations[i].dpi), sizeof (SANE_Int), 1, fcal);
2742 scanner->val[OPT_QUALITY_CAL].w = SANE_TRUE;
2743 scanner->val[OPT_NEED_CALIBRATION_SW].w = SANE_FALSE;
2744 scanner->calibrated = SANE_TRUE;