• Home
  • Raw
  • Download

Lines Matching full:dev

170   Sceptre_Scanner *dev;  in sceptre_init()  local
175 dev = malloc (sizeof (Sceptre_Scanner)); in sceptre_init()
176 if (dev == NULL) in sceptre_init()
181 memset (dev, 0, sizeof (Sceptre_Scanner)); in sceptre_init()
184 dev->buffer_size = 64 * 1024; in sceptre_init()
185 dev->buffer = malloc (dev->buffer_size); in sceptre_init()
186 if (dev->buffer == NULL) in sceptre_init()
188 free (dev); in sceptre_init()
192 dev->sfd = -1; in sceptre_init()
196 return (dev); in sceptre_init()
201 sceptre_close (Sceptre_Scanner * dev) in sceptre_close() argument
205 if (dev->sfd != -1) in sceptre_close()
207 sanei_scsi_close (dev->sfd); in sceptre_close()
208 dev->sfd = -1; in sceptre_close()
216 sceptre_free (Sceptre_Scanner * dev) in sceptre_free() argument
222 if (dev == NULL) in sceptre_free()
225 sceptre_close (dev); in sceptre_free()
226 if (dev->devicename) in sceptre_free()
228 free (dev->devicename); in sceptre_free()
230 if (dev->buffer) in sceptre_free()
232 free (dev->buffer); in sceptre_free()
234 if (dev->image) in sceptre_free()
236 free (dev->image); in sceptre_free()
240 if (dev->opt[i].type == SANE_TYPE_STRING && dev->val[i].s) in sceptre_free()
242 free (dev->val[i].s); in sceptre_free()
246 free (dev); in sceptre_free()
253 sceptre_identify_scanner (Sceptre_Scanner * dev) in sceptre_identify_scanner() argument
264 status = sanei_scsi_cmd2 (dev->sfd, cdb.data, cdb.len, in sceptre_identify_scanner()
265 NULL, 0, dev->buffer, &size); in sceptre_identify_scanner()
282 dev->scsi_type = dev->buffer[0] & 0x1f; in sceptre_identify_scanner()
283 memcpy (dev->scsi_vendor, dev->buffer + 0x08, 0x08); in sceptre_identify_scanner()
284 dev->scsi_vendor[0x08] = 0; in sceptre_identify_scanner()
285 memcpy (dev->scsi_product, dev->buffer + 0x10, 0x010); in sceptre_identify_scanner()
286 dev->scsi_product[0x10] = 0; in sceptre_identify_scanner()
287 memcpy (dev->scsi_version, dev->buffer + 0x20, 0x04); in sceptre_identify_scanner()
288 dev->scsi_version[0x04] = 0; in sceptre_identify_scanner()
291 dev->scsi_vendor, dev->scsi_product, dev->scsi_version); in sceptre_identify_scanner()
297 if (dev->scsi_type == scanners[i].scsi_type && in sceptre_identify_scanner()
298 strcmp (dev->scsi_vendor, scanners[i].scsi_vendor) == 0 && in sceptre_identify_scanner()
299 strcmp (dev->scsi_product, scanners[i].scsi_product) == 0) in sceptre_identify_scanner()
304 dev->scnum = i; in sceptre_identify_scanner()
317 sceptre_get_status (Sceptre_Scanner * dev, size_t * data_left) in sceptre_get_status() argument
328 status = sanei_scsi_cmd2 (dev->sfd, cdb.data, cdb.len, in sceptre_get_status()
329 NULL, 0, dev->buffer, &size); in sceptre_get_status()
346 hexdump (DBG_info2, "GET BUFFER STATUS result", dev->buffer, 16); in sceptre_get_status()
350 *data_left = B32TOI (&dev->buffer[8]); in sceptre_get_status()
352 if (dev->raster_real == 0) in sceptre_get_status()
355 dev->raster_real = B16TOI (&dev->buffer[12]) * 3; in sceptre_get_status()
356 dev->params.lines = B16TOI (&dev->buffer[12]); in sceptre_get_status()
357 dev->params.pixels_per_line = B16TOI (&dev->buffer[14]); in sceptre_get_status()
378 * dev->buffer and write the output in dev->image. size_in the the
379 * length of the valid data in dev->buffer.
382 sceptre_adjust_raster (Sceptre_Scanner * dev, size_t size_in) in sceptre_adjust_raster() argument
384 int nb_rasters; /* number of rasters in dev->buffer */ in sceptre_adjust_raster()
393 assert (dev->scan_mode == SCEPTRE_COLOR); in sceptre_adjust_raster()
394 assert ((size_in % dev->params.bytes_per_line) == 0); in sceptre_adjust_raster()
406 nb_rasters = size_in / dev->raster_size; in sceptre_adjust_raster()
420 if (dev->raster_num < dev->color_shift) in sceptre_adjust_raster()
423 line = dev->raster_num; in sceptre_adjust_raster()
425 else if (dev->raster_num < (3 * dev->color_shift)) in sceptre_adjust_raster()
428 colour = (dev->raster_num - dev->color_shift) % 2; in sceptre_adjust_raster()
432 line = (dev->raster_num - dev->color_shift) / 2; in sceptre_adjust_raster()
437 line = (dev->raster_num + dev->color_shift) / 2; in sceptre_adjust_raster()
440 else if (dev->raster_num >= dev->raster_real - dev->color_shift) in sceptre_adjust_raster()
444 line = dev->line; in sceptre_adjust_raster()
446 else if (dev->raster_num >= dev->raster_real - 3 * dev->color_shift) in sceptre_adjust_raster()
450 (dev->raster_real - dev->raster_num - dev->color_shift) % 2 + 1; in sceptre_adjust_raster()
454 line = dev->line + dev->color_shift; in sceptre_adjust_raster()
459 line = dev->line; in sceptre_adjust_raster()
464 colour = (dev->raster_num - 3 * dev->color_shift) % 3; in sceptre_adjust_raster()
469 line = (dev->raster_num + 3 * dev->color_shift) / 3; in sceptre_adjust_raster()
473 line = dev->raster_num / 3; in sceptre_adjust_raster()
477 line = (dev->raster_num - 3 * dev->color_shift) / 3; in sceptre_adjust_raster()
483 line -= dev->line; in sceptre_adjust_raster()
485 offset = dev->image_end + line * dev->params.bytes_per_line; in sceptre_adjust_raster()
487 assert (offset <= (dev->image_size - dev->raster_size)); in sceptre_adjust_raster()
492 unsigned char *src = dev->buffer + raster * dev->raster_size; in sceptre_adjust_raster()
493 unsigned char *dest = dev->image + offset + colour; in sceptre_adjust_raster()
495 for (i = 0; i < dev->raster_size; i++) in sceptre_adjust_raster()
506 dev->line++; in sceptre_adjust_raster()
507 dev->image_end += dev->params.bytes_per_line; in sceptre_adjust_raster()
510 dev->raster_num++; in sceptre_adjust_raster()
532 Sceptre_Scanner *dev; in attach_scanner() local
541 for (dev = first_dev; dev; dev = dev->next) in attach_scanner()
543 if (strcmp (dev->sane.name, devicename) == 0) in attach_scanner()
547 *devp = dev; in attach_scanner()
555 dev = sceptre_init (); in attach_scanner()
556 if (dev == NULL) in attach_scanner()
564 if (sanei_scsi_open (devicename, &sfd, sceptre_sense_handler, dev) != 0) in attach_scanner()
567 sceptre_free (dev); in attach_scanner()
572 dev->devicename = strdup (devicename); in attach_scanner()
573 dev->sfd = sfd; in attach_scanner()
576 if (sceptre_identify_scanner (dev) == SANE_FALSE) in attach_scanner()
580 sceptre_free (dev); in attach_scanner()
584 sceptre_close (dev); in attach_scanner()
587 dev->sane.name = dev->devicename; in attach_scanner()
588 dev->sane.vendor = scanners[dev->scnum].real_vendor; in attach_scanner()
589 dev->sane.model = scanners[dev->scnum].real_product; in attach_scanner()
590 dev->sane.type = SANE_I18N ("flatbed scanner"); in attach_scanner()
592 dev->resolution_range.min = SANE_FIX (50); in attach_scanner()
593 dev->resolution_range.max = SANE_FIX (1200); in attach_scanner()
594 dev->resolution_range.quant = SANE_FIX (1); in attach_scanner()
612 dev->x_range.min = SANE_FIX (0); in attach_scanner()
613 dev->x_range.max = SANE_FIX (215.90); /* in mm */ in attach_scanner()
614 dev->x_range.quant = 0; in attach_scanner()
616 dev->y_range.min = SANE_FIX (0); in attach_scanner()
617 dev->y_range.max = SANE_FIX (297.14); /* in mm */ in attach_scanner()
618 dev->y_range.quant = SANE_FIX (0); in attach_scanner()
621 dev->next = first_dev; in attach_scanner()
622 first_dev = dev; in attach_scanner()
626 *devp = dev; in attach_scanner()
637 attach_one (const char *dev) in attach_one() argument
639 attach_scanner (dev, NULL); in attach_one()
645 sceptre_init_options (Sceptre_Scanner * dev) in sceptre_init_options() argument
652 memset (dev->opt, 0, sizeof (dev->opt)); in sceptre_init_options()
653 memset (dev->val, 0, sizeof (dev->val)); in sceptre_init_options()
657 dev->opt[i].size = sizeof (SANE_Word); in sceptre_init_options()
658 dev->opt[i].cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT; in sceptre_init_options()
662 dev->opt[OPT_NUM_OPTS].name = SANE_NAME_NUM_OPTIONS; in sceptre_init_options()
663 dev->opt[OPT_NUM_OPTS].title = SANE_TITLE_NUM_OPTIONS; in sceptre_init_options()
664 dev->opt[OPT_NUM_OPTS].desc = SANE_DESC_NUM_OPTIONS; in sceptre_init_options()
665 dev->opt[OPT_NUM_OPTS].type = SANE_TYPE_INT; in sceptre_init_options()
666 dev->opt[OPT_NUM_OPTS].cap = SANE_CAP_SOFT_DETECT; in sceptre_init_options()
667 dev->val[OPT_NUM_OPTS].w = OPT_NUM_OPTIONS; in sceptre_init_options()
670 dev->opt[OPT_MODE_GROUP].title = SANE_I18N ("Scan Mode"); in sceptre_init_options()
671 dev->opt[OPT_MODE_GROUP].desc = ""; /* not valid for a group */ in sceptre_init_options()
672 dev->opt[OPT_MODE_GROUP].type = SANE_TYPE_GROUP; in sceptre_init_options()
673 dev->opt[OPT_MODE_GROUP].cap = 0; in sceptre_init_options()
674 dev->opt[OPT_MODE_GROUP].size = 0; in sceptre_init_options()
675 dev->opt[OPT_MODE_GROUP].constraint_type = SANE_CONSTRAINT_NONE; in sceptre_init_options()
678 dev->opt[OPT_MODE].name = SANE_NAME_SCAN_MODE; in sceptre_init_options()
679 dev->opt[OPT_MODE].title = SANE_TITLE_SCAN_MODE; in sceptre_init_options()
680 dev->opt[OPT_MODE].desc = SANE_DESC_SCAN_MODE; in sceptre_init_options()
681 dev->opt[OPT_MODE].type = SANE_TYPE_STRING; in sceptre_init_options()
682 dev->opt[OPT_MODE].size = 30; /* should define yet another max_string_size() */ in sceptre_init_options()
683 dev->opt[OPT_MODE].constraint_type = SANE_CONSTRAINT_STRING_LIST; in sceptre_init_options()
684 dev->opt[OPT_MODE].constraint.string_list = in sceptre_init_options()
686 dev->val[OPT_MODE].s = (SANE_Char *) strdup (scan_mode_list[0]); in sceptre_init_options()
689 dev->opt[OPT_RESOLUTION].name = SANE_NAME_SCAN_RESOLUTION; in sceptre_init_options()
690 dev->opt[OPT_RESOLUTION].title = SANE_TITLE_SCAN_RESOLUTION; in sceptre_init_options()
691 dev->opt[OPT_RESOLUTION].desc = SANE_DESC_SCAN_RESOLUTION; in sceptre_init_options()
692 dev->opt[OPT_RESOLUTION].type = SANE_TYPE_INT; in sceptre_init_options()
693 dev->opt[OPT_RESOLUTION].unit = SANE_UNIT_DPI; in sceptre_init_options()
694 dev->opt[OPT_RESOLUTION].constraint_type = SANE_CONSTRAINT_WORD_LIST; in sceptre_init_options()
695 dev->opt[OPT_RESOLUTION].constraint.word_list = resolutions_list; in sceptre_init_options()
696 dev->val[OPT_RESOLUTION].w = 150; in sceptre_init_options()
699 dev->opt[OPT_GEOMETRY_GROUP].title = SANE_I18N ("Geometry"); in sceptre_init_options()
700 dev->opt[OPT_GEOMETRY_GROUP].desc = ""; /* not valid for a group */ in sceptre_init_options()
701 dev->opt[OPT_GEOMETRY_GROUP].type = SANE_TYPE_GROUP; in sceptre_init_options()
702 dev->opt[OPT_GEOMETRY_GROUP].cap = SANE_CAP_ADVANCED; in sceptre_init_options()
703 dev->opt[OPT_GEOMETRY_GROUP].size = 0; in sceptre_init_options()
704 dev->opt[OPT_GEOMETRY_GROUP].constraint_type = SANE_CONSTRAINT_NONE; in sceptre_init_options()
707 dev->opt[OPT_TL_X].name = SANE_NAME_SCAN_TL_X; in sceptre_init_options()
708 dev->opt[OPT_TL_X].title = SANE_TITLE_SCAN_TL_X; in sceptre_init_options()
709 dev->opt[OPT_TL_X].desc = SANE_DESC_SCAN_TL_X; in sceptre_init_options()
710 dev->opt[OPT_TL_X].type = SANE_TYPE_FIXED; in sceptre_init_options()
711 dev->opt[OPT_TL_X].unit = SANE_UNIT_MM; in sceptre_init_options()
712 dev->opt[OPT_TL_X].constraint_type = SANE_CONSTRAINT_RANGE; in sceptre_init_options()
713 dev->opt[OPT_TL_X].constraint.range = &(dev->x_range); in sceptre_init_options()
714 dev->val[OPT_TL_X].w = dev->x_range.min; in sceptre_init_options()
717 dev->opt[OPT_TL_Y].name = SANE_NAME_SCAN_TL_Y; in sceptre_init_options()
718 dev->opt[OPT_TL_Y].title = SANE_TITLE_SCAN_TL_Y; in sceptre_init_options()
719 dev->opt[OPT_TL_Y].desc = SANE_DESC_SCAN_TL_Y; in sceptre_init_options()
720 dev->opt[OPT_TL_Y].type = SANE_TYPE_FIXED; in sceptre_init_options()
721 dev->opt[OPT_TL_Y].unit = SANE_UNIT_MM; in sceptre_init_options()
722 dev->opt[OPT_TL_Y].constraint_type = SANE_CONSTRAINT_RANGE; in sceptre_init_options()
723 dev->opt[OPT_TL_Y].constraint.range = &(dev->y_range); in sceptre_init_options()
724 dev->val[OPT_TL_Y].w = dev->y_range.min; in sceptre_init_options()
727 dev->opt[OPT_BR_X].name = SANE_NAME_SCAN_BR_X; in sceptre_init_options()
728 dev->opt[OPT_BR_X].title = SANE_TITLE_SCAN_BR_X; in sceptre_init_options()
729 dev->opt[OPT_BR_X].desc = SANE_DESC_SCAN_BR_X; in sceptre_init_options()
730 dev->opt[OPT_BR_X].type = SANE_TYPE_FIXED; in sceptre_init_options()
731 dev->opt[OPT_BR_X].unit = SANE_UNIT_MM; in sceptre_init_options()
732 dev->opt[OPT_BR_X].constraint_type = SANE_CONSTRAINT_RANGE; in sceptre_init_options()
733 dev->opt[OPT_BR_X].constraint.range = &(dev->x_range); in sceptre_init_options()
734 dev->val[OPT_BR_X].w = dev->x_range.max; in sceptre_init_options()
737 dev->opt[OPT_BR_Y].name = SANE_NAME_SCAN_BR_Y; in sceptre_init_options()
738 dev->opt[OPT_BR_Y].title = SANE_TITLE_SCAN_BR_Y; in sceptre_init_options()
739 dev->opt[OPT_BR_Y].desc = SANE_DESC_SCAN_BR_Y; in sceptre_init_options()
740 dev->opt[OPT_BR_Y].type = SANE_TYPE_FIXED; in sceptre_init_options()
741 dev->opt[OPT_BR_Y].unit = SANE_UNIT_MM; in sceptre_init_options()
742 dev->opt[OPT_BR_Y].constraint_type = SANE_CONSTRAINT_RANGE; in sceptre_init_options()
743 dev->opt[OPT_BR_Y].constraint.range = &(dev->y_range); in sceptre_init_options()
744 dev->val[OPT_BR_Y].w = dev->y_range.max; in sceptre_init_options()
747 dev->opt[OPT_ENHANCEMENT_GROUP].title = SANE_I18N ("Enhancement"); in sceptre_init_options()
748 dev->opt[OPT_ENHANCEMENT_GROUP].desc = ""; /* not valid for a group */ in sceptre_init_options()
749 dev->opt[OPT_ENHANCEMENT_GROUP].type = SANE_TYPE_GROUP; in sceptre_init_options()
750 dev->opt[OPT_ENHANCEMENT_GROUP].cap = 0; in sceptre_init_options()
751 dev->opt[OPT_ENHANCEMENT_GROUP].size = 0; in sceptre_init_options()
752 dev->opt[OPT_ENHANCEMENT_GROUP].constraint_type = SANE_CONSTRAINT_NONE; in sceptre_init_options()
755 dev->opt[OPT_CUSTOM_GAMMA].name = SANE_NAME_CUSTOM_GAMMA; in sceptre_init_options()
756 dev->opt[OPT_CUSTOM_GAMMA].title = SANE_TITLE_CUSTOM_GAMMA; in sceptre_init_options()
757 dev->opt[OPT_CUSTOM_GAMMA].desc = SANE_DESC_CUSTOM_GAMMA; in sceptre_init_options()
758 dev->opt[OPT_CUSTOM_GAMMA].type = SANE_TYPE_BOOL; in sceptre_init_options()
759 dev->opt[OPT_CUSTOM_GAMMA].cap |= SANE_CAP_INACTIVE; in sceptre_init_options()
760 dev->val[OPT_CUSTOM_GAMMA].w = SANE_FALSE; in sceptre_init_options()
763 dev->opt[OPT_GAMMA_VECTOR_R].name = SANE_NAME_GAMMA_VECTOR_R; in sceptre_init_options()
764 dev->opt[OPT_GAMMA_VECTOR_R].title = SANE_TITLE_GAMMA_VECTOR_R; in sceptre_init_options()
765 dev->opt[OPT_GAMMA_VECTOR_R].desc = SANE_DESC_GAMMA_VECTOR_R; in sceptre_init_options()
766 dev->opt[OPT_GAMMA_VECTOR_R].type = SANE_TYPE_INT; in sceptre_init_options()
767 dev->opt[OPT_GAMMA_VECTOR_R].cap |= SANE_CAP_INACTIVE; in sceptre_init_options()
768 dev->opt[OPT_GAMMA_VECTOR_R].unit = SANE_UNIT_NONE; in sceptre_init_options()
769 dev->opt[OPT_GAMMA_VECTOR_R].size = GAMMA_LENGTH * sizeof (SANE_Word); in sceptre_init_options()
770 dev->opt[OPT_GAMMA_VECTOR_R].constraint_type = SANE_CONSTRAINT_RANGE; in sceptre_init_options()
771 dev->opt[OPT_GAMMA_VECTOR_R].constraint.range = &gamma_range; in sceptre_init_options()
772 dev->val[OPT_GAMMA_VECTOR_R].wa = dev->gamma_R; in sceptre_init_options()
775 dev->opt[OPT_GAMMA_VECTOR_G].name = SANE_NAME_GAMMA_VECTOR_G; in sceptre_init_options()
776 dev->opt[OPT_GAMMA_VECTOR_G].title = SANE_TITLE_GAMMA_VECTOR_G; in sceptre_init_options()
777 dev->opt[OPT_GAMMA_VECTOR_G].desc = SANE_DESC_GAMMA_VECTOR_G; in sceptre_init_options()
778 dev->opt[OPT_GAMMA_VECTOR_G].type = SANE_TYPE_INT; in sceptre_init_options()
779 dev->opt[OPT_GAMMA_VECTOR_G].cap |= SANE_CAP_INACTIVE; in sceptre_init_options()
780 dev->opt[OPT_GAMMA_VECTOR_G].unit = SANE_UNIT_NONE; in sceptre_init_options()
781 dev->opt[OPT_GAMMA_VECTOR_G].size = GAMMA_LENGTH * sizeof (SANE_Word); in sceptre_init_options()
782 dev->opt[OPT_GAMMA_VECTOR_G].constraint_type = SANE_CONSTRAINT_RANGE; in sceptre_init_options()
783 dev->opt[OPT_GAMMA_VECTOR_G].constraint.range = &gamma_range; in sceptre_init_options()
784 dev->val[OPT_GAMMA_VECTOR_G].wa = dev->gamma_G; in sceptre_init_options()
787 dev->opt[OPT_GAMMA_VECTOR_B].name = SANE_NAME_GAMMA_VECTOR_B; in sceptre_init_options()
788 dev->opt[OPT_GAMMA_VECTOR_B].title = SANE_TITLE_GAMMA_VECTOR_B; in sceptre_init_options()
789 dev->opt[OPT_GAMMA_VECTOR_B].desc = SANE_DESC_GAMMA_VECTOR_B; in sceptre_init_options()
790 dev->opt[OPT_GAMMA_VECTOR_B].type = SANE_TYPE_INT; in sceptre_init_options()
791 dev->opt[OPT_GAMMA_VECTOR_B].cap |= SANE_CAP_INACTIVE; in sceptre_init_options()
792 dev->opt[OPT_GAMMA_VECTOR_B].unit = SANE_UNIT_NONE; in sceptre_init_options()
793 dev->opt[OPT_GAMMA_VECTOR_B].size = GAMMA_LENGTH * sizeof (SANE_Word); in sceptre_init_options()
794 dev->opt[OPT_GAMMA_VECTOR_B].constraint_type = SANE_CONSTRAINT_RANGE; in sceptre_init_options()
795 dev->opt[OPT_GAMMA_VECTOR_B].constraint.range = &gamma_range; in sceptre_init_options()
796 dev->val[OPT_GAMMA_VECTOR_B].wa = dev->gamma_B; in sceptre_init_options()
799 dev->opt[OPT_THRESHOLD].name = SANE_NAME_THRESHOLD; in sceptre_init_options()
800 dev->opt[OPT_THRESHOLD].title = SANE_TITLE_THRESHOLD; in sceptre_init_options()
801 dev->opt[OPT_THRESHOLD].desc = SANE_DESC_THRESHOLD; in sceptre_init_options()
802 dev->opt[OPT_THRESHOLD].type = SANE_TYPE_INT; in sceptre_init_options()
803 dev->opt[OPT_THRESHOLD].unit = SANE_UNIT_NONE; in sceptre_init_options()
804 dev->opt[OPT_THRESHOLD].size = sizeof (SANE_Int); in sceptre_init_options()
805 dev->opt[OPT_THRESHOLD].cap |= SANE_CAP_INACTIVE; in sceptre_init_options()
806 dev->opt[OPT_THRESHOLD].constraint_type = SANE_CONSTRAINT_RANGE; in sceptre_init_options()
807 dev->opt[OPT_THRESHOLD].constraint.range = &threshold_range; in sceptre_init_options()
808 dev->val[OPT_THRESHOLD].w = 128; in sceptre_init_options()
811 dev->opt[OPT_HALFTONE_PATTERN].name = SANE_NAME_HALFTONE_PATTERN; in sceptre_init_options()
812 dev->opt[OPT_HALFTONE_PATTERN].title = SANE_TITLE_HALFTONE_PATTERN; in sceptre_init_options()
813 dev->opt[OPT_HALFTONE_PATTERN].desc = SANE_DESC_HALFTONE_PATTERN; in sceptre_init_options()
814 dev->opt[OPT_HALFTONE_PATTERN].type = SANE_TYPE_INT; in sceptre_init_options()
815 dev->opt[OPT_HALFTONE_PATTERN].size = sizeof (SANE_Int); in sceptre_init_options()
816 dev->opt[OPT_HALFTONE_PATTERN].cap |= SANE_CAP_INACTIVE; in sceptre_init_options()
817 dev->opt[OPT_HALFTONE_PATTERN].constraint_type = SANE_CONSTRAINT_RANGE; in sceptre_init_options()
818 dev->opt[OPT_HALFTONE_PATTERN].constraint.range = &halftone_range; in sceptre_init_options()
819 dev->val[OPT_HALFTONE_PATTERN].w = 1; in sceptre_init_options()
822 dev->opt[OPT_PREVIEW].name = SANE_NAME_PREVIEW; in sceptre_init_options()
823 dev->opt[OPT_PREVIEW].title = SANE_TITLE_PREVIEW; in sceptre_init_options()
824 dev->opt[OPT_PREVIEW].desc = SANE_DESC_PREVIEW; in sceptre_init_options()
825 dev->opt[OPT_PREVIEW].type = SANE_TYPE_BOOL; in sceptre_init_options()
826 dev->opt[OPT_PREVIEW].cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT; in sceptre_init_options()
827 dev->val[OPT_PREVIEW].w = SANE_FALSE; in sceptre_init_options()
831 sane_control_option (dev, OPT_MODE, SANE_ACTION_SET_VALUE, in sceptre_init_options()
843 sceptre_wait_scanner (Sceptre_Scanner * dev) in sceptre_wait_scanner() argument
864 sanei_scsi_cmd2 (dev->sfd, cdb.data, cdb.len, in sceptre_wait_scanner()
865 NULL, 0, dev->buffer, &size); in sceptre_wait_scanner()
877 if (dev->buffer[0] != 0x00) in sceptre_wait_scanner()
894 sceptre_do_diag (Sceptre_Scanner * dev) in sceptre_do_diag() argument
908 status = sanei_scsi_cmd2 (dev->sfd, cdb.data, cdb.len, NULL, 0, NULL, NULL); in sceptre_do_diag()
922 status = sanei_scsi_cmd2 (dev->sfd, cdb.data, cdb.len, in sceptre_do_diag()
923 NULL, 0, dev->buffer, &size); in sceptre_do_diag()
940 sceptre_set_mode (Sceptre_Scanner * dev) in sceptre_set_mode() argument
951 status = sanei_scsi_cmd2 (dev->sfd, cdb.data, cdb.len, NULL, 0, NULL, NULL); in sceptre_set_mode()
960 sceptre_scan (Sceptre_Scanner * dev) in sceptre_scan() argument
969 status = sanei_scsi_cmd2 (dev->sfd, cdb.data, cdb.len, NULL, 0, NULL, NULL); in sceptre_scan()
978 sceptre_set_window (Sceptre_Scanner * dev) in sceptre_set_window() argument
996 Ito16 (dev->resolution, &window[10]); in sceptre_set_window()
997 Ito16 (dev->resolution, &window[12]); in sceptre_set_window()
1000 Ito32 (dev->x_tl, &window[14]); in sceptre_set_window()
1001 Ito32 (dev->y_tl, &window[18]); in sceptre_set_window()
1004 Ito32 (dev->width, &window[22]); in sceptre_set_window()
1005 Ito32 (dev->length, &window[26]); in sceptre_set_window()
1008 switch (dev->scan_mode) in sceptre_set_window()
1011 window[31] = dev->val[OPT_THRESHOLD].w; in sceptre_set_window()
1020 window[36] = dev->val[OPT_HALFTONE_PATTERN].w; in sceptre_set_window()
1043 status = sanei_scsi_cmd2 (dev->sfd, cdb.data, cdb.len, in sceptre_set_window()
1053 sceptre_fill_image (Sceptre_Scanner * dev) in sceptre_fill_image() argument
1062 assert (dev->image_begin == dev->image_end); in sceptre_fill_image()
1063 assert (dev->real_bytes_left > 0); in sceptre_fill_image()
1071 memmove (dev->image, dev->image + dev->image_begin, dev->raster_ahead); in sceptre_fill_image()
1072 dev->image_begin = 0; in sceptre_fill_image()
1073 dev->image_end = 0; in sceptre_fill_image()
1075 while (dev->real_bytes_left) in sceptre_fill_image()
1078 if ((status = sceptre_get_status (dev, &data_left)) != SANE_STATUS_GOOD) in sceptre_fill_image()
1087 if (size > dev->real_bytes_left) in sceptre_fill_image()
1089 size = dev->real_bytes_left; in sceptre_fill_image()
1091 if (size > dev->image_size - dev->raster_ahead - dev->image_end) in sceptre_fill_image()
1093 size = dev->image_size - dev->raster_ahead - dev->image_end; in sceptre_fill_image()
1095 if (size > dev->buffer_size) in sceptre_fill_image()
1097 size = dev->buffer_size; in sceptre_fill_image()
1101 size = size - (size % dev->params.bytes_per_line); in sceptre_fill_image()
1107 assert (dev->image_end != 0); in sceptre_fill_image()
1112 (long) size, dev->params.bytes_per_line); in sceptre_fill_image()
1118 status = sanei_scsi_cmd2 (dev->sfd, cdb.data, cdb.len, in sceptre_fill_image()
1119 NULL, 0, dev->buffer, &size); in sceptre_fill_image()
1129 (long)dev->real_bytes_left); in sceptre_fill_image()
1131 switch (dev->scan_mode) in sceptre_fill_image()
1134 sceptre_adjust_raster (dev, size); in sceptre_fill_image()
1140 unsigned char *src = dev->buffer; in sceptre_fill_image()
1141 unsigned char *dest = dev->image + dev->image_end; in sceptre_fill_image()
1149 dev->image_end += size; in sceptre_fill_image()
1153 memcpy (dev->image + dev->image_end, dev->buffer, size); in sceptre_fill_image()
1154 dev->image_end += size; in sceptre_fill_image()
1157 dev->real_bytes_left -= size; in sceptre_fill_image()
1169 sceptre_copy_raw_to_frontend (Sceptre_Scanner * dev, SANE_Byte * buf, in sceptre_copy_raw_to_frontend() argument
1174 size = dev->image_end - dev->image_begin; in sceptre_copy_raw_to_frontend()
1181 memcpy (buf, dev->image + dev->image_begin, size); in sceptre_copy_raw_to_frontend()
1183 dev->image_begin += size; in sceptre_copy_raw_to_frontend()
1188 do_cancel (Sceptre_Scanner * dev) in do_cancel() argument
1192 if (dev->scanning == SANE_TRUE) in do_cancel()
1196 dev->x_tl = 0; in do_cancel()
1197 dev->x_tl = 0; in do_cancel()
1198 dev->width = 0; in do_cancel()
1199 dev->length = 0; in do_cancel()
1200 sceptre_set_window (dev); in do_cancel()
1201 sceptre_scan (dev); in do_cancel()
1203 sceptre_close (dev); in do_cancel()
1206 dev->scanning = SANE_FALSE; in do_cancel()
1250 sceptre_send_gamma (Sceptre_Scanner * dev) in sceptre_send_gamma() argument
1272 if (dev->val[OPT_CUSTOM_GAMMA].w) in sceptre_send_gamma()
1277 param.gamma_R[i] = dev->gamma_R[i]; in sceptre_send_gamma()
1278 param.gamma_G[i] = dev->gamma_G[i]; in sceptre_send_gamma()
1279 param.gamma_B[i] = dev->gamma_B[i]; in sceptre_send_gamma()
1294 status = sanei_scsi_cmd2 (dev->sfd, cdb.data, cdb.len, in sceptre_send_gamma()
1329 /* default to /dev/scanner instead of insisting on config file */ in sane_init()
1330 attach_scanner ("/dev/scanner", 0); in sane_init()
1356 Sceptre_Scanner *dev; in sane_get_devices() local
1369 for (dev = first_dev; i < num_devices; dev = dev->next) in sane_get_devices()
1370 devlist[i++] = &dev->sane; in sane_get_devices()
1383 Sceptre_Scanner *dev; in sane_open() local
1393 for (dev = first_dev; dev; dev = dev->next) in sane_open()
1395 if (strcmp (dev->sane.name, devicename) == 0) in sane_open()
1401 if (!dev) in sane_open()
1403 status = attach_scanner (devicename, &dev); in sane_open()
1413 dev = first_dev; /* empty devicename -> use first device */ in sane_open()
1416 if (!dev) in sane_open()
1423 sceptre_init_options (dev); in sane_open()
1426 memcpy (dev->gamma_R, gamma_init, dev->opt[OPT_GAMMA_VECTOR_R].size); in sane_open()
1427 memcpy (dev->gamma_G, gamma_init, dev->opt[OPT_GAMMA_VECTOR_G].size); in sane_open()
1428 memcpy (dev->gamma_B, gamma_init, dev->opt[OPT_GAMMA_VECTOR_B].size); in sane_open()
1430 *handle = dev; in sane_open()
1440 Sceptre_Scanner *dev = handle; in sane_get_option_descriptor() local
1451 return dev->opt + option; in sane_get_option_descriptor()
1458 Sceptre_Scanner *dev = handle; in sane_control_option() local
1470 if (dev->scanning) in sane_control_option()
1480 cap = dev->opt[option].cap; in sane_control_option()
1503 *(SANE_Word *) val = dev->val[option].w; in sane_control_option()
1508 strcpy (val, dev->val[option].s); in sane_control_option()
1514 memcpy (val, dev->val[option].wa, dev->opt[option].size); in sane_control_option()
1530 status = sanei_constrain_value (dev->opt + option, val, info); in sane_control_option()
1550 dev->val[option].w = *(SANE_Word *) val; in sane_control_option()
1557 dev->val[option].w = *(SANE_Word *) val; in sane_control_option()
1561 free (dev->val[OPT_MODE].s); in sane_control_option()
1562 dev->val[OPT_MODE].s = (SANE_Char *) strdup (val); in sane_control_option()
1565 dev->opt[OPT_THRESHOLD].cap |= SANE_CAP_INACTIVE; in sane_control_option()
1566 dev->opt[OPT_CUSTOM_GAMMA].cap |= SANE_CAP_INACTIVE; in sane_control_option()
1567 dev->opt[OPT_GAMMA_VECTOR_R].cap |= SANE_CAP_INACTIVE; in sane_control_option()
1568 dev->opt[OPT_GAMMA_VECTOR_G].cap |= SANE_CAP_INACTIVE; in sane_control_option()
1569 dev->opt[OPT_GAMMA_VECTOR_B].cap |= SANE_CAP_INACTIVE; in sane_control_option()
1570 dev->opt[OPT_HALFTONE_PATTERN].cap |= SANE_CAP_INACTIVE; in sane_control_option()
1572 if (strcmp (dev->val[OPT_MODE].s, LINEART_STR) == 0) in sane_control_option()
1574 dev->scan_mode = SCEPTRE_LINEART; in sane_control_option()
1575 dev->opt[OPT_THRESHOLD].cap &= ~SANE_CAP_INACTIVE; in sane_control_option()
1577 else if (strcmp (dev->val[OPT_MODE].s, HALFTONE_STR) == 0) in sane_control_option()
1579 dev->scan_mode = SCEPTRE_HALFTONE; in sane_control_option()
1580 dev->opt[OPT_HALFTONE_PATTERN].cap &= ~SANE_CAP_INACTIVE; in sane_control_option()
1582 else if (strcmp (dev->val[OPT_MODE].s, GRAY_STR) == 0) in sane_control_option()
1584 dev->scan_mode = SCEPTRE_GRAYSCALE; in sane_control_option()
1586 else if (strcmp (dev->val[OPT_MODE].s, COLOR_STR) == 0) in sane_control_option()
1588 dev->scan_mode = SCEPTRE_COLOR; in sane_control_option()
1589 dev->opt[OPT_CUSTOM_GAMMA].cap &= ~SANE_CAP_INACTIVE; in sane_control_option()
1590 if (dev->val[OPT_CUSTOM_GAMMA].w) in sane_control_option()
1592 dev->opt[OPT_GAMMA_VECTOR_R].cap &= ~SANE_CAP_INACTIVE; in sane_control_option()
1593 dev->opt[OPT_GAMMA_VECTOR_G].cap &= ~SANE_CAP_INACTIVE; in sane_control_option()
1594 dev->opt[OPT_GAMMA_VECTOR_B].cap &= ~SANE_CAP_INACTIVE; in sane_control_option()
1607 memcpy (dev->val[option].wa, val, dev->opt[option].size); in sane_control_option()
1611 dev->val[OPT_CUSTOM_GAMMA].w = *(SANE_Word *) val; in sane_control_option()
1612 if (dev->val[OPT_CUSTOM_GAMMA].w) in sane_control_option()
1615 dev->opt[OPT_GAMMA_VECTOR_R].cap &= ~SANE_CAP_INACTIVE; in sane_control_option()
1616 dev->opt[OPT_GAMMA_VECTOR_G].cap &= ~SANE_CAP_INACTIVE; in sane_control_option()
1617 dev->opt[OPT_GAMMA_VECTOR_B].cap &= ~SANE_CAP_INACTIVE; in sane_control_option()
1621 dev->opt[OPT_GAMMA_VECTOR_R].cap |= SANE_CAP_INACTIVE; in sane_control_option()
1622 dev->opt[OPT_GAMMA_VECTOR_G].cap |= SANE_CAP_INACTIVE; in sane_control_option()
1623 dev->opt[OPT_GAMMA_VECTOR_B].cap |= SANE_CAP_INACTIVE; in sane_control_option()
1644 Sceptre_Scanner *dev = handle; in sane_get_parameters() local
1649 if (!(dev->scanning)) in sane_get_parameters()
1652 memset (&dev->params, 0, sizeof (SANE_Parameters)); in sane_get_parameters()
1654 if (dev->val[OPT_PREVIEW].w == SANE_TRUE) in sane_get_parameters()
1656 dev->resolution = 30; /* Windows TWAIN does 32 */ in sane_get_parameters()
1657 dev->x_tl = 0; in sane_get_parameters()
1658 dev->y_tl = 0; in sane_get_parameters()
1659 dev->x_br = mmToIlu (SANE_UNFIX (dev->x_range.max)); in sane_get_parameters()
1660 dev->y_br = mmToIlu (SANE_UNFIX (dev->y_range.max)); in sane_get_parameters()
1666 dev->resolution = dev->val[OPT_RESOLUTION].w; in sane_get_parameters()
1668 dev->x_tl = mmToIlu (SANE_UNFIX (dev->val[OPT_TL_X].w)); in sane_get_parameters()
1669 dev->y_tl = mmToIlu (SANE_UNFIX (dev->val[OPT_TL_Y].w)); in sane_get_parameters()
1670 dev->x_br = mmToIlu (SANE_UNFIX (dev->val[OPT_BR_X].w)); in sane_get_parameters()
1671 dev->y_br = mmToIlu (SANE_UNFIX (dev->val[OPT_BR_Y].w)); in sane_get_parameters()
1675 if (dev->x_tl > dev->x_br) in sane_get_parameters()
1678 s = dev->x_tl; in sane_get_parameters()
1679 dev->x_tl = dev->x_br; in sane_get_parameters()
1680 dev->x_br = s; in sane_get_parameters()
1682 if (dev->y_tl > dev->y_br) in sane_get_parameters()
1685 s = dev->y_tl; in sane_get_parameters()
1686 dev->y_tl = dev->y_br; in sane_get_parameters()
1687 dev->y_br = s; in sane_get_parameters()
1690 dev->width = dev->x_br - dev->x_tl; in sane_get_parameters()
1691 dev->length = dev->y_br - dev->y_tl; in sane_get_parameters()
1699 x_dpi = dev->resolution; in sane_get_parameters()
1706 switch (dev->scan_mode) in sane_get_parameters()
1709 dev->params.format = SANE_FRAME_GRAY; in sane_get_parameters()
1710 dev->depth = 1; in sane_get_parameters()
1713 dev->params.format = SANE_FRAME_GRAY; in sane_get_parameters()
1714 dev->depth = 1; in sane_get_parameters()
1717 dev->params.format = SANE_FRAME_GRAY; in sane_get_parameters()
1718 dev->depth = 8; in sane_get_parameters()
1721 dev->params.format = SANE_FRAME_RGB; in sane_get_parameters()
1722 dev->depth = 8; in sane_get_parameters()
1727 dev->params.last_frame = SANE_TRUE; in sane_get_parameters()
1728 dev->params.depth = dev->depth; in sane_get_parameters()
1731 switch (dev->scan_mode) in sane_get_parameters()
1735 dev->params.pixels_per_line = (dev->width * x_dpi) / 600; in sane_get_parameters()
1736 dev->params.pixels_per_line &= ~0x7; /* round down to 8 */ in sane_get_parameters()
1738 dev->params.bytes_per_line = (dev->params.pixels_per_line) / 8; in sane_get_parameters()
1740 dev->params.lines = ((dev->length * dev->resolution) / 600); in sane_get_parameters()
1741 if ((dev->params.lines) * 600 != (dev->length * dev->resolution)) in sane_get_parameters()
1744 dev->params.lines &= ~1; in sane_get_parameters()
1745 dev->params.lines += 2; in sane_get_parameters()
1756 dev->params.pixels_per_line = (dev->width * x_dpi) / 600; in sane_get_parameters()
1757 if (dev->params.pixels_per_line & 1) in sane_get_parameters()
1759 if ((dev->params.pixels_per_line * 600) == (dev->width * x_dpi)) in sane_get_parameters()
1762 dev->params.pixels_per_line--; in sane_get_parameters()
1767 dev->params.pixels_per_line++; in sane_get_parameters()
1771 dev->params.bytes_per_line = dev->params.pixels_per_line; in sane_get_parameters()
1772 if (dev->scan_mode == SCEPTRE_COLOR) in sane_get_parameters()
1773 dev->params.bytes_per_line *= 3; in sane_get_parameters()
1781 dev->params.lines = (dev->length * dev->resolution) / 600; in sane_get_parameters()
1782 dev->params.lines &= ~1; in sane_get_parameters()
1788 if (dev->scan_mode == SCEPTRE_COLOR) in sane_get_parameters()
1791 while (resolutions_list[i] != dev->resolution) in sane_get_parameters()
1795 dev->color_shift = color_shift_list[i]; in sane_get_parameters()
1799 dev->color_shift = 0; in sane_get_parameters()
1802 DBG (DBG_proc, "color_shift = %d\n", dev->color_shift); in sane_get_parameters()
1804 dev->bytes_left = dev->params.lines * dev->params.bytes_per_line; in sane_get_parameters()
1810 *params = (dev->params); in sane_get_parameters()
1821 Sceptre_Scanner *dev = handle; in sane_start() local
1826 if (!(dev->scanning)) in sane_start()
1829 sane_get_parameters (dev, NULL); in sane_start()
1831 if (dev->image) in sane_start()
1833 free (dev->image); in sane_start()
1839 dev->raster_ahead = in sane_start()
1840 (2 * dev->color_shift + 1) * dev->params.bytes_per_line; in sane_start()
1841 dev->image_size = dev->buffer_size + dev->raster_ahead; in sane_start()
1842 dev->image = malloc (dev->image_size); in sane_start()
1843 if (dev->image == NULL) in sane_start()
1847 dev->image_begin = 0; in sane_start()
1848 dev->image_end = 0; in sane_start()
1850 dev->raster_size = dev->params.bytes_per_line / 3; in sane_start()
1851 dev->raster_num = 0; in sane_start()
1852 dev->raster_real = 0; in sane_start()
1853 dev->line = 0; in sane_start()
1857 (dev->devicename, &(dev->sfd), sceptre_sense_handler, dev) != 0) in sane_start()
1864 status = sceptre_wait_scanner (dev); in sane_start()
1867 sceptre_close (dev); in sane_start()
1871 status = sceptre_do_diag (dev); in sane_start()
1874 sceptre_close (dev); in sane_start()
1878 status = sceptre_set_mode (dev); in sane_start()
1881 sceptre_close (dev); in sane_start()
1885 status = sceptre_set_window (dev); in sane_start()
1888 sceptre_close (dev); in sane_start()
1892 status = sceptre_send_gamma (dev); in sane_start()
1895 sceptre_close (dev); in sane_start()
1899 status = sceptre_scan (dev); in sane_start()
1902 sceptre_close (dev); in sane_start()
1906 status = sceptre_get_status (dev, &dev->real_bytes_left); in sane_start()
1909 sceptre_close (dev); in sane_start()
1915 dev->bytes_left = dev->params.bytes_per_line * dev->params.lines; in sane_start()
1917 dev->scanning = SANE_TRUE; in sane_start()
1929 Sceptre_Scanner *dev = handle; in sane_read() local
1937 if (!(dev->scanning)) in sane_read()
1940 return do_cancel (dev); in sane_read()
1943 if (dev->bytes_left <= 0) in sane_read()
1952 if (dev->image_begin == dev->image_end) in sane_read()
1955 status = sceptre_fill_image (dev); in sane_read()
1963 if (dev->image_begin == dev->image_end) in sane_read()
1971 if (size > dev->bytes_left) in sane_read()
1973 size = dev->bytes_left; in sane_read()
1975 sceptre_copy_raw_to_frontend (dev, buf + buf_offset, &size); in sane_read()
1979 dev->bytes_left -= size; in sane_read()
1983 while ((buf_offset != max_len) && dev->bytes_left); in sane_read()
1985 DBG (DBG_info, "sane_read: leave, bytes_left=%ld\n", (long)dev->bytes_left); in sane_read()
1994 Sceptre_Scanner *dev = handle; in sane_set_io_mode() local
1998 if (dev->scanning == SANE_FALSE) in sane_set_io_mode()
2030 Sceptre_Scanner *dev = handle; in sane_cancel() local
2034 do_cancel (dev); in sane_cancel()
2042 Sceptre_Scanner *dev = handle; in sane_close() local
2047 do_cancel (dev); in sane_close()
2048 sceptre_close (dev); in sane_close()
2050 /* Unlink dev. */ in sane_close()
2051 if (first_dev == dev) in sane_close()
2053 first_dev = dev->next; in sane_close()
2058 while (dev_tmp->next && dev_tmp->next != dev) in sane_close()
2068 sceptre_free (dev); in sane_close()